Jump to content
Rpg²S Forum

Sprite Trace - effetto scie dietro i chara


Midi
 Share

Recommended Posts

Sprite Trace



Descrizione


Questo script permette di generare un "effetto scia" dietro agli Eventi o al Player in movimento. La scia può essere attivata/disattivata tramite semplici Call Script.


http://i58.tinypic.com/96du1g.png


 


Può tornare utile per rendere in maniera visivamente più interessante il movimento, e per molti altri effetti.


Tra le altre cose è possibile scegliere durata, frequenza, tipo di blend e priorità della scia.


Se non si esagera, le scie non generano lag apprezzabile (la perdita media è di 0,5 FPS per scia attiva, testato sul mio PC che è notoriamente una vecchia carretta).



Autore


Midi



Allegati


Nessuno



Istruzioni per l'uso


Incollare lo script nella sezione "Materials", sopra il "Main".


Le istruzioni per impostare le scie e attivarle si trovano all'inizio dello script.



Script




#=============================================================================
# Sprite Trace
#-----------------------------------------------------------------------------
# vers. 1.0.0 (23-02-2014)
# by Midi
#-----------------------------------------------------------------------------
module Sprite_Trace
#=============================================================================
# ** DESCRIZIONE **
# Questo script permette di generare un "effetto scia" dietro agli Eventi o al
# Player in movimento. La scia può essere attivata/disattivata a piacimento
# tramite semplici Call Script.
#-----------------------------------------------------------------------------
# ** IMPOSTAZIONI **
#-----------------------------------------------------------------------------
Duration = 64 # Durata di default della scia. Può essere un valore
# qualsiasi tra 1 e 128. A un valore maggiore
# corrisponde una maggior durata della scia.

Frequency = 128 # Frequenza di default della scia. Può essere un
# valore qualsiasi tra 1 e 256. A un valore maggiore
# corrisponde una scia più fitta, a un valore minore
# una scia più diradata.

Starting_Opacity = 192 # Opacità di partenza della scia. Può essere un
# valore qualsiasi tra 1 e 255. A un valore maggiore
# corrisponde una scia più intensa.

Mode = :add # Tipo di blend della scia. I valori ammessi sono
# :add, :sub e :normal, che rispettivamente indicano
# una scia additiva, sottrattiva o normale.

Priority = :under # Priorità della scia. I valori ammessi sono :same,
# :under e :over, i quali indicano rispettivamente
# che la scia sarà alla stessa priorità del chara,
# sotto il chara o sopra il chara.

