Forum MUGENATION: crash mai visto di un personaggio - Forum MUGENATION

Salta al contenuto

Pagina 1 di 1
  • Non puoi iniziare una nuova discussione
  • Non puoi rispondere a questa discussione

crash mai visto di un personaggio non mi era mai successo

#1 L   ricky88 

  • Kohai
  • PuntoPunto
  • Gruppo: Membro
  • Messaggi: 437
  • Iscritto: 10-June 06

Inviato 18 January 2010 - 13:51

ho un personaggio che fa una mossa solo dopo aver attivato una trasformazione, cioè si trasforma e solo dopo essersi trasformato può attivare una sorta di seconda trasformazione, ma solo a volte quando faccio questa seconda trasformazione il mugen crasha con questo errore: "error message: state machine stuck in loop (stopped after 2500 loops): 9995 for HKSasuke299. Check your states for infinite ChangeStates loops." non ho capito che significa.
come posso risolvere?
0

#2 L   Squall LionHeart™ 

  • Programmatore M.U.G.E.N.
  • Gruppo: Moderatore
  • Messaggi: 1097
  • Iscritto: 23-July 07

Inviato 18 January 2010 - 18:21

Dunque questo errore è abbastanza comune nei chars programmati con lunghe catene di statedef.
In pratica ti dice che il char è andato in loop.

esempio banale:

statedef 100 ha un changestate che porta allo statedef 101
statedef 101 ha un changestate che porta allo statedef 100.

questo è un loop, o ciclo logico.

Se posti il codice della tecnica (non so se quel 9995 sia effettivamente lo statedef della seconda trasfrmazione) vediamo di risolvere :)

Saluti

Squall
0

#3 L   ricky88 

  • Kohai
  • PuntoPunto
  • Gruppo: Membro
  • Messaggi: 437
  • Iscritto: 10-June 06

Inviato 19 January 2010 - 10:41

allora questo è il codice della prima trasformazione:

[StateDef 19990]
type = S
movetype= A
physics = S
juggle = 1
velset = 0,0
ctrl = 0
anim = 11050
poweradd = -1000
sprpriority = 2

;[State 0, PlaySnd]
;type = PlaySnd
;trigger1 = time = 5
;value = S1000,1
;volume =255
;channel= 11

;[State 0, PlaySnd]
;type = PlaySnd
;trigger1 = time = 0
;value = S240,0
;volume =255
;channel= 10

[State 0, PlaySnd]
type = PlaySnd
trigger1 = animelem = 1
value = S9,1
volume = 800

[State 0, SuperPause]
type = SuperPause
trigger1 = animelem = 1
time = 50
anim = S1000
sound = s8000,9
pos = 0,-30
move = 0
darken = 1
p2defmul = 0
poweradd = 0
unhittable = 1

[State 1400]
type = Helper
trigger1 = Animelem = 7
helpertype = player
name = "susanoo Bones"
ID = 9990
movetime = 25
supermove = 25
stateno = 9990
pos = 0,0
postype = p1
facing = 1

;[State 10000]
;type = VarSet
;trigger1 = AnimTime = 0
;v = 0
;value = 1

[State 1000]
type = ChangeState
trigger1 = AnimTime = 0
value = 0
ctrl = 1

e questo è della seconda (almeno credo,leggi + avanti):

[Statedef 1011]
type = S
movetype= I
physics = S
juggle = 5
poweradd= 0
ctrl = 0
velset = 0,0
anim = 11050

[State 0, Helper]
type = Helper
trigger1 = animelem = 4
stateno = 1001
ID = 1001
pos = 0,0
postype = p1
ownpal = 1
ontop = 1

[State 0, SuperPause]
type = SuperPause
trigger1 = animelem = 1
sound = S8000,9
time = 60
anim = S1000
pos = 0,-30
darken = 1
p2defmul = 0
poweradd = 0
unhittable = 1

[State 10000, VarSet]
type = VarSet
trigger1 = animelem = 3
v = 0
value =1

[State 250, 5]
type = ChangeState
trigger1 = AnimTime = 0
value = 0
ctrl = 1

e poi nel peronaggio c'è un file cns a parte con il nome della seconda trasformazione dove come vedrai c'è il fantomatico statedef 9995, ecco qui il codice dell'attivazione della tecnica:

;susano summon
[Statedef 9997]
type = S
physics = S
anim = 6664
sprpriority = -1

[State 9990, end]
type = ChangeState
trigger1 = AnimTime = 0
value = 9995
ctrl = 1
;---------------------------------------------------------------------------
;susano stand
;[Statedef 9991]
;type = S
;physics = S
;poweradd= 0
;ctrl = 0
;juggle = 0
;velset = 0,0
;anim = 9991
;sprpriority = 0

[Statedef 9995]
type = S
movetype= A
physics = S
poweradd= 0
ctrl = 0
juggle = 0
velset = 0,0
anim = 6665
sprpriority = 7
;ontop = 2
;ownpal = 2

[State 0, PowerAdd]
type = PowerAdd
triggerall = time >= 1
trigger1 = 1
value = -3

