Jump to content
Rpg²S Forum

*New Caterpillar Script v0.9


Alato
 Share

Recommended Posts

New Caterpillar Script v0.9

Descrizione


Caterpillar script alternativo che permette la visualizzazioni di soli 3 personaggi sulla mappa. Ancora da sviluppare bene ma è un estratto da un mio vecchio progetto più ampio quindi non è detto che ci lavorerò ancora sopra. I personaggi evitano la maggior parte degli ostacoli, ma volendo riuscite ad incastrarli abbastanza facilmente.


Autore


Alato



Allegati


File *.txt in basso.
Screen 1-2-3


Istruzioni per l'uso

Incollate il contenuto del file *.txt in una pagina sopra il main.

 

#================================#
# - New Caterpillar Script V0.9  #
#--------------------------------#
# By Alato ~ www.rpg2s.net       #
#================================#


class Game_Temp
  attr_accessor :party_change_flag
  attr_accessor :hp_change_flag
  
  alias temp_initialize initialize
  
  def initialize
    temp_initialize
    @party_change_flag = true
    @hp_change_flag = true
  end
end

class Game_Party
  
  # Modifiche per non fare crashare il gioco
  # quando non ci sono i compagni
  # (caterpillar script)
  
  #sostituiti totalmente add_actor e remove_actor
  
  #--------------------------------------------------------------------------
  # - Aggiunta Eroe
  #     actor_id : ID Eroe
  #--------------------------------------------------------------------------
  def add_actor(actor_id)
    # Acquisizione Eroe
    actor = $game_actors[actor_id]
    # Quando ci sono meno di 4 eroi e l'eroe non è già nel gruppo
    if @actors.size < 4 and not @actors.include?(actor)
      # Aggiungi Eroe
      @actors.push(actor)
      # Aggiornamento Giocatore
      $game_player.refresh
      # Parte aggiunta
      $game_temp.party_change_flag = true
      $game_second_player.refresh
      $game_third_player.refresh
    end
  end
  #--------------------------------------------------------------------------
  # - Rimozione Eroe
  #     actor_id : ID Eroe
  #--------------------------------------------------------------------------
  def remove_actor(actor_id)
    # Rimozione Eroe
    @actors.delete($game_actors[actor_id])
    # Aggiornamento Giocatore
    $game_player.refresh
    # Parte aggiunta
    $game_temp.party_change_flag = true
    $game_second_player.refresh
    $game_third_player.refresh
  end
  
end

class Game_Map_New
  #--------------------------------------------------------------------------
  # - Settaggio Mappa
  #     map_id : ID Mappa
  #--------------------------------------------------------------------------
  def setup(map_id)
    # Setta l'ID della mappa in @map_id
    @map_id = map_id
    # La mappa è presa dal file e settata in @map
    @map = load_data(sprintf("Data/Map%03d.rxdata", @map_id))
    # Settaggio delle Variabili
    tileset = $data_tilesets[@map.tileset_id]
    @tileset_name = tileset.tileset_name
    @autotile_names = tileset.autotile_names
    @panorama_name = tileset.panorama_name
    @panorama_hue = tileset.panorama_hue
    @fog_name = tileset.fog_name
    @fog_hue = tileset.fog_hue
    @fog_opacity = tileset.fog_opacity
    @fog_blend_type = tileset.fog_blend_type
    @fog_zoom = tileset.fog_zoom
    @fog_sx = tileset.fog_sx
    @fog_sy = tileset.fog_sy
    @battleback_name = tileset.battleback_name
    @passages = tileset.passages
    @priorities = tileset.priorities
    @terrain_tags = tileset.terrain_tags
    # Inizializzazione Coordiante
    @display_x = 0
    @display_y = 0
    # Elimina la richiesta di aggiornamento
    @need_refresh = false
    # Settaggio dati degli eventi
    @events = {}
    enemies = []
    enem_events = []
    for i in @map.events.keys
      @events[i] = Game_Event.new(@map_id, @map.events[i])
      if @events[i].nemico?
        id_nemico = @events[i].name.to_i
        enemies.push(id_nemico)
        enem_events.push(i)
      end
    end
    unless enemies.empty?
      $game_troop.setup(enemies, enem_events)
    end
    # Settaggio dati degli eventi couni
    @common_events = {}
    for i in 1...$data_common_events.size
      @common_events[i] = Game_CommonEvent.new(i)
    end
    # Settaggio della nebbia
    @fog_ox = 0
    @fog_oy = 0
    @fog_tone = Tone.new(0, 0, 0, 0)
    @fog_tone_target = Tone.new(0, 0, 0, 0)
    @fog_tone_duration = 0
    @fog_opacity_duration = 0
    @fog_opacity_target = 0
    # Settaggio dello scroll
    @scroll_direction = 2
    @scroll_rest = 0
    @scroll_speed = 4
  end
  
end