#=============================================================================
# ** ISTRUZIONI **
#-----------------------------------------------------------------------------
# Per attivare una scia, chiamare il seguente comando all'interno di un Call
# Script di un Evento o di un Percorso Movimento:
#
# Trace.on
#
# Il comando può anche accettare diversi parametri, tutti OPZIONALI:
#
# Trace.on(target, duration, frequency, mode, priority)
#
# - target: un numero intero. Indica l'ID dell'Evento su cui si attiva la
# scia. Per attivare la scia sul Player inserire un numero
# negativo, oppure :player.
# Se questo parametro è assente, la scia si attiva sull'Evento
# in cui è stato chiamato il comando.
#
# - duration: un numero intero compreso tra 1 e 128. Imposta la durata della
# scia. Se questo parametro è assente, viene usata la durata di
# default.
# Invece di un numero, si può inserire anche :long o :short. In
# tal caso la durata della scia viene rispettivamente raddoppiata
# o dimezzata rispetto a quella di default.
#
# - frequency: un numero intero compreso tra 1 e 256. Imposta la frequenza
# della scia. Se questo parametro è assente, viene usata la
# frequenza di default.
# Invece di un numero, si può inserire anche :high o :low. In tal
# caso la frequenza della scia viene rispettivamente raddoppiata
# o dimezzata rispetto a quella di default.
#
# - mode: può assumere i valori :normal, :add e :sub. Imposta il tipo di
# blend della scia. Se questo parametro è assente, viene usato
# il valore di default.
# Invece dei valori citati è possibile usare anche degli interi.
# A 0 corrisponde :normal, a 1 corrisponde :add e a 2 corrisponde
# :sub.
#
# - priority: può assumere i valori :under, :same e :over. Imposta la
# priorità della scia. Se questo parametro è assente, viene usata
# la priorità di default.
# Invece dei valori citati è possibile usare anche degli interi.
# A 0 corrisponde :under, a 1 corrisponde :same e a 2 corrisponde
# :over.
#-----------------------------------------------------------------------------
# Per disattivare una scia, chiamare i seguenti comandi all'interno di un Call
# Script di un Evento o di un Percorso Movimento:
#
# Trace.off
#
# oppure
#
# Trace.clear
#
# Il primo comando disattiva la scia in maniera graduale, lasciandola svanire
# normalmente.
# Il secondo comando disattiva la scia istantaneamente.
#
# Entrambi i comandi possono accettare un parametro OPZIONALE:
#
# Trace.off(target)
# Trace.clear(target)
#
# - target: un numero intero. Indica l'ID dell'Evento su cui si disattiva
# la scia. Per disattivare la scia sul Player inserire un numero
# negativo, oppure :player.
# Se questo parametro è assente, si disattiva la scia dell'Evento
# in cui è stato chiamato il comando.
#-----------------------------------------------------------------------------
# Esempi:
#
# Trace.on
# Viene attivata la scia sull'Evento in cui è stato chiamato il comando.
# La scia utilizza tutti i valori di default.
#
# Trace.on(:player) [oppure anche Trace.on(-1)]
# Viene attivata la scia sul Player. La scia utilizza tutti i valori di
# default.
#
# Trace.on(12)
# Viene attivata la scia sull'Evento 12. La scia utilizza tutti i valori
# di default.
#
# Trace.on(12, 60, 250)
# Viene attivata la scia sull'Evento 12, con durata 60 e frequenza 250.
# Gli altri valori della scia sono quelli di default.
#
# Trace.on(:player, 60, 250, :sub, 2)
# Viene attivata la scia sul Player, con durata 60, frequenza 250,
# tipo di blend sottrattivo e priorità :over (2).
#
# Trace.on(mode = :normal, duration = 40)
# Viene attivata la scia sull'Evento in cui è stato chiamato il comando.
# La scia ha tipo di blend normale e durata 40. Gli altri valori della
# scia sono quelli di default.
#
# Trace.off
# Viene disattivata la scia dell'Evento in cui è stato chiamato il
# comando.
#
# Trace.clear(3)
# Viene disattivata e cancellata immediatamente la scia dell'Evento 3.
#
# Trace.off(:player) [oppure anche Trace.off(-1)]
# Viene disattivata la scia sul Player.
#=============================================================================
#=============================================================================
# ** CONDIZIONI DI UTILIZZO **
# Questo script è sotto licenza Creative Commons BY-NC-SA
# (Attribuzione-NonCommerciale-CondividiAlloStessoModo 3.0 Unported).
# - Attribuzione : è obbligatorio creditare l'autore.
# - NonCommerciale: non si può utilizzare questo script per scopi
# commerciali.
# - CondividiAlloStessoModo: se si modifica, trasforma o utilizza questo
# script in un'opera, l'opera risultante può essere
# distribuita solo sotto la stessa o compatibile licenza.
# Per più informazioni, http://creativecommons.org/licenses/by-nc-sa/3.0/
#=============================================================================

#-----------------------------------------------------------------------------
# Non modificare qui sotto, a meno che tu non sappia cosa stai facendo! :)
#-----------------------------------------------------------------------------

Modes = [:normal, :add, :sub]
Priorities = [:under, :same, :over]
Max_Value_F = 256
Max_Value_D = 128

def self.get_duration(duration)
result = Sprite_Trace::Duration
if duration.is_a?(Numeric) && duration > 0
result = duration
elsif duration.is_a?(Symbol)
if duration == :long
result *= 2
elsif duration == :short
result = (result / 2) + 1
end
end
result = Sprite_Trace::Max_Value_D if result > Sprite_Trace::Max_Value_D
result
end