;[State 1301, 9]
;type = ParentVarSet
;trigger1 = time = 0
;var(10) = 1

[State 52, 3]
type = PosSet
trigger1 = Time = 0
y = 0

[State 5201, 1] ;Turn if not facing opponent
type = Turn
trigger1 = Time = 0
trigger1 = p2dist X < -5

[State 410, 4]
type = ChangeState
trigger1 = RootDist X >= -12
trigger2 = RootDist X <= -18
value = 9996

[State 410, 4]
type = Changestate
trigger1 = parent, power = 0
value = 15011

[State 9991, 4]
type = HitOverride
trigger1 = Time = 0
attr = SCA, NT, ST, HT, NA, SA, HA,NP,SP,HP
stateno = 16009
time = -1

[State 9991, end]
type = destroyself
trigger1 = parent, life = 0

[State 410, 4]
type = ChangeState
trigger1 = Parent, stateno = 1011
;trigger2 = Parent, stateno = 61699
value = 9995

[State 410, 4]
type = Changestate
trigger1 = parent, stateno = 367
value = 15011



[State 410, 4]
type = ChangeState
trigger1 = Parent, stateno = 8093
value = 9094



;[State 9991, 4]
;type = HitOverride
;trigger1 = Time = 0
;attr = SCA, NT, ST, HT, NA, SA, HA,NP,SP,HP
;stateno = 15009
;time = -1

;[State 9991, end]
;type = destroyself
;trigger1 = parent, life = 0
;---------------------------------------------------------------------------
[Statedef 9996]
type = C
physics = C
poweradd= 0
ctrl = 0
juggle = 0
velset = 0,0
anim = 6665
sprpriority = 7

;[State 1301, 9]
;type = ParentVarSet
;trigger1 = time >= 0
;trigger1 = var(10) != 0
;var(10) = 0

[State 410, 4]
type = ChangeState
trigger1 = Parent, stateno = 8093
value = 9094

[State 0, PowerAdd]
type = PowerAdd
triggerall = time >= 1
trigger1 = 1
value = -1

[State 9996, 4]
type = HitOverride
trigger1 = Time = 0
attr = SCA, NT, ST, HT, NA, SA, HA,NP,SP,HP
stateno = 9996
time = -1

[State 410, 4]
type = Changestate
trigger1 = parent, stateno = 367
value = 15011

[State 1301, 9]
type = velset
trigger1 = RootDist X = -13
trigger2 = RootDist X = -14
trigger3 = RootDist X = -15
trigger4 = RootDist X = -16
trigger5 = RootDist X = -17
x = 0

[State 820, 1]
type = ChangeAnim
trigger1 = anim != 6665
trigger1 = RootDist X <= -18
value = 6665

[State 820, 1]
type = ChangeAnim
trigger1 = anim != 6665
trigger1 = RootDist X >= -12
value = 6665

[State 1301, 9]
type = velset
trigger1 = RootDist X >= -12
x = 9

[State 1301, 9]
type = velset
trigger1 = RootDist X <= -18
x = -9

;[State 410, 4]
;type = ChangeState
;trigger1 = Parent, stateno = 8011
;trigger2 = Parent, stateno = 61699
;value = 9994

so che sto codice è enorme, ma vedi se riesci a fare qualcosa
0

#4 L   Nobun 

  • Horse Rider Skull Phantom. Rarely Here.
  • Gruppo: SuperModeratore
  • Messaggi: 4898
  • Iscritto: 11-July 04

Inviato 21 January 2010 - 21:00

hmm... il codice è immenso e soprattutto scritto in maniera caotica.
Questo autore adotta una tecnica, adottata dalla stragrande maggioranza di programmatori (anche i migliori) che però io, personalmente, non sopporto e che considero uno stile vomitevole.
Mi riferisco a questo esempio (tralascio le parti in punto e virgola non attivate)

[StateDef 19990]
type = S
movetype= A
physics = S
juggle = 1
velset = 0,0
ctrl = 0
anim = 11050
poweradd = -1000
sprpriority = 2

[State 0, PlaySnd]
type = PlaySnd
trigger1 = animelem = 1
value = S9,1
volume = 800

[State 0, SuperPause]
type = SuperPause
trigger1 = animelem = 1
time = 50
anim = S1000
sound = s8000,9
pos = 0,-30
move = 0
darken = 1
p2defmul = 0
poweradd = 0
unhittable = 1

[State 1400]
type = Helper
trigger1 = Animelem = 7
helpertype = player
name = "susanoo Bones"
ID = 9990
movetime = 25
supermove = 25
stateno = 9990
pos = 0,0
postype = p1
facing = 1

[State 1000]
type = ChangeState
trigger1 = AnimTime = 0
value = 0
ctrl = 1


Ma vedi che casino? su un codice molto lungo non si capisce più nulla del codice che si sta leggendo... in questo codice TUTTE le righe fanno parte dello state 19990... ma non vedi come sarebbe più semplice se si facesse più attenzione alla corrispondenza state x,y? guarda come viene molto più ordinato seguendo i miei criteri

