15-01-2023, 02:01 AM
(Questo messaggio è stato modificato l'ultima volta il: 28-01-2023, 04:42 PM da Manuxn.)
Ciao a tutti,
in questa guida andrò a spiegare come rendere immuni i Pokémon di tipo Elettro alla paralisi e i Pokémon di tipo Erba a mosse e abilità contenenti spore o polveri, come avviene nei giochi ufficiali a partire dalla sesta generazione.
La guida è valida solo per Rosso Fuoco, vedremo sia il metodo diretto tramite pokefirered disassembly sia il metodo indiretto tramite binary hacking per le ROM di Fire Red (U) e Rosso Fuoco (I).
Le parti evidenziate in arancione sono quelle che differiscono dall’originale per il tipo elettro, quelle in verde per il tipo erba.
1. Rendere immuni i Pokémon Elettro da mosse paralizzanti / i Pokémon Erba da mosse spore e polveri:
Andate in data/battle_scripts_1.s e modificate le parti seguenti:
Aprite la ROM con un hex editor ed inserite le seguenti parti di codice in uno spazio libero. Segnatevi per ognuna l’offset di inserimento e convertitelo nel corrispettivo pointer (offset 0xXXYYZZ -> pointer ZZ YY XX). Fate attenzione ad inserire tutti i pointers correttamente.
BattleScript_CheckGrassImmunity:
BattleScript_SleepGrassImmunity:
BattleScript_SpeedDownGrassImmunity:
BattleScript_PoisonGrassImmunity:
BattleScript_ParalyzeGrassImmunity:
BattleScript_EffectSleep:
BattleScript_EffectSpeedDown2:
BattleScript_EffectPoison:
BattleScript_EffectParalyze:
Aprite la ROM con un hex editor ed inserite le seguenti parti di codice in uno spazio libero. Segnatevi per ognuna l’offset di inserimento e convertitelo nel corrispettivo pointer (offset 0xXXYYZZ -> pointer ZZ YY XX). Fate attenzione ad inserire tutti i pointers correttamente.
BattleScript_CheckGrassImmunity:
BattleScript_SleepGrassImmunity:
BattleScript_SpeedDownGrassImmunity:
BattleScript_PoisonGrassImmunity:
BattleScript_ParalyzeGrassImmunity:
BattleScript_EffectSleep:
BattleScript_EffectSpeedDown2:
BattleScript_EffectPoison:
BattleScript_EffectParalyze:
2. Evitare che la CPU usi mosse paralizzanti sui Pokémon Elettro / mosse spore o polveri sui Pokémon Erba:
Andate in data/battle_ai_scripts.s e modificate le parti seguenti:
Aprite la ROM con un hex editor ed inserite le seguenti parti di codice in uno spazio libero. Segnatevi per ognuna l’offset di inserimento e convertitelo nel corrispettivo pointer (offset 0xXXYYZZ -> pointer ZZ YY XX). Fate attenzione ad inserire tutti i pointers correttamente.
AI_CBM_GrassImmunity:
AI_CBM_Sleep:
AI_CBM_SpeedDown:
Andate all'offset 0x1D9E07 e sostituite il pointer 81 A0 1D 08 con il pointer di AI_CBM_SpeedDown.
AI_CBM_Poison:
Andate all'offset 0x1D9E2B e sostituite il pointer 5B A1 1D 08 con il pointer di AI_CBM_Poison.
AI_CBM_Paralyze:
Aprite la ROM con un hex editor ed inserite le seguenti parti di codice in uno spazio libero. Segnatevi per ognuna l’offset di inserimento e convertitelo nel corrispettivo pointer (offset 0xXXYYZZ -> pointer ZZ YY XX). Fate attenzione ad inserire tutti i pointers correttamente.
AI_CBM_GrassImmunity:
AI_CBM_Sleep:
AI_CBM_SpeedDown:
Andate all'offset 0x1D7273 e sostituite il pointer ED 74 1D 08 con il pointer di AI_CBM_SpeedDown.
AI_CBM_Poison:
Andate all'offset 0x1D7297 e sostituite il pointer C7 75 1D 08 con il pointer di AI_CBM_Poison.
AI_CBM_Paralyze:
3. Rendere immuni i Pokémon Elettro da abilità che possono causare paralisi come Sincronismo, Statico e Spargispora / i Pokémon Erba da Spargispora:
Andate in src/battle_script_commands.c e modificate le parti seguenti:
Andate in src/battle_util.c e modificate le parti seguenti:
&& (Random() % 10) == 0)
con
&& (Random() % 3) == 0
STATUS1_PARALYSIS:
Aprite la ROM con un hex editor ed inserite in uno spazio libero i seguenti byte (offset 0xXXYYZZ):
ABILITY_EFFECT_SPORE:
Aprite la ROM con un hex editor ed inserite in uno spazio libero i seguenti byte (offset 0xXXYYZZ):
Andate all'offset 0x1ABF4 e sostituite 8C 3E 02 02 con ZZ+1 YY XX 08
Nota: Se volete cambiare la percentuale di efficacia di Spargispora da 10% a 30% dovete andare all’offset 0x1AB9C e cambiare il byte da 0x0A a 0x03.
STATUS1_PARALYSIS:
Aprite la ROM con un hex editor ed inserite in uno spazio libero i seguenti byte (offset 0xXXYYZZ):
ABILITY_EFFECT_SPORE:
Aprite la ROM con un hex editor ed inserite in uno spazio libero i seguenti byte (offset 0xXXYYZZ):
Andate all'offset 0x1AB78 e sostituite 8C 3E 02 02 con ZZ+1 YY XX 08
Nota: Se volete cambiare la percentuale di efficacia di Spargispora da 10% a 30% dovete andare all’offset 0x1AB20 e cambiare il byte da 0x0A a 0x03.
Fine, se tutto è andato bene nessun Pokémon elettro potrà più essere paralizzato e gli avversari non proveranno neanche a farlo. Discorso analogo per i Pokémon erba con spore e polveri. Detto questo, se trovate errori o dei bug segnalateli pure qui sotto nei commenti.
Buon Hacking!
in questa guida andrò a spiegare come rendere immuni i Pokémon di tipo Elettro alla paralisi e i Pokémon di tipo Erba a mosse e abilità contenenti spore o polveri, come avviene nei giochi ufficiali a partire dalla sesta generazione.
La guida è valida solo per Rosso Fuoco, vedremo sia il metodo diretto tramite pokefirered disassembly sia il metodo indiretto tramite binary hacking per le ROM di Fire Red (U) e Rosso Fuoco (I).
Le parti evidenziate in arancione sono quelle che differiscono dall’originale per il tipo elettro, quelle in verde per il tipo erba.
1. Rendere immuni i Pokémon Elettro da mosse paralizzanti / i Pokémon Erba da mosse spore e polveri:
Pokefirered-> (Clicca per visualizzare)
Andate in data/battle_scripts_1.s e modificate le parti seguenti:
Citazione:BattleScript_EffectSleep::
attackcanceler
attackstring
ppreduce
jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
jumpifstatus BS_TARGET, STATUS1_SLEEP, BattleScript_AlreadyAsleep
jumpifcantmakeasleep BattleScript_CantMakeAsleep
call BattleScript_SleepGrassImmunity
jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed
accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
attackanimation
waitanimation
setmoveeffect MOVE_EFFECT_SLEEP
seteffectprimary
goto BattleScript_MoveEnd
BattleScript_SleepGrassImmunity::
jumpifmove MOVE_SPORE, BattleScript_CheckGrassImmunity
jumpifmove MOVE_SLEEP_POWDER, BattleScript_CheckGrassImmunity
return
BattleScript_EffectSpeedDown2::
setstatchanger STAT_SPEED, 2, TRUE
jumpiftype BS_TARGET, TYPE_GRASS, SpeedDownGrassImmunity
goto BattleScript_EffectStatDown
BattleScript_SpeedDownGrassImmunity::
jumpifnotmove MOVE_COTTON_SPORE, BattleScript_EffectStatDown
attackcanceler
attackstring
ppreduce
goto BattleScript_NotAffected
BattleScript_EffectPoison::
attackcanceler
attackstring
ppreduce
jumpifability BS_TARGET, ABILITY_IMMUNITY, BattleScript_ImmunityProtected
jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
jumpifstatus BS_TARGET, STATUS1_POISON, BattleScript_AlreadyPoisoned
jumpifstatus BS_TARGET, STATUS1_TOXIC_POISON, BattleScript_AlreadyPoisoned
jumpiftype BS_TARGET, TYPE_POISON, BattleScript_NotAffected
jumpiftype BS_TARGET, TYPE_STEEL, BattleScript_NotAffected
call BattleScript_PoisonGrassImmunity
jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed
accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
attackanimation
waitanimation
setmoveeffect MOVE_EFFECT_POISON
seteffectprimary
resultmessage
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
BattleScript_PoisonGrassImmunity::
jumpifmove MOVE_POISON_POWDER, BattleScript_CheckGrassImmunity
return
BattleScript_EffectParalyze::
attackcanceler
attackstring
ppreduce
jumpifability BS_TARGET, ABILITY_LIMBER, BattleScript_LimberProtected
jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
typecalc
jumpifmovehadnoeffect BattleScript_ButItFailed
jumpifstatus BS_TARGET, STATUS1_PARALYSIS, BattleScript_AlreadyParalyzed
jumpiftype BS_TARGET, TYPE_ELECTRIC, BattleScript_NotAffected
call BattleScript_ParalyzeGrassImmunity
jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed
accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
attackanimation
waitanimation
setmoveeffect MOVE_EFFECT_PARALYSIS
seteffectprimary
resultmessage
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
BattleScript_ParalyzeGrassImmunity::
jumpifmove MOVE_STUN_SPORE, BattleScript_CheckGrassImmunity
return
BattleScript_CheckGrassImmunity:
jumpiftype BS_TARGET, TYPE_GRASS, BattleScript_NotAffected
return
Fire Red (U) -> (Clicca per visualizzare)
Aprite la ROM con un hex editor ed inserite le seguenti parti di codice in uno spazio libero. Segnatevi per ognuna l’offset di inserimento e convertitelo nel corrispettivo pointer (offset 0xXXYYZZ -> pointer ZZ YY XX). Fate attenzione ad inserire tutti i pointers correttamente.
BattleScript_CheckGrassImmunity:
Citazione:22 00 0C 04 7E 1D 08 3C
BattleScript_SleepGrassImmunity:
Citazione:2A 00 4A 3D 02 02 93 00 ZZ YY XX 08 2A 00 4A 3D 02 02 4F 00 ZZ YY XX 08 3C (inserite il pointer di BattleScript_CheckGrassImmunity)
BattleScript_SpeedDownGrassImmunity:
Citazione:2A 01 4A 3D 02 02 B2 00 13 6C 1D 08 00 02 03 28 04 7E 1D 08
BattleScript_PoisonGrassImmunity:
Citazione:2A 00 4A 3D 02 02 4D 00 ZZ YY XX 08 3C (inserite il pointer di BattleScript_CheckGrassImmunity)
BattleScript_ParalyzeGrassImmunity:
Citazione:2A 00 4A 3D 02 02 4E 00 ZZ YY XX 08 3C (inserite il pointer di BattleScript_CheckGrassImmunity)
BattleScript_EffectSleep:
Citazione:00 02 03 1D 00 00 00 00 01 F2 7D 1D 08 1C 00 07 00 00 00 B0 69 1D 08 84 CC 69 1D 08 41 ZZ YY XX 08 1C 00 FF 00 00 00 F2 7D 1D 08 01 F2 7D 1D 08 00 00 1F 00 20 00 39 8B 1D 08 09 0A 2E 85 3E 02 02 01 16 28 4E 69 1D 08 (inserite il pointer di BattleScript_SleepGrassImmunity)Andate all'offset 0x1D65AC e sostituite il pointer 6D 69 1D 08 con il pointer di BattleScript_EffectSleep.
BattleScript_EffectSpeedDown2:
Citazione:2E DE 3F 02 02 A3 22 00 0C ZZ YY XX 08 28 13 6C 1D 08 (inserite il pointer di BattleScript_SpeedDownGrassImmunity)Andate all'offset 0x1D6698 e sostituite il pointer 58 71 1D 08 con il pointer di BattleScript_EffectSpeedDown2.
BattleScript_EffectPoison:
Citazione:00 02 03 1E 00 11 4F 6E 1D 08 1D 00 00 00 00 01 F2 7D 1D 08 1C 00 08 00 00 00 41 6E 1D 08 1C 00 80 00 00 00 41 6E 1D 08 22 00 03 04 7E 1D 08 22 00 08 04 7E 1D 08 41 ZZ YY XX 08 1C 00 FF 00 00 00 F2 7D 1D 08 01 F2 7D 1D 08 00 00 1F 00 20 00 39 8B 1D 08 09 0A 2E 85 3E 02 02 02 16 0F 12 40 00 28 4E 69 1D 08 (inserite il pointer di BattleScript_PoisonGrassImmunity)Andate all'offset 0x1D66B0 e sostituite il pointer 81 71 1D 08 con il pointer di BattleScript_EffectPoison.
BattleScript_EffectParalyze:
Citazione:00 02 03 1E 00 07 45 72 1D 08 1D 00 00 00 00 01 F2 7D 1D 08 06 29 04 CC 3D 02 02 29 F2 7D 1D 08 1C 00 40 00 00 00 37 72 1D 08 22 00 0D 04 7E 1D 08 41 ZZ YY XX 08 1C 00 FF 00 00 00 F2 7D 1D 08 01 F2 7D 1D 08 00 00 1F 00 20 00 39 8B 1D 08 09 0A 2E 85 3E 02 02 05 16 0F 12 40 00 28 4E 69 1D 08 (inserite il pointer di BattleScript_ParalyzeGrassImmunity)Andate all'offset 0x1D66B4 e sostituite il pointer E2 71 1D 08 con il pointer di BattleScript_EffectParalyze.
Rosso Fuoco (I) -> (Clicca per visualizzare)
Aprite la ROM con un hex editor ed inserite le seguenti parti di codice in uno spazio libero. Segnatevi per ognuna l’offset di inserimento e convertitelo nel corrispettivo pointer (offset 0xXXYYZZ -> pointer ZZ YY XX). Fate attenzione ad inserire tutti i pointers correttamente.
BattleScript_CheckGrassImmunity:
Citazione:22 00 0C 68 52 1D 08 3C
BattleScript_SleepGrassImmunity:
Citazione:2A 00 4A 3D 02 02 93 00 ZZ YY XX 08 2A 00 4A 3D 02 02 4F 00 ZZ YY XX 08 3C (inserite il pointer di BattleScript_CheckGrassImmunity)
BattleScript_SpeedDownGrassImmunity:
Citazione:2A 01 4A 3D 02 02 B2 00 77 40 1D 00 02 03 28 68 52 1D 08
BattleScript_PoisonGrassImmunity:
Citazione:2A 00 4A 3D 02 02 4D 00 ZZ YY XX 08 3C (inserite il pointer di BattleScript_CheckGrassImmunity)
BattleScript_ParalyzeGrassImmunity:
Citazione:2A 00 4A 3D 02 02 4E 00 ZZ YY XX 08 3C (inserite il pointer di BattleScript_CheckGrassImmunity)
BattleScript_EffectSleep:
Citazione:00 02 03 1D 00 00 00 00 01 56 52 1D 08 1C 00 07 00 00 00 14 3E 1D 08 84 30 3E 1D 08 41 ZZ YY XX 08 1C 00 FF 00 00 00 56 52 1D 08 01 56 52 1D 08 00 00 1F 00 20 00 A3 5F 1D 08 09 0A 2E 85 3E 02 02 01 16 28 B2 3D 1D 08 (inserite il pointer di BattleScript_SleepGrassImmunity)Andate all'offset 0x1D3A10 e sostituite il pointer D1 3D 1D 08 con il pointer di BattleScript_EffectSleep.
BattleScript_EffectSpeedDown2:
Citazione:2E DE 3F 02 02 A3 22 00 0C ZZ YY XX 08 28 77 40 1D 08 (inserite il pointer di BattleScript_SpeedDownGrassImmunity)Andate all'offset 0x1D3AFC e sostituite il pointer BC 45 1D 08 con il pointer di BattleScript_EffectSpeedDown2.
BattleScript_EffectPoison:
Citazione:00 02 03 1E 00 11 B3 42 1D 08 1D 00 00 00 00 01 56 52 1D 08 1C 00 08 00 00 00 A5 42 1D 08 1C 00 80 00 00 00 A5 42 1D 08 22 00 03 68 52 1D 08 22 00 08 68 52 1D 08 41 ZZ YY XX 08 1C 00 FF 00 00 00 56 52 1D 08 01 56 52 1D 08 00 00 1F 00 20 00 A3 5F 1D 08 09 0A 2E 85 3E 02 02 02 16 0F 12 40 00 28 B2 3D 1D 08 (inserite il pointer di BattleScript_PoisonGrassImmunity)Andate all'offset 0x1D3B14 e sostituite il pointer E5 45 1D 08 con il pointer di BattleScript_EffectPoison.
BattleScript_EffectParalyze:
Citazione:00 02 03 1E 00 07 A9 46 1D 08 1D 00 00 00 00 01 56 52 1D 08 06 29 04 CC 3D 02 02 29 56 52 1D 08 1C 00 40 00 00 00 9B 46 1D 08 22 00 0D 68 52 1D 08 41 ZZ YY XX 08 1C 00 FF 00 00 00 56 52 1D 08 01 56 52 1D 08 00 00 1F 00 20 00 A3 5F 1D 08 09 0A 2E 85 3E 02 02 05 16 0F 12 40 00 28 B2 3D 1D 08 (inserite il pointer di BattleScript_ParalyzeGrassImmunity)Andate all'offset 0x1D3B18 e sostituite il pointer 46 46 1D 08 con il pointer di BattleScript_EffectParalyze.
2. Evitare che la CPU usi mosse paralizzanti sui Pokémon Elettro / mosse spore o polveri sui Pokémon Erba:
Pokefirered-> (Clicca per visualizzare)
Andate in data/battle_ai_scripts.s e modificate le parti seguenti:
Citazione:AI_CBM_Sleep::
get_ability AI_TARGET
if_equal ABILITY_INSOMNIA, Score_Minus10
if_equal ABILITY_VITAL_SPIRIT, Score_Minus10
if_status AI_TARGET, STATUS1_ANY, Score_Minus10
@ if_side_affecting AI_TARGET, SIDE_STATUS_SAFEGUARD, Score_Minus10 @ Improvement in Emerald
if_move MOVE_SPORE, AI_CBM_GrassImmunity
if_move MOVE_SLEEP_POWDER, AI_CBM_GrassImmunity
end
AI_CBM_SpeedDown::
if_stat_level_equal AI_TARGET, STAT_SPEED, 0, Score_Minus10
@ get_ability AI_TARGET @ Improvement in Emerald
@ if_equal ABILITY_SPEED_BOOST, Score_Minus10
if_not_move MOVE_COTTON_SPORE, CheckIfAbilityBlocksStatChange
get_target_type1
if_equal TYPE_GRASS, Score_Minus10
get_target_type2
if_equal TYPE_GRASS, Score_Minus10
goto CheckIfAbilityBlocksStatChange
AI_CBM_Poison::
get_target_type1
if_equal TYPE_STEEL, Score_Minus10
if_equal TYPE_POISON, Score_Minus10
get_target_type2
if_equal TYPE_STEEL, Score_Minus10
if_equal TYPE_POISON, Score_Minus10
get_ability AI_TARGET
if_equal ABILITY_IMMUNITY, Score_Minus10
if_status AI_TARGET, STATUS1_ANY, Score_Minus10
@ if_side_affecting AI_TARGET, SIDE_STATUS_SAFEGUARD, Score_Minus10 @ Improvement in Emerald
if_move MOVE_POISON_POWDER, AI_CBM_GrassImmunity
end
AI_CBM_Paralyze::
get_target_type1
if_equal TYPE_ELECTRIC, Score_Minus10
get_target_type2
if_equal TYPE_ELECTRIC, Score_Minus10
if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10
get_ability AI_TARGET
if_equal ABILITY_LIMBER, Score_Minus10
if_status AI_TARGET, STATUS1_ANY, Score_Minus10
@ if_side_affecting AI_TARGET, SIDE_STATUS_SAFEGUARD, Score_Minus10 @ Improvement in Emerald
if_move MOVE_STUN_SPORE, AI_CBM_GrassImmunity
end
AI_CBM_GrassImmunity::
get_target_type1
if_equal TYPE_GRASS, Score_Minus10
get_target_type2
if_equal TYPE_GRASS, Score_Minus10
end
Fire Red (U) -> (Clicca per visualizzare)
Aprite la ROM con un hex editor ed inserite le seguenti parti di codice in uno spazio libero. Segnatevi per ognuna l’offset di inserimento e convertitelo nel corrispettivo pointer (offset 0xXXYYZZ -> pointer ZZ YY XX). Fate attenzione ad inserire tutti i pointers correttamente.
AI_CBM_GrassImmunity:
Citazione:22 00 13 0C 33 A4 1D 08 22 02 13 0C 33 A4 1D 08 5A
AI_CBM_Sleep:
Citazione:2F 00 13 0F 33 A4 1D 08 13 48 33 A4 1D 08 09 00 FF 00 00 00 33 A4 1D 08 19 93 00 ZZ YY XX 08 19 4F 00 ZZ YY XX 08 5A (inserite il pointer di AI_CBM_GrassImmunity)Andate all'offset 0x1D9D29 e sostituite il pointer B6 9F 1D 08 con il pointer di AI_CBM_Sleep.
AI_CBM_SpeedDown:
Citazione:3B 00 03 00 33 A4 1D 08 1A B2 00 C5 A0 1D 08 22 00 13 0C 33 A4 1D 08 22 02 13 0C 33 A4 1D 08 59 C5 A0 1D 08Andate all'offset 0x1D9D71 e sostituite il pointer 81 A0 1D 08 con il pointer di AI_CBM_SpeedDown.
Andate all'offset 0x1D9E07 e sostituite il pointer 81 A0 1D 08 con il pointer di AI_CBM_SpeedDown.
AI_CBM_Poison:
Citazione:22 00 13 08 33 A4 1D 08 13 03 33 A4 1D 08 22 02 13 08 33 A4 1D 08 13 03 33 A4 1D 08 2F 00 13 11 33 A4 1D 08 09 00 FF 00 00 00 33 A4 1D 08 19 4D 00 ZZ YY XX 08 5A (inserite il pointer di AI_CBM_GrassImmunity)Andate all'offset 0x1D9DA1 e sostituite il pointer 5B A1 1D 08 con il pointer di AI_CBM_Poison.
Andate all'offset 0x1D9E2B e sostituite il pointer 5B A1 1D 08 con il pointer di AI_CBM_Poison.
AI_CBM_Paralyze:
Citazione:22 00 13 0D 33 A4 1D 08 22 02 13 0D 33 A4 1D 08 31 00 33 A4 1D 08 2F 00 13 07 33 A4 1D 08 09 00 FF 00 00 00 33 A4 1D 08 19 4E 00 ZZ YY XX 08 5A (inserite il pointer di A AI_CBM_GrassImmunity)Andate all'offset 0x1D9E31 e sostituite il pointer 00 A2 1D 08 con il pointer di AI_CBM_Paralyze.
Rosso Fuoco (I) -> (Clicca per visualizzare)
Aprite la ROM con un hex editor ed inserite le seguenti parti di codice in uno spazio libero. Segnatevi per ognuna l’offset di inserimento e convertitelo nel corrispettivo pointer (offset 0xXXYYZZ -> pointer ZZ YY XX). Fate attenzione ad inserire tutti i pointers correttamente.
AI_CBM_GrassImmunity:
Citazione:22 00 13 0C 9F 78 1D 08 22 02 13 0C 9F 78 1D 08 5A
AI_CBM_Sleep:
Citazione:2F 00 13 0F 9F 78 1D 08 13 48 9F 78 1D 08 09 00 FF 00 00 00 9F 78 1D 08 19 93 00 ZZ YY XX 08 19 4F 00 ZZ YY XX 08 5A (inserite il pointer di AI_CBM_GrassImmunity)Andate all'offset 0x1D7195 e sostituite il pointer 22 74 1D 08 con il pointer di AI_CBM_Sleep.
AI_CBM_SpeedDown:
Citazione:3B 00 03 00 9F 78 1D 08 1A B2 00 31 75 1D 08 22 00 13 0C 9F 78 1D 08 22 02 13 0C 9F 78 1D 08 59 31 75 1D 08Andate all'offset 0x1D71DD e sostituite il pointer ED 74 1D 08 con il pointer di AI_CBM_SpeedDown.
Andate all'offset 0x1D7273 e sostituite il pointer ED 74 1D 08 con il pointer di AI_CBM_SpeedDown.
AI_CBM_Poison:
Citazione:22 00 13 08 9F 78 1D 08 13 03 9F 78 1D 08 22 02 13 08 9F 78 1D 08 13 03 9F 78 1D 08 2F 00 13 11 9F 78 1D 08 09 00 FF 00 00 00 9F 78 1D 08 19 4D 00 ZZ YY XX 08 5A (inserite il pointer di AI_CBM_GrassImmunity)Andate all'offset 0x1D720D e sostituite il pointer C7 75 1D 08 con il pointer di AI_CBM_Poison.
Andate all'offset 0x1D7297 e sostituite il pointer C7 75 1D 08 con il pointer di AI_CBM_Poison.
AI_CBM_Paralyze:
Citazione:22 00 13 0D 9F 78 1D 08 22 02 13 0D 9F 78 1D 08 31 00 9F 78 1D 08 2F 00 13 07 9F 78 1D 08 09 00 FF 00 00 00 9F 78 1D 08 19 4E 00 ZZ YY XX 08 5A (inserite il pointer di A AI_CBM_GrassImmunity)Andate all'offset 0x1D729D e sostituite il pointer 6C 76 1D 08 con il pointer di AI_CBM_Paralyze.
3. Rendere immuni i Pokémon Elettro da abilità che possono causare paralisi come Sincronismo, Statico e Spargispora / i Pokémon Erba da Spargispora:
Pokefirered-> (Clicca per visualizzare)
Andate in src/battle_script_commands.c e modificate le parti seguenti:
Citazione: case STATUS1_PARALYSIS:
if (gBattleMons[gEffectBattler].ability == ABILITY_LIMBER)
{
if (primary == TRUE || certain == MOVE_EFFECT_CERTAIN)
{
gLastUsedAbility = ABILITY_LIMBER;
RecordAbilityBattle(gEffectBattler, ABILITY_LIMBER);
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_PRLZPrevention;
if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
{
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ABILITY_PREVENTS_ABILITY_STATUS;
gHitMarker &= ~HITMARKER_IGNORE_SAFEGUARD;
}
else
{
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ABILITY_PREVENTS_MOVE_STATUS;
}
return;
}
else
break;
}
if (IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_ELECTRIC)
&& (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
&& (primary == TRUE || certain == MOVE_EFFECT_CERTAIN))
{
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_PRLZPrevention;
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STATUS_HAD_NO_EFFECT;
return;
}
if (IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_ELECTRIC))
break;
if (gBattleMons[gEffectBattler].status1)
break;
statusChanged = TRUE;
break;
Andate in src/battle_util.c e modificate le parti seguenti:
Citazione: case ABILITY_EFFECT_SPORE:Nota: Se volete cambiare la percentuale di efficacia di Spargispora da 10% a 30% dovete sostituire
if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
&& gBattleMons[gBattlerAttacker].hp != 0
&& !IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_GRASS)
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
&& TARGET_TURN_DAMAGED
&& (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)
&& (Random() % 10) == 0)
{
do
{
gBattleCommunication[MOVE_EFFECT_BYTE] = Random() & 3;
} while (gBattleCommunication[MOVE_EFFECT_BYTE] == 0);
if (gBattleCommunication[MOVE_EFFECT_BYTE] == MOVE_EFFECT_BURN)
gBattleCommunication[MOVE_EFFECT_BYTE] += 2; // 5 MOVE_EFFECT_PARALYSIS
gBattleCommunication[MOVE_EFFECT_BYTE] += MOVE_EFFECT_AFFECTS_USER;
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect;
gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
effect++;
}
break;
&& (Random() % 10) == 0)
con
&& (Random() % 3) == 0
Fire Red (U) -> (Clicca per visualizzare)
STATUS1_PARALYSIS:
Aprite la ROM con un hex editor ed inserite in uno spazio libero i seguenti byte (offset 0xXXYYZZ):
Citazione:48 46 01 78 58 20 48 43 42 46 81 18 08 1C 21 30 00 78 0D 28 04 D0 08 1C 22 30 00 78 0D 28 12 D1 19 48 00 68 80 21 89 01 08 40 00 28 0B D0 01 2C 01 D0 80 2D 07 D1 15 4C 20 68 01 30 00 F0 1F F8 13 48 14 49 08 47 4B 46 18 78 58 21 02 1C 4A 43 44 46 11 19 08 1C 21 30 00 78 0D 28 01 D1 09 49 08 47 08 1C 22 30 00 78 0D 28 01 D1 05 49 08 47 58 21 40 46 4C 30 08 18 00 68 07 49 08 47 07 49 08 47 C0 46 71 05 02 08 D0 3D 02 02 74 3D 02 02 2C 94 1D 08 F5 04 02 08 35 04 02 08 21 75 01 08Andate all'offset 0x2042C e sostituite 40 46 4C 30 08 18 00 68 con 00 48 00 47 ZZ+1 YY XX 08
ABILITY_EFFECT_SPORE:
Aprite la ROM con un hex editor ed inserite in uno spazio libero i seguenti byte (offset 0xXXYYZZ):
Citazione:08 49 08 78 0C 28 05 D1 01 31 08 78 0C 28 01 D1 00 F0 05 F8 04 48 11 01 09 18 04 48 00 47 04 4C 20 47 00 00 05 3C 02 02 8C 3E 02 02 49 AB 01 08 AB BB 01 08Andate all'offset 0x1AB44 e sostituite 11 01 con 00 47
Andate all'offset 0x1ABF4 e sostituite 8C 3E 02 02 con ZZ+1 YY XX 08
Nota: Se volete cambiare la percentuale di efficacia di Spargispora da 10% a 30% dovete andare all’offset 0x1AB9C e cambiare il byte da 0x0A a 0x03.
Rosso Fuoco (I) -> (Clicca per visualizzare)
STATUS1_PARALYSIS:
Aprite la ROM con un hex editor ed inserite in uno spazio libero i seguenti byte (offset 0xXXYYZZ):
Citazione:48 46 01 78 58 20 48 43 42 46 81 18 08 1C 21 30 00 78 0D 28 04 D0 08 1C 22 30 00 78 0D 28 12 D1 19 48 00 68 80 21 89 01 08 40 00 28 0B D0 01 2C 01 D0 80 2D 07 D1 15 4C 20 68 01 30 00 F0 1F F8 13 48 14 49 08 47 4B 46 18 78 58 21 02 1C 4A 43 44 46 11 19 08 1C 21 30 00 78 0D 28 01 D1 09 49 08 47 08 1C 22 30 00 78 0D 28 01 D1 05 49 08 47 58 21 40 46 4C 30 08 18 00 68 07 49 08 47 07 49 08 47 C0 46 F5 04 02 08 D0 3D 02 02 74 3D 02 02 96 68 1D 08 79 04 02 08 B9 03 02 08 A5 74 01 08Andate all'offset 0x203B0 e sostituite 40 46 4C 30 08 18 00 68 con 00 48 00 47 ZZ+1 YY XX 08
ABILITY_EFFECT_SPORE:
Aprite la ROM con un hex editor ed inserite in uno spazio libero i seguenti byte (offset 0xXXYYZZ):
Citazione:08 49 08 78 0C 28 05 D1 01 31 08 78 0C 28 01 D1 00 F0 05 F8 04 48 11 01 09 18 04 48 00 47 04 4C 20 47 00 00 05 3C 02 02 8C 3E 02 02 CD AA 01 08 2F BB 01 08Andate all'offset 0x1AAC8 e sostituite 11 01 con 00 47
Andate all'offset 0x1AB78 e sostituite 8C 3E 02 02 con ZZ+1 YY XX 08
Nota: Se volete cambiare la percentuale di efficacia di Spargispora da 10% a 30% dovete andare all’offset 0x1AB20 e cambiare il byte da 0x0A a 0x03.
Fine, se tutto è andato bene nessun Pokémon elettro potrà più essere paralizzato e gli avversari non proveranno neanche a farlo. Discorso analogo per i Pokémon erba con spore e polveri. Detto questo, se trovate errori o dei bug segnalateli pure qui sotto nei commenti.
Buon Hacking!
Il mio progetto Hack ROM:
Le mie guide sul forum:
Achievements Contest 2022:
![[Immagine: Mapper-in-erba.png]](https://i.postimg.cc/R0NwzqMw/Mapper-in-erba.png)
![[Immagine: Tile-vincente.png]](https://i.postimg.cc/g20ZvrL1/Tile-vincente.png)
![[Immagine: Tile-dorato.png]](https://i.postimg.cc/8P4vJLch/Tile-dorato.png)
"Ci sono soltanto due possibili conclusioni: se il risultato conferma l'ipotesi, allora hai appena fatto una misura. Se il risultato è contrario alle ipotesi, allora hai fatto una scoperta."