Jump to content
Rpg²S Forum
  • 0

FFXII Development Kit


Alato
 Share

Question

http://img101.imageshack.us/img101/8168/ffxiidkwk0.jpg

 

Allora...visto che il sistema di battaglia di FFXII, e il suo sistema in generale mi è piaciuto molto, ho deciso di mettermi di buona lena e fare uno script che implementi tutto ciò che è presente nel gioco, dal bs al menu, al sistema in generale.

 

Ho deciso di postare mano a mano gli aggiornamenti di ciò che sto facendo nella speranza che qualcuno possa apprendere meglio l'RGSS chiedendo spiegazioni sul suo funzionamento, e anche per sentirmi un po' spronato a continuare il lavoro senza mollarlo a metà. ;O;

 

Archivio aggiornamenti

 

Update 12/3/07

• Movimento casuale dei nemici

• I nemici notano il personaggio e gli vanno incontro se questo si avvicina troppo

• Menù di battaglia apribile su mappa premendo invio (se c'è un evento, il menù viene disabilitato)

• Il menù di battaglia utilizza un cursore che si muove realmente sullo schermo (insomma non si teletrasporta qua e là)

• Premendo Attacco comparirà un elenco con il nome dei nemici, in base al nome dell'evento, sempre che esistano eventi nemici in un raggio di 6 quadretti

Update 12/3/07

• Durante la selezione del nemico un cursore indicherà sulla mappa quale è il nemico selezionato (utile con molti nemici in campo)

• Corretti alcuni bug

Update 14/3/07

• Una finestra mostra gli hp del mostro, che sono presi dal database di default: basterà infatti creare l'evento inserendo come nome l'id del mostro che si vuole utilizzare

• Premendo attacco si colpisce il nemico e gli si riducono gli hp: azzerati gli hp il nemico muore. Se si entra e riesce dalla mappa il nemico ricompare.

Update 16/7/07

• Aggiunto un nuovo caterpillar script: i due membri del party successivi al principale sono ora presenti sulla mappa e seguono l'eroe in maniera molto più realistica rispetto ad altri caterpillar presenti sulla rete (funzionante ma da completare)

Update 17/07/07

• Migliorato il caterpillar: ora i personaggi non passano attraverso i muri e evitano la maggior parte degli ostacoli con la loro intelligenza artificiale (alcuni ostacoli complessi li fanno ancora impallare)

• Corretti alcuni bug del caterpillar (che si può dire ormai completato)

 

Ultimo aggiornamento: 05/06/08

• Aggiunto il battle status dei personaggi (cioè la barra con gli hp e gli mp)

• Le barre sono luminescenti ;O;

 

 

Ed ecco lo script:

 

Istruzioni

Incollate tutto ciò che è contenuto nel file *.txt in una pagina sopra il main.

Importate come Icon l'immagine HandCursor.png lasciando il nome invariato.

A questo punto lo script sarà già in funzione:

• per aprire il menù premere Invio

• per creare un evento Nemico basta creare un evento con grafica a vostra scelta e inserire come commento

begin nemico

A questo punto inserite al posto del nome dell'evento, l'id del mostro che volete (seguendo gli id del database).

 

Immagine e file *.txt sono allegati a seguire

 

Aggiungo comunque lo script in spoiler: è lungo.

L'ho dovuto dividere in più parti altrimenti lo spoiler impazziva.. o_

Non apritele insieme o implode XD

 

 

#================================#
# - FFXII Development Kit V0.1   #
#--------------------------------#
# By Alato ~ www.rpg2s.net	   #
#================================#

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

class Game_Battler

def hp=(hp)
@hp = [[hp, maxhp].min, 0].max
# Morte - Resurrezione
for i in 1...$data_states.size
  if $data_states[i].zero_hp
	if self.dead?
	  add_state(i)
	else
	  remove_state(i)
	end
  end
end
 end
 
end

class Game_Enemy < Game_Battler
 #--------------------------------------------------------------------------
 # - Inizializzazione Oggetto
 #	 troop_id	 : ID Gruppo di menici
 #	 member_index : Indice del nemico
 #--------------------------------------------------------------------------
 def initialize(troop, member_index)
super()
@member_index = member_index
@enemy_id = troop[@member_index]
enemy = $data_enemies[@enemy_id]
@battler_name = enemy.battler_name
@battler_hue = enemy.battler_hue
@hp = maxhp
@sp = maxsp
#@hidden = troop[@member_index].hidden
#@immortal = troop[@member_index].immortal
 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

#==============================================================================
# - Game_Troop
#------------------------------------------------------------------------------
# E' la classe che gestisce i gruppi di mostri,
# usa come riferimeto $game_troop
#==============================================================================

class Game_Troop
 #--------------------------------------------------------------------------
 # - Settaggio
 #	 troop_id : ID Gruppo Nemici
 #--------------------------------------------------------------------------
 def setup(troop, enem_events)
# Settaggio dei nemici
@enemies = []
@enem_events = enem_events
@troop = troop
#troop = $data_troops[troop_id]
for i in 0...@troop.size
  enemy = $data_enemies[@troop[i]]
  if enemy != nil
	@enemies.push(Game_Enemy.new(@troop, i))
  end
end
 end
 
 def che_nemico?(event_id)
for i in 0..@troop.size
  if @enem_events[i] == event_id
	return i
  end
end
 end

end

class Game_Map
 #--------------------------------------------------------------------------
 # - 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 nemico?
  if in_chara_range?(3) == false
	@move_type = 4 # 4 = Movimento Nemico
	@move_speed = 1
	@character_hue = 0
  else
	@move_type = 2
	@move_speed = 2
	@character_hue = 50
  end
  @move_frequency = 6
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 4
	move_type_nemico
  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
 #--------------------------------------------------------------------------
 # - Movimento Nemico
 #--------------------------------------------------------------------------
 def move_type_nemico
case rand(19)
when 0..16 
  move_forward
when 17
  move_random
when 18
  @stop_count = 0
end
 end
 
 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
 #--------------------------------------------------------------------------
 # - Controlla se è un nemico
 #--------------------------------------------------------------------------
 def nemico?
params = XPML_read("nemico",@id,2)
return (params != nil)
 end
 
 def name
return @event.nil? ? '' : @event.name
 end
 
 def death
  # Settaggio di alcune variabili
  @tile_id = 0
  @character_name = ""
  @character_hue = 0
  @move_type = 0
  @through = true
  @trigger = nil
  @list = nil
  @interpreter = nil
 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 Window_Base

 
 #--------------------------------------------------------------------------
 # - Disegna il nome
 #	 actor : Personaggio
 #	 x	 : Posizione del disegno: Coordinate X
 #	 y	 : Posizione del disegno: Coordinate Y
 #--------------------------------------------------------------------------
 def draw_target_name(actor, x, y)
self.contents.font.name = "Comic Sans MS"
self.contents.font.size = 20
self.contents.font.color = normal_color
self.contents.draw_text_bordered(x, y, 120, 32, actor.name)
 end
 
 #--------------------------------------------------------------------------
 # - Disegna i punti HP del bersaglio
 #	 actor : Bersaglio
 #	 x	 : Posizione del disegno: Coordinate X
 #	 y	 : Posizione del disegno: Coordinate Y
 #	 width : Ampiezza del disegno
 #--------------------------------------------------------------------------
 def draw_target_hp(actor, x, y, width = 144)
# Disegna la sequenza dei caratteri: "HP"
self.contents.font.color = system_color
self.contents.font.name = "Comic Sans MS"
self.contents.font.size = 20
self.contents.draw_text_bordered(x, y, 32, 32, $data_system.words.hp)
# Calcola se c'è qualche spazio che disegna i punti MaxHp
if width - 32 >= 108
  hp_x = x + width - 108
  flag = true
elsif width - 32 >= 48
  hp_x = x + width - 48
  flag = false
end
# Disegna i punti HP
self.contents.font.color = actor.hp == 0 ? knockout_color :
  actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color
  self.contents.font.name = "Comic Sans MS"
self.contents.font.size = 20
self.contents.draw_text_bordered(hp_x, y, 48, 32, actor.hp.to_s, 2)
# Disegna i punti MaxHP
if flag
  self.contents.font.color = normal_color
  self.contents.font.name = "Comic Sans MS"
  self.contents.font.size = 20
  self.contents.draw_text_bordered(hp_x + 48, y, 12, 32, "/", 1)
  self.contents.draw_text_bordered(hp_x + 60, y, 48, 32, actor.maxhp.to_s)
end
 end

 #--------------------------------------------------------------------------
 # - Disegna i punti HP dei personaggi
 #	 actor : Personaggio
 #	 x	 : Posizione del disegno: Coordinate X
 #	 y	 : Posizione del disegno: Coordinate Y
 #	 width : Ampiezza del disegno
 #--------------------------------------------------------------------------
 def draw_player_hp(actor_hp, actor_maxhp, x, y, bar_flag = false)	
# Disegna la sequenza dei caratteri: "HP"
self.contents.font.color = system_color
self.contents.font.name = "Comic Sans MS"
self.contents.font.size = 16
self.contents.draw_text_bordered(x, y+1, 48, 32, "HP")
# Calcola se c'è qualche spazio che disegna i punti MaxHp
hp_x = x
flag = true
draw_gray_bar(hp_x - 1, y+23, 86)
draw_cyan_bar(hp_x, y+24, 84)
draw_hp_bar(hp_x, y+24, 84, actor_hp, actor_maxhp)

if flag
  self.contents.font.color = normal_color
  self.contents.font.name = "Comic Sans MS"
  self.contents.font.size = 16
  #self.contents.draw_text(hp_x + 48, y, 12, 32, "/", 1)
  self.contents.draw_text_bordered(hp_x + 35, y+1, 48, 32, actor_maxhp.to_s,2)
end
size = self.contents.text_size(actor_maxhp.to_s).width
# Disegna i punti HP
self.contents.font.color = actor_hp == 0 ? knockout_color :
  actor_hp <= actor_maxhp / 4 ? crisis_color : normal_color
  self.contents.font.name = "Comic Sans MS"
self.contents.font.size = 22
self.contents.draw_text_bordered(hp_x +33 - size, y-1, 48, 32, actor_hp.to_s, 2)
 end
 #--------------------------------------------------------------------------
 # - Disegna i punti MP
 #	 actor : Personaggio
 #	 x	 : Posizione del disegno: Coordinate X
 #	 y	 : Posizione del disegno: Coordinate Y
 #	 width : Ampiezza del disegno
 #--------------------------------------------------------------------------
 def draw_player_sp(actor, x, y, width = 144)
# Disegna la sequenza dei caratteri: "MP"
self.contents.font.color = system_color
self.contents.font.name = "Comic Sans MS"
self.contents.font.size = 16
self.contents.draw_text_bordered(x+15, y+1, 32, 32, "MP")
# Calcola se c'è qualche spazio che disegna i punti MaxMp
sp_x = x+15
flag = false
draw_gray_bar(sp_x - 1, y+23, 52)
draw_orange_bar(sp_x, y+24, 50)
draw_mp_bar(sp_x, y+24, 50, actor)
# Disegna i punti MP
self.contents.font.color = actor.sp == 0 ? knockout_color :
  actor.sp <= actor.maxsp / 4 ? crisis_color : normal_color
  self.contents.font.name = "Comic Sans MS"
self.contents.font.size = 22
self.contents.draw_text_bordered(x + 35, y-1, 32, 32, actor.sp.to_s, 2)
# Disegna i punti MaxMP
if flag
  self.contents.font.color = normal_color
  self.contents.font.name = "Comic Sans MS"
  self.contents.font.size = 16
  self.contents.draw_text(sp_x + 48, y, 12, 32, "/", 1)
  self.contents.draw_text(sp_x + 60, y, 48, 32, actor.maxsp.to_s)
end
 end

 def draw_gray_bar(x, y, length)
gradient_red_start = 0
gradient_red_end = 0
gradient_green_start = 0
gradient_green_end = 0
gradient_blue_start = 0
gradient_blue_end = 0
draw_bar_percent = 100
for x_coord in 1..length
  current_percent_done = x_coord * 100 / length
  difference = gradient_red_end - gradient_red_start
  red = gradient_red_start + difference * x_coord / length
  difference = gradient_green_end - gradient_green_start
  green = gradient_green_start + difference * x_coord / length
  difference = gradient_blue_end - gradient_blue_start
  blue = gradient_blue_start + difference * x_coord / length
  if current_percent_done <= draw_bar_percent
	rect = Rect.new(x + x_coord-1, y, 1, 4)
	self.contents.fill_rect(rect, Color.new(red, green, blue, 255))
  end
end
 end
 
 def draw_cyan_bar(x, y, length)
gradient_red_start = 80
gradient_red_end = 80
gradient_green_start = 80
gradient_green_end = 80
gradient_blue_start = 130
gradient_blue_end = 130
draw_bar_percent = 100
for x_coord in 1..length
  current_percent_done = x_coord * 100 / length
  difference = gradient_red_end - gradient_red_start
  red = gradient_red_start + difference * x_coord / length
  difference = gradient_green_end - gradient_green_start
  green = gradient_green_start + difference * x_coord / length
  difference = gradient_blue_end - gradient_blue_start
  blue = gradient_blue_start + difference * x_coord / length
  if current_percent_done <= draw_bar_percent
	rect = Rect.new(x + x_coord-1, y, 1, 2)
	self.contents.fill_rect(rect, Color.new(red, green, blue, 255))
  end
end
 end
 
 def draw_orange_bar(x, y, length)
gradient_red_start = 130
gradient_red_end = 130
gradient_green_start = 80
gradient_green_end = 80
gradient_blue_start = 80
gradient_blue_end = 80
draw_bar_percent = 100
for x_coord in 1..length
  current_percent_done = x_coord * 100 / length
  difference = gradient_red_end - gradient_red_start
  red = gradient_red_start + difference * x_coord / length
  difference = gradient_green_end - gradient_green_start
  green = gradient_green_start + difference * x_coord / length
  difference = gradient_blue_end - gradient_blue_start
  blue = gradient_blue_start + difference * x_coord / length
  if current_percent_done <= draw_bar_percent
	rect = Rect.new(x + x_coord-1, y, 1, 2)
	self.contents.fill_rect(rect, Color.new(red, green, blue, 255))
  end
end
 end
 
 def draw_hp_bar(x, y, length, actor_hp, actor_maxhp)
gradient_red_start = 80
gradient_red_end = 80
gradient_green_start = 150
gradient_green_end = 150
gradient_blue_start = 255
gradient_blue_end = 255
draw_bar_percent = (100*actor_hp)/actor_maxhp#[your equation here]
for x_coord in 1..length
  current_percent_done = x_coord * 100 / length
  difference = gradient_red_end - gradient_red_start
  red = gradient_red_start + difference * x_coord / length
  difference = gradient_green_end - gradient_green_start
  green = gradient_green_start + difference * x_coord / length
  difference = gradient_blue_end - gradient_blue_start
  blue = gradient_blue_start + difference * x_coord / length
  if current_percent_done <= draw_bar_percent
	rect = Rect.new(x + x_coord-1, y, 1, 2)
	self.contents.fill_rect(rect, Color.new(red, green, blue, 255))
  end
end
 end
 
 def draw_mp_bar(x, y, length, actor)
gradient_red_start = 200
gradient_red_end = 200
gradient_green_start = 150
gradient_green_end = 150
gradient_blue_start = 80
gradient_blue_end = 80
draw_bar_percent = (100*actor.sp)/actor.maxsp#[your equation here]
for x_coord in 1..length
  current_percent_done = x_coord * 100 / length
  difference = gradient_red_end - gradient_red_start
  red = gradient_red_start + difference * x_coord / length
  difference = gradient_green_end - gradient_green_start
  green = gradient_green_start + difference * x_coord / length
  difference = gradient_blue_end - gradient_blue_start
  blue = gradient_blue_start + difference * x_coord / length
  if current_percent_done <= draw_bar_percent
	rect = Rect.new(x + x_coord-1, y, 1, 2)
	self.contents.fill_rect(rect, Color.new(red, green, blue, 255))
  end
end
 end

 def memo_radiant_bar(length)
gradient_red_start = 80
gradient_red_end = 255
gradient_green_start = 150
gradient_green_end = 255
gradient_blue_start = 255
gradient_blue_end = 255
draw_bar_percent = 100
$r_red = []
$r_green = []
$r_blue = []
l_off = ((length/2)-1)
for x_coord in 1..l_off
  difference = gradient_red_end - gradient_red_start
  $r_red[x_coord] = gradient_red_start + difference * x_coord / l_off
  difference = gradient_green_end - gradient_green_start
  $r_green[x_coord] = gradient_green_start + difference * x_coord / l_off
  difference = gradient_blue_end - gradient_blue_start
  $r_blue[x_coord] = gradient_blue_start + difference * x_coord / l_off
end

#aggiungo un po' di bianco
for x_coord in 1..2
  x_off = x_coord + l_off
  $r_red[x_off] = 255
  $r_green[x_off] = 255
  $r_blue[x_off] = 255
end
  
gradient_red_start = 255
gradient_red_end = 80
gradient_green_start = 255
gradient_green_end = 150
gradient_blue_start = 255
gradient_blue_end = 255
draw_bar_percent = 100
l_off = length - (l_off + 2)
l_back = l_off + 2
l_off = length - l_back
for x_coord in 1..l_off
  x_off = x_coord + l_back
  difference = gradient_red_end - gradient_red_start
  $r_red[x_off] = gradient_red_start + difference * x_coord / l_off
  difference = gradient_green_end - gradient_green_start
  $r_green[x_off] = gradient_green_start + difference * x_coord / l_off
  difference = gradient_blue_end - gradient_blue_start
  $r_blue[x_off] = gradient_blue_start + difference * x_coord / l_off
end
 end
 
 def draw_radiant_bar(x, y, length, actor_hp, actor_maxhp, offset)
draw_bar_percent = (100*actor_hp)/actor_maxhp#[your equation here]
for x_coord in 1..length
  current_percent_done = x_coord * 100 / length
  if current_percent_done <= draw_bar_percent
	rect = Rect.new(x + x_coord-1, y, 1, 2)
	x_off = (x_coord + offset) % length
	red = $r_red[x_off + 1]
	green = $r_green[x_off + 1]
	blue = $r_blue[x_off + 1]
	self.contents.fill_rect(rect, Color.new(red, green, blue, 255))
  end
end
 end
 
 # sp radiant #####################
 
 def memo_radiant_bar_mp(length)
gradient_red_start = 255
gradient_red_end = 200
gradient_green_start = 255
gradient_green_end = 150
gradient_blue_start = 255
gradient_blue_end = 80
draw_bar_percent = 100
$rm_red = []
$rm_green = []
$rm_blue = []
l_off = ((length/2)-1)
for x_coord in 1..l_off
  difference = gradient_red_end - gradient_red_start
  $rm_red[x_coord] = gradient_red_start + difference * x_coord / l_off
  difference = gradient_green_end - gradient_green_start
  $rm_green[x_coord] = gradient_green_start + difference * x_coord / l_off
  difference = gradient_blue_end - gradient_blue_start
  $rm_blue[x_coord] = gradient_blue_start + difference * x_coord / l_off
end

#aggiungo un po' di arancione
for x_coord in 1..2
  x_off = x_coord + l_off
  $rm_red[x_off] = 200
  $rm_green[x_off] = 150
  $rm_blue[x_off] = 80
end
  
gradient_red_start = 200
gradient_red_end = 255
gradient_green_start = 150
gradient_green_end = 255
gradient_blue_start = 80
gradient_blue_end = 255
draw_bar_percent = 100
l_off = length - (l_off + 2)
l_back = l_off + 2
l_off = length - l_back
for x_coord in 1..l_off
  x_off = x_coord + l_back
  difference = gradient_red_end - gradient_red_start
  $rm_red[x_off] = gradient_red_start + difference * x_coord / l_off
  difference = gradient_green_end - gradient_green_start
  $rm_green[x_off] = gradient_green_start + difference * x_coord / l_off
  difference = gradient_blue_end - gradient_blue_start
  $rm_blue[x_off] = gradient_blue_start + difference * x_coord / l_off
end
 end
 
 def draw_radiant_bar_mp(x, y, length, actor_sp, actor_maxsp, offset)
draw_bar_percent = (100*actor_sp)/actor_maxsp#[your equation here]
for x_coord in 1..length
  current_percent_done = x_coord * 100 / length
  if current_percent_done <= draw_bar_percent
	rect = Rect.new(x + x_coord-1, y, 1, 2)
	x_off = (x_coord + offset) % length
	red = $rm_red[x_off + 1]
	green = $rm_green[x_off + 1]
	blue = $rm_blue[x_off + 1]
	self.contents.fill_rect(rect, Color.new(red, green, blue, 255))
  end
end
 end
 
end

 

 

#==============================================================================
# - Window_Selectable
#------------------------------------------------------------------------------
# E' la classe delle finestre con movimento del cursore o con funzione di
# scorrimento
#==============================================================================

class Window_Selectable_New < Window_Base
 #--------------------------------------------------------------------------
 # - Apri una variabile istanza
 #--------------------------------------------------------------------------
 attr_reader   :index					# Posizione del cursore
 attr_reader   :help_window			  # Finestra di aiuto
 #--------------------------------------------------------------------------
 # - Inizializzazione dell'oggetto
 #	 x	  : Coordinate X della finestra
 #	 y	  : Coordinate Y della finestra
 #	 width  : Larghezza della finestra
 #	 height : Altezza della finestra
 #--------------------------------------------------------------------------
 def initialize(x, y, width, height)
super(x, y, width, height)
self.z = 5000
@item_max = 1
@column_max = 1
@index = -1
@cursore = Arrow_Menu.new
@cursore.x = (@column_max * 20) + x
@cursore.y = (@column_max * 20 - self.oy) + y + 10
 end
 #--------------------------------------------------------------------------
 # - Sistemazione della posizione del cursore
 #	 index : Nuova posizione del cursore
 #--------------------------------------------------------------------------
 def index=(index)
@index = index
# Viene aggiornato il testo di aiuto
# (update_help viene definito dal posto successivo)
if self.active and @help_window != nil
  update_help
end
# Viene aggiornato il rettangolo del cursore
update_cursor_rect
 end
 #--------------------------------------------------------------------------
 # - Acquisizione del numero di linee
 #--------------------------------------------------------------------------
 def row_max
# Il numero di linee viene elaborato dal numero di oggetti e il numero
# delle sequenze
return (@item_max + @column_max - 1) / @column_max
 end
 #--------------------------------------------------------------------------
 # - Acquisizione di una linea superiore
 #--------------------------------------------------------------------------
 def top_row
# Origine di trasmissione dei contenuti di una finestra:
# Sulle coordinate Y, l'altezza di una linea viene divisa per 32
return self.oy / 20
 end
 #--------------------------------------------------------------------------
 # - Sistemazione di una linea superiore
 #	 row : La linea viene mostrata in cima
 #--------------------------------------------------------------------------
 def top_row=(row)
# Quando row è minore di zero, allora correggi ed inserisci 0
if row < 0
  row = 0
end
# Quando row è maggiore di row_max - 1, poni row = row_max - 1
if row > row_max - 1
  row = row_max - 1
end
# row Altezza di una linea. è l'origine di trasmissione dei contenuti
# di una finestra. Si considera come coordinata Y
self.oy = row * 20
 end
 #--------------------------------------------------------------------------
 # - 1 Acquisizione del numero di linee che possono essere mostrate
 #	  su una pagina
 #--------------------------------------------------------------------------
 def page_row_max
# Altezza della finestra del frame. Si sottrare 32 all'altezza di
# una linea e si divide per 32
return (self.height - 32) / 20
 end
 #--------------------------------------------------------------------------
 # - 1 Acquisizione del numero di oggetti che possono essere mostrati
 #	  su una pagina
 #--------------------------------------------------------------------------
 def page_item_max
# Numero di linee, page_row_max il numero di sequenze per
# le colonne @column_max
return page_row_max * @column_max
 end
 #--------------------------------------------------------------------------
 # - Sistemazione della finestra di aiuto
 #	 help_window : Nuova finestra di aiuto
 #--------------------------------------------------------------------------
 def help_window=(help_window)
@help_window = help_window
# Il testo di aiuto viene aggiornato
# (update_help viene definito dal posto successivo)
if self.active and @help_window != nil
  update_help
end
 end
 #-------------------------------------------
 #
 #-------------------------------------------
 def visible=(visible)
update_cursor_rect
if visible
  @cursore.visible = true
  @cursore.opacity = 255
  self.opacity = 200
  self.contents_opacity = 255
else
  @cursore.visible = false
  @cursore.opacity = 0
  self.opacity = 0
  self.contents_opacity = 0
end
 end
 #--------------------------------------------------------------------------
 # - Aggiornamento del rettangolo del cursore
 #--------------------------------------------------------------------------
 def update_cursor_rect
# Posizione del cursore. Quando è minore di 0...
if @index < 0
  @cursore.visible = false
  @cursore.opacity = 0#self.cursor_rect.empty
  return
end
# La linea corrente viene acquisita
row = @index / @column_max
# Nel caso di prima, la linea corrente viene mostrata in cima
if row < self.top_row
  # Scorre in modo tale che la linea corrente vada in cima
  self.top_row = row
end
# Nel caso precedente, la linea corrente viene mostrata fino alla
# fine della coda
if row > self.top_row + (self.page_row_max - 1)
  # Scorre in modo tale che la linea corrente vada in coda
  self.top_row = row - (self.page_row_max - 1)
end
# Viene calcolata l'ampiezza del cursore
#cursor_width = self.width / @column_max - 32
# Vengono calcolate le coordinate del cursore
pos_x = (@index % @column_max * 20) + self.x#(cursor_width + 32)
pos_y = (@index / @column_max * 20 - self.oy) + self.y + 10#+ 16
if @cursore.x != pos_x or @cursore.y != pos_y
  @cursore.stop_move
  @cursore.move(4, pos_x, pos_y, 255)
end
# Viene aggiornato il rettangolo del cursore
#self.cursor_rect.set(x, y, cursor_width, 32)
 end
 #--------------------------------------------------------------------------
 # - Aggiornamento frame
 #--------------------------------------------------------------------------
 def update
super
# Quando è nello stato in cui si muove il cursore...
if self.active and @item_max > 0 and @index >= 0
  # Quando il pulsante viene premuto nella direzione bassa...
  if Input.repeat?(Input::DOWN)
	# Numero di squenze: 1 nel caso in cui non viene ripetuta su una
	# direzione del pulsante
	# Nel caso precedente, la posizione del cursore viene data da:
	# (Numero di sequenze - Numero degli oggetti)
	if (@column_max == 1 and Input.trigger?(Input::DOWN)) or
	   @index < @item_max - @column_max
	  # Il cursore viene mosso in basso
	  $game_system.se_play($data_system.cursor_se)
	  @index = (@index + @column_max) % @item_max
	  # Aggiornamento del rettangolo del cursore
	  update_cursor_rect
	end

  end
  # Quando il pulsante viene premuto nella direzione alta...
  if Input.repeat?(Input::UP)
	# Numero di squenze: 1 nel caso in cui non viene ripetuta su una
	# direzione del pulsante
	# Nel caso precedente, la posizione del cursore viene data dal
	# numero di sequenze
	if (@column_max == 1 and Input.trigger?(Input::UP)) or
	   @index >= @column_max
	  # Il cursore viene mosso verso l'alto
	  $game_system.se_play($data_system.cursor_se)
	  @index = (@index - @column_max + @item_max) % @item_max
	  # Aggiornamento del rettangolo del cursore
	  update_cursor_rect
	end
  end
  # Quando il pulsante viene premuto nella direzione di destra...
  if Input.repeat?(Input::RIGHT)
	# Numero di sequenze >= 2 e @index < (numero di oggetti - 1) quando la
	# posizione del cursore...
	if @column_max >= 2 and @index < @item_max - 1
	  # ...viene mossa verso destra
	  $game_system.se_play($data_system.cursor_se)
	  @index += 1
	  # Aggiornamento del rettangolo del cursore
	  update_cursor_rect
	end
  end
  # Quando il pulsante viene premuto nella direzione di sinistra...
  if Input.repeat?(Input::LEFT)
	# Numero di sequenze >= 2 e @index > 0 quando la posizione
	# del cursore...
	if @column_max >= 2 and @index > 0
	  # ...viene mossa verso sinistra
	  $game_system.se_play($data_system.cursor_se)
	  @index -= 1
	  # Aggiornamento del rettangolo del cursore
	  update_cursor_rect
	end
  end
  # Quando il pulsante R viene premuto...
  if Input.repeat?(Input::R)
	# Prima dell'ultima linea sui dati, viene mostrata la linea fino
	# alla fine della coda
	if self.top_row + (self.page_row_max - 1) < (self.row_max - 1)
	  # Il cursore si muove avanti di una pagina
	  $game_system.se_play($data_system.cursor_se)
	  @index = [@index + self.page_item_max, @item_max - 1].min
	  self.top_row += self.page_row_max
	  # Aggiornamento del rettangolo del cursore
	  update_cursor_rect
	end
  end
  # Quando il pulsante L viene premuto...
  if Input.repeat?(Input::L)
	# La linea correntemente mostrata in cima, se > 0...
	if self.top_row > 0
	  # Il cursore si muove indietro di una pagina
	  $game_system.se_play($data_system.cursor_se)
	  @index = [@index - self.page_item_max, 0].max
	  self.top_row -= self.page_row_max
	  # Aggiornamento del rettangolo del cursore
	  update_cursor_rect
	end
  end
end
# Viene aggiornato il testo di aiuto
# (update_help viene definito dal posto successivo)
if self.active and @help_window != nil
  update_help
end
@cursore.update
 end
 
end

#==============================================================================
# - Window_Command
#------------------------------------------------------------------------------
# E' la finestra che compie la selezione del comando generale
#==============================================================================

class Window_Command_New < Window_Selectable_New
 #--------------------------------------------------------------------------
 # - Inizializzazione dell'oggetto
 #	 width	: Larghezza della finestra
 #	 commands : Sistemazione di una sequenza di comandi del personaggio
 #--------------------------------------------------------------------------
 def initialize(width, commands, color = Color.new(255, 255, 255, 255))
# L'altezza di una finestra è calcolata dal numero di un comando
super(0, 0, width, commands.size * 20 + 32)
@item_max = commands.size
@commands = commands
@color = color
self.contents = Bitmap.new(width - 32, @item_max * 20)
refresh
self.index = 0
 end
 
 def reinitialize(width, commands, color = Color.new(255, 255, 255, 255))
# L'altezza di una finestra è calcolata dal numero di un comando
self.width = width
self.height = commands.size * 20 + 32
@item_max = commands.size
@commands = commands
@color = color
self.contents = Bitmap.new(width - 32, @item_max * 20)
refresh
self.index = 0
 end
 #--------------------------------------------------------------------------
 # - Aggiornamento
 #--------------------------------------------------------------------------
 def refresh
self.contents.clear
for i in 0...@item_max
  draw_item(i, @color)
end
 end
 #--------------------------------------------------------------------------
 # - Disegna un oggetto
 #	 index : Numero dell'oggetto
 #	 color : Colore del personaggio
 #--------------------------------------------------------------------------
 def draw_item(index, color)
self.contents.font.color = color
self.contents.font.name = "Comic Sans MS"
self.contents.font.size = 20
self.contents.draw_text_bordered(20, 20 * index - 5, self.contents.width - 8, 24, @commands[index], 0, color)
#rect = Rect.new(30, 24 * index, self.contents.width - 8, 24)
#self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
#self.contents.draw_text_bordered(rect, @commands[index])
 end
 #--------------------------------------------------------------------------
 # - Cancellazione di un oggetto
 #	 index : Numero dell'oggetto
 #--------------------------------------------------------------------------
 def disable_item(index)
draw_item(index, disabled_color)
 end
 
end

class Window_Message < Window_Selectable
 
#--------------------------------------------------------------------------
# - Processo di terminazionde del messaggio
#--------------------------------------------------------------------------
def terminate_message
self.active = false
self.pause = false
self.index = -1
self.contents.clear
@contents_showing = false
if $game_temp.message_proc != nil
  $game_temp.message_proc.call
end
$game_temp.message_text = nil
$game_temp.message_proc = nil
$game_temp.choice_start = 99
$game_temp.choice_max = 0
$game_temp.choice_cancel_type = 0
$game_temp.choice_proc = nil
$game_temp.num_input_start = 99
$game_temp.num_input_variable_id = 0
$game_temp.num_input_digits_max = 0
$game_temp.battle_menu_closed = true
if @gold_window != nil
  @gold_window.dispose
  @gold_window = nil
end
 end
 
end

#==============================================================================
# - Window_BattleStatus
#------------------------------------------------------------------------------
# E' la finestra che mostra lo stato dei membri del gruppo sulla
# schermata di battaglia
#==============================================================================

class Window_Target_Stat < Window_Base
 #--------------------------------------------------------------------------
 # - Inizializzazione dell'oggetto
 #--------------------------------------------------------------------------
 def initialize
super(0, 0, 200, 100)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = "Arial"
self.contents.font.size = 24
self.opacity = 180
@level_up_flags = [false, false, false, false]
 end
 #--------------------------------------------------------------------------
 # - Rilascia
 #--------------------------------------------------------------------------
 def dispose
super
 end
 #--------------------------------------------------------------------------
 # - Sistemazione del miglioramento dei flags
 #	 actor_index : アクターインデックス
 #--------------------------------------------------------------------------
 def level_up(actor_index)
@level_up_flags[actor_index] = true
 end
 #--------------------------------------------------------------------------
 # - Aggiornamento
 #--------------------------------------------------------------------------
 def refresh(event_id)
self.contents.clear
@item_max = $game_troop.enemies.size
  enemy_id = $game_troop.che_nemico?(event_id)
  actor = $game_troop.enemies[enemy_id]
  draw_target_name(actor, 0, 0)
  draw_target_hp(actor, 0, 25)
 end
 #--------------------------------------------------------------------------
 # - Aggiornamento frame
 #--------------------------------------------------------------------------
 def update
super
# L'opacità è abbastanza bassa durante la fase principale
if $game_temp.battle_main_phase
  self.contents_opacity -= 4 if self.contents_opacity > 191
else
  self.contents_opacity += 4 if self.contents_opacity < 255
end
 end
end

class Window_Barre < Window_Base
 #--------------------------------------------------------------------------
 # - Inizializzazione dell'oggetto
 #--------------------------------------------------------------------------
 def initialize
super(160, 380, 480, 160)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = "Arial"
self.contents.font.size = 24
self.opacity = 0
@level_up_flags = [false, false, false, false]
@offset = 0
@offset_mp = 0
memo_radiant_bar(84)
memo_radiant_bar_mp(50)
refresh
 end
 #--------------------------------------------------------------------------
 # - Rilascia
 #--------------------------------------------------------------------------
 def dispose
super
 end
 #--------------------------------------------------------------------------
 # - Sistemazione del miglioramento dei flags
 #	 actor_index : アクターインデックス
 #--------------------------------------------------------------------------
 def level_up(actor_index)
@level_up_flags[actor_index] = true
 end
 #--------------------------------------------------------------------------
 # - Aggiornamento
 #--------------------------------------------------------------------------
 def refresh
self.contents.clear
tot_party = [$game_party.actors.size, 3].min
@offset = (@offset % 84) + 1
@offset_mp = (@offset_mp % 50) + 1
for i in 0...tot_party
  actor = $game_party.actors[i]
  actor_y = i * 22 + (3-tot_party)*22
  draw_radiant_bar(260, actor_y+24, 84, actor.hp, actor.maxhp, @offset)
  draw_radiant_bar_mp(350+15, actor_y+24, 50, actor.sp, actor.maxsp, @offset_mp)
end
 end
 #--------------------------------------------------------------------------
 # - Aggiornamento frame
 #--------------------------------------------------------------------------
 def update
super	  

 end
end

#==============================================================================
# - Window_BattleStatus
#------------------------------------------------------------------------------
# E' la finestra che mostra lo stato dei membri del gruppo sulla
# schermata di battaglia
#==============================================================================

class Window_BattleStatus < Window_Base
 #--------------------------------------------------------------------------
 # - Inizializzazione dell'oggetto
 #--------------------------------------------------------------------------
 def initialize
super(160, 380, 480, 160)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = "Arial"
self.contents.font.size = 24
self.opacity = 0
@level_up_flags = [false, false, false, false]
refresh
 end
 #--------------------------------------------------------------------------
 # - Rilascia
 #--------------------------------------------------------------------------
 def dispose
super
 end
 #--------------------------------------------------------------------------
 # - Sistemazione del miglioramento dei flags
 #	 actor_index : アクターインデックス
 #--------------------------------------------------------------------------
 def level_up(actor_index)
@level_up_flags[actor_index] = true
 end
 #--------------------------------------------------------------------------
 # - Aggiornamento
 #--------------------------------------------------------------------------
 def refresh
self.contents.clear
tot_party = [$game_party.actors.size, 3].min
for i in 0...tot_party
  actor = $game_party.actors[i]
  actor_y = i * 22 + (3-tot_party)*22
  draw_target_name(actor, 170, actor_y)
  draw_player_hp(actor.hp, actor.maxhp, 260, actor_y)
  draw_player_sp(actor, 350, actor_y)
end
$game_temp.party_change_flag = false
 end
 
 def refresh_bar
self.contents.clear
 end
 #--------------------------------------------------------------------------
 # - Aggiornamento frame
 #--------------------------------------------------------------------------
 def update
super	  

 end
end

#==============================================================================
# - Arrow_Menu
#------------------------------------------------------------------------------
# E' lo sprite del cursore usato nei menu 
#==============================================================================

class Arrow_Menu < Sprite
 #--------------------------------------------------------------------------
 # - Variabile
 #--------------------------------------------------------------------------
 attr_reader   :index					# Indice
 attr_reader   :help_window			  # Finestra d'aiuto
 #--------------------------------------------------------------------------
 # - Inizializzazione
 #	 viewport : Livello
 #--------------------------------------------------------------------------
 def initialize
super
self.bitmap = RPG::Cache.icon("HandCursor.png")
self.z = 5000
self.opacity = 0
@move_count = 0
@index = 0
@duration = 0
@help_window = nil
update
 end
 #--------------------------------------------------------------------------
 # - Settaggio della posizione
 #	 index : Nuovo Indice
 #--------------------------------------------------------------------------
 def index=(index)
@index = index
update
 end
 #--------------------------------------------------------------------------
 # - Settaggio della finestra d'aiuto
 #	 help_window : Nuova Finestra d'aiuto
 #--------------------------------------------------------------------------
 def help_window=(help_window)
@help_window = help_window
# Aggiornamento (update_help e' definito nella sottoclasse)
if @help_window != nil
  update_help
end
 end
 
 def stop_move
@move_count = 0
 end
 
 def move(duration, x, y, opacity)
@duration = duration
@target_x = x.to_f
@target_y = y.to_f
@target_opacity = opacity.to_f
 end
 
 def duration
return @duration
 end
 #--------------------------------------------------------------------------
 # - Aggiornamento
 #--------------------------------------------------------------------------
 def update
# Rinnovamento Posizione
@move_count = (@move_count + 1) % 40
if @move_count == 5
  move(4, self.x + 8, self.y, 255)
elsif @move_count == 10
  move(4, self.x - 8, self.y, 255)
end

if @duration >= 1
  d = @duration
  if self.x != @target_x
	self.x = (self.x * (d - 1) + @target_x) / d
  end
  if self.y != @target_y
	self.y = (self.y * (d - 1) + @target_y) / d
  end
  if self.opacity != @target_opacity
	self.opacity = (self.opacity * (d - 1) + @target_opacity) / d
  end
  @duration -= 1
end
# Aggiornamento (update_help e' definito nella sottoclasse)
if @help_window != nil
  update_help
end
 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

class Scene_Map
 #--------------------------------------------------------------------------
 # - Processo Principale
 #--------------------------------------------------------------------------
 def main
# Fase
@phase = 0
@elenco = []
@attacking = [false]
@curs = Arrow_Menu.new
@curs.z = 4000
@curs.visible = false
@curs.opacity = 0
# Settaggio Spriteset
@spriteset = Spriteset_Map.new
# Settaggio della finestra dei messaggi
@message_window = Window_Message.new
# Settaggio finestra status personaggi
@battle_pg = Window_BattleStatus.new
@battle_pg.visible = true
# Settaggio finestra comandi
@battle_menu = Window_Command_New.new(200, ["Attacca", "Magie/Tecniche", "Mystes", "Gambit", "Oggetti"])
@battle_menu.x = 16
@battle_menu.y = 480 - @battle_menu.height - 16
#@battle_menu.index = -1
@battle_menu.visible = false
@battle_menu.active = false
# Settaggio finestra delle barre hp/sp
@barre = Window_Barre.new

@target_stat = Window_Target_Stat.new
@target_stat.visible = false
# Fade
Graphics.transition
# Loop Principale
loop do
  # Aggiornamento Grafica
  Graphics.update
  # Aggiornamento Input
  Input.update
  # Aggiornamento Frame
  update
  # Quando cambia la scena blocca il loop
  if $scene != self
	break
  end
end
# Preparazione Fade
Graphics.freeze
# Eliminazione chipaset
@spriteset.dispose
# Eliminazione finestra dei messaggi
@message_window.dispose
# Eliminazione Status Personaggi
@battle_pg.dispose
# Eliminazione menu di battaglia
@battle_menu.dispose
# Se la scena è il title
if $scene.is_a?(Scene_Title)
  # Blocca la grafica
  Graphics.transition
  Graphics.freeze
end
 end
 #--------------------------------------------------------------------------
 # - Gestione Aggiornamento
 #--------------------------------------------------------------------------
 def update
case @phase
when 0
  update_base
when 1
  update_battle_menu
  @battle_menu.update
when 2
  update_magie_tecniche
  @battle_menu.update
when 3
  update_selezione_bersaglio
  @battle_menu.update
  @curs.update
end
 end
 #--------------------------------------------------------------------------
 # - Aggiornamento Base
 #--------------------------------------------------------------------------
 def update_base
# 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
# Aggiorna lo status dei personaggi
if $game_temp.party_change_flag
  @battle_pg.refresh
end
@barre.refresh
# 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 è stato attivato il menu di battaglia
if $game_temp.battle_menu_closed == false
  # Quando non c'è un evento o il menu non è disabilitato
  unless $game_system.map_interpreter.running? or
		 $game_system.menu_disabled
	# Vai al battle menu
	$game_system.se_play($data_system.decision_se)
	@battle_menu.reinitialize(200, ["Attacca", "Magie/Tecniche", "Mystes", "Gambit", "Oggetti"])
	@battle_menu.y = 480 - @battle_menu.height - 16
	@battle_menu.visible = true
	@battle_menu.active = true
	@battle_menu.index = 0
	@phase = 1
  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
 #--------------------------------------------------------------------------
 # - Aggiornamento Menu di Battaglia
 #-------------------------------------------------------------------------- 
 def update_battle_menu
# Quando B è premuto
if Input.trigger?(Input::B)
  # Suona SE Annulla
  $game_system.se_play($data_system.cancel_se)
  # Chiudi il menu
  @battle_menu.active = false
  @battle_menu.visible = false
  $game_temp.battle_menu_closed = true
  @phase = 0
end
# Quando C è premuto
if Input.trigger?(Input::C)
  # Scelta del comando da eseguire
  case @battle_menu.index
  when 0 # Attacca
	# Suona SE Azione
	$game_system.se_play($data_system.decision_se)
	# Vai al menu Magie/Tecniche
	@elenco = []
	elenco_nomi = []
	for i in $game_map.events.values
	  if i.nemico? and i.in_chara_range?(5)
		@elenco.push(i)
		id_nemico = i.name.to_i
		elenco_nomi.push($data_enemies[id_nemico].name)
	  end
	end
	if @elenco.empty?
	  text = "Nessun bersaglio rilevato"
	  @battle_menu.reinitialize(250, [text], Color.new(255, 100, 100, 255))
	else
	  @battle_menu.reinitialize(200, elenco_nomi)
	  @curs.x = @elenco[@battle_menu.index].real_x / 4 - 25
	  @curs.y = @elenco[@battle_menu.index].real_y / 4
	  @curs.visible = true
	  @curs.opacity = 255
	  event_id = @elenco[@battle_menu.index].id
	  @target_stat.refresh(event_id)
	  @target_stat.visible = true
	end
	@battle_menu.y = 480 - @battle_menu.height - 16
	@battle_menu.index = 0
	@phase = 3
  when 1 # Magie/Tecniche
	# Suona SE Azione
	$game_system.se_play($data_system.decision_se)
	# Vai al menu Magie/Tecniche
	@battle_menu.reinitialize(200, ["Bianca", "Nera"])
	@battle_menu.y = 480 - @battle_menu.height - 16
	@battle_menu.index = 0
	@phase = 2
  when 2
  end
end
 end
 #--------------------------------------------------------------------------
 # - Aggiornamento Magie/Tecniche
 #-------------------------------------------------------------------------- 
 def update_magie_tecniche
# Quando B è premuto
if Input.trigger?(Input::B)
  # Suona SE Annulla
  $game_system.se_play($data_system.cancel_se)
  # Vai al menu di battaglia
  @battle_menu.reinitialize(200, ["Attacca", "Magie/Tecniche", "Mystes", "Gambit", "Oggetti"])
  @battle_menu.y = 480 - @battle_menu.height - 16
  @battle_menu.index = 0
  @phase = 1
end
# Quando C è premuto
if Input.trigger?(Input::C)
  # Scelta del comando da eseguire
  #case @battle_menu.index
  #when 1  # Magie/Tecniche
	# Suona SE Azione
	$game_system.se_play($data_system.decision_se)
	# Chiudi il menu
	@battle_menu.active = false
	@battle_menu.visible = false
	$game_temp.battle_menu_closed = true
	@phase = 0
  #end
end
 end
 #--------------------------------------------------------------------------
 # - Aggiornamento Selezione Bersaglio
 #-------------------------------------------------------------------------- 
 def update_selezione_bersaglio
unless @elenco.empty?
  pos_x = @elenco[@battle_menu.index].real_x / 4 -25
  pos_y = @elenco[@battle_menu.index].real_y / 4
  pos_x = pos_x - ($game_map.display_x / 4)
  pos_y = pos_y - ($game_map.display_y / 4)
  event_id = @elenco[@battle_menu.index].id
  @curs.stop_move
  if (@curs.x != pos_x or @curs.y != pos_y) and @curs.duration == 0
	@curs.stop_move
	@curs.move(4, pos_x, pos_y, 255)
	@target_stat.refresh(event_id)
  end
end
# Quando B è premuto
if Input.trigger?(Input::B)
  # Suona SE Annulla
  $game_system.se_play($data_system.cancel_se)
  # Vai al menu di battaglia
  @battle_menu.reinitialize(200, ["Attacca", "Magie/Tecniche", "Mystes", "Gambit", "Oggetti"])
  @battle_menu.y = 480 - @battle_menu.height - 16
  @battle_menu.index = 0
  @curs.visible = false
  @target_stat.visible = false
  @phase = 1
end
# Quando C è premuto
if Input.trigger?(Input::C)
  unless @elenco.empty?
	@elenco[@battle_menu.index].animation_id = 7
	enemy_id = $game_troop.che_nemico?(event_id)
	$game_troop.enemies[enemy_id].hp -= 300
	if $game_troop.enemies[enemy_id].dead?
	  Audio.se_play("Audio/SE/145-Support03.ogg", 80, 100)
	  @elenco[@battle_menu.index].animation_id = 96
	  @elenco[@battle_menu.index].death
	end
	@curs.visible = false
	@battle_menu.active = false
	@battle_menu.visible = false
	@target_stat.visible = false
	$game_temp.battle_menu_closed = true
	@phase = 0
  else
	$game_system.se_play($data_system.buzzer_se)
  end
end
 end
end

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

	   ###################
############ XPML Definition ###############
	   #	  by Rataime #
	   ###################
def XPML_read(markup,event_id,max_param_number=0)
  parameter_list = nil
  event=$game_map.events[event_id]
  return if event.list==nil
 for i in 0...event.list.size
   if event.list[i].code == 108 and event.list[i].parameters[0].downcase == "begin "+markup.downcase
	 parameter_list = [] if parameter_list == nil
	 for j in i+1...event.list.size
	   if event.list[j].code == 108
		 parts = event.list[j].parameters[0].split
		 if parts.size!=1 and parts[0].downcase!="begin"
		   if parts[1].to_i!=0 or parts[1]=="0"
			 parameter_list.push(parts[1].to_i)
		   else
			 parameter_list.push(parts[1])
		   end
		 else
		   return parameter_list
		 end
	   else
		 return parameter_list
	   end
	   return parameter_list if max_param_number!=0 and j==i+max_param_number
	 end
   end
 end
  return parameter_list
end

class Bitmap
 def draw_text_bordered(x, y, width, height, text, align = 0, color = Color.new(255, 255, 255, 255))
font.color.set(0, 0, 0, 100)
draw_text(x-1, y-1, width, height, text, align)
draw_text(x-1, y+1, width, height, text, align)
draw_text(x+1, y-1, width, height, text, align)
draw_text(x+1, y+1, width, height, text, align)

draw_text(x-1, y, width, height, text, align)
draw_text(x+1, y, width, height, text, align)
draw_text(x, y-1, width, height, text, align)
draw_text(x, y+1, width, height, text, align)

font.color = color
draw_text(x, y, width, height, text, align)
 end
 def draw_text_shadowed(x, y, width, height, text, align = 1, color = Color.new(255, 255, 255, 255))
font.color.set(100, 100, 100)
draw_text(x+1, y+2, width, height, text, align)
draw_text(x+2, y+1, width, height, text, align)
draw_text(x+2, y+2, width, height, text, align)
font.color.set(0, 0, 0)
draw_text(x-1, y-1, width, height, text, align)
draw_text(x-1, y+1, width, height, text, align)
draw_text(x+1, y-1, width, height, text, align)
draw_text(x+1, y+1, width, height, text, align)
font.color = color
draw_text(x, y, width, height, text, align)
 end
end

 

 

Aspetto speranzoso domande o proposte! :°D

HandCursor.rar

FFXII_DK.txt

Link to comment
Share on other sites

  • Answers 81
  • Created
  • Last Reply

Top Posters For This Question

Top Posters For This Question

Posted Images

Recommended Posts

  • 0
complimenti Alato :)

