summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/gbplayer.c2
-rwxr-xr-xsrc/main.c2
-rwxr-xr-xsrc/rom_3219C.c492
3 files changed, 494 insertions, 2 deletions
diff --git a/src/gbplayer.c b/src/gbplayer.c
index 3b74f5b..5e4ad19 100755
--- a/src/gbplayer.c
+++ b/src/gbplayer.c
@@ -303,7 +303,7 @@ void sub_1198(void)
void sub_11B0(int arg0)
{
- if (gUnknown_0200B134.unkCD)
+ if (gUnknown_0200B134[0xCD])
{
gUnknown_02019BF8 = arg0;
gUnknown_02019BFC = 0;
diff --git a/src/main.c b/src/main.c
index fb287b2..62b6b14 100755
--- a/src/main.c
+++ b/src/main.c
@@ -187,7 +187,7 @@ static void InitIntrHandlers(void)
// The number 1103515245 comes from the example implementation of rand and srand
// in the ISO C standard.
-int Random(void)
+u32 Random(void)
{
gMain.rngValue = 1103515245 * gMain.rngValue + 12345;
return gMain.rngValue & 0xFFFF;
diff --git a/src/rom_3219C.c b/src/rom_3219C.c
new file mode 100755
index 0000000..6954fbe
--- /dev/null
+++ b/src/rom_3219C.c
@@ -0,0 +1,492 @@
+#include "global.h"
+#include "main.h"
+#include "constants/species.h"
+
+extern const u16 gWildMonLocations[][2][8];
+
+#ifdef NONMATCHING // can't get the loop in the first if condition
+void sub_3219C(void)
+{
+ s16 i;
+ u32 rand;
+ u16 specialMons[6];
+
+ if (gMain.unk7)
+ {
+
+ gMain.unk7 = 0;
+ rand = gMain.unk4C + gMain.unk50 + Random();
+ rand %= 4;
+ i = 0;
+ while (i < 4)
+ {
+ if (gMain.pokedexFlags[BONUS_SPECIES_START + ((i + rand) % 4)] < 4)
+ i++;
+ else
+ break;
+ }
+
+ gUnknown_020314E0->catchModeSpecies = BONUS_SPECIES_START + ((i + rand) % 4);
+ }
+ else
+ {
+ rand = gMain.unk4C + gMain.unk50 + Random();
+ if (gMain.unk8)
+ rand %= 50;
+ else
+ rand %= 100;
+
+ if (gUnknown_02031520.unk8 < 100)
+ rand = 1;
+
+ if ((rand == 0 && gUnknown_020314E0->unk5F0 > 4) || gUnknown_020314E0->unk12B)
+ {
+ s16 numSpecialMons = 0;
+ gUnknown_020314E0->catchModeSpecies = 0;
+ if (gUnknown_0200B134[SPECIES_AERODACTYL])
+ {
+ specialMons[numSpecialMons++] = SPECIES_AERODACTYL;
+ if (gUnknown_0200B134[SPECIES_AERODACTYL] < 4)
+ gUnknown_020314E0->catchModeSpecies = SPECIES_AERODACTYL;
+ }
+
+ if (gUnknown_0200B134[SPECIES_CHIKORITA])
+ {
+ specialMons[numSpecialMons++] = SPECIES_CHIKORITA;
+ if (gUnknown_0200B134[SPECIES_CHIKORITA] < 4)
+ gUnknown_020314E0->catchModeSpecies = SPECIES_CHIKORITA;
+ }
+
+ if (gUnknown_0200B134[SPECIES_TOTODILE])
+ {
+ specialMons[numSpecialMons++] = SPECIES_TOTODILE;
+ if (gUnknown_0200B134[SPECIES_TOTODILE] < 4)
+ gUnknown_020314E0->catchModeSpecies = SPECIES_TOTODILE;
+ }
+
+ if (gUnknown_0200B134[SPECIES_CYNDAQUIL])
+ {
+ specialMons[numSpecialMons++] = SPECIES_CYNDAQUIL;
+ if (gUnknown_0200B134[SPECIES_CYNDAQUIL] < 4)
+ gUnknown_020314E0->catchModeSpecies = SPECIES_CYNDAQUIL;
+ }
+
+ if (gMain.unk4 == 0)
+ {
+ specialMons[numSpecialMons++] = SPECIES_LATIOS;
+ if (gMain.pokedexFlags[SPECIES_LATIOS] < 4)
+ gUnknown_020314E0->catchModeSpecies = SPECIES_LATIOS;
+ }
+ else
+ {
+ specialMons[numSpecialMons++] = SPECIES_LATIAS;
+ if (gMain.pokedexFlags[SPECIES_LATIAS] < 4)
+ gUnknown_020314E0->catchModeSpecies = SPECIES_LATIAS;
+ }
+
+ if (!gUnknown_020314E0->catchModeSpecies)
+ {
+ rand = gMain.unk4C + gMain.unk50 + Random();
+ rand %= numSpecialMons;
+ gUnknown_020314E0->catchModeSpecies = specialMons[rand];
+ }
+ }
+ else
+ {
+ s16 rareMons;
+ if (gUnknown_020314E0->unk73D == 3)
+ rareMons = 1;
+ else
+ rareMons = 0;
+
+ rand = gMain.unk4C + gMain.unk50 + Random();
+ rand %= gUnknown_020314E0->unk12E;
+ for (i = 0; i < 8 && gUnknown_020314E0->unk130[i] <= rand; i++) {}
+
+ gUnknown_020314E0->catchModeSpecies = gWildMonLocations[gUnknown_020314E0->area][rareMons][i];
+ }
+ }
+
+ gUnknown_020314E0->unk59C = gUnknown_020314E0->catchModeSpecies;
+}
+#else
+NAKED
+void sub_3219C(void)
+{
+ asm_unified("\n\
+ push {r4, r5, r6, r7, lr}\n\
+ sub sp, #0xc\n\
+ ldr r4, _080321C8 @ =gMain\n\
+ movs r0, #7\n\
+ ldrsb r0, [r4, r0]\n\
+ cmp r0, #0\n\
+ beq _08032208\n\
+ movs r0, #0\n\
+ strb r0, [r4, #7]\n\
+ bl Random\n\
+ ldr r1, [r4, #0x4c]\n\
+ ldr r2, [r4, #0x50]\n\
+ adds r1, r1, r2\n\
+ adds r3, r0, r1\n\
+ movs r1, #3\n\
+ ands r3, r1\n\
+ movs r5, #0\n\
+ adds r2, r4, #0\n\
+ adds r2, #0x74\n\
+ adds r0, r3, #0\n\
+ b _080321DE\n\
+ .align 2, 0\n\
+_080321C8: .4byte gMain\n\
+_080321CC:\n\
+ lsls r0, r5, #0x10\n\
+ movs r4, #0x80\n\
+ lsls r4, r4, #9\n\
+ adds r0, r0, r4\n\
+ lsrs r5, r0, #0x10\n\
+ asrs r0, r0, #0x10\n\
+ cmp r0, #3\n\
+ bgt _080321EA\n\
+ adds r0, r0, r3\n\
+_080321DE:\n\
+ ands r0, r1\n\
+ adds r0, #0xc9\n\
+ adds r0, r0, r2\n\
+ ldrb r0, [r0]\n\
+ cmp r0, #3\n\
+ bhi _080321CC\n\
+_080321EA:\n\
+ ldr r0, _08032204 @ =gUnknown_020314E0\n\
+ ldr r2, [r0]\n\
+ lsls r0, r5, #0x10\n\
+ asrs r0, r0, #0x10\n\
+ adds r0, r0, r3\n\
+ movs r1, #3\n\
+ ands r0, r1\n\
+ adds r0, #0xc9\n\
+ movs r1, #0xb3\n\
+ lsls r1, r1, #3\n\
+ adds r2, r2, r1\n\
+ b _08032452\n\
+ .align 2, 0\n\
+_08032204: .4byte gUnknown_020314E0\n\
+_08032208:\n\
+ bl Random\n\
+ ldr r1, [r4, #0x4c]\n\
+ ldr r2, [r4, #0x50]\n\
+ adds r1, r1, r2\n\
+ adds r3, r0, r1\n\
+ movs r0, #8\n\
+ ldrsb r0, [r4, r0]\n\
+ cmp r0, #0\n\
+ beq _08032222\n\
+ adds r0, r3, #0\n\
+ movs r1, #0x32\n\
+ b _08032226\n\
+_08032222:\n\
+ adds r0, r3, #0\n\
+ movs r1, #0x64\n\
+_08032226:\n\
+ bl __umodsi3\n\
+ adds r3, r0, #0\n\
+ ldr r0, _08032338 @ =gUnknown_02031520\n\
+ movs r2, #8\n\
+ ldrsh r0, [r0, r2]\n\
+ cmp r0, #0x63\n\
+ bgt _08032238\n\
+ movs r3, #1\n\
+_08032238:\n\
+ ldr r7, _0803233C @ =gUnknown_020314E0\n\
+ cmp r3, #0\n\
+ bne _0803224C\n\
+ ldr r0, [r7]\n\
+ movs r3, #0xbe\n\
+ lsls r3, r3, #3\n\
+ adds r0, r0, r3\n\
+ ldrh r0, [r0]\n\
+ cmp r0, #4\n\
+ bhi _0803225E\n\
+_0803224C:\n\
+ ldr r1, [r7]\n\
+ ldr r4, _08032340 @ =0x0000012B\n\
+ adds r0, r1, r4\n\
+ ldrb r0, [r0]\n\
+ lsls r0, r0, #0x18\n\
+ asrs r0, r0, #0x18\n\
+ cmp r0, #0\n\
+ bne _0803225E\n\
+ b _080323C0\n\
+_0803225E:\n\
+ movs r4, #0\n\
+ ldr r0, [r7]\n\
+ movs r1, #0xb3\n\
+ lsls r1, r1, #3\n\
+ adds r3, r0, r1\n\
+ strh r4, [r3]\n\
+ ldr r1, _08032344 @ =0x0200B134\n\
+ adds r0, r1, #0\n\
+ adds r0, #0xcc\n\
+ ldrb r2, [r0]\n\
+ adds r5, r1, #0\n\
+ cmp r2, #0\n\
+ beq _08032286\n\
+ movs r4, #1\n\
+ mov r0, sp\n\
+ movs r1, #0xcc\n\
+ strh r1, [r0]\n\
+ cmp r2, #3\n\
+ bhi _08032286\n\
+ strh r1, [r3]\n\
+_08032286:\n\
+ adds r0, r5, #0\n\
+ adds r0, #0xc9\n\
+ ldrb r2, [r0]\n\
+ cmp r2, #0\n\
+ beq _080322B4\n\
+ adds r0, r4, #0\n\
+ lsls r1, r0, #0x10\n\
+ movs r3, #0x80\n\
+ lsls r3, r3, #9\n\
+ adds r1, r1, r3\n\
+ lsrs r4, r1, #0x10\n\
+ lsls r0, r0, #0x10\n\
+ asrs r0, r0, #0xf\n\
+ add r0, sp\n\
+ movs r1, #0xc9\n\
+ strh r1, [r0]\n\
+ cmp r2, #3\n\
+ bhi _080322B4\n\
+ ldr r0, [r7]\n\
+ movs r2, #0xb3\n\
+ lsls r2, r2, #3\n\
+ adds r0, r0, r2\n\
+ strh r1, [r0]\n\
+_080322B4:\n\
+ adds r0, r5, #0\n\
+ adds r0, #0xcb\n\
+ ldrb r2, [r0]\n\
+ cmp r2, #0\n\
+ beq _080322E2\n\
+ adds r0, r4, #0\n\
+ lsls r1, r0, #0x10\n\
+ movs r3, #0x80\n\
+ lsls r3, r3, #9\n\
+ adds r1, r1, r3\n\
+ lsrs r4, r1, #0x10\n\
+ lsls r0, r0, #0x10\n\
+ asrs r0, r0, #0xf\n\
+ add r0, sp\n\
+ movs r1, #0xcb\n\
+ strh r1, [r0]\n\
+ cmp r2, #3\n\
+ bhi _080322E2\n\
+ ldr r0, [r7]\n\
+ movs r2, #0xb3\n\
+ lsls r2, r2, #3\n\
+ adds r0, r0, r2\n\
+ strh r1, [r0]\n\
+_080322E2:\n\
+ adds r0, r5, #0\n\
+ adds r0, #0xca\n\
+ ldrb r2, [r0]\n\
+ cmp r2, #0\n\
+ beq _08032310\n\
+ adds r0, r4, #0\n\
+ lsls r1, r0, #0x10\n\
+ movs r3, #0x80\n\
+ lsls r3, r3, #9\n\
+ adds r1, r1, r3\n\
+ lsrs r4, r1, #0x10\n\
+ lsls r0, r0, #0x10\n\
+ asrs r0, r0, #0xf\n\
+ add r0, sp\n\
+ movs r1, #0xca\n\
+ strh r1, [r0]\n\
+ cmp r2, #3\n\
+ bhi _08032310\n\
+ ldr r0, [r7]\n\
+ movs r2, #0xb3\n\
+ lsls r2, r2, #3\n\
+ adds r0, r0, r2\n\
+ strh r1, [r0]\n\
+_08032310:\n\
+ ldr r2, _08032348 @ =gMain\n\
+ ldrb r0, [r2, #4]\n\
+ cmp r0, #0\n\
+ bne _0803234C\n\
+ adds r1, r4, #0\n\
+ lsls r0, r1, #0x10\n\
+ movs r3, #0x80\n\
+ lsls r3, r3, #9\n\
+ adds r0, r0, r3\n\
+ lsrs r4, r0, #0x10\n\
+ lsls r1, r1, #0x10\n\
+ asrs r1, r1, #0xf\n\
+ mov r3, sp\n\
+ adds r0, r3, r1\n\
+ movs r1, #0xc4\n\
+ strh r1, [r0]\n\
+ movs r3, #0x9c\n\
+ lsls r3, r3, #1\n\
+ b _08032366\n\
+ .align 2, 0\n\
+_08032338: .4byte gUnknown_02031520\n\
+_0803233C: .4byte gUnknown_020314E0\n\
+_08032340: .4byte 0x0000012B\n\
+_08032344: .4byte 0x0200B134\n\
+_08032348: .4byte gMain\n\
+_0803234C:\n\
+ adds r1, r4, #0\n\
+ lsls r0, r1, #0x10\n\
+ movs r3, #0x80\n\
+ lsls r3, r3, #9\n\
+ adds r0, r0, r3\n\
+ lsrs r4, r0, #0x10\n\
+ lsls r1, r1, #0x10\n\
+ asrs r1, r1, #0xf\n\
+ mov r3, sp\n\
+ adds r0, r3, r1\n\
+ movs r1, #0xc3\n\
+ strh r1, [r0]\n\
+ ldr r3, _080323B4 @ =0x00000137\n\
+_08032366:\n\
+ adds r0, r2, r3\n\
+ ldrb r0, [r0]\n\
+ cmp r0, #3\n\
+ bhi _08032378\n\
+ ldr r0, [r7]\n\
+ movs r2, #0xb3\n\
+ lsls r2, r2, #3\n\
+ adds r0, r0, r2\n\
+ strh r1, [r0]\n\
+_08032378:\n\
+ ldr r5, _080323B8 @ =gUnknown_020314E0\n\
+ ldr r0, [r5]\n\
+ movs r3, #0xb3\n\
+ lsls r3, r3, #3\n\
+ adds r0, r0, r3\n\
+ ldrh r0, [r0]\n\
+ cmp r0, #0\n\
+ bne _08032454\n\
+ bl Random\n\
+ ldr r2, _080323BC @ =gMain\n\
+ ldr r1, [r2, #0x4c]\n\
+ ldr r2, [r2, #0x50]\n\
+ adds r1, r1, r2\n\
+ adds r3, r0, r1\n\
+ lsls r1, r4, #0x10\n\
+ asrs r1, r1, #0x10\n\
+ adds r0, r3, #0\n\
+ bl __umodsi3\n\
+ adds r3, r0, #0\n\
+ ldr r1, [r5]\n\
+ lsls r0, r3, #1\n\
+ add r0, sp\n\
+ ldrh r0, [r0]\n\
+ movs r4, #0xb3\n\
+ lsls r4, r4, #3\n\
+ adds r1, r1, r4\n\
+ strh r0, [r1]\n\
+ b _08032454\n\
+ .align 2, 0\n\
+_080323B4: .4byte 0x00000137\n\
+_080323B8: .4byte gUnknown_020314E0\n\
+_080323BC: .4byte gMain\n\
+_080323C0:\n\
+ ldr r2, _08032470 @ =0x0000073D\n\
+ adds r0, r1, r2\n\
+ ldrb r0, [r0]\n\
+ lsls r0, r0, #0x18\n\
+ asrs r0, r0, #0x18\n\
+ movs r6, #0\n\
+ cmp r0, #3\n\
+ bne _080323D2\n\
+ movs r6, #1\n\
+_080323D2:\n\
+ bl Random\n\
+ ldr r2, _08032474 @ =gMain\n\
+ ldr r1, [r2, #0x4c]\n\
+ ldr r2, [r2, #0x50]\n\
+ adds r1, r1, r2\n\
+ adds r3, r0, r1\n\
+ ldr r4, [r7]\n\
+ movs r1, #0x97\n\
+ lsls r1, r1, #1\n\
+ adds r0, r4, r1\n\
+ movs r2, #0\n\
+ ldrsh r1, [r0, r2]\n\
+ adds r0, r3, #0\n\
+ bl __umodsi3\n\
+ adds r3, r0, #0\n\
+ movs r5, #0\n\
+ movs r1, #0x98\n\
+ lsls r1, r1, #1\n\
+ adds r0, r4, r1\n\
+ movs r2, #0\n\
+ ldrsh r0, [r0, r2]\n\
+ lsls r6, r6, #0x10\n\
+ cmp r0, r3\n\
+ bhi _0803242A\n\
+ adds r4, r7, #0\n\
+ adds r2, r1, #0\n\
+_0803240A:\n\
+ lsls r0, r5, #0x10\n\
+ movs r1, #0x80\n\
+ lsls r1, r1, #9\n\
+ adds r0, r0, r1\n\
+ lsrs r5, r0, #0x10\n\
+ asrs r1, r0, #0x10\n\
+ cmp r1, #7\n\
+ bgt _0803242A\n\
+ ldr r0, [r4]\n\
+ lsls r1, r1, #1\n\
+ adds r0, r0, r2\n\
+ adds r0, r0, r1\n\
+ movs r1, #0\n\
+ ldrsh r0, [r0, r1]\n\
+ cmp r0, r3\n\
+ bls _0803240A\n\
+_0803242A:\n\
+ ldr r0, _08032478 @ =gUnknown_020314E0\n\
+ ldr r2, [r0]\n\
+ ldr r3, _0803247C @ =gWildMonLocations\n\
+ lsls r1, r5, #0x10\n\
+ asrs r1, r1, #0xf @ r1 = i * 2\n\
+ asrs r0, r6, #0x10\n\
+ lsls r0, r0, #4 @ r0 = rareMons * 16\n\
+ adds r1, r1, r0 @ r1 = [rareMons][i]\n\
+ adds r0, r2, #0\n\
+ adds r0, #0x35\n\
+ ldrb r0, [r0]\n\
+ lsls r0, r0, #0x18\n\
+ asrs r0, r0, #0x18\n\
+ lsls r0, r0, #5\n\
+ adds r1, r1, r0\n\
+ adds r1, r1, r3\n\
+ ldrh r0, [r1]\n\
+ movs r3, #0xb3\n\
+ lsls r3, r3, #3\n\
+ adds r2, r2, r3\n\
+_08032452:\n\
+ strh r0, [r2]\n\
+_08032454:\n\
+ ldr r0, _08032478 @ =gUnknown_020314E0\n\
+ ldr r0, [r0]\n\
+ movs r4, #0xb3\n\
+ lsls r4, r4, #3\n\
+ adds r1, r0, r4\n\
+ ldrh r1, [r1]\n\
+ ldr r2, _08032480 @ =0x0000059C\n\
+ adds r0, r0, r2\n\
+ strh r1, [r0]\n\
+ add sp, #0xc\n\
+ pop {r4, r5, r6, r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_08032470: .4byte 0x0000073D\n\
+_08032474: .4byte gMain\n\
+_08032478: .4byte gUnknown_020314E0\n\
+_0803247C: .4byte gWildMonLocations\n\
+_08032480: .4byte 0x0000059C");
+}
+#endif // NONMATCHING