Jump to content
Rpg²S Forum
  • 0

SCRIPT Interactive Fogs & Tilesets


Chris Darril
 Share

Question

Ebbene si carissimi, ho bisogno del vostro aiuto/consiglio/appoggio/parere tecnico :D

credo che in media sappiate che sto sviluppando un videogioco dall'estate 2009 che porta il nome di REMOTHERED e che a conti fatti è il remake in chiave più simil-realistica e attuale del capolavoro datato 1995 Clock Tower (di origine nipponica).

 

Ebbene vi linko un video che vi farà meglio comprendere le basi del perchè di questo topic su questa sezione :sisi:

REMOTHERED - Vagando per la foresta (Gameplay)

 

Qualora aveste visto il video vi sarete accorti che lo scenario proposto in questione è una "ricca" foresta notturna, ebbene composta conseguenzialmente da:

1) Panorama di sfondo con alberi più lontani e resa video vagamente annebbiata

2) Tileset composto con molteplici varianti

3) Fog adoperato come layer superiore e non come per effetti atmosferici del tipo nebbia o oscurità incombenti.

 

Ebbene impostate le dovute trasparenze non disdegnerei poter contare sulla possibilità di una movenza a se dei tre differenti piani mostrati. Il panorama fà già il suo dovuto compito distintamente dal tileset e si muove con più lentezza, soggetto alla maggior distanza rispetto alla visuale, ma la fog rimane LETTERALMENTE appiccicata al tileset, muovendosi con esso.

 

Il punto della questione sarebbe trovar il modo o comunque un script editato a dovere che possa consentire, laddove richiesto, il movimento a se della fog impostata (ferma) una volta in movimento o magari di alcuni settori del tileset impiegato. In questo caso più velocemente che gli altri due layers mostrati più a distanza...

 

Tenendo comunque in considerazione che per il gioco sfrutto già i seguenti script e settings:

- Script rimpicciolimento prospettico

- Script animazioni a 9 frames

- Script in-fra-frames (frames aggiuntivi per la rotazione, realizzato da Progm - Team Rhaxen)

- I tilesets hanno impostazioni numerate a seconda del tipo di superficie calpestata (con annesso suono)

 

Vi ringrazierei all'infinito qualora sapreste aiutarmi o quanto meno consigliarmi. Ma ho già un mega-grazie per quelli che sono arrivati fin qui. :sisi:

 

CHRIS

Edited by Chris Darril
Link to comment
Share on other sites

Recommended Posts

  • 0
1°) Per ora ho aggiunto solo che tu puoi dare il tono alla fog... chiaramente ancora non va ad adeguarsi automaticamente alla mappa, ma posso provare e dovrebbe essere fattibile.

2°) Riguardo al menù, tu vorresti che la fog compaia sopra la windowskin, ma sotto le scritte?

3°) Posizionandola a 0 con gli HUD di gioco è tutto a posto? EDIT: ca**ata, a 0 manco se vede!

1) Beh ottimo :D

2) No, vorrei proprio che nel menu di default non ci fosse, si che comunque il menu di gioco non sarà quello di default ma un altro menu tutto ad eventi su un'altra mappa

3) Ops c'hai ragione, scusami, volevo dire 1

 

CHRIS

Link to comment
Share on other sites

  • 0
Guest gino
1) Beh ottimo :D

2) No, vorrei proprio che nel menu di default non ci fosse, si che comunque il menu di gioco non sarà quello di default ma un altro menu tutto ad eventi su un'altra mappa

3) Ops c'hai ragione, scusami, volevo dire 1

 

CHRIS

1) soliti problemini del cavolo ma sono sulla buona strada

2)per farla sparire basta poco. vedo e provvedo

3)io pensavo che eri proprio stato costretto a metterla a 0 XD

 

EDIT: Ecco, dai stavolta ci siamo... ho fatto anche diverse prove e funziona. Adesso quando entra nel menu diventa completamente trasparente e ritorna normale quando si esce. Attenzione, ho rimodificato il comando per creare la fog. Vuole solo nome_fog e opacità.

 

 