http://img90.imageshack.us/img90/4576/rbrlogofh8.gif

Invece di cercare la tua strada nel buio, Raven, attendi l'alba

Yes I'd have to say I like my privacy!

And did you know you're on closed circuit TV?

So smile at me!

 

 

 

 

<div style="margin:20px;margin-top:5px" "="">

 

Spoiler

 

 

 

 

Il Manifesto del Making Italiano

SALVIAMO IL MAKING ITALIANO!!

Dopo un test dei nostri esperti (Alato, Blake e havana24) abbiamo scoperto che ad interesse risponde interesse: cioè se voi dimostrate di essere interessati a ciò che creano gli altri, questi saranno stimolati a continuare a creare! E' un concetto semplice ma estremamente sottovalutato, basta vedere quanti topic di bei giochi sono caduti nel dimenticatoio e sono stati cagati solo da poche persone (prendiamo per esempio il fantastico gioco di Vech che vi invito a vedere nella sezione RM2k).

Perciò quello che dobbiamo fare è: leggere, leggere, leggere, postare, postare, postare! E questo non significa postare a caso, ma leggere per bene il progetto di qualcuno, le domande poste, le creazioni grafiche e musicali, e fare dei post in cui si propongano miglioramenti, si critichino le brutture, si esaltino le bellezze, si aiutino gli oppressi etc etc

