Tutorial Programmazione VIIIb, Parte VIII: l'AI (seconda parte)

« Older   Newer »
  Share  
Squall LionHeart™
view post Posted on 14/3/2008, 20:22




PARTE VIII: L’AI

È consigliato seguire passo passo in modo pratico le nozioni descritte nel tutorial, per una facile e rapida comprensione.

Atto III: L’AI nel CNS

Ora che abbiamo stabilito la prima e fondamentale condizione di attivazione, passiamo al CNS.

L’AI si programma nello Statedef -2, che è lo statedef “SEMPRE VERIFICATO”.

Dunque, iniziamo nel mettere codici simili, una per ogni tecnica del personaggio (parliamo di supers e hypers, al momento).

;Charge Aura
[State -2]
type = changestate
Triggerall = roundstate = 2
triggerall = (var(59) != 0) && (statetype = S) && (ctrl) && (random = [0, 81])
trigger1 = (P2bodydist X >= 100) && (power <= 2999)
value = 4500

Dunque, vediamo questo cosa vuol dire:

è un Changestate, sicuramente. Il suo primo Triggerall indica che il Roundstate dev’essere 2. Il Roundstate, è appunto lo stato del Round. 2 indica che non ci troviamo ne nell’intro, ne nella winpose, ma in pieno svolgimento dell’incontro.
Il secondo Triggerall indica importanti condizioni:

-Var(59) != 0 (lo si preferisce a = 1, in quanto si può voler fare una doppia AI per livelli di difficoltà).
-Statetype = S, cioè dev’essere in Stand.
-Ctrl, cioè deve avere il controllo
-Random = [0, 81]. Questo è importante. Indica la frequenza con la quale questo changestate verrà attivato. Il Range spazia da 0 a 999, pertanto un facile modo di decidere il range per ogni singola mossa, è prendere 900 (meglio lasciare un po’ di “posti” liberi, per limitarne l’efficacia) o un numero simile, e dividerlo per il numero di mosse. Il risultato sarà il range di ogni tecnica.

Vediamo ora il Trigger1. io ho riportato esempi frequenti di trigger che possono servire nell’AI.

-p2bodydist X >= n, dove n è un numero qualunque, anche negativo (per indicare alle spalle del p1), e indica la distanza sull’asse X (in questo caso) del p2 dal p1. questo può servire ad esempio nelle prese, dove l’avversario dev’essere vicino, oppure per scelte stilistiche, come in questo caso, per far si che il char non carichi l’aura mentre è vicino all’avversario.

-power <= 2999, indica che non dev’essere arrivato al massimo di energia (per impedire che si carichi inutilmente). Questa condizione va specificata anche nel comando nel CMD del charge, ma se qui non è specificato, il char potrà caricarsi lo stesso. Questo perché nell’AI il char arriva ad un determinato Statedef non tramite i comandi, ma tramite un salto automatico.

Sono possibili tutti i trigger, io ne ho messi alcuni solo a scopo illustrativo.

Il value, infine, indica lo statedef di destinazione.

In questo modo, si programmano le supers e le Hypers. Ma i colpi semplici?
Bene, per loro è un po’ differente. Il codice da utilizzare è sempre un changestate, o meglio, una catena di changestate, per creare combo. Ecco un esempio:

;Combo Pugni
[State -2]
type = changestate
Triggerall = roundstate = 2
triggerall = (var(59) != 0) && (stateno = 200)
trigger1 = (movecontact)
value = 210
[State -2]
type = changestate
Triggerall = roundstate = 2
triggerall = (var(59) !=0) && (statetype = S)
trigger1 = (stateno = 210) && (prevstateno = 200) && (movecontact)
value = 220

Dunque, iniziamo col constatare che sono 2 changestate.
Tutti e due , ha sempre le condizioni della variabile e del roundstate.

Se lo volessimo “leggere”, diremmo così:

SE: il char si trova nello stato 200 (condizione stateno = 200), con tutte quelle condizioni suddette e COLPISCE (condizione “movecontact”), passa allo statedef 210.
SE: il char si trova nello stato 210 (condizione stateno = 210), e prima si trovava nello statedef 200 (condizione “prevstateno = 200”), con tutte quelle condizioni suddette e COLPISCE (condizione “movecontact”), passa allo statedef 220.

Quindi, questo farebbe avere una serie di pugni concatenati.

Più di questi comandi si mettono, più l’AI del char sarà forte. È bene metterne a sufficienza (combo calci, combo pugni, combo miste, da crouch,da air ecc) ma non eccedere, in quanto come regola generale, un char troppo forte, scoccia, perché non lo si riesce a battere, e quindi si perde lo sfizio di giocare.

Ultima parte dell’AI, è un’attivazione secondaria, che viene posta nello Statedef -3:

[State -3, AI Activate]
type = VarSet
trigger1 = IsHomeTeam
trigger1 = TeamSide = 2
var(59) = 1

, che attiva l’AI, se il char è il “team in casa”, che sarebbe il computer nell’arcade, e il p1 nel versus.
L’altra condizione fa in modo che solo se il char si trova dal lato del p2 si deve attivare la var(59). In questo modo si esclude il caso del versus.

Questa è la programmazione dell’AI, che andrà comunque personalizzata a seconda delle esigenze.

Il prossimo e, probabilmente, ultimo Capitolo di questo tutorial, tratterà approfondimenti sul cns, per programmatori che già hanno compreso appieno questo e i precedenti capitoli.

Saluti

Squall
 
Top
0 replies since 14/3/2008, 20:22   172 views
  Share