Script

#===========================================================================
# - Face Menu V.1.1 By Rinnegatamante
#-----------------------------------------------------------------------------
#  Permette di avere nel menu Face al posto di Chara
#===========================================================================

class Window_Base < Window
  #--------------------------------------------------------------------------
  # - Inizializzazione dell'oggetto
  #	 x	  : Coordinate X della finestra
  #	 y	  : Coordinate Y della finestra
  #	 width  : Larhezza della finestra
  #	 height : Altezza della finestra
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height)
	super()
	@windowskin_name = $game_system.windowskin_name
	self.windowskin = RPG::Cache.windowskin(@windowskin_name)
	self.x = x
	self.y = y
	self.width = width
	self.height = height
	self.z = 100
  end
  #--------------------------------------------------------------------------
  # - Rilascia
  #--------------------------------------------------------------------------
  def dispose
	# Verrà rilasciato se il bitmap dei contenuti di una finestra
	# viene sistemato
	if self.contents != nil
	  self.contents.dispose
	end
	super
  end
  #--------------------------------------------------------------------------
  # - Acquisizione del colore del carattere
  #	 n : Numero del colore del carattere (0~7)
  #--------------------------------------------------------------------------
  def text_color(n)
	case n
	when 0
	  return Color.new(255, 255, 255, 255)
	when 1
	  return Color.new(128, 128, 255, 255)
	when 2
	  return Color.new(255, 128, 128, 255)
	when 3
	  return Color.new(128, 255, 128, 255)
	when 4
	  return Color.new(128, 255, 255, 255)
	when 5
	  return Color.new(255, 128, 255, 255)
	when 6
	  return Color.new(255, 255, 128, 255)
	when 7
	  return Color.new(192, 192, 192, 255)
	else
	  normal_color
	end
  end
  #--------------------------------------------------------------------------
  # - Acquisizione del colore del carattere: Generale
  #--------------------------------------------------------------------------
  def normal_color
	return Color.new(255, 255, 255, 255)
  end
  #--------------------------------------------------------------------------
  # - Acquisizione del colore del carattere: Invalidità
  #--------------------------------------------------------------------------
  def disabled_color
	return Color.new(255, 255, 255, 128)
  end
  #--------------------------------------------------------------------------
  # - Acquisizione del colore del carattere: Sistema
  #--------------------------------------------------------------------------
  def system_color
	return Color.new(192, 224, 255, 255)
  end
  #--------------------------------------------------------------------------
  # - Acquisizione del colore del carattere: Criticità
  #--------------------------------------------------------------------------
  def crisis_color
	return Color.new(255, 255, 64, 255)
  end
  #--------------------------------------------------------------------------
  # - Acquisizione del colore del carattere: Impossibilità
  #--------------------------------------------------------------------------
  def knockout_color
	return Color.new(255, 64, 0)
  end
  #--------------------------------------------------------------------------
  # - Aggiornamento frame
  #--------------------------------------------------------------------------
  def update
	super
	# Viene risistemato quando l'interfaccia grafica(skin) di una finestra
	# viene cambiato
	if $game_system.windowskin_name != @windowskin_name
	  @windowskin_name = $game_system.windowskin_name
	  self.contents.font.name = "Arial"
	  self.contents.font.size = 24
	  self.windowskin = RPG::Cache.windowskin(@windowskin_name)
	end
  end
  #--------------------------------------------------------------------------
  # - Disegna la grafica
  #	 actor : Personaggio
  #	 x	 : Posizione del disegno: Coordinate X
  #	 y	 : Posizione del disegno: Coordinate Y
  #--------------------------------------------------------------------------
def draw_actor_graphic(actor, x, y)
	bitmap = RPG::Cache.character(actor.character_name, actor.character_hue)
	cw = bitmap.width / 4
	ch = bitmap.height / 4
	src_rect = Rect.new(0, 0, cw, ch)
	self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect)
  end
  #--------------------------------------------------------------------------
  # - Disegna il face
  #	 actor : Personaggio
  #	 x	 : Posizione del disegno: Coordinate X
  #	 y	 : Posizione del disegno: Coordinate Y
  #--------------------------------------------------------------------------
