Salve a tutti,
volevo chiedere un paio di cose sugli HELPERS
1) Ho un personaggio che può richiamare un animale compagno come helper. Come faccio a fare che quando viene colpito l'animale, quest'ultimo vada in un proprio stato custom in cui ha l'animazione di colpo subito? (Poi lo rimuovo)
2) Se l'Helper prende danni, i danni vanno a scalare dalla vita del personaggio o no?
Grazie.
Shin
Pagina 1 di 1
Helpers
#2
Inviato 04 November 2009 - 19:23
1) Credo lo si possa fare con un changestate metti come trigger movecontact e come value rimandi allo statedef in questione che creerai con l'animazione che vuoi e poi alla fine di questo statedef metti un removehelper con trigger animtime = 0
2) Se l'helper subisce danni questi non influiscono con la vita del personaggio
2) Se l'helper subisce danni questi non influiscono con la vita del personaggio
#3
Inviato 04 November 2009 - 19:26
1) Se vuoi rendere un helper colpibile tu DEVI (non è opzionale, ma necessario) definire uno stato a parte per la reazione al colpo. Per fare in modo che l'helper vada a leggere il proprio state di "colpo subito" devi usare il comando HitOverride.
Tendenzialmente la cosa più semplice da fare è creare un helper che, se colpito, una volta subito il colpo se ne va (muore). Se vuoi fare un helper con lifebar autonoma è una cosa un po' più complicata (è un gioco di hitoverride e si sfrutta il trigger gethitvar).
Ti consiglio (anche se non è idealmente scorretto) di parlare di state "custom"... questo perché nel Mugen il concetto di "custom states" (usato nei tutorial) sta ad indicare quei particolari state (che si usano generalmente nelle prese) destinati ad essere letti NON dal personaggio principale ma dall' AVVERSARIO (rediretto al custom state da un hitdef)
2) Gli helper sono oggetti autonomi e separati rispetto al char principale. I colpi che un helper subisce non si riflettono sul personaggio principale, proprio perché sono due entità differenti. E' però possibile programmare un helper in modo che il colpo subito si rifletta in un danno al char principale, ma è necessario inserire delle istruzioni fatte apposta perché non è un comportamento che ci si aspetta nella normalità dei casi.
Tendenzialmente la cosa più semplice da fare è creare un helper che, se colpito, una volta subito il colpo se ne va (muore). Se vuoi fare un helper con lifebar autonoma è una cosa un po' più complicata (è un gioco di hitoverride e si sfrutta il trigger gethitvar).
Ti consiglio (anche se non è idealmente scorretto) di parlare di state "custom"... questo perché nel Mugen il concetto di "custom states" (usato nei tutorial) sta ad indicare quei particolari state (che si usano generalmente nelle prese) destinati ad essere letti NON dal personaggio principale ma dall' AVVERSARIO (rediretto al custom state da un hitdef)
2) Gli helper sono oggetti autonomi e separati rispetto al char principale. I colpi che un helper subisce non si riflettono sul personaggio principale, proprio perché sono due entità differenti. E' però possibile programmare un helper in modo che il colpo subito si rifletta in un danno al char principale, ma è necessario inserire delle istruzioni fatte apposta perché non è un comportamento che ci si aspetta nella normalità dei casi.
#5
Inviato 05 November 2009 - 19:59
Un'altra cosa (più che altro un suggerimento).
Se fai un Helper che ha mosse aeree (con gravità e gestione del rialzo) ti consiglio un'accortezza necessaria per evitare bugs (un errore che ad esempio il mio Nobunaga invece contiene, anche se lì non produce poi problemi)...
Ovvero
NON USARE IL PARAMETRO "physics = A"
Normalmente questo parametro, nel char principale, è utilissimo per la gestione automatica della gravità ed automatico atterraggio.
Nell'Helper questo è un errore.
Questo perché poi l'helper va a leggere gli state del char principale e poi si trasforma in un clone inattivo del char principale (es. ti trovi due Nobunaga, di cui uno utilizzabile, l'altro imbambolato con una standing perenne).
Per evitare ciò, ecco come programmare una mossa di tipo aereo (qualunque essa sia, che sia un attacco o un semplice spostamento).
Prima di tutto bisogna utilizzare "physics = N"
questo parametro non ti applica nessuna frizione nello state in questione, quindi le devi applicare a livello di programmazione.
Per quanto riguarda la gravità puoi usare il comando
Non sono sicuro sul trigger... non ricordo se gravity deve essere azionato in continuo o solo nel momento iniziale (nel caso debba essere azionato solo nel momento iniziale devi cambiare il trigger in "trigger1 = time = 0")
Mi sembra comunque che sia giusto il trigger che ti ho messo.
In secondo luogo poi devi applicare la frizione X aerea
il valore di x è un valore negativo. Poi ricopiare quello del cns oppure utilizzare direttamente la stessa costante (io preferirei per semplicità ricopiare il valore xD)
non finisce qui.
Ovviamente devi inserire uno state di transizione che ti riporti ad uno state (autonomo) di gestione dell'atterraggio. Ecco un possibile modo
Con i codici che ti ho scritto ecco cosa succede:
Finché l'helper si trova in aria e sta cadendo (PosSet < 0) applica la gravità e la frizione aerea.
Appena l'helper ha raggiunto il suolo (PosSet >=0) il personaggio si preoccupa di:
1) Azzerare la velocità (l'helper si ferma)
2) Riposizionarsi sulla linea di suolo (è difficile che la caduta faccia arrivare preciso alla linea di suolo)
3) solo dopo passare allo state di atterraggio
----------
Scusami la pedanteria, ma vista la tua domanda immagino questa informazione possa tornarti utile (è un errore che fanno in molti agli inizi... è un errore che ho fatto pure io) onde evitarti di fare un codice a rischio di bug.
Se già lo sapevi e ti ho annoiato, me ne scuso :)
Se fai un Helper che ha mosse aeree (con gravità e gestione del rialzo) ti consiglio un'accortezza necessaria per evitare bugs (un errore che ad esempio il mio Nobunaga invece contiene, anche se lì non produce poi problemi)...
Ovvero
NON USARE IL PARAMETRO "physics = A"
Normalmente questo parametro, nel char principale, è utilissimo per la gestione automatica della gravità ed automatico atterraggio.
Nell'Helper questo è un errore.
Questo perché poi l'helper va a leggere gli state del char principale e poi si trasforma in un clone inattivo del char principale (es. ti trovi due Nobunaga, di cui uno utilizzabile, l'altro imbambolato con una standing perenne).
Per evitare ciò, ecco come programmare una mossa di tipo aereo (qualunque essa sia, che sia un attacco o un semplice spostamento).
Prima di tutto bisogna utilizzare "physics = N"
questo parametro non ti applica nessuna frizione nello state in questione, quindi le devi applicare a livello di programmazione.
Per quanto riguarda la gravità puoi usare il comando
[State X, Y] type = Gravity trigger1 = Pos Y < 0 ;stai ancora in aria
Non sono sicuro sul trigger... non ricordo se gravity deve essere azionato in continuo o solo nel momento iniziale (nel caso debba essere azionato solo nel momento iniziale devi cambiare il trigger in "trigger1 = time = 0")
Mi sembra comunque che sia giusto il trigger che ti ho messo.
In secondo luogo poi devi applicare la frizione X aerea
[State X, Y] type = VelMul x = ... trigger1 = Pos Y < 0 ;stai ancora in aria
il valore di x è un valore negativo. Poi ricopiare quello del cns oppure utilizzare direttamente la stessa costante (io preferirei per semplicità ricopiare il valore xD)
non finisce qui.
Ovviamente devi inserire uno state di transizione che ti riporti ad uno state (autonomo) di gestione dell'atterraggio. Ecco un possibile modo
[State X, 1] type = VelSet x = 0 y = 0 trigger1 = Pos Y = 0 [State X, 2] type = PosSet y = 0 trigger1 = Pos Y > 0 [State X, 3] type = ChangeState value = .... ;state di atterraggio dell'helper trigger1 = Pos Y = 0
Con i codici che ti ho scritto ecco cosa succede:
Finché l'helper si trova in aria e sta cadendo (PosSet < 0) applica la gravità e la frizione aerea.
Appena l'helper ha raggiunto il suolo (PosSet >=0) il personaggio si preoccupa di:
1) Azzerare la velocità (l'helper si ferma)
2) Riposizionarsi sulla linea di suolo (è difficile che la caduta faccia arrivare preciso alla linea di suolo)
3) solo dopo passare allo state di atterraggio
----------
Scusami la pedanteria, ma vista la tua domanda immagino questa informazione possa tornarti utile (è un errore che fanno in molti agli inizi... è un errore che ho fatto pure io) onde evitarti di fare un codice a rischio di bug.
Se già lo sapevi e ti ho annoiato, me ne scuso :)
Condividi questa discussione:
Pagina 1 di 1

Aiuto