def self.get_frequency(frequency)
result = Sprite_Trace::Frequency
if frequency.is_a?(Numeric) && frequency > 0
result = frequency
elsif frequency.is_a?(Symbol)
if frequency == :high
result *= 2
elsif frequency == :low
result = (result / 2) + 1
end
end
result = Sprite_Trace::Max_Value_F if result > Sprite_Trace::Max_Value_F
result
end

def self.get_mode(mode)
result = Sprite_Trace::Modes.index(Sprite_Trace::Mode)
if mode.is_a?(Symbol) && Sprite_Trace::Modes.include?(mode)
result = Sprite_Trace::Modes.index(mode)
elsif mode.is_a?(Numeric) && (0..2).include?(mode)
result = mode
end
result
end

def self.get_priority(priority)
result = Sprite_Trace::Priorities.index(Sprite_Trace::Priority)
if priority.is_a?(Symbol) && Sprite_Trace::Priorities.include?(priority)
result = Sprite_Trace::Priorities.index(priority)
elsif priority.is_a?(Numeric) && (0..2).include?(priority)
result = priority
end
result
end

def self.get_starting_opacity
result = Sprite_Trace::Starting_Opacity
result = 255 if result > 255
result = 1 if result < 1
result
end
end

module Trace
def self.on(target = 0, duration = :normal, \
frequency = :normal, mode = Sprite_Trace::Mode, \
priority = Sprite_Trace::Priority)
character = nil
if target.is_a?(Numeric)
character = $game_map.interpreter.get_character(target)
elsif target.is_a?(Symbol) && target == :player
character = $game_map.interpreter.get_character(-1)
end
if character
character.set_trace_on
character.trace_duration = Sprite_Trace.get_duration(duration)
character.trace_frequency = Sprite_Trace.get_frequency(frequency)
character.trace_mode = Sprite_Trace.get_mode(mode)
character.trace_priority = Sprite_Trace.get_priority(priority)
end
end

def self.off(target = 0)
character = nil
if target.is_a?(Numeric)
character = $game_map.interpreter.get_character(target)
elsif target.is_a?(Symbol) && target == :player
character = $game_map.interpreter.get_character(-1)
end
if character
character.set_trace_off
end
end

def self.clear(target = 0)
character = nil
if target.is_a?(Numeric)
character = $game_map.interpreter.get_character(target)
elsif target.is_a?(Symbol) && target == :player
character = $game_map.interpreter.get_character(-1)
end
if character
character.set_trace_off
character.set_trace_clear
end
end
end

class Game_Character
attr_accessor :trace_duration
attr_accessor :trace_frequency
attr_accessor :trace_mode
attr_accessor :trace_priority

alias midi_sprite_trace_initialize initialize
def initialize
midi_sprite_trace_initialize
@trace_on = false
end

def set_trace_on
@trace_on = true
end

def set_trace_off
@trace_on = false
end

def set_trace_clear
@trace_clear = true
end

def reset_trace_clear
@trace_clear = false
end

def trace_on?
@trace_on
end

def trace_clear?
@trace_clear
end
end

class Sprite_Tracer < Sprite_Base

def initialize(viewport, character, bitmap, src_r, ox, oy, duration, mode, \
priority)
super(viewport)
set_bitmap(bitmap, src_r)
@character = character
set_starting_position
set_opacity_delta(duration)
self.blend_type = mode
self.ox = ox
self.oy = oy
self.opacity = Sprite_Trace.get_starting_opacity
@priority = priority - 1
update
end

def dispose
super
end

def update
super
update_position
update_other
end

def set_opacity_delta(duration)
if duration && duration.is_a?(Numeric) && duration > 0
@opacity_delta = (Sprite_Trace::Starting_Opacity / duration.to_f)
end
end

def set_bitmap(bitmap, src_r)
if bitmap
self.bitmap = bitmap
end
if src_r
self.src_rect = src_r
end
end

def set_starting_position
if @character != nil
@real_x = @character.real_x
@real_y = @character.real_y
@shift_y = @character.shift_y
@jump_height = @character.jump_height
end
end

def update_position
if @character != nil
self.x = get_screen_x
self.y = get_screen_y
self.z = (@character.screen_z) + @priority
end
end

