06-08-2014, 12:08 AM
Versione 2.0, aggiornata e completa. Non metterò tutto il post in un solo momento perché va oltre le mie possibilità (04/09/2021).
Fa letteralmente comparire la casella del messaggio, niente di più, niente di meno.
Per inserire a dovere il messaggio, usate l'adattatore di testo di XSE.
A.k.a. come facciamo a non far ripetere gli eventi due volte?
In pratica lo script funzionerà in questo modo:
Ci parliamo una seconda volta
D'ora in poi lo script continuerà da @next.
Per rimuovere una flag basta inserire in uno script il comando clearflag 0x????.
FLAG IMPORTANTI
FIRE RED
RUBY
EMERALD
Ovvero lo script che permette al giocatore di ricevere un Pokémon.
Ovvero lo script che permette al giocatore di ricevere uno strumento.
Script che permette di ricevere l'uovo di un Pokémon.
Al posto di ? dovete inserire l'id associato alla specie Pokémon, in esadecimale
Lo script che permette di cominciare una battaglia contro un Pokémon selvatico
Questo comando fa varie cose a seconda del valore attribuito
Gli special per ora conosciuti sono i seguenti. Accanto vengono riportati gli effetti.
Ovvero il comando che fa muovere gli sprites sulla mappa
Normalmente vi metterei una lista dei movimenti da inserire, ma in questo caso vi lascio il download di un tool molto, MOLTO utile e intuitivo per ricavare i movimenti da inserire. Download Advance Move Maker (A.M.M.)
Per far muovere più persone contemporaneamene basta fare in questo modo:
In questo modo il waitmovement aspetterà che entrambe le persone abbiano finito di camminare prima di proseguire con il resto dello script
Ovvero il comando che fa cominciare la battaglia contro un allenatore
TRAINERBATTLE 0X0
TRAINERBATTLE 0X3
Fa teletrasportare il giocatore in una mappa a nostra scelta.
Esistono diversi tipi di Warp con effetti diversi, che vi andrò ad elencare.
WARP
WARPMUTED
Stesse richieste di inserimento, ma non sentirete il suono del warp.
WARPWALK
Stesso discorso, ma il player farà l'animazione di camminata
WARPHOLE
Questo warp farà sprofondare il giocatore nella sabbia/qualunque altro terreno vogliate e lo teletrasporterà nella mappa scelta, nella stessa posizione X/Y della mappa precedente.
WARPTELEPORT
Stesse richieste di inserimento di un normale warp, solo che avrete l'effetto "teletrasporto" dei pannelli della Silph S.p.a.
Ovvero lo script che ci permette di muovere la telecamera a piacimento.
"Ma scusa, questo è un applymovement". Esatto, è un applymovement ma fatto alla telecamera, ez.
Ovvero come fa scomparire uno sprite (hidesprite) e come far diventare lo schermo bianco o nero (fadescreen).
HIDESPRITE
Al posto di ? dovete mettere l'id associato a un minisprite su Advance Map che volete far scomparire.
Attenzione! Lo script non lo farà scomparire permanentemente e meno che nell'ID persona non sia presente una flag attiva. Per far scomparire permanentemente una persona ci vuole uno script del genere:
FADESCREEN
Al posto di ? dovete mettere uno dei seguenti valori, in base all'effetto che volete dare.
FADESCREENDELAY
Fa la stessa cosa del fadescreen normale, ma con un certo delay. Praticamente con questo comando otterrete l'effetto di dissolvenza graduale, in base a quanto delay indicherete.
Ovvero come impostare lo script del Pokémon Market
Ovvero un evento che vi fa scegliere se rispondere Sì/No, e in base a quello far continuare lo script in maniera differente.
Ok, ci sono un sacco di cose nuove, quindi andiamo con ordine.
Ovvero i comandi che controllano che abbiate una determinata quantità di un certo strumento (checkitem) e in caso rimuoverlo (removeitem).
Utile se dovete consegnare/usare un oggetto durante la storia.
Ovvero un comando che vi permette di contare quanti Pokémon ci siano nel vostro team e salvare il valore nella variabile 800D. Ha molteplici utilizzi, ma quello più usato è il seguente.
Ovvero i comandi che controllano il tempo meteorologico.
Ovvero il comando che permette di teletrasportare un NPC in un'altra parte della mappa.
Ovvero come mostrare l'immagine di un Pokémon (o un eventuale mugshot di un personaggio) in una determinata posizione dello schermo/rimuoverla una volta che non la si vuole più veder visualizzata.
Visto che sono una brava persona vi voglio aiutare nella ricerca delle coordinate corrette:
CENTRO DELLO SCHERMO
X = A
Y = 3
CENTRO-SINISTRA (Mugshot)
X = 1
Y = 4
Rimuove la showpokepic attualmente visualizzata.
Era l'unico nome per riassumere i comandi legati all'apertura e alla chiusura delle porte, F.
Fa capire al gioco che la porta in una determinata posizione dovrà essere aperta a breve.
Fa capire al gioco che la porta in una determinata posizione dovrà essere aperta a breve.
È il comando che esegue ciò che è stato dichiarato in setdooropened e setdoorclosed
Ovvero "quel comando che all'inizio sembra inutile, ma che in combinazione agli script di mappa può fare cose molto belle".
È il comando che serve a far cambiare il blocco in una determinata coordinata in un altro a nostra scelta.
Sarà una parte leggermente complicata che dovrete abbinare ad uno script di mappa, se la volete rendere permanente.
1) Cliccate sul pezzo di puzzle in Advance Map
2) Cliccate sul blocco desiderato
3) Il numero indicato dal numero 3 è ciò che cercate
È lo special che fa ricaricare la mappa, in modo che il setmaptile possa essere visto
Ho raggruppato tutti i comandi riguardati il suono/musiche sotto un'unica sezione.
Comando per far partire all'istante una traccia. Al posto di ? dovete mettere il numero di una traccia che volete far partire, in esadecimale. L'elenco delle tracce è disponibile su Advance Map -> Vista Header -> Opzioni Mappa -> Musica.
Stessa funzione del playsong, ma con effetto fade. Al posto di ? dovete mettere il numero di una traccia che volete far partire, in esadecimale.
Fa sentire un suono. Al posto di ? dovete mettere il numero di un suono che sentite tramite Sappy, in esadecimale. Provvederò quanto prima a mettere una lista.
Fa sentire una fanfara (come il motivetto di cura dei Pokémon). Al posto di ? dovete mettere il numero di una traccia che volete far partire, in esadecimale. Potete trovare i numeri su Advance Map come per il playsong.
Aspetta che la fanfara sia finita prima di far continuare l'evento.
Fa sentire il verso di un Pokémon. Al posto di ? dovete mettere il numero di un Pokémon, in esadecimale.
Aspetta che il verso sia finito prima di far continuare l'evento.
Tramite questi comandi possiamo gestire i nostri introiti e diventare Zio Paperone.
Tramite questo comando riceveremo dei soldi. Al posto di ? dovete mettere il numero di soldi in esadecimale che volete ricevere
Tramite questo comando ci verranno detratti dei soldi. Al posto di ? dovete mettere il numero di soldi in esadecimale che volete detrarre
Simile al checkitem, controlla se abbiamo una certa quantità di soldi prima di procedere con lo script. Al posto di ? dovete mettere il numero di soldi in esadecimale che volete impostare come soglia.
Logicamente lo script sarà strutturato come se fosse un check:
Mostra a schermo un box che indica quanti soldi abbiamo.
Solitamente la posizione in cui viene visualizzato il box è la [0,0].
Fa sparire il box presente nelle coordinate indicate nel comando.
Fa cambiare il numero di soldi visualizzati a schermo in un determinato box dopo averne aggiunti o detratti.
Letteralmente fa estrarre un numero randomico tra 0 e il numero scelto da voi-1.
Può essere utile se, che ne so, avete fatto uno script in una miniera e volete dare una ricompensa randomica al giocatore dopo aver scavato.
Questo comando ci permette di memorizzare la posizione del giocatore in variabili a nostra scelta (una per la X e una per la Y); ciò ci permette di occupare meno memoria per gli script calpestabili, in quanto piuttosto che crearne due (uno per blocco su cui potrebbe passare il giocatore) ne creiamo uno solo che fa muovere il player in un certo modo a seconda delle coordinate registrate.
Quindi, come si utilizza? Mettiamo che se il giocatore attiva il calpestabile sul blocco di destra (7), allora voglio che faccia un certo movimento, mentre se lo attiva a sinistra (6) voglio che ne faccia un altro. How?
Fine.
Ok, vi ho letteralmente elencato non so quanti comandi, ma non vi ho ancora parlato dei vari tipi di script:
PG RELATED
CALPESTABILE
SCRIPT DI MAPPA
In questa sezione metterò script che svolgono una precisa funzione; chiamiamola "sezione avanzata".
È in realtà un procedimento molto semplice. Usate uno script di mappa di tipo 05 (All'entrata/Alla chiusura del menu).
Il comando da utilizzare in questo caso è "playsong2 0x?"
In pratica:
Ciò che succede è:
È attiva la flag? No. Allora non cambiare canzone.
È attiva la flag? Sì. Allora cambia canzone.
Il titolo parla da solo.
Lo script del move tutor dove vi viene insegnata una mossa in cambio di un determinato strumento. Valido per Fire Red.
Come dice il titolo. L'applicazione è facilissima, il problema è stato ricercare gli indirizzi in RAM per renderlo possibile, BUT ANYWAY.
Molto semplicemente, diamo lo script del PC ad un pg che vogliamo noi, come ad esempio un Porygon. Questo ci permette di avere un pc remoto in punti chiave dove tornare indietro risulterebbe troppo lungo; inoltre se abbinato allo special per curare la squadra e ad un multichoice per scegliere se curare i Pokémon o accedere al PC, avremo a nostra disposizione un centro Pokèmon portatile.
Ma bando alle ciance, qui sotto c'è uno script d'esempio.
COMANDI GENERALI
Messaggio (msgbox)
Fa letteralmente comparire la casella del messaggio, niente di più, niente di meno.
Spoiler (Clicca per visualizzare)
Citazione:#dynamic 0x??????
#org @start
lock
faceplayer
msgbox @pointer 0x6
release
end
#org @pointer
= Metti qui il tuo messaggio
- #dynamic 0x?????? -> Cerca un offset libero per lo script. Al posto di ?????? mettete 800000.
- #org @start -> Indica l'inizio dello script
- lock -> Blocca il giocatore
- faceplayer -> Fa in modo che la persona con cui parli guardi il giocatore
- msgbox @pointer 0x6 -> Comando del messaggio normale
- release -> Rilascia il giocatore
- end -> Termina lo script
Per inserire a dovere il messaggio, usate l'adattatore di testo di XSE.
Altri tipi di messaggio
Spoiler (Clicca per visualizzare)
- msgbox @pointer 0x2 -> messaggio che ha già tra le sue funzioni lock, faceplayer e release.
- msgbox @pointer 0x3 -> Usato per i cartelli, non ha le funzioni lock e faceplayer.
- msgbox @pointer 0x4 -> Messaggio che rimane aperto e che ha bisogno del closeonkeypress per essere tolto.
- msgbox @pointer 0x5 -> Messaggio che fa comparire le opzioni YES/NO, ma lo vedremo nel dettaglio più avanti.
- msgbox @pointer 0x6 -> Un messaggio normalissimo.
Flags
A.k.a. come facciamo a non far ripetere gli eventi due volte?
Spoiler (Clicca per visualizzare)
Citazione:#dynamic 0x800000
#org @start
lock
faceplayer
checkflag 0x1500
if 0x1 goto @next
msgbox @msg 0x6
setflag 0x1500
release
end
#org @next
msgbox @msg2 0x6
release
end
#org @msg
= Ciao.
#org @msg2
= Ti ho già salutato, pepega.
- checkflag 0x???? -> Controlla se la flag 0x???? sia attiva o meno e salva un valore; 0 se non è attiva, 1 se è attiva.
- if 0x? goto @next -> Controlla se la flag sia attiva o meno. Se è attiva (if 0x1) allora fai continuare lo script da @next; se non è attiva (if 0x0) fai continuare lo script da next. Nel caso in cui il valore salvato dal checkflag sia diverso da quello dell'if, fa continuare lo script normalmente.
- setflag 0x???? -> Setta la flag.
In pratica lo script funzionerà in questo modo:
Citazione:Controllo che la flag 0x1500 sia attiva
Non è attiva, quindi faccio continuare lo script normalmente
MESSAGGIO "Ciao"
Attivo la flag 0x1500
Fine dello script
Ci parliamo una seconda volta
Citazione:Controllo che la flag 0x1500 sia attiva
È attiva, quindi faccio continuare lo script da @next
MESSAGGIO "Ti ho già salutato, pepega"
Fine dello script
D'ora in poi lo script continuerà da @next.
Per rimuovere una flag basta inserire in uno script il comando clearflag 0x????.
FLAG IMPORTANTI
FIRE RED
Spoiler (Clicca per visualizzare)
0x820 – Attiva la prima medaglia
0x821 - Attiva la seconda medaglia
0x822 - Attiva la terza medaglia
0x823 - Attiva la quarta medaglia
0x824 - Attiva la quinta medaglia
0x825 - Attiva la sesta medaglia
0x826 - Attiva la settima medaglia
0x827 - Attiva l'ottava medaglia
0x828 - Attiva il menu Pokémon
0x829 - Attiva il Pokédex
0x82F - Attiva le scarpe da corsa
0x821 - Attiva la seconda medaglia
0x822 - Attiva la terza medaglia
0x823 - Attiva la quarta medaglia
0x824 - Attiva la quinta medaglia
0x825 - Attiva la sesta medaglia
0x826 - Attiva la settima medaglia
0x827 - Attiva l'ottava medaglia
0x828 - Attiva il menu Pokémon
0x829 - Attiva il Pokédex
0x82F - Attiva le scarpe da corsa
Spoiler (Clicca per visualizzare)
0x800 - Attiva il menu Pokémon
0x801 - Attiva il Pokédex
0x802 - Attiva il Pokénav
0x807 - Attiva la prima medaglia
0x808 - Attiva la seconda medaglia
0x809 - Attiva la terza medaglia
0x80A - Attiva la quarta medaglia
0x80B - Attiva la quinta medaglia
0x80C - Attiva la sesta medaglia
0x80D - Attiva la settima medaglia
0x80E - Attiva l'ottava medaglia
0x860 - Attiva le scarpe da corsa
0x801 - Attiva il Pokédex
0x802 - Attiva il Pokénav
0x807 - Attiva la prima medaglia
0x808 - Attiva la seconda medaglia
0x809 - Attiva la terza medaglia
0x80A - Attiva la quarta medaglia
0x80B - Attiva la quinta medaglia
0x80C - Attiva la sesta medaglia
0x80D - Attiva la settima medaglia
0x80E - Attiva l'ottava medaglia
0x860 - Attiva le scarpe da corsa
Spoiler (Clicca per visualizzare)
0x860 - Attiva il menu Pokémon
0x861 - Attiva il Pokédex
0x862 - Attiva il Pokénav
0x867 - Attiva la prima medaglia
0x868 - Attiva la seconda medaglia
0x869 - Attiva la terza medaglia
0x86A - Attiva la quarta medaglia
0x86B - Attiva la quinta medaglia
0x86C - Attiva la sesta medaglia
0x86D - Attiva la settima medaglia
0x86E - Attiva l'ottava medaglia
0x8C0 - Attiva le scarpe da corsa
0x861 - Attiva il Pokédex
0x862 - Attiva il Pokénav
0x867 - Attiva la prima medaglia
0x868 - Attiva la seconda medaglia
0x869 - Attiva la terza medaglia
0x86A - Attiva la quarta medaglia
0x86B - Attiva la quinta medaglia
0x86C - Attiva la sesta medaglia
0x86D - Attiva la settima medaglia
0x86E - Attiva l'ottava medaglia
0x8C0 - Attiva le scarpe da corsa
Givepokemon
Ovvero lo script che permette al giocatore di ricevere un Pokémon.
Spoiler (Clicca per visualizzare)
Citazione:givepokemon 0x? 0x? 0x? 0x0 0x0 0x0
- Primo 0x? -> Al posto di ? dovete inserire l'id associato alla specie Pokémon, in esadecimale
- Secondo 0x? -> Al posto di ? dovete inserire il livello del Pokémon in esadecimale
- Terzo 0x? -> Al posto di ? dovete inserire l'id associato a un oggetto che volete fargli tenere in esadecimale. Nel caso in cui non volete dargli oggetti, lasciate 0x0.
ID POKÉMON
ID STRUMENTISpoiler (Clicca per visualizzare)BULBASAUR 1
IVYSAUR 2
VENUSAUR 3
CHARMANDER 4
CHARMELEON 5
CHARIZARD 6
SQUIRTLE 7
WARTORTLE 8
BLASTOISE 9
CATERPIE 10
METAPOD 11
BUTTERFREE 12
WEEDLE 13
KAKUNA 14
BEEDRILL 15
PIDGEY 16
PIDGEOTTO 17
PIDGEOT 18
RATTATA 19
RATICATE 20
SPEAROW 21
FEAROW 22
EKANS 23
ARBOK 24
PIKACHU 25
RAICHU 26
SANDSHREW 27
SANDSLASH 28
NIDORAN|f| 29
NIDORINA 30
NIDOQUEEN 31
NIDORAN|m| 32
NIDORINO 33
NIDOKING 34
CLEFAIRY 35
CLEFABLE 36
VULPIX 37
NINETALES 38
JIGGLYPUFF 39
WIGGLYTUFF 40
ZUBAT 41
GOLBAT 42
ODDISH 43
GLOOM 44
VILEPLUME 45
PARAS 46
PARASECT 47
VENONAT 48
VENOMOTH 49
DIGLETT 50
DUGTRIO 51
MEOWTH 52
PERSIAN 53
PSYDUCK 54
GOLDUCK 55
MANKEY 56
PRIMEAPE 57
GROWLITHE 58
ARCANINE 59
POLIWAG 60
POLIWHIRL 61
POLIWRATH 62
ABRA 63
KADABRA 64
ALAKAZAM 65
MACHOP 66
MACHOKE 67
MACHAMP 68
BELLSPROUT 69
WEEPINBELL 70
VICTREEBEL 71
TENTACOOL 72
TENTACRUEL 73
GEODUDE 74
GRAVELER 75
GOLEM 76
PONYTA 77
RAPIDASH 78
SLOWPOKE 79
SLOWBRO 80
MAGNEMITE 81
MAGNETON 82
FARFETCH'D 83
DODUO 84
DODRIO 85
SEEL 86
DEWGONG 87
GRIMER 88
MUK 89
SHELLDER 90
CLOYSTER 91
GASTLY 92
HAUNTER 93
GENGAR 94
ONIX 95
DROWZEE 96
HYPNO 97
KRABBY 98
KINGLER 99
VOLTORB 100
ELECTRODE 101
EXEGGCUTE 102
EXEGGUTOR 103
CUBONE 104
MAROWAK 105
HITMONLEE 106
HITMONCHAN 107
LICKITUNG 108
KOFFING 109
WEEZING 110
RHYHORN 111
RHYDON 112
CHANSEY 113
TANGELA 114
KANGASKHAN 115
HORSEA 116
SEADRA 117
GOLDEEN 118
SEAKING 119
STARYU 120
STARMIE 121
MR. MIME 122
SCYTHER 123
JYNX 124
ELECTABUZZ 125
MAGMAR 126
PINSIR 127
TAUROS 128
MAGIKARP 129
GYARADOS 130
LAPRAS 131
DITTO 132
EEVEE 133
VAPOREON 134
JOLTEON 135
FLAREON 136
PORYGON 137
OMANYTE 138
OMASTAR 139
KABUTO 140
KABUTOPS 141
AERODACTYL 142
SNORLAX 143
ARTICUNO 144
ZAPDOS 145
MOLTRES 146
DRATINI 147
DRAGONAIR 148
DRAGONITE 149
MEWTWO 150
MEW 151
CHIKORITA 152
BAYLEEF 153
MEGANIUM 154
CYNDAQUIL 155
QUILAVA 156
TYPHLOSION 157
TOTODILE 158
CROCONAW 159
FERALIGATR 160
SENTRET 161
FURRET 162
HOOTHOOT 163
NOCTOWL 164
LEDYBA 165
LEDIAN 166
SPINARAK 167
ARIADOS 168
CROBAT 169
CHINCHOU 170
LANTURN 171
PICHU 172
CLEFFA 173
IGGLYBUFF 174
TOGEPI 175
TOGETIC 176
NATU 177
XATU 178
MAREEP 179
FLAAFFY 180
AMPHAROS 181
BELLOSSOM 182
MARILL 183
AZUMARILL 184
SUDOWOODO 185
POLITOED 186
HOPPIP 187
SKIPLOOM 188
JUMPLUFF 189
AIPOM 190
SUNKERN 191
SUNFLORA 192
YANMA 193
WOOPER 194
QUAGSIRE 195
ESPEON 196
UMBREON 197
MURKROW 198
SLOWKING 199
MISDREAVUS 200
UNOWN 201
WOBBUFFET 202
GIRAFARIG 203
PINECO 204
FORRETRESS 205
DUNSPARCE 206
GLIGAR 207
STEELIX 208
SNUBBULL 209
GRANBULL 210
QWILFISH 211
SCIZOR 212
SHUCKLE 213
HERACROSS 214
SNEASEL 215
TEDDIURSA 216
URSARING 217
SLUGMA 218
MAGCARGO 219
SWINUB 220
PILOSWINE 221
CORSOLA 222
REMORAID 223
OCTILLERY 224
DELIBIRD 225
MANTINE 226
SKARMORY 227
HOUNDOUR 228
HOUNDOOM 229
KINGDRA 230
PHANPY 231
DONPHAN 232
PORYGON2 233
STANTLER 234
SMEARGLE 235
TYROGUE 236
HITMONTOP 237
SMOOCHUM 238
ELEKID 239
MAGBY 240
MILTANK 241
BLISSEY 242
RAIKOU 243
ENTEI 244
SUICUNE 245
LARVITAR 246
PUPITAR 247
TYRANITAR 248
LUGIA 249
HO-OH 250
CELEBI 251
TREECKO 277
GROVYLE 278
SCEPTILE 279
TORCHIC 280
COMBUSKEN 281
BLAZIKEN 282
MUDKIP 283
MARSHTOMP 284
SWAMPERT 285
POOCHYENA 286
MIGHTYENA 287
ZIGZAGOON 288
LINOONE 289
WURMPLE 290
SILCOON 291
BEAUTIFLY 292
CASCOON 293
DUSTOX 294
LOTAD 295
LOMBRE 296
LUDICOLO 297
SEEDOT 298
NUZLEAF 299
SHIFTRY 300
NINCADA 301
NINJASK 302
SHEDINJA 303
TAILLOW 304
SWELLOW 305
SHROOMISH 306
BRELOOM 307
SPINDA 308
WINGULL 309
PELIPPER 310
SURSKIT 311
MASQUERAIN 312
WAILMER 313
WAILORD 314
SKITTY 315
DELCATTY 316
KECLEON 317
BALTOY 318
CLAYDOL 319
NOSEPASS 320
TORKOAL 321
SABLEYE 322
BARBOACH 323
WHISCASH 324
LUVDISC 325
CORPHISH 326
CRAWDAUNT 327
FEEBAS 328
MILOTIC 329
CARVANHA 330
SHARPEDO 331
TRAPINCH 332
VIBRAVA 333
FLYGON 334
MAKUHITA 335
HARIYAMA 336
ELECTRIKE 337
MANECTRIC 338
NUMEL 339
CAMERUPT 340
SPHEAL 341
SEALEO 342
WALREIN 343
CACNEA 344
CACTURNE 345
SNORUNT 346
GLALIE 347
LUNATONE 348
SOLROCK 349
AZURILL 350
SPOINK 351
GRUMPIG 352
PLUSLE 353
MINUN 354
MAWILE 355
MEDITITE 356
MEDICHAM 357
SWABLU 358
ALTARIA 359
WYNAUT 360
DUSKULL 361
DUSCLOPS 362
ROSELIA 363
SLAKOTH 364
VIGOROTH 365
SLAKING 366
GULPIN 367
SWALOT 368
TROPIUS 369
WHISMUR 370
LOUDRED 371
EXPLOUD 372
CLAMPERL 373
HUNTAIL 374
GOREBYSS 375
ABSOL 376
SHUPPET 377
BANETTE 378
SEVIPER 379
ZANGOOSE 380
RELICANTH 381
ARON 382
LAIRON 383
AGGRON 384
CASTFORM 385
VOLBEAT 386
ILLUMISE 387
LILEEP 388
CRADILY 389
ANORITH 390
ARMALDO 391
RALTS 392
KIRLIA 393
GARDEVOIR 394
BAGON 395
SHELGON 396
SALAMENCE 397
BELDUM 398
METANG 399
METAGROSS 400
REGIROCK 401
REGICE 402
REGISTEEL 403
KYOGRE 404
GROUDON 405
RAYQUAZA 406
LATIAS 407
LATIOS 408
JIRACHI 409
DEOXYS 410
CHIMECHO 411
Spoiler (Clicca per visualizzare)Master Ball 1
Ultra Ball 2
Great Ball 3
Poké Ball 4
Safari Ball 5
Net Ball 6
Dive Ball 7
Nest Ball 8
Repeat Ball 9
Timer Ball 10
Luxury Ball 11
Premier Ball 12
Potion 13
Antidote 14
Burn Heal 15
Ice Heal 16
Awakening 17
Parlyz Heal 18
Full Restore 19
Max Potion 20
Hyper Potion 21
Super Potion 22
Full Heal 23
Revive 24
Max Revive 25
Fresh Water 26
Soda Pop 27
Lemonade 28
Moomoo Milk 29
Energypowder 30
Energy Root 31
Heal Powder 32
Revival Herb 33
Ether 34
Max Ether 35
Elixir 36
Max Elixir 37
Lava Cookie 38
Blue Flute 39
Yellow Flute 40
Red Flute 41
Black Flute 42
White Flute 43
Berry Juice 44
Sacred Ash 45
Shoal Salt 46
Shoal Shell 47
Red Shard 48
Blue Shard 49
Yellow Shard 50
Green Shard 51
HP Up 63
Protein 64
Iron 65
Carbos 66
Calcium 67
Rare Candy 68
PP Up 69
Zinc 70
PP Max 71
Guard Spec. 73
Dire Hit 74
X Attack 75
X Defend 76
X Speed 77
X Accuracy 78
X Special 79
Poké Doll 80
Fluffy Tail 81
Super Repel 83
Max Repel 84
Escape Rope 85
Repel 86
Sun Stone 93
Moon Stone 94
Fire Stone 95
Thunderstone 96
Water Stone 97
Leaf Stone 98
Tinymushroom 103
Big Mushroom 104
Pearl 106
Big Pearl 107
Stardust 108
Star Piece 109
Nugget 110
Heart Scale 111
Orange Mail 121
Harbor Mail 122
Glitter Mail 123
Mech Mail 124
Wood Mail 125
Wave Mail 126
Bead Mail 127
Shadow Mail 128
Tropic Mail 129
Dream Mail 130
Fab Mail 131
Retro Mail 132
Cheri Berry 133
Chesto Berry 134
Pecha Berry 135
Rawst Berry 136
Aspear Berry 137
Leppa Berry 138
Oran Berry 139
Persim Berry 140
Lum Berry 141
Sitrus Berry 142
Figy Berry 143
Wiki Berry 144
Mago Berry 145
Aguav Berry 146
Iapapa Berry 147
Razz Berry 148
Bluk Berry 149
Nanab Berry 150
Wepear Berry 151
Pinap Berry 152
Pomeg Berry 153
Kelpsy Berry 154
Qualot Berry 155
Hondew Berry 156
Grepa Berry 157
Tamato Berry 158
Cornn Berry 159
Magost Berry 160
Rabuta Berry 161
Nomel Berry 162
Spelon Berry 163
Pamtre Berry 164
Watmel Berry 165
Durin Berry 166
Belue Berry 167
Liechi Berry 168
Ganlon Berry 169
Salac Berry 170
Petaya Berry 171
Apicot Berry 172
Lansat Berry 173
Starf Berry 174
Enigma Berry 175
Brightpowder 179
White Herb 180
Macho Brace 181
Exp. Share 182
Quick Claw 183
Soothe Bell 184
Mental Herb 185
Choice Band 186
King's Rock 187
Silverpowder 188
Amulet Coin 189
Cleanse Tag 190
Soul Dew 191
Deepseatooth 192
Deepseascale 193
Smoke Ball 194
Everstone 195
Focus Band 196
Lucky Egg 197
Scope Lens 198
Metal Coat 199
Leftovers 200
Dragon Scale 201
Light Ball 202
Soft Sand 203
Hard Stone 204
Miracle Seed 205
Blackglasses 206
Black Belt 207
Magnet 208
Mystic Water 209
Sharp Beak 210
Poison Barb 211
Nevermeltice 212
Spell Tag 213
Twistedspoon 214
Charcoal 215
Dragon Fang 216
Silk Scarf 217
Up-grade 218
Shell Bell 219
Sea Incense 220
Lax Incense 221
Lucky Punch 222
Metal Powder 223
Thick Club 224
Stick 225
Red Scarf 254
Blue Scarf 255
Pink Scarf 256
Green Scarf 257
Yellow Scarf 258
Mach Bike 259
Coin Case 260
Itemfinder 261
Old Rod 262
Good Rod 263
Super Rod 264
S.S. Ticket 265
Contest Pass 266
Wailmer Pail 268
Devon Goods 269
Soot Sack 270
Basement Key 271
Acro Bike 272
PokéBlock Case 273
Letter 274
Eon Ticket 275
Red Orb 276
Blue Orb 277
Scanner 278
Go-goggles 279
Meteorite 280
Rm. 1 Key 281
Rm. 2 Key 282
Rm. 4 Key 283
Rm. 6 Key 284
Storage Key 285
Root Fossil 286
Claw Fossil 287
Devon Scope 288
TM01 289
TM02 290
TM03 291
TM04 292
TM05 293
TM06 294
TM07 295
TM08 296
TM09 297
TM10 298
TM11 299
TM12 300
TM13 301
TM14 302
TM15 303
TM16 304
TM17 305
TM18 306
TM19 307
TM20 308
TM21 309
TM22 310
TM23 311
TM24 312
TM25 313
TM26 314
TM27 315
TM28 316
TM29 317
TM30 318
TM31 319
TM32 320
TM33 321
TM34 322
TM35 323
TM36 324
TM37 325
TM38 326
TM39 327
TM40 328
TM41 329
TM42 330
TM43 331
TM44 332
TM45 333
TM46 334
TM47 335
TM48 336
TM49 337
TM50 338
HM01 339
HM02 340
HM03 341
HM04 342
HM05 343
HM06 344
HM07 345
HM08 346
Oak's Parcel 349
Poké Flute 350
Secret Key 351
Bike Voucher 352
Gold Teeth 353
Old Amber 354
Card Key 355
Lift Key 356
Helix Fossil 357
Dome Fossil 358
Silph Scope 359
Bicycle 360
Town Map 361
VS Seeker 362
Fame Checker 363
TM Case 364
Berry Pouch 365
Teachy TV 366
Tri-pass 367
Rainbow Pass 368
Tea 369
Mysticticket 370
Auroraticket 371
Powder Jar 372
Ruby 373
Sapphire 374
Giveitem
Ovvero lo script che permette al giocatore di ricevere uno strumento.
Spoiler (Clicca per visualizzare)
Citazione:giveitem 0x? 0x?
- Primo 0x? -> Al posto di ? dovete inserire l'id associato a un oggetto che ricevere in esadecimale
- Secondo 0x? -> Al posto di ? dovete inserire 0 o 1 a seconda del messaggio che volete vedere visualizzato a schermo. 0x0 (Find), 0x1 (Obtained).
Giveegg
Script che permette di ricevere l'uovo di un Pokémon.
Spoiler (Clicca per visualizzare)
Citazione:giveegg 0x?
Al posto di ? dovete inserire l'id associato alla specie Pokémon, in esadecimale
Wildbattle
Lo script che permette di cominciare una battaglia contro un Pokémon selvatico
Spoiler (Clicca per visualizzare)
Citazione:wildbattle 0x? 0x? 0x?
- Primo 0x? -> Al posto di ? dovete inserire l'id associato al Pokémon che volete incontrare in esadecimale
- Secondo 0x? -> Al posto di ? dovete inserire il livello del Pokémon in esadecimale
- Terzo 0x? -> Al posto di ? dovete inserire l'id associato a un oggetto che volete fargli tenere in esadecimale
Special
Questo comando fa varie cose a seconda del valore attribuito
Spoiler (Clicca per visualizzare)
Citazione:special 0x?
Gli special per ora conosciuti sono i seguenti. Accanto vengono riportati gli effetti.
Spoiler (Clicca per visualizzare)
special 0x0 - Cura la squadra
special 0x3C - Accedi al PC di Bill (FR/LG)
special 0x98 - Animazione della funivia (R/S)
special 0x9C - Fa cominciare lo script di Wally che cattura Ralts (R/S)
special 0x9F - Scelta dello starter (R/S)
special 0xE0 - Porta Pokémelle (R/S)
special 0x10F - Fa riavviare il gioco
special 0x110 - Fa partire la sala d'onore e i crediti di fine gioco
special 0x111 - Animazione dell'ascensore
special 0x119 - Effetto dell'orb di Kyogre/Groudon (R/S)
special 0x131 - Terremoto (R/S)
special 0x132 - Mostra il piano attuale dell'edificio
special 0x133 - Terremoto di durata lunga (Emerald)
special 0x136 - Terremoto (FR/LG)
special 0x137 - Lava Battle (????????)
special 0x13D - Terremoto di durata breve (Emerald)
special 0x156 - Battaglia con il fantasma di Marowak (FR/LG)
special 0x157 - Salita sulla bici forzata (FR/LG)
special 0x161 - Surf forzato (FR/LG)
special 0x166 - Nickname di un Pokémon
special 0x16F - Attiva il Dex nazionale (FR/LG)
special 0x17B - Animazione del motoscafo del Settipelago
special 0x191 - Animazione della S.S. Anna che lascia il porto
special 0x1F3 - Attiva il Dex nazionale (Emerald)
special 0x3C - Accedi al PC di Bill (FR/LG)
special 0x98 - Animazione della funivia (R/S)
special 0x9C - Fa cominciare lo script di Wally che cattura Ralts (R/S)
special 0x9F - Scelta dello starter (R/S)
special 0xE0 - Porta Pokémelle (R/S)
special 0x10F - Fa riavviare il gioco
special 0x110 - Fa partire la sala d'onore e i crediti di fine gioco
special 0x111 - Animazione dell'ascensore
special 0x119 - Effetto dell'orb di Kyogre/Groudon (R/S)
special 0x131 - Terremoto (R/S)
special 0x132 - Mostra il piano attuale dell'edificio
special 0x133 - Terremoto di durata lunga (Emerald)
special 0x136 - Terremoto (FR/LG)
special 0x137 - Lava Battle (????????)
special 0x13D - Terremoto di durata breve (Emerald)
special 0x156 - Battaglia con il fantasma di Marowak (FR/LG)
special 0x157 - Salita sulla bici forzata (FR/LG)
special 0x161 - Surf forzato (FR/LG)
special 0x166 - Nickname di un Pokémon
special 0x16F - Attiva il Dex nazionale (FR/LG)
special 0x17B - Animazione del motoscafo del Settipelago
special 0x191 - Animazione della S.S. Anna che lascia il porto
special 0x1F3 - Attiva il Dex nazionale (Emerald)
Applymovement
Ovvero il comando che fa muovere gli sprites sulla mappa
Spoiler (Clicca per visualizzare)
Citazione:applymovement 0x? @pointer
waitmovement 0x0
...
#org @pointer
#binary 0x? 0x? 0x? ... 0x? 0xFE
- Applymovement 0x? -> Al posto di ? dovete mettere l'id associato a un minisprite su Advance Map che volete far muovere in esadecimale. Per far muovere il giocatore mettete FF.
- Waitmovement 0x0 -> Comando che fa in modo che lo script non prosegua fino alla fine del movimento.
- #binary 0x? ... 0xFE -> In questo pointer ci stanno i codici dei movimenti che dovete mettere. Lo 0xFE indica la fine del movimento.
Normalmente vi metterei una lista dei movimenti da inserire, ma in questo caso vi lascio il download di un tool molto, MOLTO utile e intuitivo per ricavare i movimenti da inserire. Download Advance Move Maker (A.M.M.)
Per far muovere più persone contemporaneamene basta fare in questo modo:
Citazione:applymovement 0x1 @mov1
applymovement 0x2 @mov2
waitmovement 0x0
...
#org @mov1
#binary ...
#org @mov2
#binary...
In questo modo il waitmovement aspetterà che entrambe le persone abbiano finito di camminare prima di proseguire con il resto dello script
Trainerbattle
Ovvero il comando che fa cominciare la battaglia contro un allenatore
TRAINERBATTLE 0X0
Spoiler (Clicca per visualizzare)
Script di una normale battaglia contro un allenatore, il quale vi approccia se entrate nel suo raggio visivo.
Al posto di ? dovete mettere l'id associato all'allenatore che volete sfidare, ovviamente in esadecimale. Potete ricavare l'id allenatore con programmi come Unnamed Trainer Editor o A-Trainer.
Inoltre, se volete che questo script funzioni, dovete andare su Advance map e impostare la persona a cui avete dato lo script come "allenatore" e dichiarare un raggio di vista (come potete vedere nell'immagine qui sotto).
Citazione:#dynamic 0x800000
#org @start
trainerbattle 0x0 0x? 0x0 @prima @dopo
msgbox @msg 0x6
release
end
#org @prima
= Messaggio che appare prima che inizi la battaglia
#org @dopo
= Messaggio che appare al momento della vittoria
#org @msg
= Messaggio che appare quando parlate con l'allenatore dopo averlo sconfitto
Al posto di ? dovete mettere l'id associato all'allenatore che volete sfidare, ovviamente in esadecimale. Potete ricavare l'id allenatore con programmi come Unnamed Trainer Editor o A-Trainer.
Inoltre, se volete che questo script funzioni, dovete andare su Advance map e impostare la persona a cui avete dato lo script come "allenatore" e dichiarare un raggio di vista (come potete vedere nell'immagine qui sotto).
Spoiler (Clicca per visualizzare)
TRAINERBATTLE 0X3
Spoiler (Clicca per visualizzare)
Normale battaglia con un allenatore che potete inserire nello script quando volete.
Al posto di ? dovete mettere l'id associato all'allenatore che volete sfidare, ovviamente in esadecimale. Potete ricavare l'id allenatore con programmi come Unnamed Trainer Editor o A-Trainer.
Citazione:#dynamic 0x800000
#org @start
resto dello script
trainerbattle 0x3 0x? 0x0 @dopo
resto dello script
release
end
#org @dopo
= Messaggio che appare al momento dello vittoria
Al posto di ? dovete mettere l'id associato all'allenatore che volete sfidare, ovviamente in esadecimale. Potete ricavare l'id allenatore con programmi come Unnamed Trainer Editor o A-Trainer.
Warp
Fa teletrasportare il giocatore in una mappa a nostra scelta.
Esistono diversi tipi di Warp con effetti diversi, che vi andrò ad elencare.
WARP
Spoiler (Clicca per visualizzare)
Citazione:warp 0x? 0x? 0x? 0x? 0x?
- Primo 0x? -> Al posto di ? dovete mettere il Bank della mappa in cui volete teletrasportare il giocatore, in esadecimale (potete trovare i dati su Advance Map)
- Secondo 0x? -> Al posto di ? Dovete mettere il numero della mappa in cui volete teletrasportare il giocatore, in esadecimale
- Terzo 0x? -> Al posto di ? dovete mettere il numero del teletrasporto in cui volete far apparire il giocatore (anch'esso visibile su Advance Map), in esadecimale. Se non volete affidarvi a un warp per il teletrasporto ma a delle coordinate XY, allora mettete FE
- Quarto 0x? -> Al posto di ? dovete mettere la coordinata X in cui volete teletrasportare il giocatore (Su Advance Map le coordinate sono già in esadecimale)
- Quinto 0x? -> Al posto di ? dovete mettere la coordinata Y in cui volete teletrasportare il giocatore
WARPMUTED
Spoiler (Clicca per visualizzare)
Citazione:warpmuted 0x? 0x? 0x? 0x? 0x?
Stesse richieste di inserimento, ma non sentirete il suono del warp.
WARPWALK
Spoiler (Clicca per visualizzare)
Citazione:warpwalk 0x? 0x? 0x? 0x? 0x?
Stesso discorso, ma il player farà l'animazione di camminata
WARPHOLE
Spoiler (Clicca per visualizzare)
Citazione:warphole 0x? 0x?
- Primo 0x? -> Al posto di ? dovete mettere il Bank della mappa in cui volete teletrasportare il giocatore, in esadecimale (potete trovare i dati su Advance Map)
- Secondo 0x? -> Al posto di ? Dovete mettere il numero della mappa in cui volete teletrasportare il giocatore, in esadecimale
Questo warp farà sprofondare il giocatore nella sabbia/qualunque altro terreno vogliate e lo teletrasporterà nella mappa scelta, nella stessa posizione X/Y della mappa precedente.
WARPTELEPORT
Spoiler (Clicca per visualizzare)
Citazione:warpteleport 0x? 0x? 0x? 0x? 0x?
Stesse richieste di inserimento di un normale warp, solo che avrete l'effetto "teletrasporto" dei pannelli della Silph S.p.a.
Movecamera
Ovvero lo script che ci permette di muovere la telecamera a piacimento.
Spoiler (Clicca per visualizzare)
Citazione:#dynamic 0x800000
#org @start
resto dello script
special 0x113
applymovement 0x7F @cam1
waitmovement 0x0
special 0x114
resto dello script
#org @cam1
#binary 0x? ... 0xFE
"Ma scusa, questo è un applymovement". Esatto, è un applymovement ma fatto alla telecamera, ez.
- special 0x113 -> Permette di sbloccare la telecamera
- applymovement 0x7F -> Il 7F è il numero esadecimale abbinato alla telecamera
- special 0x114 -> Blocca la telecamera alla fine del movimento
Hidesprite e Fadescreen
Ovvero come fa scomparire uno sprite (hidesprite) e come far diventare lo schermo bianco o nero (fadescreen).
HIDESPRITE
Spoiler (Clicca per visualizzare)
Citazione:hidesprite 0x?
Al posto di ? dovete mettere l'id associato a un minisprite su Advance Map che volete far scomparire.
Attenzione! Lo script non lo farà scomparire permanentemente e meno che nell'ID persona non sia presente una flag attiva. Per far scomparire permanentemente una persona ci vuole uno script del genere:
Citazione:#dynamic 0x800000
#org #start
resto dello script
hidesprite 0x?
resto dello script
setflag 0x?
release
end
FADESCREEN
Spoiler (Clicca per visualizzare)
Citazione:fadescreen 0x?
Al posto di ? dovete mettere uno dei seguenti valori, in base all'effetto che volete dare.
- 0x1 -> Fa diventare lo schermo nero
- 0x0 -> Fa tornare lo schermo da nero a normale
- 0x3 -> Fa diventare lo schermo bianco
- 0x2 -> Da tornare lo schermo da bianco a normale
FADESCREENDELAY
Spoiler (Clicca per visualizzare)
Citazione:fadescreendelay 0x? 0x?
Fa la stessa cosa del fadescreen normale, ma con un certo delay. Praticamente con questo comando otterrete l'effetto di dissolvenza graduale, in base a quanto delay indicherete.
- Primo 0x? -> Al posto di ? dovete inserire 0, 1, 2, 3 a seconda dell'effetto che volete ottenere. (È indicato nella sezione "Fadescreen").
- Secondo 0x? -> Al posto di ? dovete inserire i frame di delay in esadecimale.
Pokemart
Ovvero come impostare lo script del Pokémon Market
Spoiler (Clicca per visualizzare)
Citazione:#dynamic 0x800000
#org @start
lock
faceplayer
msgbox @msg 0x4
pokemart @mart
msgbox @msg2 0x6
release
end
#org @msg
= (Mettete qui il messaggio che volete far apparire prima che vi faccia vedere gli strumenti acquistabili)
#org @msg2
= Arrivederci!
#org @mart
#raw word 0x?
#raw word 0x?
...
#raw word 0x?
#raw word 0x0
- #raw word 0x? -> Al posto di ? dovete inserire l'id associato a un oggetto che volete veder venduto, in esadecimale.
- #raw word 0x0 -> Sarebbe il pulsante "esci"
Yes/No Msgbox
Ovvero un evento che vi fa scegliere se rispondere Sì/No, e in base a quello far continuare lo script in maniera differente.
Spoiler (Clicca per visualizzare)
Citazione:#dynamic 0x800000
#org @start
lock
resto dello script
msgbox @msg 0x5
compare 0x800D 0x1
if 0x1 goto @yes
resto dello script nel caso in cui si risponda "No"
release
end
#org @msg
= (Mettete qui il messaggio che prevede una risposta Yes/No)
#org @yes
Resto dello script nel caso in cui si risponda "Sì"
release
end
Ok, ci sono un sacco di cose nuove, quindi andiamo con ordine.
- msgbox @msg 0x5 -> Messaggio che fa comparire alla fine del testo una finestra di scelta YES/NO
- compare 0x800D 0x1 -> La variabile 800D viene anche chiamata "Lastresult"; qui viene momentaneamente "immagazzinato" un valore, che verrà poi confrontato con quello di "if 0x?". In questo caso verrà immagazzinato il valore della nostra risposta alla domanda YES/NO.
- if 0x1 goto @yes -> "Se il valore immagazzinato nella variabile 800D è 1 (if 0x1, ovvero se la risposta è "sì"), allora fai proseguire lo script da #org @yes in poi, altrimenti fallo continuare normalmente"
Checkitem/Removeitem
Ovvero i comandi che controllano che abbiate una determinata quantità di un certo strumento (checkitem) e in caso rimuoverlo (removeitem).
Utile se dovete consegnare/usare un oggetto durante la storia.
Spoiler (Clicca per visualizzare)
Citazione:#dynamic 0x800000
#org @start
lock
resto dello script
checkitem 0x? 0x?
compare 0x800D 0x1
if 0x? goto @ok
resto dello script se non avete lo strumento richiesto
release
end
#org @ok
removeitem 0x? 0x?
resto dello script
release
end
- checkitem 0x? 0x? -> Controlla che abbiate tot unità di un determinato strumento e in base al risultato immagazzina un valore nella variabile 800D. Al posto del primo ? dovete mettere l'id associato ad uno strumento in esadecimale, al posto del secondo ? la quantità di quell'oggetto, sempre in esadecimale.
- compare 0x800D 0x1 -> In questo caso nella variabile 800D viene immagazzinato un valore corrispondente alla quantità dell'oggetto.
- if 0x? goto @ok -> "Se la quantità dell'oggetto soddisfa la comparazione, allora fai proseguire lo script da #org @ok", altrimenti fallo continuare normalmente"
Spoiler (Clicca per visualizzare)
- if 0x0 -> Se la quantità è minore di X, allora vai a #org @...
- if 0x1 -> Se la quantità è X, allora vai a #org @...
- if 0x2 -> Se la quantità è più grande di X, allora vai a #org @...
- if 0x3 -> Se la quantità è minore o uguale a X, allora vai a #org @...
- if 0x4 -> Se la quantità è maggiore o uguale a X, allora vai a #org @...
- if 0x5 -> Se la quantità non è esattamente X, allora vai a @org @...
- removeitem 0x? 0x? -> Al posto del primo ? dovete mettere l'id associato ad uno strumento in esadecimale, al posto del secondo ? la quantità di quell'oggetto, sempre in esadecimale. Verrà sottratta una quantità X di quell'oggetto dal vostro zaino.
Countpokemon
Ovvero un comando che vi permette di contare quanti Pokémon ci siano nel vostro team e salvare il valore nella variabile 800D. Ha molteplici utilizzi, ma quello più usato è il seguente.
Spoiler (Clicca per visualizzare)
Mettiamo che vogliate donare un Pokémon al giocatore e volete fare un modo che abbia assolutamente uno spazio in squadra per accoglierlo. Come facciamo? Ez.
Citazione:#dynamic 0x800000
#org @start
lock
resto dello script
countpokemon
compare 0x800D 0x6
if 0x1 goto @nope
resto dello script nel caso in cui abbiamo uno spazio in squadra
givepokemon 0x? 0x? 0x? 0x0 0x0 0x0
release
end
#org @nope
resto dello script nel caso in cui non abbiamo uno spazio in squadra
release
end
- countpokemon -> Comando che conta quanti Pokémon abbiamo in squadra e immagazzina il valore in 800D
- compare 0x800D 0x6 -> Compara il valore della variabile 800D con quello scelto da noi (nel mio caso 6)
- if 0x1 goto @nope -> Stiamo praticamente chiedendo se il valore di 800D sia uguale a 6. Se è uguale fa continuare lo script da #org @nope (dove non riceviamo il Pokémon), altrimenti lo fa continuare normalmente (facendoci ricevere il Pokémon).
Setweather/Doweather/Resetweather
Ovvero i comandi che controllano il tempo meteorologico.
Spoiler (Clicca per visualizzare)
FAR CAMBIARE TEMPO
FAR RITORNARE IL TEMPO NORMALE
Non ve li spiego nemmeno perché credo che i comandi parlino da soli.
Citazione:setweather 0x?
doweather
- setweather 0x? -> Prepara il gioco al cambio di tempo. Al posto di ? dovete mettere uno sei seguenti valori, a seconda del tempo che volete mettere (Ringrazio Flygon per l'elenco e la traduzione).
Spoiler (Clicca per visualizzare)
- 0x0: Niente
- 0x1: Nuvole si riflettono nell’acqua
- 0x2: Normale
- 0x3: Pioggia
- 0x4: tre fiocchi di neve
- 0x5: Temporale
- 0x6: Nebbia
- 0x7: Neve
- 0x8: Tempesta di sabbia
- 0x9: Nebbia diagonale
- 0xA: Nebbia sottile
- 0xB: Nuvoloso
- 0xC: Sole
- 0xD: Temporale2
- 0xE: Niente
- doweather -> Esegue il cambio del tempo meteorologico
FAR RITORNARE IL TEMPO NORMALE
Citazione:resetweather
doweather
Non ve li spiego nemmeno perché credo che i comandi parlino da soli.
Movesprite
Ovvero il comando che permette di teletrasportare un NPC in un'altra parte della mappa.
Spoiler (Clicca per visualizzare)
Citazione:movesprite 0x? 0x? 0x?
- Primo 0x? -> Al posto di ? dovete mettere il numero persona dell'NPC su Advance map, in esadecimale
- Secondo 0x? -> Al posto di ? dovete mettere la coordinata X della mappa, in esadecimale
- Terzo 0x? -> Al posto di ? dovete mettere la coordinata Y della mappa, in esadecimale
Showpokepic/hidepokepic
Ovvero come mostrare l'immagine di un Pokémon (o un eventuale mugshot di un personaggio) in una determinata posizione dello schermo/rimuoverla una volta che non la si vuole più veder visualizzata.
Spoiler (Clicca per visualizzare)
Citazione:showpokepic 0x? 0x? 0x?
- Primo 0x? -> Al posto di ? dovete mettere l'id di un Pokémon che volete far apparire, in esadecimale
- Secondo 0x? -> Al posto di ? dovete mettere la coordinata X in esadecimale
- Terzo 0x? -> Al posto di ? dovete mettere la coordinata Y in esadecimale
Visto che sono una brava persona vi voglio aiutare nella ricerca delle coordinate corrette:
CENTRO DELLO SCHERMO
X = A
Y = 3
CENTRO-SINISTRA (Mugshot)
X = 1
Y = 4
Citazione:hidepokepic
Rimuove la showpokepic attualmente visualizzata.
"Comandi delle porte"
Era l'unico nome per riassumere i comandi legati all'apertura e alla chiusura delle porte, F.
Spoiler (Clicca per visualizzare)
Citazione:setdooropened 0x? 0x?
Fa capire al gioco che la porta in una determinata posizione dovrà essere aperta a breve.
- Primo 0x? -> Al posto di ? dovete mettere la coordinata X della porta in esadecimale
- Secondo 0x? -> Al posto di ? dovete mettere la coordinata Y della porta in esadecimale
Citazione:setdoorclosed 0x? 0x?
Fa capire al gioco che la porta in una determinata posizione dovrà essere aperta a breve.
- Primo 0x? -> Al posto di ? dovete mettere la coordinata X della porta in esadecimale
- Secondo 0x? -> Al posto di ? dovete mettere la coordinata Y della porta in esadecimale
Citazione:doorchange
È il comando che esegue ciò che è stato dichiarato in setdooropened e setdoorclosed
Setmaptile
Ovvero "quel comando che all'inizio sembra inutile, ma che in combinazione agli script di mappa può fare cose molto belle".
È il comando che serve a far cambiare il blocco in una determinata coordinata in un altro a nostra scelta.
Spoiler (Clicca per visualizzare)
Citazione:setmaptile 0x? 0x? 0x? 0x?
Sarà una parte leggermente complicata che dovrete abbinare ad uno script di mappa, se la volete rendere permanente.
- Primo 0x? -> Al posto di ? dovete mettere la coordinata X del blocco che volete cambiare, in esadecimale
- Secondo 0x? -> Al posto di ? dovete mettere la coordinata Y del blocco che volete cambiare in esadecimale
- Terzo 0x? -> Al posto di ? dovete mettere il numero del blocco che volete mettere al posto di quello vecchio. Per vedere il numero del blocco basta seguire i seguenti passaggi:
1) Cliccate sul pezzo di puzzle in Advance Map
2) Cliccate sul blocco desiderato
3) Il numero indicato dal numero 3 è ciò che cercate
- Quarto 0x? -> Al posto di ? dovete mettere 0 o 1, a seconda del comportamento che volete far assumere al nuovo blocco: calpestabile (0) o non calpestabile (1).
Citazione:special 0x8E
È lo special che fa ricaricare la mappa, in modo che il setmaptile possa essere visto
Comandi sonori
Ho raggruppato tutti i comandi riguardati il suono/musiche sotto un'unica sezione.
Spoiler (Clicca per visualizzare)
Citazione:playsong 0x? 0x0
Comando per far partire all'istante una traccia. Al posto di ? dovete mettere il numero di una traccia che volete far partire, in esadecimale. L'elenco delle tracce è disponibile su Advance Map -> Vista Header -> Opzioni Mappa -> Musica.
Citazione:fadesong 0x?
Stessa funzione del playsong, ma con effetto fade. Al posto di ? dovete mettere il numero di una traccia che volete far partire, in esadecimale.
Citazione:sound 0x?
Fa sentire un suono. Al posto di ? dovete mettere il numero di un suono che sentite tramite Sappy, in esadecimale. Provvederò quanto prima a mettere una lista.
Citazione:fanfare 0x?
Fa sentire una fanfara (come il motivetto di cura dei Pokémon). Al posto di ? dovete mettere il numero di una traccia che volete far partire, in esadecimale. Potete trovare i numeri su Advance Map come per il playsong.
Citazione:waitfanfare
Aspetta che la fanfara sia finita prima di far continuare l'evento.
Citazione:cry 0x? 0x0
Fa sentire il verso di un Pokémon. Al posto di ? dovete mettere il numero di un Pokémon, in esadecimale.
Citazione:waitcry
Aspetta che il verso sia finito prima di far continuare l'evento.
Comandi monetari
Tramite questi comandi possiamo gestire i nostri introiti e diventare Zio Paperone.
Spoiler (Clicca per visualizzare)
Citazione:givemoney 0x? 0x00
Tramite questo comando riceveremo dei soldi. Al posto di ? dovete mettere il numero di soldi in esadecimale che volete ricevere
Citazione:paymoney 0x? 0x00
Tramite questo comando ci verranno detratti dei soldi. Al posto di ? dovete mettere il numero di soldi in esadecimale che volete detrarre
Citazione:checkmoney 0x? 0x00
Simile al checkitem, controlla se abbiamo una certa quantità di soldi prima di procedere con lo script. Al posto di ? dovete mettere il numero di soldi in esadecimale che volete impostare come soglia.
Logicamente lo script sarà strutturato come se fosse un check:
Spoiler (Clicca per visualizzare)
Citazione:#dynamic 0x800000
#org @start
lock
resto dello script
checkmoney 0x? 0x00
compare 0x800D 0x1
if 0x? goto @ok
resto dello script in caso non abbiate la somma richiesta
release
end
#org @ok
resto dello script nel caso in cui si abbia la somma
release
end
- Checkmoney 0x? 0x00 -> Al posto di ? dovete mettere la quantità di soldi in esadecimale che volete impostare come check.
- if 0x? goto @ok -> Al posto di ? dovete mettere un numero tra 0 e 5, a seconda del valore della vostra comparazione (potete trovare i valori nella sezione "checkitem"
Citazione:showmoney 0x? 0x? 0x00
Mostra a schermo un box che indica quanti soldi abbiamo.
- Primo 0x? -> Al posto di ? dovete mettere la coordinata X in esadecimale
- Secondo 0x? -> Al posto di ? dovete mettere la coordinata Y in esadecimale
Solitamente la posizione in cui viene visualizzato il box è la [0,0].
Citazione:hidemoney 0x? 0x?
Fa sparire il box presente nelle coordinate indicate nel comando.
- Primo 0x? -> Al posto di ? dovete mettere la coordinata X in esadecimale
- Secondo 0x? -> Al posto di ? dovete mettere la coordinata Y in esadecimale
Citazione:updatemoney 0x? 0x? 0x00
Fa cambiare il numero di soldi visualizzati a schermo in un determinato box dopo averne aggiunti o detratti.
- Primo 0x? -> Al posto di ? dovete mettere la coordinata X in esadecimale
- Secondo 0x? -> Al posto di ? dovete mettere la coordinata Y in esadecimale
Random
Letteralmente fa estrarre un numero randomico tra 0 e il numero scelto da voi-1.
Può essere utile se, che ne so, avete fatto uno script in una miniera e volete dare una ricompensa randomica al giocatore dopo aver scavato.
Spoiler (Clicca per visualizzare)
#dynamic 0x800000
#org @start
resto dello script
//Viene estratto un valore tra 0 e il numero (in Hex) che avete messo nel random-1.
Se nel random mettete "3", viene estratto un numero tra 0 e 2 (quindi 3 opzioni); per l'esempio userò n.
random 0xn
//Faccio una comparazione tra il valore estratto dal random (immagazzinato in 800D) e quello che scelgo io. Se il valore corrisponde fa proseguire lo script da un'altra parte, altrimenti lo fa proseguire finché non trova una corrispondenza.
compare 0x800D 0x0
if 0x1 goto @1
compare 0x800D 0x1
if 0x1 goto @2
compare 0x800D 0x2
if 0x1 goto @3
...
compare 0x800D 0xn-1
if 0x1 goto @n-1
release
end
#org @1
script nel caso in cui venga estratto il primo numero
...
#org @n-1
script nel caso in cui venga estratto il numero n-1.
#org @start
resto dello script
//Viene estratto un valore tra 0 e il numero (in Hex) che avete messo nel random-1.
Se nel random mettete "3", viene estratto un numero tra 0 e 2 (quindi 3 opzioni); per l'esempio userò n.
random 0xn
//Faccio una comparazione tra il valore estratto dal random (immagazzinato in 800D) e quello che scelgo io. Se il valore corrisponde fa proseguire lo script da un'altra parte, altrimenti lo fa proseguire finché non trova una corrispondenza.
compare 0x800D 0x0
if 0x1 goto @1
compare 0x800D 0x1
if 0x1 goto @2
compare 0x800D 0x2
if 0x1 goto @3
...
compare 0x800D 0xn-1
if 0x1 goto @n-1
release
end
#org @1
script nel caso in cui venga estratto il primo numero
...
#org @n-1
script nel caso in cui venga estratto il numero n-1.
Getplayerpos
Questo comando ci permette di memorizzare la posizione del giocatore in variabili a nostra scelta (una per la X e una per la Y); ciò ci permette di occupare meno memoria per gli script calpestabili, in quanto piuttosto che crearne due (uno per blocco su cui potrebbe passare il giocatore) ne creiamo uno solo che fa muovere il player in un certo modo a seconda delle coordinate registrate.
Spoiler (Clicca per visualizzare)
Citazione:getplayerpos 0xvariabilePerLeX 0xvariabilePerLeYOnestamente vi consiglio le variabili 4001 e 4002, visto che sono temporanee.
Quindi, come si utilizza? Mettiamo che se il giocatore attiva il calpestabile sul blocco di destra (7), allora voglio che faccia un certo movimento, mentre se lo attiva a sinistra (6) voglio che ne faccia un altro. How?
Citazione:#dynamic 0x800000
#org @start
lockall
//Immagazzino le variabili X e Y rispettivamente in 0x4001 e 0x4002.
getplayerpos 0x4001 0x4002
//Comparazione tra 0x4001 e 0x7 o 0x6. Se il valore della variabile 4001 è 7, allora fa proseguire lo script da @destra, altrimenti se il valore è 6 lo fa proseguire da @sinistra.
compare 0x4001 0x7
if 0x1 goto @destra
compare 0x4001 0x6
if 0x1 goto @sinistra
releaseall
end
//Movimenti se il giocatore è nel blocco di destra.
#org @destra
applymovement 0xFF @movDestra
waitmovement 0x0
goto @main
//Movimenti se il giocatore è nel blocco di sinistra.
#org @sinistra
applymovement 0xFF @movSinistra
waitmovement 0x0
goto @main
#org @main
resto dello script
Fine.
TIPI DI SCRIPT
Ok, vi ho letteralmente elencato non so quanti comandi, ma non vi ho ancora parlato dei vari tipi di script:
- PG Related -> Ovvero quelli che si triggerano quando parlate con una persona
- Calpestabili -> Ovvero quelli che si triggerano quando calpestate un certo blocco
- Script di mappa -> Ovvero quelli che si attivano quando entrate in una mappa
PG RELATED
Spoiler (Clicca per visualizzare)
Riconoscibilissimi poiché abbinati ad un npc sulla mappa. Si attivano quando parliamo con quel determinato NPC e hanno la seguente struttura
Citazione:#dynamic 0x800000
#org @start
lock
faceplayer //Non obbligatorio
resto dello script
release
end
CALPESTABILE
Spoiler (Clicca per visualizzare)
Come facciamo a mettere uno script calpestabile nel nostro gioco? Molto semplice.
1) Aprite Advance Map, e conseguentemente la vostra Rom sulla mappa in cui volete inserirlo.
2) Andate su "Vista Eventi", dovreste avere questa schermata
3) Andate al primo rettangolo #1 e aumentate il numero degli script a seconda delle vostre esigenze, cliccate poi su "Cambia Eventi" come evidenziato nel rettangolo #2
4) Posizionate gli script sopra dei tile - come ho fatto io nell'esempio - e cliccateci sopra.
5) In "Numero Variabile" (rettangolo #4) inserite 4000; questo farà in modo che il gioco non imploda quando attiverete il calpestabile
6) In "Offset Script" (rettangolo #5) inserite l'offset che vi darà XSE una volta compilato lo script.
FERMI, c'è una piccola differenza rispetto agli script PG-Related.
Per evitare che lo script si ripeta all'infinito basterà gestire il suo comportamento con una flag.
Questo è un esempio:
Come funzionerà questo script?
Prima volta:
Seconda volta
1) Aprite Advance Map, e conseguentemente la vostra Rom sulla mappa in cui volete inserirlo.
2) Andate su "Vista Eventi", dovreste avere questa schermata
3) Andate al primo rettangolo #1 e aumentate il numero degli script a seconda delle vostre esigenze, cliccate poi su "Cambia Eventi" come evidenziato nel rettangolo #2
4) Posizionate gli script sopra dei tile - come ho fatto io nell'esempio - e cliccateci sopra.
5) In "Numero Variabile" (rettangolo #4) inserite 4000; questo farà in modo che il gioco non imploda quando attiverete il calpestabile
6) In "Offset Script" (rettangolo #5) inserite l'offset che vi darà XSE una volta compilato lo script.
FERMI, c'è una piccola differenza rispetto agli script PG-Related.
- "lock" viene sostituito da "lockall"
- "release" viene sostituito da "releaseall"
Per evitare che lo script si ripeta all'infinito basterà gestire il suo comportamento con una flag.
Questo è un esempio:
Citazione:#dynamic 0x800000
#org @start
lockall
checkflag 0x1500 //Ho messo una flag casuale giusto per darvi un esempio
if 0x1 goto @nope
resto dello script
setflag 0x1500
releaseall
end
eventuali messaggi e altri pointer
#org @nope
releaseall
end
Come funzionerà questo script?
Prima volta:
Citazione:Comincia lo script
Blocco tutto
Controllo se la flag 1500 sia attiva
Non è attiva, fai continuare lo script normalmente
Resto dello script
Attivo la flag 1500
Rilascio tutto
Fine
Seconda volta
Citazione:Comincia lo script
Blocco tutto
Controllo se la flag 1500 sia attiva
È attiva, quindi faccio continuare lo script da #org @nope
Rilascio tutto
Fine
SCRIPT DI MAPPA
Spoiler (Clicca per visualizzare)
Qui la faccenda si fa leggermente complicata, ma non troppo.
I comandi sono praticamente gli stessi degli script PG-related (quindi lock e release), ma lo script si attiva quando starete in quella determinata mappa; inoltre per non far ripetere lo script non utilizzeremo il sistema legato alle flag, ma il comando "setvar"
Esempio della struttura di uno script di mappa:
Normale, no? Dove lo inseriamo?
1) Aprite Advance Map e andate nella mappa desiderata
2) Vista Header
3) Script Mappa -> Aggiungi
4) Selezionate "02, carica valori, carica..."
5) In "Flag" mettete la variabile che avete messo nello script
6) In "Offset Script 2" mettete l'offset del vostro script che avete inserito nella rom.
7) Cliccate su "Salva script mappa"
E no, non è ancora finita, perché se provate ora lo script avrete una brutta sorpresa. Per risolvere questo problema tornate su "Vista Header" su Advance Map e premete CTRL+H; facendo così sarete passati alla vista avanzata.
1) Andate su "Offset Script Mappa" e copiate l'offset
2) Aprite XSE, vi troverete davanti questa schermata.
3) Incollate l'offset nel punto 1
4) Cliccate sull'icona del punto 2
5) Cliccate sull'icona del punto 3
A questo punto dovrebbe uscirvi questa schermata
Vedete il "#raw word 0xFFFF"? Bene, sostituitelo con "raw word 0x0", salvate (premendo sull'icona con gli ingranaggi) ed avrete finito.
Ez
I comandi sono praticamente gli stessi degli script PG-related (quindi lock e release), ma lo script si attiva quando starete in quella determinata mappa; inoltre per non far ripetere lo script non utilizzeremo il sistema legato alle flag, ma il comando "setvar"
Citazione:setvar 0x? 0x?
- Primo 0x? -> Al posto di ? dovete mettere una variabile compresa nel range 4011-40FF.
- Secondo 0x? -> Al posto di ? dovete mettere il valore che volete far assumere alla variabile. Solitamente le variabili utilizzate per lo script di mappa hanno valore 0 ("spenta") o 1 ("accesa"). Se nello script di mappa mettiamo come valore variabile "1", lo script non si riattiverà.
Esempio della struttura di uno script di mappa:
Citazione:#dynamic 0x800000
#org @start
lock
resto dello script
setvar 0x4050 0x1 //Ho dato alla variabile 0x4050 il valore 1
release
end
eventuali pointer per messaggi e simili
Normale, no? Dove lo inseriamo?
1) Aprite Advance Map e andate nella mappa desiderata
2) Vista Header
3) Script Mappa -> Aggiungi
4) Selezionate "02, carica valori, carica..."
5) In "Flag" mettete la variabile che avete messo nello script
6) In "Offset Script 2" mettete l'offset del vostro script che avete inserito nella rom.
7) Cliccate su "Salva script mappa"
E no, non è ancora finita, perché se provate ora lo script avrete una brutta sorpresa. Per risolvere questo problema tornate su "Vista Header" su Advance Map e premete CTRL+H; facendo così sarete passati alla vista avanzata.
1) Andate su "Offset Script Mappa" e copiate l'offset
2) Aprite XSE, vi troverete davanti questa schermata.
3) Incollate l'offset nel punto 1
4) Cliccate sull'icona del punto 2
5) Cliccate sull'icona del punto 3
A questo punto dovrebbe uscirvi questa schermata
Vedete il "#raw word 0xFFFF"? Bene, sostituitelo con "raw word 0x0", salvate (premendo sull'icona con gli ingranaggi) ed avrete finito.
Ez
SCRIPT RICORRENTI
In questa sezione metterò script che svolgono una precisa funzione; chiamiamola "sezione avanzata".
Cambio di musica dopo un certo evento
È in realtà un procedimento molto semplice. Usate uno script di mappa di tipo 05 (All'entrata/Alla chiusura del menu).
Il comando da utilizzare in questo caso è "playsong2 0x?"
Spoiler (Clicca per visualizzare)
- playsong2: Simile al playsong, ma serve per i cambi permanenti;
- 0x?: Al posto di ? mettete il numero in hex della canzone che volete far riprodurre (se non volete nessuna musica mettete 0x0).
In pratica:
Citazione:#dynamic 0x800000
#org @start
checkflag 0x????
if 0x1 call @cambioMusica
end
#org @cambioMusica
playsong2 0x????
return
Ciò che succede è:
È attiva la flag? No. Allora non cambiare canzone.
È attiva la flag? Sì. Allora cambia canzone.
Setmaptile permanente
Il titolo parla da solo.
Spoiler (Clicca per visualizzare)
Per far questo ci serve uno script di mappa, ma al posto che utilizzare "02, carica valori, carica...", utilizzeremo "01 Script "Setmaptile"". Sì, non sto scherzando, c'è una categoria apposta per il setmaptile.
Inseriremo lo script nell'unico box disponibile.
Ora passiamo allo script effettivo.
Mettiamo che tramite un calpestabile/PG-related abbiate attivato un setmaptile per mostrare l'entrata di una grotta dove prima c'era un muro. Come facciamo a rendere permanente il cambio? Easy. Sicuramente alla fine dello script avrete messo una flag per evitare che l'evento si ripeta all'infinito, giusto? Bene, allora utilizzeremo quella flag anche nello script di mappa.
Assumiamo che avete usato la flag 0x1500.
Compiliamo questo script e mettiamo l'offset in "Offset Script". (potete mettere anche più comandi setmaptile uno dopo l'altro, non è un problema).
Cosa succederà nel gioco?
È meno complicato di quello che sembra, giuro.
Inseriremo lo script nell'unico box disponibile.
Ora passiamo allo script effettivo.
Mettiamo che tramite un calpestabile/PG-related abbiate attivato un setmaptile per mostrare l'entrata di una grotta dove prima c'era un muro. Come facciamo a rendere permanente il cambio? Easy. Sicuramente alla fine dello script avrete messo una flag per evitare che l'evento si ripeta all'infinito, giusto? Bene, allora utilizzeremo quella flag anche nello script di mappa.
Assumiamo che avete usato la flag 0x1500.
Compiliamo questo script e mettiamo l'offset in "Offset Script". (potete mettere anche più comandi setmaptile uno dopo l'altro, non è un problema).
Citazione:#dynamic 0x800000
#org @start
checkflag 0x1500
if 0x1 call @setmaptile
end
#org @setmaptile
setmaptile 0x? 0x? 0x? 0x? 0x?
return
Cosa succederà nel gioco?
Citazione:Entro nella mappa dove c'è lo script di mappa con il setmaptile
Lo script di mappa controlla se sia attiva la flag 1500
Non è attiva, quindi non fa avvenire il setmaptile
Attivate lo script calpestabile/pg related
Fate vedere il setmaptile in quello script (se il pg/calpestabile si trova in un'altra mappa rispetto al tile che volete cambiare, questo passaggio può essere saltato)
Setto la flag 1500 per evitare che lo script si ripeta
Fine dello script
Entro/sono nella mappa dove c'è lo script di mappa con il setmaptile
Lo script di mappa controlla se sia attiva la flag 1500
È attiva, quindi fa avvenire il setmaptile in modo permanente
È meno complicato di quello che sembra, giuro.
Move Tutor (FIRE RED)
Lo script del move tutor dove vi viene insegnata una mossa in cambio di un determinato strumento. Valido per Fire Red.
Spoiler (Clicca per visualizzare)
Citazione://Prima parte dello script in cui ci viene chiesto se vogliamo imparare la mossa in questione.
#dynamic 0x800000
#org @start
lock
faceplayer
msgbox @msg 0x5
compare 0x800D 0x1
if 0x1 goto @next
msgbox @msgnop 0x6
release
end
//Controlla se abbiamo abbastanza unità di un determinato strumento. Se ne abbiamo, ci lascia proseguire a @impara, altrimenti lo script finisce con @msg2.
#org @next
checkitem 0x? 0x?
compare 0x800D 0x1
if 0x4 goto @impara
msgbox @msg2 0x6
release
end
//Immagazziniamo nella variabile 0x8005 il valore associato alla tutor move che vogliamo far imparare (la lista si può vedere e modificare su G3HS).
"call @schermo" farà aprire il menu Pokémon per far imparare la mossa. Se usciamo dal menu senza averla insegnata, lo script proseguirà da @esci senza farci sprecare gli strumenti, altrimenti se insegnata fa proseguire lo script da @fatto.
#org @impara
msgbox @msg3 0x6
setvar 0x8005 0x?
call @schermo
compare 0x800D 0x0
if 0x1 goto @esci
goto @fatto
//Rimuove l'oggetto
#org @fatto
removeitem 0x? 0x?
msgbox @msg4 0x6
release
end
#org @esci
msgbox @msgnop 0x6
release
end
//Apre il menu Pokémon per poter insegnare la mossa.
#org @schermo
special 0x18D
waitstate
lock
faceplayer
return
#org @msg4
Messaggio di fine dialogo
#org @msg3
"Ah ok, a chi vuoi insegnare questa mossa?"
#org @msg2
"Non hai abbastanza unità dello strumento richiesto"
#org @msgnop
Messaggio nel caso in cui si dica di no.
#org @msg
"Ciao io ti insegno mossa X, ti interessa?"
Infliggere uno status a un Pokémon del party (FIRE RED)
Come dice il titolo. L'applicazione è facilissima, il problema è stato ricercare gli indirizzi in RAM per renderlo possibile, BUT ANYWAY.
Spoiler (Clicca per visualizzare)
Per far questo utilizzeremo il comando "writebytetooffset".
Byte da scrivere in base agli effetti che si vuole ottenere (Crediti a Sakakii)
Indirizzi dello status dei Pokémon del party
Ora non ci resta altro che metterlo in pratica, no? Mettiamo di voler scottare il terzo Pokémon del party.
Se invece volete fare uno script a mo di "ciao, sono una trappola e ti avveleno randomicamente un Pokémon", basta ricorrere al comando "Random 0x", spiegato nella prima sezione.
Lo script avrà questa struttura:
Citazione:writebytetooffset 0xByteDaScrivere 0xIndirizzoInCuiScriverlo
Byte da scrivere in base agli effetti che si vuole ottenere (Crediti a Sakakii)
Citazione:00 -> Nessuno status
01 -> Un turno di sonno
02 -> Due turni di sonno
03 -> Tre turni di sonno
04 -> Quattro turni di sonno
05 -> Cinque turni di sonno
08 -> Avvelenamento
10 -> Scottatura
20 -> Congelamento
40 -> Paralisi
Indirizzi dello status dei Pokémon del party
Citazione:Primo posto -> 0x20242D4
Secondo posto -> 0x2024338
Terzo posto -> 0x202439C
Quarto posto -> 0x2024400
Quinto posto -> 0x2024464
Sesto posto -> 0x20244C8
Ora non ci resta altro che metterlo in pratica, no? Mettiamo di voler scottare il terzo Pokémon del party.
Citazione:writebytetooffset 0x10 0x202439CEZ.
Se invece volete fare uno script a mo di "ciao, sono una trappola e ti avveleno randomicamente un Pokémon", basta ricorrere al comando "Random 0x", spiegato nella prima sezione.
Lo script avrà questa struttura:
Citazione://Vengono contanti i Pokémon del party e il numero viene immagazzinato nella variabile 800D; sempre tramite la 800D si estrae un numero tra 0 e il valore della variabile 800D-1 (usando il comando "random"). Lo script poi proseguirà a seconda del membro scelto dal random, con il conseguente messaggio.
#dynamic 0xC00000
#org @start
lock
countpokemon
random 0x800D
bufferpartypokemon 0x0 0x800D
msgbox @msg 0x6
compare 0x800D 0x0
if 0x1 goto @1
compare 0x800D 0x1
if 0x1 goto @2
compare 0x800D 0x2
if 0x1 goto @3
compare 0x800D 0x3
if 0x1 goto @4
compare 0x800D 0x4
if 0x1 goto @5
compare 0x800D 0x5
if 0x1 goto @6
end
#org @1
writebytetooffset 0x8 0x20242D4
release
end
#org @2
writebytetooffset 0x8 0x2024338
release
end
#org @3
writebytetooffset 0x8 0x202439C
release
end
#org @4
writebytetooffset 0x8 0x2024400
release
end
#org @5
writebytetooffset 0x8 0x2024464
release
end
#org @6
writebytetooffset 0x8 0x20244C8
release
end
#org @msg
= [buffer1] è avvelenato!
Script del PC assegnato ad un OW (FIRE RED)
Molto semplicemente, diamo lo script del PC ad un pg che vogliamo noi, come ad esempio un Porygon. Questo ci permette di avere un pc remoto in punti chiave dove tornare indietro risulterebbe troppo lungo; inoltre se abbinato allo special per curare la squadra e ad un multichoice per scegliere se curare i Pokémon o accedere al PC, avremo a nostra disposizione un centro Pokèmon portatile.
Ma bando alle ciance, qui sotto c'è uno script d'esempio.
Spoiler (Clicca per visualizzare)
Citazione:#dynamic 0x800000
#org @start
faceplayer
special 0x187
compare 0x800D 0x2
if 0x1 goto @1A7AE0
lockall
checkflag 0x841
if 0x1 goto @1A698E
setvar 0x8004 0x1B
special 0x17D
setvar 0x8004 0x0
msgbox @1A5075 MSG_KEEPOPEN
goto @1A6998
#org @1A7AE0
release
end
#org @1A698E
msgbox @1A1390 MSG_KEEPOPEN
releaseall
end
#org @1A6998
preparemsg @1A508A
waitmsg
special 0x106
waitstate
goto @1A69A8
#org @1A69A8
copyvar 0x8000 0x800D
compare 0x8000 0x0
if 0x1 goto @1A6A05
compare 0x8000 0x1
if 0x1 goto @1A69F0
compare 0x8000 0x2
if 0x1 goto @1A6A7A
compare 0x8000 0x3
if 0x1 goto @1A6A56
compare 0x8000 0x4
if 0x1 goto @1A6A46
compare 0x8000 0x7F
if 0x1 goto @1A6A46
end
#org @1A6A05
sound 0x2
checkflag 0x834
if 0x0 call @1A6A34
checkflag 0x834
if 0x1 call @1A6A3D
msgbox @1A50BE MSG_KEEPOPEN
special 0x3C
waitstate
setvar 0x8004 0x1B
special 0x17D
goto @1A6998
#org @1A69F0
sound 0x2
msgbox @1A50DD MSG_KEEPOPEN
special 0xFA
waitstate
goto @1A6998
#org @1A6A7A
checkflag 0x829
if 0x0 goto @1A6A46
sound 0x2
msgbox @1A5BC6 MSG_KEEPOPEN
msgbox @1A5C03 MSG_YESNO
compare 0x800D 0x0
if 0x1 goto @1A6AB2
setflag 0x2FF
call @1A73E0
clearflag 0x2FF
goto @1A6AB2
#org @1A6A56
checkflag 0x82C
if 0x0 goto @1A6A46
sound 0x2
setvar 0x8004 0x1F
special 0x17E
special 0x17D
special 0x107
waitstate
special 0x17F
goto @1A69A8
#org @1A6A46
setvar 0x8004 0x0
special 0x190
releaseall
end
#org @1A6A34
msgbox @1A50A7 MSG_KEEPOPEN
return
#org @1A6A3D
msgbox @1A50EF MSG_KEEPOPEN
return
#org @1A6AB2
msgbox @1A5C2E MSG_KEEPOPEN
goto @1A6998
#org @1A73E0
setvar 0x8004 0x1F
special 0x17E
special 0x17D
setvar 0x8004 0x0
special2 0x800D 0xD4
copyvar 0x8008 0x8005
copyvar 0x8009 0x8006
copyvar 0x800A 0x800D
buffernumber 0x0 0x8008
buffernumber 0x1 0x8009
msgbox @1A6CA3 MSG_KEEPOPEN
checkflag 0x2FF
if 0x0 call @1A746D
call @1A73B6
compare 0x800A 0x0
if 0x1 goto @1A748F
setvar 0x8004 0x1
special2 0x800D 0xD4
copyvar 0x8008 0x8005
copyvar 0x8009 0x8006
buffernumber 0x0 0x8008
buffernumber 0x1 0x8009
msgbox @1A71AA MSG_KEEPOPEN
special2 0x800D 0x1B0
compare 0x800D 0x0
if 0x1 goto @1A7470
compare 0x800D 0x1
if 0x1 goto @1A747E
end
#org @1A746D
textcolor 0x0
return
#org @1A73B6
copyvar 0x8004 0x8009
special 0xD5
waitmsg
compare 0x800D 0x0
if 0x1 call @1A73D8
compare 0x800D 0x1
if 0x1 call @1A73DC
waitfanfare
waitkeypress
return
#org @1A748F
special 0x17F
return
#org @1A7470
msgbox @1A71EE MSG_KEEPOPEN
goto @1A748F
#org @1A747E
setflag 0x2F4
msgbox @1A722F MSG_KEEPOPEN
goto @1A748F
#org @1A73D8
fanfare 0x13D
return
#org @1A73DC
fanfare 0x103
return
#org @1A5075
= [black_fr]Sistema di memoria remota\nmodello Porygon2.
#org @1A1390
= [black_fr]Servizio non disponibile.
#org @1A508A
= [black_fr]A quale PC vuoi accedere?
#org @1A50BE
= [black_fr]Sistema di deposito Pokémon,\naperto.
#org @1A50DD
= [black_fr]PC di [PLAYER], aperto.
#org @1A5BC6
= [black_fr]PC del Prof. Oak, aperto.
#org @1A5C03
= [black_fr]Vuoi valutare i progressi\ndel tuo Pokédex?
#org @1A50A7
= [black_fr]PC di ???, aperto.
#org @1A50EF
= [black_fr]PC di Bill, aperto.
#org @1A5C2E
= [black_fr]PC del Prof. Oak, chiuso.
#org @1A6CA3
= [black_fr]Hai incontrato [buffer1] Pokémon\ne ne hai catturati [buffer2]!
#org @1A71AA
= [black_fr]Nel Dex nazionale ne hai visti\n[buffer1] e catturati [buffer2]!
#org @1A71EE
= [black_fr]Non vedo l'ora di vedere\nil Pokédex nazionale completo!
#org @1A722F
= [black_fr]Hai finalmente completato\nil Pokédex nazionale!\lÈ fantastico!