############################################
######## Aggiunte a Game_Character #########
############################################
class Game_Character
  alias chara_initialize initialize
  
  def initialize
    chara_initialize
    @allerta = false
  end
  #--------------------------------------------------------------------------
  # - Aggiornamento
  #--------------------------------------------------------------------------
  def update
    if party_member?
      if in_chara_range?(1) == false
        @move_type = 5 # Movimento party
        if in_chara_range?(2) == true
          @move_speed = 4#3
        else
          @move_speed = 4
        end
      elsif $game_player.moving?
        @move_type = 6
      end
    end
    
    if jumping?
      update_jump
    elsif moving?
      update_move
    else
      update_stop
    end
    if @anime_count > 18 - @move_speed * 2
      if not @step_anime and @stop_count > 0
        @pattern = @original_pattern
      else
        @pattern = (@pattern + 1) % 4
      end
      @anime_count = 0
    end
    if @wait_count > 0
      @wait_count -= 1
      return
    end
    if @move_route_forcing
      move_type_custom
      return
    end
    if @starting or lock?
      return
    end
    if @stop_count > (40 - @move_frequency * 2) * (6 - @move_frequency)
      case @move_type
      when 1 
        move_type_random
      when 2 
        move_type_toward_player
      when 3 
        move_type_custom
      when 5
        move_party_player
      when 6
        move_type_fermo
      end
    end
  end
  #--------------------------------------------------------------------------
  # - Riposiziona
  #--------------------------------------------------------------------------
  def riposiziona
    case rand(3)
    when 0
      r_x = $game_map.display_x + rand(21)*128 - 128*3
      r_y = $game_map.display_y - 128*3
    when 1
      r_x = $game_map.display_x + rand(21)*128 - 128*3
      r_y = $game_map.display_y + 2176 + 128*3
    when 2
      r_x = $game_map.display_x - 128*3
      r_y = $game_map.display_y + rand(16)*128 - 128*3
    when 3
      r_x = $game_map.display_x + 2816 + 128*3
      r_y = $game_map.display_y + rand(16)*128 - 128*3
    end
    x = r_x / 128
    y = r_y / 128
    if $game_map.passable?(x, y, 0)
      @real_x = r_x
      @real_y = r_y
      @x = x
      @y = y
    else
      riposiziona
    end
    r = rand(23) + 1
    if r < 10
      name = "10" + r.to_s + "-Civilian0" + r.to_s
    else
      name = "1" + r.to_s + "-Civilian" + r.to_s
    end
    @character_name = name
    #@move_speed = rand(2)+ 1
  end
  #--------------------------------------------------------------------------
  # - Movimenti Nuovi
  #--------------------------------------------------------------------------

  
  def move_type_fermo
    
  end
    
  
  def move_type_toward_player
    sx = @x - $game_player.x
    sy = @y - $game_player.y
    abs_sx = sx > 0 ? sx : -sx
    abs_sy = sy > 0 ? sy : -sy
    if sx + sy >= 20
      move_random
      return
    end
    case rand(6)
    when 0..3 
      move_toward_player
    when 4 
      move_toward_player#move_random
    when 5 
      move_toward_player#move_forward
    end
  end
  
  def move_party_player
    
    case @act
    when 1
      mdf = -1
    when 2
      mdf = 1
    end

    gp = $game_player
    
    mdf_x = (gp.direction == 6 ? 1 : gp.direction == 4 ? -1 : gp.direction == 2 ? mdf : gp.direction == 8 ? mdf : 0)
    mdf_y = (gp.direction == 2 ? 1 : gp.direction == 8 ? -1 : gp.direction == 6 ? mdf : gp.direction == 4 ? mdf : 0)

    
    sx = @x - $game_player.x + mdf_x
    sy = @y - $game_player.y + mdf_y
    
    if sx == 0 and sy == 0
      return
    end
    abs_sx = sx.abs
    abs_sy = sy.abs
    if abs_sx == abs_sy
      rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
    end
    if abs_sx > abs_sy
      sx > 0 ? move_left : move_right
      if not moving? and sy != 0
        sy > 0 ? move_up : move_down
      end
    else
      sy > 0 ? move_up : move_down
      if not moving? and sx != 0
        sx > 0 ? move_left : move_right
      end
    end
    
    if not moving?
      if not in_chara_range?(1)
        case @act
        when 1
          if abs_sx < abs_sy
            sx > 0 ? move_right : move_left
          else
            sy > 0 ? move_down : move_up
          end
        when 2
          if abs_sx < abs_sy
            sx > 0 ? move_left : move_right
          else
            sy > 0 ? move_up : move_down
          end
        end
      end
    end
    
  end
  
end
  #--------------------------------------------------------------------------
  # - E' a (quadretti) distanza dall'eroe?
  #--------------------------------------------------------------------------
def in_chara_range?(quadretti)
screne_x = $game_player.real_x
screne_x -= 128*(1+quadretti)
screne_y = $game_player.real_y
screne_y -= 128*(1+quadretti)
screne_width = $game_player.real_x
screne_width += 128*(1+quadretti)
screne_height = $game_player.real_y
screne_height += 128*(1+quadretti)
return false if real_x <= screne_x
return false if real_x >= screne_width
return false if real_y <= screne_y
return false if real_y >= screne_height
return true
end

############################################
######### Aggiunte a GAme_Event ############
############################################
class Game_Event < Game_Character
  #
  # - Controlla se è un membro del party
  #
  def party_member?
    return false
  end
  
end

############################################
######### Aggiunte a Game_Player ###########
############################################

