programmare l'AI
#1
Inviato 31 December 2008 - 11:43
#2
Inviato 31 December 2008 - 17:54
Per le combo, ad esempio, ci possono essere moltissime soluzioni a seconda del tipo di combo.
Faccio l'esempio con la Hyper Combo di Ranmaru (non so se l'hai mai vista, ma l'esegue anche l'AI se è sotto di un certo livello di vita ed è a giusta distanza)... Ranmaru, dopo una serie predefinita di colpi di spada (che equivale alla sequenza di colpi che deve fare il giocatore umano) esegue la hyper (come l'umano, dopo aver eseguito la combinazione di mosse).
Nel caso specifico i primi colpi di spada del PC (facenti parte della sequenza per attivare l'Hyper) hanno un diverso ChangeState (con diverse condizioni) rispetto a quello previsto per il giocatore umano (dove, volta per volta, si chiede la pressione di un tasto specifico per attivare quel determinato attacco normale fino ad arrivare poi all'attivazione della hyper stessa).
La seconda parte (l'esecuzione dell'Hyper è "fissa") è identica sia per PC che per umano.
Questa è stata una soluzione, ma se ne potevano trovare anche altre.
Per i colpi normali, credo basti fare dei comandi [State -1] specifici, ma devono essere ben calibrati. (Onestamente però nelle mie AI fino ad ora ho sempre puntato su determinate mosse speciali tra quelle disponibili nel char, tralasciando i colpi normali - a parte la presa).
#3
Inviato 01 January 2009 - 12:19
cmnq ho provato a scrivere un'inizio di AI (solo x alcune hyper)
nel cmd
[state -1,AI]
type = Varset
trigger1 = command = "AI1"
trigger2 = command = "AI2"
trigger3 = command = "AI3"
trigger4 = command = "AI4"
trigger5 = command = "AI5"
v = 59
value = 1
AI command
[Command]
name = "AI1"
command = a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
time = 1
[Command]
name = "AI2"
command = c,c,c,c,c,c,c,c,c,c,c,c
time = 1
[Command]
name = "AI3"
command = b,b,b,b,b,b,b,b,b,b,b
time = 1
[Command]
name = "AI4"
command = z,z,z,z,z,z,z,z,z,z,z,z
time = 1
[Command]
name = "AI5"
command = x,x,x,x,x,x,x,x,x,x,x,x,x,x
time = 1
;cns
;Charge haoh
[State -2, ChangeState]
type = ChangeState
Triggerall = roundstate = 2
triggerall = (var(59)!=0)&&(statetype= S)&&(ctrl)&&(random=[0,81])
trigger1 = (P2bodydist X>=100)&& (power>=1000)
value = 2999
;ryoku_ranbu
[State -2, ChangeState]
type = ChangeState
Triggerall = roundstate = 2
triggerall = (var(59)!=0)&&(statetype= S)&&(ctrl)&&(random=[0,81])
trigger1 = (P2bodydist X>=100)&& (power>=1000)
value = 3100
;shinryuken
[State -2, ChangeState]
type = ChangeState
Triggerall = roundstate = 2
triggerall = (var(59)!=0)&&(statetype= S)&&(ctrl)&&(random=[0,81])
trigger1 = (P2bodydist X>=100)&& (power>=1000)
value = 3010
;Final_Ryuken
[State -2, ChangeState]
type = ChangeState
Triggerall = roundstate = 2
triggerall = (var(59)!=0)&&(statetype= S)&&(ctrl)&&(random=[0,81])
trigger1 = (P2bodydist X>=100)&& (power>=2000)
value = 3015
;Max_ryoku_ranbu
[State -2, ChangeState]
type = ChangeState
Triggerall = roundstate = 2
triggerall = (var(59)!=0)&&(statetype= S)&&(ctrl)&&(random=[0,81])
trigger1 = (P2bodydist X>=100)&& (power>=2000)&&(life<=400)
value = 3160
nel changestate "Max_ryoku_ranbu ho messo come condizione ke l'hyper deve attivarsi quando il p1 deve aver un poter di almeno 2000 punti e meno di 400 lp ma quando il p1 scende aldi sotto dei 400 lp questa viene ripetuta anke senza avendo il potere a 0 e viene ripetuta di continuo
#4
Inviato 01 January 2009 - 15:29
Ci sono hyper molto basilari che tutto sommato possono essere identiche sia per l'AI che per l'umano e special con effetti particolari che richiedono una differenziazione.
Comunque di solito, c'è bisogno di differenziare solo quando vi è la necessità di un "comando intermedio" da parte dell'utente (ad es. il tempo di carica determinato da quanto a lungo si preme un tasto, es. l'attivazione di una sequenza di special come in Ranmaru con le mosse Oka-Dugen-Gensu, quando una mossa può far anche parte di una combo a determinate condizioni, etc).
Quando invece la mossa è "fissa" ovvero una volta attivata non può essere variata minimamente da chi la controlla (ad es. il lancio di una fireball che parte senza caricamento e che ha una velocità costante senza alcun controllo, un qualsiasi colpo speciale o hyper che comporta un comportamento "fisso") allora non c'è alcuna necessità di differenziare, basta solo che sia differente l'attivazione della mossa nello state -1 (per l'umano associata alla sequenza dei comandi per attivare la mossa, per il PC associato a parametri diversi come le condizioni di controllo, la distanza dal giocatore, l'incidenza probabilistica, il tipo di state avversario, il tipo di posizione assunta attuale (se standing, air o crouch), etc).... però, in tal caso, sia il changestate umano (solo per l'umano) sia il changestate per il pc (solo per il pc) portano entrambi ad uno stesso identico state che contiene una programmazione fissa.
Un suggerimento: cercare di puntare all'esenziale nel proprio codice. Personalmente non adotterei mai lo "stile warusaki" (lui sa quel che fa e lo fa anche per scoraggiare eventuali modifiche) perché presenta complicazioni INUTILI. Se una cosa la si può scrivere in maniera più semplice, è meglio evitare fronzoli inutili: in tal modo è anche più facile evitare errori e produrre un codice più efficace, ordinato e comprensibile.
-------
Detto questo (comunque il tuo codice che mi hai mostrato mi sembra che punti alla essenzialità e me ne compiaccio) cerco di risponderti sul problema della hyper indesiderata.
In teoria nello state da te postato non ci sono errori. Casomai posso consigliarti di separare i vari && in vari trigger1 perché ho visto sperimentalmente che A VOLTE, utilizzare espressioni troppo lunghe per trigger multipli crea qualche problema in più di funzionamento che separare le varie espressioni in trigger autonomi (insomma... meglio usare le espressioni lunghe solo quando indispensabile).
Comunque, anche facendo tale modifica, non credo il tuo problema si risolva. Più probabilmente l'errore può stare altrove e precisamente:
1) Guarda se, nello state -2 o al di fuori (es. lo state -1 del CMD) tu non ti sia per caso dimenticato un altro changestate che porti a 3160 e che sia quest'ultimo a causare problemi
2) Guarda se nello state 3160 non ci sia qualche istruzione indesiderata che in qualche modo produca questa non voluta reiterazione.
#5
Inviato 01 January 2009 - 22:22
;combo_pugni
[State -2, ChangeState]
type = ChangeState
Triggerall = roundstate = 2
triggerall = (var(59)!=0)&&(statetype = S)&&(stateno =200)
trigger1 = (movecontact)&& ctrl
value = 210
[State -2, ChangeState]
type = ChangeState
Triggerall = roundstate = 2
triggerall = (var(59)!=0)&&(statetype = S)&&(stateno =200)
trigger1 = (stateno = 210)&&(prevstateno = 200)&&(movecontact)&& ctrl
value = 220
cmd
[Command]
name = "AI12"
command = b,b,b,b,b,b,b,b
time = 1
[Command]
name = "AI13"
command = c,c,c,c,c
time = 1
ma nn succede niente :unsure:
#7
Inviato 02 January 2009 - 12:41
;combo_pugni
[State -2, ChangeState]
type = ChangeState
Triggerall = roundstate = 2
triggerall = (var(59)!=0)&&(statetype = S)&&(stateno =200)
trigger1 = (movecontact)&&(random=[0,41])
value = 210
[State -2, ChangeState]
type = ChangeState
Triggerall = roundstate = 2
triggerall = (var(59)!=0)&&(statetype = S)&&(stateno =200)
trigger1 = (stateno = 210)&&(prevstateno = 200)&&(movecontact)&&(random=[0,41])
value = 220
#8
Inviato 02 January 2009 - 19:15
#9
Inviato 02 January 2009 - 20:03
;combo_pugni
[State -2, ChangeState]
type = ChangeState
Triggerall = roundstate = 2
triggerall = (var(59)!=0)&&(statetype = S)&&(stateno =200)&&(random=[0,241])
trigger1 = (movecontact)
value = 210
[State -2, ChangeState]
type = ChangeState
Triggerall = roundstate = 2
triggerall = (var(59)!=0)&&(statetype = S)&&(stateno =200)&&(random=[0,241])
trigger1 = (stateno = 210)&&(prevstateno = 200)&&(movecontact)
value = 220
forse c'è qualcosa di errato nei changestate :unsure:
#10
Inviato 02 January 2009 - 23:07
...comunque proviamo...
prova a sostituire
(movecontact)
con
(movecontact!=0)
La cosa strana è che non vedo errori. In teoria, dopo l'attacco (andato a segno o almeno parato) dovrebbe, ogni tanto (ma non sempre, ed è giusto che sia così), seguire un secondo attacco normale.
Ovviamente:
1) Lo state 200 deve essere stato chiamato
2) Gli state 210 e 220 devono esistere
3) La var(59) deve essere quella che attiva la AI
#11
Inviato 02 January 2009 - 23:45
#12
Inviato 03 January 2009 - 00:17
[State -2, ChangeState]
type = ChangeState
Triggerall = roundstate = 2
triggerall = (var(59)!=0)&&(statetype = S)&&(stateno =200)&&(random=[0,241])
trigger1 = (stateno = 210)&&(prevstateno = 200)&&(movecontact)
value = 220
----
Quella parte che ti ho marcato in rosso rende IMPOSSIBILE il changestate a 220 e va cancellata.
Comunque, effettivamente, nemmeno io riesco a capire perché non funziona la combo (anche se non è uno stile che io personalmente adotterei, per il semplice fatto che non viene fuori una combo "naturale" che fa anche il PC, ma viene fuori una combo sullo stile delle AI fatte come "colpi senza tregua" stile Evil Ken che producuno una sequenza di attacchi che l'umano NON può eseguire - personalmente tutte le combo che faccio fare alla AI sono combo che anche il giocatore umano può eseguire).
Puoi postare lo state -2 nella sua interezza?
Infine verifica se nello state -1 non vi sono comandi che interferiscono
#13
Inviato 03 January 2009 - 13:13
[Statedef -2]
;Charge haoh
[State -2, ChangeState]
type = ChangeState
Triggerall = roundstate = 2
triggerall = (var(59)!=0)&&(statetype= S)&&(ctrl)&&(random=[0,81])
trigger1 = (P2bodydist X>=100)&& (power>=1000)
value = 2999
;launch_haoh
[State -2, ChangeState]
type = ChangeState
Triggerall = roundstate = 2
triggerall = (var(59)!=0)&&(statetype= S)&&(ctrl)&&(random=[0,81])
trigger1 = (P2bodydist X>=100)&& (power>=1000)
value = 3000
;ryoku_ranbu
[State -2, ChangeState]
type = ChangeState
Triggerall = roundstate = 2
triggerall = (var(59)!=0)&&(statetype= S)&&(ctrl)&&(random=[0,81])
trigger1 = (P2bodydist X>=100)&& (power>=1000)
value = 3100
;shinryuken
[State -2, ChangeState]
type = ChangeState
Triggerall = roundstate = 2
triggerall = (var(59)!=0)&&(statetype= S)&&(ctrl)&&(random=[0,81])
trigger1 = (P2bodydist X>=100)&& (power>=1000)
value = 3010
;Final_Ryuken
[State -2, ChangeState]
type = ChangeState
Triggerall = roundstate = 2
triggerall = (var(59)!=0)&&(statetype= S)&&(ctrl)&&(random=[0,81])
trigger1 = (P2bodydist X>=100)&& (power>=2000)
value = 3015
;Max_ryoku_ranbu
[State -2, ChangeState]
type = ChangeState
Triggerall = roundstate = 2
triggerall = (var(59)!=0)&&(statetype= S)&&(ctrl)&&(random=[0,81])
trigger1 = (P2bodydist X>=100)&& (power>=2000)
value = 3160
;shouren_kyaku
[State -2, ChangeState]
type = ChangeState
Triggerall = roundstate = 2
triggerall = (var(59)!=0)&&(statetype= S)&&(random=[0,21])
trigger1 = ctrl
value = 799
; shoryu_weak
[State -2, ChangeState]
type = ChangeState
Triggerall = roundstate = 2
triggerall = (var(59)!=0)&&(statetype= S)&&(random=[0,21])
trigger1 = ctrl
value = 1100
;shoryu_medium
[State -2, ChangeState]
type = ChangeState
Triggerall = roundstate = 2
triggerall = (var(59)!=0)&&(statetype= S)&&(random=[0,21])
trigger1 = ctrl
value = 1101
;kooken_weak
[State -2, ChangeState]
type = ChangeState
Triggerall = roundstate = 2
triggerall = (var(59)!=0)&&(statetype= S)&&(random=[0,21])
trigger1 = ctrl
value = 1000
;kooken_medium
[State -2, ChangeState]
type = ChangeState
Triggerall = roundstate = 2
triggerall = (var(59)!=0)&&(statetype= S)&&(random=[0,21])
trigger1 = ctrl
value = 1001
;kooken_hard
[State -2, ChangeState]
type = ChangeState
Triggerall = roundstate = 2
triggerall = (var(59)!=0)&&(statetype= S)&&(random=[0,21])
trigger1 = ctrl
value = 1002
;combo_pugni
[State -2, ChangeState]
type = ChangeState
Triggerall = roundstate = 2
triggerall = (var(59)!=0)&&(statetype = S)&&(stateno =200)&&(random=[0,241])
trigger1 = (movecontact!=0)
value = 210
[State -2, ChangeState]
type = ChangeState
Triggerall = roundstate = 2
triggerall = (var(59)!=0)&&(statetype = S)&&(stateno =200)&&(random=[0,241])
trigger1 = (stateno = 210)&&(prevstateno = 200)&&(movecontact!=0)
value = 220
questa è invece l'Ai nel cmd
[state -1,AI]
type = varset
trigger1 = command = "AI1"
trigger2 = command = "AI2"
trigger3 = command = "AI3"
trigger4 = command = "AI4"
trigger5 = command = "AI5"
trigger6 = command = "AI6"
trigger7 = command = "AI7"
trigger8 = command = "AI8"
trigger9 = command = "AI9"
trigger10 = command = "AI10"
trigger11 = command = "AI11"
trigger12 = command = "AI12"
trigger13 = command = "AI13"
v = 59
value = 1
[Command]
name = "AI1"
command = a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
time = 1
[Command]
name = "AI2"
command = c,c,c,c,c,c,c,c,c,c,c,c
time = 1
[Command]
name = "AI3"
command = b,b,b,b,b,b,b,b,b,b,b
time = 1
[Command]
name = "AI4"
command = z,z,z,z,z,z,z,z,z,z,z,z
time = 1
[Command]
name = "AI5"
command = x,x,x,x,x,x,x,x,x,x,x,x,x,c
time = 1
[Command]
name = "AI6"
command = y,y,y,y,y,y,y,y,y,y,y,y,y,a
time = 1
[Command]
name = "AI7"
command = a,a,a,a,a,x
time = 1
[Command]
name = "AI8"
command = c,c,c,c,c,c,b
time = 1
[Command]
name = "AI9"
command = y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,a
time = 1
[Command]
name = "AI10"
command = F,F,F,F,F,F,F,F,F,F,F
time = 1
[Command]
name = "AI11"
command = x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,a,b
time = 1
[Command]
name = "AI12"
command = b,b,b,b,b,b,b,b,c,x,a
time = 1
[Command]
name = "AI13"
command = c,c,c,c,c,z,y,b
time = 1
#14
Inviato 03 January 2009 - 14:07
Non hai messo un comando per l'AI che porti allo state 200
prova ad aggiungere prima degli ultimi due comandi, questo.
---
[State -2, Ai Pugno Normale]
type = ChangeState
value = 200
ctrl = 0
triggerall = var(59) = 1
trigger1 = statetype = S && ctrl
trigger1 = p2Dist X = [-30,30] ;da calibrare sulla distanza del pugno normale
trigger1 = random < 500 ;ho messo apposta un valore molto alto. Va poi abbassato notevolmente, ma intanto serve per fare un primo test
#15
Inviato 03 January 2009 - 16:09
Nobun, su Jan 3 2009, 14:07, detto:
Non hai messo un comando per l'AI che porti allo state 200
prova ad aggiungere prima degli ultimi due comandi, questo.
---
[State -2, Ai Pugno Normale]
type = ChangeState
value = 200
ctrl = 0
triggerall = var(59) = 1
trigger1 = statetype = S && ctrl
trigger1 = p2Dist X = [-30,30] ;da calibrare sulla distanza del pugno normale
trigger1 = random < 500 ;ho messo apposta un valore molto alto. Va poi abbassato notevolmente, ma intanto serve per fare un primo test
Funziona! :birra: Grazie Sensei
volevo kiederti un'altra cosa posso aggiundere altri colpi alla combo e qual'è la distanza media da impostatre sull'asse delle X
nn riesco a regolare la distanza dell'ultimo colpo(è troppo arretrato rispetto agli altri e nn arriva a colpire il P2)
;combo_pugni
[State -2, Ai Pugno Normale]
type = ChangeState
value = 200
ctrl = 0
triggerall = var(59) = 1
trigger1 = statetype = S && ctrl
trigger1 = p2Dist X = [-30,30] ;da calibrare sulla distanza del pugno normale
trigger1 = random = [0,500]
[State -2, ChangeState]
type = ChangeState
Triggerall = roundstate = 2
triggerall = (var(59)!=0)&&(statetype = S)&&(stateno = 200)&&(random=[0,500])
trigger1 =(movecontact!=0)
value = 210
[State -2, ChangeState]
type = ChangeState
Triggerall = roundstate = 2
triggerall = (var(59)!=0)&&(statetype = S)&&(random=[0,500])
trigger1 =(stateno = 210)&&(prevstateno = 200)&&(movecontact!=0)
value = 250
[State -2, ChangeState]
type = ChangeState
Triggerall = roundstate = 2
triggerall = (var(59)!=0)&&(statetype = S)&&(random=[0,500])
trigger1 =(stateno = 250)&&(prevstateno = 210)&&(movecontact!=0)
value = 1300
#16
Inviato 03 January 2009 - 21:15
Comunque per il problema del "colpo che non aggancia" probabilmente dipende dal troppo arretramento dell'avversario a seguito dei colpi subiti. Prova a modificare i parametri di velocità e di tempo che riguardano lo "slide" all'interno degli HitDef dei colpi programmati negli state 200, 210 e 220.
#17
Inviato 03 January 2009 - 22:41
[State 0, PosAdd]
type = PosAdd
trigger1 = Animelem = 2
x = 18.5
in questo modo il p1 quando colpisce avanza sull'asse X
ho cercato di programmare un'altra combo ke prevede 2 special di seguito
;combo_special
[State -2, Ai Pugno Normale]
type = ChangeState
value = 1200
ctrl = 0
triggerall = var(59) = 1
trigger1 = statetype = S && ctrl
trigger1 = p2Dist X = [-30,30] ;da calibrare sulla distanza del pugno normale
trigger1 = random = [0,500]
[State -2, ChangeState]
type = ChangeState
Triggerall = roundstate = 2
triggerall = (var(59)!=0)&&(statetype = S)&&(stateno = 1200)&&(random=[0,500])
trigger1 =(movecontact!=0)
value = 3200
AI cmd
trigger15 = command = "AI15"
trigger16 = command = "AI16"
[Command]
name = "AI15"
command = a,a,a,a,z,z,z,b
time = 1
[Command]
name = "AI16"
command = b,b,b,b,b,a,a,a,a,a,a,a,a,a
time = 1
ma nn viene richiamata dall'AI
#18
Inviato 03 January 2009 - 23:32
(nota nei miei personaggi, vedi CMD, il secondo parametro è sempre la descrizione analitica della mossa).
Tecnicamente la combo dovrebbe funzionare (probabilmente p2Dist X va ricalibrato) ma sei sicuro che la special in 1200 abbia un HitDef? (movecontact ha effetto quando un colpo viene parato o subito).
---
Ps1 Devi fare una correzione a quello che ti avevo detto.
Mi ero dimenticato di aggiungere un
trigger1 = roundstate = 2
nei trigger del comando che porta l'AI allo state 200.
Va aggiunto anche allo state -2 che porta allo state 1200
---
Ps2 il mio consiglio era leggermente diverso, ma anche la tua può essere una soluzione.
#19
Inviato 03 January 2009 - 23:49
[Statedef 1200]
type = S
movetype = A
physics = S
juggle = 8
ctrl = 0
Anim = 1200
[State 1100, Voice]
type = PlaySnd
trigger1 = AnimElem = 1
value = 1200,0
channel = 0
[State 52, Effect]
type = PlaySnd
trigger1 = AnimElemTime(2) = 6
value = 100, 10
channel = 20
[State 1100, StateType]
type = StateTypeSet
trigger1 = AnimElem = 2
StateType = A
physics = N
[State 1100, Gravity]
type = Veladd
trigger1 = AnimElemTime(2) >= 0
y = .02
[State 1100, Velocity]
type = VelSet
trigger1 = AnimElemTime(2) = 0
x = 0
y = -.2
[State 1000, Spark]
type = Explod
trigger1 = Time = 0
Anim = 8040
pos = 0, 0
postype = p1
ownpal = 1
sprpriority = 3
pausemovetime = -1
supermovetime = -1
scale = .5,.5
[State 1100, HitDef]
type = HitDef
trigger1 = AnimElem = 3
attr = A, SA
animtype = Heavy
air.animtype = Back
damage=ceil(ifelse((28*fvar(10))<7,7,(28*fvar(10)))),ceil(ifelse((28*fvar(10)/8)<7,7,(28*fvar(10)/ 8)))
priority = 7, Hit
hitflag = MAF
guardflag = MA
pausetime = ceil(13*(2-(var(16)>0))/2),ceil(14*(2-(var(16)>0))/2)
sparkno = S8210+(random%8)
guard.sparkno = S8105
sparkxy = -10, -57
hitsound = S2,5
guardsound = S1,0
ground.type = Low
ground.slidetime = 20
ground.hittime = 20
guard.ctrltime = 20
ground.velocity = -4,0
guard.velocity = -8
air.velocity = -6,-6.5
airguard.velocity = -6.67,-1
ground.cornerpush.veloff = -5.6
guard.cornerpush.veloff = -11.2
air.cornerpush.veloff = 0
airguard.cornerpush.veloff = 0
envshake.time = 10
envshake.ampl = 3
fall = 0
fall.recover = 0
air.fall = 1
air.recover = 0
yaccel = .5
persistent = 0
getpower = ifelse(var(17),70,143)*(1000+var(24))/1000*ifelse((var(15)||var(16)),0,1),35*(1000+var(24))/1000*ifelse((var(15)||var(16)), 0,1)
givepower = 35, 35
palfx.time = 12*var(41)
palfx.add = 255,255,255
palfx.mul = 128,128,128
forcestand = 1
[State 1200, 4]
type = ChangeState
trigger1 = MoveHit
value = 1201
[State 1100, ChangeState]
type = ChangeState
trigger1 = AnimTime = 0
value = 1205
ctrl = 1
#20
Inviato 07 January 2009 - 19:57
Immagino che il 1201 ci sia però già il 1200 dovrebbe produrre danni.
Un consiglio.
Modifica, nell'hitdef le righe
damage=ceil(ifelse((28*fvar(10))<7,7,(28*fvar(10)))),ceil(ifelse((28*fvar(10)/8)<7,7,(28*fvar(10)/ 8)))
pausetime = ceil(13*(2-(var(16)>0))/2),ceil(14*(2-(var(16)>0))/2)
sparkno = S8210+(random%8)
getpower = ifelse(var(17),70,143)*(1000+var(24))/1000*ifelse((var(15)||var(16)),0,1),35*(1000+var(24))/1000*ifelse((var(15)||var(16)), 0,1)
con delle espressioni più semplici. Non ha senso usare espressioni tanto complesse e variabili. Meglio metterci direttamente i valori desiderati
damage = 50, 5 ;da modificare calibrando il colpo
pausetime = 6, 2
sparkno = ... ;metti un valore valido
getpower toglilo pure
togli pure forcestand = 1 se non ti serve.
-------

Aiuto










