diff options
author | tom-overton <tom.overton@outlook.com> | 2021-04-22 04:59:05 -0700 |
---|---|---|
committer | tom-overton <tom.overton@outlook.com> | 2021-04-22 04:59:05 -0700 |
commit | 81e60b99a79fa046f9c8375297dd2c7bd2e8f0a9 (patch) | |
tree | a019fda95fd063505add0d123125632e37d648bb | |
parent | f712c2804e790f0488acd4ecaba5902e24f4f0d5 (diff) |
R/S: Randomize the first Poochyena encounter
-rw-r--r-- | asm/hardcoded_statics/rs_firstbattle.asm | 53 | ||||
-rwxr-xr-x | src/com/dabomstew/pkrandom/config/gen3_offsets.ini | 8 | ||||
-rw-r--r-- | src/com/dabomstew/pkrandom/patches/hardcoded_statics/rs_firstbattle.ips | bin | 0 -> 104 bytes | |||
-rwxr-xr-x | src/com/dabomstew/pkrandom/romhandlers/Gen3RomHandler.java | 8 |
4 files changed, 65 insertions, 4 deletions
diff --git a/asm/hardcoded_statics/rs_firstbattle.asm b/asm/hardcoded_statics/rs_firstbattle.asm new file mode 100644 index 0000000..b3c3e60 --- /dev/null +++ b/asm/hardcoded_statics/rs_firstbattle.asm @@ -0,0 +1,53 @@ + .gba + .thumb + .open "pokeruby.gba", "pokeruby_firstbattle.gba", 0x08000000 + + SET_UP_BATTLE_VARS_AND_BIRCH_POOCHYENA_HOOK_ADDR equ 0x0800B8EA + SET_UP_BATTLE_VARS_AND_BIRCH_POOCHYENA_CONTINUED equ 0x0800B90E + CREATE_MON equ 0x0803A798 + SET_MON_DATA equ 0x0803D1FC + NEW_SUBR_ADDR equ 0x08FE0000 + + ; Hook that jumps to our new subroutine + .org SET_UP_BATTLE_VARS_AND_BIRCH_POOCHYENA_HOOK_ADDR + bl org() + 6 + b SET_UP_BATTLE_VARS_AND_BIRCH_POOCHYENA_CONTINUED + ldr r2,=#(NEW_SUBR_ADDR + 1) + bx r2 + .pool + + ; New subroutine that can call CreateMon and SetMonData with a pc-relative loaded constant + ; Note that these functions are out of range of using bl, so we call them with an alternate method + .org NEW_SUBR_ADDR + .area 72 + + push { r4-r6, lr } + sub sp, #0x14 + ldr r4,=#0x030045C0 + ldr r1,=#0x11E ; Poochyena + mov r2, #0x2 ; Level 2 + mov r5, #0x0 + str r5, [sp] + str r5, [sp, #0x4] + str r5, [sp, #0x8] + str r5, [sp, #0xC] + add r0, r4, #0x0 + mov r3, #0x20 + bl org() + 6 + b org() + 6 + ldr r6,=#(CREATE_MON + 1) + bx r6 + str r5, [sp, #0x10] + add r0, r4, #0x0 + mov r1, #0xC + add r2, sp, #0x10 + bl org() + 6 + b org() + 6 + ldr r6,=#(SET_MON_DATA + 1) + bx r6 + add sp, #0x14 + pop { r4-r6, pc } + .pool + .endarea + + .close
\ No newline at end of file diff --git a/src/com/dabomstew/pkrandom/config/gen3_offsets.ini b/src/com/dabomstew/pkrandom/config/gen3_offsets.ini index ca1a58e..6145ef0 100755 --- a/src/com/dabomstew/pkrandom/config/gen3_offsets.ini +++ b/src/com/dabomstew/pkrandom/config/gen3_offsets.ini @@ -66,6 +66,9 @@ StaticPokemon{}={Species=[0x14E79A]} // Wynaut Egg StaticPokemon{}={Species=[0x15AAAF, 0x15AABF], Level=[0x15AAB1]} // Beldum StaticPokemon{}={Species=[0x163D99], Level=[0x163D9B]} // Castform StaticEggPokemonOffsets=[15] +StaticFirstBattleTweak=hardcoded_statics/rs_firstbattle +StaticFirstBattleSpeciesOffset=0xFE003C +StaticFirstBattleLevelOffset=0xFE0008 TMText[]=[3,15,0,1,0x70,The TM I handed you contains [move].] TMText[]=[4,14,0,1,0x74,TATE: That TM04 contains... LIZA: [move]!\pTATE: It’s a move that’s perfect... LIZA: For any POKéMON!] TMText[]=[5,0,29,12,0x0D,All my POKéMON does is [move]... No one dares to come near me...\pSigh... If you would, please take this TM away...] @@ -129,6 +132,7 @@ StaticPokemon{}={Species=[0x1A053E, 0x1A0545], Level=[0x1A0540]} // Electrode 2 StaticPokemon{}={Species=[0x14E7BA]} // Wynaut Egg StaticPokemon{}={Species=[0x15AACF, 0x15AADF], Level=[0x15AAD1]} // Beldum StaticPokemon{}={Species=[0x163DB9], Level=[0x163DBB]} // Castform +StaticFirstBattleTweak=hardcoded_statics/rs_firstbattle [Ruby (U/E) 1.2] Game=AXVE @@ -137,6 +141,7 @@ Type=Ruby CopyStaticPokemon=1 CopyFrom=Ruby (E) InstantTextTweak=instant_text/ruby_12_instant_text +StaticFirstBattleTweak=hardcoded_statics/rs_firstbattle [Sapphire (U)] Game=AXPE @@ -182,6 +187,7 @@ StaticPokemon{}={Species=[0x14E72E]} // Wynaut Egg StaticPokemon{}={Species=[0x15AA3F, 0x15AA4F], Level=[0x15AA41]} // Beldum StaticPokemon{}={Species=[0x163D29], Level=[0x163D2B]} // Castform MainGameLegendaries=[382] +StaticFirstBattleTweak=hardcoded_statics/rs_firstbattle [Sapphire (E)] Game=AXPE @@ -229,6 +235,7 @@ StaticPokemon{}={Species=[0x1A04CE, 0x1A04D5], Level=[0x1A04D0]} // Electrode 2 StaticPokemon{}={Species=[0x14E74E]} // Wynaut Egg StaticPokemon{}={Species=[0x15AA5F, 0x15AA6F], Level=[0x15AA61]} // Beldum StaticPokemon{}={Species=[0x163D49], Level=[0x163D4B]} // Castform +StaticFirstBattleTweak=hardcoded_statics/rs_firstbattle [Sapphire (U/E) 1.2] Game=AXPE @@ -237,6 +244,7 @@ Type=Sapp CopyStaticPokemon=1 CopyFrom=Sapphire (E) InstantTextTweak=instant_text/sapphire_12_instant_text +StaticFirstBattleTweak=hardcoded_statics/rs_firstbattle [Emerald (U)] Game=BPEE diff --git a/src/com/dabomstew/pkrandom/patches/hardcoded_statics/rs_firstbattle.ips b/src/com/dabomstew/pkrandom/patches/hardcoded_statics/rs_firstbattle.ips Binary files differnew file mode 100644 index 0000000..4d9fd8c --- /dev/null +++ b/src/com/dabomstew/pkrandom/patches/hardcoded_statics/rs_firstbattle.ips diff --git a/src/com/dabomstew/pkrandom/romhandlers/Gen3RomHandler.java b/src/com/dabomstew/pkrandom/romhandlers/Gen3RomHandler.java index c5900f0..8321297 100755 --- a/src/com/dabomstew/pkrandom/romhandlers/Gen3RomHandler.java +++ b/src/com/dabomstew/pkrandom/romhandlers/Gen3RomHandler.java @@ -1765,8 +1765,8 @@ public class Gen3RomHandler extends AbstractGBRomHandler { statics.add(se);
}
- // If it's Emerald, read in and randomize the static starting Zigzagoon fight
- if (romEntry.romType == Gen3Constants.RomType_Em && romEntry.codeTweaks.get("StaticFirstBattleTweak") != null) {
+ // If it's RSE, read in and randomize the static starting Poochyena/Zigzagoon fight
+ if (romEntry.romType != Gen3Constants.RomType_FRLG && romEntry.codeTweaks.get("StaticFirstBattleTweak") != null) {
int startingSpeciesOffset = romEntry.getValue("StaticFirstBattleSpeciesOffset");
int species = readWord(startingSpeciesOffset);
if (species == 0xFFFF) {
@@ -1797,7 +1797,7 @@ public class Gen3RomHandler extends AbstractGBRomHandler { List<StaticPokemon> staticsHere = romEntry.staticPokemon;
int hardcodedStaticSize = 0;
- if (romEntry.romType == Gen3Constants.RomType_Em && romEntry.codeTweaks.get("StaticFirstBattleTweak") != null) {
+ if (romEntry.romType != Gen3Constants.RomType_FRLG && romEntry.codeTweaks.get("StaticFirstBattleTweak") != null) {
hardcodedStaticSize = 1;
}
if (staticPokemon.size() != staticsHere.size() + hardcodedStaticSize) {
@@ -1809,7 +1809,7 @@ public class Gen3RomHandler extends AbstractGBRomHandler { staticsHere.get(i).setLevel(rom, staticPokemon.get(i).level, 0);
}
- if (romEntry.romType == Gen3Constants.RomType_Em && romEntry.codeTweaks.get("StaticFirstBattleTweak") != null) {
+ if (romEntry.romType != Gen3Constants.RomType_FRLG && romEntry.codeTweaks.get("StaticFirstBattleTweak") != null) {
StaticEncounter hardcodedStatic = staticPokemon.get(staticPokemon.size() - 1);
int startingSpeciesOffset = romEntry.getValue("StaticFirstBattleSpeciesOffset");
writeWord(startingSpeciesOffset, pokedexToInternal[hardcodedStatic.pkmn.number]);
|