def update_other
self.opacity -= @opacity_delta
if self.opacity <= 0
dispose
end
end

def get_screen_x
$game_map.adjust_x(@real_x) * 32 + 16
end

def get_screen_y
$game_map.adjust_y(@real_y) * 32 + 32 - @shift_y - @jump_height
end

end

class Spriteset_Tracer
def initialize
@sprites = []
end

def add(sprite)
@sprites.push(sprite) if sprite
end

def clear
dispose
@sprites = []
end

def update
@sprites.delete_if do |sprite|
if sprite && !sprite.disposed?
sprite.update
false
else
true
end
end
end

def dispose
for sprite in @sprites
next unless sprite
sprite.dispose unless sprite.disposed?
end
end
end

class Sprite_Character < Sprite_Base

alias midi_sprite_trace_initialize initialize
alias midi_sprite_trace_update update
alias midi_sprite_trace_dispose dispose

def initialize(viewport, character = nil)
@trace_duration = 0
@trace_length = 0
@trace_mode = nil
@trace_sprites = Spriteset_Tracer.new
midi_sprite_trace_initialize(viewport, character)
end

def update
midi_sprite_trace_update
@trace_sprites.update
if @character != nil
if @character.trace_on?
if @trace_length <= 0
@trace_length = 512 / @character.trace_frequency
bp = self.bitmap
vp = self.viewport
ox = self.ox
oy = self.oy
src_r = self.src_rect
duration = @character.trace_duration
mode = @character.trace_mode
priority = @character.trace_priority
sprite = Sprite_Tracer.new(vp, @character, bp, src_r, \
ox, oy, duration, mode, priority)
@trace_sprites.add(sprite)
else
@trace_length -= 1
end
elsif @character.trace_clear?
@trace_sprites.clear if @trace_sprites
@character.reset_trace_clear
end
end
end

def dispose
midi_sprite_trace_dispose
@trace_sprites.dispose
end
end

 



Bugs e Conflitti Noti


N/A



Altri dettagli


Le istruzioni sono presenti all'interno dello script.


Lo script è sotto licenza Creative Commons BY-NC-SA 3.0. Quindi è possibile usarlo e distribuirlo liberamente purché:


- venga creditato l'autore;


- non venga utilizzato con finalità commerciali;


- tutti le opere derivate e/o basate su esso siano distribuite con la stessa licenza o con licenza compatibile.


Edited by Midi

Aurora Dreaming


The Dreamer (v. 1.1) - standalone


72 MB - Il prequel ad Aurora Dreaming



segui il dev-diary ufficiale di Aurora Dreaming!



Bacheca Premi


http://www.rpg2s.net/forum/uploads/monthly_01_2014/post-6-0-39588100-1390575633.png

Link to comment
Share on other sites

Oh altro ottimo script, Midi, personalizzabile con durate, ecc... per le scie! E:3

 

Mi chiedo se si possa creare qualche minigame stile moto! XD

^ ^

(\_/)
(^ ^) <----coniglietto rosso, me!
(> <)


Il mio Tumblr dove seguire i miei progetti, i progetti della Reverie : : Project ^ ^

http://i.imgur.com/KdUDtQt.png disponibile su Google Play, qui i dettagli! ^ ^

http://i.imgur.com/FwnGMI3.png completo! Giocabile online, qui i dettagli! ^ ^

REVERIE : : RENDEZVOUS (In allenamento per apprendere le buone arti prima di cominciarlo per bene ^ ^) Trovate i dettagli qui insieme alla mia intervista (non utilizzerò più rpgmaker) ^ ^

 

SUWOnzB.jpg 🖤
http://www.rpg2s.net/dax_games/r2s_regali2s.png E:3 http://www.rpg2s.net/dax_games/xmas/gifnatale123.gif
http://i.imgur.com/FfvHCGG.png by Testament (notare dettaglio in basso a destra)! E:3
http://i.imgur.com/MpaUphY.jpg by Idriu E:3

Membro Onorario, Ambasciatore dei Coniglietti (Membro n.44)

