Forum MUGENATION: problema 3 nel cns - Forum MUGENATION

Salta al contenuto

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

problema 3 nel cns i colpi con controllo!

#1 L   warriorz 

  • Kohai
  • PuntoPunto
  • Gruppo: Membro
  • Messaggi: 220
  • Iscritto: 08-August 07

Inviato 17 November 2007 - 16:57

terzo appuntamento! questa è difficile da spiegare, spero esser chiaro:

allora se premo un qualsiasi tasto (a,b,c,x,y,z) viene eseguito l'attacco programmato, ad es. premo "a" e tira un pugno!

a me succede che:

- premo "a"
- l'animazione inizia e finisce regolarmente

ma se:
- premo "a"
- l'animazione inizia..
- ..premo ancora "a" prima che termini
- l'animazione si riavvia anche se quella precedente non è terminata

pensavo che con "ctrl = 0" quando do il comando (premendo "a") il personaggio fosse incontrollabile fino a quando non termina tutta l'animazione, questo non succede ma cmq il ctrl = 0 funziona in quanto se tento di camminare non risponde e termina prima lo stato in esecuzione..

Quindi credo di aver mal interpretato io la funzione ctrl = 0 (che esegue il suo compito ma non al 100% come immaginavo)

Ma allora x non fare riavviare l'anim. premendo + volte lo stesso comando ci sarà un paramentro che non conosco...

illuminatemi..
0

#2 L   Nobun 

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

Inviato 18 November 2007 - 15:05

Allora... non è semplice da spiegare ma cerco di essere chiaro.

Allora il parametro ctrl non sempre altera la funzionalità del Mugen. Devi invece pensarlo come una variabile che memorizza un valore (0 o 1) e che viene utilizzata in programmazione per sapere se in quel momento il personaggio può essere controllato oppure se sta eseguendo una mossa che non deve terminare (quindi non è automatico che "blocchi" tutto)

Ecco perché, normalmente, nel file CMD quando si inizia una mossa c'è sempre questo trigger

triggerX = ctrl

(che equivale a triggerX = ctrl = 1 ; il giocatore ha il controllo).

Se non si specifica questo trigger è possibile far eseguire una mossa di un personaggio anche quando "fuori controllo", il che è utile quando si devono fare delle particolari combinazioni di mossa o per i colpi che possono essere eseguiti in rapida successione.

Normalmente (anche in KFM ed anche nei miei personaggi) nei colpi deboli il Comando nel CMD è specificato in maniera simile a quella che ora ti mostro (sto andando a memoria quindi spero di non essermi dimenticato nulla)

[State -1, Calcio Debole]
type = ChangeState
value = 230
ctrl = 0
triggerall = command = "a"
triggerall = command != "holddown"
trigger1 = statetype = S
trigger1 = ctrl
trigger2 = stateno = 230
trigger2 = time > 10


I primi 2 trigger (triggerall) valgono in entrambe le condizioni che poi si vanno ad analizzare e dicono di controllare che sia premuto il tasto "a" e che non si stia premendo la direzione bassa (il personaggio quindi non si sta abbassando).

In questo esempio ci sono due possibili modi di attivare la mossa 230 (calcio debole)

1) Il giocatore deve avere il controllo dei tasti (trigger1 = ctrl) ed il giocatore deve trovarsi in una posa tipo standing (trigger1 = statetype = S) come ad es. la standing animation o la camminata.

2) La seconda possibilità invece, prescinde dal fatto che il giocatore abbia o meno il controllo (come vedi qui il trigger ctrl non è presente nel trigger2 e quindi, non essendo presente nel triggerall qui non vale). Il secondo caso in cui puoi attivare la mossa è quindi se tu ti trovi nello stesso state 230 (stateno = 230) e, pur non avendo il controllo, sono passati comunque più di 10 tick dalla sua attivazione (time > 10).

Il risultato è poter eseguire una seconda volta la mossa, prima del suo termine, per permettere colpi in rapida successione (il trigger time è fondamentale per non anticipare troppo l'effetto).

Questo perché le istruzioni dello statedef -1 (ovvero la parte del CMD di cui abbiamo parlato) prevalgono e vengono lette prima di quelle dello state positivo in cui ti trovi. Il risultato è tornare nello state 230 re-iniziandolo (rieseguendo quindi l'animazione dall'inizio e resettando il tempo).
0

#3 L   warriorz 

  • Kohai
  • PuntoPunto
  • Gruppo: Membro
  • Messaggi: 220
  • Iscritto: 08-August 07

Inviato 18 November 2007 - 22:45

problema risolto.. dimmi di +:

l'originale era così

[State -1, standing X]
type = ChangeState
value = 200
triggerall = command = "x"
trigger1 = statetype = S
trigger1 = ctrl
trigger2 = (stateno = 200) && (time > 5)

così il comando ctrl era già presente ma il fastidio c'era, ho provato seguendo le varie spiegazioni nel tuo post a variare solo "trigger1 = ctrl" in "triggerall = ctrl" in modo che sempre rispetti questa condizione..e va OK, a questo punto potrei anche cancellare tutto il trigger2..

- a che mi serve la condizione di stare nello state 200 e con + di 5 tick.. io quando decido di eseguire questa animazione non ci sto ancora nello stato 200, ci vado non appena premo X, giusto? e anche x i tick mi è inutile che debba esserci un limite avendo messo nei triggerall il ctrl
0

#4 L   Nobun 

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

Inviato 19 November 2007 - 21:10

Infatti quella seconda condizione non si può verificare se non stai nello state 200. Premendo x vai allo state 200. Ma puoi voler eseguire tanti colpi in successione premendo x e può capitare che quando premi x tu stia ancora nello state 200.

Se ti trovi nello state 200 (ovvero stai eseguendo il pugno debole) e vuoi eseguirne un secondo in rapida successione senza dover attendere la fine dell'animazione 200, ecco che la seconda opzione te lo permette. Anticipa quindi la possibilità di realizzare il colpo (ma solo se stai eseguendo lo stesso tipo di colpo) permettendo la ripetizione dopo che sono passati 5 tick di tempo anziché dover attendere tutta l'animazione.

Serve per dare ancora più rapidità all'esecuzione multipla di colpi deboli dello stesso tipo.

Se metti però

triggerall = ctrl

neutralizzi il secondo trigger perché, sicuramente, quando stai eseguendo la mossa hai avuto l'accortezza di settare il ctrl a 0. Quindi non possono verificarsi in contemporanea le condizioni

trigerall = ctrl
trigger2 = stateno = 200

se invece lasci il trigger come trigger1 ripristini la funzione (perché il triggerall vale solo per la prima condizione - quella "normale" in cui si preme "x" senza essere nello state 200).
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