summaryrefslogtreecommitdiff
path: root/src/mauville_old_man.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mauville_old_man.c')
-rw-r--r--src/mauville_old_man.c270
1 files changed, 58 insertions, 212 deletions
diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c
index 25651702d..11dadf380 100644
--- a/src/mauville_old_man.c
+++ b/src/mauville_old_man.c
@@ -121,109 +121,54 @@ void sub_80F7B40(void)
oldMan->oldMan1.unk_2DBD = 1;
}
-// too mathy
-__attribute__((naked))
void sub_80F7BA0(void)
{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- ldr r1, _080F7C48 @ =gSaveBlock1 + 0x2D94\n\
- ldr r0, _080F7C4C @ =gSpecialVar_0x8004\n\
- ldrh r0, [r0]\n\
- adds r5, r1, 0\n\
- adds r5, 0xE\n\
- cmp r0, 0\n\
- bne _080F7BB2\n\
- adds r5, r1, 0x2\n\
-_080F7BB2:\n\
- ldr r2, _080F7C50 @ =gStringVar4\n\
- adds r4, r2, 0\n\
- movs r6, 0\n\
-_080F7BB8:\n\
- ldrh r1, [r5]\n\
- adds r5, 0x2\n\
- adds r0, r2, 0\n\
- bl sub_80EB3FC\n\
- adds r2, r0, 0\n\
- adds r7, r6, 0x1\n\
- cmp r2, r4\n\
- beq _080F7BDA\n\
- movs r1, 0x37\n\
-_080F7BCC:\n\
- ldrb r0, [r4]\n\
- cmp r0, 0\n\
- bne _080F7BD4\n\
- strb r1, [r4]\n\
-_080F7BD4:\n\
- adds r4, 0x1\n\
- cmp r2, r4\n\
- bne _080F7BCC\n\
-_080F7BDA:\n\
- adds r4, 0x1\n\
- movs r0, 0\n\
- strb r0, [r2]\n\
- adds r2, 0x1\n\
- ldrh r1, [r5]\n\
- adds r5, 0x2\n\
- adds r0, r2, 0\n\
- bl sub_80EB3FC\n\
- adds r2, r0, 0\n\
- cmp r2, r4\n\
- beq _080F7C02\n\
- movs r1, 0x37\n\
-_080F7BF4:\n\
- ldrb r0, [r4]\n\
- cmp r0, 0\n\
- bne _080F7BFC\n\
- strb r1, [r4]\n\
-_080F7BFC:\n\
- adds r4, 0x1\n\
- cmp r2, r4\n\
- bne _080F7BF4\n\
-_080F7C02:\n\
- adds r4, 0x1\n\
- movs r0, 0xFE\n\
- strb r0, [r2]\n\
- adds r2, 0x1\n\
- ldrh r1, [r5]\n\
- adds r5, 0x2\n\
- adds r0, r2, 0\n\
- bl sub_80EB3FC\n\
- adds r2, r0, 0\n\
- cmp r2, r4\n\
- beq _080F7C2A\n\
- movs r1, 0x37\n\
-_080F7C1C:\n\
- ldrb r0, [r4]\n\
- cmp r0, 0\n\
- bne _080F7C24\n\
- strb r1, [r4]\n\
-_080F7C24:\n\
- adds r4, 0x1\n\
- cmp r2, r4\n\
- bne _080F7C1C\n\
-_080F7C2A:\n\
- cmp r6, 0\n\
- bne _080F7C3A\n\
- movs r0, 0xFC\n\
- strb r0, [r2]\n\
- adds r2, 0x1\n\
- movs r0, 0xF\n\
- strb r0, [r2]\n\
- adds r2, 0x1\n\
-_080F7C3A:\n\
- lsls r0, r7, 16\n\
- lsrs r6, r0, 16\n\
- cmp r6, 0x1\n\
- bls _080F7BB8\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080F7C48: .4byte gSaveBlock1 + 0x2D94\n\
-_080F7C4C: .4byte gSpecialVar_0x8004\n\
-_080F7C50: .4byte gStringVar4\n\
- .syntax divided");
+ struct UnkMauvilleOldManStruct *oldMan = &gSaveBlock1.oldMan.oldMan1;
+ u16 specialVar = gSpecialVar_0x8004; // It's a bit odd to use this temp variable, but it seems needed to match.
+ u16 *r5;
+ u16 i;
+ u8 *ptr;
+ u8 *r4;
+
+ r5 = oldMan->mauvilleOldMan_ecArray2;
+ if (specialVar == 0)
+ r5 = oldMan->mauvilleOldMan_ecArray;
+ ptr = gStringVar4;
+ r4 = ptr;
+ for (i = 0; i < 2; i++)
+ {
+ ptr = sub_80EB3FC(ptr, *(r5++));
+ while (ptr != r4)
+ {
+ if (*r4 == 0)
+ *r4 = 0x37;
+ r4++;
+ }
+ r4++;
+ *(ptr++) = 0;
+ ptr = sub_80EB3FC(ptr, *(r5++));
+ while (ptr != r4)
+ {
+ if (*r4 == 0)
+ *r4 = 0x37;
+ r4++;
+ }
+ r4++;
+ *(ptr++) = 0xFE;
+ ptr = sub_80EB3FC(ptr, *(r5++));
+ while (ptr != r4)
+ {
+ if (*r4 == 0)
+ *r4 = 0x37;
+ r4++;
+ }
+ //_080F7C2A
+ if (i == 0)
+ {
+ *(ptr++) = EXT_CTRL_CODE_BEGIN;
+ *(ptr++) = 0xF;
+ }
+ }
}
void sub_80F7C54(void)
@@ -276,131 +221,32 @@ void sub_80F7CC8(void)
gScriptResult = TRUE;
}
-// someone fix this
-#ifdef NONMATCHING
void sub_80F7CF4(void)
{
- u8 *stringPtr;
- OldMan *oldMan = &gSaveBlock1.oldMan;
+ struct UnkMauvilleOldManStruct2 *oldMan = &gSaveBlock1.oldMan.oldMan2;
- if(oldMan->oldMan2.unk1 == 0)
+ if(oldMan->unk1 == 0)
sub_80F7DC0();
- if(oldMan->oldMan2.mauvilleOldMan_ecArray[oldMan->oldMan2.unk1] != 0xFFFF) // is not the last element of the array?
+ if(oldMan->mauvilleOldMan_ecArray[oldMan->unk1] != 0xFFFF) // is not the last element of the array?
{
- u16 random = 7 % Random(); // this is a little bit closer, but the compiler prefers an AND instead of division. i assume its because the compiler wants to avoid division by zero, however using an & causes this order to not be close anymore.
- sub_80EB3FC(gStringVar4, oldMan->oldMan2.mauvilleOldMan_ecArray[oldMan->oldMan2.unk1]);
- stringPtr = StringCopy(gStringVar4, gOtherText_Is);
+ u8 *stringPtr;
+ u32 random = Random();
+
+ random %= 8;
+ stringPtr = sub_80EB3FC(gStringVar4, oldMan->mauvilleOldMan_ecArray[oldMan->unk1]);
+ stringPtr = StringCopy(stringPtr, gOtherText_Is);
stringPtr = StringCopy(stringPtr, (u8 *)gUnknown_083E5388[random]);
StringCopy(stringPtr, gOtherText_DontYouAgree);
}
else
{
- StringCopy(gStringVar4, (u8 *)gUnknown_083E53A8[oldMan->oldMan2.mauvilleOldMan_ecArray2[oldMan->oldMan2.unk2++]]);
+ StringCopy(gStringVar4, (u8 *)gUnknown_083E53A8[oldMan->mauvilleOldMan_ecArray2[oldMan->unk2++]]);
}
if(!(Random() % 10))
- oldMan->oldMan2.unk1 = 10;
+ oldMan->unk1 = 10;
else
- oldMan->oldMan2.unk1++;
+ oldMan->unk1++;
gScriptResult = TRUE;
}
-#else
-__attribute__((naked))
-void sub_80F7CF4(void)
-{
- asm(".syntax unified\n\
- push {r4-r6,lr}\n\
- ldr r5, _080F7D50 @ =gSaveBlock1 + 0x2D94\n\
- ldrb r0, [r5, 0x1]\n\
- cmp r0, 0\n\
- bne _080F7D02\n\
- bl sub_80F7DC0\n\
-_080F7D02:\n\
- ldrb r0, [r5, 0x1]\n\
- lsls r0, 1\n\
- adds r6, r5, 0x4\n\
- adds r0, r6\n\
- ldrh r1, [r0]\n\
- ldr r0, _080F7D54 @ =0x0000ffff\n\
- cmp r1, r0\n\
- beq _080F7D68\n\
- bl Random\n\
- adds r4, r0, 0\n\
- lsls r4, 16\n\
- lsrs r4, 16\n\
- movs r0, 0x7\n\
- ands r4, r0\n\
- ldr r0, _080F7D58 @ =gStringVar4\n\
- ldrb r1, [r5, 0x1]\n\
- lsls r1, 1\n\
- adds r1, r6\n\
- ldrh r1, [r1]\n\
- bl sub_80EB3FC\n\
- adds r2, r0, 0\n\
- ldr r1, _080F7D5C @ =gOtherText_Is\n\
- bl StringCopy\n\
- adds r2, r0, 0\n\
- ldr r0, _080F7D60 @ =gUnknown_083E5388\n\
- lsls r4, 2\n\
- adds r4, r0\n\
- ldr r1, [r4]\n\
- adds r0, r2, 0\n\
- bl StringCopy\n\
- adds r2, r0, 0\n\
- ldr r1, _080F7D64 @ =gOtherText_DontYouAgree\n\
- bl StringCopy\n\
- b _080F7D88\n\
- .align 2, 0\n\
-_080F7D50: .4byte gSaveBlock1 + 0x2D94\n\
-_080F7D54: .4byte 0x0000ffff\n\
-_080F7D58: .4byte gStringVar4\n\
-_080F7D5C: .4byte gOtherText_Is\n\
-_080F7D60: .4byte gUnknown_083E5388\n\
-_080F7D64: .4byte gOtherText_DontYouAgree\n\
-_080F7D68:\n\
- ldr r0, _080F7DA0 @ =gStringVar4\n\
- ldr r3, _080F7DA4 @ =gUnknown_083E53A8\n\
- ldrb r1, [r5, 0x2]\n\
- adds r2, r1, 0x1\n\
- strb r2, [r5, 0x2]\n\
- lsls r1, 24\n\
- lsrs r1, 24\n\
- adds r2, r5, 0\n\
- adds r2, 0x18\n\
- adds r1, r2\n\
- ldrb r1, [r1]\n\
- lsls r1, 2\n\
- adds r1, r3\n\
- ldr r1, [r1]\n\
- bl StringCopy\n\
-_080F7D88:\n\
- bl Random\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- movs r1, 0xA\n\
- bl __umodsi3\n\
- lsls r0, 16\n\
- cmp r0, 0\n\
- bne _080F7DA8\n\
- movs r0, 0xA\n\
- b _080F7DAC\n\
- .align 2, 0\n\
-_080F7DA0: .4byte gStringVar4\n\
-_080F7DA4: .4byte gUnknown_083E53A8\n\
-_080F7DA8:\n\
- ldrb r0, [r5, 0x1]\n\
- adds r0, 0x1\n\
-_080F7DAC:\n\
- strb r0, [r5, 0x1]\n\
- ldr r1, _080F7DBC @ =gScriptResult\n\
- movs r0, 0x1\n\
- strh r0, [r1]\n\
- pop {r4-r6}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080F7DBC: .4byte gScriptResult\n\
- .syntax divided");
-}
-#endif