BASTA AL MAKING ITALIANO CHE VA A ROTOLI! DIAMOCI UNA SVEGLIATA!!

Per dimostrarvi ciò che sto esponendo vi riporto che la volta in cui abbiamo provato (io, Blake e havah) a fare una cosa di questo genere, c'è costata un pomeriggio ma il giorno dopo abbiamo ottenuto il numero massimo di utenti online mai raggiunto!!! Ma soprattutto ciò significa che l'interesse riguardo al making era stato, almeno momentaneamente, risvegliato!!

Voi pensate che eravamo solo in 3 a cercare tutti i topic e ravvivarli (con sincerità e senza i soliti falsi "Oh che bello.", ma anche con critiche per lavori incompleti o assurdi) e abbiamo ottenuto quel grande risultato: se lo facessimo tutti non sarebbe una cosa potentissima?!?

BASTA ALLE SOLITE BANALI DISCUSSIONI SULLA DECADENZA DEI GIOCHI!! FACCIAMOLI STI GIOCHI!!!

Chi è contrario a questa cosa, può pure continuare così ma è una persona che col making non ha nulla a che fare, ma chi crede nel making inizi ora, immediatamente a seguire questa linea di pensiero!

 

Ma chi è d'accordo, chi davvero ci tiene al making, incolli questo Manifesto nella propria firma!! Mettete anche voi questa firma!!

