diff options
Diffstat (limited to 'src/braille_puzzles.c')
-rw-r--r-- | src/braille_puzzles.c | 212 |
1 files changed, 32 insertions, 180 deletions
diff --git a/src/braille_puzzles.c b/src/braille_puzzles.c index 55e75bfbf..35277fe87 100644 --- a/src/braille_puzzles.c +++ b/src/braille_puzzles.c @@ -25,7 +25,7 @@ enum }; extern u8 gBraillePuzzleCallbackFlag; -extern u8 gUnknown_085EFE74[][2]; +extern const u8 gUnknown_085EFE74[][2]; void SealedChamberShakingEffect(u8); void sub_8179860(void); @@ -375,37 +375,49 @@ bool8 FldEff_UsePuzzleEffect(void) return FALSE; } -// can't get this one to match due to the weird macro-like varsets with strange bitshifting. -// to note: 0x10000 is loaded in, and its obviously supposed to be 1, but i cant get 0x80 << 9 to be loaded in without using it directly. -// maybe there's some way of writing it that works? -#ifdef NONMATCHING -// ShouldDoBrailleRegicePuzzle bool8 ShouldDoBrailleRegicePuzzle(void) { u8 i; - if (gSaveBlock1Ptr->location.mapGroup == 0x18 && gSaveBlock1Ptr->location.mapNum == 0x43) + if (gSaveBlock1Ptr->location.mapGroup == 0x18 + && gSaveBlock1Ptr->location.mapNum == 0x43) { - // _08179A1A if (FlagGet(FLAG_SYS_BRAILLE_WAIT) != FALSE) return FALSE; - if (FlagGet(2) == FALSE) + if (FlagGet(FLAG_0x002) == FALSE) return FALSE; - if (FlagGet(3) == TRUE) + if (FlagGet(FLAG_0x003) == TRUE) return FALSE; for (i = 0; i < 36; i++) { - if (gSaveBlock1Ptr->pos.x == gUnknown_085EFE74[i][0] && gSaveBlock1Ptr->pos.y == gUnknown_085EFE74[i][1]) + u8 xPos = gUnknown_085EFE74[i][0]; + u8 yPos = gUnknown_085EFE74[i][1]; + if (gSaveBlock1Ptr->pos.x == xPos && gSaveBlock1Ptr->pos.y == yPos) { + u16 varValue; + if (i < 16) - VarSet(0x403B, (0x10000 << i | VarGet(0x403B) << 16) >> 16); // correct + { + u16 val = VarGet(0x403B); + val |= 1 << i; + VarSet(0x403B, val); + } else if (i < 32) - VarSet(0x403C, (0x10000 << (i - 16) | VarGet(0x403C) << 16) >> 16); // hmm? + { + u16 val = VarGet(0x403C); + val |= 1 << (i - 16); + VarSet(0x403C, val); + } else - VarSet(0x403D, (0x10000 << (i - 32) | VarGet(0x403D) << 16) >> 16); // hmm? - - if (VarGet(0x403B) != 0xFFFF || VarGet(0x403C) != 0xFF || VarGet(0x403D) != 0xF) + { + u16 val = VarGet(0x403D); + val |= 1 << (i - 32); + VarSet(0x403D, val); + } + + varValue = VarGet(0x403B); + if (varValue != 0xFFFF || VarGet(0x403C) != varValue || VarGet(0x403D) != 0xF) return FALSE; if (gSaveBlock1Ptr->pos.x == 8 && gSaveBlock1Ptr->pos.y == 21) @@ -414,170 +426,10 @@ bool8 ShouldDoBrailleRegicePuzzle(void) return FALSE; } } + + FlagSet(FLAG_0x003); + FlagClear(FLAG_0x002); } - // TODO: Find what flags 2 and 3 are. - FlagSet(3); - FlagClear(2); + return FALSE; } -#else -ASM_DIRECT -bool8 ShouldDoBrailleRegicePuzzle(void) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r9\n\ - mov r6, r8\n\ - push {r6,r7}\n\ - ldr r4, =gSaveBlock1Ptr\n\ - ldr r0, [r4]\n\ - ldrh r1, [r0, 0x4]\n\ - ldr r0, =0x00004318\n\ - cmp r1, r0\n\ - beq _08179A1A\n\ - b _08179B5A\n\ -_08179A1A:\n\ - ldr r0, =0x000008b1\n\ - bl FlagGet\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _08179A28\n\ - b _08179B5A\n\ -_08179A28:\n\ - movs r0, 0x2\n\ - bl FlagGet\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _08179A36\n\ - b _08179B5A\n\ -_08179A36:\n\ - movs r0, 0x3\n\ - bl FlagGet\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _08179A58\n\ - b _08179B5A\n\ - .pool\n\ -_08179A54:\n\ - movs r0, 0x1\n\ - b _08179B5C\n\ -_08179A58:\n\ - movs r5, 0\n\ - mov r8, r4\n\ - ldr r4, =gUnknown_085EFE74\n\ - adds r0, r4, 0x1\n\ - mov r12, r0\n\ - ldr r6, =0x0000403b\n\ - ldr r1, =0x0000403c\n\ - mov r9, r1\n\ -_08179A68:\n\ - lsls r0, r5, 1\n\ - adds r1, r0, r4\n\ - add r0, r12\n\ - ldrb r3, [r0]\n\ - mov r7, r8\n\ - ldr r2, [r7]\n\ - movs r7, 0\n\ - ldrsh r0, [r2, r7]\n\ - ldrb r1, [r1]\n\ - cmp r0, r1\n\ - bne _08179B44\n\ - movs r1, 0x2\n\ - ldrsh r0, [r2, r1]\n\ - cmp r0, r3\n\ - bne _08179B44\n\ - cmp r5, 0xF\n\ - bhi _08179AB0\n\ - adds r0, r6, 0\n\ - bl VarGet\n\ - lsls r0, 16\n\ - movs r1, 0x80\n\ - lsls r1, 9\n\ - lsls r1, r5\n\ - orrs r1, r0\n\ - lsrs r1, 16\n\ - adds r0, r6, 0\n\ - bl VarSet\n\ - b _08179AF0\n\ - .pool\n\ -_08179AB0:\n\ - cmp r5, 0x1F\n\ - bhi _08179AD2\n\ - mov r0, r9\n\ - bl VarGet\n\ - lsls r0, 16\n\ - adds r2, r5, 0\n\ - subs r2, 0x10\n\ - movs r1, 0x80\n\ - lsls r1, 9\n\ - lsls r1, r2\n\ - orrs r1, r0\n\ - lsrs r1, 16\n\ - mov r0, r9\n\ - bl VarSet\n\ - b _08179AF0\n\ -_08179AD2:\n\ - ldr r4, =0x0000403d\n\ - adds r0, r4, 0\n\ - bl VarGet\n\ - lsls r0, 16\n\ - adds r2, r5, 0\n\ - subs r2, 0x20\n\ - movs r1, 0x80\n\ - lsls r1, 9\n\ - lsls r1, r2\n\ - orrs r1, r0\n\ - lsrs r1, 16\n\ - adds r0, r4, 0\n\ - bl VarSet\n\ -_08179AF0:\n\ - ldr r0, =0x0000403b\n\ - bl VarGet\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - ldr r0, =0x0000ffff\n\ - cmp r4, r0\n\ - bne _08179B5A\n\ - ldr r0, =0x0000403c\n\ - bl VarGet\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r0, r4\n\ - bne _08179B5A\n\ - ldr r0, =0x0000403d\n\ - bl VarGet\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r0, 0xF\n\ - bne _08179B5A\n\ - ldr r0, =gSaveBlock1Ptr\n\ - ldr r0, [r0]\n\ - ldr r1, [r0]\n\ - ldr r0, =0x00150008\n\ - cmp r1, r0\n\ - beq _08179A54\n\ - b _08179B5A\n\ - .pool\n\ -_08179B44:\n\ - adds r0, r5, 0x1\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - cmp r5, 0x23\n\ - bls _08179A68\n\ - movs r0, 0x3\n\ - bl FlagSet\n\ - movs r0, 0x2\n\ - bl FlagClear\n\ -_08179B5A:\n\ - movs r0, 0\n\ -_08179B5C:\n\ - pop {r3,r4}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - pop {r4-r7}\n\ - pop {r1}\n\ - bx r1\n\ - .syntax divided"); -} -#endif |