http://i.imgur.com/PgUqHPm.png
Ufficiale
"Ad opera della sua onestà e del suo completo appoggio alla causa dei Panda, Guardian Of Irael viene ufficialmente considerato un Membro portante del Partito, e Ambasciatore del suo Popolo presso di noi"


http://i.imgur.com/TbRr4iS.png<- Grazie Testament E:3
Ricorda...se rivolgi il tuo sguardo ^ ^ a Guardian anche Guardian volge il suo sguardo ^ ^ a te ^ ^
http://i.imgur.com/u8UJ4Vm.gifby Flame ^ ^
http://i.imgur.com/VbggEKS.gifhttp://i.imgur.com/2tJmjFJ.gifhttp://projectste.altervista.org/Our_Hero_adotta/ado2.png
Grazie Testament XD Fan n°1 ufficiale di PQ! :D

Viva
il Rhaxen! <- Folletto te lo avevo detto (fa pure rima) che non
avevo programmi di grafica per fare un banner su questo pc XD (ora ho di
nuovo il mio PC veramente :D)

Rosso Guardiano della
http://i.imgur.com/Os5rvhx.png

Rpg2s RPG BY FORUM:

Nome: Darth Reveal

 

PV totali 2
PA totali 16

Descrizione: ragazzo dai lunghi capelli rossi ed occhi dello stesso colore. Indossa una elegante giacca rossa sopra ad una maglietta nera. Porta pantaloni rossi larghi, una cintura nera e degli stivali dello stesso colore. E' solito trasportare lo spadone dietro la schiena in un fodero apposito. Ha un pendente al collo e tiene ben legato un pezzo di stoffa (che gli sta particolarmente a cuore) intorno al braccio sinistro sotto la giacca, copre una cicatrice.
Bozze vesti non definitive qui.

Equipaggiamento:
Indossa:
60$ e 59$ divisi in due tasche interne
Levaitan

Spada a due mani elsa lunga

Guanti del Defender (2PA)
Anello del linguaggio animale (diventato del Richiamo)

Scrinieri da lanciere (2 PA)

Elmo del Leone (5 PA)

Corazza del Leone in Ferro Corrazzato (7 PA)

ZAINO (20) contenente:
Portamonete in pelle di cinghiale contenente: 100$
Scatola Sanitaria Sigillata (può contenere e tenere al sicuro fino a 4 oggetti curativi) (contiene Benda di pronto soccorso x3, Pozione di cura)
Corda
Bottiglia di idromele
Forma di formaggio
Torcia (serve ad illuminare, dura tre settori)

Fiasca di ceramica con Giglio Amaro (Dona +1PN e Velocità all'utilizzatore)
Ampolla Bianca

Semi di Balissa

 

CAVALLO NORMALE + SELLA (30 +2 armi) contentente:
66$
Benda di pronto soccorso x3
Spada a due mani

Fagotto per Adara (fazzoletto ricamato)


 

Link to comment
Share on other sites

Se ti riferisci a giochi tipo "Tron", non penso. ^.^

 

Lo script serve soltanto per creare un effetto visivo gradevole, ma a livello di gameplay non serve a nulla: la scia è completamente "trasparente", Eventi e Player la ignorano. La priorità serve solo per determinare come visualizzare la scia, non permette di interagire con essa. :)

 

A me lo script serve per realizzare effetti onirici e ipnotici.

L'alternativa sarebbe stata realizzarli tramite eventi e picture... ho preferito spendere 4-5 ore per buttar giù lo script piuttosto che dannarmi l'anima su ogni singolo effetto ogni volta che mi fosse servito. ^.^

Aurora Dreaming


The Dreamer (v. 1.1) - standalone


72 MB - Il prequel ad Aurora Dreaming



segui il dev-diary ufficiale di Aurora Dreaming!



Bacheca Premi


http://www.rpg2s.net/forum/uploads/monthly_01_2014/post-6-0-39588100-1390575633.png

Link to comment
Share on other sites

 

Se ti riferisci a giochi tipo "Tron", non penso. ^.^

Quello dicevo con moto, ma sì, vedo che lo script non tiene conto della posizione della scia, ma bisognerebbe fare un discorso a variabili di posizioni successive... un casino! XD