=begin [ISTRUZIONI] RICHIEDE LA PRESENZA DI UN FILE CHIAMATO void NELLA CARTELLA FOGS! VA BENE UNFILE QUALSIASI BASTA CHE SIA UN FILE .PNG VUOTO E TRASPARENTE. Inserisci i seguenti comandi in un evento: $super_fog.create([nomefile], [opacità])  crea una fog caricando il file [nomefile] dalla cartella fogs,   applicando un'opacità pari a [opacità]   (ricorda che i valori vanno da 0 a 255)  $super_fog.set_xvar(2)  determina quanto velocemente si sposta la fog in senso orizzontale. $super_fog.set_yvar(0)  determina quanto velocemente si sposta la fog in senso verticale. $super_fog.dispose  elimina la fog.  Il comportamento della fog è determinato anche dalle sue dimensioni.Prova combinazioni diverse per trovare il risultato migliore. =end class Scene_Map   alias gino_fog_scene_map_main main  def main	gino_fog_scene_map_main	if $scene.is_a?(Scene_Menu)	  $super_fog.set_opa(0, true) unless $super_fog == nil	end  end end class Scene_Menu   alias gino_fog_scene_menu_main main  def main	gino_fog_scene_menu_main	if $scene.is_a?(Scene_Map)	  $super_fog.set_opa($super_fog.opa, false) unless $super_fog == nil	end  end end class Interpreter   def command_205	if $super_fog != nil	  $super_fog.start_fog_tone_change(@parameters[0], @parameters[1] * 2)	  return true	else	  return false	end  end   def command_355	script = @list[@index].parameters[0] + "n"	loop do	  if @list[@index+1].code == 655		script += @list[@index+1].parameters[0] + "n"	  else		break	  end	  @index += 1	end	result = eval(script)	#exception handling	begin	  return false if result == false	rescue	  #do nothing	ensure	  return true #mica è detto che è vero, però proviamo!	end	#@@	return true  end end class Scene_Title   alias gino_fog_command_new_game command_new_game  def command_new_game	$super_fog = Super_Fog.new	gino_fog_command_new_game  endend class Scene_Load   alias gino_fog_read_save_data read_save_data  def read_save_data(file)	$super_fog = Super_Fog.new	gino_fog_read_save_data(file)  end end class Spriteset_Map   alias gino_fog_update update  def update	$super_fog.tone = $game_map.fog_tone	gino_fog_update	$super_fog.update_movement unless $super_fog == nil  end   alias gino_fog_dispose dispose  def dispose	gino_fog_dispose	$super_fog.dispose unless $superfog == nil  end end class Game_Map   alias gino_fog_map_update update  def update	gino_fog_map_update	$super_fog.update_tone unless $super_fog == nil  end   alias :gino_fog_setup :setup  def setup(map_id)	gino_fog_setup(map_id) 	@map = load_data(sprintf("Data/Map%03d.rxdata", @map_id))	tileset = $data_tilesets[@map.tileset_id]	$super_fog.fog_name = tileset.fog_name 	$super_fog.tone = Tone.new(0, 0, 0, 0)	$super_fog.tone_target = Tone.new(0, 0, 0, 0)	$super_fog.tone_duration = 0  end end class Super_Fog  attr_accessor :fog_name  attr_accessor :plane  attr_accessor :xvar  attr_accessor :yvar  attr_accessor :tone  attr_accessor :tone_target  attr_accessor :tone_duration  attr_accessor :opa   def initialize	@xvar = 4	@yvar = 4	@tone = Tone.new(0, 0, 0, 0)	viewport = Viewport.new(0, 0, 640, 480)	viewport.z = 1#300	@plane = Plane.new(viewport)	bitmap = RPG::Cache.fog("void", 0)	@plane.bitmap = bitmap	@plane.opacity = 100  end   def create(fog_name = "void", opacity = 100)	@fog_name = fog_name	update_fog	@plane.opacity = opacity  end   def update_tone	if self.tone_duration >= 1	  d = self.tone_duration	  target = self.tone_target	  self.tone.red += (self.tone.red * (d-1) + target.red) / d	  self.tone.green += (self.tone.green  * (d-1) + target.green) / d	  self.tone.blue += (self.tone.blue * (d-1)  + target.blue) / d	  self.tone.gray += (self.tone.gray * (d-1) + target.gray) / d	  self.tone_duration -= 1   end  end   def start_fog_tone_change(tone, duration)	@tone_target = tone.clone	@tone_duration = duration	if @tone_duration == 0	  @tone = @tone_target.clone	end  end   def set_xvar(value = 4)	@xvar = value  end   def set_yvar(value = 4)	@yvar = value  end   def update_fog	if @plane.bitmap != nil		plane.bitmap.dispose		plane.bitmap = nil	  end	  if @fog_name != ""		@plane.bitmap = RPG::Cache.fog(@fog_name, 0)	  end  end      def update_movement	if @xvar != 0	  @plane.ox = $game_map.display_x / @xvar  unless $game_map == nil	else	  @plane.ox = 0	end	if @yvar != 0	  @plane.oy = $game_map.display_x / @yvar  unless $game_map == nil	else	  @plane.oy = 0	end  end   def dispose	self.plane.dispose unless self.plane.disposed?  end   def set_opa(num, store)	self.opa = self.plane.opacity if store == true	self.plane.opacity = num rescue doing = "nada"  end end

 