Link to comment
Share on other sites

  • 0
Prima che pensiate che abbia già abbandonato... sto lavorando sui personaggi del party, insomma sto cercando di fare una specie di caterpillar script (ma creandolo totalmente da zero che quello che gira per il web non mi piace) ed è una cosa abbastanza complessa. Spero entro stasera di riuscire a postare qalche progresso, anche se attualmente sto un po' impantanato. ;O;
Link to comment
Share on other sites

  • 0
...e da lì non mi sono più spantanato. Poi vabbè tra crisi esistenziali, sentimentali, fisiche e psichedeliche non ho più neanche aperto RMXP ma questo è un altro discorso.. tra qualche tempo probabilmente lo ripiglierò in mano, c'è qualcuno che ha notato altri bug?
Link to comment
Share on other sites

  • 0
si, da me uno.. praticamente, non so perchè, in una mappa con 3-4 mostri mi faceva che il cursore che indicava i mostri era 6-7 tile più in basso rispetto ai mostri.. credo che fosse perchè avevo messo il punto iniziale del gruppo in una parte bassa della mappa rispetto ai mostri, ma non ne sono sicuro.. me lo faceva solo in certe mappe, cmq non ho modificato nulla nello script perchè non ne sono capace..

"Dopo gli ultimi Final Fantasy, ho capito solamente una cosa: che il gioco è bello quando Nomura poco."