^ ^

 

Bel lavoro! E:3

(\_/)
(^ ^) <----coniglietto rosso, me!
(> <)


Il mio Tumblr dove seguire i miei progetti, i progetti della Reverie : : Project ^ ^

http://i.imgur.com/KdUDtQt.png disponibile su Google Play, qui i dettagli! ^ ^

http://i.imgur.com/FwnGMI3.png completo! Giocabile online, qui i dettagli! ^ ^

REVERIE : : RENDEZVOUS (In allenamento per apprendere le buone arti prima di cominciarlo per bene ^ ^) Trovate i dettagli qui insieme alla mia intervista (non utilizzerò più rpgmaker) ^ ^

 

SUWOnzB.jpg 🖤
http://www.rpg2s.net/dax_games/r2s_regali2s.png E:3 http://www.rpg2s.net/dax_games/xmas/gifnatale123.gif
http://i.imgur.com/FfvHCGG.png by Testament (notare dettaglio in basso a destra)! E:3
http://i.imgur.com/MpaUphY.jpg by Idriu E:3

Membro Onorario, Ambasciatore dei Coniglietti (Membro n.44)

http://i.imgur.com/PgUqHPm.png
Ufficiale
"Ad opera della sua onestà e del suo completo appoggio alla causa dei Panda, Guardian Of Irael viene ufficialmente considerato un Membro portante del Partito, e Ambasciatore del suo Popolo presso di noi"


http://i.imgur.com/TbRr4iS.png<- Grazie Testament E:3
Ricorda...se rivolgi il tuo sguardo ^ ^ a Guardian anche Guardian volge il suo sguardo ^ ^ a te ^ ^
http://i.imgur.com/u8UJ4Vm.gifby Flame ^ ^
http://i.imgur.com/VbggEKS.gifhttp://i.imgur.com/2tJmjFJ.gifhttp://projectste.altervista.org/Our_Hero_adotta/ado2.png
Grazie Testament XD Fan n°1 ufficiale di PQ! :D

Viva
il Rhaxen! <- Folletto te lo avevo detto (fa pure rima) che non
avevo programmi di grafica per fare un banner su questo pc XD (ora ho di
nuovo il mio PC veramente :D)

Rosso Guardiano della
http://i.imgur.com/Os5rvhx.png

Rpg2s RPG BY FORUM:

Nome: Darth Reveal

 

PV totali 2
PA totali 16

Descrizione: ragazzo dai lunghi capelli rossi ed occhi dello stesso colore. Indossa una elegante giacca rossa sopra ad una maglietta nera. Porta pantaloni rossi larghi, una cintura nera e degli stivali dello stesso colore. E' solito trasportare lo spadone dietro la schiena in un fodero apposito. Ha un pendente al collo e tiene ben legato un pezzo di stoffa (che gli sta particolarmente a cuore) intorno al braccio sinistro sotto la giacca, copre una cicatrice.
Bozze vesti non definitive qui.

Equipaggiamento:
Indossa:
60$ e 59$ divisi in due tasche interne
Levaitan

Spada a due mani elsa lunga

Guanti del Defender (2PA)
Anello del linguaggio animale (diventato del Richiamo)

Scrinieri da lanciere (2 PA)

Elmo del Leone (5 PA)

Corazza del Leone in Ferro Corrazzato (7 PA)

ZAINO (20) contenente:
Portamonete in pelle di cinghiale contenente: 100$
Scatola Sanitaria Sigillata (può contenere e tenere al sicuro fino a 4 oggetti curativi) (contiene Benda di pronto soccorso x3, Pozione di cura)
Corda
Bottiglia di idromele
Forma di formaggio
Torcia (serve ad illuminare, dura tre settori)

Fiasca di ceramica con Giglio Amaro (Dona +1PN e Velocità all'utilizzatore)
Ampolla Bianca

Semi di Balissa

 

CAVALLO NORMALE + SELLA (30 +2 armi) contentente:
66$
Benda di pronto soccorso x3
Spada a due mani

Fagotto per Adara (fazzoletto ricamato)


 

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