Jump to content
Rpg²S Forum

*Menu con Faces


Belxebu
 Share

Recommended Posts

Face_Menu V.1.0 By Rinnegatamante

Descrizione


Questo è il mio primo script,di sicuro esisterà gia qualcosa del genere ma io lo posto,in pratica permette di avere un menu con i Faces dei personaggi al posto dei Chara


Autore


Rinnegatamante (Ovvero io)



Allegati


Sostituite Window_Base con questo script:

 

#==============================================================================
# - Window_Base by Rinnegatamante
#------------------------------------------------------------------------------
#  FACE MENU V.1.0
#==============================================================================

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.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, width = 120)
	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 

 

 

Sostituite Window_MenuStatus con questo script:

 

#==============================================================================
# Window_MenuStatus by Rinnegatamante
#------------------------------------------------------------------------------
# FACE MENU V.1.0
#==============================================================================

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 + 80)
	  draw_actor_name(actor, x, y)
	  draw_actor_class(actor, x + 144, y)
	  draw_actor_level(actor, x, y + 32)
	  draw_actor_state(actor, x + 90, y + 32)
	  draw_actor_exp(actor, x, 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


Copiate i due script qui sopra nei corrispettivi script gia esistenti poi per inserire un face al posto del chara basterà mettere delle immagini formato PNG(consigliatamente)nella cartella Pictures con il nome dell'eroe seguito da "_face" tipo se l'eroe si chiamerà Garland(non il chara o il battlers ma proprio il nome dell'eroe nel database)il file si dovrà chiamare Garland_face.Sono consigliate immagini di grandezza 55x55 perchè se piu grosse potrebbero andare sopra alla scritta delle statistiche dell'eroe(ma se er voi non fa niente va bene qualsiasi misura).Buon divertimento!!!



Ecco uno screenshot:
http://img242.imageshack.us/img242/45/facecharacy9.jpg

Link to comment
Share on other sites

Solo 2 consigli:
1) Non ti conviene copiare l'intera classe Window_Base, bastava fare così:

 

class Window_Base < Window
  #--------------------------------------------------------------------------
  # - 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.name)
	cw = face.width
	ch = face.height
	src_rect = Rect.new(0, 0, cw, ch)
	self.contents.blt(x , y - ch, face, src_rect)	
  end 
end 

 

 


Stesso discorso per la classe Window_MenuStatus, bastava fare così:

 

class Window_MenuStatus < Window_Selectable
  #--------------------------------------------------------------------------
  # - 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 + 80)
	  draw_actor_name(actor, x, y)
	  draw_actor_class(actor, x + 144, y)
	  draw_actor_level(actor, x, y + 32)
	  draw_actor_state(actor, x + 90, y + 32)
	  draw_actor_exp(actor, x, y + 64)
	  draw_actor_hp(actor, x + 236, y + 32)
	  draw_actor_sp(actor, x + 236, y + 64)
	end
  end
end

 

 

 


2) Secondo me ti conveniva fare che le facce si basassero sul nome del character(il pupazzo di gioco). Questo perchè se uno nel suo gioco vuol far cambiare nome al personaggio non potrà mai sapere come si dovrà chiamare il face.

Un altro appunto(lo so che sono rompip***e).
Ma sei sicuro che le faccie coprano le scritte?
In teoria dovrebbe essere il contrario(ma posso anche sbagliarmi).

Bel primo lavoro comunque, continua così.

PS:
Ti conviene mettere gli script fra due spoiler altrimenti uno sta a sfogliare la pagina per mezz'ora XD

Link to comment
Share on other sites

Si,volevo dire il contrario,il face viene coperto kmq per la comodità di mettere solo un pezzetto di script è vero ma c'è certa gente che dopo sbaglia a mettere e crea errori visto ke io ho anche dei piccoli commenti ad ogni parte e quindi ho piu righe negli script base.Poi quello di fare in base al pupazzo di gioco è un idea...
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...