[StateDef 19990]
type = S
movetype= A
physics = S
juggle = 1
velset = 0,0
ctrl = 0
anim = 11050
poweradd = -1000
sprpriority = 2

[State 19990, PlaySnd]
type = PlaySnd
trigger1 = animelem = 1
value = S9,1
volume = 800

[State 19990, SuperPause]
type = SuperPause
trigger1 = animelem = 1
time = 50
anim = S1000
sound = s8000,9
pos = 0,-30
move = 0
darken = 1
p2defmul = 0
poweradd = 0
unhittable = 1

[State 19990, Helper]
type = Helper
trigger1 = Animelem = 7
helpertype = player
name = "susanoo Bones"
ID = 9990
movetime = 25
supermove = 25
stateno = 9990
pos = 0,0
postype = p1
facing = 1

[State 19990, Return to Stand]
type = ChangeState
trigger1 = AnimTime = 0
value = 0
ctrl = 1


vedi? una cavolata... mettendo in State X il numero giusto si capisce subito e meglio che tutte le istruzioni si riferiscono allo stesso state.
Questa prassi deprecabile (non costa davvero nulla fare attenzione a questo) rende difficile il codice da leggere, quando basterebbe davvero poco per avere un codice un po' più ordinato.

Scusami questa parentesi (è una cosa sciocca ma che io ho sempre detestato). Purtroppo non sono in grado di rispondere alla tua domanda... nel senso... è un codice molto complesso, dove ci sono molti rinvii e molte creazioni di helper incrociati.
Ora... per risolvere il problema è necessario poter fare un concreto debugging del personaggio. Questo richiede anche un po' di conoscenze di programmazione (sto pensando a mettere delle istruzioni temporanee DisplayToClipboard per mettere delle istruzioni aggiuntive di debugging per poter individuare meglio le possibili ragioni del problema).

Col solo codice è un po' difficile. Soprattutto, perché da una analisi del codice, ho visto che ci sono molti intrecci tra eventi vari di helper ed eventi del personaggio principale. Insomma... l'unica soluzione che vedo è fare un debugging serio o, ancora meglio, cercare un personaggio fatto meglio.
0

#5 L   ricky88 

  • Kohai
  • PuntoPunto
  • Gruppo: Membro
  • Messaggi: 437
  • Iscritto: 10-June 06

Inviato 21 January 2010 - 22:02

bene, in poche parole non ho speranze!! :unsure:
0

#6 L   Squall LionHeart™ 

  • Programmatore M.U.G.E.N.
  • Gruppo: Moderatore
  • Messaggi: 1097
  • Iscritto: 23-July 07

Inviato 22 January 2010 - 12:56

Allora, dato che non ho il tempo di fare un giusto debug al personaggio personalmente (che come giustamente dice Nobun sarebbe la soluzione ideale), se hai un pò di tempo da perdere, ergo ti interessa sistemare sto personaggio, possiamo provare ad arrivarci anche da qui.

Se ti va, dovresti prima di tutto individuare lo statedef preciso dove si blocca.
Un metodo abbastanza facile sarebbe quello di guardare l'animazione (ogni statedef ha il parametro anim = NUM). guardando con FF quelle animazioni, potresti capire effettivamente almeno quale sia lo stato da analizzare.

Se così non ci riesci, allora fai un'altra cosa. Considerando la combinazione di tasti che fai per accedere alla seconda trasformazione, vai nel cmd ed identificala fra i comandi. una volta trovato, leggi il nome e vai al changestate (sempre nel cmd) che utilizza quel nome (del tipo triggerall = command = "pippo"), e leggi da quello stesso changestate il valore di "value". Quello è il numero identificativo dello statedef. Se non è fra quelli postati, allora postalo, altrimenti dimmi precisamente qual'è :)

Saluti

Squall
0

#7 L   ricky88 

  • Kohai
  • PuntoPunto
  • Gruppo: Membro
  • Messaggi: 437
  • Iscritto: 10-June 06

Inviato 22 January 2010 - 13:05

alla fine ho risolto..... è bastato semplicemente cancellare un changestate 9995 nello statedef della mossa. sembrava chissa che e invece!! :)
0

#8 L   Squall LionHeart™ 

  • Programmatore M.U.G.E.N.
  • Gruppo: Moderatore
  • Messaggi: 1097
  • Iscritto: 23-July 07

Inviato 23 January 2010 - 00:48

Beh in realtà era ovvio che fosse un changestate, infatti il mio esempio sui loop puntava proprio lì, però non avendo il char sotto mano non potevo dirti di cancellare a buffo i changestate XD stavo cercando prima di capire precisamente dove fosse il problema ;) anche perché c'era la presenza di un Helper, e poteva anche essere il suo changestate a creare problemi ;)

Ad ogni modo, felice che tu abbia risolto :P

Saluti

Squall
0

Condividi questa discussione:


Pagina 1 di 1
  • Non puoi iniziare una nuova discussione
  • Non puoi rispondere a questa discussione

1 utenti stanno leggendo questa discussione
0 utenti, 1 ospiti, 0 utenti anonimi