Fra l'altro sto imparando diversi trucchi niente male che potrebbero servirmi per altri script :P

 

EDIT2: ho un leggero mal di testa! :P :P

Edited by gino
Link to comment
Share on other sites

  • 0

Aahahahahaha, non parliamo di mal di testa, l'intero pomeriggio col tizio che lavora al sito...e alla fine abbiamo fatto si e no solo qualche animazione in flash XD

 

ad ogni modo, evviva, funge, si muove da se, rispetta i layers...però c'è il solito e fedele problema della colorazione a se.

:tongue:

Link to comment
Share on other sites

  • 0
Guest gino
Aahahahahaha, non parliamo di mal di testa, l'intero pomeriggio col tizio che lavora al sito...e alla fine abbiamo fatto si e no solo qualche animazione in flash XD

 

ad ogni modo, evviva, funge, si muove da se, rispetta i layers...però c'è il solito e fedele problema della colorazione a se.

:tongue:

A questo punto avrei bisogni di vedere di persona. Non mi rendo conto di come possa accadere sta cosa.

Link to comment
Share on other sites

  • 0
Guest gino
Ecco qui, ho riportato anche com'è strutturato l'evento col call script etc

 

http://imageshack.us/m/6/1364/errorww.jpg

Il problema è che non mi rendo conto io dell'esatto utilizzo che fai del mio script... :P Un attimo e ti posto una demo di ciò che intendo.

 

EDIT: Ieri sera volevo fare un progetto per capire se mi era chiaro cosa volevi ottenere, e la mia fog non funzionava! o.O Così oggi ho deciso di distruggere e ricominciare, tentando un approccio diverso. Stavolta sono riuscito a rimanere molto vicino alla struttura originale, limitandomi ad espanderne la flessibilità. Termino gli ultimi ritocchi e poi posto.

 

SCRIPT:

 

=begin [ISTRUZIONI] -Usa i seguenti comandi in un evento:$xvar = valore  Imposta il valore di scivolamento lungo l'asse x. In caso di valore = 0, viene  corretto in 4 per evitare errore "Divisione per 0"  $yvar = valore  Imposta il valore di scivolamento lungo l'asse y. In caso di valore = 0, viene  corretto in 4 per evitare errore "Divisione per 0" -Usando la funzione Find e cercando la stringa "#change this", puoi individuare il valore da cambiare per modificare la profondità della fog (e farla sparire sotto altri elementi [HUD]). [posizione di default: RIGA 72]  =end #===============================================================================# SCRIPT START#-------------------------------------------------------------------------------# CAN'T TOUCH THIS!#===============================================================================  $xvar = 4$yvar = 4 #===============================================================================# Interpreter#-------------------------------------------------------------------------------# Fixed a bug when evaluating a script returning a Tone#===============================================================================class Interpreter   def command_355	script = @list[@index].parameters[0] + "n"	loop do	  if @list[@index+1].code == 655		script += @list[@index+1].parameters[0] + "n"	  else		break	  end	  @index += 1	end	result = eval(script)	#exception handling	begin	  return false if result == false	rescue	  #do nothing	ensure	  return true #mica è detto che è vero, però proviamo!	end	#@@	return true  end end #===============================================================================# Spriteset_Map#-------------------------------------------------------------------------------# added xvar and yvar attributes, used to make the fog act like a parallax#===============================================================================class Spriteset_Map   alias gino_initialize initialize  def initialize	gino_initialize	@fog.z = 3000 #change this  end   def update	if @panorama_name != $game_map.panorama_name or	   @panorama_hue != $game_map.panorama_hue	  @panorama_name = $game_map.panorama_name	  @panorama_hue = $game_map.panorama_hue	  if @panorama.bitmap != nil		@panorama.bitmap.dispose		@panorama.bitmap = nil	  end	  if @panorama_name != ""		@panorama.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)	  end	  Graphics.frame_reset	end	if @fog_name != $game_map.fog_name or @fog_hue != $game_map.fog_hue	   @fog_name = $game_map.fog_name	  @fog_hue = $game_map.fog_hue	  if @fog.bitmap != nil		@fog.bitmap.dispose		@fog.bitmap = nil	  end	  if @fog_name != ""		@fog.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)	  end	  Graphics.frame_reset	end	@tilemap.ox = $game_map.display_x / 4	@tilemap.oy = $game_map.display_y / 4	@tilemap.update	@panorama.ox = $game_map.display_x / 8	@panorama.oy = $game_map.display_y / 8	@fog.zoom_x = $game_map.fog_zoom / 100.0	@fog.zoom_y = $game_map.fog_zoom / 100.0	@fog.opacity = $game_map.fog_opacity	@fog.blend_type = $game_map.fog_blend_type	$xvar = 4 if $xvar == 0 #new	$yvar = 4 if $yvar == 0 #new	@fog.ox = $game_map.display_x / $xvar #new	@fog.oy = $game_map.display_y / $yvar #new	@fog.tone = $game_map.fog_tone	for sprite in @character_sprites	  sprite.update	end	@weather.type = $game_screen.weather_type	@weather.max = $game_screen.weather_max	@weather.ox = $game_map.display_x / 4	@weather.oy = $game_map.display_y / 4	@weather.update	for sprite in @picture_sprites	  sprite.update	end	@timer_sprite.update	@viewport1.tone = $game_screen.tone	@viewport1.ox = $game_screen.shake	@viewport3.color = $game_screen.flash_color	@viewport1.update	@viewport3.update  end end

 