Making is not dead. You are dead.
RELEASE: La Bussola d'Oro | Download | Video di anteprima - La Partenza di Hanna

http://i.imgur.com/cFgc2lW.png

Prova Standrama!

Link to comment
Share on other sites

  • 0

@Tio: a me non è mai successo, se mi spieghi per bene la situazione in cui capita provo a ricrearla e vedere un poco di aggiustare oO

 

@mistercirro: sì, i mostri non fanno altro che inseguirti è normale. Per quanto riguarda i comandi è normale pure quelli: li ho messi tanto per riempire, e vedere se il menu non si impallava, ma non sono per nulla funzionanti (né tutti presenti).

 

Per ora ancora non ci sto lavorando di nuovo sopra che sto un po' preso in altri affari, ma mi sta tornando voglia di proseguirlo. :D

 

Intanto comunque provo ad aggiustare gli eventuali bugs ^^

Link to comment
Share on other sites

  • 0

Sostituite questo Script.rxdata a quello presente in un nuovo progetto e scoprite cosa ho aggiunto di nuovo.. un orsacchiotto a chi se ne accorge. :D

 

P.s. c'entra con il party ^^

 

Ora devo uscire di corsa quindi non posso fare per bene il file txt dopo aggiorno e vi dico. Cercate i bugs se possibile!

 