def draw_actor_face(actor, x, y)
face = RPG::Cache.picture(actor.character_name + "_face")
cw = face.width
ch = face.height
src_rect = Rect.new(0, 0, cw, ch)
self.contents.blt(x , y - ch, face, src_rect)	
end   

  #--------------------------------------------------------------------------
  # - Disegna il nome
  #	 actor : Personaggio
  #	 x	 : Posizione del disegno: Coordinate X
  #	 y	 : Posizione del disegno: Coordinate Y
  #--------------------------------------------------------------------------
  def draw_actor_name(actor, x, y)
	self.contents.font.name = "Arial"
	self.contents.font.size = 24
	self.contents.font.color = normal_color
	self.contents.draw_text(x, y, 120, 32, actor.name)
  end
  #--------------------------------------------------------------------------
  # - Disegna la classe
  #	 actor : Personaggio
  #	 x	 : Posizione del disegno: Coordinate X
  #	 y	 : Posizione del disegno: Coordinate Y
  #--------------------------------------------------------------------------
  def draw_actor_class(actor, x, y)
	self.contents.font.name = "Arial"
	self.contents.font.size = 24
	self.contents.font.color = normal_color
	self.contents.draw_text(x, y, 236, 32, actor.class_name)
  end
  #--------------------------------------------------------------------------
  # - Disegna il livello
  #	 actor : Personaggio
  #	 x	 : Posizione del disegno: Coordinate X
  #	 y	 : Posizione del disegno: Coordinate Y
  #--------------------------------------------------------------------------
  def draw_actor_level(actor, x, y)
	self.contents.font.name = "Arial"
	self.contents.font.size = 24
	self.contents.font.color = system_color
	self.contents.draw_text(x, y, 32, 32, "Lv")
	self.contents.font.color = normal_color
	self.contents.draw_text(x + 32, y, 24, 32, actor.level.to_s, 2)
  end
  #--------------------------------------------------------------------------
  # - Creazione della sequenza dello stato del personaggio per il disegno
  #	 actor	   : Personaggio
  #	 width	   : Ampiezza del disegno
  #--------------------------------------------------------------------------
  def make_battler_state_text(battler, width, need_normal)
	# Viene acquisita l'ampiezza di una parentesi
	brackets_width = self.contents.text_size("[]").width
	# Viene creata la sequanza del carattere del nome dello stato
	text = ""
	for i in battler.states
	  if $data_states[i].rating >= 1
		if text == ""
		  text = $data_states[i].name
		else
		  new_text = text + "/" + $data_states[i].name
		  text_width = self.contents.text_size(new_text).width
		  if text_width > width - brackets_width
			break
		  end
		  text = new_text
		end
	  end
	end
	# Quando la sequanza del carattere del nome dello stato è vuota,
	# allora diviene "[Normale]"
	if text == ""
	  if need_normal
		text = "Normale"
	  end
	else
	  # Viene allegata una parentesi
	  text = "[" + text + "]"
	end
	# Torna alla sequenza completata dei caratteri
	return text
  end
  #--------------------------------------------------------------------------
  # - Disegna lo stato
  #	 actor : Personaggio
  #	 x	 : Posizione del disegno: Coordinate X
  #	 y	 : Posizione del disegno: Coordinate Y
  #	 width : Ampiezza del disegno
  #--------------------------------------------------------------------------
  def draw_actor_state(actor, x, y)
	text = make_battler_state_text(actor, width, true)
	self.contents.font.name = "Arial"
	self.contents.font.size = 24
	self.contents.font.color = actor.hp == 0 ? knockout_color : normal_color
	self.contents.draw_text(x , y, width, 32, text)
  end
  #--------------------------------------------------------------------------
  # - Disegna i punti EXP
  #	 actor : Personaggio
  #	 x	 : Posizione del disegno: Coordinate X
  #	 y	 : Posizione del disegno: Coordinate Y
  #--------------------------------------------------------------------------
  def draw_actor_exp(actor, x, y)
	self.contents.font.name = "Arial"
	self.contents.font.size = 24
	self.contents.font.color = system_color
	self.contents.draw_text(x, y, 40, 32, "EXP")
	self.contents.font.color = normal_color
	self.contents.draw_text(x + 40, y, 84, 32, actor.exp_s, 2)
	self.contents.draw_text(x + 124, y, 12, 32, "/", 1)
	self.contents.draw_text(x + 136, y, 84, 32, actor.next_exp_s)
  end
  #--------------------------------------------------------------------------
  # - Disegna i punti HP
  #	 actor : Personaggio
  #	 x	 : Posizione del disegno: Coordinate X
  #	 y	 : Posizione del disegno: Coordinate Y
  #	 width : Ampiezza del disegno
  #--------------------------------------------------------------------------
  def draw_actor_hp(actor, x, y, width = 144)
	# Disegna la sequenza dei caratteri: "HP"
	self.contents.font.color = system_color
	self.contents.font.name = "Arial"
	self.contents.font.size = 24
	self.contents.draw_text(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 = "Arial"
	self.contents.font.size = 24
	self.contents.draw_text(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 = "Arial"
	  self.contents.font.size = 24
	  self.contents.draw_text(hp_x + 48, y, 12, 32, "/", 1)
	  self.contents.draw_text(hp_x + 60, y, 48, 32, actor.maxhp.to_s)
	end
  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_actor_sp(actor, x, y, width = 144)
	# Disegna la sequenza dei caratteri: "MP"
	self.contents.font.color = system_color
	self.contents.font.name = "Arial"
	self.contents.font.size = 24
	self.contents.draw_text(x, y, 32, 32, $data_system.words.sp)
	# Calcola se c'è qualche spazio che disegna i punti MaxMp
	if width - 32 >= 108
	  sp_x = x + width - 108
	  flag = true
	elsif width - 32 >= 48
	  sp_x = x + width - 48
	  flag = false
	end
	# 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 = "Arial"
	self.contents.font.size = 24
	self.contents.draw_text(sp_x, y, 48, 32, actor.sp.to_s, 2)
	# Disegna i punti MaxMP
	if flag
	  self.contents.font.color = normal_color
	  self.contents.font.name = "Arial"
	  self.contents.font.size = 24
	  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
  #--------------------------------------------------------------------------
  # - Disegna un parametro
  #	 actor : Personaggio
  #	 x	 : Posizione del disegno: Coordinate X
  #	 y	 : Posizione del disegno: Coordinate Y
  #	 type  : Tipo di parametro (0~6)
  #--------------------------------------------------------------------------
  def draw_actor_parameter(actor, x, y, type)
	case type
	when 0
	  parameter_name = $data_system.words.atk
	  parameter_value = actor.atk
	when 1
	  parameter_name = $data_system.words.pdef
	  parameter_value = actor.pdef
	when 2
	  parameter_name = $data_system.words.mdef
	  parameter_value = actor.mdef
	when 3
	  parameter_name = $data_system.words.str
	  parameter_value = actor.str
	when 4
	  parameter_name = $data_system.words.dex
	  parameter_value = actor.dex
	when 5
	  parameter_name = $data_system.words.agi
	  parameter_value = actor.agi
	when 6
	  parameter_name = $data_system.words.int
	  parameter_value = actor.int
	end
	self.contents.font.color = system_color
	self.contents.font.name = "Arial"
	self.contents.font.size = 24
	self.contents.draw_text(x, y, 120, 32, parameter_name)
	self.contents.font.color = normal_color
	self.contents.font.name = "Arial"
	self.contents.font.size = 24
	self.contents.draw_text(x + 120, y, 36, 32, parameter_value.to_s, 2)
  end
  #--------------------------------------------------------------------------
  # - Disegna il nome di un oggetto
  #	 item : Oggetto
  #	 x	: Posizione del disegno: Coordinate X
  #	 y	: Posizione del disegno: Coordinate Y
  #--------------------------------------------------------------------------
  def draw_item_name(item, x, y)
	if item == nil
	  return
	end
	bitmap = RPG::Cache.icon(item.icon_name)
	self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
	self.contents.font.color = normal_color
	self.contents.font.name = "Arial"
	self.contents.font.size = 24
	self.contents.draw_text(x + 28, y, 212, 32, item.name)
  end
end

#==============================================================================
# PARTE 2
#==============================================================================

class Window_MenuStatus < Window_Selectable
  #--------------------------------------------------------------------------
  # - Inizializzazione dell'oggetto
  #--------------------------------------------------------------------------
  def initialize
	super(0, 0, 480, 480)
	self.contents = Bitmap.new(width - 32, height - 32)
	refresh
	self.active = false
	self.index = -1
  end
  #--------------------------------------------------------------------------
  # - Aggiornamento
  #--------------------------------------------------------------------------
  def refresh
	self.contents.clear
	self.contents.font.name = "Arial"
	self.contents.font.size = 24
	@item_max = $game_party.actors.size
	for i in 0...$game_party.actors.size
	  x = 64
	  y = i * 116
	  actor = $game_party.actors[i]
	  draw_actor_face(actor, x - 60, y + 90)
	  draw_actor_name(actor, x + 90, y)
	  draw_actor_class(actor, x + 280, y)
	  draw_actor_level(actor, x + 30, y + 32)
	  draw_actor_state(actor, x + 120, y + 32)
	  draw_actor_exp(actor, x + 30, y + 64)
	  draw_actor_hp(actor, x + 236, y + 32)
	  draw_actor_sp(actor, x + 236, y + 64)
	end
  end
  #--------------------------------------------------------------------------
  # - Aggiornamento del rettangolo del cursore
  #--------------------------------------------------------------------------
  def update_cursor_rect
	if @index < 0
	  self.cursor_rect.empty
	else
	  self.cursor_rect.set(0, @index * 116, self.width - 32, 96)
	end
  end
end


Istruzioni per l'uso

Create una nuova classe sopra main e chiamatela FaceMenu e metteteci lo script di qui sopra.In questa nuova versione si dovrà mettere delle immagini consigliate non di piu di 100x100 pixel(come potete vedere è aumentato,infatti ora non sovrascrive le lettere)chiamte con il nome del chara piu alla fine il suffisso "_face" quindi se avete un chara di nome Garland,il suo face si chiamerà Garland_face.I face vanno nella cartella Pictures.Buon divertimento!!!