DEMO:

DEMO FOG SCRIPT

Edited by gino
Link to comment
Share on other sites

  • 0
Guest gino
Perfetto, funziona e alla grande, ci sei riuscito :D

 

P.S. la classe interpreter, creata a parte nel precedente caso, la posso eliminare?

La roba vecchia eliminala tutta! Questo è un pacchetto tutto incluso! :P

Puoi eliminare anche il file void!

Edited by gino
Link to comment
Share on other sites

  • 0

Perfetto, fatto ;D e funzionante,

ma senti sempre correlato al discorso fog, con quanto avevi fatto prima, ero riuscito nella strana impresa di impostare più fog, certo è una cosa stra-secondaria, non proprio ricercata e assolutamente non indispensabile, però smanettando riuscivo a pormi almeno altri due livelli aggiunti, con questo non è ancora possibile right?

 

ovviamente tranquillo, ripeto che non è assolutamente importante. :sisi:

Link to comment
Share on other sites

  • 0
Guest gino
Perfetto, fatto ;D e funzionante,

ma senti sempre correlato al discorso fog, con quanto avevi fatto prima, ero riuscito nella strana impresa di impostare più fog, certo è una cosa stra-secondaria, non proprio ricercata e assolutamente non indispensabile, però smanettando riuscivo a pormi almeno altri due livelli aggiunti, con questo non è ancora possibile right?

 

ovviamente tranquillo, ripeto che non è assolutamente importante. :sisi:

Hai colto la falla del nuovo script! Il primo l'avevo creato proprio con l'intento di poter creare più fog! Ora sto studiando un modo per realizzarlo!

Link to comment
Share on other sites

  • 0

Mi sa che ahimè tornerò al NON-SCRIPT perchè chissà perchè tutto ad un tratto l'intero gioco, e perfino prima di accedere alle aree provviste di call-script con effetto simil-tridimensionalità, ha cominciato a laggare di brutto :(

 

CHRIS

Link to comment
Share on other sites

  • 0

NON VORREI DIRE MINCHIATE MA!

 

Effettivamente quella non è altro che una picture, no?

Per far in modo che non si muova devi fare un evento con mostra picture, con la spunta "muovi con la mappa" in modo che NON sia selezionata, e mettere l'evento in parallel process.

As I peeked through the window to observe the wretched things lurking in the shadows beyond, I could only think of one thing, "Truly, these are Days of Despair".

 

Messaggio gentilmente concesso da Annoyed Grunt. Che la forza sia con voi e state attenti agli accenti circonflessi. Ed agli OT ^ ^ ^ ^


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

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