class Game_Player

  def party_member?
    return false
  end
  
  def nemico?
    return false
  end
  
  def check_event_trigger_here(triggers)
    result = false
    # Quando si sta eseguendo un evento
    if $game_system.map_interpreter.running?
      return result
    end
    # Loop degli eventi
    for event in $game_map.events.values
      # Quando le coordinate sono uguali e l'evento ha come condizione di inizio "Azione"
      if event.x == @x and event.y == @y and triggers.include?(event.trigger) and event.nemico? == false
        # Quando l'evento è eseguibile
        if not event.jumping? and event.over_trigger?
          event.start
          result = true
        end
      end
    end
    return result
  end
  #--------------------------------------------------------------------------
  # - Controllo esecuzione degli eventi
  #--------------------------------------------------------------------------
  def check_event_trigger_there(triggers)
    result = false
    # Quando si sta eseguendo un evento
    if $game_system.map_interpreter.running?
      return result
    end
    # Sono calcolate le coordinate del tile davanti all'eroe
    new_x = @x + (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
    new_y = @y + (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
    # Loop degli Eventi
    for event in $game_map.events.values
      # Quando le coordinate sono uguali e l'evento ha come condizione di inizio "Azione"
      if event.x == new_x and event.y == new_y and
         triggers.include?(event.trigger) and event.nemico? == false
        # Quando l'evento è eseguibile
        if not event.jumping? and not event.over_trigger?
          event.start
          result = true
        end
      end
    end
    # Quando non è rilevato nessun evento
    if result == false
      # Quando c'è un "incontra attraverso" nel title d'avanti
      if $game_map.counter?(new_x, new_y)
        # Calcola le coordinate di 2 tile davanti all'eroe
        new_x += (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
        new_y += (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
        # Loop degli Eventi
        for event in $game_map.events.values
          # Quando le coordinate sono uguali e l'evento ha come condizione di inizio "Azione"
          if event.x == new_x and event.y == new_y and
             triggers.include?(event.trigger) and event.nemico? == false
            # Quando l'evento è eseguibile
            if not event.jumping? and not event.over_trigger?
              event.start
              result = true
            end
          end
        end
      end
    end
    return result
  end

  #--------------------------------------------------------------------------
  # - Aggiornamento
  #--------------------------------------------------------------------------
  def update
    # Memorizza l'ultimo movimento se ci si sta muovendo
    last_moving = moving?
    # Se ci si sta muovendo o si sta eseguendo un evento parallelo 
    # o c'è un muovi evento o c'è una finestra di messaggio
    unless moving? or $game_system.map_interpreter.running? or
           @move_route_forcing or $game_temp.message_window_showing
      # Quando è premuto un tasto muove l'eroe
      case Input.dir4
      when 2
        move_down
      when 4
        move_left
      when 6
        move_right
      when 8
        move_up
      end
    end
    # Le coordinate vengono memorizzate in variabili temporanee
    last_real_x = @real_x
    last_real_y = @real_y
    super
    # Quando l'eroe si muove verso giu ed è possibile muovere la mappa
    if @real_y > last_real_y and @real_y - $game_map.display_y > CENTER_Y
      # Muovi la mappa
      $game_map.scroll_down(@real_y - last_real_y)
    end
    # Quando l'eroe si muove verso sinistra ed è possibile muovere la mappa
    if @real_x < last_real_x and @real_x - $game_map.display_x < CENTER_X
      # Muovi la mappa
      $game_map.scroll_left(last_real_x - @real_x)
    end
    # Quando l'eroe si muove verso destra ed è possibile muovere la mappa
    if @real_x > last_real_x and @real_x - $game_map.display_x > CENTER_X
      # Muovi la mappa
      $game_map.scroll_right(@real_x - last_real_x)
    end
    # Quando l'eroe si muove verso sù ed è possibile muovere la mappa
    if @real_y < last_real_y and @real_y - $game_map.display_y < CENTER_Y
      # Muovi la mappa
      $game_map.scroll_up(last_real_y - @real_y)
    end
    # Quando non ci si sta muovendo
    unless moving?
      # Quando il movimento è appena finito
      if last_moving
        # Controllo eventi "Tocco con l'eroe" - "Collisione"
        result = check_event_trigger_here([1,2])
        # Se non ci sono eventi da eseguire
        if result == false
          # Se la modalità di debug è disattiva e non si sta premendo ctrl
          unless $DEBUG and Input.press?(Input::CTRL)
            # Conteggio incontri casuali
            if @encounter_count > 0
              @encounter_count -= 1
            end
          end
        end
      end
      # Quando C è premuto
      if Input.trigger?(Input::C)
        # Controlla esecuzione eventi
        $game_temp.battle_menu_closed = check_event_trigger_here([0])
        $game_temp.battle_menu_closed = check_event_trigger_there([0,1,2])
      end
    end
    #
    if moving? and Input.trigger?(Input::C)
      $game_temp.battle_menu_closed = false
    end
  end
  
end


#==============================================================================
# - Game_Event
#------------------------------------------------------------------------------
# E' la classe che gestisce gli eventi
# E' usata in Game_Map
#==============================================================================

class Game_Party_Player < Game_Character
  #--------------------------------------------------------------------------
  # - Variabile
  #--------------------------------------------------------------------------
  attr_reader   :trigger                  # Condizione d'avvio
  attr_reader   :list                     # Lista dei comandi
  attr_reader   :starting                 # Se l'evento è in esecuzione
  #--------------------------------------------------------------------------
  # - Inizializzazione Oggetto
  #     map_id : ID Mappa
  #     event  : Evento (RPG::Event)
  #--------------------------------------------------------------------------
  def initialize(act)
    super()
    @act = act
    @erased = false
    @starting = false
    @through = false
    # Posizionamento
    #moveto(@event.x, @event.y)
    refresh
  end

  def party_member?
    return true
  end
  
  def nemico?
    return false
  end
  #--------------------------------------------------------------------------
  # - Settaggio di @starting
  #--------------------------------------------------------------------------
  def clear_starting
    @starting = false
  end
  #--------------------------------------------------------------------------
  # - Controllo Sovrapposizione
  #--------------------------------------------------------------------------
  def over_trigger?
    # Se l'eroe non esiste o non può eseguire eventi
    if @character_name != "" and not @through
      # Esecuzione impossibile
      return false
    end
    # Quando la posizione non è calpestabile
    unless $game_map.passable?(@x, @y, 0)
      # Esecuzione impossibile
      return false
    end
    # Esecuzione possibile
    return true
  end
  #--------------------------------------------------------------------------
  # - Qui c'era def start
  #--------------------------------------------------------------------------

  #--------------------------------------------------------------------------
  # - Eliminazione
  #--------------------------------------------------------------------------
  def erase
    @erased = true
    refresh
  end
  #--------------------------------------------------------------------------
  # - Aggiornamento
  #--------------------------------------------------------------------------
  def refresh
    if $game_party.actors.size <= @act
      # Vengono cancellati nome e tonalità
      @character_name = ""
      @character_hue = 0
      return
    end
    actor = $game_party.actors[@act]
    @character_name = actor.character_name
    @character_hue = actor.character_hue
    @opacity = 255
    @blend_type = 0
  end
  #--------------------------------------------------------------------------
  # - Controllo evento con collisione
  #--------------------------------------------------------------------------
  def check_event_trigger_touch(x, y)
    # Quando è già in esecuzione
    if $game_system.map_interpreter.running?
      return
    end
    # Quando le coordinate sono uguali e l'evento ha come condizione di inizio "Tocco con l'eroe"
    if @trigger == 2 and x == $game_player.x and y == $game_player.y
      # Quando l'evento è eseguibile
      if not jumping? and not over_trigger?
        start
      end
    end
  end
  #--------------------------------------------------------------------------
  # - Controllo evento con inizio automatico
  #--------------------------------------------------------------------------
  def check_event_trigger_auto
    # Quando le coordinate sono uguali
    if @trigger == 2 and @x == $game_player.x and @y == $game_player.y
      # Quando l'evento è eseguibile
      if not jumping? and over_trigger?
        start
      end
    end
    # Se la condizione è inizio automatico
    if @trigger == 3
      start
    end
  end
  #--------------------------------------------------------------------------
  # - Aggiornamento
  #--------------------------------------------------------------------------
  def update
    super
    # Controllo evento con inizio automatico
    check_event_trigger_auto
    # Quando c'è un processo parallelo da eseguire
    if @interpreter != nil
      # Quando l'interprete non è in esecuzone
      unless @interpreter.running?
        # Esecuzione di un evento
        @interpreter.setup(@list, @event.id)
      end
      # Aggiornamento Interprete
      @interpreter.update
    end
  end
end


class Spriteset_Map
  #--------------------------------------------------------------------------
  # - Inizializzazione Oggetto
  #--------------------------------------------------------------------------
  def initialize
    # Creazione Livelli
    @viewport1 = Viewport.new(0, 0, 640, 480)
    @viewport2 = Viewport.new(0, 0, 640, 480)
    @viewport3 = Viewport.new(0, 0, 640, 480)
    @viewport2.z = 200
    @viewport3.z = 5000
    # Creazione Titlemap
    @tilemap = Tilemap.new(@viewport1)
    @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
    for i in 0..6
      autotile_name = $game_map.autotile_names[i]
      @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
    end
    @tilemap.map_data = $game_map.data
    @tilemap.priorities = $game_map.priorities
    # Creazione Panorama
    @panorama = Plane.new(@viewport1)
    @panorama.z = -1000
    # Creazione Nebbia
    @fog = Plane.new(@viewport1)
    @fog.z = 3000
    # Creazione Chara
    @character_sprites = []
    for i in $game_map.events.keys.sort
      sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
      @character_sprites.push(sprite)
    end
    @character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
    @character_sprites.push(Sprite_Character.new(@viewport1, $game_second_player))
    @character_sprites.push(Sprite_Character.new(@viewport1, $game_third_player))
    # Creazione effetti meteorologici
    @weather = RPG::Weather.new(@viewport1)
    # Creazione Pictures
    @picture_sprites = []
    for i in 1..50
      @picture_sprites.push(Sprite_Picture.new(@viewport2,
        $game_screen.pictures[i]))
    end
    # Creazione Sprite del timer
    @timer_sprite = Sprite_Timer.new
    # Aggiornamento frame
    update
  end
  
end


class Interpreter
  
  # Modifica al cambia grafica
  # per non far crashare il caterpillar script
  
  def command_322
    actor = $game_actors[@parameters[0]]
    if actor != nil
      actor.set_graphic(@parameters[1], @parameters[2],
        @parameters[3], @parameters[4])
    end
    $game_temp.party_change_flag = true
    $game_player.refresh
    # Parte aggiunta
    $game_second_player.refresh
    $game_third_player.refresh
    return true
  end
  
end


class Scene_Title
  
  def command_new_game
    # Suona SE azione
    $game_system.se_play($data_system.decision_se)
    # Ferma BGM
    Audio.bgm_stop
    # Resetta il contatore frame per il tempo di gioco
    Graphics.frame_count = 0
    # Creazione oggetti
    $game_temp          = Game_Temp.new
    $game_system        = Game_System.new
    $game_switches      = Game_Switches.new
    $game_variables     = Game_Variables.new
    $game_self_switches = Game_SelfSwitches.new
    $game_screen        = Game_Screen.new
    $game_actors        = Game_Actors.new
    $game_party         = Game_Party.new
    $game_troop         = Game_Troop.new
    $game_map           = Game_Map.new
    $game_player        = Game_Player.new
    $game_second_player = Game_Party_Player.new(1)
    $game_third_player  = Game_Party_Player.new(2)
    # Creazione Gruppo
    $game_party.setup_starting_members
    # Creazione Mappa
    $game_map.setup($data_system.start_map_id)
    # Trasferimento al punto d'inizio
    d_x = $data_system.start_x
    d_y = $data_system.start_y
    $game_player.moveto(d_x, d_y)
    $game_second_player.moveto(d_x + 1, d_y - 1)
    $game_third_player.moveto(d_x - 1, d_y - 1)
    # Aggiornamento Giocatore
    $game_player.refresh
    if $game_party.actors[1] != nil
      $game_second_player.refresh
    end
    if $game_party.actors[2] != nil
      $game_third_player.refresh
    end
    # Suona BGM e BGS automatici
    $game_map.autoplay
    # Aggiornamento Mappa
    $game_map.update
    # Cambia Scena
    $scene = Scene_Map.new
  end

end


# qua viene aggiunto il *.update degli altri due personaggi

class Scene_Map
  #--------------------------------------------------------------------------
  # - Aggiornamento
  #--------------------------------------------------------------------------
  def update
    # Loop
    loop do
      # Aggiornamento mappa ed interprete
      $game_map.update
      $game_system.map_interpreter.update
      $game_player.update
      $game_second_player.update
      $game_third_player.update
      # Aggiornamento sistema e schermo 
      $game_system.update
      $game_screen.update
      # Quando il giocatore non deve essere trasportato esce dal loop
      unless $game_temp.player_transferring
        break
      end
      # Trasporta il giocatore
      transfer_player
      # Quando non c'è un fade esce dal loop
      if $game_temp.transition_processing
        break
      end
    end
    # Aggiornamento Chipset
    @spriteset.update
    # Aggiornamento finestra dei messaggi
    @message_window.update
    # Se c'è il gameover
    if $game_temp.gameover
      # Va alla scena del gameover
      $scene = Scene_Gameover.new
      return
    end
    # Se si deve tornare al title
    if $game_temp.to_title
      # Va alla scena del title
      $scene = Scene_Title.new
      return
    end
    # Quando c'è un fade
    if $game_temp.transition_processing
      # Elimina la variabile
      $game_temp.transition_processing = false
      # Fade
      if $game_temp.transition_name == ""
        Graphics.transition(20)
      else
        Graphics.transition(40, "Graphics/Transitions/" +
          $game_temp.transition_name)
      end
    end
    # Quando c'è un messaggio
    if $game_temp.message_window_showing
      return
    end
    # Quando il contatore degli incontri è 0 e ci sono gruppi di mostri in lista
    if $game_player.encounter_count == 0 and $game_map.encounter_list != []
      # Quando non c'è un evento o gli incontri non sono disabilitati
      unless $game_system.map_interpreter.running? or
             $game_system.encounter_disabled
        # Scelta del gruppo di nemici
        n = rand($game_map.encounter_list.size)
        troop_id = $game_map.encounter_list[n]
        # Se il gruppo è valido
        if $data_troops[troop_id] != nil
          # Chiama la battaglia
          $game_temp.battle_calling = true
          $game_temp.battle_troop_id = troop_id
          $game_temp.battle_can_escape = true
          $game_temp.battle_can_lose = false
          $game_temp.battle_proc = nil
        end
      end
    end
    #Quando B è premuto
    if Input.trigger?(Input::B)
      # Quando non c'è un evento o il menu non è disabilitato
      unless $game_system.map_interpreter.running? or
             $game_system.menu_disabled
        # Chiama menu
        $game_temp.menu_calling = true
        $game_temp.menu_beep = true
      end
    end
    # Quando è attivo il debug e si preme F9
    if $DEBUG and Input.press?(Input::F9)
      # Chiama il debug
      $game_temp.debug_calling = true
    end
    # Quando il giocatore non si è mosso
    unless $game_player.moving?
      # Controlla se c'è quancosa da chiamare
      if $game_temp.battle_calling
        call_battle
      elsif $game_temp.shop_calling
        call_shop
      elsif $game_temp.name_calling
        call_name
      elsif $game_temp.menu_calling
        call_menu
      elsif $game_temp.save_calling
        call_save
      elsif $game_temp.debug_calling
        call_debug
      end
    end
  end

end


# Qua viene aggiunto il *.moveto degli altri due personaggi

class Scene_Map
  #--------------------------------------------------------------------------
  # - Trasporto
  #--------------------------------------------------------------------------
  def transfer_player
    # Elimina la variable
    $game_temp.player_transferring = false
    # Quando la mappa di destinazione è diversa da quella corrente
    if $game_map.map_id != $game_temp.player_new_map_id
      # Settaggio nuova mappa
      $game_map.setup($game_temp.player_new_map_id)
    end
    # Settaggio nuova posizione del giocatore
    $game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)
    $game_second_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)
    $game_third_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)
    # Settaggio della nuova direzione
    case $game_temp.player_new_direction
    when 2  # Giu
      $game_player.turn_down
    when 4  # Sinistra
      $game_player.turn_left
    when 6  # Destra
      $game_player.turn_right
    when 8  # Sù
      $game_player.turn_up
    end
    # Correzione posizione del giocatore
    $game_player.straighten
    # Aggiornamento Mappa
    $game_map.update
    # Creazione nuovo spriteset
    @spriteset.dispose
    @spriteset = Spriteset_Map.new
    # Quando c'è un fade
    if $game_temp.transition_processing
      # Elimina la variabile
      $game_temp.transition_processing = false
      # Fade
      Graphics.transition(20)
    end
    # Suona BGM e BGS automatici della mappa
    $game_map.autoplay
    # Resetta il frame
    Graphics.frame_reset
    # Aggiornamento Input
    Input.update
  end
end
 

 

 

NewCaterpillarScript.txt

Edited by Apo
aggiunto lo script
Link to comment
Share on other sites

lo provo subito!!

 

 

p.s. non vedo l'ora di incastrarli per bene!! :rovatfl: :rovatfl:

Finrod, GDR PBF

2PV e 1PAEquip: - faretra con 20 frecce- arco lungo- pugnale comune- Armatura di cuoio- Torcia- Cappuccio

Mi sa che è ora di vincere qualche premio per rinnovare questa firma! :3Posizioni raggiunte nei contest

http://rpg2s.net/gif/SCContest3Oct.gifhttp://www.rpg2s.net/awards/bestresourCSist3.jpghttp://www.rpg2s.net/awards/mosthelpful2.jpghttp://www.rpg2s.net/awards/mostpresent2.jpg

 

 

 

Link to comment
Share on other sites

Non sarebbe meglio vedere 4 pg? magari messi a rombo (basterebbe aggiungerne uno in fondo alla fila ^^;;; )

"Giochiamo a: schiettezza o grande impresa eroica!"

Personaggio PBF: Lyriel
PN: 12/20
PV: 2/2
PA: 4 (5 col mantello d'acero)
Equipaggiamento:

Spada comune
Pugnale comune
Arco elfico (magico, ignifugo. Permette di colpire da lunghe distanze. Se distrutto si auto-restaura a fine battaglia. Le frecce scoccate con questo arco ottengono l'effetto dell'incantesimo Folata di vento permettendo di spazzare via piccoli oggetti e creature.)
Faretra con 20 frecce
Cappuccio
Armatura delle ombre borchiata (punti armatura 4, ignifuga, di notte +1 a furtività)
2 anelli di valore
Borsa comune (10 slot)

  • Corda
  • Penna e calamaio
  • Libro vuoto
  • Forma di formaggio
  • Mappa
  • Cannocchiale
  • Tagliola di ferro
  • Campanellino di Maia
  • Mantello d'Acero (+1PA): un mantello pesante di colore rossiccio che presenta dei motivi fiochi, dello stesso colore, a forma di foglie d'acero. E' dotato di un ampio cappuccio e può coprire completamente chi lo indossa. Se si resta fermi in un'area boschiva o tra un gruppo di alberi il mantello è in grado di celare completamente la presenza del possessore dando un grado di furtività pari a gr.5. Nel caso di bestie ed animali dalla visuale meno acuta, se il giocatore è già stato notato od ha notificato in qualche modo la sua presenza può gettarsi a terra tra un gruppo di foglie o tra i cespugli per scomparire completamente dalla visuale di tali nemici.

181 monete d'oro
Cintura porta coltelli (6 slot)

  • Coltello da lancio intarsiato
  • Coltello da lancio in metallo
  • Coltello da lancio in metallo

Campanellino di Maia




Se Lyriel, e solo lui, suona tre volte il campanellino può richiamare una creatura magica che combatterà al suo fianco al prezzo di 3 PN.
L'animale ha l'aspetto di un leopardo delle nevi, i suoi occhi sono viola e così gli artigli, i denti e la punta della coda. Questa è lunga e larga, molto folta e corposa. Il manto a differenza dei leopardi è tutto bianco, inoltre ha una folta criniera circolare intorno al collo a mo' di sciarpa e che si unisce con la sommità della fronte creando un cresta non molto alta pettinata all'indietro.
La creatura combatte indipendentemente dal possessore (il giocatore potrà descriverne il comportamento in battaglia e fuori, ma il master potrà riservarsi il diritto di far compiere alla creatura delle azioni per conto proprio).
La creatura non deve per forza stare vicino all'utilizzatore, ma può essere mandata lontano e tornare da lui su comando.
Lyriel e l'animale hanno un contatto mentale e possono comunicare anche a distanza.
Non vi è limite alla permanenza della creatura una volta evocata, però se i suoi PV raggiungono lo zero dovrà essere risvegliata magicamente da un mago od un curatore esperto. Lyriel può richiamare all'interno del campanellino la creatura quando essa non è impegnata in combattimento od in altre prove senza sforzi, ma dovrà spendere di nuovo 3 PN per richiamarla. Può continuare a combattere se Lyriel viene sconfitto.
L'animale vede bene anche di notte e se c'è nebbia.
Caratteristiche della creatura:
PV 2
PA 2
Atletica Gr.4
Furtività Gr.1
Attacco (tipo descritto dal giocatore nei limiti fisici di artigli e morso) di massimo Gr.5 può dichiarare DIRETTO su armature di cuoio o cuoio borchiato e MAGICO con tutti gli attacchi. Può dichiarare SONNO se artigli e denti viola entrano in contatto diretto con il sangue l'avversario. DIRETTO e SONNO sono due effetti, quindi come da regolamento solo uno può essere scelto. MAGICO può esser combinato con entrambi.
Malus: il campanellino deve tintinnare, quindi Lyriel suonandolo tradirà la sua presenza.
Il campanellino tutte le volte che viene suonato fa venire in mente Maia a Lyriel, quindi il giocatore dovrà scrivere una frase di almeno 3 parole per ricordare la bambina, ogni volta diversa, altrimenti l'evocazione non avrà esito.

 


Personaggio PBF: Wren
PN: 20/20
PV:2/2
PA:0


Borsa Comune

  • 3 filoni di pane
  • 4 mele
  • prosciutto
  • formaggio
  • coltello da cucina

 

Link to comment
Share on other sites

Caterpillar script alternativo che permette la visualizzazioni di soli 3 personaggi sulla mappa. Ancora da sviluppare bene ma è un estratto da un mio vecchio progetto più ampio quindi non è detto che ci lavorerò ancora sopra. I personaggi evitano la maggior parte degli ostacoli, ma volendo riuscite ad incastrarli abbastanza facilmente.

 

Era il development kit di ff12.. lì i pg erano solo 3... :rovatfl:

Comunque ad aggiungerne uno non ci vuole molto casomai nei prossimi giorni lo faccio se lo vedete necessario, il rombo mi pareva una cagata.

Link to comment
Share on other sites

non lo vedo "necessario" semplicemente che la maggior parte delle persone usa 4 pg attivi... e la fila indiana è più cagata del rombo ^^;;;

"Giochiamo a: schiettezza o grande impresa eroica!"

Personaggio PBF: Lyriel
PN: 12/20
PV: 2/2
PA: 4 (5 col mantello d'acero)
Equipaggiamento:

Spada comune
Pugnale comune
Arco elfico (magico, ignifugo. Permette di colpire da lunghe distanze. Se distrutto si auto-restaura a fine battaglia. Le frecce scoccate con questo arco ottengono l'effetto dell'incantesimo Folata di vento permettendo di spazzare via piccoli oggetti e creature.)
Faretra con 20 frecce
Cappuccio
Armatura delle ombre borchiata (punti armatura 4, ignifuga, di notte +1 a furtività)
2 anelli di valore
Borsa comune (10 slot)

  • Corda
  • Penna e calamaio
  • Libro vuoto
  • Forma di formaggio
  • Mappa
  • Cannocchiale
  • Tagliola di ferro
  • Campanellino di Maia
  • Mantello d'Acero (+1PA): un mantello pesante di colore rossiccio che presenta dei motivi fiochi, dello stesso colore, a forma di foglie d'acero. E' dotato di un ampio cappuccio e può coprire completamente chi lo indossa. Se si resta fermi in un'area boschiva o tra un gruppo di alberi il mantello è in grado di celare completamente la presenza del possessore dando un grado di furtività pari a gr.5. Nel caso di bestie ed animali dalla visuale meno acuta, se il giocatore è già stato notato od ha notificato in qualche modo la sua presenza può gettarsi a terra tra un gruppo di foglie o tra i cespugli per scomparire completamente dalla visuale di tali nemici.

181 monete d'oro
Cintura porta coltelli (6 slot)

  • Coltello da lancio intarsiato
  • Coltello da lancio in metallo
  • Coltello da lancio in metallo

Campanellino di Maia




Se Lyriel, e solo lui, suona tre volte il campanellino può richiamare una creatura magica che combatterà al suo fianco al prezzo di 3 PN.
L'animale ha l'aspetto di un leopardo delle nevi, i suoi occhi sono viola e così gli artigli, i denti e la punta della coda. Questa è lunga e larga, molto folta e corposa. Il manto a differenza dei leopardi è tutto bianco, inoltre ha una folta criniera circolare intorno al collo a mo' di sciarpa e che si unisce con la sommità della fronte creando un cresta non molto alta pettinata all'indietro.
La creatura combatte indipendentemente dal possessore (il giocatore potrà descriverne il comportamento in battaglia e fuori, ma il master potrà riservarsi il diritto di far compiere alla creatura delle azioni per conto proprio).
La creatura non deve per forza stare vicino all'utilizzatore, ma può essere mandata lontano e tornare da lui su comando.
Lyriel e l'animale hanno un contatto mentale e possono comunicare anche a distanza.
Non vi è limite alla permanenza della creatura una volta evocata, però se i suoi PV raggiungono lo zero dovrà essere risvegliata magicamente da un mago od un curatore esperto. Lyriel può richiamare all'interno del campanellino la creatura quando essa non è impegnata in combattimento od in altre prove senza sforzi, ma dovrà spendere di nuovo 3 PN per richiamarla. Può continuare a combattere se Lyriel viene sconfitto.
L'animale vede bene anche di notte e se c'è nebbia.
Caratteristiche della creatura:
PV 2
PA 2
Atletica Gr.4
Furtività Gr.1
Attacco (tipo descritto dal giocatore nei limiti fisici di artigli e morso) di massimo Gr.5 può dichiarare DIRETTO su armature di cuoio o cuoio borchiato e MAGICO con tutti gli attacchi. Può dichiarare SONNO se artigli e denti viola entrano in contatto diretto con il sangue l'avversario. DIRETTO e SONNO sono due effetti, quindi come da regolamento solo uno può essere scelto. MAGICO può esser combinato con entrambi.
Malus: il campanellino deve tintinnare, quindi Lyriel suonandolo tradirà la sua presenza.
Il campanellino tutte le volte che viene suonato fa venire in mente Maia a Lyriel, quindi il giocatore dovrà scrivere una frase di almeno 3 parole per ricordare la bambina, ogni volta diversa, altrimenti l'evocazione non avrà esito.

 


Personaggio PBF: Wren
PN: 20/20
PV:2/2
PA:0


Borsa Comune

  • 3 filoni di pane
  • 4 mele
  • prosciutto
  • formaggio
  • coltello da cucina

 

Link to comment
Share on other sites

  • 5 months later...

o.o boh!

ascolta... qui sfociamo nel mistico, ma...

prima di riprovare il gioco, ho spostato la posizione dello script nell'elenco.

alla prima prova, l'ho messo in alto, il primo dell'elenco. e non mi dava errore, ma neanche funzionava.

alla seconda prova, l'ho messo prima delle classi chiamate "sprite", e non appariva nulla.

alla terza, l'ho messo subito dopo gli sprite, ma prima degli spriteset e ancora nulla.

quindi l'ho rimesso sopra il main... e funzionava tutto! o.o

 

ecco... ora io non so se ho un computer incantato, ma facendo così... ha funzionato...

prova pure tu! o.o

 

(malocchio!! O.o)

Link to comment
Share on other sites

mi da lo stesso errore in tutti i casi solo quando aggiungo un pg e se ne ho già nel gruppo o non ci nsono o mi da errore però ripeto se lo meto sopra main in un nuovo progetto mi da i bambocci che lo seguono anche se non sono sul gruppo....
Link to comment
Share on other sites

  • 3 months later...
  • 1 year later...

scusate il necropost ma nessuno ha provato a premere il tasto [C] (o invio) ?

viene fuori un messaggio con un errore del tipo "script caterpillar line 505 nomethoderror

undefinied metod battle closed= for game temp (numeri) "

a me succede sempre quando premo il tasto

[C]

http://mypsn.eu.playstation.com/psn/profile/gianlu9767.png

 

Il mio progetto personale: (Sospeso)

 

http://img833.imageshack.us/img833/3821/progresso.png <-------Clicca sul banner per vedere il mio sito

Cercasi personale (anche alle prime armi) possibilmente grafico e storyboarder

 

 

Link to comment
Share on other sites

  • 2 months later...
Questo mi piace molto più del solito Caterpillar, qualcuno pratico di script non potrebbe provare a risolverne i bug e magari anche ad aggiungere il quarto personaggio?

Citazioni varie:

 

 

"Ah, noi del 2000, avevamo Twilight, Justin Bieber, siamo stati i primi su facebook, quanto siamo fighi noi, altro che questi ragazzini del 2020 che si drogano con la realtà virtuale via AmuSphere o usano il teletrasporto invece di andare in motorino come facevamo noi."

 

<< Se un uomo è questo il giorno, e la mia ascia.>>

Meo Verrocchio

 

<<Not a lot of people know what it feels like to be angry, in your bones. I mean, they understand, foster parents, everybody understands, for awhile. Then they want the angry little kid to do something he knows he can't do, move on. So after awhile they stop understanding.>>

 

«boia ma c'avete una bella faccia a dire che il metal è una truffa! Ma se da un pò di tempo a questa parte non fate altro che rompere il cazzo ai poveri ascoltatori onesti di musica brutta che vorrebbero solo esser lasciati n pace mentre sragionate dello sghoegaze e dei vostri trend da finocchi. A me pare che aa vera truffa sono i nerd che non hanno mai sentito un disco di ozzy osbourne o che fino a l'anno scorso non avevano presente nemmeno una canzone dei black sabbath ma che ora incensano gli earth e i gli sleep perchè va di moda il doom sulle riviste fiche. Questa sì che è gente che mi fa incazzare. I metallari panzoni che ascoltano il viching invece mi fanno al più tenerezza nella loro sfiga.

Bravi andate tutti a parlare di come son fenomeni i boris perché fanno i dischi con merzbow e "OH MIO DIO COME SONO SPERIMENTALI\RIBELLICHIC" però mi raccomando continuate a pensare che i death sono doom e che slogun è uno che suona con giuliano palma.

Se c'è qualcuno che magari come me con certe cose metal ci è cresciuto spero che detesterà quanto me questa tendenza di trovare gruppi metal giusti da rivalutare perché c'hanno influenze funky\trip hop\ska e quindi sono geni della sperimentazione e tardi panzoni che fanno semplicemente la loro musica e non si meritano nulla visto che non c'hanno la copertina su blow up.

L'unica cosa che vi meritate è zingales.»

 

<<It’s bullshit like “Oh man, you’re a geek now, but just bear with it! Once you’re outta high school away from all these jocks you’re gonna RUN SHIT” that makes the veins in my forehead want to be outside of my fucking skin. Most people quickly realize that life is not a movie sometime shortly after high school or college. Many geeky, nerdy people do not because we have Special Snowflake Syndrome. We’re different or told that we’re different and we think that somehow things will balance out cosmically. We’ll get the girl or guy or anime body pillow. We’ll have the money and success. We’ll be the ones who are happy. And that will happen because…well, we had a rough time in the beginning so it will equal out cuz…magic! What you need to do is take off your “The Geek Shall Inherit the Earth” tshirt, put a bar of soap in it, twist it up, and then beat your fucking face in with it. You will not be handed anything because you were awkward and quirky growing up. Well, unless you’re a girl with that highly marketable Felicia Day-quirk… then you might get to date a dickhead for a year or two and more followers on Instagram than your male counterpart of equal or lesser value.>>

 

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...