EDIT: Ho tolto lo Scripts.rxdata, per utilizzare lo script scaricate il *.txt presente nella prima pagina del topic

Link to comment
Share on other sites

  • 0

Nessuno ha vinto l'orsacchiotto :blink:

 

Ho completato il mio personale caterpillar script: due membri del party oltre al personaggio principale sono ora presenti su mappa (come in FFXII) e lo seguono se si distanzia troppo da loro. Insomma niente più tristi trenini irreali dietro all'eroe, questi compagni vi seguono solo se vi allontanate di più di un quadretto altrimenti rimangono fermi in attesa! Inoltre si posizionano da soli uno alla sinistra e uno alla destra del personaggio!

Ovviamente ci sono ancora delle cose da ritoccare: innanzitutto il fatto che i due compagni sono in stato "fantasma", cioè passano anche nei quadretti non attraversabili.

Altra cosa da aggiustare è in caso di teletrasporto in un'altra mappa: i personaggi rimangono nello stesso punto dello schermo in cui stavano prima, dopodiché si riposizionano... se lo provate capite meglio di sicuro.

Infine ho notato poco fa che soltanto all'inizio del gioco i due compagni fanno un movimento strano (si mettono in fila dietro l'eroe) ma poi non lo fanno più. Non sono certo di aver capito perchè ma credo di riuscire a risolvere.

 

