02-12-2021, 12:42 AM
Questa guida non offre nuove conoscenze, ma riporta in italiano informazioni che fino ad adesso erano consultabili solo in lingua straniera. Quello della IA degli allenatori è un argomento sul quale non mi ero molto interessato fino ad ora, e per esigenze pratiche ho dovuto colmare questa lacuna. Ho pensato che a qualcuno potesse far comodo avere queste informazioni tradotte in italiano, con link alle fonti originali.
Bando alle ciance, ecco la guida.
Ho trovato due guide su internet a riguardo.
Una inglese su PokeCommunity, qui:
Research: Trainer AI in Fire Red
Il link riporta degli studi e considerazioni molto approfonditi, ma un messaggio in particolare tratto da quella discussione è stato copia-incollato e condiviso moltissime volte, il quale però, senza tutta la spiegazione circostante, è fine a sé stesso. Il messaggio in questione è il seguente:
Il messaggio lascia presupporre che scrivendo 1 nel box "Unknown" su Advance Trainer ottieni il primo comportamento; scrivendo 2 il secondo, e così via. In realtà NON è così. Per capirne meglio, riporto una seconda discussione, questa volta in spagnolo da WAH. Riporto anche una traduzione automatica della discussione:
Usar la IA de combate correctamente [Google Translate - ENG]
Le due guide si completano a vicenda, ma ho notato che ci sono alcune inconsistenze. Quando ci sono, do priorità alla guida spagnola, perché è più recente e più completa. Segue la mia trascrizione in italiano di queste guide.
Per dirla in breve: Ogni allenatore ha associati quattro byte. Vederli in esadecimale non ci è molto utile, ma è più facile capirne il funzionamento se lo si guarda come un un numero a 32 cifre in binario:
Ogni cifra rappresenta uno dei seguenti effetti, che può essere o meno attivo nella IA dell'allenatore, a seconda che quel numero sia 1 o 0 (0 significa che non è attivo; 1 significa che è attivo). Gli effetti sono numerati a partire dalla cifra più a destra e proseguendo verso sinistra:
Lavoreremo solamente con i primi otto valori, corrispondenti alla prima cifra esadecimale (dopo spiegherò il perché). Voi potete attivare tutte le routine di comportamento che preferite, modificando i valori con un programma come Advance Trainer o G3T. Il modo è il seguente:
• Gli allenatori standard hanno tutti un valore di 1 (0000 0001) o 3 (0000 0011);
• Capipalestra, Super4, Campione, Assi del parco lotta, Team cattivo, Boss del team e alcuni allenatori molto forti hanno 7 (0000 0111);
• Alcune eccezioni: Alice, Capopalestra Volante di Forestopoli, ha 23 (0001 0111); Fosco, il Super4 Buio, ha 15 (0000 1111); e qualche allenatore a caso ha 11 (0000 1011).
Tenete presente che i vari programmi (ATrainer, PGE, G3T) lavorano soltanto con i primi otto valori, corrispondenti alla prima delle quattro cifre esadecimali, per una svista dei programmatori. Di norma non ci importerebbe, dato che a noi interessano solo i primi otto (perché sono quelli con effetti utili per la IA; Gli altri sono quasi tutti inutilizzati).
Se però volessimo usare le altre cifre (ad esempio, nel caso creassimo nuove routine di comportamento), è necessario operare manualmente con HxD o altri editor esadecimali. Consiglio di fare riferimento alla guida in spangolo per ulteriori dettagli, ma sostanzialmente si tratta di localizzare dove si trovino i quattro byte dell'allenatore a cui vogliamo modificare la IA, e scrivere in esadecimale il numero che corrisponde alle routine di comportamento che vogliamo attivare. Ad esempio, se volessimo un allenatore forte ma che fugge se scendiamo sotto il 20% di vita, dovremmo scrivere:
Prima di usare questo numero, però, dovete ribaltarlo:
Ci sono un paio di cose ancora che meritano di essere citate, già che siamo in tema.
• Tabella delle mosse espansa e nuovi tipi
Come fa notare un utente di WAH, dovete tener presente che la IA funzionerà correttamente solo con le mosse e i tipi del gioco originale. Se aggiungete nuove mosse o nuovi tipi (ad esempio, se aggiungete il tipo Folletto/Fairy), la IA non saprà come comportarsi.
Pertanto, se espandete la tabella delle mosse o aumentate il numero di tipi nel vostro gioco, dovete anche apportare modifiche alla IA degli allenatori.
• Bug delle abilità
Come riportato nella discussione di PokeCommunity, su Ruby e Fire Red c'è un bug relativo alla capacità della IA di riconoscere l'abilità del Pokémon del giocatore. Potete andare a leggere il messaggio originale per maggiori informazioni, ma per dirla in breve, se il Pokémon avversario ha un'abilità che si attiva (come Intimidazione) la IA penserà che sia il Pokémon del giocatore ad averla, finché il nostro Pokémon non attiverà a sua volta la sua abilità. Questo bug è stato risolto in Emerald.
L'utente propone, nel messaggio originale, anche una routine corretta per sistemare questo bug.
Bando alle ciance, ecco la guida.
LE FONTI
Ho trovato due guide su internet a riguardo.
Una inglese su PokeCommunity, qui:
Research: Trainer AI in Fire Red
Il link riporta degli studi e considerazioni molto approfonditi, ma un messaggio in particolare tratto da quella discussione è stato copia-incollato e condiviso moltissime volte, il quale però, senza tutta la spiegazione circostante, è fine a sé stesso. Il messaggio in questione è il seguente:
Spoiler (Clicca per visualizzare)
Usar la IA de combate correctamente [Google Translate - ENG]
Le due guide si completano a vicenda, ma ho notato che ci sono alcune inconsistenze. Quando ci sono, do priorità alla guida spagnola, perché è più recente e più completa. Segue la mia trascrizione in italiano di queste guide.
LA SPIEGAZIONE
Per dirla in breve: Ogni allenatore ha associati quattro byte. Vederli in esadecimale non ci è molto utile, ma è più facile capirne il funzionamento se lo si guarda come un un numero a 32 cifre in binario:
Codice:
HEX: 00 00 00 00
BINARY: 0000 0000 0000 0000 0000 0000 0000 0000
- 0000 0000 0000 0000 0000 0000 0000 0001: CONTROLLA DEBOLEZZE E RESISTENZE
La IA non userà attacchi poco efficaci, e darà priorità agli attacchi superefficaci.
NOTA: La guida inglese sostiene che si limiti a controllare che una mossa non sia poco efficace, senza fare nulla riguardo alle mosse superefficaci.
- 0000 0000 0000 0000 0000 0000 0000 0010: CONTROLLA LA DISPONIBILITÀ
Non usa attacchi che causano uno status già inflitto (es. non userà Tuononda due volte), né attacchi che richiedono uno status non ancora inflitto (es. non userà Incubo su un Pokémon sveglio); Darà priorità ad attacchi precisi se la nostra elusione è alta; Eccetera. È molto importante per distinguere un allenatore scarso da uno vagamente competente.
- 0000 0000 0000 0000 0000 0000 0000 0100: TENTA DI MANDARE KO
La descrizione nelle due guide non è chiarissima, ma credo che la IA dia priorità a mosse che manderanno KO l'avversario.
- 0000 0000 0000 0000 0000 0000 0000 1000: SETUP AL PRIMO TURNO
Al primo turno [con una chance di circa 3/10, stando alla guida inglese] verrà data priorità a mosse difensive o debilitanti (list of move scripts at 081DBAA7)
- 0000 0000 0000 0000 0000 0000 0001 0000: STRATEGIE RISCHIOSE
Verrà data priorità ad attacchi "rischiosi" [Con una chance di circa 5/10, stando alla guida inglese] , come mosse da 1HKO (es. Abisso), casuali (es. Metronomo), dannose (es. Autodistruzione), o inconsistenti (mosse con alta percentuale critica). [La guida inglese fornisce una lista delle mosse che rientrano in questo ambito: link]
- 0000 0000 0000 0000 0000 0000 0010 0000: PRIORITÀ A MOSSE FORTI
Dà priorità alla mossa con maggior potenza.
NOTA: La guida inglese dice invece che, con una chance di 4/10, viene data priorità a mosse di stato o difensive. Sono incerto sull'accuratezza di questa affermazione.
- 0000 0000 0000 0000 0000 0000 0100 0000: STAFFETTA (BATON PASS)
La mossa Staffetta (Baton Pass) avrà priorità.
NOTA: La guida inglese è più dettagliata. Quando ci sono altri Pokémon in squadra, viene data priorità, con chance di circa 6/10, a mosse di stato o difensive. Le chance aumentano a 9/10 se il Pokémon ha la mossa Staffetta (Baton Pass).
- 0000 0000 0000 0000 0000 0000 1000 0000: NIENTE
Nessun effetto.
- 0000 0000 0000 0000 0000 0001 0000 0000: CONSAPEVOLE DEGLI HP DEI POKéMON IN CAMPO
Se ha pochi HP, dà priorità a mosse curative o autodistruttive; diminuisce la priorità di queste mosse quando ha molti HP. Nelle battaglie in doppio, preferisce attaccare il Pokémon prossimo al KO.
- 0001 1111 1111 1111 1111 1110 0000 0000: NIENTE
Nessun effetto.
- 0010 0000 0000 0000 0000 0000 0000 0000: VAGANTE
Per i Pokémon vaganti (Latios/as; I cani leggendari). Funziona anche sugli allenatori!
- 0100 0000 0000 0000 0000 0000 0000 0000: SAFARI
Per il safari. Il Pokémon ti guarda o scappa; Non attacca. Funziona anche sugli allenatori!
- 1000 0000 0000 0000 0000 0000 0000 0000: TUTORIAL
Usato per il Poochyena/Zigzagoon di inizio gioco in RSE. Fugge se il Pokémon del giocatore scende a vita rossa (20% di vita). Funziona anche per gli allenatori!
COME MODIFICARE LA IA CON ADVANCE TRAINER/G3T
Lavoreremo solamente con i primi otto valori, corrispondenti alla prima cifra esadecimale (dopo spiegherò il perché). Voi potete attivare tutte le routine di comportamento che preferite, modificando i valori con un programma come Advance Trainer o G3T. Il modo è il seguente:
- Step 1: Decidiamo quali valori attivare
Supponiamo ad esempio che vogliamo un allenatore che usi la prima, la terza e la quinta routine di comportamento. Il numero in binario sarà il seguente:
Come vedete, gli 1 sono in prima, terza e quinta posizione.Codice:BINARIO: 0001 0101
- Step 2: Trasformare il numero in decimale
Per qualche motivo, questi programmi lavorano con valori decimali. Pertanto dobbiamo convertire il nostro numero binario in decimale, con un qualsiasi convertitore online.
Codice:BINARIO: 0001 0101
DECIMALE: 21 - Step 3: Inserire il numero
Su Advance Trainer, il valore da modificare è chiamato "Unknown", perché il programma è vecchio e all'epoca non si conosceva la funzionalità di questi byte. Su G3T è chiamato "Unknown (AI?)". Trascrivete lì il numero in decimale che avete ottenuto, et voilà, ora l'allenatore si comporterà come l'avete programmato.
NOTA BENE: Su Advance Trainer, nella schermata della squadra di un allenatore, ogni Pokémon ha un "AI Value". Questa definizione NON è corretta, in quanto non si tratta della IA del Pokémon, ma delle sue statistiche EV. Su G3T questo valore è correttamente riportato col nome "EVs".
• Gli allenatori standard hanno tutti un valore di 1 (0000 0001) o 3 (0000 0011);
• Capipalestra, Super4, Campione, Assi del parco lotta, Team cattivo, Boss del team e alcuni allenatori molto forti hanno 7 (0000 0111);
• Alcune eccezioni: Alice, Capopalestra Volante di Forestopoli, ha 23 (0001 0111); Fosco, il Super4 Buio, ha 15 (0000 1111); e qualche allenatore a caso ha 11 (0000 1011).
USARE LE IA 9-32
Tenete presente che i vari programmi (ATrainer, PGE, G3T) lavorano soltanto con i primi otto valori, corrispondenti alla prima delle quattro cifre esadecimali, per una svista dei programmatori. Di norma non ci importerebbe, dato che a noi interessano solo i primi otto (perché sono quelli con effetti utili per la IA; Gli altri sono quasi tutti inutilizzati).
Se però volessimo usare le altre cifre (ad esempio, nel caso creassimo nuove routine di comportamento), è necessario operare manualmente con HxD o altri editor esadecimali. Consiglio di fare riferimento alla guida in spangolo per ulteriori dettagli, ma sostanzialmente si tratta di localizzare dove si trovino i quattro byte dell'allenatore a cui vogliamo modificare la IA, e scrivere in esadecimale il numero che corrisponde alle routine di comportamento che vogliamo attivare. Ad esempio, se volessimo un allenatore forte ma che fugge se scendiamo sotto il 20% di vita, dovremmo scrivere:
Codice:
BINARIO:1000 0000 0000 0000 0000 0000 0000 0111
HEX: 80 00 00 07
Codice:
80 00 00 07 -> 07 00 00 80
NOTE A MARGINE
Ci sono un paio di cose ancora che meritano di essere citate, già che siamo in tema.
• Tabella delle mosse espansa e nuovi tipi
Come fa notare un utente di WAH, dovete tener presente che la IA funzionerà correttamente solo con le mosse e i tipi del gioco originale. Se aggiungete nuove mosse o nuovi tipi (ad esempio, se aggiungete il tipo Folletto/Fairy), la IA non saprà come comportarsi.
Pertanto, se espandete la tabella delle mosse o aumentate il numero di tipi nel vostro gioco, dovete anche apportare modifiche alla IA degli allenatori.
• Bug delle abilità
Come riportato nella discussione di PokeCommunity, su Ruby e Fire Red c'è un bug relativo alla capacità della IA di riconoscere l'abilità del Pokémon del giocatore. Potete andare a leggere il messaggio originale per maggiori informazioni, ma per dirla in breve, se il Pokémon avversario ha un'abilità che si attiva (come Intimidazione) la IA penserà che sia il Pokémon del giocatore ad averla, finché il nostro Pokémon non attiverà a sua volta la sua abilità. Questo bug è stato risolto in Emerald.
L'utente propone, nel messaggio originale, anche una routine corretta per sistemare questo bug.
Altre guide:
- Flag/ID/Var table - Lista flag e variabili libere e occupate
- Trainer AI - Guida al comportamento degli allenatori in battaglia
- Pokémon data structure - Struttura dei dati dei Pokémon in squadra, e come modificarli con un WTBO
- Cinematic event - Barre nere ai margini dello schermo
- Pokémon Ruby: Fanfare values - Valori per il comando fanfare
- Advance Map error "Invalid pointer to map footer": How to fix it
- Advance Map error "Error on compressed data" & "Access violation at address 00000000": How to fix it
- G3T - Offset per Rosso Fuoco ITA
- Hopeless Trainer Editor - Offset per Smeraldo ITA
- Cambiare impostazioni di default (velocità testo, stile lotta, etc...)