A breve edito e aggiungo qualche screen (si capisce poco negli screen ma meglio di niente ^^)

 

Nella prima pagina del topic ho aggiornato lo script, seguite le istruzioni lì riportate per provarlo (anche lo Scripts.rxdata postato qui sopra va bene).

Se trovate bugs ovviamente fatemelo sapere che cerco di rimediare.

 

 

P.S.

Nei prossimi giorni vedrò anche di creare una versione di questo caterpillar al di fuori del FFXII Development Kit in odo che possa venir utilizzato in qualunque progetto! (magari aspetto di correggere quegli errorini che ho citato sopra)

Link to comment
Share on other sites

  • 0
Nessuno ha vinto l'orsacchiotto :blink:

 

Uffa, avevo scaricato lo script per vederlo stasera çOç

 

Ho completato il mio personale caterpillar script: due membri del party oltre al personaggio principale sono ora presenti su mappa (come in FFXII) e lo seguono se si distanzia troppo da loro. Insomma niente più tristi trenini irreali dietro all'eroe, questi compagni vi seguono solo se vi allontanate di più di un quadretto altrimenti rimangono fermi in attesa! Inoltre si posizionano da soli uno alla sinistra e uno alla destra del personaggio!

Ovviamente ci sono ancora delle cose da ritoccare: innanzitutto il fatto che i due compagni sono in stato "fantasma", cioè passano anche nei quadretti non attraversabili.

Altra cosa da aggiustare è in caso di teletrasporto in un'altra mappa: i personaggi rimangono nello stesso punto dello schermo in cui stavano prima, dopodiché si riposizionano... se lo provate capite meglio di sicuro.

Infine ho notato poco fa che soltanto all'inizio del gioco i due compagni fanno un movimento strano (si mettono in fila dietro l'eroe) ma poi non lo fanno più. Non sono certo di aver capito perchè ma credo di riuscire a risolvere.

 

A breve edito e aggiungo qualche screen (si capisce poco negli screen ma meglio di niente ^^)

 

Nella prima pagina del topic ho aggiornato lo script, seguite le istruzioni lì riportate per provarlo (anche lo Scripts.rxdata postato qui sopra va bene).

Se trovate bugs ovviamente fatemelo sapere che cerco di rimediare.

P.S.

Nei prossimi giorni vedrò anche di creare una versione di questo caterpillar al di fuori del FFXII Development Kit in odo che possa venir utilizzato in qualunque progetto! (magari aspetto di correggere quegli errorini che ho citato sopra)

 

 

 

 

Allora, lo ho provato.. in pratica è successo una sola volta che i miei seguaci si erano sovrapposti (ma cosa stanno facend... Oo) per il resto il caterpillar funziona alla perfezione, se ci sono ostacoli cercano di evitarli.. l'unica cosa che mi lascia perplesso è che riesco ad attaccare anche a 8 tile di distanza e non quando sono vicino al mostro, è una cosa da sistemare oppure è così? :O Ovvio, poi a 10 tile non lo individua ;) Aspetto info anche se penso che per ora nel mio progetto attuale non lo utilizzerò ma in un altro forse... :D

 

EDIT: Sorpassano gli ostacoli XD Eppure dalla prova che ho fatto sembrano evitarli! Maledetti percorsi semplici!

Edited by Thund

ico_youtube.png ThundPlayer - Canale Dedicato a RPG Maker

bannerssmini2.png?w=100 bannerq.png?w=100 banner1mini.png

banneryourchoice2mini.png bannerrhmini.png banner2bmini.png

Link to comment
Share on other sites

  • 0

E' normale che sorpassino gli ostacoli (ancora devo renderli bene "solidi" xD).

 

E' normale che si possa attaccare da chilometri, mi pare pure di averlo detto più sopra: in futuro tutto si aicinerà sempre di più al sistea di battaglia di FF.

 

Per il bug della partenza ho risolto! E ho pure risolto per quanto riguarda la presenza o no di 3 pg nel party: prima crashava se non c'erano i due compagni, ora invece potete pure sbizzarrirvi in cambi di personaggi tramite evento che non dovrebbe mai crashare.

 

Lo script aggiornato l'ho uppato in prima pagina. ;P

 

Ora cerco di "solidificare".. XD

Link to comment
Share on other sites

  • 0
Io invece ottengo un'errore non appena avvio il comando attacca. Ora non sono al mio PC quindi non mi ricordo che diamine di errore era di preciso, ma mi sembra che fosse un qualcosa tipo "undefined method name for..." e poi non ricordo per cosa. Succede solo a me o ti ho trovato un buggolone?

Il mondo è il cancro... Io la cura...

 

Il mio sport preferito:

Gli altri --> (T_T#)O==(^_^Q) <-- IO

 

I miei alias:

http://www.naruto-kun.com/images/narutotest/shikamaru.jpg

-----------------------------------------------------

http://www.naruto-kun.com/images/narutotest/rocklee.jpg

-----------------------------------------------------

http://www.ff-fan.com/chartest/banners/auron.jpg

 

Broly88's

http://pokejungle.net/other/pokepet/trainers/e4k2.png http://pokejungle.net/other/pokepet/Charizard.gif

Flame Dancer the level 99 Charizard!

 

http://img259.imageshack.us/img259/7446/rockleeoj1.gif http://img233.imageshack.us/img233/7449/sorajm1.gif

Link to comment
Share on other sites

  • 0

Sto facendo da betatester allo script XD

Nessun problema per ora con il caterpillar, ho notato che delle volte, se faccio, ATTACCA, ATTACCA di continuo e cambio i target (ho messo 10 mostri nella stanza XD) il cursore manina si sposta sopra il menu, sopra il comando attacca ;) come se ci fosse un nuovo comando (limit? *o*)

 

Ho riprovato sta cosa ma mi è successo solo una volta quando ero completamente circondato O.o Poi non so.. O potrebbe essere un bug, o potrebbe essere il mio pc... o è un caso, boh, ti ho avvertito ;)

ico_youtube.png ThundPlayer - Canale Dedicato a RPG Maker

bannerssmini2.png?w=100 bannerq.png?w=100 banner1mini.png

banneryourchoice2mini.png bannerrhmini.png banner2bmini.png

Link to comment
Share on other sites

  • 0

Per il posizionamento del cursore....boh...probabilmente in ste situazioni veloci c'è qualche imperfezione nel codice, viene saltato qualche passaggio e il cursore rimane dove non dovrebbe rimanere...a me non è mai capitato, ma ora mi dovrò mettere lì a fare qualche stress test per capire come risolvere.. XDD

 

In compenso mi han segnalato un grosso baco: se rimuovi personaggi senza aggiungerne altri..questi non spariscono, ma rimangono dele copie che ti seguono. Problema risolto e aggiornato il txt in prima pagina (ancora devo aggiornare lo script nello spoiler XD)

Link to comment
Share on other sites

  • 0
Ovviamente ci sono ancora delle cose da ritoccare: innanzitutto il fatto che i due compagni sono in stato "fantasma", cioè passano anche nei quadretti non attraversabili.

Altra cosa da aggiustare è in caso di teletrasporto in un'altra mappa: i personaggi rimangono nello stesso punto dello schermo in cui stavano prima, dopodiché si riposizionano... se lo provate capite meglio di sicuro.

Infine ho notato poco fa che soltanto all'inizio del gioco i due compagni fanno un movimento strano (si mettono in fila dietro l'eroe) ma poi non lo fanno più. Non sono certo di aver capito perchè ma credo di riuscire a risolvere.

 

Risolti tutti questi bachi!!

 

Adesso i compagni di squadra godono di un intelligenza artificiale che gli permette di evitare la maggior parte degli ostacoli (ci sono ancora casi in cui si incastrano ma cercherò di rendere l'AI più efficiente casomai) quindi in generale risultano molto più credibili. :D

 

Ora posso ritenere il caterpillar completo, se notate qualche bug fatemelo sapere che io passo ad altro. ( menù multipli attendetemi ;O; )

 

Come al solito per la versione aggiornata scaricate il *.txt dalla prima pagina del topic e seguite le istruzioni.

Link to comment
Share on other sites

  • 0

Eccomi Ala! Allora l'errore che mi dà, era come ti dicevo: "undefined method name for nil NilClass" e più precisamente staimo parlando di questa riga:

elenco_nomi.push($data_enemies[id_nemico].name)

la 1669 se non vado errato. Me lo dà ogni volta che uso il comando attacca se ho almeno un nemico in range. Altrimenti, giustamente, compare la scritta "nessun nemico in range".

Il mondo è il cancro... Io la cura...

 

Il mio sport preferito:

Gli altri --> (T_T#)O==(^_^Q) <-- IO

 

I miei alias:

http://www.naruto-kun.com/images/narutotest/shikamaru.jpg

-----------------------------------------------------

http://www.naruto-kun.com/images/narutotest/rocklee.jpg

-----------------------------------------------------

http://www.ff-fan.com/chartest/banners/auron.jpg

 

Broly88's

http://pokejungle.net/other/pokepet/trainers/e4k2.png http://pokejungle.net/other/pokepet/Charizard.gif

Flame Dancer the level 99 Charizard!

 

http://img259.imageshack.us/img259/7446/rockleeoj1.gif http://img233.imageshack.us/img233/7449/sorajm1.gif

Link to comment
Share on other sites

  • 0
Risolti tutti questi bachi!!

 

Adesso i compagni di squadra godono di un intelligenza artificiale che gli permette di evitare la maggior parte degli ostacoli (ci sono ancora casi in cui si incastrano ma cercherò di rendere l'AI più efficiente casomai) quindi in generale risultano molto più credibili. :D

 

Ora posso ritenere il caterpillar completo, se notate qualche bug fatemelo sapere che io passo ad altro. ( menù multipli attendetemi ;O; )

 

Come al solito per la versione aggiornata scaricate il *.txt dalla prima pagina del topic e seguite le istruzioni.

 

Rieccomi! Muahahahaahha

Dunque, provata la nuova versione, il caterpillar non è affatto male anzi, mi è piaciuto, solo due cose (una positiva, una negativa):

 

1)I seguaci capiscono che ci sono degli oggetti solidi e che si bloccano se ci vanno a sbattere ma evidentemente non capiscono che anche i due seguaci sono solidi XD Mi è capitato più di una volta che si mettevano nello stesso tile mentre erano bloccati, quindi se è possibile farli capire che anche loro sono un ostacolo potrebbe andare meglio ;)

 

2) E' vero, si bloccano delle volte ma se non riesci a fare di meglio pazienza, vai a riprenderli.. ora, non so se ti ricordi final fantasy 10 (se ci hai giocato), c'è un pezzo in cui Yuna ti segue.. io mi divertivo a farla incastrare in alcuni punti e vederla continuamente correre verso di me XD Se non ci sono riusciti quelli della square-enix puoi passare anche tu!

 

P.S hai messo tu un effetto spasmi-convulsione se non raggiungono l'eroe? è divertente vederli sbattere avanti e indietro sui muri XD

 

P.P.S Magari il fatto che non ti seguano alla perfezione potrebbe essere una sfida in più durante le battaglie no? ok, lascia stare quest'ultima frase.... -.- XD

 

Eccomi Ala! Allora l'errore che mi dà, era come ti dicevo: "undefined method name for nil NilClass" e più precisamente staimo parlando di questa riga:

elenco_nomi.push($data_enemies[id_nemico].name)

la 1669 se non vado errato. Me lo dà ogni volta che uso il comando attacca se ho almeno un nemico in range. Altrimenti, giustamente, compare la scritta "nessun nemico in range".

 

Hai messo il commento "begin nemico" sul mostro e modificato il suo nome con l'id del database?

Tipo, se vuoi il secondo mostro del database rinonimi l'evento da EV001 a 002

Edited by Thund

ico_youtube.png ThundPlayer - Canale Dedicato a RPG Maker

bannerssmini2.png?w=100 bannerq.png?w=100 banner1mini.png

banneryourchoice2mini.png bannerrhmini.png banner2bmini.png

Link to comment
Share on other sites

  • 0
Ah ok, fatto. Risolto

Il mondo è il cancro... Io la cura...

 

Il mio sport preferito:

Gli altri --> (T_T#)O==(^_^Q) <-- IO

 

I miei alias:

http://www.naruto-kun.com/images/narutotest/shikamaru.jpg

-----------------------------------------------------

http://www.naruto-kun.com/images/narutotest/rocklee.jpg

-----------------------------------------------------

http://www.ff-fan.com/chartest/banners/auron.jpg

 

Broly88's

http://pokejungle.net/other/pokepet/trainers/e4k2.png http://pokejungle.net/other/pokepet/Charizard.gif

Flame Dancer the level 99 Charizard!

 

http://img259.imageshack.us/img259/7446/rockleeoj1.gif http://img233.imageshack.us/img233/7449/sorajm1.gif

Link to comment
Share on other sites

  • 0

Sì infatti credo che il problema di Broly sia appunto non aver dato il nome all'evento, così a occhio mi pare l'unica causa possibile. :sisi:

 

@thund:

1) farli cozzare tra di loro è una cosa sicuramente fattibile ma.. ho pensato che in un combattimento, o comunqe in situazioni strette è sicuramente meglio vedere una sovrapposizione dei compagni piuttosto che rianere incastrati come dei fessi tra un mostro e un compagno...insomma io lo vedo più comodo passarci attraverso per giocare decentemente...

 

2) è quello che ho pensato anch'io, i casi in cui si bloccano sono comunque rari (basta che il mapper cerca di evitare dei "canestri in cui si infila il compare) e sono d'accordo con te sul fatto della square-enix... anche se in FFXII l'AI gli fa anche decidere se il personaggio ha preso una scala o un'altra strada (insomma fa in modo che non si divididano, per esempio nelle fogne) e qesto non ho realmente la minima idea di come farlo senza andare a toccare gli script che gestiscono la mappa o_

 

P.S. gli ID comunque non sono altro che numeri, quindi scrivere 002 o 2 è indifferente... più comodo 2 :)

Link to comment
Share on other sites

  • 0
@thund:

1) farli cozzare tra di loro è una cosa sicuramente fattibile ma.. ho pensato che in un combattimento, o comunqe in situazioni strette è sicuramente meglio vedere una sovrapposizione dei compagni piuttosto che rianere incastrati come dei fessi tra un mostro e un compagno...insomma io lo vedo più comodo passarci attraverso per giocare decentemente...

 

Si, ineffetti può essere utile.. a parte che penso bisogna aspettare la programmazione del combattimento, magari potrebbe anche funzionare bene!

 

2) è quello che ho pensato anch'io, i casi in cui si bloccano sono comunque rari (basta che il mapper cerca di evitare dei "canestri in cui si infila il compare) e sono d'accordo con te sul fatto della square-enix... anche se in FFXII l'AI gli fa anche decidere se il personaggio ha preso una scala o un'altra strada (insomma fa in modo che non si divididano, per esempio nelle fogne) e qesto non ho realmente la minima idea di come farlo senza andare a toccare gli script che gestiscono la mappa o_

 

P.S. gli ID comunque non sono altro che numeri, quindi scrivere 002 o 2 è indifferente... più comodo 2 :)

 

Vero, ma pensavo che in final fantasy XII l'AI dei seguaci si espandeva su tutta la mappa.. a meno che non seguano l'idea del "come uscire da un labirinto" XD (seguono la strada sempre da un lato finchè non si rincontrano col pg! ) In effetti è un mistero su come si muovevano bene in quei canali.. Oo

 

Oppure per evitare questo problema mi ricordo in ragnarok una sorta di AI per gli homuncoli (ora non voglio dileguarmi troppo) In pratica il personaggio c'aveva una creatura che lo seguiva sempre, solo che quando tipo il personaggio si fermava la creatura iniziava a girare intorno al pg e molte volte tramite questi giri la creatura riusciva a superare involontariamente gli ostacoli.. :O

 

Siccome sto andando troppo OT, il caterpillar ora come ora va benissimo, penso che tutti gli altri script "caterpillar" funzionano allo stesso modo, quindi meglio che non ti impantani su questa cosa ;)

ico_youtube.png ThundPlayer - Canale Dedicato a RPG Maker

bannerssmini2.png?w=100 bannerq.png?w=100 banner1mini.png

banneryourchoice2mini.png bannerrhmini.png banner2bmini.png

Link to comment
Share on other sites

  • 0

Grande Al, sempre più figo! :0

Scusa se ti faccio vedere solamente ora il bug di cui ti ho parlato prima (vedi img sotto). Praticamente solo in questa mappa, non so perchè, la freccia del cursore si trova più in basso rispetto al mostro.. non so il motivo, cmq nella mappa ci sono arrivato tramite un teletrasporto che porta i personaggi più o meno al centro, più in basso rispetto al mostro (considera che la mappa è grande 20x20 e non 20x15, infatti più in alto c'è una parte non visualizzata nello screen).

Poi altro piccolo bug che ho trovato: se il chara del nemico è di un'altra tonalità, nel gioco continua ad avere quella standard (anche se poi, quando è nel raggio d'azione, cambia tonalità).. non è niente di grave perchè difficilmente uno cambia tonalità ai chara dei nemici, però lo dico per correttezza XD

screenbug1.JPG

"Dopo gli ultimi Final Fantasy, ho capito solamente una cosa: che il gioco è bello quando Nomura poco."

Making is not dead. You are dead.
RELEASE: La Bussola d'Oro | Download | Video di anteprima - La Partenza di Hanna

http://i.imgur.com/cFgc2lW.png

Prova Standrama!

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...