From 3c375d2cb4189d19c650145c4ddeedc7c43b76a2 Mon Sep 17 00:00:00 2001 From: M Date: Sat, 19 Aug 2017 16:44:22 +0200 Subject: Almost decompiled roulette_util, started decompiling roulette --- src/roulette.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/roulette.c (limited to 'src/roulette.c') diff --git a/src/roulette.c b/src/roulette.c new file mode 100644 index 000000000..e15d6ee2f --- /dev/null +++ b/src/roulette.c @@ -0,0 +1,33 @@ +#include "global.h" + +#include "roulette_util.h" +#include "task.h" +#include "palette.h" + +extern u8 gUnknown_02019000[]; + +extern u8 ewram[]; +//#define ewram190B8 ((struct UnkStruct0 *) (ewram + 0x190B8)) +#define ewram19000 ((u8 *) (ewram + 0x19000)) + + +void sub_81150FC(void) +{ + struct UnkStruct0 *s; + u8 *p; + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + p = ewram19000; + s = (struct UnkStruct0 *)(&p[0xB8]); + if (s->val0) + task_tutorial_controls_fadein(s); +} + +void sub_8115124(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + +} -- cgit v1.2.3 From 102a039e1e1419e69b45cee55094f5bbdbe16cf1 Mon Sep 17 00:00:00 2001 From: M Date: Sat, 26 Aug 2017 02:14:40 +0200 Subject: Decompiled roulette.s up to sub_8115B58 --- src/roulette.c | 691 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 687 insertions(+), 4 deletions(-) (limited to 'src/roulette.c') diff --git a/src/roulette.c b/src/roulette.c index e15d6ee2f..3a0702d1d 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -3,25 +3,179 @@ #include "roulette_util.h" #include "task.h" #include "palette.h" +#include "text.h" +#include "pokemon.h" +#include "species.h" +#include "rtc.h" +#include "main.h" +#include "menu_helpers.h" +#include "unknown_task.h" +#include "menu.h" +#include "trig.h" +#include "sprite.h" +#include "menu_cursor.h" +#include "sound.h" extern u8 gUnknown_02019000[]; +extern u16 gSpecialVar_0x8004; +extern struct Unkg083F8DF4 gUnknown_083F8DF4[]; +extern u8 gUnknown_083F8EC4; +extern u8 gUnknown_083F8DF0[]; +extern u8 gUnknown_083F8E34[]; +extern const u8 gUnknown_08E8096C[]; +extern const u8 gRouletteWheelTiles[]; +extern const u8 gRouletteCenter_Gfx[]; +extern const u8 gRouletteHeadersTiles[]; +extern const u8 gRouletteCreditTiles[]; +extern const u8 gRouletteNumbersTiles[]; +extern const u8 gRouletteMultiplierTiles[]; +extern const u8 gUnknown_083F86BC[]; +extern const u8 gUnknown_083F88BC[]; +extern const u8 gUnknown_083F8A60[]; + +extern u16 gPlttBufferFaded[]; +extern u16 gPlttBufferUnfaded[]; + +extern const u8 gUnknown_081C4157[]; + +extern const struct YesNoFuncTable gUnknown_083F8EBC; +extern const u8 gUnknown_081C41E3; + +struct StructUnknown_083F8C00 +{ + u32 var00; + u32 var04; + u32 var08; + u32 var0C; + u32 var10; +}; + +extern const struct StructUnknown_083F8C00 gUnknown_083F8C00[]; + +const extern u8 gUnknown_083F8ECA[]; + + +void sub_8117838(u8); +void sub_811857C(void); +void sub_81184D8(void); +void sub_8117F2C(void); +void sub_8117900(void); +void sub_8117BBC(void); +void sub_8117DF4(void); + +void sub_81180F4(u16); +void sub_81182F8(u8); +void sub_811829C(u8); +void sub_8117158(u8); + +void sub_81156BC(u8); +void sub_8115634(u8); + +void sub_8116CAC(u8); +void sub_8116CF8(void); +void sub_81185E8(void); +void sub_81182F8(u8); +void sub_81159BC(u8); +void sub_8116C34(u8, TaskFunc, u16, u16); + +void sub_8116AB0(u8); + +void sub_8115E14(u8); + +void sub_8116EF8(u8); + extern u8 ewram[]; -//#define ewram190B8 ((struct UnkStruct0 *) (ewram + 0x190B8)) + +#define ewram18a20 ((u16 *) (ewram + 0x18a20)) +#define ewram18a32 ((u16 *) (ewram + 0x18A32)) +#define ewram18a80 ((u16 *) (ewram + 0x18a80)) #define ewram19000 ((u8 *) (ewram + 0x19000)) +#define ewram190b8 ((u8 *) (ewram + 0x190B8)) +#define RDATA ((struct RData *) (ewram + 0x19000)) +#define UNKDATA ((struct UnkStruct0 *) (ewram + 0x190B8)) + +//////////////// +struct OamMatrix +{ + s16 a; + s16 b; + s16 c; + s16 d; +}; + +struct SpriteCopyRequest +{ + const u8 *src; + u8 *dest; + u16 size; +}; + +struct OamDimensions +{ + s8 width; + s8 height; +}; +//////////////// + +struct Unkg083F8DF4 +{ + u8 var00; + u8 var01; + u8 var02; + u8 var03; + u8 var04; + u8 v[0x1B]; +}; + +struct RData /* ewram + 0x19000 */ +{ + u8 v00; + u8 var01; + u8 var02; + u8 v03; + u8 var04_0:2; + u8 var04_2:5; + u8 var04_7:1; + u8 v7[0x3]; + u32 var08; // may be bitfield + u8 v0[0xD]; + u8 var19; + u8 var1A_0:4; + u8 var1A_4:4; + u8 var1B[0x6]; + u8 var21; + u8 var22; + u8 var23; + s16 var24; + u16 var26; + s16 var28; + s16 var2A; + struct OamMatrix var2C; + u16 var34; + u8 v99[0x6]; + u8 var3C; + u8 v67[0x28]; + u8 var65[0x4]; + u8 v6[0x3B]; + u8 varA4; + u8 varA5; // taskid +}; +void sub_8117434(void); + void sub_81150FC(void) { - struct UnkStruct0 *s; u8 *p; + struct UnkStruct0 *s; RunTasks(); AnimateSprites(); BuildOamBuffer(); p = ewram19000; s = (struct UnkStruct0 *)(&p[0xB8]); if (s->val0) - task_tutorial_controls_fadein(s); + task_tutorial_controls_fadein(s); } void sub_8115124(void) @@ -29,5 +183,534 @@ void sub_8115124(void) LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); - + sub_8117434(); + REG_BG1HOFS = 0x200 - RDATA->var26; + if (RDATA->var01) + REG_BLDALPHA = RDATA->var34; + if (RDATA->var2A != 0) + { + DmaCopy16(3, &gBGTilemapBuffers[1][0xE0], (void *)(VRAM + 0x21C0), 0x340); + RDATA->var2A = 0x0; + } + switch (RDATA->var28) + { + case 0x1: + REG_BG0CNT = (0x20 * 0xF8); + DmaCopy16(3, &gBGTilemapBuffers[2][0xE0], (void *)(VRAM + 0xF9C0), 0x340); + RDATA->var28 = 0x2; + break; + case 0x2: + DmaCopy16(3, &gBGTilemapBuffers[2][0xE0], (void *)(VRAM + 0xF9C0), 0x340); + break; + case 0xFF: + REG_BG0CNT = 0x1F08; + DmaFill16(3, 0x0, (void *)(VRAM + 0xF9C0), 0x340); + RDATA->var28 = 0x0; + break; + case 0x0: + } +} +#ifdef NONMATCHING +void sub_8115238(void) +{ + u8 i; + u32 temp; + struct Unkg083F8DF4 *s0; + u16 arr[0x3]; // the third is never used ? + memcpy(&arr, &gUnknown_083F8EC4, 0x6); + memset(RDATA, 0x0, 0x17C); + RDATA->var04_0 = (gSpecialVar_0x8004 & 0x1); + if (gSpecialVar_0x8004 & 0x80) + RDATA->var04_7 = 0x1; + s0 = &gUnknown_083F8DF4[0]; + RDATA->var22 = s0[RDATA->var04_0].var03; + RDATA->var23 = s0[RDATA->var04_0].var04; + temp = gUnknown_083F8DF0[RDATA->var04_0 + RDATA->var04_7 * 2]; + RDATA->var19 = temp; + RDATA->var1A_4 = 0x1; + if (temp == 0x1) + { + u16 *faded = &gPlttBufferFaded[0]; + u16 *unfaded = &gPlttBufferUnfaded[0]; + faded[0x51] = arr[0]; + faded[0x0] = arr[0]; + unfaded[0x51] = arr[0]; + unfaded[0x0] = arr[0]; + } + else + { + u16 *faded = &gPlttBufferFaded[0]; + u16 *unfaded = &gPlttBufferUnfaded[0]; + faded[0x51] = arr[1]; + faded[0x0] = arr[1]; + unfaded[0x51] = arr[1]; + unfaded[0x0] = arr[1]; + } + sub_8124918(UNKDATA); + for (i = 0; i < 0xD; i++) + sub_812492C(UNKDATA, i, (struct UnkStruct1 *)&gUnknown_083F8E34[i * 8]); + for (i = 0; i < 0x6; i++) + { + switch (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2)) + { + case SPECIES_TAILLOW: + RDATA->var02 |= 0x2; + break; + case SPECIES_SHROOMISH: + RDATA->var02 |= 0x1; + break; + } + } + RtcCalcLocalTime(); +} +#else +__attribute__((naked)) +void sub_8115238(void) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + sub sp, 0x8\n\ + ldr r1, _081152C0 @ =gUnknown_083F8EC4\n\ + mov r0, sp\n\ + movs r2, 0x6\n\ + bl memcpy\n\ + ldr r5, _081152C4 @ =0x02019000\n\ + movs r2, 0xBE\n\ + lsls r2, 1\n\ + adds r0, r5, 0\n\ + movs r1, 0\n\ + bl memset\n\ + ldr r0, _081152C8 @ =gSpecialVar_0x8004\n\ + ldrh r2, [r0]\n\ + movs r0, 0x1\n\ + ands r0, r2\n\ + ldrb r1, [r5, 0x4]\n\ + movs r3, 0x4\n\ + negs r3, r3\n\ + ands r3, r1\n\ + orrs r3, r0\n\ + strb r3, [r5, 0x4]\n\ + movs r0, 0x80\n\ + ands r0, r2\n\ + cmp r0, 0\n\ + beq _08115276\n\ + movs r0, 0x80\n\ + orrs r3, r0\n\ + strb r3, [r5, 0x4]\n\ + _08115276:\n\ + ldr r3, _081152CC @ =gUnknown_083F8DF4\n\ + ldrb r2, [r5, 0x4]\n\ + lsls r1, r2, 30\n\ + lsrs r0, r1, 25\n\ + adds r0, r3\n\ + ldrb r0, [r0, 0x3]\n\ + adds r4, r5, 0\n\ + adds r4, 0x22\n\ + strb r0, [r4]\n\ + lsrs r0, r1, 25\n\ + adds r0, r3\n\ + ldrb r0, [r0, 0x4]\n\ + adds r3, r5, 0\n\ + adds r3, 0x23\n\ + strb r0, [r3]\n\ + ldr r0, _081152D0 @ =gUnknown_083F8DF0\n\ + lsrs r1, 30\n\ + lsls r2, 24\n\ + lsrs r2, 31\n\ + lsls r2, 1\n\ + adds r1, r2\n\ + adds r1, r0\n\ + ldrb r2, [r1]\n\ + strb r2, [r5, 0x19]\n\ + ldrb r1, [r5, 0x1A]\n\ + movs r0, 0xF\n\ + ands r0, r1\n\ + movs r1, 0x10\n\ + orrs r0, r1\n\ + strb r0, [r5, 0x1A]\n\ + cmp r2, 0x1\n\ + bne _081152DC\n\ + ldr r4, _081152D4 @ =gPlttBufferUnfaded\n\ + ldr r3, _081152D8 @ =gPlttBufferFaded\n\ + mov r0, sp\n\ + ldrh r2, [r0]\n\ + b _081152E4\n\ + .align 2, 0\n\ + _081152C0: .4byte gUnknown_083F8EC4\n\ + _081152C4: .4byte 0x02019000\n\ + _081152C8: .4byte gSpecialVar_0x8004\n\ + _081152CC: .4byte gUnknown_083F8DF4\n\ + _081152D0: .4byte gUnknown_083F8DF0\n\ + _081152D4: .4byte gPlttBufferUnfaded\n\ + _081152D8: .4byte gPlttBufferFaded\n\ + _081152DC:\n\ + ldr r4, _08115348 @ =gPlttBufferUnfaded\n\ + ldr r3, _0811534C @ =gPlttBufferFaded\n\ + mov r0, sp\n\ + ldrh r2, [r0, 0x2]\n\ + _081152E4:\n\ + adds r0, r3, 0\n\ + adds r0, 0xA2\n\ + strh r2, [r0]\n\ + ldr r1, _08115350 @ =0x0000ffff\n\ + adds r0, r1, 0\n\ + ands r0, r2\n\ + strh r0, [r3]\n\ + ands r0, r1\n\ + adds r2, r4, 0\n\ + adds r2, 0xA2\n\ + strh r0, [r2]\n\ + ands r0, r1\n\ + strh r0, [r4]\n\ + ldr r0, _08115354 @ =0x020190b8\n\ + bl sub_8124918\n\ + movs r4, 0\n\ + ldr r5, _08115358 @ =gUnknown_083F8E34\n\ + _08115308:\n\ + lsls r2, r4, 3\n\ + adds r2, r5\n\ + ldr r0, _08115354 @ =0x020190b8\n\ + adds r1, r4, 0\n\ + bl sub_812492C\n\ + adds r0, r4, 0x1\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0xC\n\ + bls _08115308\n\ + movs r4, 0\n\ + ldr r5, _0811535C @ =0x02019000\n\ + _08115322:\n\ + movs r0, 0x64\n\ + muls r0, r4\n\ + ldr r1, _08115360 @ =gPlayerParty\n\ + adds r0, r1\n\ + movs r1, 0x41\n\ + bl GetMonData\n\ + adds r1, r0, 0\n\ + movs r0, 0x98\n\ + lsls r0, 1\n\ + cmp r1, r0\n\ + beq _08115364\n\ + adds r0, 0x2\n\ + cmp r1, r0\n\ + bne _0811536C\n\ + ldrb r0, [r5, 0x2]\n\ + movs r1, 0x1\n\ + b _08115368\n\ + .align 2, 0\n\ + _08115348: .4byte gPlttBufferUnfaded\n\ + _0811534C: .4byte gPlttBufferFaded\n\ + _08115350: .4byte 0x0000ffff\n\ + _08115354: .4byte 0x020190b8\n\ + _08115358: .4byte gUnknown_083F8E34\n\ + _0811535C: .4byte 0x02019000\n\ + _08115360: .4byte gPlayerParty\n\ + _08115364:\n\ + ldrb r0, [r5, 0x2]\n\ + movs r1, 0x2\n\ + _08115368:\n\ + orrs r0, r1\n\ + strb r0, [r5, 0x2]\n\ + _0811536C:\n\ + adds r0, r4, 0x1\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0x5\n\ + bls _08115322\n\ + bl RtcCalcLocalTime\n\ + add sp, 0x8\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided\n"); +} +#endif + +void sub_8115384(void) +{ + u32 temp_IME; + u8 taskid; + switch (gMain.state) + { + case 0x0: + SetVBlankCallback(NULL); + remove_some_task(); + sub_80F9438(); + sub_80F9368(); + REG_BG2CNT = 0x4686; + REG_BG1CNT = 0x4401; + REG_BLDCNT = 0x2400; + REG_BLDALPHA = 0x060A; + LZ77UnCompVram(&gUnknown_08E8096C, (void *)VRAM); + LZ77UnCompVram(&gRouletteWheelTiles, (void *)(VRAM + 0x4000)); + gMain.state++; + break; + case 0x1: + ResetPaletteFade(); + ResetSpriteData(); + ResetTasks(); + gMain.state++; + break; + case 0x2: + SetUpWindowConfig(&gWindowConfig_81E6C3C); + InitMenuWindow(&gWindowConfig_81E6CE4); + LoadPalette(&gUnknown_083F86BC, 0x0, 0x1C0); + gMain.state++; + break; + case 0x3: + sub_8115238(); + sub_80F9020(); + LZ77UnCompWram(&gUnknown_083F88BC, (void *)(ewram + 0x18800)); + LZ77UnCompVram(&gUnknown_083F8A60, (void *)(VRAM + 0x3000)); + gMain.state++; + break; + case 0x4: + sub_8117838(0x0); + sub_811857C(); + sub_81184D8(); + sub_8117F2C(); + sub_8117900(); + sub_8117BBC(); + sub_8117DF4(); + gMain.state++; + break; + case 0x5: + AnimateSprites(); + BuildOamBuffer(); + sub_81180F4(gSaveBlock1.coins); + sub_81182F8(0x6); + sub_811829C(0x0); + sub_8117158(0x0); + MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); + MenuPrint(&gUnknown_081C4157[0], 0x1, 0xF); + gSpriteCoordOffsetX = -0x3C; + gSpriteCoordOffsetY = 0x0; + gMain.state++; + break; + case 0x6: + REG_DISPCNT = 0x1741; + gMain.state++; + break; + case 0x7: + temp_IME = REG_IME; + REG_IME = 0x0; //disable interrupts + REG_IE |= 0x1; //enable VBlank interrupt + REG_IME = temp_IME; //reenable interrupts + REG_DISPSTAT |= 0x8; + SetVBlankCallback(&sub_8115124); + BeginHardwarePaletteFade(0xFF, 0x0, 0x10, 0x0 , 0x1); + taskid = RDATA->varA4 = CreateTask(&sub_81156BC, 0x0); + gTasks[taskid].data[0x6] = 0x6; + gTasks[taskid].data[0xD] = gSaveBlock1.coins; + RDATA->varA5 = CreateTask(&sub_8115634, 0x1); + SetMainCallback2(&sub_81150FC); + break; + } +} + +void sub_8115634(u8 unused) +{ + s16 sin; + s16 cos; + s32 cos32; + if (RDATA->var21++ == RDATA->var23) + { + RDATA->var21 = 0x0; + if ((RDATA->var24 -= RDATA->var22) < 0) + RDATA->var24 = 0x168 - RDATA->var22; + } + sin = Sin2(RDATA->var24); + cos = Cos2(RDATA->var24); + sin = sin / 16; + cos32 = cos / 16; + RDATA->var2C.d = cos32; + RDATA->var2C.a = cos32; + RDATA->var2C.b = sin; + RDATA->var2C.c = -sin; +} + +void sub_81156BC(u8 taskid) +{ + if (UpdatePaletteFade() == 0) + { + REG_BLDCNT |= 0x2400; + REG_BLDALPHA = 0x0808; + gTasks[taskid].data[0x6] = 0; + sub_8116CAC(taskid); + sub_8116CF8(); + sub_81185E8(); + sub_8117158(0); + sub_81182F8(0x6); + sub_8116C34(taskid, &sub_81159BC, 0xFFFF, 0x3); + } +} + +void sub_8115734(u8 taskid) +{ + DisplayYesNoMenu(0x14, 0x8, 0x1); + sub_814AAF8(0x2D9E); + MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); + MenuPrint(&gUnknown_081C41E3, 0x1, 0xF); + DoYesNoFuncWithChoice(taskid, &gUnknown_083F8EBC); +} + +void sub_811577C(u8 taskid) +{ + MenuZeroFillWindowRect(0x14, 0x8, 0x1A, 0xD); + gTasks[taskid].func = &sub_81159BC; +} + +void sub_81157AC(u8 taskid) +{ + DestroyTask(RDATA->varA5); + sub_8116AB0(taskid); +} + +void sub_81157D0(u8 r0) +{ + u8 temp0, temp1; + switch (r0) + { + case 0x0: + sub_8124DDC(&gBGTilemapBuffers[2][0], 0x0, 0xE, 0x7, 0x10, 0xD); + break; + case 0x1: + case 0x2: + case 0x3: + case 0x4: + temp0 = (r0 * 3 + 0xE); + sub_8124DDC(&gBGTilemapBuffers[2][0], 0x0, 0xE, 0x7, 0x10, 0xD); + sub_8124E2C(&gBGTilemapBuffers[2][0], ewram18a32, temp0, 0x7, 0x3, 0xD); + break; + case 0x5: + case 0xA: + case 0xF: + temp1 = ((r0 - 1) / 5 * 3 + 0xA); + sub_8124DDC(&gBGTilemapBuffers[2][0], 0x0, 0xE, 0x7, 0x10, 0xD); + sub_8124E2C(&gBGTilemapBuffers[2][0], ewram18a80, 0xE, temp1, 0x10, 0x3); + break; + default: + temp0 = ((r0 % 5) * 3 + 0xE); + temp1 = ((r0 - 1) / 5 * 3 + 0x7); + sub_8124DDC(&gBGTilemapBuffers[2][0], 0x0, 0xE, 0x7, 0x10, 0xD); + sub_8124E2C(&gBGTilemapBuffers[2][0], ewram18a20, temp0, temp1, 0x3, 0x3); + } +} + +void sub_8115928(u8 taskid, bool8 r1) +{ + if (!r1) + sub_811829C(gTasks[taskid].data[0x4]); + else + sub_811829C(RDATA->var1B[RDATA->var1A_0]); + sub_81157D0(gTasks[taskid].data[0x4]); +} + +void sub_811597C(u8 taskid) +{ + RDATA->var28 = 0x1; + sub_81157D0(gTasks[taskid].data[0x4]); + RDATA->var23 = 0x2; + RDATA->var21 = 0x0; + gTasks[taskid].func = &sub_8115E14; +} + +void sub_81159BC(u8 taskid) +{ + s16 i; + if(RDATA->var08 & 0x20) + { + for (i = 0xB; (i < 0xE); i++) + if ((RDATA->var08 & gUnknown_083F8C00[i].var08) == 0) + break; + } + else + { + for (i = 0x6; (i < 0xA); i++) + if ((RDATA->var08 & gUnknown_083F8C00[i].var08) == 0) + break; + } + gTasks[taskid].data[0x4] = i; + sub_8116CAC(taskid); + sub_8117158(gTasks[taskid].data[0x4]); + sub_811829C(gTasks[taskid].data[0x4]); + sub_8116EF8(gTasks[taskid].data[0x4]); + gTasks[taskid].data[0x1] = 0x0; + gTasks[taskid].func = &sub_811597C; +} + +bool8 sub_8115A94(s16 *r0, u8 r1) +{ + s8 temp1 = 0; + s8 temp = 0; + s8 arr[0x4]; + s8 t; + memcpy(&arr, gUnknown_083F8ECA, 0x4); + t = (u8)*r0; + switch (r1) + { + case 0x0: + case 0x1: + temp1 = (*r0 % 5); + temp = temp1 + 0xF; + if (temp1 == 0) + temp1 = 0x5; + break; + case 0x2: + case 0x3: + temp1 = (s16)(*r0 / 5) * 5; + temp = temp1 + 0x4; + if (temp1 == 0) + temp1 = 0x1; + break; + } + *r0 += arr[r1]; + if (*r0 < temp1) + *r0 = temp; + if (*r0 > temp) + *r0 = temp1; + if (*r0 != t) + return TRUE; + return FALSE; +} + + +void sub_8115B58(u8 r0) +{ + bool8 var0; + if (!(gMain.newKeys & DPAD_UP) || ((var0 = TRUE), sub_8115A94(&gTasks[r0].data[0x4], 0x0))) + if (!(gMain.newKeys & DPAD_DOWN) || ((var0 = TRUE), sub_8115A94(&gTasks[r0].data[0x4], 0x1))) + if (!(gMain.newKeys & DPAD_LEFT) || ((var0 = TRUE), sub_8115A94(&gTasks[r0].data[0x4], 0x2))) + if (!(gMain.newKeys & DPAD_RIGHT) || ((var0 = TRUE), sub_8115A94(&gTasks[r0].data[0x4], 0x3))) + if (var0) + { + u8 i; + //u16 temp5; + sub_8117158(gTasks[r0].data[0x4]); + sub_8115928(r0, FALSE); + gTasks[r0].data[0x1] = 0; + PlaySE(0x5); + sub_8124D3C(UNKDATA, 0xFFFF); + UNKDATA->val3[0xF].field1 = 0x0; + UNKDATA->val3[0xE].field1 = 0x0; + UNKDATA->val3[0xD].field1 = 0x0; + sub_8116EF8(gTasks[r0].data[0x4]); + for (i = 0; i < 4; i++) + { + struct Sprite *sprite = &gSprites[RDATA->var65[i]]; + //u16 *temp0 = ; //deoptimize ->var65 + sprite->oam.tileNum = ((*sprite->anims)->type + sprite->sheetTileStart); + } + //temp5 = (); + if ((u16)(gTasks[r0].data[0x4] - 1) < 0x4) + { + if ((RDATA->var08 & gUnknown_083F8C00[gTasks[r0].data[0x4]].var08) == 0) + { + //u16 temp1 = gTasks[r0].data[0x4] - 1; + u32 temp2 = gSprites[RDATA->var65[(u8)(gTasks[r0].data[0x4] - 1)]].sheetTileStart; + temp2 += (u16)((*gSprites[RDATA->var65[r0]].anims + 1)->type); + gSprites[RDATA->var65[r0]].oam.tileNum = temp2; + } + } + } } -- cgit v1.2.3 From 1b87916e0549cf4a087fde6b1c12e9c362ac4d68 Mon Sep 17 00:00:00 2001 From: M Date: Tue, 26 Sep 2017 18:27:22 +0200 Subject: decompiled up to sub_8116EF8, added roulette header --- src/roulette.c | 1171 +++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 1108 insertions(+), 63 deletions(-) (limited to 'src/roulette.c') diff --git a/src/roulette.c b/src/roulette.c index 3a0702d1d..76b5a4d9c 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -1,5 +1,5 @@ #include "global.h" - +#include "roulette.h" #include "roulette_util.h" #include "task.h" #include "palette.h" @@ -15,6 +15,13 @@ #include "sprite.h" #include "menu_cursor.h" #include "sound.h" +#include "songs.h" +#include "m4a.h" +#include "rng.h" +#include "game_stat.h" +#include "rom4.h" +#include "string_util.h" +#include "field_fadetransition.h" extern u8 gUnknown_02019000[]; extern u16 gSpecialVar_0x8004; @@ -41,19 +48,50 @@ extern const u8 gUnknown_081C4157[]; extern const struct YesNoFuncTable gUnknown_083F8EBC; extern const u8 gUnknown_081C41E3; +extern const u16 gUnknown_083F8ECE; + struct StructUnknown_083F8C00 { - u32 var00; + u8 var00; + u8 var01; + u16 var02; u32 var04; u32 var08; u32 var0C; - u32 var10; + u16 var10; + u16 var12; +}; + +struct StructgUnknown_083F8D90 +{ + u8 var00; + u8 var01; + u8 var02; + u8 var03; + u32 var04; }; extern const struct StructUnknown_083F8C00 gUnknown_083F8C00[]; const extern u8 gUnknown_083F8ECA[]; +const extern u8 gUnknown_081C41A5; +const extern u8 gUnknown_081C4199; +const extern u8 gUnknown_081C41AE; + +const extern u8 gUnknown_081C41BD; + +const extern u8 gUnknown_081C41F1; +const extern u8 gUnknown_081C4231; +const extern u8 gUnknown_081C41D2; + +extern const struct StructgUnknown_083F8D90 gUnknown_083F8D90[]; +extern const u32 gUnknown_083F8ED8[]; +extern const u32 gUnknown_083F8EE8[]; + +extern const struct UnkStruct1 gUnknown_083F8E9C[]; + +void sub_8117434(void); void sub_8117838(u8); void sub_811857C(void); @@ -84,6 +122,39 @@ void sub_8115E14(u8); void sub_8116EF8(u8); +void sub_8115ECC(u8); + +u8 sub_8117380(u8); + +void sub_8117AA8(u8, u8); +void sub_8117C60(u8, u8); +void sub_8116100(u8); + +void sub_8116308(u8); + +void sub_81191F4(struct Sprite *); +void sub_811637C(u8); + +u8 sub_8116D54(u8, u8); +u8 sub_8116E5C(u8 ,u8); +void sub_8116474(u8); + +void sub_81184CC(struct Sprite *); +void sub_8117D68(u8); +void sub_8116514(u8); + +void sub_8116638(u8); + +void sub_811677C(u8); +void sub_81167F4(u8); + +void sub_8116880(u8); +void sub_81157AC(u8); + +void sub_8116B40(u8); + + +void dp01t_12_3_battle_menu(u8); extern u8 ewram[]; @@ -91,12 +162,17 @@ extern u8 ewram[]; #define ewram18a32 ((u16 *) (ewram + 0x18A32)) #define ewram18a80 ((u16 *) (ewram + 0x18a80)) #define ewram19000 ((u8 *) (ewram + 0x19000)) -#define ewram190b8 ((u8 *) (ewram + 0x190B8)) #define RDATA ((struct RData *) (ewram + 0x19000)) -#define UNKDATA ((struct UnkStruct0 *) (ewram + 0x190B8)) -//////////////// -struct OamMatrix +#define S16TOPOSFLOAT(val) \ +({ \ + s16 v = (val); \ + float f = (float)v; \ + if(v < 0) f += 65536.0f; \ + f; \ +}) + +struct Matrix { s16 a; s16 b; @@ -104,20 +180,6 @@ struct OamMatrix s16 d; }; -struct SpriteCopyRequest -{ - const u8 *src; - u8 *dest; - u16 size; -}; - -struct OamDimensions -{ - s8 width; - s8 height; -}; -//////////////// - struct Unkg083F8DF4 { u8 var00; @@ -125,21 +187,29 @@ struct Unkg083F8DF4 u8 var02; u8 var03; u8 var04; - u8 v[0x1B]; + u8 v[0x13]; + s16 var18; + s16 var1A; //is this signed or not ? + u8 v2[0x4]; }; struct RData /* ewram + 0x19000 */ { - u8 v00; + u8 var00; u8 var01; u8 var02; - u8 v03; + u8 var03_0:5; + u8 var03_5:1; + u8 var03_6:1; + u8 var03_7:1; u8 var04_0:2; u8 var04_2:5; u8 var04_7:1; u8 v7[0x3]; - u32 var08; // may be bitfield - u8 v0[0xD]; + u32 var08; + u8 var0C[0x6]; + u8 var12[0x4]; + u8 var16[0x3]; u8 var19; u8 var1A_0:4; u8 var1A_4:4; @@ -148,23 +218,43 @@ struct RData /* ewram + 0x19000 */ u8 var22; u8 var23; s16 var24; - u16 var26; + s16 var26; s16 var28; s16 var2A; - struct OamMatrix var2C; + struct Matrix var2C; u16 var34; - u8 v99[0x6]; - u8 var3C; - u8 v67[0x28]; - u8 var65[0x4]; - u8 v6[0x3B]; + u8 v99[0x2]; + struct Sprite *var38; + u8 var3C[0x30]; // TODO: add some defines for the different areas + u8 var6C; + u8 v6[0xF]; + u8 var7C; + u8 var7D; + u8 var7E; + u8 var7F; + s16 var80; + s16 var82; + s16 var84; + s16 var86; + float var88; + float var8C; + float var90; + float var94; + float var98; + float var9C; + float varA0; u8 varA4; u8 varA5; // taskid + u8 v51[0x2]; + u16 varA8; + u16 varAA; + TaskFunc varAC; + u8 v46[0x4]; + TaskFunc varB4; + struct UnkStruct0 varB8; }; -void sub_8117434(void); - void sub_81150FC(void) { u8 *p; @@ -246,9 +336,9 @@ void sub_8115238(void) unfaded[0x51] = arr[1]; unfaded[0x0] = arr[1]; } - sub_8124918(UNKDATA); + sub_8124918((&RDATA->varB8)); for (i = 0; i < 0xD; i++) - sub_812492C(UNKDATA, i, (struct UnkStruct1 *)&gUnknown_083F8E34[i * 8]); + sub_812492C((&RDATA->varB8), i, (struct UnkStruct1 *)&gUnknown_083F8E34[i * 8]); for (i = 0; i < 0x6; i++) { switch (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2)) @@ -649,15 +739,15 @@ bool8 sub_8115A94(s16 *r0, u8 r1) t = (u8)*r0; switch (r1) { - case 0x0: - case 0x1: + case 0x0: + case 0x1: temp1 = (*r0 % 5); temp = temp1 + 0xF; if (temp1 == 0) temp1 = 0x5; break; - case 0x2: - case 0x3: + case 0x2: + case 0x3: temp1 = (s16)(*r0 / 5) * 5; temp = temp1 + 0x4; if (temp1 == 0) @@ -674,10 +764,10 @@ bool8 sub_8115A94(s16 *r0, u8 r1) return FALSE; } - void sub_8115B58(u8 r0) { - bool8 var0; + u8 z = 0x0; + bool8 var0 = FALSE; if (!(gMain.newKeys & DPAD_UP) || ((var0 = TRUE), sub_8115A94(&gTasks[r0].data[0x4], 0x0))) if (!(gMain.newKeys & DPAD_DOWN) || ((var0 = TRUE), sub_8115A94(&gTasks[r0].data[0x4], 0x1))) if (!(gMain.newKeys & DPAD_LEFT) || ((var0 = TRUE), sub_8115A94(&gTasks[r0].data[0x4], 0x2))) @@ -685,32 +775,987 @@ void sub_8115B58(u8 r0) if (var0) { u8 i; - //u16 temp5; sub_8117158(gTasks[r0].data[0x4]); sub_8115928(r0, FALSE); - gTasks[r0].data[0x1] = 0; - PlaySE(0x5); - sub_8124D3C(UNKDATA, 0xFFFF); - UNKDATA->val3[0xF].field1 = 0x0; - UNKDATA->val3[0xE].field1 = 0x0; - UNKDATA->val3[0xD].field1 = 0x0; + gTasks[r0].data[0x1] = z; + PlaySE(SE_SELECT); + sub_8124D3C((&RDATA->varB8), 0xFFFF); + (&RDATA->varB8)->val3[0xF].field1 = 0x0; + (&RDATA->varB8)->val3[0xE].field1 = 0x0; + (&RDATA->varB8)->val3[0xD].field1 = 0x0; sub_8116EF8(gTasks[r0].data[0x4]); - for (i = 0; i < 4; i++) + for (i = 0; i < 0x4; i++) { - struct Sprite *sprite = &gSprites[RDATA->var65[i]]; - //u16 *temp0 = ; //deoptimize ->var65 - sprite->oam.tileNum = ((*sprite->anims)->type + sprite->sheetTileStart); + gSprites[RDATA->var3C[i + 0x29]].oam.tileNum = + gSprites[RDATA->var3C[i + 0x29]].sheetTileStart + + (*gSprites[RDATA->var3C[i + 0x29]].anims)->type; } - //temp5 = (); - if ((u16)(gTasks[r0].data[0x4] - 1) < 0x4) + if ((u16)(gTasks[r0].data[0x4] - 1) < 0x4 && !(RDATA->var08 & gUnknown_083F8C00[gTasks[r0].data[0x4]].var08) ) { - if ((RDATA->var08 & gUnknown_083F8C00[gTasks[r0].data[0x4]].var08) == 0) - { - //u16 temp1 = gTasks[r0].data[0x4] - 1; - u32 temp2 = gSprites[RDATA->var65[(u8)(gTasks[r0].data[0x4] - 1)]].sheetTileStart; - temp2 += (u16)((*gSprites[RDATA->var65[r0]].anims + 1)->type); - gSprites[RDATA->var65[r0]].oam.tileNum = temp2; - } + z = gTasks[r0].data[0x4] - 1; + gSprites[RDATA->var3C[z + 0x29]].oam.tileNum = + gSprites[RDATA->var3C[z + 0x29]].sheetTileStart + + (*gSprites[RDATA->var3C[z + 0x29]].anims + 1)->type; } } } + +void sub_8115D58(u8 r0) +{ + RDATA->var28 = 0xFF; + if (RDATA->var19 == 1) + RDATA->var23 = 1; + else + RDATA->var23 = 0; + RDATA->var21 = 0; + gTasks[r0].data[0x1] = 0x20; + gTasks[r0].func = &sub_8115ECC; +} + +void sub_8115DA0(u8 taskid) +{ + RDATA->var1B[RDATA->var1A_0] = gTasks[taskid].data[0x4]; + gTasks[taskid].data[0x2] = sub_8117380(RDATA->var1B[RDATA->var1A_0]); + sub_811829C(RDATA->var1B[RDATA->var1A_0]); + if ((gTasks[taskid].data[0xD] -= RDATA->var19) < 0) + gTasks[taskid].data[0xD] = 0; + sub_81180F4(gTasks[taskid].data[0xD]); + gTasks[taskid].func = &sub_8115D58; +} + +void sub_8115E14(u8 taskid) +{ + sub_8115B58(taskid); + switch (gTasks[taskid].data[0x1]) + { + case 0x0: + sub_81157D0(gTasks[taskid].data[0x4]); + gTasks[taskid].data[0x1]+= 1; + break; + case 0x1E: + sub_81157D0(0); + gTasks[taskid].data[0x1]+= 1; + break; + case 0x3B: + gTasks[taskid].data[0x1] = 0; + break; + default: + gTasks[taskid].data[0x1]++; + } + if (gMain.newKeys & A_BUTTON) + { + if ((RDATA->var08 & gUnknown_083F8C00[gTasks[taskid].data[0x4]].var08)) + PlaySE(SE_BOO); + else + { + m4aSongNumStart(SE_REGI); + gTasks[taskid].func = &sub_8115DA0; + } + } +} + +void sub_8115ECC(u8 taskid) +{ + if (gTasks[taskid].data[0x1]-- > 0) + { + if (gTasks[taskid].data[0x1] > 0x2) + gSpriteCoordOffsetX += 0x2; + if ((RDATA->var26 += 0x4) == 0x68) + gSprites[RDATA->var3C[0x19]].callback = &SpriteCallbackDummy; + } + else + { + sub_8117AA8(0x1, 0xFF); + sub_8117C60(0x1, 0xFF); + gTasks[taskid].func = &sub_8116100; + gTasks[taskid].data[0x1] = 0; + } +} + +u8 sub_8115F58(u16 r0, u16 r1) +{ + u8 timeh; + switch (RDATA->var02) + { + case 0x1: // SHROOMISH + case 0x2: // TAILLOW + // one of the two is in party + timeh = gLocalTime.hours - 0x4; + if (!(timeh > 0x5)) + { + if (!(r0 < 0xC || (r1 & 0x1))) + return 0x1; + else + { + struct Unkg083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[RDATA->var04_0].var02 / 2; + } + } + else if (!(r1 & 0x3)) + { + struct Unkg083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[RDATA->var04_0].var02 / 2; + } + else + { + struct Unkg083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[RDATA->var04_0].var02; + } + break; + case 0x3: + // both are in party + timeh = gLocalTime.hours - 0x4; + if (!(timeh > 0x6)) + { + if (r0 < 0x6 || (r1 & 0x1)) + { + struct Unkg083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[RDATA->var04_0].var02 / 2; + } + else + { + return 0x1; + } + } + else if ((r1 & 0x1) && !(r0 < 0x7)) + { + struct Unkg083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[RDATA->var04_0].var02 / 4; + } + else + { + struct Unkg083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[RDATA->var04_0].var02 / 2; + } + break; + case 0: + default: + // neither is in party + timeh = gLocalTime.hours - 0x4; + if (!(timeh > 5)) + { + if (!(r1 & 0x3)) + { + return 0x1; + } + else + { + struct Unkg083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[RDATA->var04_0].var02 / 2; + } + } + else if (!(r1 & 0x3)) + { + if (!(r0 < 0xD)) + { + struct Unkg083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[RDATA->var04_0].var02 / 2; + } + else + { + struct Unkg083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[RDATA->var04_0].var02; + } + } + else if (r1 & (0x80 << 8)) + { + if (!(r0 < 0xD)) + { + struct Unkg083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[RDATA->var04_0].var02; + } + else + { + struct Unkg083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[RDATA->var04_0].var01; + } + } + else + { + struct Unkg083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[RDATA->var04_0].var01 * 2; + } + } +} + +#ifdef NONMATCHING +void sub_8116100(u8 taskid) +{ + u8 randf; + u16 floatr; + float tempf; + u32 zzz; + s8 randfinal; + s8 r5; + u16 g; + u16 rand; + u16 randmod; + s16 angles[0x4]; // angles in 90 degree steps + u8 zero = 0x0; + memcpy(angles, &gUnknown_083F8ECE, 0x8); + rand = Random(); + randmod = rand % 0x64; + RDATA->var7C = gTasks[taskid].data[0x6]; + RDATA->var7F = zero; + RDATA->var7E = zero; + RDATA->var7D = zero; + randf = sub_8115F58(gTasks[taskid].data[0x8], rand); + randfinal = (rand % randf) - (randf / 2); + if (gLocalTime.hours < 0xD) + r5 = 0x0; + else + r5 = 0x1; + if (randmod < 0x50) + r5 *= 2; + else + r5 = (1 - r5) * 2; + g = (&gUnknown_083F8DF4[RDATA->var04_0])->var1A; + RDATA->var80 = (g + randfinal); + tempf = S16TOPOSFLOAT(g + randfinal); + // some register differences here + floatr = tempf / 5.0f; + zzz = floatr * 3; + RDATA->var82 = floatr * 3; + RDATA->var84 = floatr; + RDATA->var86 = floatr; + // + RDATA->var88 = S16TOPOSFLOAT(angles[(rand & 0x1) + r5]); + RDATA->var8C = S16TOPOSFLOAT((&gUnknown_083F8DF4[RDATA->var04_0])->var18); + RDATA->var90 = ((RDATA->var8C * 0.5f) - RDATA->var8C) / S16TOPOSFLOAT(zzz); + RDATA->var94 = 68.0f; + RDATA->var9C = 0.0f; + RDATA->var98 = -(8.0f / S16TOPOSFLOAT(zzz)); + RDATA->varA0 = 36.0f; + gTasks[taskid].func = &sub_8116308; +} +#else +__attribute__((naked)) +void sub_8116100(u8 taskid) +{ +asm(".syntax unified\n\ +push {r4-r7,lr}\n\ +mov r7, r10\n\ +mov r6, r9\n\ +mov r5, r8\n\ +push {r5-r7}\n\ +sub sp, 0x8\n\ +lsls r0, 24\n\ +lsrs r0, 24\n\ +mov r9, r0\n\ +movs r4, 0\n\ +ldr r1, _08116188 @ =gUnknown_083F8ECE\n\ +mov r0, sp\n\ +movs r2, 0x8\n\ +bl memcpy\n\ +bl Random\n\ +lsls r0, 16\n\ +lsrs r7, r0, 16\n\ +adds r0, r7, 0\n\ +movs r1, 0x64\n\ +bl __umodsi3\n\ +lsls r0, 16\n\ +lsrs r6, r0, 16\n\ +ldr r3, _0811618C @ =0x02019000\n\ +ldr r1, _08116190 @ =gTasks\n\ +mov r2, r9\n\ +lsls r0, r2, 2\n\ +add r0, r9\n\ +lsls r0, 3\n\ +adds r0, r1\n\ +ldrh r2, [r0, 0x14]\n\ +adds r1, r3, 0\n\ +adds r1, 0x7C\n\ +strb r2, [r1]\n\ +adds r1, 0x3\n\ +strb r4, [r1]\n\ +subs r1, 0x1\n\ +strb r4, [r1]\n\ +subs r1, 0x1\n\ +strb r4, [r1]\n\ +ldrh r0, [r0, 0x18]\n\ +adds r1, r7, 0\n\ +bl sub_8115F58\n\ +adds r4, r0, 0\n\ +lsls r4, 24\n\ +lsrs r1, r4, 24\n\ +adds r0, r7, 0\n\ +bl __modsi3\n\ +lsrs r4, 25\n\ +subs r0, r4\n\ +lsls r0, 24\n\ +lsrs r4, r0, 24\n\ +ldr r0, _08116194 @ =gLocalTime\n\ +ldrb r0, [r0, 0x2]\n\ +lsls r0, 24\n\ +asrs r0, 24\n\ +movs r5, 0x1\n\ +cmp r0, 0xC\n\ +bgt _08116180\n\ +movs r5, 0\n\ +_08116180:\n\ +cmp r6, 0x4F\n\ +bhi _08116198\n\ +lsls r0, r5, 25\n\ +b _081161A2\n\ +.align 2, 0\n\ +_08116188: .4byte gUnknown_083F8ECE\n\ +_0811618C: .4byte 0x02019000\n\ +_08116190: .4byte gTasks\n\ +_08116194: .4byte gLocalTime\n\ +_08116198:\n\ +lsls r1, r5, 24\n\ +asrs r1, 24\n\ +movs r0, 0x1\n\ +subs r0, r1\n\ +lsls r0, 25\n\ +_081161A2:\n\ +lsrs r5, r0, 24\n\ +ldr r6, _081162D8 @ =0x02019000\n\ +ldrb r0, [r6, 0x4]\n\ +lsls r0, 30\n\ +mov r10, r0\n\ +lsrs r0, 25\n\ +ldr r1, _081162DC @ =gUnknown_083F8DF4\n\ +adds r0, r1\n\ +lsls r4, 24\n\ +asrs r4, 24\n\ +ldrh r0, [r0, 0x1A]\n\ +adds r4, r0\n\ +adds r0, r6, 0\n\ +adds r0, 0x80\n\ +strh r4, [r0]\n\ +lsls r4, 16\n\ +asrs r4, 16\n\ +adds r0, r4, 0\n\ +bl __floatsisf\n\ +cmp r4, 0\n\ +bge _081161D4\n\ +ldr r1, _081162E0 @ =0x47800000\n\ +bl __addsf3\n\ +_081161D4:\n\ +ldr r1, _081162E4 @ =0x40a00000\n\ +bl __divsf3\n\ +bl __fixunssfsi\n\ +lsls r0, 16\n\ +lsrs r4, r0, 16\n\ +lsls r0, r4, 1\n\ +adds r0, r4\n\ +mov r8, r0\n\ +adds r0, r6, 0\n\ +adds r0, 0x82\n\ +mov r2, r8\n\ +strh r2, [r0]\n\ +adds r0, 0x2\n\ +strh r4, [r0]\n\ +adds r0, 0x2\n\ +strh r4, [r0]\n\ +movs r0, 0x1\n\ +ands r0, r7\n\ +lsls r1, r5, 24\n\ +asrs r1, 24\n\ +adds r0, r1\n\ +lsls r0, 1\n\ +add r0, sp\n\ +movs r1, 0\n\ +ldrsh r4, [r0, r1]\n\ +adds r0, r4, 0\n\ +bl __floatsisf\n\ +cmp r4, 0\n\ +bge _0811621A\n\ +ldr r1, _081162E0 @ =0x47800000\n\ +bl __addsf3\n\ +_0811621A:\n\ +ldr r2, _081162E8 @ =0x02019088\n\ +str r0, [r2]\n\ +adds r7, r6, 0\n\ +adds r7, 0x8C\n\ +mov r1, r10\n\ +lsrs r0, r1, 25\n\ +ldr r2, _081162DC @ =gUnknown_083F8DF4\n\ +adds r0, r2\n\ +movs r1, 0x18\n\ +ldrsh r4, [r0, r1]\n\ +adds r0, r4, 0\n\ +bl __floatsisf\n\ +adds r5, r0, 0\n\ +cmp r4, 0\n\ +bge _08116242\n\ +ldr r1, _081162E0 @ =0x47800000\n\ +bl __addsf3\n\ +adds r5, r0, 0\n\ +_08116242:\n\ +str r5, [r7]\n\ +adds r7, r6, 0\n\ +adds r7, 0x90\n\ +ldr r1, _081162EC @ =0x3f000000\n\ +adds r0, r5, 0\n\ +bl __mulsf3\n\ +adds r1, r5, 0\n\ +bl __subsf3\n\ +adds r5, r0, 0\n\ +mov r2, r8\n\ +lsls r0, r2, 16\n\ +asrs r4, r0, 16\n\ +adds r0, r4, 0\n\ +bl __floatsisf\n\ +adds r2, r0, 0\n\ +cmp r4, 0\n\ +bge _08116272\n\ +ldr r1, _081162E0 @ =0x47800000\n\ +bl __addsf3\n\ +adds r2, r0, 0\n\ +_08116272:\n\ +adds r0, r5, 0\n\ +adds r1, r2, 0\n\ +bl __divsf3\n\ +str r0, [r7]\n\ +adds r1, r6, 0\n\ +adds r1, 0x94\n\ +ldr r0, _081162F0 @ =0x42880000\n\ +str r0, [r1]\n\ +adds r1, 0x8\n\ +ldr r0, _081162F4 @ =0x00000000\n\ +str r0, [r1]\n\ +adds r5, r6, 0\n\ +adds r5, 0x98\n\ +adds r0, r4, 0\n\ +bl __floatsisf\n\ +adds r2, r0, 0\n\ +cmp r4, 0\n\ +bge _081162A2\n\ +ldr r1, _081162E0 @ =0x47800000\n\ +bl __addsf3\n\ +adds r2, r0, 0\n\ +_081162A2:\n\ +ldr r0, _081162F8 @ =0x41000000\n\ +adds r1, r2, 0\n\ +bl __divsf3\n\ +bl __negsf2\n\ +str r0, [r5]\n\ +adds r1, r6, 0\n\ +adds r1, 0xA0\n\ +ldr r0, _081162FC @ =0x42100000\n\ +str r0, [r1]\n\ +ldr r1, _08116300 @ =gTasks\n\ +mov r2, r9\n\ +lsls r0, r2, 2\n\ +add r0, r9\n\ +lsls r0, 3\n\ +adds r0, r1\n\ +ldr r1, _08116304 @ =sub_8116308\n\ +str r1, [r0]\n\ +add sp, 0x8\n\ +pop {r3-r5}\n\ +mov r8, r3\n\ +mov r9, r4\n\ +mov r10, r5\n\ +pop {r4-r7}\n\ +pop {r0}\n\ +bx r0\n\ +.align 2, 0\n\ +_081162D8: .4byte 0x02019000\n\ +_081162DC: .4byte gUnknown_083F8DF4\n\ +_081162E0: .4byte 0x47800000\n\ +_081162E4: .4byte 0x40a00000\n\ +_081162E8: .4byte 0x02019088\n\ +_081162EC: .4byte 0x3f000000\n\ +_081162F0: .4byte 0x42880000\n\ +_081162F4: .4byte 0x00000000\n\ +_081162F8: .4byte 0x41000000\n\ +_081162FC: .4byte 0x42100000\n\ +_08116300: .4byte gTasks\n\ +_08116304: .4byte sub_8116308\n\ +.syntax divided\n"); +} +#endif + +void sub_8116308(u8 taskid) +{ + u8 index; + RDATA->var03_7 = 1; + index = RDATA->var3C[RDATA->var7C]; + RDATA->var38 = &gSprites[index]; + (&gSprites[index])->callback = &sub_81191F4; + gTasks[taskid].data[0x6]++; + gTasks[taskid].data[0x8]++; + sub_81182F8(0x6 - gTasks[taskid].data[0x6]); + m4aSongNumStart(SE_TAMAKORO); + gTasks[taskid].func = &sub_811637C; +} + +void sub_811637C(u8 taskid) +{ + if (RDATA->var7D) + { + if (RDATA->var03_5) + { + if (RDATA->var03_6) + { + RDATA->var03_6 = FALSE; + RDATA->var03_5 = FALSE; + } + } + else + { + if (!gTasks[taskid].data[0x1]) + { + u8 temp = sub_8116E5C(sub_8116D54(taskid, RDATA->var7E), RDATA->var1B[RDATA->var1A_0]); + gTasks[taskid].data[0x5] = temp; + if (temp == 1) + sub_8124CE8((&RDATA->varB8), 0x1000); + } + if (gTasks[taskid].data[0x1] < 0x3D) + { + if (gMain.newKeys & A_BUTTON) + gTasks[taskid].data[0x1] = 0x3C; + gTasks[taskid].data[0x1]++; + } + else + { + sub_8117158(RDATA->var1B[RDATA->var1A_0]); + sub_8117AA8(0x0, (u8)gTasks[taskid].data[0xC]); + sub_8117C60(0x0, (u8)gTasks[taskid].data[0x6] - 0x1); + gTasks[taskid].data[0x1] = 0x20; + gTasks[taskid].func = &sub_8116474; + } + } + } +} + +void sub_8116474(u8 taskid) +{ + if (gTasks[taskid].data[0x1]-- > 0x0) + { + if(gTasks[taskid].data[0x1] > 0x2) + gSpriteCoordOffsetX -= 0x2; + if((RDATA->var26 -= 0x4) == 0x68) + gSprites[RDATA->var3C[0x19]].callback = &sub_81184CC; + } + else + { + sub_8117D68(gTasks[taskid].data[0xC]); + if (gTasks[taskid].data[0x5] == 1) + gTasks[taskid].data[0x1] = 0x79; + else + gTasks[taskid].data[0x1] = 0x3D; + gTasks[taskid].func = &sub_8116514; + } +} + +void sub_8116514(u8 taskid) +{ + if (gTasks[taskid].data[0x1]-- > 0x1) + { + switch(gTasks[taskid].data[0x1] % 0x10) + { + case 0x8: + sub_8117AA8(0x0, 0xFF); + sub_8117C60(0x0, 0xFF); + break; + case 0x0: + sub_8117AA8(0x0, (u8)gTasks[taskid].data[0xC]); + sub_8117C60(0x0, (u8)gTasks[taskid].data[0x6] - 0x1); + break; + } + } + else + { + sub_8116C34(taskid, &sub_8116638, 0x1E, 0x0); + } +} + +void sub_811659C(u8 taskid) +{ + switch(gTasks[taskid].data[0x5]) + { + case 0x1: + case 0x2: + if (IsFanfareTaskInactive()) + { + u32 wins = GetGameStat(GAME_STAT_CONSECUTIVE_ROULETTE_WINS); + if(wins < ++gTasks[taskid].data[0xB]) + SetGameStat(GAME_STAT_CONSECUTIVE_ROULETTE_WINS, gTasks[taskid].data[0xB]); + sub_8116C34(taskid, &sub_811677C, 0xFFFF, 0x3); + } + break; + case 0: + default: + if (!IsSEPlaying()) + { + gTasks[taskid].data[0xB] = FALSE; + sub_8116C34(taskid, &sub_81167F4, 0xFFFF, 0x3); + } + } +} + +void sub_8116638(u8 taskid) +{ + switch(gTasks[taskid].data[0x5]) + { + case 0x1: + case 0x2: + if (gTasks[taskid].data[0x2] == 0xC) + { + PlayFanfare(BGM_ME_B_BIG); + MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); + MenuPrint(&gUnknown_081C41A5, 0x1, 0xF); + } + else + { + PlayFanfare(BGM_ME_B_SMALL); + MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); + MenuPrint(&gUnknown_081C4199, 0x1, 0xF); + } + break; + case 0: + default: + m4aSongNumStart(SE_HAZURE); + MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); + MenuPrint(&gUnknown_081C41AE, 0x1, 0xF); + } + gTasks[taskid].data[0x1] = 0x0; + gTasks[taskid].func = &sub_811659C; +} + +void sub_81166E8(u8 taskid) +{ + s32 r0 = gTasks[taskid].data[0x7]; + switch(r0) + { + case 0x0: + gTasks[taskid].data[0xD]++; + m4aSongNumStart(SE_PIN); + sub_81180F4(gTasks[taskid].data[0xD]); + if (gTasks[taskid].data[0xD] > 0x270E) + { + gTasks[taskid].data[0x1] = r0; + } + else + { + gTasks[taskid].data[0x1]--; + gTasks[taskid].data[0x7]++; + } + break; + case 0x3: + m4aSongNumStop(SE_PIN); + gTasks[taskid].data[0x7] = 0x0; + break; + default: + gTasks[taskid].data[0x7]++; + } + if (gTasks[taskid].data[0x1] == 0x0) + sub_8116C34(taskid, &sub_81167F4, 0xFFFF, 0x3); +} + +void sub_811677C(u8 taskid) +{ + ConvertIntToDecimalStringN((u8 *)&gStringVar1, (RDATA->var19 * gTasks[taskid].data[0x2]), STR_CONV_MODE_LEFT_ALIGN, 0x2); + StringExpandPlaceholders((u8 *)&gStringVar4, &gUnknown_081C41BD); + MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); + MenuPrint((u8 *)&gStringVar4, 0x1, 0xF); + gTasks[taskid].data[0x1] = (RDATA->var19 * gTasks[taskid].data[0x2]); + gTasks[taskid].data[0x7] = 0x0; + gTasks[taskid].func = &sub_81166E8; +} + +void sub_81167F4(u8 taskid) +{ + sub_8124D3C((&RDATA->varB8), 0xFFFF); + (&RDATA->varB8)->val3[0xF].field1 = 0x0; + (&RDATA->varB8)->val3[0xE].field1 = 0x0; + (&RDATA->varB8)->val3[0xD].field1 = 0x0; + gSprites[RDATA->var3C[0x7 + gUnknown_083F8C00[gTasks[taskid].data[0xC]].var00]].invisible = TRUE; + gTasks[taskid].func = &sub_8116880; +} + +void sub_8116880(u8 taskid) +{ + u8 i = 0; + gTasks[taskid].data[0x4] = i; + RDATA->var1B[RDATA->var1A_0] = 0x0; + sub_8117158(0x0); + gSprites[RDATA->var6C].invisible = TRUE; + for (i = 0; i < 0x4; i++) + { + gSprites[RDATA->var3C[i + 0x29]].oam.tileNum = + gSprites[RDATA->var3C[i + 0x29]].sheetTileStart + + (*gSprites[RDATA->var3C[i + 0x29]].anims)->type; + } + if (!(gTasks[taskid].data[0xD] < RDATA->var19)) + { + if (gTasks[taskid].data[0x6] == 0x6) + { + MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); + MenuPrint(&gUnknown_081C41F1, 0x1, 0xF); + sub_8116C34(taskid, &dp01t_12_3_battle_menu, 0xFFFF, 0x3); + } + else if (gTasks[taskid].data[0xD] == 0x270F) + { + MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); + MenuPrint(&gUnknown_081C4231, 0x1, 0xF); + sub_8116C34(taskid, &sub_8115734, 0xFFFF, 0x3); + } + else + { + gTasks[taskid].func = &sub_8115734; + } + } + else + { + MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); + MenuPrint(&gUnknown_081C41D2, 0x1, 0xF); + sub_8116C34(taskid, &sub_81157AC, 0x3C, 0x3); + } +} + +void dp01t_12_3_battle_menu(u8 taskid) +{ + u8 i = 0x0; + gTasks[taskid].data[0x6] = 0x0; + sub_8116CAC(taskid); + sub_8116CF8(); + sub_81185E8(); + sub_8117158(0x0); + sub_81182F8(0x6); + for (i = 0; i < 0xC; i++) + gSprites[RDATA->var3C[i + 0x7]].invisible = FALSE; + if (gTasks[taskid].data[0xD] == 0x270F) + { + MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); + MenuPrint(&gUnknown_081C4231, 0x1, 0xF); + sub_8116C34(taskid, &sub_8115734, 0xFFFF, 0x3); + } + else + { + gTasks[taskid].func = &sub_8115734; + } +} + +void sub_8116AB0(u8 taskid) +{ + sub_8124D3C((&RDATA->varB8), 0xFFFF); + sub_8124918((&RDATA->varB8)); + gSaveBlock1.coins = gTasks[taskid].data[0xD]; + if (gSaveBlock1.coins < RDATA->var19) + gSpecialVar_0x8004 = TRUE; + else + gSpecialVar_0x8004 = FALSE; + BeginHardwarePaletteFade(0xFF, 0x0, 0x0, 0x10, 0x0); + gTasks[taskid].func = &sub_8116B40; +} + +void sub_8116B40(u8 taskid) // end oulette ? +{ + if (UpdatePaletteFade() == 0) + { + SetVBlankCallback(0x0); + memset(RDATA, 0x0, 0x17C); + gSpriteCoordOffsetX = gSpriteCoordOffsetY = 0x0; + sub_80F9368(); + FreeAllSpritePalettes(); + ResetPaletteFade(); + ResetSpriteData(); + sub_80F9020(); + REG_BLDCNT = 0x0; + REG_BLDALPHA = 0x0; + REG_BLDY = 0x0; + gFieldCallback = &sub_8080990; + SetMainCallback2(&c2_exit_to_overworld_2_switch); + DestroyTask(taskid); + } +} + +void sub_8116BC0(u8 taskid) +{ + if(RDATA->varA8 == 0 || gMain.newKeys & RDATA->varAA) + { + gTasks[taskid].func = RDATA->varAC; + if (RDATA->varAA > 0) + PlaySE(SE_SELECT); + RDATA->varAC = NULL; + RDATA->varAA = 0x0; + RDATA->varA8 = 0x0; + } + if (RDATA->varA8 != 0xFFFF) + RDATA->varA8--; +} + +void sub_8116C34(u8 taskid, TaskFunc r1, u16 r2, u16 r3) +{ + RDATA->varB4 = gTasks[taskid].func; + if(r1 == NULL) + r1 = RDATA->varB4; + RDATA->varAC = r1; + RDATA->varA8 = r2; + if (r2 == 0xFFFF && r3 == 0) + RDATA->varAA = 0xFFFF; + else + RDATA->varAA = r3; + gTasks[taskid].func = &sub_8116BC0; +} + +void sub_8116CAC(u8 taskid) +{ + u8 i = 0; + RDATA->var00 = i; + RDATA->var03_0 = 0x0; + RDATA->var03_5 = 0x0; + RDATA->var03_6 = 0x0; + RDATA->var03_7 = 0x0; + for (i = 0; i < 0x6; i++) + RDATA->var1B[i] = 0x0; + RDATA->var1A_0 = 0x0; + gTasks[taskid].data[0x1] = 0x0; +} + +void sub_8116CF8(void) +{ + u8 i; + RDATA->var08 = 0x0; + for (i = 0; i < 0x6; i++) + RDATA->var0C[i] = 0x0; + for (i = 0; i < 0x4; i++) + RDATA->var12[i] = 0x0; + for (i = 0; i < 0x3; i++) + RDATA->var16[i] = 0x0; + sub_8117C60(0x1, 0xFF); +} + +u8 sub_8116D54(u8 taskid, u8 r1) +{ + u32 t0[0x4]; + u32 t1[0x3]; + memcpy(t0, gUnknown_083F8ED8, 0x10); + memcpy(t1, gUnknown_083F8EE8, 0xC); + if (r1 > 0xB) + { + return 0x0; + } + else + { + u8 i; + u8 z; + RDATA->var0C[gTasks[taskid].data[0x6] - 1] = gUnknown_083F8D90[r1].var02; + gTasks[taskid].data[0xC] = gUnknown_083F8D90[r1].var02; + RDATA->var08 |= gUnknown_083F8D90[r1].var04; + for (i = 0; i < 0x4; i++) + { + if (gUnknown_083F8D90[r1].var04 & t0[i]) + RDATA->var12[i]++; + if (RDATA->var12[i] > 0x2) + RDATA->var08 |= t0[i]; + } + for (z = 0; z < 0x3; z++) + { + if (gUnknown_083F8D90[r1].var04 & t1[z]) + RDATA->var16[z]++; + if (RDATA->var16[z] > 0x3) + RDATA->var08 |= t1[z]; + } + return gUnknown_083F8D90[r1].var02; + } +} + +u8 sub_8116E5C(u8 r0, u8 r1) +{ + u8 t = r0; + if (--r0 < 0x13) + { + switch(r1) + { + case 0x0: + return 0x3; + break; + case 0x1 ... 0x4: + if (t == r1 + 5 || t == r1 + 10 || t == r1 + 15) + return 0x1; + break; + case 0x5: + case 0xA: + case 0xF: + if (!(t < r1 + 1) && !(t > r1 + 4)) + return 0x1; + break; + default: + if (t == r1) + return 0x1; + } + } + return 0x0; +} +/* +void sub_8116EF8(u8 r0) +{ + + u32 var0 = 0x0; + struct UnkStruct1 var1[0x3]; + u32 var2; + u16 var3; + u32 var4; + u8 i; + switch(r0) + { + case 0x5: + case 0xA: + case 0xF: + for (i = (r0 + 0x1); i < (r0 + 0x5); i++) + if (!(RDATA->var08 & gUnknown_083F8C00[i].var08)) + var0 |= gUnknown_083F8C00[i].var10; + var0 &= 0xDFFF; + sub_8124CE8(&RDATA->varB8, var0); + break; + default: + memcpy(var1, gUnknown_083F8E9C, 0x18); + if ((u8)(r0 - 0x1) < 0x4) + var2 = 0x3; + else + var2 = 0x1; + var3 = ((r0 / 0x5) - 0x1); + switch((u8)r0 % 0x5) + { + case 0x1: + var3 = gSprites[RDATA->var3C[0x7 + 0x0]].oam.paletteNum * 0x10; + break; + case 0x2: + var3 = gSprites[RDATA->var3C[0x7 + 0x1]].oam.paletteNum * 0x10; + break; + case 0x3: + var3 = gSprites[RDATA->var3C[0x7 + 0x2]].oam.paletteNum * 0x10; + break; + case 0x4: + var3 = gSprites[RDATA->var3C[0x7 + 0x3]].oam.paletteNum * 0x10; + break; + } + if (var2 == 0x1) + { + if (!(RDATA->var08 & gUnknown_083F8C00[r0].var08)) + { + var4 = (r0 / 0x5); + var1[var4 - 0x1].val1 += var3; + sub_812492C(&RDATA->varB8, 0xD, &var1[var4 - 0x2]); + sub_8124CE8(&RDATA->varB8, var0 |= gUnknown_083F8C00[r0].var10); + } + } + else + { + //u8 i; + for (i = 0; i < 0x3; i++) + { + u8 var4 = i * 0x5 + r0 + 0x5; + if (!(RDATA->var08 & gUnknown_083F8C00[var4].var08)) + { + u8 var5 = (var4 / 0x5); + var1[var5 - 0x1].val1 += var3; + sub_812492C(&RDATA->varB8, (u8)(0xD + i), &var1[var5 - 0x2]); + if (var2 == 0x3) + var0 = gUnknown_083F8C00[var4].var10; + var2--; + } + } + if (var2 != 0x2) + var0 = 0x0; + sub_8124CE8(&RDATA->varB8, var0 |= gUnknown_083F8C00[r0].var10); + } + } +} +*/ -- cgit v1.2.3 From ed7956354c7e6a761f777c2c43f5538a862656a1 Mon Sep 17 00:00:00 2001 From: M Date: Sun, 19 Nov 2017 10:05:43 +0100 Subject: decompiled up to sub_811857C --- src/roulette.c | 1648 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 1630 insertions(+), 18 deletions(-) (limited to 'src/roulette.c') diff --git a/src/roulette.c b/src/roulette.c index 76b5a4d9c..1661cce03 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -22,6 +22,10 @@ #include "rom4.h" #include "string_util.h" #include "field_fadetransition.h" +#include "script.h" +#include "strings2.h" + +asm(".include \"constants/gba_constants.inc\""); extern u8 gUnknown_02019000[]; extern u16 gSpecialVar_0x8004; @@ -53,9 +57,14 @@ extern const u16 gUnknown_083F8ECE; struct StructUnknown_083F8C00 { u8 var00; - u8 var01; - u16 var02; - u32 var04; + u8 var01_0:4; + u8 var01_4:4; + u8 var02; + u8 var03; + u8 var04; + u8 var05; + u8 var06; + u8 var07; u32 var08; u32 var0C; u16 var10; @@ -91,6 +100,45 @@ extern const u32 gUnknown_083F8EE8[]; extern const struct UnkStruct1 gUnknown_083F8E9C[]; +extern const u8 gUnknown_083F8EF4[]; + +extern const struct YesNoFuncTable gUnknown_083F8EB4; + +//Strings TODO: give proper names +extern const u8 gUnknown_081C40DF; +extern const u8 gUnknown_081C4139; +extern const u8 gUnknown_081C411C; + +extern const u8 gUnknown_083F92A8[]; +extern const u8 gUnknown_083F90FC[]; +extern const u8 gUnknown_083F9D3C[]; +extern const struct SpritePalette gUnknown_083F9E30; +extern const struct SpriteSheet gUnknown_083F9F54; +extern const struct SpriteSheet gUnknown_083F9F5C; +extern const struct SpriteTemplate gSpriteTemplate_83FA07C[]; +extern const struct SpriteTemplate gSpriteTemplate_83F9FD4[]; +extern const struct SpriteTemplate gSpriteTemplate_83FA034[]; + +extern const struct SpriteTemplate gSpriteTemplate_83FA40C; + +extern const struct SpriteSheet gUnknown_083F9EE8; +extern const struct SpriteTemplate gSpriteTemplate_83FA0DC[]; + +extern struct OamMatrix gOamMatrices[]; + +extern const struct SpriteSheet gUnknown_083FA21C[]; +extern const struct SpriteTemplate gSpriteTemplate_83FA2B0; +extern const struct SpriteTemplate gSpriteTemplate_83FA2C8; +extern const struct SpriteTemplate gSpriteTemplate_83FA2E0; +extern const struct SpriteTemplate gSpriteTemplate_83FA2F8; +extern const struct SpriteTemplate gSpriteTemplate_83FA310; + +extern const u8 gUnknown_083FA608[0x5]; + +extern const struct SpriteSheet gUnknown_083FA42C; +extern const struct SpriteTemplate gSpriteTemplate_83FA434; + + void sub_8117434(void); void sub_8117838(u8); @@ -158,10 +206,15 @@ void dp01t_12_3_battle_menu(u8); extern u8 ewram[]; +#define ewram17000 ((u16 *) (ewram + 0x17000)) //money stuff? +#define ewram17E00 ((u16 *) (ewram + 0x17E00)) +#define ewram17800 ((u16 *) (ewram + 0x17800)) +#define ewram18000 ((u16 *) (ewram + 0x18000)) +#define ewram18800 ((u16 *) (ewram + 0x18800)) +#define ewram189a0 ((u16 *) (ewram + 0x189a0)) #define ewram18a20 ((u16 *) (ewram + 0x18a20)) #define ewram18a32 ((u16 *) (ewram + 0x18A32)) #define ewram18a80 ((u16 *) (ewram + 0x18a80)) -#define ewram19000 ((u8 *) (ewram + 0x19000)) #define RDATA ((struct RData *) (ewram + 0x19000)) #define S16TOPOSFLOAT(val) \ @@ -172,7 +225,7 @@ extern u8 ewram[]; f; \ }) -struct Matrix +struct OamMatrix { s16 a; s16 b; @@ -221,13 +274,11 @@ struct RData /* ewram + 0x19000 */ s16 var26; s16 var28; s16 var2A; - struct Matrix var2C; + struct OamMatrix var2C; u16 var34; u8 v99[0x2]; struct Sprite *var38; - u8 var3C[0x30]; // TODO: add some defines for the different areas - u8 var6C; - u8 v6[0xF]; + u8 var3C[0x40]; // Sprite IDs ? TODO: add some defines for the different areas u8 var7C; u8 var7D; u8 var7E; @@ -257,15 +308,11 @@ struct RData /* ewram + 0x19000 */ void sub_81150FC(void) { - u8 *p; - struct UnkStruct0 *s; RunTasks(); AnimateSprites(); BuildOamBuffer(); - p = ewram19000; - s = (struct UnkStruct0 *)(&p[0xB8]); - if (s->val0) - task_tutorial_controls_fadein(s); + if (RDATA->varB8.val0) + task_tutorial_controls_fadein(&RDATA->varB8); } void sub_8115124(void) @@ -1474,7 +1521,7 @@ void sub_8116880(u8 taskid) gTasks[taskid].data[0x4] = i; RDATA->var1B[RDATA->var1A_0] = 0x0; sub_8117158(0x0); - gSprites[RDATA->var6C].invisible = TRUE; + gSprites[RDATA->var3C[0x30]].invisible = TRUE; for (i = 0; i < 0x4; i++) { gSprites[RDATA->var3C[i + 0x29]].oam.tileNum = @@ -1683,7 +1730,8 @@ u8 sub_8116E5C(u8 r0, u8 r1) } return 0x0; } -/* + +#ifdef NONMATCHING // stack variable switched with a register variable void sub_8116EF8(u8 r0) { @@ -1738,7 +1786,6 @@ void sub_8116EF8(u8 r0) } else { - //u8 i; for (i = 0; i < 0x3; i++) { u8 var4 = i * 0x5 + r0 + 0x5; @@ -1758,4 +1805,1569 @@ void sub_8116EF8(u8 r0) } } } + +#else +__attribute__((naked)) +void sub_8116EF8(u8 r0) +{ +asm(".syntax unified\n\ +push {r4-r7,lr}\n\ +mov r7, r10\n\ +mov r6, r9\n\ +mov r5, r8\n\ +push {r5-r7}\n\ +sub sp, 0x20\n\ +lsls r0, 24\n\ +lsrs r6, r0, 24\n\ +movs r0, 0\n\ +str r0, [sp, 0x18]\n\ +cmp r6, 0xA\n\ +beq _08116F1E\n\ +cmp r6, 0xA\n\ +bgt _08116F1A\n\ +cmp r6, 0x5\n\ +beq _08116F1E\n\ +b _08116F7C\n\ +_08116F1A:\n\ +cmp r6, 0xF\n\ +bne _08116F7C\n\ +_08116F1E:\n\ +adds r0, r6, 0x1\n\ +lsls r0, 24\n\ +lsrs r4, r0, 24\n\ +adds r0, r6, 0x5\n\ +ldr r7, _08116F70 @ =0x020190b8\n\ +cmp r4, r0\n\ +bge _08116F5E\n\ +adds r1, r7, 0\n\ +subs r1, 0xB8\n\ +ldr r3, _08116F74 @ =gUnknown_083F8C00\n\ +ldr r5, [r1, 0x8]\n\ +adds r6, r3, 0\n\ +adds r6, 0x8\n\ +adds r2, r0, 0\n\ +_08116F3A:\n\ +lsls r0, r4, 2\n\ +adds r0, r4\n\ +lsls r1, r0, 2\n\ +adds r0, r1, r6\n\ +ldr r0, [r0]\n\ +ands r0, r5\n\ +cmp r0, 0\n\ +bne _08116F54\n\ +adds r0, r1, r3\n\ +ldrh r0, [r0, 0x10]\n\ +ldr r1, [sp, 0x18]\n\ +orrs r1, r0\n\ +str r1, [sp, 0x18]\n\ +_08116F54:\n\ +adds r0, r4, 0x1\n\ +lsls r0, 24\n\ +lsrs r4, r0, 24\n\ +cmp r4, r2\n\ +blt _08116F3A\n\ +_08116F5E:\n\ +ldr r0, _08116F78 @ =0x0000dfff\n\ +ldr r2, [sp, 0x18]\n\ +ands r2, r0\n\ +str r2, [sp, 0x18]\n\ +adds r0, r7, 0\n\ +adds r1, r2, 0\n\ +bl sub_8124CE8\n\ +b _0811713C\n\ +.align 2, 0\n\ +_08116F70: .4byte 0x020190b8\n\ +_08116F74: .4byte gUnknown_083F8C00\n\ +_08116F78: .4byte 0x0000dfff\n\ +_08116F7C:\n\ +mov r0, sp\n\ +ldr r1, _08116FC8 @ =gUnknown_083F8E9C\n\ +ldm r1!, {r2-r4}\n\ +stm r0!, {r2-r4}\n\ +ldm r1!, {r2-r4}\n\ +stm r0!, {r2-r4}\n\ +subs r0, r6, 0x1\n\ +lsls r0, 24\n\ +lsrs r0, 24\n\ +movs r3, 0x1\n\ +mov r10, r3\n\ +cmp r0, 0x3\n\ +bhi _08116F9A\n\ +movs r4, 0x3\n\ +mov r10, r4\n\ +_08116F9A:\n\ +adds r0, r6, 0\n\ +movs r1, 0x5\n\ +bl __udivsi3\n\ +lsls r0, 24\n\ +lsrs r0, 8\n\ +ldr r1, _08116FCC @ =0xffff0000\n\ +adds r0, r1\n\ +lsrs r7, r0, 16\n\ +adds r0, r6, 0\n\ +movs r1, 0x5\n\ +bl __umodsi3\n\ +lsls r0, 24\n\ +lsrs r0, 24\n\ +cmp r0, 0x2\n\ +beq _08116FF8\n\ +cmp r0, 0x2\n\ +bgt _08116FD4\n\ +cmp r0, 0x1\n\ +beq _08116FE4\n\ +ldr r4, _08116FD0 @ =0x02019000\n\ +b _0811703A\n\ +.align 2, 0\n\ +_08116FC8: .4byte gUnknown_083F8E9C\n\ +_08116FCC: .4byte 0xffff0000\n\ +_08116FD0: .4byte 0x02019000\n\ +_08116FD4:\n\ +cmp r0, 0x3\n\ +beq _0811700C\n\ +cmp r0, 0x4\n\ +beq _08117020\n\ +ldr r4, _08116FE0 @ =0x02019000\n\ +b _0811703A\n\ +.align 2, 0\n\ +_08116FE0: .4byte 0x02019000\n\ +_08116FE4:\n\ +ldr r3, _08116FF0 @ =gSprites\n\ +ldr r2, _08116FF4 @ =0x02019000\n\ +adds r0, r2, 0\n\ +adds r0, 0x43\n\ +b _08117028\n\ +.align 2, 0\n\ +_08116FF0: .4byte gSprites\n\ +_08116FF4: .4byte 0x02019000\n\ +_08116FF8:\n\ +ldr r3, _08117004 @ =gSprites\n\ +ldr r2, _08117008 @ =0x02019000\n\ +adds r0, r2, 0\n\ +adds r0, 0x44\n\ +b _08117028\n\ +.align 2, 0\n\ +_08117004: .4byte gSprites\n\ +_08117008: .4byte 0x02019000\n\ +_0811700C:\n\ +ldr r3, _08117018 @ =gSprites\n\ +ldr r2, _0811701C @ =0x02019000\n\ +adds r0, r2, 0\n\ +adds r0, 0x45\n\ +b _08117028\n\ +.align 2, 0\n\ +_08117018: .4byte gSprites\n\ +_0811701C: .4byte 0x02019000\n\ +_08117020:\n\ +ldr r3, _08117088 @ =gSprites\n\ +ldr r2, _0811708C @ =0x02019000\n\ +adds r0, r2, 0\n\ +adds r0, 0x46\n\ +_08117028:\n\ +ldrb r1, [r0]\n\ +lsls r0, r1, 4\n\ +adds r0, r1\n\ +lsls r0, 2\n\ +adds r0, r3\n\ +ldrb r0, [r0, 0x5]\n\ +lsrs r0, 4\n\ +lsls r7, r0, 4\n\ +adds r4, r2, 0\n\ +_0811703A:\n\ +mov r2, r10\n\ +cmp r2, 0x1\n\ +bne _08117094\n\ +ldr r1, _08117090 @ =gUnknown_083F8C00\n\ +lsls r2, r6, 2\n\ +adds r0, r2, r6\n\ +lsls r0, 2\n\ +adds r1, 0x8\n\ +adds r0, r1\n\ +ldr r1, [r4, 0x8]\n\ +ldr r0, [r0]\n\ +ands r1, r0\n\ +str r2, [sp, 0x1C]\n\ +cmp r1, 0\n\ +bne _0811713C\n\ +adds r0, r6, 0\n\ +movs r1, 0x5\n\ +bl __udivsi3\n\ +lsls r0, 24\n\ +lsrs r0, 24\n\ +subs r1, r0, 0x1\n\ +lsls r1, 3\n\ +mov r3, sp\n\ +adds r2, r3, r1\n\ +ldrh r1, [r2, 0x2]\n\ +adds r1, r7, r1\n\ +strh r1, [r2, 0x2]\n\ +adds r1, r4, 0\n\ +adds r1, 0xB8\n\ +lsls r0, 3\n\ +subs r0, 0x8\n\ +adds r2, r3, r0\n\ +adds r0, r1, 0\n\ +movs r1, 0xD\n\ +bl sub_812492C\n\ +b _08117122\n\ +.align 2, 0\n\ +_08117088: .4byte gSprites\n\ +_0811708C: .4byte 0x02019000\n\ +_08117090: .4byte gUnknown_083F8C00\n\ +_08117094:\n\ +movs r4, 0\n\ +lsls r0, r6, 2\n\ +str r0, [sp, 0x1C]\n\ +ldr r1, _0811714C @ =0x02019000\n\ +mov r8, r1\n\ +ldr r2, _08117150 @ =gUnknown_083F8C00\n\ +mov r9, r2\n\ +_081170A2:\n\ +lsls r0, r4, 2\n\ +adds r0, r4\n\ +adds r0, r6, r0\n\ +adds r0, 0x5\n\ +lsls r0, 24\n\ +lsrs r2, r0, 24\n\ +lsls r0, r2, 2\n\ +adds r0, r2\n\ +lsls r5, r0, 2\n\ +mov r0, r9\n\ +adds r0, 0x8\n\ +adds r0, r5, r0\n\ +mov r3, r8\n\ +ldr r1, [r3, 0x8]\n\ +ldr r0, [r0]\n\ +ands r1, r0\n\ +cmp r1, 0\n\ +bne _0811710E\n\ +adds r0, r2, 0\n\ +movs r1, 0x5\n\ +bl __udivsi3\n\ +lsls r0, 24\n\ +lsrs r0, 24\n\ +subs r1, r0, 0x1\n\ +lsls r1, 3\n\ +mov r3, sp\n\ +adds r2, r3, r1\n\ +ldrh r1, [r2, 0x2]\n\ +adds r1, r7, r1\n\ +strh r1, [r2, 0x2]\n\ +adds r1, r4, 0\n\ +adds r1, 0xD\n\ +lsls r1, 24\n\ +lsrs r1, 24\n\ +lsls r0, 3\n\ +subs r0, 0x8\n\ +adds r2, r3, r0\n\ +mov r0, r8\n\ +adds r0, 0xB8\n\ +bl sub_812492C\n\ +mov r0, r10\n\ +cmp r0, 0x3\n\ +bne _08117104\n\ +mov r1, r9\n\ +adds r0, r5, r1\n\ +ldrh r0, [r0, 0x10]\n\ +str r0, [sp, 0x18]\n\ +_08117104:\n\ +mov r0, r10\n\ +subs r0, 0x1\n\ +lsls r0, 24\n\ +lsrs r0, 24\n\ +mov r10, r0\n\ +_0811710E:\n\ +adds r0, r4, 0x1\n\ +lsls r0, 24\n\ +lsrs r4, r0, 24\n\ +cmp r4, 0x2\n\ +bls _081170A2\n\ +mov r2, r10\n\ +cmp r2, 0x2\n\ +beq _08117122\n\ +movs r3, 0\n\ +str r3, [sp, 0x18]\n\ +_08117122:\n\ +ldr r0, _08117154 @ =0x020190b8\n\ +ldr r2, _08117150 @ =gUnknown_083F8C00\n\ +ldr r4, [sp, 0x1C]\n\ +adds r1, r4, r6\n\ +lsls r1, 2\n\ +adds r1, r2\n\ +ldrh r1, [r1, 0x10]\n\ +ldr r2, [sp, 0x18]\n\ +orrs r2, r1\n\ +str r2, [sp, 0x18]\n\ +adds r1, r2, 0\n\ +bl sub_8124CE8\n\ +_0811713C:\n\ +add sp, 0x20\n\ +pop {r3-r5}\n\ +mov r8, r3\n\ +mov r9, r4\n\ +mov r10, r5\n\ +pop {r4-r7}\n\ +pop {r0}\n\ +bx r0\n\ +.align 2, 0\n\ +_0811714C: .4byte 0x02019000\n\ +_08117150: .4byte gUnknown_083F8C00\n\ +_08117154: .4byte 0x020190b8\n\ +.syntax divided\n"); +} +#endif + +#ifdef NONMATCHING //not enough stack usage +void sub_8117158(u8 r0) +{ + u8 i; + u8 l; + u8 v[0x5]; + u8 z; + u8 var0; + u8 var1; + u16 var2; + RDATA->var2A = 0x1; + sub_8117AA8(0x0, 0x0); + sub_8124E2C(&gBGTilemapBuffers[2][0], ewram18800, 0xE, 0x7, 0x10, 0xD); + switch(r0) + { + case 0x0: + return; + case 0x1 ... 0x4: + l = 0x4; + for (i = 0x0; i < l; i++) + v[i] = i * 0x5 + r0; + break; + case 0x5: + case 0xA: + case 0xF: + l = 0x5; + for (i = 0x0; i < l; i++) + v[i] = i + r0; + break; + default: + l = 0x1; + v[0] = r0; + } + for (i = 0x0; i < l; i++) + { + //_0811727C + var0 = gUnknown_083F8C00[v[i]].var06; + var1 = gUnknown_083F8C00[v[i]].var03; + for (z = 0; z < 0x3; z++) + { + var2 = (gUnknown_083F8C00[v[i]].var04 + z) * 0x20; + gBGTilemapBuffers[2][var2 + var1 + 0x0] = ewram189a0[(var0 + z) * 0x3 + 0x0]; + gBGTilemapBuffers[2][var2 + var1 + 0x1] = ewram189a0[(var0 + z) * 0x3 + 0x1]; + gBGTilemapBuffers[2][var2 + var1 + 0x2] = ewram189a0[(var0 + z) * 0x3 + 0x2]; + } + //_08117350 + } +} +#else +__attribute__((naked)) +void sub_8117158(u8 r0) +{ +asm(".syntax unified\n\ +push {r4-r7,lr}\n\ +mov r7, r10\n\ +mov r6, r9\n\ +mov r5, r8\n\ +push {r5-r7}\n\ +sub sp, 0x24\n\ +lsls r0, 24\n\ +lsrs r5, r0, 24\n\ +ldr r4, _0811719C @ =0x02019000\n\ +movs r0, 0x1\n\ +strh r0, [r4, 0x2A]\n\ +movs r0, 0\n\ +movs r1, 0\n\ +bl sub_8117AA8\n\ +ldr r0, _081171A0 @ =gBGTilemapBuffers + 0x800\n\ +ldr r1, _081171A4 @ =0xfffff800\n\ +adds r4, r1\n\ +movs r1, 0x10\n\ +str r1, [sp]\n\ +movs r1, 0xD\n\ +str r1, [sp, 0x4]\n\ +adds r1, r4, 0\n\ +movs r2, 0xE\n\ +movs r3, 0x7\n\ +bl sub_8124E2C\n\ +cmp r5, 0xF\n\ +bhi _08117250\n\ +lsls r0, r5, 2\n\ +ldr r1, _081171A8 @ =_081171AC\n\ +adds r0, r1\n\ +ldr r0, [r0]\n\ +mov pc, r0\n\ +.align 2, 0\n\ +_0811719C: .4byte 0x02019000\n\ +_081171A0: .4byte gBGTilemapBuffers + 0x800\n\ +_081171A4: .4byte 0xfffff800\n\ +_081171A8: .4byte _081171AC\n\ +.align 2, 0\n\ +_081171AC:\n\ +.4byte _08117360\n\ +.4byte _081171EC\n\ +.4byte _081171EC\n\ +.4byte _081171EC\n\ +.4byte _081171EC\n\ +.4byte _08117220\n\ +.4byte _08117250\n\ +.4byte _08117250\n\ +.4byte _08117250\n\ +.4byte _08117250\n\ +.4byte _08117220\n\ +.4byte _08117250\n\ +.4byte _08117250\n\ +.4byte _08117250\n\ +.4byte _08117250\n\ +.4byte _08117220\n\ +_081171EC:\n\ +movs r0, 0x4\n\ +str r0, [sp, 0x18]\n\ +add r1, sp, 0x8\n\ +movs r0, 0\n\ +strb r0, [r1]\n\ +adds r0, r1, 0\n\ +ldrb r0, [r0]\n\ +cmp r0, 0x3\n\ +bhi _08117258\n\ +add r4, sp, 0x10\n\ +adds r3, r1, 0\n\ +_08117202:\n\ +ldrb r2, [r3]\n\ +adds r2, r4\n\ +ldrb r1, [r3]\n\ +lsls r0, r1, 2\n\ +adds r0, r1\n\ +adds r0, r5, r0\n\ +strb r0, [r2]\n\ +ldrb r0, [r3]\n\ +adds r0, 0x1\n\ +strb r0, [r3]\n\ +ldrb r0, [r3]\n\ +ldr r1, [sp, 0x18]\n\ +cmp r0, r1\n\ +bcc _08117202\n\ +b _08117258\n\ +_08117220:\n\ +movs r0, 0x5\n\ +str r0, [sp, 0x18]\n\ +add r1, sp, 0x8\n\ +movs r0, 0\n\ +strb r0, [r1]\n\ +adds r0, r1, 0\n\ +ldrb r0, [r0]\n\ +cmp r0, 0x4\n\ +bhi _08117258\n\ +add r3, sp, 0x10\n\ +adds r2, r1, 0\n\ +_08117236:\n\ +ldrb r1, [r2]\n\ +adds r1, r3\n\ +ldrb r0, [r2]\n\ +adds r0, r5, r0\n\ +strb r0, [r1]\n\ +ldrb r0, [r2]\n\ +adds r0, 0x1\n\ +strb r0, [r2]\n\ +ldrb r0, [r2]\n\ +ldr r1, [sp, 0x18]\n\ +cmp r0, r1\n\ +bcc _08117236\n\ +b _08117258\n\ +_08117250:\n\ +movs r0, 0x1\n\ +str r0, [sp, 0x18]\n\ +add r0, sp, 0x10\n\ +strb r5, [r0]\n\ +_08117258:\n\ +add r1, sp, 0x8\n\ +movs r0, 0\n\ +strb r0, [r1]\n\ +adds r0, r1, 0\n\ +ldrb r0, [r0]\n\ +ldr r1, [sp, 0x18]\n\ +cmp r0, r1\n\ +bcs _08117360\n\ +mov r0, sp\n\ +adds r0, 0xE\n\ +str r0, [sp, 0x1C]\n\ +add r1, sp, 0x10\n\ +mov r9, r1\n\ +add r0, sp, 0x8\n\ +mov r12, r0\n\ +mov r1, sp\n\ +adds r1, 0xA\n\ +str r1, [sp, 0x20]\n\ +_0811727C:\n\ +mov r1, r12\n\ +ldrb r0, [r1]\n\ +add r0, r9\n\ +ldrb r1, [r0]\n\ +lsls r0, r1, 2\n\ +adds r0, r1\n\ +lsls r0, 2\n\ +ldr r1, _08117370 @ =gUnknown_083F8C00\n\ +adds r0, r1\n\ +ldrb r0, [r0, 0x6]\n\ +ldr r1, [sp, 0x1C]\n\ +strb r0, [r1]\n\ +mov r1, r12\n\ +ldrb r0, [r1]\n\ +add r0, r9\n\ +ldrb r1, [r0]\n\ +lsls r0, r1, 2\n\ +adds r0, r1\n\ +lsls r0, 2\n\ +ldr r1, _08117370 @ =gUnknown_083F8C00\n\ +adds r0, r1\n\ +ldrb r0, [r0, 0x3]\n\ +ldr r1, [sp, 0x20]\n\ +strh r0, [r1]\n\ +mov r4, sp\n\ +adds r4, 0x9\n\ +movs r0, 0\n\ +strb r0, [r4]\n\ +ldrb r0, [r4]\n\ +cmp r0, 0x2\n\ +bhi _08117350\n\ +add r5, sp, 0xC\n\ +ldr r7, [sp, 0x20]\n\ +ldr r0, _08117374 @ =gBGTilemapBuffers + 0x800\n\ +mov r8, r0\n\ +ldr r6, [sp, 0x1C]\n\ +ldr r1, _08117378 @ =0x020189a0\n\ +mov r10, r1\n\ +_081172C8:\n\ +mov r1, r12\n\ +ldrb r0, [r1]\n\ +add r0, r9\n\ +ldrb r0, [r0]\n\ +lsls r1, r0, 2\n\ +adds r1, r0\n\ +lsls r1, 2\n\ +ldr r0, _08117370 @ =gUnknown_083F8C00\n\ +adds r1, r0\n\ +adds r3, r4, 0\n\ +ldrb r0, [r4]\n\ +ldrb r1, [r1, 0x4]\n\ +adds r0, r1\n\ +lsls r0, 5\n\ +strh r0, [r5]\n\ +ldrh r0, [r7]\n\ +ldrh r2, [r5]\n\ +adds r2, r0\n\ +lsls r2, 1\n\ +add r2, r8\n\ +ldrb r0, [r6]\n\ +ldrb r1, [r4]\n\ +adds r1, r0\n\ +lsls r0, r1, 1\n\ +adds r0, r1\n\ +lsls r0, 1\n\ +add r0, r10\n\ +ldrh r0, [r0]\n\ +strh r0, [r2]\n\ +ldrh r0, [r7]\n\ +ldrh r2, [r5]\n\ +adds r2, r0\n\ +adds r2, 0x1\n\ +lsls r2, 1\n\ +add r2, r8\n\ +ldrb r0, [r6]\n\ +ldrb r1, [r4]\n\ +adds r1, r0\n\ +lsls r0, r1, 1\n\ +adds r0, r1\n\ +lsls r0, 1\n\ +mov r1, r10\n\ +adds r1, 0x2\n\ +adds r0, r1\n\ +ldrh r0, [r0]\n\ +strh r0, [r2]\n\ +ldrh r0, [r7]\n\ +ldrh r2, [r5]\n\ +adds r2, r0\n\ +adds r2, 0x2\n\ +lsls r2, 1\n\ +add r2, r8\n\ +ldrb r0, [r6]\n\ +ldrb r1, [r4]\n\ +adds r1, r0\n\ +lsls r0, r1, 1\n\ +adds r0, r1\n\ +lsls r0, 1\n\ +ldr r1, _0811737C @ =0x020189a4\n\ +adds r0, r1\n\ +ldrh r0, [r0]\n\ +strh r0, [r2]\n\ +ldrb r0, [r4]\n\ +adds r0, 0x1\n\ +strb r0, [r4]\n\ +ldrb r0, [r3]\n\ +cmp r0, 0x2\n\ +bls _081172C8\n\ +_08117350:\n\ +mov r1, r12\n\ +ldrb r0, [r1]\n\ +adds r0, 0x1\n\ +strb r0, [r1]\n\ +ldrb r0, [r1]\n\ +ldr r1, [sp, 0x18]\n\ +cmp r0, r1\n\ +bcc _0811727C\n\ +_08117360:\n\ +add sp, 0x24\n\ +pop {r3-r5}\n\ +mov r8, r3\n\ +mov r9, r4\n\ +mov r10, r5\n\ +pop {r4-r7}\n\ +pop {r0}\n\ +bx r0\n\ +.align 2, 0\n\ +_08117370: .4byte gUnknown_083F8C00\n\ +_08117374: .4byte gBGTilemapBuffers + 0x800\n\ +_08117378: .4byte 0x020189a0\n\ +_0811737C: .4byte 0x020189a4\n\ +.syntax divided\n"); +} +#endif + +#ifdef NONMATCHING +u8 sub_8117380(u8 r0) +{ + u8 var0[0x5]; + u8 t; + u8 z; + memcpy(var0, gUnknown_083F8EF4, 0x5); + if (r0 > 0x13) + r0 = 0x0; + switch (gUnknown_083F8C00[r0].var01_0) + { + case 0x3: + z = r0 / 0x5 - 0x1; + if (RDATA->var16[z] > 0x3) + return 0x0; + return var0[RDATA->var16[z] + 0x1]; + case 0x4: + t = r0 - 0x1; + if (RDATA->var12[t] > 0x2) + return 0x0; + return var0[RDATA->var12[t] + 0x2]; + case 0xC: + if (RDATA->var08 & gUnknown_083F8C00[r0].var08) + return 0x0; + return var0[0x4]; + default: + } + return 0x0; +} +#else +__attribute__((naked)) +u8 sub_8117380(u8 r0) +{ +asm(".syntax unified\n\ +push {r4,lr}\n\ +sub sp, 0x8\n\ +lsls r0, 24\n\ +lsrs r4, r0, 24\n\ +ldr r1, _081173B8 @ =gUnknown_083F8EF4\n\ +mov r0, sp\n\ +movs r2, 0x5\n\ +bl memcpy\n\ +cmp r4, 0x13\n\ +bls _08117398\n\ +movs r4, 0\n\ +_08117398:\n\ +ldr r3, _081173BC @ =gUnknown_083F8C00\n\ +lsls r0, r4, 2\n\ +adds r0, r4\n\ +lsls r2, r0, 2\n\ +adds r0, r2, r3\n\ +ldrb r0, [r0, 0x1]\n\ +lsls r0, 28\n\ +lsrs r0, 28\n\ +cmp r0, 0x4\n\ +beq _081173EC\n\ +cmp r0, 0x4\n\ +bgt _081173C0\n\ +cmp r0, 0x3\n\ +beq _081173C6\n\ +b _08117428\n\ +.align 2, 0\n\ +_081173B8: .4byte gUnknown_083F8EF4\n\ +_081173BC: .4byte gUnknown_083F8C00\n\ +_081173C0:\n\ +cmp r0, 0xC\n\ +beq _0811740C\n\ +b _08117428\n\ +_081173C6:\n\ +adds r0, r4, 0\n\ +movs r1, 0x5\n\ +bl __udivsi3\n\ +subs r0, 0x1\n\ +lsls r0, 24\n\ +lsrs r4, r0, 24\n\ +ldr r0, _081173E8 @ =0x02019000\n\ +adds r0, 0x16\n\ +adds r1, r4, r0\n\ +ldrb r0, [r1]\n\ +cmp r0, 0x3\n\ +bhi _08117428\n\ +ldrb r0, [r1]\n\ +adds r0, 0x1\n\ +b _08117402\n\ +.align 2, 0\n\ +_081173E8: .4byte 0x02019000\n\ +_081173EC:\n\ +subs r0, r4, 0x1\n\ +lsls r0, 24\n\ +lsrs r4, r0, 24\n\ +ldr r0, _08117408 @ =0x02019000\n\ +adds r0, 0x12\n\ +adds r1, r4, r0\n\ +ldrb r0, [r1]\n\ +cmp r0, 0x2\n\ +bhi _08117428\n\ +ldrb r0, [r1]\n\ +adds r0, 0x2\n\ +_08117402:\n\ +add r0, sp\n\ +ldrb r0, [r0]\n\ +b _0811742A\n\ +.align 2, 0\n\ +_08117408: .4byte 0x02019000\n\ +_0811740C:\n\ +ldr r1, _08117424 @ =0x02019000\n\ +adds r0, r3, 0\n\ +adds r0, 0x8\n\ +adds r0, r2, r0\n\ +ldr r1, [r1, 0x8]\n\ +ldr r0, [r0]\n\ +ands r1, r0\n\ +cmp r1, 0\n\ +bne _08117428\n\ +mov r0, sp\n\ +ldrb r0, [r0, 0x4]\n\ +b _0811742A\n\ +.align 2, 0\n\ +_08117424: .4byte 0x02019000\n\ +_08117428:\n\ +movs r0, 0\n\ +_0811742A:\n\ +add sp, 0x8\n\ +pop {r4}\n\ +pop {r1}\n\ +bx r1\n\ +.syntax divided\n"); +} +#endif + +#ifdef NONMATCHING +void sub_8117434(void) //sprite rotation ? +{ + s32 x1; + s32 x2; + REG_BG2PA = RDATA->var2C.a; + REG_BG2PB = RDATA->var2C.b; + REG_BG2PC = RDATA->var2C.c; + REG_BG2PD = RDATA->var2C.d; + x1 = 0x7400 - RDATA->var2C.a * (gSpriteCoordOffsetX + 0x74) + - RDATA->var2C.b * (gSpriteCoordOffsetY + 0x50); + x2 = 0x5400 - RDATA->var2C.c * gSpriteCoordOffsetX + - RDATA->var2C.d * gSpriteCoordOffsetY; + REG_BG2X_L = x1; + REG_BG2X_H = (x1 & 0x0fff0000) >> 16; + REG_BG2Y_L = x2; + REG_BG2Y_H = (x2 & 0x0fff0000) >> 16; +} +#else +__attribute__((naked)) +void sub_8117434(void) +{ +asm(".syntax unified\n\ +push {r4-r6,lr}\n\ +ldr r1, _081174AC @ =REG_BG2PA\n\ +ldr r4, _081174B0 @ =0x02019000\n\ +ldrh r0, [r4, 0x2C]\n\ +strh r0, [r1]\n\ +adds r1, 0x2\n\ +ldrh r0, [r4, 0x2E]\n\ +strh r0, [r1]\n\ +adds r1, 0x2\n\ +ldrh r0, [r4, 0x30]\n\ +strh r0, [r1]\n\ +adds r1, 0x2\n\ +ldrh r0, [r4, 0x32]\n\ +strh r0, [r1]\n\ +movs r0, 0x2E\n\ +ldrsh r2, [r4, r0]\n\ +ldr r0, _081174B4 @ =gSpriteCoordOffsetY\n\ +movs r3, 0\n\ +ldrsh r1, [r0, r3]\n\ +adds r1, 0x50\n\ +adds r0, r2, 0\n\ +muls r0, r1\n\ +movs r2, 0xE8\n\ +lsls r2, 7\n\ +subs r2, r0\n\ +movs r6, 0x2C\n\ +ldrsh r5, [r4, r6]\n\ +ldr r0, _081174B8 @ =gSpriteCoordOffsetX\n\ +movs r6, 0\n\ +ldrsh r3, [r0, r6]\n\ +adds r3, 0x74\n\ +adds r0, r5, 0\n\ +muls r0, r3\n\ +subs r2, r0\n\ +movs r5, 0x32\n\ +ldrsh r0, [r4, r5]\n\ +muls r0, r1\n\ +movs r1, 0xA8\n\ +lsls r1, 7\n\ +subs r1, r0\n\ +movs r6, 0x30\n\ +ldrsh r0, [r4, r6]\n\ +muls r0, r3\n\ +subs r1, r0\n\ +ldr r0, _081174BC @ =REG_BG2X_L\n\ +strh r2, [r0]\n\ +adds r0, 0x2\n\ +ldr r3, _081174C0 @ =0x0fff0000\n\ +ands r2, r3\n\ +asrs r2, 16\n\ +strh r2, [r0]\n\ +adds r0, 0x2\n\ +strh r1, [r0]\n\ +adds r0, 0x2\n\ +ands r1, r3\n\ +asrs r1, 16\n\ +strh r1, [r0]\n\ +pop {r4-r6}\n\ +pop {r0}\n\ +bx r0\n\ +.align 2, 0\n\ +_081174AC: .4byte REG_BG2PA\n\ +_081174B0: .4byte 0x02019000\n\ +_081174B4: .4byte gSpriteCoordOffsetY\n\ +_081174B8: .4byte gSpriteCoordOffsetX\n\ +_081174BC: .4byte REG_BG2X_L\n\ +_081174C0: .4byte 0x0fff0000\n\ +.syntax divided\n"); +} +#endif + +s16 sub_81174C4(s16 r0, s16 r1) +{ + s32 t = r0 * r1; + t /= 0x100; + return t; +} + +s16 sub_81174E0(s16 r0) +{ + s32 t = 0x10000; + return t / r0; +} + +void sub_81174F8(u8 r0) +{ + DisplayYesNoMenu(0x14, 0x8, 0x1); + sub_814AAF8(0x2D9E); + DoYesNoFuncWithChoice(r0, &gUnknown_083F8EB4); +} + +void sub_8117528(u8 taskid) +{ + if (!gPaletteFade.active) + { + SetVBlankCallback(NULL); + SetMainCallback2(&sub_8115384); + DestroyTask(taskid); + } +} + +void sub_811755C(u8 taskid) +{ + MenuZeroFillWindowRect(0x14, 0x8, 0x1A, 0xD); + MenuZeroFillScreen(); + BeginNormalPaletteFade(-0x1, 0x0, 0x0, 0x10, 0x0); + gPaletteFade.delayCounter = gPaletteFade.multipurpose2; + UpdatePaletteFade(); + gTasks[taskid].func = &sub_8117528; +} + +void sub_81175C0(u8 taskid) +{ + MenuZeroFillScreen(); + ScriptContext2_Disable(); + DestroyTask(taskid); +} + +void sub_81175DC(u8 taskid) +{ + gTasks[taskid].data[0]++; + if (!(gMain.newKeys & (A_BUTTON | B_BUTTON)) && gTasks[taskid].data[0] < 0x3D) + return; + gSpecialVar_0x8004 = 0x1; + MenuZeroFillScreen(); + ScriptContext2_Disable(); + DestroyTask(taskid); +} + +void sub_8117630(u8 taskid) +{ + u32 temp = gUnknown_083F8DF0[(gSpecialVar_0x8004 & 0x1) + (gSpecialVar_0x8004 >> 0x7 << 0x1)]; + ConvertIntToDecimalStringN(gStringVar1, temp, 0x2, 0x1); + StringExpandPlaceholders(gStringVar4, &gUnknown_081C40DF); + MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); + MenuPrint(gStringVar4, 0x1, 0xF); + gTasks[taskid].func = &sub_81174F8; +} + +void Task_Roulette_0(u8 taskid) +{ + s32 temp; + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskid].data[0xD], 0x1, 0x4); + StringExpandPlaceholders(gStringVar4, gOtherText_Coins); + MenuDrawTextWindow(0x0, 0x0, 0x9, 0x3); + MenuPrint_RightAligned(gStringVar4, 0x9, 0x1); + temp = gUnknown_083F8DF0[(gSpecialVar_0x8004 & 0x1) + (gSpecialVar_0x8004 >> 0x7 << 0x1)]; + ConvertIntToDecimalStringN(gStringVar1, temp, 0x2, 0x1); + if (gTasks[taskid].data[0xD] >= temp) + { + if ((gSpecialVar_0x8004 & 0x80) && (gSpecialVar_0x8004 & 0x1)) + { + MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); + MenuPrint(&gUnknown_081C4139, 0x1, 0xF); + sub_8116C34(taskid , &sub_8117630, 0xFFFF, 0x3); + } + else + { + StringExpandPlaceholders(gStringVar4, &gUnknown_081C40DF); + MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); + MenuPrint(gStringVar4, 0x1, 0xF); + gTasks[taskid].func = &sub_81174F8; + } + } + else + { + StringExpandPlaceholders(gStringVar4, &gUnknown_081C411C); + MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); + MenuPrint(gStringVar4, 0x1, 0xF); + gTasks[taskid].func = &sub_81175DC; + gTasks[taskid].data[0xD] = 0x0; + gTasks[taskid].data[0x0] = 0x0; + } +} + +void PlayRoulette() +{ + u8 taskid; + ScriptContext2_Enable(); + taskid = CreateTask(&Task_Roulette_0, 0x0); + gTasks[taskid].data[0xD] = gSaveBlock1.coins; +} + +void sub_8117838(u8 r0) +{ + if (!r0) + { + FreeAllSpritePalettes(); + LoadSpritePalettes(&gUnknown_083F9E30); + LZ77UnCompWram(gUnknown_083F92A8, ewram17000); + LZ77UnCompWram(gUnknown_083F90FC, ewram17E00); + LZ77UnCompWram(gUnknown_083F9D3C, ewram18000); + } + else + { + FreeAllSpritePalettes(); + } +} + +u8 sub_8117890(const struct SpriteTemplate *r0, u8 r1, u16 *r2) +{ + u16 temp; + u8 spriteid = CreateSprite(r0, 0x74, 0x50, r0->oam->y); + gSprites[spriteid].data0 = *r2; + gSprites[spriteid].data1 = r1; + gSprites[spriteid].coordOffsetEnabled = TRUE; + gSprites[spriteid].animPaused = TRUE; + gSprites[spriteid].affineAnimPaused = TRUE; + temp = *r2; + *r2 += 0x1E; + if (*r2 > 0x167) + *r2 = temp - 0x14A; + return spriteid; +} + +void sub_8117900(void) +{ + u8 i, j; + u8 spriteid; + struct SpriteSheet s; + LZ77UnCompWram(gUnknown_083F9F54.data, ewram); + s.data = ewram; + s.size = gUnknown_083F9F54.size; + s.tag = gUnknown_083F9F54.tag; + LoadSpriteSheet(&s); + LZ77UnCompWram(gUnknown_083F9F5C.data, ewram); + s.data = ewram; + s.size = gUnknown_083F9F5C.size; + s.tag = gUnknown_083F9F5C.tag; + LoadSpriteSheet(&s); + for (i = 0; i < 0x3; i++) + { + u8 o = i * 0x18; + for (j = 0; j < 0x4; j++) + { + spriteid = RDATA->var3C[0x1D + i * 0x4 + j] = + CreateSprite(&gSpriteTemplate_83FA07C[j], j * 0x18 + 0x94, o + 0x5C, 0x1E); + gSprites[spriteid].animPaused = TRUE; + o += 0x18; + if (o > 0x47) + o = 0x0; + } + } + for (i = 0x0; i < 0x4; i++) + { + spriteid = RDATA->var3C[0x29 + i] = + CreateSprite(&gSpriteTemplate_83F9FD4[i], (s16)(i * 0x18 + 0x94), 0x46, 0x1E); + gSprites[spriteid].animPaused = TRUE; + } + for (i = 0x0; i < 0x3; i++) + { + spriteid = RDATA->var3C[0x2D + i] = + CreateSprite(&gSpriteTemplate_83FA034[i], 0x7E, (s16)(i * 0x18 + 0x5C), 0x1E); + gSprites[spriteid].animPaused = TRUE; + } +} + +void unref_sub_8117A74(void) //destroy all sprites at 0x1D +{ + u8 i; + for (i = 0x0; i < 0xC; i++) + DestroySprite(&gSprites[RDATA->var3C[0x1D + i]]); +} + +void sub_8117AA8(u8 r0, u8 r1) +{ + u8 i; + switch(r0) + { + case 0x1: + for (i = 0x0; i < 0x13; i++) + gSprites[RDATA->var3C[0x1D + i]].invisible = TRUE; + break; + case 0x0: + for (i = 0x0; i < 0xC; i++) + { + if (!(RDATA->var08 & gUnknown_083F8D90[i].var04)) + gSprites[RDATA->var3C[0x1D + i]].invisible = FALSE; + else if(!(gUnknown_083F8D90[i].var02 == r1)) + gSprites[RDATA->var3C[0x1D + i]].invisible = TRUE; + else + gSprites[RDATA->var3C[0x1D + i]].invisible = FALSE; + } + for ( ; i < 0x13; i++) + gSprites[RDATA->var3C[0x1D + i]].invisible = FALSE; + break; + } +} + +void sub_8117BBC(void) +{ + u8 i; + for (i = 0x0; i < 0x6; i++) + { + RDATA->var3C[0x31 + i] = CreateSprite(&gSpriteTemplate_83FA40C, 0x74, 0x14, 0xA); + gSprites[RDATA->var3C[0x31 + i]].invisible = TRUE; + gSprites[RDATA->var3C[0x31 + i]].data0 = 0x1; + gSprites[RDATA->var3C[0x31 + i]].callback = &sub_81184CC; + gSprites[RDATA->var3C[0x31 + i]].oam.priority = 0x1; + StartSpriteAnim(&gSprites[RDATA->var3C[0x31 + i]], 0x8); + } +} + +void sub_8117C60(u8 r0, u8 r1) +{ + u8 i = 0x0; + if (r0) + { + for ( ; i < 0x6; i++) + gSprites[RDATA->var3C[0x31 + i]].invisible = TRUE; + } + else + { + for ( ; i < 0x6; i++) + { + if (!(RDATA->var0C[i]) || (i == r1)) + { + gSprites[RDATA->var3C[0x31 + i]].invisible = TRUE; + } + else + { + gSprites[RDATA->var3C[0x31 + i]].invisible = FALSE; + gSprites[RDATA->var3C[0x31 + i]].pos1.x = (gUnknown_083F8C00[RDATA->var0C[i]].var03 + 0x1) * 0x8 + 0x4; + gSprites[RDATA->var3C[0x31 + i]].pos1.y = (gUnknown_083F8C00[RDATA->var0C[i]].var04 + 0x1) * 0x8 + 0x3; + } + } + } +} + +void sub_8117D68(u8 r0) +{ + if (!r0) + { + gSprites[RDATA->var3C[0x30]].invisible = TRUE; + } + else + { + gSprites[RDATA->var3C[0x30]].invisible = FALSE; + gSprites[RDATA->var3C[0x30]].pos1.x = (gUnknown_083F8C00[r0].var03 + 0x2) * 0x8; + gSprites[RDATA->var3C[0x30]].pos1.y = (gUnknown_083F8C00[r0].var04 + 0x2) * 0x8; + } +} + +void sub_8117DF4(void) +{ + u8 i, j; + u16 k; + struct SpriteSheet s; + LZ77UnCompWram(gUnknown_083F9EE8.data, ewram); + s.data = ewram; + s.size = gUnknown_083F9EE8.size; + s.tag = gUnknown_083F9EE8.tag; + LoadSpriteSheet(&s); + k = 0xF; + for (i = 0x0; i < 0x3; i++) + { + for (j = 0x0; j < 0x4; j++) + { + u8 spriteid; + spriteid = + RDATA->var3C[0x7 + i * 0x4 + j] = sub_8117890(&gSpriteTemplate_83FA0DC[i * 0x4 + j], 0x28, &k); + gSprites[spriteid].animPaused = TRUE; + gSprites[spriteid].affineAnimPaused = TRUE; + } + } +} + +#ifdef NONMATCHING +void sub_8117E98(struct Sprite *sprite) +{ + struct OamMatrix *m; + u8 p; + u16 angle; + s16 cos, sin, z; + u32 cos32; + angle = RDATA->var24 + sprite->data0; + z = angle; + if (z > 359) + angle = z - 360; + sin = Sin2(angle); + cos = Cos2(angle); + sprite->pos2.x = sin * sprite->data1 >> 0xC; + sprite->pos2.y = -cos * sprite->data1 >> 0xC; + p = sprite->oam.matrixNum; + sin = sin / 0x10; + m = &gOamMatrices[p]; + cos32 = cos / 0x10; + + m->d = cos32; + m->a = cos32; + m->b = sin; + m->c = -sin; +} +#else +__attribute__((naked)) +void sub_8117E98(struct Sprite *r0) +{ +asm(".syntax unified\n\ +push {r4-r6,lr}\n\ +adds r6, r0, 0\n\ +ldr r0, _08117F1C @ =0x02019000\n\ +ldrh r1, [r6, 0x2E]\n\ +ldrh r0, [r0, 0x24]\n\ +adds r1, r0\n\ +lsls r1, 16\n\ +lsrs r4, r1, 16\n\ +asrs r1, 16\n\ +ldr r0, _08117F20 @ =0x00000167\n\ +cmp r1, r0\n\ +ble _08117EB8\n\ +ldr r2, _08117F24 @ =0xfffffe98\n\ +adds r0, r1, r2\n\ +lsls r0, 16\n\ +lsrs r4, r0, 16\n\ +_08117EB8:\n\ +adds r0, r4, 0\n\ +bl Sin2\n\ +lsls r0, 16\n\ +lsrs r5, r0, 16\n\ +adds r0, r4, 0\n\ +bl Cos2\n\ +lsls r2, r5, 16\n\ +asrs r2, 16\n\ +movs r3, 0x30\n\ +ldrsh r1, [r6, r3]\n\ +muls r1, r2\n\ +asrs r1, 12\n\ +strh r1, [r6, 0x24]\n\ +lsls r0, 16\n\ +asrs r4, r0, 16\n\ +negs r1, r4\n\ +movs r3, 0x30\n\ +ldrsh r0, [r6, r3]\n\ +muls r0, r1\n\ +asrs r0, 12\n\ +strh r0, [r6, 0x26]\n\ +ldrb r0, [r6, 0x3]\n\ +lsls r0, 26\n\ +lsrs r3, r0, 27\n\ +cmp r2, 0\n\ +bge _08117EF2\n\ +adds r2, 0xF\n\ +_08117EF2:\n\ +lsls r0, r2, 12\n\ +lsrs r5, r0, 16\n\ +ldr r1, _08117F28 @ =gOamMatrices\n\ +lsls r0, r3, 3\n\ +adds r1, r0, r1\n\ +adds r0, r4, 0\n\ +cmp r0, 0\n\ +bge _08117F04\n\ +adds r0, 0xF\n\ +_08117F04:\n\ +asrs r0, 4\n\ +strh r0, [r1, 0x6]\n\ +strh r0, [r1]\n\ +strh r5, [r1, 0x2]\n\ +lsls r0, r5, 16\n\ +asrs r0, 16\n\ +negs r0, r0\n\ +strh r0, [r1, 0x4]\n\ +pop {r4-r6}\n\ +pop {r0}\n\ +bx r0\n\ +.align 2, 0\n\ +_08117F1C: .4byte 0x02019000\n\ +_08117F20: .4byte 0x00000167\n\ +_08117F24: .4byte 0xfffffe98\n\ +_08117F28: .4byte gOamMatrices\n\ +.syntax divided\n"); +} +#endif + +void sub_8117F2C(void) +{ + u8 i; + for (i = 0x0; i < 0x5; i++) + { + struct SpriteSheet s; + LZ77UnCompWram(gUnknown_083FA21C[i].data, ewram); + s.data = ewram; + s.size = gUnknown_083FA21C[i].size; + s.tag = gUnknown_083FA21C[i].tag; + LoadSpriteSheet(&s); + } + RDATA->var3C[0x14] = CreateSprite(&gSpriteTemplate_83FA2B0, 0xD0, 0x10, 0x4); + gSprites[RDATA->var3C[0x14]].animPaused = TRUE; + for (i = 0x0; i < 0x4; i++) + { + RDATA->var3C[0x15 + i] = CreateSprite(&gSpriteTemplate_83FA2C8, (s16)(i * 0x8 + 0xC4), 0x18, 0x0); + gSprites[RDATA->var3C[0x15 + i]].invisible = TRUE; + gSprites[RDATA->var3C[0x15 + i]].animPaused = TRUE; + } + RDATA->var3C[0x19] = CreateSprite(&gSpriteTemplate_83FA2E0, 0x78, 0x44, 0x4); + gSprites[RDATA->var3C[0x19]].animPaused = TRUE; + for (i = 0x0; i < 0x3; i++) + { + RDATA->var3C[0x1A + i] = CreateSprite(&gSpriteTemplate_83FA2F8, (s16)(i * 0x10 + 0xC0), 0x24, 0x4); + gSprites[RDATA->var3C[0x1A + i]].invisible = TRUE; + gSprites[RDATA->var3C[0x1A + i]].animPaused = TRUE; + } + RDATA->var3C[0x30] = CreateSprite(&gSpriteTemplate_83FA310, 0x98, 0x60, 0x9); + gSprites[RDATA->var3C[0x30]].oam.priority = 0x1; + gSprites[RDATA->var3C[0x30]].animPaused = TRUE; + gSprites[RDATA->var3C[0x30]].invisible = TRUE; +} + +void sub_81180F4(u16 r0) +{ + u8 i; + u16 d = 1000; + bool8 v = FALSE; + for (i = 0x0; i < 0x4; i++) + { + u8 t = r0 / d; + gSprites[RDATA->var3C[0x15 + i]].invisible = TRUE; + if (t > 0x0 || v || i == 0x3) + { + gSprites[RDATA->var3C[0x15 + i]].invisible = FALSE; + gSprites[RDATA->var3C[0x15 + i]].oam.tileNum = + gSprites[RDATA->var3C[0x15 + i]].sheetTileStart + + (*gSprites[RDATA->var3C[0x15 + i]].anims + t)->type; + v = TRUE; + } + r0 = r0 % d; + d = d / 10; + } +} + +#ifdef NONMATCHING +u8 sub_81181E8(u8 r0) +{ + u8 t[0x5]; + memcpy(&t, &gUnknown_083FA608, 0x5); + if (r0 > 0x13) + r0 = 0x0; + switch(gUnknown_083F8C00[r0].var01_0) + { + case 0x3: + r0 = r0 / 0x5 - 0x1; + if ((u32)RDATA->var16[r0] < 0x4) + return t[0x1 + RDATA->var16[r0]]; // couldn't recreate redundant loads + break; + case 0x4: + r0 = r0 - 0x1; + if (RDATA->var12[r0] < 0x3) + return t[0x2 + RDATA->var12[r0]]; + break; + case 0xC: + if (!(RDATA->var08 & gUnknown_083F8C00[r0].var08)) + return t[0x4]; + break; + } + return 0x0; +} +#else +__attribute__((naked)) +u8 sub_81181E8(u8 r0) +{ +asm(".syntax unified\n\ +push {r4,lr}\n\ +sub sp, 0x8\n\ +lsls r0, 24\n\ +lsrs r4, r0, 24\n\ +ldr r1, _08118220 @ =gUnknown_083FA608\n\ +mov r0, sp\n\ +movs r2, 0x5\n\ +bl memcpy\n\ +cmp r4, 0x13\n\ +bls _08118200\n\ +movs r4, 0\n\ +_08118200:\n\ +ldr r3, _08118224 @ =gUnknown_083F8C00\n\ +lsls r0, r4, 2\n\ +adds r0, r4\n\ +lsls r2, r0, 2\n\ +adds r0, r2, r3\n\ +ldrb r0, [r0, 0x1]\n\ +lsls r0, 28\n\ +lsrs r0, 28\n\ +cmp r0, 0x4\n\ +beq _08118254\n\ +cmp r0, 0x4\n\ +bgt _08118228\n\ +cmp r0, 0x3\n\ +beq _0811822E\n\ +b _08118290\n\ +.align 2, 0\n\ +_08118220: .4byte gUnknown_083FA608\n\ +_08118224: .4byte gUnknown_083F8C00\n\ +_08118228:\n\ +cmp r0, 0xC\n\ +beq _08118274\n\ +b _08118290\n\ +_0811822E:\n\ +adds r0, r4, 0\n\ +movs r1, 0x5\n\ +bl __udivsi3\n\ +subs r0, 0x1\n\ +lsls r0, 24\n\ +lsrs r4, r0, 24\n\ +ldr r0, _08118250 @ =0x02019000\n\ +adds r0, 0x16\n\ +adds r1, r4, r0\n\ +ldrb r0, [r1]\n\ +cmp r0, 0x3\n\ +bhi _08118290\n\ +ldrb r0, [r1]\n\ +adds r0, 0x1\n\ +b _0811826A\n\ +.align 2, 0\n\ +_08118250: .4byte 0x02019000\n\ +_08118254:\n\ +subs r0, r4, 0x1\n\ +lsls r0, 24\n\ +lsrs r4, r0, 24\n\ +ldr r0, _08118270 @ =0x02019000\n\ +adds r0, 0x12\n\ +adds r1, r4, r0\n\ +ldrb r0, [r1]\n\ +cmp r0, 0x2\n\ +bhi _08118290\n\ +ldrb r0, [r1]\n\ +adds r0, 0x2\n\ +_0811826A:\n\ +add r0, sp\n\ +ldrb r0, [r0]\n\ +b _08118292\n\ +.align 2, 0\n\ +_08118270: .4byte 0x02019000\n\ +_08118274:\n\ +ldr r1, _0811828C @ =0x02019000\n\ +adds r0, r3, 0\n\ +adds r0, 0x8\n\ +adds r0, r2, r0\n\ +ldr r1, [r1, 0x8]\n\ +ldr r0, [r0]\n\ +ands r1, r0\n\ +cmp r1, 0\n\ +bne _08118290\n\ +mov r0, sp\n\ +ldrb r0, [r0, 0x4]\n\ +b _08118292\n\ +.align 2, 0\n\ +_0811828C: .4byte 0x02019000\n\ +_08118290:\n\ +movs r0, 0\n\ +_08118292:\n\ +add sp, 0x8\n\ +pop {r4}\n\ +pop {r1}\n\ +bx r1\n\ +.syntax divided\n"); +} +#endif + +void sub_811829C(u8 r0) +{ + struct Sprite *s = &gSprites[RDATA->var3C[0x19]]; + s->animCmdIndex = sub_81181E8(r0); + s->oam.tileNum = + s->sheetTileStart + + (*s->anims + s->animCmdIndex)->type; +} + +void sub_81182F8(u8 r0) +{ + u8 i; + u8 t = 0x0; + if (RDATA->var19 == 0x1) + t = 0x2; + switch(r0) + { + case 0x6: + for (i = 0x0; i < 0x3; i++) + { + gSprites[RDATA->var3C[0x1A + i]].invisible = FALSE; + gSprites[RDATA->var3C[0x1A + i]].oam.tileNum = + gSprites[RDATA->var3C[0x1A + i]].sheetTileStart + + (*gSprites[RDATA->var3C[0x1A + i]].anims)->type; + } + break; + case 0x5: + gSprites[RDATA->var3C[0x1C]].oam.tileNum = + gSprites[RDATA->var3C[0x1C]].sheetTileStart + + (*gSprites[RDATA->var3C[0x1C]].anims + t + 0x1)->type; + break; + case 0x4: + gSprites[RDATA->var3C[0x1C]].oam.tileNum = + gSprites[RDATA->var3C[0x1C]].sheetTileStart + + (*gSprites[RDATA->var3C[0x1C]].anims + t + 0x2)->type; + break; + case 0x3: + gSprites[RDATA->var3C[0x1B]].oam.tileNum = + gSprites[RDATA->var3C[0x1B]].sheetTileStart + + (*gSprites[RDATA->var3C[0x1B]].anims + t + 0x1)->type; + break; + case 0x2: + gSprites[RDATA->var3C[0x1B]].oam.tileNum = + gSprites[RDATA->var3C[0x1B]].sheetTileStart + + (*gSprites[RDATA->var3C[0x1B]].anims + t + 0x2)->type; + break; + case 0x1: + gSprites[RDATA->var3C[0x1A]].oam.tileNum = + gSprites[RDATA->var3C[0x1A]].sheetTileStart + + (*gSprites[RDATA->var3C[0x1A]].anims + t + 0x1)->type; + break; + case 0x0: + default: + for (i = 0x0; i < 0x3; i++) + { + gSprites[RDATA->var3C[0x1A + i]].oam.tileNum = + gSprites[RDATA->var3C[0x1A + i]].sheetTileStart + + (*gSprites[RDATA->var3C[0x1A + i]].anims + t + 2)->type; + } + } +} + +void sub_81184CC(struct Sprite *sprite) +{ + sprite->pos2.x = RDATA->var26; +} + +void sub_81184D8(void) +{ + u8 spriteid; + struct SpriteSheet s; + LZ77UnCompWram(gUnknown_083FA42C.data, ewram); + s.data = ewram; + s.size = gUnknown_083FA42C.size; + s.tag = gUnknown_083FA42C.tag; + LoadSpriteSheet(&s); + spriteid = CreateSprite(&gSpriteTemplate_83FA434, 0x74, 0x50, 0x51); + gSprites[spriteid].data0 = RDATA->var24; + gSprites[spriteid].data1 = 0x0; + gSprites[spriteid].animPaused = TRUE; + gSprites[spriteid].affineAnimPaused = TRUE; + gSprites[spriteid].coordOffsetEnabled = TRUE; +} + +void sub_8118554(struct Sprite *sprite) +{ + u32 t = sprite->oam.matrixNum; + struct OamMatrix *m = &gOamMatrices[0]; + m[t].d = RDATA->var2C.a; + m[t].a = RDATA->var2C.a; + m[t].b = RDATA->var2C.b; + m[t].c = RDATA->var2C.c; +} + +void sub_811857C(void) +{ + u8 i; + for (i = 0x0; i < 0x6; i++) + { + u8 spriteid = + RDATA->var3C[i] = CreateSprite(&gSpriteTemplate_83FA40C, 0x74, 0x50, 0x39 - i); + if (spriteid != 0x40) + { + gSprites[RDATA->var3C[i]].invisible = TRUE; + gSprites[RDATA->var3C[i]].coordOffsetEnabled = TRUE; + } + } +} +/* +void sub_81185E8(void) +{ + u8 t = RDATA->var3C[0x0]; + u8 i; + for (i = 0x0; i < 0x6; i++) + { + u8 j; + gSprites[t].invisible = TRUE; + gSprites[t].callback = &SpriteCallbackDummy; + StartSpriteAnim(&gSprites[t], 0x0); + for (j = 0x0; j < 0x8; j++) + *(&gSprites[t].data0 + j) = 0x0; // zero allocation not quite right + t++; + } +} */ -- cgit v1.2.3 From 5753d1b615345ad55d926da75d8680181bbda01a Mon Sep 17 00:00:00 2001 From: M Date: Sun, 19 Nov 2017 23:23:59 +0100 Subject: decompiled up to sub_811889C --- src/roulette.c | 195 ++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 164 insertions(+), 31 deletions(-) (limited to 'src/roulette.c') diff --git a/src/roulette.c b/src/roulette.c index 1661cce03..19fc3d604 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -19,7 +19,7 @@ #include "m4a.h" #include "rng.h" #include "game_stat.h" -#include "rom4.h" +#include "overworld.h" #include "string_util.h" #include "field_fadetransition.h" #include "script.h" @@ -138,6 +138,10 @@ extern const u8 gUnknown_083FA608[0x5]; extern const struct SpriteSheet gUnknown_083FA42C; extern const struct SpriteTemplate gSpriteTemplate_83FA434; +extern void (*gFieldCallback)(void); + +extern struct MusicPlayerInfo gMPlay_SE1; +extern struct MusicPlayerInfo gMPlay_SE2; void sub_8117434(void); @@ -204,18 +208,18 @@ void sub_8116B40(u8); void dp01t_12_3_battle_menu(u8); -extern u8 ewram[]; +extern u8 gSharedMem[]; -#define ewram17000 ((u16 *) (ewram + 0x17000)) //money stuff? -#define ewram17E00 ((u16 *) (ewram + 0x17E00)) -#define ewram17800 ((u16 *) (ewram + 0x17800)) -#define ewram18000 ((u16 *) (ewram + 0x18000)) -#define ewram18800 ((u16 *) (ewram + 0x18800)) -#define ewram189a0 ((u16 *) (ewram + 0x189a0)) -#define ewram18a20 ((u16 *) (ewram + 0x18a20)) -#define ewram18a32 ((u16 *) (ewram + 0x18A32)) -#define ewram18a80 ((u16 *) (ewram + 0x18a80)) -#define RDATA ((struct RData *) (ewram + 0x19000)) +#define ewram17000 ((u16 *) (gSharedMem + 0x17000)) //money stuff? +#define ewram17E00 ((u16 *) (gSharedMem + 0x17E00)) +#define ewram17800 ((u16 *) (gSharedMem + 0x17800)) +#define ewram18000 ((u16 *) (gSharedMem + 0x18000)) +#define ewram18800 ((u16 *) (gSharedMem + 0x18800)) +#define ewram189a0 ((u16 *) (gSharedMem + 0x189a0)) +#define ewram18a20 ((u16 *) (gSharedMem + 0x18a20)) +#define ewram18a32 ((u16 *) (gSharedMem + 0x18A32)) +#define ewram18a80 ((u16 *) (gSharedMem + 0x18a80)) +#define RDATA ((struct RData *) (gSharedMem + 0x19000)) #define S16TOPOSFLOAT(val) \ ({ \ @@ -597,7 +601,7 @@ void sub_8115384(void) case 0x3: sub_8115238(); sub_80F9020(); - LZ77UnCompWram(&gUnknown_083F88BC, (void *)(ewram + 0x18800)); + LZ77UnCompWram(&gUnknown_083F88BC, (void *)(ewram18800)); LZ77UnCompVram(&gUnknown_083F8A60, (void *)(VRAM + 0x3000)); gMain.state++; break; @@ -2793,8 +2797,8 @@ u8 sub_8117890(const struct SpriteTemplate *r0, u8 r1, u16 *r2) { u16 temp; u8 spriteid = CreateSprite(r0, 0x74, 0x50, r0->oam->y); - gSprites[spriteid].data0 = *r2; - gSprites[spriteid].data1 = r1; + gSprites[spriteid].data[0] = *r2; + gSprites[spriteid].data[1] = r1; gSprites[spriteid].coordOffsetEnabled = TRUE; gSprites[spriteid].animPaused = TRUE; gSprites[spriteid].affineAnimPaused = TRUE; @@ -2810,13 +2814,13 @@ void sub_8117900(void) u8 i, j; u8 spriteid; struct SpriteSheet s; - LZ77UnCompWram(gUnknown_083F9F54.data, ewram); - s.data = ewram; + LZ77UnCompWram(gUnknown_083F9F54.data, gSharedMem); + s.data = gSharedMem; s.size = gUnknown_083F9F54.size; s.tag = gUnknown_083F9F54.tag; LoadSpriteSheet(&s); - LZ77UnCompWram(gUnknown_083F9F5C.data, ewram); - s.data = ewram; + LZ77UnCompWram(gUnknown_083F9F5C.data, gSharedMem); + s.data = gSharedMem; s.size = gUnknown_083F9F5C.size; s.tag = gUnknown_083F9F5C.tag; LoadSpriteSheet(&s); @@ -2886,7 +2890,7 @@ void sub_8117BBC(void) { RDATA->var3C[0x31 + i] = CreateSprite(&gSpriteTemplate_83FA40C, 0x74, 0x14, 0xA); gSprites[RDATA->var3C[0x31 + i]].invisible = TRUE; - gSprites[RDATA->var3C[0x31 + i]].data0 = 0x1; + gSprites[RDATA->var3C[0x31 + i]].data[0] = 0x1; gSprites[RDATA->var3C[0x31 + i]].callback = &sub_81184CC; gSprites[RDATA->var3C[0x31 + i]].oam.priority = 0x1; StartSpriteAnim(&gSprites[RDATA->var3C[0x31 + i]], 0x8); @@ -2938,8 +2942,8 @@ void sub_8117DF4(void) u8 i, j; u16 k; struct SpriteSheet s; - LZ77UnCompWram(gUnknown_083F9EE8.data, ewram); - s.data = ewram; + LZ77UnCompWram(gUnknown_083F9EE8.data, gSharedMem); + s.data = gSharedMem; s.size = gUnknown_083F9EE8.size; s.tag = gUnknown_083F9EE8.tag; LoadSpriteSheet(&s); @@ -3069,8 +3073,8 @@ void sub_8117F2C(void) for (i = 0x0; i < 0x5; i++) { struct SpriteSheet s; - LZ77UnCompWram(gUnknown_083FA21C[i].data, ewram); - s.data = ewram; + LZ77UnCompWram(gUnknown_083FA21C[i].data, gSharedMem); + s.data = gSharedMem; s.size = gUnknown_083FA21C[i].size; s.tag = gUnknown_083FA21C[i].tag; LoadSpriteSheet(&s); @@ -3317,14 +3321,14 @@ void sub_81184D8(void) { u8 spriteid; struct SpriteSheet s; - LZ77UnCompWram(gUnknown_083FA42C.data, ewram); - s.data = ewram; + LZ77UnCompWram(gUnknown_083FA42C.data, gSharedMem); + s.data = gSharedMem; s.size = gUnknown_083FA42C.size; s.tag = gUnknown_083FA42C.tag; LoadSpriteSheet(&s); spriteid = CreateSprite(&gSpriteTemplate_83FA434, 0x74, 0x50, 0x51); - gSprites[spriteid].data0 = RDATA->var24; - gSprites[spriteid].data1 = 0x0; + gSprites[spriteid].data[0] = RDATA->var24; + gSprites[spriteid].data[1] = 0x0; gSprites[spriteid].animPaused = TRUE; gSprites[spriteid].affineAnimPaused = TRUE; gSprites[spriteid].coordOffsetEnabled = TRUE; @@ -3354,7 +3358,7 @@ void sub_811857C(void) } } } -/* + void sub_81185E8(void) { u8 t = RDATA->var3C[0x0]; @@ -3366,8 +3370,137 @@ void sub_81185E8(void) gSprites[t].callback = &SpriteCallbackDummy; StartSpriteAnim(&gSprites[t], 0x0); for (j = 0x0; j < 0x8; j++) - *(&gSprites[t].data0 + j) = 0x0; // zero allocation not quite right + gSprites[t].data[j] = 0x0; t++; } } -*/ + +s16 sub_811866C(struct Sprite *sprite) +{ + if (RDATA->var24 > sprite->data[0x3]) + { + sprite->data[0x6] = 360 - RDATA->var24 + sprite->data[0x3]; + if (sprite->data[0x6] > 359) + sprite->data[0x6] -=360; + } + else + sprite->data[0x6] = sprite->data[0x3] - RDATA->var24; + return sprite->data[0x6]; +} + +u8 sub_81186B8(struct Sprite *sprite) +{ + RDATA->var7E = (u8)(((float)(s16)sub_811866C(sprite)) / 30.0f); + return RDATA->var7E; +} + +s16 sub_81186E8(struct Sprite *sprite) +{ + s16 t = sub_811866C(sprite) % 30; + u16 z; + if (t == 0xE) + { + z = 0x0; + return sprite->data[0x2] = z; + } + else if (t > 0xD) + { + z = (u16)(0x2B - t); + return sprite->data[0x2] = z; + } + else + { + z = (u16)(0xE - t); + return sprite->data[0x2] = z; + } +} + +void sub_8118724(struct Sprite *sprite) +{ + s16 sin, cos; + RDATA->var8C += RDATA->var90; + RDATA->var88 += RDATA->var8C; + if (RDATA->var88 >= 360) + RDATA->var88 -= 360.0f; + else + if (RDATA->var88 < 0.0f) + RDATA->var88 += 360.0f; + sprite->data[0x3] = RDATA->var88; + RDATA->var98 += RDATA->var9C; + RDATA->var94 += RDATA->var98; + sprite->data[0x4] = RDATA->var94; + sin = Sin2(sprite->data[0x3]); + cos = Cos2(sprite->data[0x3]); + sprite->pos2.x = sin * sprite->data[0x4] >> 0xC; + sprite->pos2.y = -cos * sprite->data[0x4] >> 0xC; + if (IsSEPlaying()) + { + m4aMPlayPanpotControl(&gMPlay_SE1, 0xFFFF, sprite->pos2.x); + m4aMPlayPanpotControl(&gMPlay_SE2, 0xFFFF, sprite->pos2.x); + } +} + +void sub_8118834(struct Sprite *sprite) +{ + s16 sin, cos; + sprite->data[0x3] = RDATA->var24 + sprite->data[0x6]; + if (sprite->data[0x3] > 359) + sprite->data[0x3] -= 360; + sin = Sin2(sprite->data[0x3]); + cos = Cos2(sprite->data[0x3]); + sprite->pos2.x = sin * sprite->data[0x4] >> 0xC; + sprite->pos2.y = -cos * sprite->data[0x4] >> 0xC; + sprite->pos2.y += gSpriteCoordOffsetY; +} + +void sub_811889C(struct Sprite *sprite) +{ + sub_8118724(sprite); + sprite->data[0x2]++; + if ((u16)(sprite->data[0x4] + 0x84) > 0xD4) + sprite->invisible = TRUE; + else + sprite->invisible = FALSE; + if (!(sprite->data[0x2] < 30)) + { + if (!sprite->data[0x0]) + { + if (RDATA->var94 <= RDATA->varA0 - 2.0f) + { + RDATA->var7D = 0xFF; + RDATA->var03_7 = 0x0; + StartSpriteAnim(sprite, sprite->animCmdIndex + 0x3); + sub_81186B8(sprite); + sprite->data[0x4] = 30; + sub_811866C(sprite); + sprite->data[0x6] = (sprite->data[0x6] / 30) * 30 + 0xF; + sprite->callback = &sub_8118834; + m4aSongNumStartOrChange(0x47); + RDATA->var9C = RDATA->var98 = 0.0f; + RDATA->var8C = -1.0f; + } + } + else + { + if (RDATA->var94 >= RDATA->varA0 - 2.0f) + { + RDATA->var7D = 0xFF; + RDATA->var03_7 = 0x0; + StartSpriteAnim(sprite, sprite->animCmdIndex + 0x3); + sub_81186B8(sprite); + sprite->data[0x4] = 30; + sub_811866C(sprite); + sprite->data[0x6] = (sprite->data[0x6] / 30) * 30 + 0xF; + sprite->callback = &sub_8118834; + m4aSongNumStartOrChange(0x47); + RDATA->var9C = RDATA->var98 = 0.0f; + RDATA->var8C = -1.0f; + } + } + } +} + +void sub_81189A8(struct Sprite *sprite) +{ + +} -- cgit v1.2.3 From 50a9e8f0f514aadce63626253ddd230a4aba1e49 Mon Sep 17 00:00:00 2001 From: Made-s Date: Mon, 20 Nov 2017 14:29:48 +0100 Subject: begin decompiling sub_81189A8 --- src/roulette.c | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) (limited to 'src/roulette.c') diff --git a/src/roulette.c b/src/roulette.c index 19fc3d604..ef9f8507d 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -244,7 +244,9 @@ struct Unkg083F8DF4 u8 var02; u8 var03; u8 var04; - u8 v[0x13]; + u8 v[0x8]; + u16 var0C; + u8 v1[0x9]; s16 var18; s16 var1A; //is this signed or not ? u8 v2[0x4]; @@ -3502,5 +3504,34 @@ void sub_811889C(struct Sprite *sprite) void sub_81189A8(struct Sprite *sprite) { - + float f0, f1, f2; + sub_8118724(sprite); + switch(sprite->data[0x3]) + { + case 0: + if (sprite->data[0x0]) + return; + f0 = ((float)sprite->data[0x8]); + f1 = ((f0 * (float)(gUnknown_083F8DF4[RDATA->var04_0].var01)) + (float)(gUnknown_083F8DF4[RDATA->var04_0].var02 - 0x1)); + f2 = ((float)gUnknown_083F8DF4[RDATA->var04_0].var0C) / f0; + break; + case 180: + if (!sprite->data[0x0]) + return; + f0 = ((float)sprite->data[0x8]); + f1 = ((f0 * (float)(gUnknown_083F8DF4[RDATA->var04_0].var01)) + (float)(gUnknown_083F8DF4[RDATA->var04_0].var02 - 0x1)); + f2 = ((float)gUnknown_083F8DF4[RDATA->var04_0].var0C) / f0; + break; + default: return; + } + RDATA->varA0 = RDATA->var94; + RDATA->var98 = f2; + RDATA->var9C = -((f2 + f2) / f1 + (2.0f / (f1 * f1))); + RDATA->var8C = 0.0f; + sprite->animPaused = FALSE; + sprite->animNum = 0x0; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; + sprite->callback = &sub_811889C; + sprite->data[0x2] = 0x0; } -- cgit v1.2.3 From ba4b0d8dd2587667c04e6cc63e31afe16fba1381 Mon Sep 17 00:00:00 2001 From: Made-s Date: Thu, 23 Nov 2017 14:50:16 +0100 Subject: start decompiling ub_8118DE4 --- src/roulette.c | 264 +++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 228 insertions(+), 36 deletions(-) (limited to 'src/roulette.c') diff --git a/src/roulette.c b/src/roulette.c index ef9f8507d..0250857a2 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -205,6 +205,11 @@ void sub_81157AC(u8); void sub_8116B40(u8); +void sub_8119224(struct Sprite *); +void sub_81193D4(struct Sprite *); +void sub_811952C(struct Sprite *); + + void dp01t_12_3_battle_menu(u8); @@ -221,14 +226,6 @@ extern u8 gSharedMem[]; #define ewram18a80 ((u16 *) (gSharedMem + 0x18a80)) #define RDATA ((struct RData *) (gSharedMem + 0x19000)) -#define S16TOPOSFLOAT(val) \ -({ \ - s16 v = (val); \ - float f = (float)v; \ - if(v < 0) f += 65536.0f; \ - f; \ -}) - struct OamMatrix { s16 a; @@ -244,12 +241,12 @@ struct Unkg083F8DF4 u8 var02; u8 var03; u8 var04; - u8 v[0x8]; + u8 v[0x7]; u16 var0C; - u8 v1[0x9]; - s16 var18; - s16 var1A; //is this signed or not ? - u8 v2[0x4]; + u8 v1[0xA]; + u16 var18; + u16 var1A; //is this signed or not ? + float var1C; }; struct RData /* ewram + 0x19000 */ @@ -1035,15 +1032,12 @@ u8 sub_8115F58(u16 r0, u16 r1) void sub_8116100(u8 taskid) { u8 randf; - u16 floatr; - float tempf; - u32 zzz; s8 randfinal; s8 r5; u16 g; u16 rand; u16 randmod; - s16 angles[0x4]; // angles in 90 degree steps + u16 angles[0x4]; // angles in 90 degree steps u8 zero = 0x0; memcpy(angles, &gUnknown_083F8ECE, 0x8); rand = Random(); @@ -1064,20 +1058,18 @@ void sub_8116100(u8 taskid) r5 = (1 - r5) * 2; g = (&gUnknown_083F8DF4[RDATA->var04_0])->var1A; RDATA->var80 = (g + randfinal); - tempf = S16TOPOSFLOAT(g + randfinal); - // some register differences here - floatr = tempf / 5.0f; - zzz = floatr * 3; - RDATA->var82 = floatr * 3; - RDATA->var84 = floatr; - RDATA->var86 = floatr; // - RDATA->var88 = S16TOPOSFLOAT(angles[(rand & 0x1) + r5]); - RDATA->var8C = S16TOPOSFLOAT((&gUnknown_083F8DF4[RDATA->var04_0])->var18); - RDATA->var90 = ((RDATA->var8C * 0.5f) - RDATA->var8C) / S16TOPOSFLOAT(zzz); + g = ((float)(u16)(g + randfinal)) / 5.0f; + RDATA->var82 = g * 3; + RDATA->var84 = g; + RDATA->var86 = g; + // + RDATA->var88 = (float)(angles[(rand & 0x1) + r5]); + RDATA->var8C = (float)((&gUnknown_083F8DF4[RDATA->var04_0])->var18); + RDATA->var90 = ((RDATA->var8C * 0.5f) - RDATA->var8C) / (float)(u16)(g * 3); RDATA->var94 = 68.0f; RDATA->var9C = 0.0f; - RDATA->var98 = -(8.0f / S16TOPOSFLOAT(zzz)); + RDATA->var98 = -(8.0f / (float)(u16)(g * 3)); RDATA->varA0 = 36.0f; gTasks[taskid].func = &sub_8116308; } @@ -3505,22 +3497,35 @@ void sub_811889C(struct Sprite *sprite) void sub_81189A8(struct Sprite *sprite) { float f0, f1, f2; + struct Unkg083F8DF4 *p; sub_8118724(sprite); switch(sprite->data[0x3]) { case 0: - if (sprite->data[0x0]) + if (sprite->data[0x0] != 0x1) + { + f0 = ((float)sprite->data[0x7]); + p = &gUnknown_083F8DF4[0]; + f1 = (f0 * ((float)(s32)p[RDATA->var04_0].var01) + (float)((s32)p[RDATA->var04_0].var02 - 0x1)); + f2 = (f0 / ((float)(s32)p[RDATA->var04_0].var0C)); + } + else + { return; - f0 = ((float)sprite->data[0x8]); - f1 = ((f0 * (float)(gUnknown_083F8DF4[RDATA->var04_0].var01)) + (float)(gUnknown_083F8DF4[RDATA->var04_0].var02 - 0x1)); - f2 = ((float)gUnknown_083F8DF4[RDATA->var04_0].var0C) / f0; + } break; case 180: - if (!sprite->data[0x0]) + if (sprite->data[0x0] != 0x0) + { + f0 = ((float)sprite->data[0x7]); + p = &gUnknown_083F8DF4[0]; + f1 = (f0 * ((float)(s32)p[RDATA->var04_0].var01) + (float)((s32)p[RDATA->var04_0].var02 - 0x1)); + f2 = -(f0 / ((float)(s32)p[RDATA->var04_0].var0C)); + } + else + { return; - f0 = ((float)sprite->data[0x8]); - f1 = ((f0 * (float)(gUnknown_083F8DF4[RDATA->var04_0].var01)) + (float)(gUnknown_083F8DF4[RDATA->var04_0].var02 - 0x1)); - f2 = ((float)gUnknown_083F8DF4[RDATA->var04_0].var0C) / f0; + } break; default: return; } @@ -3535,3 +3540,190 @@ void sub_81189A8(struct Sprite *sprite) sprite->callback = &sub_811889C; sprite->data[0x2] = 0x0; } + +void sub_8118B30(struct Sprite *sprite) +{ + sprite->pos2.y = (s32)(((float)sprite->data[0x2]) * 0.05f * ((float)sprite->data[0x2])) - 45; + sprite->data[0x2]++; + if (sprite->data[0x2] > 29 && sprite->pos2.y >= 0) + { + RDATA->var7D = 0xFF; + RDATA->var03_7 = FALSE; + StartSpriteAnim(sprite, sprite->animCmdIndex + 0x3); + sub_81186B8(sprite); + sprite->data[0x4] = 30; + sub_811866C(sprite); + sprite->data[0x6] = (sprite->data[0x6] / 30) * 30 + 0xF; + sprite->callback = &sub_8118834; + m4aSongNumStartOrChange(0x47); + RDATA->var03_6 = TRUE; + } +} + +void sub_8118BD8(struct Sprite *sprite) +{ + if (sprite->data[0x2]++ < 45) + { + sprite->pos2.y--; + if(sprite->data[0x2] == 45) + { + if (gSprites[RDATA->var3C[0x37]].animCmdIndex == 0x1) + sprite->pos2.y++; + } + } + else + { + if (sprite->data[0x2] < sprite->data[0x7]) + { + if (gSprites[RDATA->var3C[0x37]].animDelayCounter == 0x0) + { + if (gSprites[RDATA->var3C[0x37]].animCmdIndex == 0x1) + sprite->pos2.y++; + else + sprite->pos2.y--; + } + } + else + { + sprite->animPaused = FALSE; + sprite->animNum = 0x1; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; + sprite->data[0x2] = 0x0; + sprite->callback = &sub_8118B30; + m4aSongNumStart(0x3D); + } + } +} + +void sub_8118CAC(struct Sprite *sprite) +{ + sub_8118724(sprite); + switch(sprite->data[0x3]) + { + case 90: + if (sprite->data[0x0] != 0x1) + { + sprite->callback = &sub_8118BD8; + sprite->data[0x2] = 0x0; + } + break; + case 270: + if (sprite->data[0x0] != 0x0) + { + sprite->callback = &sub_8118BD8; + sprite->data[0x2] = 0x0; + } + break; + } +} + +void sub_8118CEC(struct Sprite *sprite) +{ + sub_8118724(sprite); + switch(RDATA->var03_0) + { + default: + case 0x0: + sub_8119224(sprite); + sprite->callback = &sub_81189A8; + break; + case 0x1: + sub_81193D4(sprite); + sprite->callback = &sub_8118CAC; + break; + } +} + +void sub_8118D2C(struct Sprite *sprite) +{ + sub_8118724(sprite); + if (sprite->data[0x2]-- == 0x10) + RDATA->var98 *= -1.0f; + if (sprite->data[0x2] == 0x0) + { + if (!sprite->data[0x0]) + { + RDATA->var7D = 0xFF; + RDATA->var03_7 = 0x0; + StartSpriteAnim(sprite, sprite->animCmdIndex + 0x3); + sub_81186B8(sprite); + sprite->data[0x4] = 30; + sub_811866C(sprite); + sprite->data[0x6] = (sprite->data[0x6] / 30) * 30 + 15; + sprite->callback = &sub_8118834; + m4aSongNumStartOrChange(0x47); + } + else + { + sprite->animPaused = TRUE; + m4aSongNumStart(0x38); + sub_811952C(sprite); + } + } +} + +void sub_8118DE4(struct Sprite *sprite) +{ + sub_8118724(sprite); + sprite->data[0x2] = 0x0; + sub_81186B8(sprite); + if (!(gUnknown_083F8D90[RDATA->var7E].var04 & RDATA->var08)) + { + RDATA->var7D = 0xFF; + RDATA->var03_7 = 0x0; + StartSpriteAnim(sprite, sprite->animCmdIndex + 0x3); + sub_81186B8(sprite); + sprite->data[0x4] = 30; + sub_811866C(sprite); + sprite->data[0x6] = (sprite->data[0x6] / 30) * 30 + 15; + sprite->callback = &sub_8118834; + m4aSongNumStartOrChange(0x47); + } + else + { + u8 t; + u32 z; + m4aSongNumStart(0x38); + if ((z = (Random() & 0x1))) + { + RDATA->var8C = 0.0f; + t = (RDATA->var7E + 0x1) % 0xC; + RDATA->var7F = t; + } + else + { + RDATA->var8C = gUnknown_083F8DF4[RDATA->var04_0].var1C * 2; + t = (RDATA->var7E + 0xB) % 0xC; + RDATA->var7F = t; + } + if (gUnknown_083F8D90[t].var04 & RDATA->var08) + { + sprite->data[0x0] = 0x1; + sprite->data[0x2] = gUnknown_083F8DF4[RDATA->var04_0].var02; + } + else + { + sprite->data[0x0] = gUnknown_083F8D90[t].var04 & RDATA->var08; + if (RDATA->var04_0) + { + sprite->data[0x2] = gUnknown_083F8DF4[RDATA->var04_0].var01; + } + else + { + sprite->data[0x2] = gUnknown_083F8DF4[RDATA->var04_0].var02; + if (z) + { + RDATA->var8C = 1.5f; + } + else + { + RDATA->var8C = -1.5f; + } + } + } + RDATA->var98 = 0.085000000894069671630859375f; + sprite->callback = &sub_8118D2C; + sprite->data[0x1] = 0x5; + } +} -- cgit v1.2.3 From e9bb490023f346697b4f432a9add1fe158f2038d Mon Sep 17 00:00:00 2001 From: M Date: Sat, 6 Jan 2018 00:21:01 +0100 Subject: finish roulette file --- src/roulette.c | 2776 +++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 1847 insertions(+), 929 deletions(-) (limited to 'src/roulette.c') diff --git a/src/roulette.c b/src/roulette.c index 0250857a2..36c15bf23 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -1,60 +1,121 @@ #include "global.h" -#include "roulette.h" -#include "roulette_util.h" -#include "task.h" -#include "palette.h" -#include "text.h" -#include "pokemon.h" -#include "species.h" -#include "rtc.h" + +#include "ewram.h" +#include "field_fadetransition.h" +#include "game_stat.h" +#include "m4a.h" #include "main.h" -#include "menu_helpers.h" -#include "unknown_task.h" #include "menu.h" -#include "trig.h" -#include "sprite.h" #include "menu_cursor.h" -#include "sound.h" -#include "songs.h" -#include "m4a.h" -#include "rng.h" -#include "game_stat.h" +#include "menu_helpers.h" #include "overworld.h" -#include "string_util.h" -#include "field_fadetransition.h" +#include "palette.h" +#include "pokemon.h" +#include "rng.h" +#include "roulette.h" +#include "roulette_util.h" +#include "rtc.h" +#include "songs.h" +#include "sound.h" #include "script.h" +#include "species.h" +#include "sprite.h" #include "strings2.h" +#include "string_util.h" +#include "task.h" +#include "text.h" +#include "trig.h" +#include "unknown_task.h" asm(".include \"constants/gba_constants.inc\""); -extern u8 gUnknown_02019000[]; -extern u16 gSpecialVar_0x8004; -extern struct Unkg083F8DF4 gUnknown_083F8DF4[]; -extern u8 gUnknown_083F8EC4; -extern u8 gUnknown_083F8DF0[]; -extern u8 gUnknown_083F8E34[]; -extern const u8 gUnknown_08E8096C[]; -extern const u8 gRouletteWheelTiles[]; -extern const u8 gRouletteCenter_Gfx[]; -extern const u8 gRouletteHeadersTiles[]; -extern const u8 gRouletteCreditTiles[]; -extern const u8 gRouletteNumbersTiles[]; -extern const u8 gRouletteMultiplierTiles[]; -extern const u8 gUnknown_083F86BC[]; -extern const u8 gUnknown_083F88BC[]; -extern const u8 gUnknown_083F8A60[]; - -extern u16 gPlttBufferFaded[]; -extern u16 gPlttBufferUnfaded[]; - -extern const u8 gUnknown_081C4157[]; +struct OamMatrix +{ + s16 a; + s16 b; + s16 c; + s16 d; +}; -extern const struct YesNoFuncTable gUnknown_083F8EBC; -extern const u8 gUnknown_081C41E3; +struct Roulette /* ewram + 0x19000 */ +{ + u8 var00; + u8 var01; + u8 var02; + u8 var03_0:5; + u8 var03_5:1; + u8 var03_6:1; + u8 var03_7:1; + u8 var04_0:2; + u8 var04_2:5; + u8 var04_7:1; + u32 var08; + u8 var0C[0x6]; + u8 var12[0x4]; + u8 var16[0x3]; + u8 var19; + u8 var1A_0:4; + u8 var1A_4:4; + u8 var1B[0x6]; + u8 var21; + u8 var22; + u8 var23; + s16 var24; + s16 var26; + s16 var28; + s16 var2A; + struct OamMatrix var2C; + u16 var34; + struct Sprite *var38; + u8 var3C[0x40]; // Sprite IDs + u8 var7C; + u8 var7D; + u8 var7E; + u8 var7F; + s16 var80; + s16 var82; + s16 var84; + s16 var86; + float var88; + float var8C; + float var90; + float var94; + float var98; + float var9C; + float varA0; + u8 varA4; + u8 varA5; + u8 v51[0x2]; + u16 varA8; + u16 varAA; + TaskFunc varAC; + u8 v46[0x4]; + TaskFunc varB4; + struct UnkStruct0 varB8; +}; -extern const u16 gUnknown_083F8ECE; +struct StructgUnknown_083F8DF4 +{ + u8 var00; + u8 var01; + u8 var02; + u8 var03; + u8 var04; + u8 v[0x3]; + u16 var08; + u16 var0A; + u16 var0C; + u16 v13[0x1]; + u16 var10; + u16 var12; + u16 var14; + u8 v1[0x2]; + u16 var18; + u16 var1A; + float var1C; +}; -struct StructUnknown_083F8C00 +struct StructgUnknown_083F8C00 { u8 var00; u8 var01_0:4; @@ -63,8 +124,8 @@ struct StructUnknown_083F8C00 u8 var03; u8 var04; u8 var05; - u8 var06; - u8 var07; + u8 var06; + u8 var07; u32 var08; u32 var0C; u16 var10; @@ -80,35 +141,147 @@ struct StructgUnknown_083F8D90 u32 var04; }; -extern const struct StructUnknown_083F8C00 gUnknown_083F8C00[]; +static void sub_81150FC(void); +static void sub_8115124(void); +static void sub_8115238(void); +static void sub_8115384(void); +static void sub_8115634(u8); +static void sub_81156BC(u8); +static void sub_8115734(u8); +void sub_811577C(u8); +void sub_81157AC(u8); +static void sub_81157D0(u8); +static void sub_8115928(u8, u8); +static void sub_811597C(u8); +static void sub_81159BC(u8); +static u8 sub_8115A94(s16 *, u8); +void sub_8115B58(u8); +static void sub_8115DA0(u8); +static void sub_8115E14(u8); +static void sub_8115ECC(u8); +u8 sub_8115F58(u16, u16); +static void sub_8116100(u8); +void sub_8116308(u8); +static void sub_811637C(u8); +static void sub_8116474(u8); +static void sub_8116514(u8); +static void sub_811659C(u8); +static void sub_8116638(u8); +static void sub_81166E8(u8); +static void sub_811677C(u8); +static void sub_81167F4(u8); +static void sub_8116880(u8); +static void dp01t_12_3_battle_menu(u8); +static void sub_8116AB0(u8); +static void sub_8116B40(u8); +static void sub_8116BC0(u8); +static void sub_8116C34(u8, TaskFunc, u16, u16); +static void sub_8116CAC(u8); +static void sub_8116CF8(void); +static u8 sub_8116D54(u8, u8); +static u8 sub_8116E5C(u8, u8); +static void sub_8116EF8(u8); +static void sub_8117158(u8); +static u8 sub_8117380(u8); +static void sub_8117434(void); +static void sub_81174F8(u8); +static void sub_8117528(u8); +void sub_811755C(u8); +void sub_81175C0(u8); +static void sub_81175DC(u8); +static void sub_8117630(u8); +static void Task_Roulette_0(u8); +static void sub_8117838(u8); +static u8 sub_8117890(const struct SpriteTemplate *, u8, u16 *); +static void sub_8117900(void); +void unref_sub_8117A74(void); +static void sub_8117AA8(u8, u8); +static void sub_8117BBC(void); +static void sub_8117C60(u8, u8); +static void sub_8117D68(u8); +static void sub_8117DF4(void); +void sub_8117E98(struct Sprite *); +static void sub_8117F2C(void); +static void sub_81180F4(u16); +static u8 sub_81181E8(u8); +static void sub_811829C(u8); +static void sub_81182F8(u8); +void sub_81184CC(struct Sprite *); +static void sub_81184D8(void); +void sub_8118554(struct Sprite *); +static void sub_811857C(void); +static void sub_81185E8(void); +static s16 sub_811866C(struct Sprite *); +static u8 sub_81186B8(struct Sprite *); +static s16 sub_81186E8(struct Sprite *); +static void sub_8118724(struct Sprite *); +static void sub_8118834(struct Sprite *); +static void sub_811889C(struct Sprite *); +static void sub_81189A8(struct Sprite *); +static void sub_8118B30(struct Sprite *); +static void sub_8118BD8(struct Sprite *); +static void sub_8118CAC(struct Sprite *); +void sub_8118CEC(struct Sprite *); +void sub_8118D2C(struct Sprite *); +static void sub_8118DE4(struct Sprite *); +static void sub_8118F8C(struct Sprite *); +static void sub_8119088(struct Sprite *); +static void sub_8119134(struct Sprite *); +static void sub_81191F4(struct Sprite *); +static void sub_8119224(struct Sprite *); +static void sub_81193D4(struct Sprite *); +static void sub_811952C(struct Sprite *); +static void sub_8119780(struct Sprite *); +static void sub_81197D8(struct Sprite *); +static void sub_8119898(struct Sprite *); +void sub_8119964(struct Sprite *); +static void sub_8119A90(struct Sprite *); +static void sub_8119AAC(struct Sprite *); +static void sub_8119B24(struct Sprite *); +static void sub_8119BCC(struct Sprite *); +static void sub_8119D08(struct Sprite *); +void sub_8119D80(struct Sprite *); +extern u8 gUnknown_02019000[]; +extern u16 gSpecialVar_0x8004; +extern struct StructgUnknown_083F8DF4 gUnknown_083F8DF4[]; +extern u8 gUnknown_083F8EC4; +extern u8 gUnknown_083F8DF0[]; +extern u8 gUnknown_083F8E34[]; +extern const u8 gUnknown_08E8096C[]; +extern const u8 gRouletteWheelTiles[]; +extern const u8 gRouletteCenter_Gfx[]; +extern const u8 gRouletteHeadersTiles[]; +extern const u8 gRouletteCreditTiles[]; +extern const u8 gRouletteNumbersTiles[]; +extern const u8 gRouletteMultiplierTiles[]; +extern const u16 gUnknown_083F86BC[]; +extern const u8 gUnknown_083F88BC[]; +extern const u8 gUnknown_083F8A60[]; +extern u16 gPlttBufferFaded[]; +extern u16 gPlttBufferUnfaded[]; +extern const u8 gUnknown_081C4157[]; +extern const struct YesNoFuncTable gUnknown_083F8EBC; +extern const u8 gUnknown_081C41E3; +extern const u16 gUnknown_083F8ECE; +extern const struct StructgUnknown_083F8C00 gUnknown_083F8C00[]; const extern u8 gUnknown_083F8ECA[]; - const extern u8 gUnknown_081C41A5; const extern u8 gUnknown_081C4199; const extern u8 gUnknown_081C41AE; - const extern u8 gUnknown_081C41BD; - const extern u8 gUnknown_081C41F1; const extern u8 gUnknown_081C4231; const extern u8 gUnknown_081C41D2; - extern const struct StructgUnknown_083F8D90 gUnknown_083F8D90[]; extern const u32 gUnknown_083F8ED8[]; extern const u32 gUnknown_083F8EE8[]; - extern const struct UnkStruct1 gUnknown_083F8E9C[]; - extern const u8 gUnknown_083F8EF4[]; - extern const struct YesNoFuncTable gUnknown_083F8EB4; - -//Strings TODO: give proper names extern const u8 gUnknown_081C40DF; extern const u8 gUnknown_081C4139; extern const u8 gUnknown_081C411C; - extern const u8 gUnknown_083F92A8[]; extern const u8 gUnknown_083F90FC[]; extern const u8 gUnknown_083F9D3C[]; @@ -118,286 +291,127 @@ extern const struct SpriteSheet gUnknown_083F9F5C; extern const struct SpriteTemplate gSpriteTemplate_83FA07C[]; extern const struct SpriteTemplate gSpriteTemplate_83F9FD4[]; extern const struct SpriteTemplate gSpriteTemplate_83FA034[]; - extern const struct SpriteTemplate gSpriteTemplate_83FA40C; - extern const struct SpriteSheet gUnknown_083F9EE8; extern const struct SpriteTemplate gSpriteTemplate_83FA0DC[]; - extern struct OamMatrix gOamMatrices[]; - extern const struct SpriteSheet gUnknown_083FA21C[]; extern const struct SpriteTemplate gSpriteTemplate_83FA2B0; extern const struct SpriteTemplate gSpriteTemplate_83FA2C8; extern const struct SpriteTemplate gSpriteTemplate_83FA2E0; extern const struct SpriteTemplate gSpriteTemplate_83FA2F8; extern const struct SpriteTemplate gSpriteTemplate_83FA310; - extern const u8 gUnknown_083FA608[0x5]; - extern const struct SpriteSheet gUnknown_083FA42C; extern const struct SpriteTemplate gSpriteTemplate_83FA434; - extern void (*gFieldCallback)(void); - extern struct MusicPlayerInfo gMPlay_SE1; extern struct MusicPlayerInfo gMPlay_SE2; - -void sub_8117434(void); - -void sub_8117838(u8); -void sub_811857C(void); -void sub_81184D8(void); -void sub_8117F2C(void); -void sub_8117900(void); -void sub_8117BBC(void); -void sub_8117DF4(void); - -void sub_81180F4(u16); -void sub_81182F8(u8); -void sub_811829C(u8); -void sub_8117158(u8); - -void sub_81156BC(u8); -void sub_8115634(u8); - -void sub_8116CAC(u8); -void sub_8116CF8(void); -void sub_81185E8(void); -void sub_81182F8(u8); -void sub_81159BC(u8); -void sub_8116C34(u8, TaskFunc, u16, u16); - -void sub_8116AB0(u8); - -void sub_8115E14(u8); - -void sub_8116EF8(u8); - -void sub_8115ECC(u8); - -u8 sub_8117380(u8); - -void sub_8117AA8(u8, u8); -void sub_8117C60(u8, u8); -void sub_8116100(u8); - -void sub_8116308(u8); - -void sub_81191F4(struct Sprite *); -void sub_811637C(u8); - -u8 sub_8116D54(u8, u8); -u8 sub_8116E5C(u8 ,u8); -void sub_8116474(u8); - -void sub_81184CC(struct Sprite *); -void sub_8117D68(u8); -void sub_8116514(u8); - -void sub_8116638(u8); - -void sub_811677C(u8); -void sub_81167F4(u8); - -void sub_8116880(u8); -void sub_81157AC(u8); - -void sub_8116B40(u8); - -void sub_8119224(struct Sprite *); -void sub_81193D4(struct Sprite *); -void sub_811952C(struct Sprite *); +extern const u16 gUnknown_083FA60E[0x2][0x2]; +extern const struct SpriteTemplate gSpriteTemplate_83FA50C; +extern const struct SpriteTemplate gSpriteTemplate_83FA5C0[]; +extern const u16 gUnknown_083FA616[0x2][0x2]; +extern const struct SpriteTemplate gSpriteTemplate_83FA524; +extern const struct SpriteTemplate gSpriteTemplate_83FA5F0; +extern const u16 gUnknown_083FA61E[0xA]; +extern const u16 gUnknown_083FA632[]; +extern const s8 gUnknown_083FA64A[0x2]; +extern const s8 gUnknown_083FA64C[0x8][0x2]; -void dp01t_12_3_battle_menu(u8); -extern u8 gSharedMem[]; - -#define ewram17000 ((u16 *) (gSharedMem + 0x17000)) //money stuff? -#define ewram17E00 ((u16 *) (gSharedMem + 0x17E00)) -#define ewram17800 ((u16 *) (gSharedMem + 0x17800)) -#define ewram18000 ((u16 *) (gSharedMem + 0x18000)) -#define ewram18800 ((u16 *) (gSharedMem + 0x18800)) -#define ewram189a0 ((u16 *) (gSharedMem + 0x189a0)) -#define ewram18a20 ((u16 *) (gSharedMem + 0x18a20)) -#define ewram18a32 ((u16 *) (gSharedMem + 0x18A32)) -#define ewram18a80 ((u16 *) (gSharedMem + 0x18a80)) -#define RDATA ((struct RData *) (gSharedMem + 0x19000)) - -struct OamMatrix +void sub_81150FC(void) { - s16 a; - s16 b; - s16 c; - s16 d; -}; + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + if (eRoulette->varB8.var00) + task_tutorial_controls_fadein(&eRoulette->varB8); +} -struct Unkg083F8DF4 +void sub_8115124(void) { - u8 var00; - u8 var01; - u8 var02; - u8 var03; - u8 var04; - u8 v[0x7]; - u16 var0C; - u8 v1[0xA]; - u16 var18; - u16 var1A; //is this signed or not ? - float var1C; -}; + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + sub_8117434(); + REG_BG1HOFS = 0x200 - eRoulette->var26; + if (eRoulette->var01) + REG_BLDALPHA = eRoulette->var34; + if (eRoulette->var2A != 0) + { + DmaCopy16(3, &gBGTilemapBuffers[1][0xE0], (void *)(VRAM + 0x21C0), 0x340); + eRoulette->var2A = 0x0; + } + switch (eRoulette->var28) + { + case 0x1: + REG_BG0CNT = (0x20 * 0xF8); + DmaCopy16(3, &gBGTilemapBuffers[2][0xE0], (void *)(VRAM + 0xF9C0), 0x340); + eRoulette->var28 = 0x2; + break; + case 0x2: + DmaCopy16(3, &gBGTilemapBuffers[2][0xE0], (void *)(VRAM + 0xF9C0), 0x340); + break; + case 0xFF: + REG_BG0CNT = 0x1F08; + DmaFill16(3, 0x0, (void *)(VRAM + 0xF9C0), 0x340); + eRoulette->var28 = 0x0; + break; + case 0x0: + } +} +#ifdef NONMATCHING -struct RData /* ewram + 0x19000 */ -{ - u8 var00; - u8 var01; - u8 var02; - u8 var03_0:5; - u8 var03_5:1; - u8 var03_6:1; - u8 var03_7:1; - u8 var04_0:2; - u8 var04_2:5; - u8 var04_7:1; - u8 v7[0x3]; - u32 var08; - u8 var0C[0x6]; - u8 var12[0x4]; - u8 var16[0x3]; - u8 var19; - u8 var1A_0:4; - u8 var1A_4:4; - u8 var1B[0x6]; - u8 var21; - u8 var22; - u8 var23; - s16 var24; - s16 var26; - s16 var28; - s16 var2A; - struct OamMatrix var2C; - u16 var34; - u8 v99[0x2]; - struct Sprite *var38; - u8 var3C[0x40]; // Sprite IDs ? TODO: add some defines for the different areas - u8 var7C; - u8 var7D; - u8 var7E; - u8 var7F; - s16 var80; - s16 var82; - s16 var84; - s16 var86; - float var88; - float var8C; - float var90; - float var94; - float var98; - float var9C; - float varA0; - u8 varA4; - u8 varA5; // taskid - u8 v51[0x2]; - u16 varA8; - u16 varAA; - TaskFunc varAC; - u8 v46[0x4]; - TaskFunc varB4; - struct UnkStruct0 varB8; -}; - - -void sub_81150FC(void) -{ - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - if (RDATA->varB8.val0) - task_tutorial_controls_fadein(&RDATA->varB8); -} - -void sub_8115124(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); - sub_8117434(); - REG_BG1HOFS = 0x200 - RDATA->var26; - if (RDATA->var01) - REG_BLDALPHA = RDATA->var34; - if (RDATA->var2A != 0) - { - DmaCopy16(3, &gBGTilemapBuffers[1][0xE0], (void *)(VRAM + 0x21C0), 0x340); - RDATA->var2A = 0x0; - } - switch (RDATA->var28) - { - case 0x1: - REG_BG0CNT = (0x20 * 0xF8); - DmaCopy16(3, &gBGTilemapBuffers[2][0xE0], (void *)(VRAM + 0xF9C0), 0x340); - RDATA->var28 = 0x2; - break; - case 0x2: - DmaCopy16(3, &gBGTilemapBuffers[2][0xE0], (void *)(VRAM + 0xF9C0), 0x340); - break; - case 0xFF: - REG_BG0CNT = 0x1F08; - DmaFill16(3, 0x0, (void *)(VRAM + 0xF9C0), 0x340); - RDATA->var28 = 0x0; - break; - case 0x0: - } -} -#ifdef NONMATCHING -void sub_8115238(void) +void sub_8115238(void) { u8 i; u32 temp; - struct Unkg083F8DF4 *s0; - u16 arr[0x3]; // the third is never used ? + struct PlttData t; + struct PlttData *unfaded; + struct PlttData *faded; + struct StructgUnknown_083F8DF4 *s0; + struct PlttData arr[0x3]; // the third is never used ? memcpy(&arr, &gUnknown_083F8EC4, 0x6); - memset(RDATA, 0x0, 0x17C); - RDATA->var04_0 = (gSpecialVar_0x8004 & 0x1); + memset(eRoulette, 0x0, 0x17C); + eRoulette->var04_0 = (gSpecialVar_0x8004 & 0x1); if (gSpecialVar_0x8004 & 0x80) - RDATA->var04_7 = 0x1; + eRoulette->var04_7 = 0x1; s0 = &gUnknown_083F8DF4[0]; - RDATA->var22 = s0[RDATA->var04_0].var03; - RDATA->var23 = s0[RDATA->var04_0].var04; - temp = gUnknown_083F8DF0[RDATA->var04_0 + RDATA->var04_7 * 2]; - RDATA->var19 = temp; - RDATA->var1A_4 = 0x1; + eRoulette->var22 = s0[eRoulette->var04_0].var03; + eRoulette->var23 = s0[eRoulette->var04_0].var04; + temp = gUnknown_083F8DF0[eRoulette->var04_0 + eRoulette->var04_7 * 2]; + eRoulette->var19 = temp; + eRoulette->var1A_4 = 0x1; if (temp == 0x1) { - u16 *faded = &gPlttBufferFaded[0]; - u16 *unfaded = &gPlttBufferUnfaded[0]; - faded[0x51] = arr[0]; - faded[0x0] = arr[0]; - unfaded[0x51] = arr[0]; - unfaded[0x0] = arr[0]; + unfaded = (struct PlttData *)&gPlttBufferUnfaded[0]; + faded = (struct PlttData *)&gPlttBufferFaded[0]; + t = arr[0]; } else { - u16 *faded = &gPlttBufferFaded[0]; - u16 *unfaded = &gPlttBufferUnfaded[0]; - faded[0x51] = arr[1]; - faded[0x0] = arr[1]; - unfaded[0x51] = arr[1]; - unfaded[0x0] = arr[1]; + unfaded = (struct PlttData *)&gPlttBufferUnfaded[0]; + faded = (struct PlttData *)&gPlttBufferFaded[0]; + t = arr[1]; } - sub_8124918((&RDATA->varB8)); + faded[0x51] = t; + faded[0x0] = faded[0x51]; + unfaded[0x51] = t; + unfaded[0x0] = t; + sub_8124918((&eRoulette->varB8)); for (i = 0; i < 0xD; i++) - sub_812492C((&RDATA->varB8), i, (struct UnkStruct1 *)&gUnknown_083F8E34[i * 8]); + sub_812492C((&eRoulette->varB8), i, (struct UnkStruct1 *)&gUnknown_083F8E34[i * 8]); for (i = 0; i < 0x6; i++) { switch (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2)) { case SPECIES_TAILLOW: - RDATA->var02 |= 0x2; + eRoulette->var02 |= 0x2; break; case SPECIES_SHROOMISH: - RDATA->var02 |= 0x1; + eRoulette->var02 |= 0x1; break; } } @@ -639,10 +653,10 @@ void sub_8115384(void) REG_DISPSTAT |= 0x8; SetVBlankCallback(&sub_8115124); BeginHardwarePaletteFade(0xFF, 0x0, 0x10, 0x0 , 0x1); - taskid = RDATA->varA4 = CreateTask(&sub_81156BC, 0x0); + taskid = eRoulette->varA4 = CreateTask(&sub_81156BC, 0x0); gTasks[taskid].data[0x6] = 0x6; gTasks[taskid].data[0xD] = gSaveBlock1.coins; - RDATA->varA5 = CreateTask(&sub_8115634, 0x1); + eRoulette->varA5 = CreateTask(&sub_8115634, 0x1); SetMainCallback2(&sub_81150FC); break; } @@ -653,20 +667,20 @@ void sub_8115634(u8 unused) s16 sin; s16 cos; s32 cos32; - if (RDATA->var21++ == RDATA->var23) + if (eRoulette->var21++ == eRoulette->var23) { - RDATA->var21 = 0x0; - if ((RDATA->var24 -= RDATA->var22) < 0) - RDATA->var24 = 0x168 - RDATA->var22; + eRoulette->var21 = 0x0; + if ((eRoulette->var24 -= eRoulette->var22) < 0) + eRoulette->var24 = 0x168 - eRoulette->var22; } - sin = Sin2(RDATA->var24); - cos = Cos2(RDATA->var24); + sin = Sin2(eRoulette->var24); + cos = Cos2(eRoulette->var24); sin = sin / 16; cos32 = cos / 16; - RDATA->var2C.d = cos32; - RDATA->var2C.a = cos32; - RDATA->var2C.b = sin; - RDATA->var2C.c = -sin; + eRoulette->var2C.d = cos32; + eRoulette->var2C.a = cos32; + eRoulette->var2C.b = sin; + eRoulette->var2C.c = -sin; } void sub_81156BC(u8 taskid) @@ -702,7 +716,7 @@ void sub_811577C(u8 taskid) void sub_81157AC(u8 taskid) { - DestroyTask(RDATA->varA5); + DestroyTask(eRoulette->varA5); sub_8116AB0(taskid); } @@ -737,37 +751,37 @@ void sub_81157D0(u8 r0) } } -void sub_8115928(u8 taskid, bool8 r1) +void sub_8115928(u8 taskid, u8 r1) { if (!r1) sub_811829C(gTasks[taskid].data[0x4]); else - sub_811829C(RDATA->var1B[RDATA->var1A_0]); + sub_811829C(eRoulette->var1B[eRoulette->var1A_0]); sub_81157D0(gTasks[taskid].data[0x4]); } void sub_811597C(u8 taskid) { - RDATA->var28 = 0x1; + eRoulette->var28 = 0x1; sub_81157D0(gTasks[taskid].data[0x4]); - RDATA->var23 = 0x2; - RDATA->var21 = 0x0; + eRoulette->var23 = 0x2; + eRoulette->var21 = 0x0; gTasks[taskid].func = &sub_8115E14; } void sub_81159BC(u8 taskid) { s16 i; - if(RDATA->var08 & 0x20) + if(eRoulette->var08 & 0x20) { for (i = 0xB; (i < 0xE); i++) - if ((RDATA->var08 & gUnknown_083F8C00[i].var08) == 0) + if ((eRoulette->var08 & gUnknown_083F8C00[i].var08) == 0) break; } else { for (i = 0x6; (i < 0xA); i++) - if ((RDATA->var08 & gUnknown_083F8C00[i].var08) == 0) + if ((eRoulette->var08 & gUnknown_083F8C00[i].var08) == 0) break; } gTasks[taskid].data[0x4] = i; @@ -779,7 +793,7 @@ void sub_81159BC(u8 taskid) gTasks[taskid].func = &sub_811597C; } -bool8 sub_8115A94(s16 *r0, u8 r1) +u8 sub_8115A94(s16 *r0, u8 r1) { s8 temp1 = 0; s8 temp = 0; @@ -829,45 +843,45 @@ void sub_8115B58(u8 r0) sub_8115928(r0, FALSE); gTasks[r0].data[0x1] = z; PlaySE(SE_SELECT); - sub_8124D3C((&RDATA->varB8), 0xFFFF); - (&RDATA->varB8)->val3[0xF].field1 = 0x0; - (&RDATA->varB8)->val3[0xE].field1 = 0x0; - (&RDATA->varB8)->val3[0xD].field1 = 0x0; + sub_8124D3C((&eRoulette->varB8), 0xFFFF); + (&eRoulette->varB8)->var04[0xF].var00_7 = 0x0; + (&eRoulette->varB8)->var04[0xE].var00_7 = 0x0; + (&eRoulette->varB8)->var04[0xD].var00_7 = 0x0; sub_8116EF8(gTasks[r0].data[0x4]); for (i = 0; i < 0x4; i++) { - gSprites[RDATA->var3C[i + 0x29]].oam.tileNum = - gSprites[RDATA->var3C[i + 0x29]].sheetTileStart - + (*gSprites[RDATA->var3C[i + 0x29]].anims)->type; + gSprites[eRoulette->var3C[i + 0x29]].oam.tileNum = + gSprites[eRoulette->var3C[i + 0x29]].sheetTileStart + + (*gSprites[eRoulette->var3C[i + 0x29]].anims)->type; } - if ((u16)(gTasks[r0].data[0x4] - 1) < 0x4 && !(RDATA->var08 & gUnknown_083F8C00[gTasks[r0].data[0x4]].var08) ) + if ((u16)(gTasks[r0].data[0x4] - 1) < 0x4 && !(eRoulette->var08 & gUnknown_083F8C00[gTasks[r0].data[0x4]].var08) ) { z = gTasks[r0].data[0x4] - 1; - gSprites[RDATA->var3C[z + 0x29]].oam.tileNum = - gSprites[RDATA->var3C[z + 0x29]].sheetTileStart - + (*gSprites[RDATA->var3C[z + 0x29]].anims + 1)->type; + gSprites[eRoulette->var3C[z + 0x29]].oam.tileNum = + gSprites[eRoulette->var3C[z + 0x29]].sheetTileStart + + (*gSprites[eRoulette->var3C[z + 0x29]].anims + 1)->type; } } } void sub_8115D58(u8 r0) { - RDATA->var28 = 0xFF; - if (RDATA->var19 == 1) - RDATA->var23 = 1; + eRoulette->var28 = 0xFF; + if (eRoulette->var19 == 1) + eRoulette->var23 = 1; else - RDATA->var23 = 0; - RDATA->var21 = 0; + eRoulette->var23 = 0; + eRoulette->var21 = 0; gTasks[r0].data[0x1] = 0x20; gTasks[r0].func = &sub_8115ECC; } void sub_8115DA0(u8 taskid) { - RDATA->var1B[RDATA->var1A_0] = gTasks[taskid].data[0x4]; - gTasks[taskid].data[0x2] = sub_8117380(RDATA->var1B[RDATA->var1A_0]); - sub_811829C(RDATA->var1B[RDATA->var1A_0]); - if ((gTasks[taskid].data[0xD] -= RDATA->var19) < 0) + eRoulette->var1B[eRoulette->var1A_0] = gTasks[taskid].data[0x4]; + gTasks[taskid].data[0x2] = sub_8117380(eRoulette->var1B[eRoulette->var1A_0]); + sub_811829C(eRoulette->var1B[eRoulette->var1A_0]); + if ((gTasks[taskid].data[0xD] -= eRoulette->var19) < 0) gTasks[taskid].data[0xD] = 0; sub_81180F4(gTasks[taskid].data[0xD]); gTasks[taskid].func = &sub_8115D58; @@ -894,7 +908,7 @@ void sub_8115E14(u8 taskid) } if (gMain.newKeys & A_BUTTON) { - if ((RDATA->var08 & gUnknown_083F8C00[gTasks[taskid].data[0x4]].var08)) + if ((eRoulette->var08 & gUnknown_083F8C00[gTasks[taskid].data[0x4]].var08)) PlaySE(SE_BOO); else { @@ -910,8 +924,8 @@ void sub_8115ECC(u8 taskid) { if (gTasks[taskid].data[0x1] > 0x2) gSpriteCoordOffsetX += 0x2; - if ((RDATA->var26 += 0x4) == 0x68) - gSprites[RDATA->var3C[0x19]].callback = &SpriteCallbackDummy; + if ((eRoulette->var26 += 0x4) == 0x68) + gSprites[eRoulette->var3C[0x19]].callback = &SpriteCallbackDummy; } else { @@ -925,7 +939,7 @@ void sub_8115ECC(u8 taskid) u8 sub_8115F58(u16 r0, u16 r1) { u8 timeh; - switch (RDATA->var02) + switch (eRoulette->var02) { case 0x1: // SHROOMISH case 0x2: // TAILLOW @@ -937,19 +951,19 @@ u8 sub_8115F58(u16 r0, u16 r1) return 0x1; else { - struct Unkg083F8DF4 *p = &gUnknown_083F8DF4[0]; - return p[RDATA->var04_0].var02 / 2; + struct StructgUnknown_083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[eRoulette->var04_0].var02 / 2; } } else if (!(r1 & 0x3)) { - struct Unkg083F8DF4 *p = &gUnknown_083F8DF4[0]; - return p[RDATA->var04_0].var02 / 2; + struct StructgUnknown_083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[eRoulette->var04_0].var02 / 2; } else { - struct Unkg083F8DF4 *p = &gUnknown_083F8DF4[0]; - return p[RDATA->var04_0].var02; + struct StructgUnknown_083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[eRoulette->var04_0].var02; } break; case 0x3: @@ -959,8 +973,8 @@ u8 sub_8115F58(u16 r0, u16 r1) { if (r0 < 0x6 || (r1 & 0x1)) { - struct Unkg083F8DF4 *p = &gUnknown_083F8DF4[0]; - return p[RDATA->var04_0].var02 / 2; + struct StructgUnknown_083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[eRoulette->var04_0].var02 / 2; } else { @@ -969,13 +983,13 @@ u8 sub_8115F58(u16 r0, u16 r1) } else if ((r1 & 0x1) && !(r0 < 0x7)) { - struct Unkg083F8DF4 *p = &gUnknown_083F8DF4[0]; - return p[RDATA->var04_0].var02 / 4; + struct StructgUnknown_083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[eRoulette->var04_0].var02 / 4; } else { - struct Unkg083F8DF4 *p = &gUnknown_083F8DF4[0]; - return p[RDATA->var04_0].var02 / 2; + struct StructgUnknown_083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[eRoulette->var04_0].var02 / 2; } break; case 0: @@ -990,40 +1004,40 @@ u8 sub_8115F58(u16 r0, u16 r1) } else { - struct Unkg083F8DF4 *p = &gUnknown_083F8DF4[0]; - return p[RDATA->var04_0].var02 / 2; + struct StructgUnknown_083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[eRoulette->var04_0].var02 / 2; } } else if (!(r1 & 0x3)) { if (!(r0 < 0xD)) { - struct Unkg083F8DF4 *p = &gUnknown_083F8DF4[0]; - return p[RDATA->var04_0].var02 / 2; + struct StructgUnknown_083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[eRoulette->var04_0].var02 / 2; } else { - struct Unkg083F8DF4 *p = &gUnknown_083F8DF4[0]; - return p[RDATA->var04_0].var02; + struct StructgUnknown_083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[eRoulette->var04_0].var02; } } else if (r1 & (0x80 << 8)) { if (!(r0 < 0xD)) { - struct Unkg083F8DF4 *p = &gUnknown_083F8DF4[0]; - return p[RDATA->var04_0].var02; + struct StructgUnknown_083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[eRoulette->var04_0].var02; } else { - struct Unkg083F8DF4 *p = &gUnknown_083F8DF4[0]; - return p[RDATA->var04_0].var01; + struct StructgUnknown_083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[eRoulette->var04_0].var01; } } else { - struct Unkg083F8DF4 *p = &gUnknown_083F8DF4[0]; - return p[RDATA->var04_0].var01 * 2; + struct StructgUnknown_083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[eRoulette->var04_0].var01 * 2; } } } @@ -1042,10 +1056,10 @@ void sub_8116100(u8 taskid) memcpy(angles, &gUnknown_083F8ECE, 0x8); rand = Random(); randmod = rand % 0x64; - RDATA->var7C = gTasks[taskid].data[0x6]; - RDATA->var7F = zero; - RDATA->var7E = zero; - RDATA->var7D = zero; + eRoulette->var7C = gTasks[taskid].data[0x6]; + eRoulette->var7F = zero; + eRoulette->var7E = zero; + eRoulette->var7D = zero; randf = sub_8115F58(gTasks[taskid].data[0x8], rand); randfinal = (rand % randf) - (randf / 2); if (gLocalTime.hours < 0xD) @@ -1056,21 +1070,21 @@ void sub_8116100(u8 taskid) r5 *= 2; else r5 = (1 - r5) * 2; - g = (&gUnknown_083F8DF4[RDATA->var04_0])->var1A; - RDATA->var80 = (g + randfinal); + g = (&gUnknown_083F8DF4[eRoulette->var04_0])->var1A; + eRoulette->var80 = (g + randfinal); // g = ((float)(u16)(g + randfinal)) / 5.0f; - RDATA->var82 = g * 3; - RDATA->var84 = g; - RDATA->var86 = g; + eRoulette->var82 = g * 3; + eRoulette->var84 = g; + eRoulette->var86 = g; // - RDATA->var88 = (float)(angles[(rand & 0x1) + r5]); - RDATA->var8C = (float)((&gUnknown_083F8DF4[RDATA->var04_0])->var18); - RDATA->var90 = ((RDATA->var8C * 0.5f) - RDATA->var8C) / (float)(u16)(g * 3); - RDATA->var94 = 68.0f; - RDATA->var9C = 0.0f; - RDATA->var98 = -(8.0f / (float)(u16)(g * 3)); - RDATA->varA0 = 36.0f; + eRoulette->var88 = (float)(angles[(rand & 0x1) + r5]); + eRoulette->var8C = (float)((&gUnknown_083F8DF4[eRoulette->var04_0])->var18); + eRoulette->var90 = ((eRoulette->var8C * 0.5f) - eRoulette->var8C) / (float)(u16)(g * 3); + eRoulette->var94 = 68.0f; + eRoulette->var9C = 0.0f; + eRoulette->var98 = -(8.0f / (float)(u16)(g * 3)); + eRoulette->varA0 = 36.0f; gTasks[taskid].func = &sub_8116308; } #else @@ -1317,9 +1331,9 @@ _08116304: .4byte sub_8116308\n\ void sub_8116308(u8 taskid) { u8 index; - RDATA->var03_7 = 1; - index = RDATA->var3C[RDATA->var7C]; - RDATA->var38 = &gSprites[index]; + eRoulette->var03_7 = 1; + index = eRoulette->var3C[eRoulette->var7C]; + eRoulette->var38 = &gSprites[index]; (&gSprites[index])->callback = &sub_81191F4; gTasks[taskid].data[0x6]++; gTasks[taskid].data[0x8]++; @@ -1330,24 +1344,24 @@ void sub_8116308(u8 taskid) void sub_811637C(u8 taskid) { - if (RDATA->var7D) + if (eRoulette->var7D) { - if (RDATA->var03_5) + if (eRoulette->var03_5) { - if (RDATA->var03_6) + if (eRoulette->var03_6) { - RDATA->var03_6 = FALSE; - RDATA->var03_5 = FALSE; + eRoulette->var03_6 = FALSE; + eRoulette->var03_5 = FALSE; } } else { if (!gTasks[taskid].data[0x1]) { - u8 temp = sub_8116E5C(sub_8116D54(taskid, RDATA->var7E), RDATA->var1B[RDATA->var1A_0]); + u8 temp = sub_8116E5C(sub_8116D54(taskid, eRoulette->var7E), eRoulette->var1B[eRoulette->var1A_0]); gTasks[taskid].data[0x5] = temp; if (temp == 1) - sub_8124CE8((&RDATA->varB8), 0x1000); + sub_8124CE8((&eRoulette->varB8), 0x1000); } if (gTasks[taskid].data[0x1] < 0x3D) { @@ -1357,7 +1371,7 @@ void sub_811637C(u8 taskid) } else { - sub_8117158(RDATA->var1B[RDATA->var1A_0]); + sub_8117158(eRoulette->var1B[eRoulette->var1A_0]); sub_8117AA8(0x0, (u8)gTasks[taskid].data[0xC]); sub_8117C60(0x0, (u8)gTasks[taskid].data[0x6] - 0x1); gTasks[taskid].data[0x1] = 0x20; @@ -1373,8 +1387,8 @@ void sub_8116474(u8 taskid) { if(gTasks[taskid].data[0x1] > 0x2) gSpriteCoordOffsetX -= 0x2; - if((RDATA->var26 -= 0x4) == 0x68) - gSprites[RDATA->var3C[0x19]].callback = &sub_81184CC; + if((eRoulette->var26 -= 0x4) == 0x68) + gSprites[eRoulette->var3C[0x19]].callback = &sub_81184CC; } else { @@ -1494,22 +1508,22 @@ void sub_81166E8(u8 taskid) void sub_811677C(u8 taskid) { - ConvertIntToDecimalStringN((u8 *)&gStringVar1, (RDATA->var19 * gTasks[taskid].data[0x2]), STR_CONV_MODE_LEFT_ALIGN, 0x2); + ConvertIntToDecimalStringN((u8 *)&gStringVar1, (eRoulette->var19 * gTasks[taskid].data[0x2]), STR_CONV_MODE_LEFT_ALIGN, 0x2); StringExpandPlaceholders((u8 *)&gStringVar4, &gUnknown_081C41BD); MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); MenuPrint((u8 *)&gStringVar4, 0x1, 0xF); - gTasks[taskid].data[0x1] = (RDATA->var19 * gTasks[taskid].data[0x2]); + gTasks[taskid].data[0x1] = (eRoulette->var19 * gTasks[taskid].data[0x2]); gTasks[taskid].data[0x7] = 0x0; gTasks[taskid].func = &sub_81166E8; } void sub_81167F4(u8 taskid) { - sub_8124D3C((&RDATA->varB8), 0xFFFF); - (&RDATA->varB8)->val3[0xF].field1 = 0x0; - (&RDATA->varB8)->val3[0xE].field1 = 0x0; - (&RDATA->varB8)->val3[0xD].field1 = 0x0; - gSprites[RDATA->var3C[0x7 + gUnknown_083F8C00[gTasks[taskid].data[0xC]].var00]].invisible = TRUE; + sub_8124D3C((&eRoulette->varB8), 0xFFFF); + (&eRoulette->varB8)->var04[0xF].var00_7 = 0x0; + (&eRoulette->varB8)->var04[0xE].var00_7 = 0x0; + (&eRoulette->varB8)->var04[0xD].var00_7 = 0x0; + gSprites[eRoulette->var3C[0x7 + gUnknown_083F8C00[gTasks[taskid].data[0xC]].var00]].invisible = TRUE; gTasks[taskid].func = &sub_8116880; } @@ -1517,16 +1531,16 @@ void sub_8116880(u8 taskid) { u8 i = 0; gTasks[taskid].data[0x4] = i; - RDATA->var1B[RDATA->var1A_0] = 0x0; + eRoulette->var1B[eRoulette->var1A_0] = 0x0; sub_8117158(0x0); - gSprites[RDATA->var3C[0x30]].invisible = TRUE; + gSprites[eRoulette->var3C[0x30]].invisible = TRUE; for (i = 0; i < 0x4; i++) { - gSprites[RDATA->var3C[i + 0x29]].oam.tileNum = - gSprites[RDATA->var3C[i + 0x29]].sheetTileStart - + (*gSprites[RDATA->var3C[i + 0x29]].anims)->type; + gSprites[eRoulette->var3C[i + 0x29]].oam.tileNum = + gSprites[eRoulette->var3C[i + 0x29]].sheetTileStart + + (*gSprites[eRoulette->var3C[i + 0x29]].anims)->type; } - if (!(gTasks[taskid].data[0xD] < RDATA->var19)) + if (!(gTasks[taskid].data[0xD] < eRoulette->var19)) { if (gTasks[taskid].data[0x6] == 0x6) { @@ -1563,7 +1577,7 @@ void dp01t_12_3_battle_menu(u8 taskid) sub_8117158(0x0); sub_81182F8(0x6); for (i = 0; i < 0xC; i++) - gSprites[RDATA->var3C[i + 0x7]].invisible = FALSE; + gSprites[eRoulette->var3C[i + 0x7]].invisible = FALSE; if (gTasks[taskid].data[0xD] == 0x270F) { MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); @@ -1578,10 +1592,10 @@ void dp01t_12_3_battle_menu(u8 taskid) void sub_8116AB0(u8 taskid) { - sub_8124D3C((&RDATA->varB8), 0xFFFF); - sub_8124918((&RDATA->varB8)); + sub_8124D3C((&eRoulette->varB8), 0xFFFF); + sub_8124918((&eRoulette->varB8)); gSaveBlock1.coins = gTasks[taskid].data[0xD]; - if (gSaveBlock1.coins < RDATA->var19) + if (gSaveBlock1.coins < eRoulette->var19) gSpecialVar_0x8004 = TRUE; else gSpecialVar_0x8004 = FALSE; @@ -1594,7 +1608,7 @@ void sub_8116B40(u8 taskid) // end oulette ? if (UpdatePaletteFade() == 0) { SetVBlankCallback(0x0); - memset(RDATA, 0x0, 0x17C); + memset(eRoulette, 0x0, 0x17C); gSpriteCoordOffsetX = gSpriteCoordOffsetY = 0x0; sub_80F9368(); FreeAllSpritePalettes(); @@ -1612,57 +1626,57 @@ void sub_8116B40(u8 taskid) // end oulette ? void sub_8116BC0(u8 taskid) { - if(RDATA->varA8 == 0 || gMain.newKeys & RDATA->varAA) + if(eRoulette->varA8 == 0 || gMain.newKeys & eRoulette->varAA) { - gTasks[taskid].func = RDATA->varAC; - if (RDATA->varAA > 0) + gTasks[taskid].func = eRoulette->varAC; + if (eRoulette->varAA > 0) PlaySE(SE_SELECT); - RDATA->varAC = NULL; - RDATA->varAA = 0x0; - RDATA->varA8 = 0x0; + eRoulette->varAC = NULL; + eRoulette->varAA = 0x0; + eRoulette->varA8 = 0x0; } - if (RDATA->varA8 != 0xFFFF) - RDATA->varA8--; + if (eRoulette->varA8 != 0xFFFF) + eRoulette->varA8--; } void sub_8116C34(u8 taskid, TaskFunc r1, u16 r2, u16 r3) { - RDATA->varB4 = gTasks[taskid].func; + eRoulette->varB4 = gTasks[taskid].func; if(r1 == NULL) - r1 = RDATA->varB4; - RDATA->varAC = r1; - RDATA->varA8 = r2; + r1 = eRoulette->varB4; + eRoulette->varAC = r1; + eRoulette->varA8 = r2; if (r2 == 0xFFFF && r3 == 0) - RDATA->varAA = 0xFFFF; + eRoulette->varAA = 0xFFFF; else - RDATA->varAA = r3; + eRoulette->varAA = r3; gTasks[taskid].func = &sub_8116BC0; } void sub_8116CAC(u8 taskid) { u8 i = 0; - RDATA->var00 = i; - RDATA->var03_0 = 0x0; - RDATA->var03_5 = 0x0; - RDATA->var03_6 = 0x0; - RDATA->var03_7 = 0x0; + eRoulette->var00 = i; + eRoulette->var03_0 = 0x0; + eRoulette->var03_5 = 0x0; + eRoulette->var03_6 = 0x0; + eRoulette->var03_7 = 0x0; for (i = 0; i < 0x6; i++) - RDATA->var1B[i] = 0x0; - RDATA->var1A_0 = 0x0; + eRoulette->var1B[i] = 0x0; + eRoulette->var1A_0 = 0x0; gTasks[taskid].data[0x1] = 0x0; } void sub_8116CF8(void) { u8 i; - RDATA->var08 = 0x0; + eRoulette->var08 = 0x0; for (i = 0; i < 0x6; i++) - RDATA->var0C[i] = 0x0; + eRoulette->var0C[i] = 0x0; for (i = 0; i < 0x4; i++) - RDATA->var12[i] = 0x0; + eRoulette->var12[i] = 0x0; for (i = 0; i < 0x3; i++) - RDATA->var16[i] = 0x0; + eRoulette->var16[i] = 0x0; sub_8117C60(0x1, 0xFF); } @@ -1680,22 +1694,22 @@ u8 sub_8116D54(u8 taskid, u8 r1) { u8 i; u8 z; - RDATA->var0C[gTasks[taskid].data[0x6] - 1] = gUnknown_083F8D90[r1].var02; + eRoulette->var0C[gTasks[taskid].data[0x6] - 1] = gUnknown_083F8D90[r1].var02; gTasks[taskid].data[0xC] = gUnknown_083F8D90[r1].var02; - RDATA->var08 |= gUnknown_083F8D90[r1].var04; + eRoulette->var08 |= gUnknown_083F8D90[r1].var04; for (i = 0; i < 0x4; i++) { if (gUnknown_083F8D90[r1].var04 & t0[i]) - RDATA->var12[i]++; - if (RDATA->var12[i] > 0x2) - RDATA->var08 |= t0[i]; + eRoulette->var12[i]++; + if (eRoulette->var12[i] > 0x2) + eRoulette->var08 |= t0[i]; } for (z = 0; z < 0x3; z++) { if (gUnknown_083F8D90[r1].var04 & t1[z]) - RDATA->var16[z]++; - if (RDATA->var16[z] > 0x3) - RDATA->var08 |= t1[z]; + eRoulette->var16[z]++; + if (eRoulette->var16[z] > 0x3) + eRoulette->var08 |= t1[z]; } return gUnknown_083F8D90[r1].var02; } @@ -1745,10 +1759,10 @@ void sub_8116EF8(u8 r0) case 0xA: case 0xF: for (i = (r0 + 0x1); i < (r0 + 0x5); i++) - if (!(RDATA->var08 & gUnknown_083F8C00[i].var08)) + if (!(eRoulette->var08 & gUnknown_083F8C00[i].var08)) var0 |= gUnknown_083F8C00[i].var10; var0 &= 0xDFFF; - sub_8124CE8(&RDATA->varB8, var0); + sub_8124CE8(&eRoulette->varB8, var0); break; default: memcpy(var1, gUnknown_083F8E9C, 0x18); @@ -1760,26 +1774,26 @@ void sub_8116EF8(u8 r0) switch((u8)r0 % 0x5) { case 0x1: - var3 = gSprites[RDATA->var3C[0x7 + 0x0]].oam.paletteNum * 0x10; + var3 = gSprites[eRoulette->var3C[0x7 + 0x0]].oam.paletteNum * 0x10; break; case 0x2: - var3 = gSprites[RDATA->var3C[0x7 + 0x1]].oam.paletteNum * 0x10; + var3 = gSprites[eRoulette->var3C[0x7 + 0x1]].oam.paletteNum * 0x10; break; case 0x3: - var3 = gSprites[RDATA->var3C[0x7 + 0x2]].oam.paletteNum * 0x10; + var3 = gSprites[eRoulette->var3C[0x7 + 0x2]].oam.paletteNum * 0x10; break; case 0x4: - var3 = gSprites[RDATA->var3C[0x7 + 0x3]].oam.paletteNum * 0x10; + var3 = gSprites[eRoulette->var3C[0x7 + 0x3]].oam.paletteNum * 0x10; break; } if (var2 == 0x1) { - if (!(RDATA->var08 & gUnknown_083F8C00[r0].var08)) + if (!(eRoulette->var08 & gUnknown_083F8C00[r0].var08)) { var4 = (r0 / 0x5); - var1[var4 - 0x1].val1 += var3; - sub_812492C(&RDATA->varB8, 0xD, &var1[var4 - 0x2]); - sub_8124CE8(&RDATA->varB8, var0 |= gUnknown_083F8C00[r0].var10); + var1[var4 - 0x1].var02 += var3; + sub_812492C(&eRoulette->varB8, 0xD, &var1[var4 - 0x2]); + sub_8124CE8(&eRoulette->varB8, var0 |= gUnknown_083F8C00[r0].var10); } } else @@ -1787,11 +1801,11 @@ void sub_8116EF8(u8 r0) for (i = 0; i < 0x3; i++) { u8 var4 = i * 0x5 + r0 + 0x5; - if (!(RDATA->var08 & gUnknown_083F8C00[var4].var08)) + if (!(eRoulette->var08 & gUnknown_083F8C00[var4].var08)) { u8 var5 = (var4 / 0x5); - var1[var5 - 0x1].val1 += var3; - sub_812492C(&RDATA->varB8, (u8)(0xD + i), &var1[var5 - 0x2]); + var1[var5 - 0x1].var02 += var3; + sub_812492C(&eRoulette->varB8, (u8)(0xD + i), &var1[var5 - 0x2]); if (var2 == 0x3) var0 = gUnknown_083F8C00[var4].var10; var2--; @@ -1799,7 +1813,7 @@ void sub_8116EF8(u8 r0) } if (var2 != 0x2) var0 = 0x0; - sub_8124CE8(&RDATA->varB8, var0 |= gUnknown_083F8C00[r0].var10); + sub_8124CE8(&eRoulette->varB8, var0 |= gUnknown_083F8C00[r0].var10); } } } @@ -2124,7 +2138,7 @@ void sub_8117158(u8 r0) u8 var0; u8 var1; u16 var2; - RDATA->var2A = 0x1; + eRoulette->var2A = 0x1; sub_8117AA8(0x0, 0x0); sub_8124E2C(&gBGTilemapBuffers[2][0], ewram18800, 0xE, 0x7, 0x10, 0xD); switch(r0) @@ -2448,16 +2462,16 @@ u8 sub_8117380(u8 r0) { case 0x3: z = r0 / 0x5 - 0x1; - if (RDATA->var16[z] > 0x3) + if (eRoulette->var16[z] > 0x3) return 0x0; - return var0[RDATA->var16[z] + 0x1]; + return var0[eRoulette->var16[z] + 0x1]; case 0x4: t = r0 - 0x1; - if (RDATA->var12[t] > 0x2) + if (eRoulette->var12[t] > 0x2) return 0x0; - return var0[RDATA->var12[t] + 0x2]; + return var0[eRoulette->var12[t] + 0x2]; case 0xC: - if (RDATA->var08 & gUnknown_083F8C00[r0].var08) + if (eRoulette->var08 & gUnknown_083F8C00[r0].var08) return 0x0; return var0[0x4]; default: @@ -2565,99 +2579,23 @@ bx r1\n\ } #endif -#ifdef NONMATCHING -void sub_8117434(void) //sprite rotation ? +void sub_8117434(void) { s32 x1; s32 x2; - REG_BG2PA = RDATA->var2C.a; - REG_BG2PB = RDATA->var2C.b; - REG_BG2PC = RDATA->var2C.c; - REG_BG2PD = RDATA->var2C.d; - x1 = 0x7400 - RDATA->var2C.a * (gSpriteCoordOffsetX + 0x74) - - RDATA->var2C.b * (gSpriteCoordOffsetY + 0x50); - x2 = 0x5400 - RDATA->var2C.c * gSpriteCoordOffsetX - - RDATA->var2C.d * gSpriteCoordOffsetY; + REG_BG2PA = eRoulette->var2C.a; + REG_BG2PB = eRoulette->var2C.b; + REG_BG2PC = eRoulette->var2C.c; + REG_BG2PD = eRoulette->var2C.d; + x1 = 0x7400 - eRoulette->var2C.a * (gSpriteCoordOffsetX + 0x74) + - eRoulette->var2C.b * (gSpriteCoordOffsetY + 0x50); + x2 = 0x5400 - eRoulette->var2C.c * (gSpriteCoordOffsetX + 0x74) + - eRoulette->var2C.d * (gSpriteCoordOffsetY + 0x50); REG_BG2X_L = x1; REG_BG2X_H = (x1 & 0x0fff0000) >> 16; REG_BG2Y_L = x2; REG_BG2Y_H = (x2 & 0x0fff0000) >> 16; } -#else -__attribute__((naked)) -void sub_8117434(void) -{ -asm(".syntax unified\n\ -push {r4-r6,lr}\n\ -ldr r1, _081174AC @ =REG_BG2PA\n\ -ldr r4, _081174B0 @ =0x02019000\n\ -ldrh r0, [r4, 0x2C]\n\ -strh r0, [r1]\n\ -adds r1, 0x2\n\ -ldrh r0, [r4, 0x2E]\n\ -strh r0, [r1]\n\ -adds r1, 0x2\n\ -ldrh r0, [r4, 0x30]\n\ -strh r0, [r1]\n\ -adds r1, 0x2\n\ -ldrh r0, [r4, 0x32]\n\ -strh r0, [r1]\n\ -movs r0, 0x2E\n\ -ldrsh r2, [r4, r0]\n\ -ldr r0, _081174B4 @ =gSpriteCoordOffsetY\n\ -movs r3, 0\n\ -ldrsh r1, [r0, r3]\n\ -adds r1, 0x50\n\ -adds r0, r2, 0\n\ -muls r0, r1\n\ -movs r2, 0xE8\n\ -lsls r2, 7\n\ -subs r2, r0\n\ -movs r6, 0x2C\n\ -ldrsh r5, [r4, r6]\n\ -ldr r0, _081174B8 @ =gSpriteCoordOffsetX\n\ -movs r6, 0\n\ -ldrsh r3, [r0, r6]\n\ -adds r3, 0x74\n\ -adds r0, r5, 0\n\ -muls r0, r3\n\ -subs r2, r0\n\ -movs r5, 0x32\n\ -ldrsh r0, [r4, r5]\n\ -muls r0, r1\n\ -movs r1, 0xA8\n\ -lsls r1, 7\n\ -subs r1, r0\n\ -movs r6, 0x30\n\ -ldrsh r0, [r4, r6]\n\ -muls r0, r3\n\ -subs r1, r0\n\ -ldr r0, _081174BC @ =REG_BG2X_L\n\ -strh r2, [r0]\n\ -adds r0, 0x2\n\ -ldr r3, _081174C0 @ =0x0fff0000\n\ -ands r2, r3\n\ -asrs r2, 16\n\ -strh r2, [r0]\n\ -adds r0, 0x2\n\ -strh r1, [r0]\n\ -adds r0, 0x2\n\ -ands r1, r3\n\ -asrs r1, 16\n\ -strh r1, [r0]\n\ -pop {r4-r6}\n\ -pop {r0}\n\ -bx r0\n\ -.align 2, 0\n\ -_081174AC: .4byte REG_BG2PA\n\ -_081174B0: .4byte 0x02019000\n\ -_081174B4: .4byte gSpriteCoordOffsetY\n\ -_081174B8: .4byte gSpriteCoordOffsetX\n\ -_081174BC: .4byte REG_BG2X_L\n\ -_081174C0: .4byte 0x0fff0000\n\ -.syntax divided\n"); -} -#endif s16 sub_81174C4(s16 r0, s16 r1) { @@ -2763,7 +2701,7 @@ void Task_Roulette_0(u8 taskid) } } -void PlayRoulette() +void PlayRoulette(void) { u8 taskid; ScriptContext2_Enable(); @@ -2823,7 +2761,7 @@ void sub_8117900(void) u8 o = i * 0x18; for (j = 0; j < 0x4; j++) { - spriteid = RDATA->var3C[0x1D + i * 0x4 + j] = + spriteid = eRoulette->var3C[0x1D + i * 0x4 + j] = CreateSprite(&gSpriteTemplate_83FA07C[j], j * 0x18 + 0x94, o + 0x5C, 0x1E); gSprites[spriteid].animPaused = TRUE; o += 0x18; @@ -2833,13 +2771,13 @@ void sub_8117900(void) } for (i = 0x0; i < 0x4; i++) { - spriteid = RDATA->var3C[0x29 + i] = + spriteid = eRoulette->var3C[0x29 + i] = CreateSprite(&gSpriteTemplate_83F9FD4[i], (s16)(i * 0x18 + 0x94), 0x46, 0x1E); gSprites[spriteid].animPaused = TRUE; } for (i = 0x0; i < 0x3; i++) { - spriteid = RDATA->var3C[0x2D + i] = + spriteid = eRoulette->var3C[0x2D + i] = CreateSprite(&gSpriteTemplate_83FA034[i], 0x7E, (s16)(i * 0x18 + 0x5C), 0x1E); gSprites[spriteid].animPaused = TRUE; } @@ -2849,7 +2787,7 @@ void unref_sub_8117A74(void) //destroy all sprites at 0x1D { u8 i; for (i = 0x0; i < 0xC; i++) - DestroySprite(&gSprites[RDATA->var3C[0x1D + i]]); + DestroySprite(&gSprites[eRoulette->var3C[0x1D + i]]); } void sub_8117AA8(u8 r0, u8 r1) @@ -2859,20 +2797,20 @@ void sub_8117AA8(u8 r0, u8 r1) { case 0x1: for (i = 0x0; i < 0x13; i++) - gSprites[RDATA->var3C[0x1D + i]].invisible = TRUE; + gSprites[eRoulette->var3C[0x1D + i]].invisible = TRUE; break; case 0x0: for (i = 0x0; i < 0xC; i++) { - if (!(RDATA->var08 & gUnknown_083F8D90[i].var04)) - gSprites[RDATA->var3C[0x1D + i]].invisible = FALSE; + if (!(eRoulette->var08 & gUnknown_083F8D90[i].var04)) + gSprites[eRoulette->var3C[0x1D + i]].invisible = FALSE; else if(!(gUnknown_083F8D90[i].var02 == r1)) - gSprites[RDATA->var3C[0x1D + i]].invisible = TRUE; + gSprites[eRoulette->var3C[0x1D + i]].invisible = TRUE; else - gSprites[RDATA->var3C[0x1D + i]].invisible = FALSE; + gSprites[eRoulette->var3C[0x1D + i]].invisible = FALSE; } for ( ; i < 0x13; i++) - gSprites[RDATA->var3C[0x1D + i]].invisible = FALSE; + gSprites[eRoulette->var3C[0x1D + i]].invisible = FALSE; break; } } @@ -2882,12 +2820,12 @@ void sub_8117BBC(void) u8 i; for (i = 0x0; i < 0x6; i++) { - RDATA->var3C[0x31 + i] = CreateSprite(&gSpriteTemplate_83FA40C, 0x74, 0x14, 0xA); - gSprites[RDATA->var3C[0x31 + i]].invisible = TRUE; - gSprites[RDATA->var3C[0x31 + i]].data[0] = 0x1; - gSprites[RDATA->var3C[0x31 + i]].callback = &sub_81184CC; - gSprites[RDATA->var3C[0x31 + i]].oam.priority = 0x1; - StartSpriteAnim(&gSprites[RDATA->var3C[0x31 + i]], 0x8); + eRoulette->var3C[0x31 + i] = CreateSprite(&gSpriteTemplate_83FA40C, 0x74, 0x14, 0xA); + gSprites[eRoulette->var3C[0x31 + i]].invisible = TRUE; + gSprites[eRoulette->var3C[0x31 + i]].data[0] = 0x1; + gSprites[eRoulette->var3C[0x31 + i]].callback = &sub_81184CC; + gSprites[eRoulette->var3C[0x31 + i]].oam.priority = 0x1; + StartSpriteAnim(&gSprites[eRoulette->var3C[0x31 + i]], 0x8); } } @@ -2897,21 +2835,21 @@ void sub_8117C60(u8 r0, u8 r1) if (r0) { for ( ; i < 0x6; i++) - gSprites[RDATA->var3C[0x31 + i]].invisible = TRUE; + gSprites[eRoulette->var3C[0x31 + i]].invisible = TRUE; } else { for ( ; i < 0x6; i++) { - if (!(RDATA->var0C[i]) || (i == r1)) + if (!(eRoulette->var0C[i]) || (i == r1)) { - gSprites[RDATA->var3C[0x31 + i]].invisible = TRUE; + gSprites[eRoulette->var3C[0x31 + i]].invisible = TRUE; } else { - gSprites[RDATA->var3C[0x31 + i]].invisible = FALSE; - gSprites[RDATA->var3C[0x31 + i]].pos1.x = (gUnknown_083F8C00[RDATA->var0C[i]].var03 + 0x1) * 0x8 + 0x4; - gSprites[RDATA->var3C[0x31 + i]].pos1.y = (gUnknown_083F8C00[RDATA->var0C[i]].var04 + 0x1) * 0x8 + 0x3; + gSprites[eRoulette->var3C[0x31 + i]].invisible = FALSE; + gSprites[eRoulette->var3C[0x31 + i]].pos1.x = (gUnknown_083F8C00[eRoulette->var0C[i]].var03 + 0x1) * 0x8 + 0x4; + gSprites[eRoulette->var3C[0x31 + i]].pos1.y = (gUnknown_083F8C00[eRoulette->var0C[i]].var04 + 0x1) * 0x8 + 0x3; } } } @@ -2921,13 +2859,13 @@ void sub_8117D68(u8 r0) { if (!r0) { - gSprites[RDATA->var3C[0x30]].invisible = TRUE; + gSprites[eRoulette->var3C[0x30]].invisible = TRUE; } else { - gSprites[RDATA->var3C[0x30]].invisible = FALSE; - gSprites[RDATA->var3C[0x30]].pos1.x = (gUnknown_083F8C00[r0].var03 + 0x2) * 0x8; - gSprites[RDATA->var3C[0x30]].pos1.y = (gUnknown_083F8C00[r0].var04 + 0x2) * 0x8; + gSprites[eRoulette->var3C[0x30]].invisible = FALSE; + gSprites[eRoulette->var3C[0x30]].pos1.x = (gUnknown_083F8C00[r0].var03 + 0x2) * 0x8; + gSprites[eRoulette->var3C[0x30]].pos1.y = (gUnknown_083F8C00[r0].var04 + 0x2) * 0x8; } } @@ -2948,7 +2886,7 @@ void sub_8117DF4(void) { u8 spriteid; spriteid = - RDATA->var3C[0x7 + i * 0x4 + j] = sub_8117890(&gSpriteTemplate_83FA0DC[i * 0x4 + j], 0x28, &k); + eRoulette->var3C[0x7 + i * 0x4 + j] = sub_8117890(&gSpriteTemplate_83FA0DC[i * 0x4 + j], 0x28, &k); gSprites[spriteid].animPaused = TRUE; gSprites[spriteid].affineAnimPaused = TRUE; } @@ -2963,14 +2901,14 @@ void sub_8117E98(struct Sprite *sprite) u16 angle; s16 cos, sin, z; u32 cos32; - angle = RDATA->var24 + sprite->data0; + angle = eRoulette->var24 + sprite->data[0x0]; z = angle; if (z > 359) angle = z - 360; sin = Sin2(angle); cos = Cos2(angle); - sprite->pos2.x = sin * sprite->data1 >> 0xC; - sprite->pos2.y = -cos * sprite->data1 >> 0xC; + sprite->pos2.x = sin * sprite->data[0x1] >> 0xC; + sprite->pos2.y = -cos * sprite->data[0x1] >> 0xC; p = sprite->oam.matrixNum; sin = sin / 0x10; m = &gOamMatrices[p]; @@ -3073,26 +3011,26 @@ void sub_8117F2C(void) s.tag = gUnknown_083FA21C[i].tag; LoadSpriteSheet(&s); } - RDATA->var3C[0x14] = CreateSprite(&gSpriteTemplate_83FA2B0, 0xD0, 0x10, 0x4); - gSprites[RDATA->var3C[0x14]].animPaused = TRUE; + eRoulette->var3C[0x14] = CreateSprite(&gSpriteTemplate_83FA2B0, 0xD0, 0x10, 0x4); + gSprites[eRoulette->var3C[0x14]].animPaused = TRUE; for (i = 0x0; i < 0x4; i++) { - RDATA->var3C[0x15 + i] = CreateSprite(&gSpriteTemplate_83FA2C8, (s16)(i * 0x8 + 0xC4), 0x18, 0x0); - gSprites[RDATA->var3C[0x15 + i]].invisible = TRUE; - gSprites[RDATA->var3C[0x15 + i]].animPaused = TRUE; + eRoulette->var3C[0x15 + i] = CreateSprite(&gSpriteTemplate_83FA2C8, (s16)(i * 0x8 + 0xC4), 0x18, 0x0); + gSprites[eRoulette->var3C[0x15 + i]].invisible = TRUE; + gSprites[eRoulette->var3C[0x15 + i]].animPaused = TRUE; } - RDATA->var3C[0x19] = CreateSprite(&gSpriteTemplate_83FA2E0, 0x78, 0x44, 0x4); - gSprites[RDATA->var3C[0x19]].animPaused = TRUE; + eRoulette->var3C[0x19] = CreateSprite(&gSpriteTemplate_83FA2E0, 0x78, 0x44, 0x4); + gSprites[eRoulette->var3C[0x19]].animPaused = TRUE; for (i = 0x0; i < 0x3; i++) { - RDATA->var3C[0x1A + i] = CreateSprite(&gSpriteTemplate_83FA2F8, (s16)(i * 0x10 + 0xC0), 0x24, 0x4); - gSprites[RDATA->var3C[0x1A + i]].invisible = TRUE; - gSprites[RDATA->var3C[0x1A + i]].animPaused = TRUE; + eRoulette->var3C[0x1A + i] = CreateSprite(&gSpriteTemplate_83FA2F8, (s16)(i * 0x10 + 0xC0), 0x24, 0x4); + gSprites[eRoulette->var3C[0x1A + i]].invisible = TRUE; + gSprites[eRoulette->var3C[0x1A + i]].animPaused = TRUE; } - RDATA->var3C[0x30] = CreateSprite(&gSpriteTemplate_83FA310, 0x98, 0x60, 0x9); - gSprites[RDATA->var3C[0x30]].oam.priority = 0x1; - gSprites[RDATA->var3C[0x30]].animPaused = TRUE; - gSprites[RDATA->var3C[0x30]].invisible = TRUE; + eRoulette->var3C[0x30] = CreateSprite(&gSpriteTemplate_83FA310, 0x98, 0x60, 0x9); + gSprites[eRoulette->var3C[0x30]].oam.priority = 0x1; + gSprites[eRoulette->var3C[0x30]].animPaused = TRUE; + gSprites[eRoulette->var3C[0x30]].invisible = TRUE; } void sub_81180F4(u16 r0) @@ -3103,13 +3041,13 @@ void sub_81180F4(u16 r0) for (i = 0x0; i < 0x4; i++) { u8 t = r0 / d; - gSprites[RDATA->var3C[0x15 + i]].invisible = TRUE; + gSprites[eRoulette->var3C[0x15 + i]].invisible = TRUE; if (t > 0x0 || v || i == 0x3) { - gSprites[RDATA->var3C[0x15 + i]].invisible = FALSE; - gSprites[RDATA->var3C[0x15 + i]].oam.tileNum = - gSprites[RDATA->var3C[0x15 + i]].sheetTileStart - + (*gSprites[RDATA->var3C[0x15 + i]].anims + t)->type; + gSprites[eRoulette->var3C[0x15 + i]].invisible = FALSE; + gSprites[eRoulette->var3C[0x15 + i]].oam.tileNum = + gSprites[eRoulette->var3C[0x15 + i]].sheetTileStart + + (*gSprites[eRoulette->var3C[0x15 + i]].anims + t)->type; v = TRUE; } r0 = r0 % d; @@ -3128,16 +3066,16 @@ u8 sub_81181E8(u8 r0) { case 0x3: r0 = r0 / 0x5 - 0x1; - if ((u32)RDATA->var16[r0] < 0x4) - return t[0x1 + RDATA->var16[r0]]; // couldn't recreate redundant loads + if ((u32)eRoulette->var16[r0] < 0x4) + return t[0x1 + eRoulette->var16[r0]]; // couldn't recreate redundant loads break; case 0x4: r0 = r0 - 0x1; - if (RDATA->var12[r0] < 0x3) - return t[0x2 + RDATA->var12[r0]]; + if (eRoulette->var12[r0] < 0x3) + return t[0x2 + eRoulette->var12[r0]]; break; case 0xC: - if (!(RDATA->var08 & gUnknown_083F8C00[r0].var08)) + if (!(eRoulette->var08 & gUnknown_083F8C00[r0].var08)) return t[0x4]; break; } @@ -3246,7 +3184,7 @@ bx r1\n\ void sub_811829C(u8 r0) { - struct Sprite *s = &gSprites[RDATA->var3C[0x19]]; + struct Sprite *s = &gSprites[eRoulette->var3C[0x19]]; s->animCmdIndex = sub_81181E8(r0); s->oam.tileNum = s->sheetTileStart @@ -3257,58 +3195,58 @@ void sub_81182F8(u8 r0) { u8 i; u8 t = 0x0; - if (RDATA->var19 == 0x1) + if (eRoulette->var19 == 0x1) t = 0x2; switch(r0) { case 0x6: for (i = 0x0; i < 0x3; i++) { - gSprites[RDATA->var3C[0x1A + i]].invisible = FALSE; - gSprites[RDATA->var3C[0x1A + i]].oam.tileNum = - gSprites[RDATA->var3C[0x1A + i]].sheetTileStart - + (*gSprites[RDATA->var3C[0x1A + i]].anims)->type; + gSprites[eRoulette->var3C[0x1A + i]].invisible = FALSE; + gSprites[eRoulette->var3C[0x1A + i]].oam.tileNum = + gSprites[eRoulette->var3C[0x1A + i]].sheetTileStart + + (*gSprites[eRoulette->var3C[0x1A + i]].anims)->type; } break; case 0x5: - gSprites[RDATA->var3C[0x1C]].oam.tileNum = - gSprites[RDATA->var3C[0x1C]].sheetTileStart - + (*gSprites[RDATA->var3C[0x1C]].anims + t + 0x1)->type; + gSprites[eRoulette->var3C[0x1C]].oam.tileNum = + gSprites[eRoulette->var3C[0x1C]].sheetTileStart + + (*gSprites[eRoulette->var3C[0x1C]].anims + t + 0x1)->type; break; case 0x4: - gSprites[RDATA->var3C[0x1C]].oam.tileNum = - gSprites[RDATA->var3C[0x1C]].sheetTileStart - + (*gSprites[RDATA->var3C[0x1C]].anims + t + 0x2)->type; + gSprites[eRoulette->var3C[0x1C]].oam.tileNum = + gSprites[eRoulette->var3C[0x1C]].sheetTileStart + + (*gSprites[eRoulette->var3C[0x1C]].anims + t + 0x2)->type; break; case 0x3: - gSprites[RDATA->var3C[0x1B]].oam.tileNum = - gSprites[RDATA->var3C[0x1B]].sheetTileStart - + (*gSprites[RDATA->var3C[0x1B]].anims + t + 0x1)->type; + gSprites[eRoulette->var3C[0x1B]].oam.tileNum = + gSprites[eRoulette->var3C[0x1B]].sheetTileStart + + (*gSprites[eRoulette->var3C[0x1B]].anims + t + 0x1)->type; break; case 0x2: - gSprites[RDATA->var3C[0x1B]].oam.tileNum = - gSprites[RDATA->var3C[0x1B]].sheetTileStart - + (*gSprites[RDATA->var3C[0x1B]].anims + t + 0x2)->type; + gSprites[eRoulette->var3C[0x1B]].oam.tileNum = + gSprites[eRoulette->var3C[0x1B]].sheetTileStart + + (*gSprites[eRoulette->var3C[0x1B]].anims + t + 0x2)->type; break; case 0x1: - gSprites[RDATA->var3C[0x1A]].oam.tileNum = - gSprites[RDATA->var3C[0x1A]].sheetTileStart - + (*gSprites[RDATA->var3C[0x1A]].anims + t + 0x1)->type; + gSprites[eRoulette->var3C[0x1A]].oam.tileNum = + gSprites[eRoulette->var3C[0x1A]].sheetTileStart + + (*gSprites[eRoulette->var3C[0x1A]].anims + t + 0x1)->type; break; case 0x0: default: for (i = 0x0; i < 0x3; i++) { - gSprites[RDATA->var3C[0x1A + i]].oam.tileNum = - gSprites[RDATA->var3C[0x1A + i]].sheetTileStart - + (*gSprites[RDATA->var3C[0x1A + i]].anims + t + 2)->type; + gSprites[eRoulette->var3C[0x1A + i]].oam.tileNum = + gSprites[eRoulette->var3C[0x1A + i]].sheetTileStart + + (*gSprites[eRoulette->var3C[0x1A + i]].anims + t + 2)->type; } } } void sub_81184CC(struct Sprite *sprite) { - sprite->pos2.x = RDATA->var26; + sprite->pos2.x = eRoulette->var26; } void sub_81184D8(void) @@ -3321,7 +3259,7 @@ void sub_81184D8(void) s.tag = gUnknown_083FA42C.tag; LoadSpriteSheet(&s); spriteid = CreateSprite(&gSpriteTemplate_83FA434, 0x74, 0x50, 0x51); - gSprites[spriteid].data[0] = RDATA->var24; + gSprites[spriteid].data[0] = eRoulette->var24; gSprites[spriteid].data[1] = 0x0; gSprites[spriteid].animPaused = TRUE; gSprites[spriteid].affineAnimPaused = TRUE; @@ -3332,252 +3270,1284 @@ void sub_8118554(struct Sprite *sprite) { u32 t = sprite->oam.matrixNum; struct OamMatrix *m = &gOamMatrices[0]; - m[t].d = RDATA->var2C.a; - m[t].a = RDATA->var2C.a; - m[t].b = RDATA->var2C.b; - m[t].c = RDATA->var2C.c; + m[t].d = eRoulette->var2C.a; + m[t].a = eRoulette->var2C.a; + m[t].b = eRoulette->var2C.b; + m[t].c = eRoulette->var2C.c; +} + +void sub_811857C(void) +{ + u8 i; + for (i = 0x0; i < 0x6; i++) + { + u8 spriteid = + eRoulette->var3C[i] = CreateSprite(&gSpriteTemplate_83FA40C, 0x74, 0x50, 0x39 - i); + if (spriteid != 0x40) + { + gSprites[eRoulette->var3C[i]].invisible = TRUE; + gSprites[eRoulette->var3C[i]].coordOffsetEnabled = TRUE; + } + } +} + +void sub_81185E8(void) +{ + u8 t = eRoulette->var3C[0x0]; + u8 i; + for (i = 0x0; i < 0x6; i++) + { + u8 j; + gSprites[t].invisible = TRUE; + gSprites[t].callback = &SpriteCallbackDummy; + StartSpriteAnim(&gSprites[t], 0x0); + for (j = 0x0; j < 0x8; j++) + gSprites[t].data[j] = 0x0; + t++; + } +} + +s16 sub_811866C(struct Sprite *sprite) +{ + if (eRoulette->var24 > sprite->data[0x3]) + { + sprite->data[0x6] = 360 - eRoulette->var24 + sprite->data[0x3]; + if (sprite->data[0x6] > 359) + sprite->data[0x6] -=360; + } + else + sprite->data[0x6] = sprite->data[0x3] - eRoulette->var24; + return sprite->data[0x6]; +} + +u8 sub_81186B8(struct Sprite *sprite) +{ + eRoulette->var7E = (u8)(((float)(s16)sub_811866C(sprite)) / 30.0f); + return eRoulette->var7E; +} + +s16 sub_81186E8(struct Sprite *sprite) +{ + s16 t = sub_811866C(sprite) % 30; + u16 z; + if (t == 0xE) + { + z = 0x0; + return sprite->data[0x2] = z; + } + else if (t > 0xD) + { + z = (u16)(0x2B - t); + return sprite->data[0x2] = z; + } + else + { + z = (u16)(0xE - t); + return sprite->data[0x2] = z; + } +} + +void sub_8118724(struct Sprite *sprite) +{ + s16 sin, cos; + eRoulette->var8C += eRoulette->var90; + eRoulette->var88 += eRoulette->var8C; + if (eRoulette->var88 >= 360) + eRoulette->var88 -= 360.0f; + else + if (eRoulette->var88 < 0.0f) + eRoulette->var88 += 360.0f; + sprite->data[0x3] = eRoulette->var88; + eRoulette->var98 += eRoulette->var9C; + eRoulette->var94 += eRoulette->var98; + sprite->data[0x4] = eRoulette->var94; + sin = Sin2(sprite->data[0x3]); + cos = Cos2(sprite->data[0x3]); + sprite->pos2.x = sin * sprite->data[0x4] >> 0xC; + sprite->pos2.y = -cos * sprite->data[0x4] >> 0xC; + if (IsSEPlaying()) + { + m4aMPlayPanpotControl(&gMPlay_SE1, 0xFFFF, sprite->pos2.x); + m4aMPlayPanpotControl(&gMPlay_SE2, 0xFFFF, sprite->pos2.x); + } +} + +void sub_8118834(struct Sprite *sprite) +{ + s16 sin, cos; + sprite->data[0x3] = eRoulette->var24 + sprite->data[0x6]; + if (sprite->data[0x3] > 359) + sprite->data[0x3] -= 360; + sin = Sin2(sprite->data[0x3]); + cos = Cos2(sprite->data[0x3]); + sprite->pos2.x = sin * sprite->data[0x4] >> 0xC; + sprite->pos2.y = -cos * sprite->data[0x4] >> 0xC; + sprite->pos2.y += gSpriteCoordOffsetY; +} + +void sub_811889C(struct Sprite *sprite) +{ + sub_8118724(sprite); + sprite->data[0x2]++; + if ((u16)(sprite->data[0x4] + 0x84) > 0xD4) + sprite->invisible = TRUE; + else + sprite->invisible = FALSE; + if (!(sprite->data[0x2] < 30)) + { + if (!sprite->data[0x0]) + { + if (eRoulette->var94 <= eRoulette->varA0 - 2.0f) + { + eRoulette->var7D = 0xFF; + eRoulette->var03_7 = 0x0; + StartSpriteAnim(sprite, sprite->animCmdIndex + 0x3); + sub_81186B8(sprite); + sprite->data[0x4] = 30; + sub_811866C(sprite); + sprite->data[0x6] = (sprite->data[0x6] / 30) * 30 + 0xF; + sprite->callback = &sub_8118834; + m4aSongNumStartOrChange(0x47); + eRoulette->var9C = eRoulette->var98 = 0.0f; + eRoulette->var8C = -1.0f; + } + } + else + { + if (eRoulette->var94 >= eRoulette->varA0 - 2.0f) + { + eRoulette->var7D = 0xFF; + eRoulette->var03_7 = 0x0; + StartSpriteAnim(sprite, sprite->animCmdIndex + 0x3); + sub_81186B8(sprite); + sprite->data[0x4] = 30; + sub_811866C(sprite); + sprite->data[0x6] = (sprite->data[0x6] / 30) * 30 + 0xF; + sprite->callback = &sub_8118834; + m4aSongNumStartOrChange(0x47); + eRoulette->var9C = eRoulette->var98 = 0.0f; + eRoulette->var8C = -1.0f; + } + } + } +} + +void sub_81189A8(struct Sprite *sprite) +{ + float f0, f1, f2; + struct StructgUnknown_083F8DF4 *p; + sub_8118724(sprite); + switch(sprite->data[0x3]) + { + case 0: + if (sprite->data[0x0] != 0x1) + { + f0 = ((float)sprite->data[0x7]); + p = &gUnknown_083F8DF4[0]; + f1 = (f0 * ((float)(s32)p[eRoulette->var04_0].var01) + (float)((s32)p[eRoulette->var04_0].var02 - 0x1)); + f2 = (f0 / ((float)(s32)p[eRoulette->var04_0].var0C)); + } + else + { + return; + } + break; + case 180: + if (sprite->data[0x0] != 0x0) + { + f0 = ((float)sprite->data[0x7]); + p = &gUnknown_083F8DF4[0]; + f1 = (f0 * ((float)(s32)p[eRoulette->var04_0].var01) + (float)((s32)p[eRoulette->var04_0].var02 - 0x1)); + f2 = -(f0 / ((float)(s32)p[eRoulette->var04_0].var0C)); + } + else + { + return; + } + break; + default: return; + } + eRoulette->varA0 = eRoulette->var94; + eRoulette->var98 = f2; + eRoulette->var9C = -((f2 + f2) / f1 + (2.0f / (f1 * f1))); + eRoulette->var8C = 0.0f; + sprite->animPaused = FALSE; + sprite->animNum = 0x0; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; + sprite->callback = &sub_811889C; + sprite->data[0x2] = 0x0; +} + +void sub_8118B30(struct Sprite *sprite) +{ + sprite->pos2.y = (s32)(((float)sprite->data[0x2]) * 0.05f * ((float)sprite->data[0x2])) - 45; + sprite->data[0x2]++; + if (sprite->data[0x2] > 29 && sprite->pos2.y >= 0) + { + eRoulette->var7D = 0xFF; + eRoulette->var03_7 = FALSE; + StartSpriteAnim(sprite, sprite->animCmdIndex + 0x3); + sub_81186B8(sprite); + sprite->data[0x4] = 30; + sub_811866C(sprite); + sprite->data[0x6] = (sprite->data[0x6] / 30) * 30 + 0xF; + sprite->callback = &sub_8118834; + m4aSongNumStartOrChange(0x47); + eRoulette->var03_6 = TRUE; + } +} + +void sub_8118BD8(struct Sprite *sprite) +{ + if (sprite->data[0x2]++ < 45) + { + sprite->pos2.y--; + if(sprite->data[0x2] == 45) + { + if (gSprites[eRoulette->var3C[0x37]].animCmdIndex == 0x1) + sprite->pos2.y++; + } + } + else + { + if (sprite->data[0x2] < sprite->data[0x7]) + { + if (gSprites[eRoulette->var3C[0x37]].animDelayCounter == 0x0) + { + if (gSprites[eRoulette->var3C[0x37]].animCmdIndex == 0x1) + sprite->pos2.y++; + else + sprite->pos2.y--; + } + } + else + { + sprite->animPaused = FALSE; + sprite->animNum = 0x1; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; + sprite->data[0x2] = 0x0; + sprite->callback = &sub_8118B30; + m4aSongNumStart(0x3D); + } + } +} + +void sub_8118CAC(struct Sprite *sprite) +{ + sub_8118724(sprite); + switch(sprite->data[0x3]) + { + case 90: + if (sprite->data[0x0] != 0x1) + { + sprite->callback = &sub_8118BD8; + sprite->data[0x2] = 0x0; + } + break; + case 270: + if (sprite->data[0x0] != 0x0) + { + sprite->callback = &sub_8118BD8; + sprite->data[0x2] = 0x0; + } + break; + } +} + +void sub_8118CEC(struct Sprite *sprite) +{ + sub_8118724(sprite); + switch(eRoulette->var03_0) + { + default: + case 0x0: + sub_8119224(sprite); + sprite->callback = &sub_81189A8; + break; + case 0x1: + sub_81193D4(sprite); + sprite->callback = &sub_8118CAC; + break; + } +} + +void sub_8118D2C(struct Sprite *sprite) +{ + sub_8118724(sprite); + if (sprite->data[0x2]-- == 0x10) + eRoulette->var98 *= -1.0f; + if (sprite->data[0x2] == 0x0) + { + if (!sprite->data[0x0]) + { + eRoulette->var7D = 0xFF; + eRoulette->var03_7 = 0x0; + StartSpriteAnim(sprite, sprite->animCmdIndex + 0x3); + sub_81186B8(sprite); + sprite->data[0x4] = 30; + sub_811866C(sprite); + sprite->data[0x6] = (sprite->data[0x6] / 30) * 30 + 15; + sprite->callback = &sub_8118834; + m4aSongNumStartOrChange(0x47); + } + else + { + sprite->animPaused = TRUE; + m4aSongNumStart(0x38); + sub_811952C(sprite); + } + } +} + +#ifdef NONMATCHING +void sub_8118DE4(struct Sprite *sprite) +{ + sub_8118724(sprite); + sprite->data[0x2] = 0x0; + sub_81186B8(sprite); + if (!(gUnknown_083F8D90[eRoulette->var7E].var04 & eRoulette->var08)) + { + eRoulette->var7D = 0xFF; + eRoulette->var03_7 = 0x0; + StartSpriteAnim(sprite, sprite->animCmdIndex + 0x3); + sub_81186B8(sprite); + sprite->data[0x4] = 30; + sub_811866C(sprite); + sprite->data[0x6] = (sprite->data[0x6] / 30) * 30 + 15; + sprite->callback = &sub_8118834; + m4aSongNumStartOrChange(0x47); + } + else + { + u8 t; + u32 z; + m4aSongNumStart(0x38); + if ((z = (Random() & 0x1))) + { + u32 o; + eRoulette->var8C = 0.0f; + o = (eRoulette->var7E + 0x1) % 0xC; + t = o; + eRoulette->var7F = o; + } + else + { + eRoulette->var8C = gUnknown_083F8DF4[eRoulette->var04_0].var1C * 2; // couldn't replicate loads + t = (eRoulette->var7E + 0xB) % 0xC; + eRoulette->var7F = eRoulette->var7E; + } + if (gUnknown_083F8D90[t].var04 & eRoulette->var08) + { + sprite->data[0x0] = 0x1; + sprite->data[0x2] = (&gUnknown_083F8DF4[eRoulette->var04_0])->var02; + } + else + { + sprite->data[0x0] = gUnknown_083F8D90[t].var04 & eRoulette->var08; + if (eRoulette->var04_0) + { + sprite->data[0x2] = (&gUnknown_083F8DF4[eRoulette->var04_0])->var01; + } + else + { + sprite->data[0x2] = (&gUnknown_083F8DF4[eRoulette->var04_0])->var02; + if (z) + { + eRoulette->var8C = 1.5f; + } + else + { + eRoulette->var8C = -1.5f; + } + } + } + eRoulette->var98 = 0.085f; + sprite->callback = &sub_8118D2C; + sprite->data[0x1] = 0x5; + } +} +#else +__attribute__((naked)) +void sub_8118DE4(struct Sprite *sprite) +{ +asm(".syntax unified\n\ +push {r4-r7,lr}\n\ +mov r7, r9\n\ +mov r6, r8\n\ +push {r6,r7}\n\ +adds r7, r0, 0\n\ +bl sub_8118724\n\ +movs r0, 0\n\ +strh r0, [r7, 0x32]\n\ +adds r0, r7, 0\n\ +bl sub_81186B8\n\ +ldr r1, _08118E70 @ =gUnknown_083F8D90\n\ +ldr r6, _08118E74 @ =gSharedMem + 0x19000\n\ +movs r0, 0x7E\n\ +adds r0, r6\n\ +mov r8, r0\n\ +ldrb r0, [r0]\n\ +lsls r0, 3\n\ +adds r1, 0x4\n\ +adds r0, r1\n\ +ldr r0, [r0]\n\ +ldr r1, [r6, 0x8]\n\ +ands r0, r1\n\ +cmp r0, 0\n\ +bne _08118E7C\n\ +adds r1, r6, 0\n\ +adds r1, 0x7D\n\ +movs r0, 0xFF\n\ +strb r0, [r1]\n\ +ldrb r1, [r6, 0x3]\n\ +movs r0, 0x7F\n\ +ands r0, r1\n\ +strb r0, [r6, 0x3]\n\ +adds r0, r7, 0\n\ +adds r0, 0x2B\n\ +ldrb r1, [r0]\n\ +adds r1, 0x3\n\ +lsls r1, 24\n\ +lsrs r1, 24\n\ +adds r0, r7, 0\n\ +bl StartSpriteAnim\n\ +adds r0, r7, 0\n\ +bl sub_81186B8\n\ +movs r0, 0x1E\n\ +strh r0, [r7, 0x36]\n\ +adds r0, r7, 0\n\ +bl sub_811866C\n\ +movs r1, 0x3A\n\ +ldrsh r0, [r7, r1]\n\ +movs r1, 0x1E\n\ +bl __divsi3\n\ +lsls r0, 16\n\ +asrs r0, 16\n\ +lsls r1, r0, 4\n\ +subs r1, r0\n\ +lsls r1, 1\n\ +adds r1, 0xF\n\ +strh r1, [r7, 0x3A]\n\ +ldr r0, _08118E78 @ =sub_8118834\n\ +str r0, [r7, 0x1C]\n\ +movs r0, 0x47\n\ +bl m4aSongNumStartOrChange\n\ +b _08118F74\n\ +.align 2, 0\n\ +_08118E70: .4byte gUnknown_083F8D90\n\ +_08118E74: .4byte gSharedMem + 0x19000\n\ +_08118E78: .4byte sub_8118834\n\ +_08118E7C:\n\ +movs r0, 0x38\n\ +bl m4aSongNumStart\n\ +bl Random\n\ +movs r2, 0x1\n\ +mov r9, r2\n\ +mov r1, r9\n\ +ands r1, r0\n\ +mov r9, r1\n\ +cmp r1, 0\n\ +beq _08118EC0\n\ +adds r1, r6, 0\n\ +adds r1, 0x8C\n\ +ldr r0, _08118EB8 @ =0x00000000\n\ +str r0, [r1]\n\ +mov r2, r8\n\ +ldrb r0, [r2]\n\ +adds r0, 0x1\n\ +movs r1, 0xC\n\ +bl __modsi3\n\ +lsls r1, r0, 24\n\ +lsrs r2, r1, 24\n\ +adds r1, r6, 0\n\ +adds r1, 0x7F\n\ +strb r0, [r1]\n\ +ldr r5, _08118EBC @ =gUnknown_083F8DF4\n\ +b _08118EF4\n\ +.align 2, 0\n\ +_08118EB8: .4byte 0x00000000\n\ +_08118EBC: .4byte gUnknown_083F8DF4\n\ +_08118EC0:\n\ +adds r4, r6, 0\n\ +adds r4, 0x8C\n\ +ldr r5, _08118F1C @ =gUnknown_083F8DF4\n\ +ldrb r0, [r6, 0x4]\n\ +lsls r0, 30\n\ +lsrs r0, 25\n\ +adds r1, r5, 0\n\ +adds r1, 0x1C\n\ +adds r0, r1\n\ +ldr r1, [r0]\n\ +adds r0, r1, 0\n\ +bl __addsf3\n\ +str r0, [r4]\n\ +mov r0, r8\n\ +ldrb r4, [r0]\n\ +adds r0, r4, 0\n\ +adds r0, 0xB\n\ +movs r1, 0xC\n\ +bl __modsi3\n\ +lsls r0, 24\n\ +lsrs r2, r0, 24\n\ +adds r0, r6, 0\n\ +adds r0, 0x7F\n\ +strb r4, [r0]\n\ +_08118EF4:\n\ +ldr r0, _08118F20 @ =gUnknown_083F8D90\n\ +lsls r1, r2, 3\n\ +adds r0, 0x4\n\ +adds r1, r0\n\ +ldr r2, _08118F24 @ =gSharedMem + 0x19000\n\ +ldr r1, [r1]\n\ +ldr r0, [r2, 0x8]\n\ +ands r1, r0\n\ +cmp r1, 0\n\ +beq _08118F28\n\ +movs r0, 0x1\n\ +strh r0, [r7, 0x2E]\n\ +ldrb r0, [r2, 0x4]\n\ +lsls r0, 30\n\ +lsrs r0, 25\n\ +adds r0, r5\n\ +ldrb r0, [r0, 0x2]\n\ +strh r0, [r7, 0x32]\n\ +b _08118F64\n\ +.align 2, 0\n\ +_08118F1C: .4byte gUnknown_083F8DF4\n\ +_08118F20: .4byte gUnknown_083F8D90\n\ +_08118F24: .4byte gSharedMem + 0x19000\n\ +_08118F28:\n\ +strh r1, [r7, 0x2E]\n\ +ldrb r1, [r2, 0x4]\n\ +movs r0, 0x3\n\ +ands r0, r1\n\ +cmp r0, 0\n\ +beq _08118F40\n\ +lsls r0, r1, 30\n\ +lsrs r0, 25\n\ +adds r0, r5\n\ +ldrb r0, [r0, 0x1]\n\ +strh r0, [r7, 0x32]\n\ +b _08118F64\n\ +_08118F40:\n\ +lsls r0, r1, 30\n\ +lsrs r0, 25\n\ +adds r0, r5\n\ +ldrb r0, [r0, 0x2]\n\ +strh r0, [r7, 0x32]\n\ +mov r1, r9\n\ +cmp r1, 0\n\ +beq _08118F5C\n\ +adds r1, r2, 0\n\ +adds r1, 0x8C\n\ +ldr r0, _08118F58 @ =0x3f000000\n\ +b _08118F62\n\ +.align 2, 0\n\ +_08118F58: .4byte 0x3f000000\n\ +_08118F5C:\n\ +adds r1, r2, 0\n\ +adds r1, 0x8C\n\ +ldr r0, _08118F80 @ =0xbfc00000\n\ +_08118F62:\n\ +str r0, [r1]\n\ +_08118F64:\n\ +adds r1, r2, 0\n\ +adds r1, 0x98\n\ +ldr r0, _08118F84 @ =0x3dae147b\n\ +str r0, [r1]\n\ +ldr r0, _08118F88 @ =sub_8118D2C\n\ +str r0, [r7, 0x1C]\n\ +movs r0, 0x5\n\ +strh r0, [r7, 0x30]\n\ +_08118F74:\n\ +pop {r3,r4}\n\ +mov r8, r3\n\ +mov r9, r4\n\ +pop {r4-r7}\n\ +pop {r0}\n\ +bx r0\n\ +.align 2, 0\n\ +_08118F80: .4byte 0xbfc00000\n\ +_08118F84: .4byte 0x3dae147b\n\ +_08118F88: .4byte sub_8118D2C\n\ +.syntax divided\n"); +} +#endif + +void sub_8118F8C(struct Sprite *sprite) +{ + sub_8118724(sprite); + if (!(eRoulette->var8C > 0.5f)) + { + sub_81186B8(sprite); + if (sub_81186E8(sprite) == 0x0) + { + struct StructgUnknown_083F8DF4 *p; + eRoulette->var90 = 0.0f; + p = &gUnknown_083F8DF4[0]; + eRoulette->var8C -= ((float)p[eRoulette->var04_0].var03) + / ((float)(s16)((&p[eRoulette->var04_0])->var04 + 0x1)); + sprite->data[0x1] = 0x4; + sprite->callback = &sub_8118DE4; + } + else + { + if (eRoulette->var90 != 0.0f) + { + if (eRoulette->var8C < 0.0f) + { + eRoulette->var90 = 0.0f; + eRoulette->var8C = 0.0f; + eRoulette->var98 /= 1.2; + } + } + } + } +} + +void sub_8119088(struct Sprite *sprite) +{ + sub_8118724(sprite); + if (!(eRoulette->var94 > 40.f)) + { + eRoulette->var98 = - ( 4.0f / (float)(u16)eRoulette->var86); + eRoulette->var90 = - (eRoulette->var8C / (float)(u16)eRoulette->var86); + sprite->animNum = 0x2; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; + sprite->data[0x1] = 0x3; + sprite->callback = &sub_8118F8C; + } +} + +void sub_8119134(struct Sprite *sprite) +{ + sub_8118724(sprite); + if (!(eRoulette->var94 > 60.0f)) + { + m4aSongNumStartOrChange(0x5D); + eRoulette->var98 = - ( 20.0f / (float)(u16)eRoulette->var84); + eRoulette->var90 = ((1.0f - eRoulette->var8C) / (float)(u16)eRoulette->var84); + sprite->animNum = 0x1; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; + sprite->data[0x1] = 0x2; + sprite->callback = &sub_8119088; + } +} + +void sub_81191F4(struct Sprite *sprite) +{ + sprite->data[0x1] = 0x1; + sprite->data[0x2] = 0x0; + sub_8118724(sprite); + sprite->invisible = FALSE; + sprite->callback = &sub_8119134; +} + +void sub_8119224(struct Sprite *sprite) +{ + u16 t; + u8 i; + s16 s[0x2][0x2]; + struct Roulette *p; + memcpy(s, &gUnknown_083FA60E, 0x8); + t = sprite->data[0x7] - 0x2; + p = eRoulette; + p->var3C[0x37] = CreateSprite(&gSpriteTemplate_83FA50C, 0x24, -0xC, 0x32); + p->var3C[0x38] = CreateSprite(&gSpriteTemplate_83FA5C0[0x0], s[sprite->data[0x0]][0x0], s[sprite->data[0x0]][0x1], 0x3B); + p->var3C[0x39] = CreateSprite(&gSpriteTemplate_83FA5C0[0x1], 0x24, 0x8C, 0x33); + gSprites[eRoulette->var3C[0x39]].oam.objMode = 0x1; + for (i = 0x0; i < 0x3; i++) + { + gSprites[eRoulette->var3C[0x37 + i]].coordOffsetEnabled = FALSE; + gSprites[eRoulette->var3C[0x37 + i]].invisible = TRUE; + gSprites[eRoulette->var3C[0x37 + i]].animPaused = TRUE; + gSprites[eRoulette->var3C[0x37 + i]].affineAnimPaused = TRUE; + gSprites[eRoulette->var3C[0x37 + i]].data[0x4] = eRoulette->var3C[0x37]; + gSprites[eRoulette->var3C[0x37 + i]].data[0x5] = eRoulette->var3C[0x38]; + gSprites[eRoulette->var3C[0x37 + i]].data[0x6] = eRoulette->var3C[0x39]; + gSprites[eRoulette->var3C[0x37 + i]].data[0x2] = t; + gSprites[eRoulette->var3C[0x37 + i]].data[0x3] = (sprite->data[0x7] * (&gUnknown_083F8DF4[eRoulette->var04_0])->var01) + + ((&gUnknown_083F8DF4[eRoulette->var04_0])->var02 + 0xFFFF); + } + gSprites[eRoulette->var3C[0x38]].coordOffsetEnabled = TRUE; + eRoulette->var38 = sprite; +} + +void sub_81193D4(struct Sprite *sprite) +{ + u8 i = 0; + s16 t; + s16 s[0x2][0x2]; + struct StructgUnknown_083F8DF4 *p; + memcpy(s, &gUnknown_083FA616, 0x8); + t = sprite->data[0x7] - 0x2; + eRoulette->var3C[0x37] = CreateSprite(&gSpriteTemplate_83FA524, s[sprite->data[0x0]][0x0], s[sprite->data[0x0]][0x1], 0x32); + StartSpriteAnim(&gSprites[eRoulette->var3C[0x37]], sprite->data[0x0]); + eRoulette->var3C[0x38] = CreateSprite(&gSpriteTemplate_83FA5F0, s[sprite->data[0x0]][0x0], s[sprite->data[0x0]][0x1], 0x33); + gSprites[eRoulette->var3C[0x38]].affineAnimPaused = TRUE; + gSprites[eRoulette->var3C[0x38]].animPaused = TRUE; + sprite->data[0x7] = (t * (p = &gUnknown_083F8DF4[0])[eRoulette->var04_0].var01) + (p[eRoulette->var04_0].var10 + 0x2D); + for (; i < 0x2; i++) + { + gSprites[eRoulette->var3C[0x37 + i]].data[0x4] = eRoulette->var3C[0x37]; + gSprites[eRoulette->var3C[0x37 + i]].data[0x5] = eRoulette->var3C[0x38]; + gSprites[eRoulette->var3C[0x37 + i]].data[0x6] = eRoulette->var3C[0x38]; + gSprites[eRoulette->var3C[0x37 + i]].data[0x2] = t; + gSprites[eRoulette->var3C[0x37 + i]].data[0x3] = sprite->data[0x7] - 0x2D; + } + eRoulette->var38 = sprite; +} + +#ifdef NONMATCHING +void sub_811952C(struct Sprite *sprite) +{ + u8 z; + register u8 h asm("r10") = 0x0; + u8 j = 0x5; + u32 p = 0x0; + u16 o; + u8 i; + u8 s[0xA] = (u8[]){0,0,0,0,0,0,0,0,0,0}; + u16 t = Random(); + eRoulette->var7D = 0x1; + eRoulette->var03_5 = TRUE; + eRoulette->var03_6 = FALSE; + eRoulette->var7E = 0xFF; + eRoulette->var88 = sprite->data[0x3]; + eRoulette->var98 = 0.0f; + eRoulette->var8C = (&gUnknown_083F8DF4[eRoulette->var04_0])->var1C; //couldn't replicate load, same as sub_8118DE4 + o = (eRoulette->var04_0 * 30 + 33) + (0x1 - eRoulette->var03_0) * 15; + for (i = 0x0; i < 0x4; i++) + { + if (o < sprite->data[0x3] && !(sprite->data[0x3] > o + 90)) + { + sprite->data[0x0] = i * 0x2; + eRoulette->var03_0 = 0x1 & i; + break; + } + if (i == 0x3) + { + sprite->data[0x0] = 0x1; + eRoulette->var03_0 = 0x1; + break; + } + o += 90; + } + if (eRoulette->var03_0) + { + if (sprite->data[0x0]) + { + PlayCry1(0x130, -0x3F); + } + else + { + PlayCry1(0x130, 0x3F); + } + } + else + { + PlayCry1(0x132, -0x3F); + } + i = 0x2; + z = (eRoulette->var7F + 0x2) % 0xC; + if (eRoulette->var03_0 == 0x1 && eRoulette->var04_0 == 0x1) + j += 0x6; + else + j += i; + for (; i < j; i++) + { + if (!(eRoulette->var08 & gUnknown_083F8D90[z].var04)) + { + s[h++] = i; + if (!p && (gUnknown_083F8D90[z].var04 & gUnknown_083F8C00[eRoulette->var1B[eRoulette->var1A_0]].var00)) + { + p = i; + } + } + z = (z + 0x1) % 0xC; + } + if ((eRoulette->var03_0 + 0x1) & eRoulette->var02) + { + if (p && (t & 0xFF) <= 0xBF) + { + sprite->data[0x7] = p; + } + else + { + sprite->data[0x7] = s[t % h]; + } + } + else + { + sprite->data[0x7] = s[t % h]; + } + sprite->callback = &sub_8118CEC; +} +#else +__attribute__((naked)) +void sub_811952C(struct Sprite *sprite) +{ +asm(".syntax unified\n\ +push {r4-r7,lr}\n\ +mov r7, r10\n\ +mov r6, r9\n\ +mov r5, r8\n\ +push {r5-r7}\n\ +sub sp, 0x14\n\ +mov r8, r0\n\ +movs r0, 0\n\ +mov r10, r0\n\ +movs r1, 0x5\n\ +mov r9, r1\n\ +movs r2, 0\n\ +str r2, [sp, 0xC]\n\ +mov r0, sp\n\ +movs r1, 0\n\ +movs r2, 0xA\n\ +bl memset\n\ +bl Random\n\ +lsls r0, 16\n\ +lsrs r0, 16\n\ +str r0, [sp, 0x10]\n\ +ldr r7, _08119610 @ =gSharedMem + 0x19000\n\ +adds r0, r7, 0\n\ +adds r0, 0x7D\n\ +movs r6, 0x1\n\ +strb r6, [r0]\n\ +ldrb r4, [r7, 0x3]\n\ +movs r0, 0x20\n\ +orrs r4, r0\n\ +movs r0, 0x41\n\ +negs r0, r0\n\ +ands r4, r0\n\ +strb r4, [r7, 0x3]\n\ +adds r1, r7, 0\n\ +adds r1, 0x7E\n\ +movs r0, 0xFF\n\ +strb r0, [r1]\n\ +adds r5, r7, 0\n\ +adds r5, 0x88\n\ +mov r3, r8\n\ +movs r1, 0x34\n\ +ldrsh r0, [r3, r1]\n\ +bl __floatsisf\n\ +str r0, [r5]\n\ +adds r1, r7, 0\n\ +adds r1, 0x98\n\ +ldr r0, _08119614 @ =0x00000000\n\ +str r0, [r1]\n\ +adds r3, r7, 0\n\ +adds r3, 0x8C\n\ +ldr r2, _08119618 @ =gUnknown_083F8DF4\n\ +ldrb r0, [r7, 0x4]\n\ +lsls r0, 30\n\ +lsrs r1, r0, 25\n\ +adds r2, 0x1C\n\ +adds r1, r2\n\ +ldr r1, [r1]\n\ +str r1, [r3]\n\ +lsrs r0, 30\n\ +lsls r1, r0, 4\n\ +subs r1, r0\n\ +lsls r1, 1\n\ +adds r1, 0x21\n\ +lsls r4, 27\n\ +lsrs r4, 27\n\ +subs r6, r4\n\ +lsls r0, r6, 4\n\ +subs r0, r6\n\ +adds r1, r0\n\ +lsls r1, 16\n\ +lsrs r1, 16\n\ +mov r5, r10\n\ +mov r3, r8\n\ +movs r0, 0x34\n\ +ldrsh r2, [r3, r0]\n\ +_081195C8:\n\ +cmp r1, r2\n\ +bge _081195D4\n\ +adds r0, r1, 0\n\ +adds r0, 0x5A\n\ +cmp r2, r0\n\ +ble _08119638\n\ +_081195D4:\n\ +cmp r5, 0x3\n\ +beq _0811961C\n\ +adds r0, r1, 0\n\ +adds r0, 0x5A\n\ +lsls r0, 16\n\ +lsrs r1, r0, 16\n\ +adds r0, r5, 0x1\n\ +lsls r0, 24\n\ +lsrs r5, r0, 24\n\ +cmp r5, 0x3\n\ +bls _081195C8\n\ +_081195EA:\n\ +ldr r0, _08119610 @ =gSharedMem + 0x19000\n\ +ldrb r1, [r0, 0x3]\n\ +movs r0, 0x1F\n\ +ands r0, r1\n\ +cmp r0, 0\n\ +beq _08119664\n\ +mov r1, r8\n\ +movs r2, 0x2E\n\ +ldrsh r0, [r1, r2]\n\ +cmp r0, 0\n\ +beq _08119658\n\ +movs r0, 0x98\n\ +lsls r0, 1\n\ +movs r1, 0x3F\n\ +negs r1, r1\n\ +bl PlayCry1\n\ +b _08119670\n\ +.align 2, 0\n\ +_08119610: .4byte gSharedMem + 0x19000\n\ +_08119614: .4byte 0x00000000\n\ +_08119618: .4byte gUnknown_083F8DF4\n\ +_0811961C:\n\ +movs r0, 0x1\n\ +mov r3, r8\n\ +strh r0, [r3, 0x2E]\n\ +ldr r2, _08119634 @ =gSharedMem + 0x19000\n\ +ldrb r1, [r2, 0x3]\n\ +subs r0, 0x21\n\ +ands r0, r1\n\ +movs r1, 0x1\n\ +orrs r0, r1\n\ +strb r0, [r2, 0x3]\n\ +b _081195EA\n\ +.align 2, 0\n\ +_08119634: .4byte gSharedMem + 0x19000\n\ +_08119638:\n\ +lsrs r0, r5, 1\n\ +mov r1, r8\n\ +strh r0, [r1, 0x2E]\n\ +ldr r3, _08119654 @ =gSharedMem + 0x19000\n\ +movs r1, 0x1\n\ +ands r1, r5\n\ +ldrb r2, [r3, 0x3]\n\ +movs r0, 0x20\n\ +negs r0, r0\n\ +ands r0, r2\n\ +orrs r0, r1\n\ +strb r0, [r3, 0x3]\n\ +b _081195EA\n\ +.align 2, 0\n\ +_08119654: .4byte gSharedMem + 0x19000\n\ +_08119658:\n\ +movs r0, 0x98\n\ +lsls r0, 1\n\ +movs r1, 0x3F\n\ +bl PlayCry1\n\ +b _08119670\n\ +_08119664:\n\ +movs r0, 0x99\n\ +lsls r0, 1\n\ +movs r1, 0x3F\n\ +negs r1, r1\n\ +bl PlayCry1\n\ +_08119670:\n\ +movs r5, 0x2\n\ +ldr r4, _081196A0 @ =gSharedMem + 0x19000\n\ +adds r0, r4, 0\n\ +adds r0, 0x7F\n\ +ldrb r0, [r0]\n\ +adds r0, 0x2\n\ +movs r1, 0xC\n\ +bl __modsi3\n\ +lsls r0, 24\n\ +lsrs r3, r0, 24\n\ +ldrb r1, [r4, 0x3]\n\ +movs r0, 0x1F\n\ +ands r0, r1\n\ +cmp r0, 0x1\n\ +bne _081196A4\n\ +ldrb r1, [r4, 0x4]\n\ +movs r0, 0x3\n\ +ands r0, r1\n\ +cmp r0, 0x1\n\ +bne _081196A4\n\ +mov r0, r9\n\ +adds r0, 0x6\n\ +b _081196A8\n\ +.align 2, 0\n\ +_081196A0: .4byte gSharedMem + 0x19000\n\ +_081196A4:\n\ +mov r2, r9\n\ +adds r0, r2, r5\n\ +_081196A8:\n\ +lsls r0, 24\n\ +lsrs r0, 24\n\ +mov r9, r0\n\ +cmp r5, r9\n\ +bcs _0811970E\n\ +ldr r6, _08119734 @ =gSharedMem + 0x19000\n\ +ldr r7, _08119738 @ =gUnknown_083F8C00 + 0xC\n\ +_081196B6:\n\ +lsls r0, r3, 3\n\ +ldr r1, _0811973C @ =gUnknown_083F8D90 + 0x4\n\ +adds r0, r1\n\ +ldr r1, [r6, 0x8]\n\ +ldr r2, [r0]\n\ +ands r1, r2\n\ +cmp r1, 0\n\ +bne _081196F8\n\ +mov r0, r10\n\ +adds r1, r0, 0x1\n\ +lsls r1, 24\n\ +lsrs r1, 24\n\ +mov r10, r1\n\ +add r0, sp\n\ +strb r5, [r0]\n\ +ldr r0, [sp, 0xC]\n\ +cmp r0, 0\n\ +bne _081196F8\n\ +ldrb r0, [r6, 0x1A]\n\ +lsls r0, 28\n\ +lsrs r0, 28\n\ +ldr r1, _08119740 @ =gSharedMem + 0x1901B\n\ +adds r0, r1\n\ +ldrb r1, [r0]\n\ +lsls r0, r1, 2\n\ +adds r0, r1\n\ +lsls r0, 2\n\ +adds r0, r7\n\ +ldr r0, [r0]\n\ +ands r2, r0\n\ +cmp r2, 0\n\ +beq _081196F8\n\ +str r5, [sp, 0xC]\n\ +_081196F8:\n\ +adds r0, r3, 0x1\n\ +movs r1, 0xC\n\ +bl __modsi3\n\ +lsls r0, 24\n\ +lsrs r3, r0, 24\n\ +adds r0, r5, 0x1\n\ +lsls r0, 24\n\ +lsrs r5, r0, 24\n\ +cmp r5, r9\n\ +bcc _081196B6\n\ +_0811970E:\n\ +ldrb r0, [r4, 0x3]\n\ +lsls r0, 27\n\ +lsrs r0, 27\n\ +adds r0, 0x1\n\ +ldrb r1, [r4, 0x2]\n\ +ands r0, r1\n\ +cmp r0, 0\n\ +beq _08119756\n\ +ldr r2, [sp, 0xC]\n\ +cmp r2, 0\n\ +beq _08119744\n\ +movs r0, 0xFF\n\ +ldr r3, [sp, 0x10]\n\ +ands r0, r3\n\ +cmp r0, 0xBF\n\ +bhi _08119744\n\ +mov r0, r8\n\ +strh r2, [r0, 0x3C]\n\ +b _08119766\n\ +.align 2, 0\n\ +_08119734: .4byte gSharedMem + 0x19000\n\ +_08119738: .4byte gUnknown_083F8C00 + 0xC\n\ +_0811973C: .4byte gUnknown_083F8D90 + 0x4\n\ +_08119740: .4byte gSharedMem + 0x1901B\n\ +_08119744:\n\ +ldr r0, [sp, 0x10]\n\ +mov r1, r10\n\ +bl __modsi3\n\ +add r0, sp\n\ +ldrb r0, [r0]\n\ +mov r1, r8\n\ +strh r0, [r1, 0x3C]\n\ +b _08119766\n\ +_08119756:\n\ +ldr r0, [sp, 0x10]\n\ +mov r1, r10\n\ +bl __modsi3\n\ +add r0, sp\n\ +ldrb r0, [r0]\n\ +mov r2, r8\n\ +strh r0, [r2, 0x3C]\n\ +_08119766:\n\ +ldr r3, _0811977C @ =sub_8118CEC\n\ +mov r0, r8\n\ +str r3, [r0, 0x1C]\n\ +add sp, 0x14\n\ +pop {r3-r5}\n\ +mov r8, r3\n\ +mov r9, r4\n\ +mov r10, r5\n\ +pop {r4-r7}\n\ +pop {r0}\n\ +bx r0\n\ +.align 2, 0\n\ +_0811977C: .4byte sub_8118CEC\n\ +.syntax divided\n"); } +#endif -void sub_811857C(void) +void sub_8119780(struct Sprite *sprite) { - u8 i; - for (i = 0x0; i < 0x6; i++) + if (!(sprite->data[0x1]++ < sprite->data[0x3])) { - u8 spriteid = - RDATA->var3C[i] = CreateSprite(&gSpriteTemplate_83FA40C, 0x74, 0x50, 0x39 - i); - if (spriteid != 0x40) + if ((sprite->pos1.x -= 0x2) < -0x10) { - gSprites[RDATA->var3C[i]].invisible = TRUE; - gSprites[RDATA->var3C[i]].coordOffsetEnabled = TRUE; + if (!eRoulette->var03_6) + { + eRoulette->var03_6 = TRUE; + } + DestroySprite(sprite); + eRoulette->var01 = 0x0; + eRoulette->var34 = gUnknown_083FA61E[0x0]; } } } -void sub_81185E8(void) -{ - u8 t = RDATA->var3C[0x0]; - u8 i; - for (i = 0x0; i < 0x6; i++) - { - u8 j; - gSprites[t].invisible = TRUE; - gSprites[t].callback = &SpriteCallbackDummy; - StartSpriteAnim(&gSprites[t], 0x0); - for (j = 0x0; j < 0x8; j++) - gSprites[t].data[j] = 0x0; - t++; - } -} - -s16 sub_811866C(struct Sprite *sprite) -{ - if (RDATA->var24 > sprite->data[0x3]) - { - sprite->data[0x6] = 360 - RDATA->var24 + sprite->data[0x3]; - if (sprite->data[0x6] > 359) - sprite->data[0x6] -=360; - } - else - sprite->data[0x6] = sprite->data[0x3] - RDATA->var24; - return sprite->data[0x6]; -} - -u8 sub_81186B8(struct Sprite *sprite) -{ - RDATA->var7E = (u8)(((float)(s16)sub_811866C(sprite)) / 30.0f); - return RDATA->var7E; -} - -s16 sub_81186E8(struct Sprite *sprite) +void sub_81197D8(struct Sprite *sprite) { - s16 t = sub_811866C(sprite) % 30; - u16 z; - if (t == 0xE) - { - z = 0x0; - return sprite->data[0x2] = z; - } - else if (t > 0xD) + u16 t[0x3][0x4]; + s32 p, z; + memcpy(t, &gUnknown_083FA632, 0x18); + if (sprite->data[0x1]++ < sprite->data[0x3]) { - z = (u16)(0x2B - t); - return sprite->data[0x2] = z; + if(sprite->data[0x1] & 0x1) + { + gSpriteCoordOffsetY = t[sprite->data[0x2] / 0x2][sprite->data[0x7]]; + p = z = sprite->data[0x7] + 0x1; + if (z < 0) + p += 0x3; + sprite->data[0x7] = z - ((p >> 2) * 4); + } + sprite->invisible ^= 0x1; } else { - z = (u16)(0xE - t); - return sprite->data[0x2] = z; + gSpriteCoordOffsetY = 0x0; + gSprites[eRoulette->var3C[0x37]].animPaused = FALSE; + DestroySprite(sprite); } } -void sub_8118724(struct Sprite *sprite) +void sub_8119898(struct Sprite *sprite) { - s16 sin, cos; - RDATA->var8C += RDATA->var90; - RDATA->var88 += RDATA->var8C; - if (RDATA->var88 >= 360) - RDATA->var88 -= 360.0f; - else - if (RDATA->var88 < 0.0f) - RDATA->var88 += 360.0f; - sprite->data[0x3] = RDATA->var88; - RDATA->var98 += RDATA->var9C; - RDATA->var94 += RDATA->var98; - sprite->data[0x4] = RDATA->var94; - sin = Sin2(sprite->data[0x3]); - cos = Cos2(sprite->data[0x3]); - sprite->pos2.x = sin * sprite->data[0x4] >> 0xC; - sprite->pos2.y = -cos * sprite->data[0x4] >> 0xC; - if (IsSEPlaying()) + float t; + sprite->data[0x1]++; + t = sprite->data[0x1]; + sprite->pos2.y = t * 0.039f * t; + eRoulette->var34 = gUnknown_083FA61E[(eRoulette->var01 - 0x1) / 2]; + if (eRoulette->var01 < 0x13) + eRoulette->var01++; + if (sprite->data[0x1] > 0x3C) { - m4aMPlayPanpotControl(&gMPlay_SE1, 0xFFFF, sprite->pos2.x); - m4aMPlayPanpotControl(&gMPlay_SE2, 0xFFFF, sprite->pos2.x); + sprite->data[0x1] = 0x0; + sprite->callback = &sub_8119780; + gSprites[sprite->data[0x6]].callback = &sub_8119780; + gSprites[sprite->data[0x6]].data[0x1] = -0x2; + gSprites[sprite->data[0x5]].invisible = FALSE; + gSprites[sprite->data[0x5]].callback = &sub_81197D8; + m4aSongNumStart(0xD6); } } -void sub_8118834(struct Sprite *sprite) -{ - s16 sin, cos; - sprite->data[0x3] = RDATA->var24 + sprite->data[0x6]; - if (sprite->data[0x3] > 359) - sprite->data[0x3] -= 360; - sin = Sin2(sprite->data[0x3]); - cos = Cos2(sprite->data[0x3]); - sprite->pos2.x = sin * sprite->data[0x4] >> 0xC; - sprite->pos2.y = -cos * sprite->data[0x4] >> 0xC; - sprite->pos2.y += gSpriteCoordOffsetY; -} - -void sub_811889C(struct Sprite *sprite) +void sub_8119964(struct Sprite *sprite) { - sub_8118724(sprite); - sprite->data[0x2]++; - if ((u16)(sprite->data[0x4] + 0x84) > 0xD4) - sprite->invisible = TRUE; - else - sprite->invisible = FALSE; - if (!(sprite->data[0x2] < 30)) + if(sprite->data[0x7] == 0x0) { - if (!sprite->data[0x0]) + register u32 t asm("r2"); + u32 z ; + if (eRoulette->var38->data[0x0] == 0x0) { - if (RDATA->var94 <= RDATA->varA0 - 2.0f) - { - RDATA->var7D = 0xFF; - RDATA->var03_7 = 0x0; - StartSpriteAnim(sprite, sprite->animCmdIndex + 0x3); - sub_81186B8(sprite); - sprite->data[0x4] = 30; - sub_811866C(sprite); - sprite->data[0x6] = (sprite->data[0x6] / 30) * 30 + 0xF; - sprite->callback = &sub_8118834; - m4aSongNumStartOrChange(0x47); - RDATA->var9C = RDATA->var98 = 0.0f; - RDATA->var8C = -1.0f; - } + t = eRoulette->var38->data[0x3]; + z = gUnknown_083F8DF4[eRoulette->var04_0].var08; } else { - if (RDATA->var94 >= RDATA->varA0 - 2.0f) - { - RDATA->var7D = 0xFF; - RDATA->var03_7 = 0x0; - StartSpriteAnim(sprite, sprite->animCmdIndex + 0x3); - sub_81186B8(sprite); - sprite->data[0x4] = 30; - sub_811866C(sprite); - sprite->data[0x6] = (sprite->data[0x6] / 30) * 30 + 0xF; - sprite->callback = &sub_8118834; - m4aSongNumStartOrChange(0x47); - RDATA->var9C = RDATA->var98 = 0.0f; - RDATA->var8C = -1.0f; - } + t = eRoulette->var38->data[0x3]; + z = gUnknown_083F8DF4[eRoulette->var04_0].var08; + z += 0xB4; + } + if (t == z) + { + sprite->invisible = FALSE; + sprite->data[0x7]++; + m4aSongNumStart(0x2B); + eRoulette->var01 = 0x1; + eRoulette->var34 = gUnknown_083FA61E[0x0]; } } -} - -void sub_81189A8(struct Sprite *sprite) -{ - float f0, f1, f2; - struct Unkg083F8DF4 *p; - sub_8118724(sprite); - switch(sprite->data[0x3]) + else { - case 0: - if (sprite->data[0x0] != 0x1) + u32 t, z; + eRoulette->var34 = gUnknown_083FA61E[(eRoulette->var01 - 0x1) / 2]; + if (eRoulette->var01 < 0x13) + eRoulette->var01++; + if (eRoulette->var38->data[0x0] == 0x0) { - f0 = ((float)sprite->data[0x7]); - p = &gUnknown_083F8DF4[0]; - f1 = (f0 * ((float)(s32)p[RDATA->var04_0].var01) + (float)((s32)p[RDATA->var04_0].var02 - 0x1)); - f2 = (f0 / ((float)(s32)p[RDATA->var04_0].var0C)); + t = eRoulette->var38->data[0x3]; + z = gUnknown_083F8DF4[eRoulette->var04_0].var0A; } else { - return; - } - break; - case 180: - if (sprite->data[0x0] != 0x0) - { - f0 = ((float)sprite->data[0x7]); - p = &gUnknown_083F8DF4[0]; - f1 = (f0 * ((float)(s32)p[RDATA->var04_0].var01) + (float)((s32)p[RDATA->var04_0].var02 - 0x1)); - f2 = -(f0 / ((float)(s32)p[RDATA->var04_0].var0C)); + t = eRoulette->var38->data[0x3]; + z = gUnknown_083F8DF4[eRoulette->var04_0].var0A ; + z += 0xB4; } - else + if (t == z) { - return; + gSprites[sprite->data[0x4]].callback = &sub_8119898; + gSprites[sprite->data[0x4]].invisible = FALSE; + sprite->callback = &SpriteCallbackDummy; + sprite->data[0x7] = 0x0; } - break; - default: return; } - RDATA->varA0 = RDATA->var94; - RDATA->var98 = f2; - RDATA->var9C = -((f2 + f2) / f1 + (2.0f / (f1 * f1))); - RDATA->var8C = 0.0f; - sprite->animPaused = FALSE; - sprite->animNum = 0x0; - sprite->animBeginning = TRUE; - sprite->animEnded = FALSE; - sprite->callback = &sub_811889C; - sprite->data[0x2] = 0x0; } -void sub_8118B30(struct Sprite *sprite) +void sub_8119A90(struct Sprite *sprite) { - sprite->pos2.y = (s32)(((float)sprite->data[0x2]) * 0.05f * ((float)sprite->data[0x2])) - 45; - sprite->data[0x2]++; - if (sprite->data[0x2] > 29 && sprite->pos2.y >= 0) + sprite->invisible ^= 0x1; +} + +void sub_8119AAC(struct Sprite *sprite) +{ + if (sprite->pos1.y > -0x10) { - RDATA->var7D = 0xFF; - RDATA->var03_7 = FALSE; - StartSpriteAnim(sprite, sprite->animCmdIndex + 0x3); - sub_81186B8(sprite); - sprite->data[0x4] = 30; - sub_811866C(sprite); - sprite->data[0x6] = (sprite->data[0x6] / 30) * 30 + 0xF; - sprite->callback = &sub_8118834; - m4aSongNumStartOrChange(0x47); - RDATA->var03_6 = TRUE; + sprite->pos1.y--; + } + else + { + sprite->callback = &SpriteCallbackDummy; + sprite->invisible = TRUE; + sprite->animPaused = TRUE; + m4aSongNumStop(0x5E); + DestroySprite(sprite); + FreeOamMatrix(gSprites[eRoulette->var3C[0x38]].oam.matrixNum); + DestroySprite(&gSprites[eRoulette->var3C[0x38]]); } } -void sub_8118BD8(struct Sprite *sprite) +void sub_8119B24(struct Sprite *sprite) { - if (sprite->data[0x2]++ < 45) + if (!(sprite->data[0x1] < 0x0)) { - sprite->pos2.y--; - if(sprite->data[0x2] == 45) - { - if (gSprites[RDATA->var3C[0x37]].animCmdIndex == 0x1) - sprite->pos2.y++; - } + sprite->data[0x1]--; + sprite->pos1.y--; + if (sprite->data[0x1] == 0x0 && sprite->animCmdIndex == 0x1) + sprite->pos2.y++; } else { - if (sprite->data[0x2] < sprite->data[0x7]) + if (!(sprite->data[0x3] < 0x0)) { - if (gSprites[RDATA->var3C[0x37]].animDelayCounter == 0x0) + sprite->data[0x3]--; + if (sprite->animDelayCounter == 0x0) { - if (gSprites[RDATA->var3C[0x37]].animCmdIndex == 0x1) + if (sprite->animCmdIndex == 0x1) sprite->pos2.y++; else sprite->pos2.y--; @@ -3585,145 +4555,93 @@ void sub_8118BD8(struct Sprite *sprite) } else { - sprite->animPaused = FALSE; - sprite->animNum = 0x1; - sprite->animBeginning = TRUE; - sprite->animEnded = FALSE; - sprite->data[0x2] = 0x0; - sprite->callback = &sub_8118B30; - m4aSongNumStart(0x3D); + m4aSongNumStart(0x2B); + StartSpriteAnim(sprite, eRoulette->var38->data[0x0] + 0x4); + sprite->callback = &sub_8119AAC; + gSprites[sprite->data[0x6]].affineAnimPaused = FALSE; } } } -void sub_8118CAC(struct Sprite *sprite) +void sub_8119BCC(struct Sprite *sprite) { - sub_8118724(sprite); - switch(sprite->data[0x3]) + s8 t[0x2]; //sign + s8 z[0x8][0x2]; + memcpy(t, &gUnknown_083FA64A, 0x2); + memcpy(z, &gUnknown_083FA64C, 0x10); + if (sprite->data[0x1]-- > 0x7) { - case 90: - if (sprite->data[0x0] != 0x1) - { - sprite->callback = &sub_8118BD8; - sprite->data[0x2] = 0x0; - } - break; - case 270: - if (sprite->data[0x0] != 0x0) + sprite->pos1.x += t[eRoulette->var38->data[0x0]] * 0x2; + if (IsSEPlaying()) { - sprite->callback = &sub_8118BD8; - sprite->data[0x2] = 0x0; + s8 u = -((0x74 - sprite->pos1.x) / 0x2); + m4aMPlayPanpotControl(&gMPlay_SE1, 0xFFFF,u); + m4aMPlayPanpotControl(&gMPlay_SE2, 0xFFFF, u); } - break; - } -} - -void sub_8118CEC(struct Sprite *sprite) -{ - sub_8118724(sprite); - switch(RDATA->var03_0) - { - default: - case 0x0: - sub_8119224(sprite); - sprite->callback = &sub_81189A8; - break; - case 0x1: - sub_81193D4(sprite); - sprite->callback = &sub_8118CAC; - break; } -} - -void sub_8118D2C(struct Sprite *sprite) -{ - sub_8118724(sprite); - if (sprite->data[0x2]-- == 0x10) - RDATA->var98 *= -1.0f; - if (sprite->data[0x2] == 0x0) + else { - if (!sprite->data[0x0]) + if (!(sprite->data[0x1] < 0x0)) { - RDATA->var7D = 0xFF; - RDATA->var03_7 = 0x0; - StartSpriteAnim(sprite, sprite->animCmdIndex + 0x3); - sub_81186B8(sprite); - sprite->data[0x4] = 30; - sub_811866C(sprite); - sprite->data[0x6] = (sprite->data[0x6] / 30) * 30 + 15; - sprite->callback = &sub_8118834; - m4aSongNumStartOrChange(0x47); + sprite->pos1.x += t[eRoulette->var38->data[0x0]] * z[0x7 - sprite->data[0x1]][0x0]; + sprite->pos1.y += z[0x7 - sprite->data[0x1]][0x1]; } else { - sprite->animPaused = TRUE; - m4aSongNumStart(0x38); - sub_811952C(sprite); + m4aSongNumStartOrChange(0x5E); + if(eRoulette->var38->data[0x0] == 0x0) + PlayCry1(0x130, 0x3F); + else + PlayCry1(0x130, -0x3F); + StartSpriteAnim(sprite, eRoulette->var38->data[0x0] + 0x2); + sprite->data[0x1] = 45; + sprite->callback = &sub_8119B24; } } } -void sub_8118DE4(struct Sprite *sprite) +void sub_8119D08(struct Sprite *sprite) { - sub_8118724(sprite); - sprite->data[0x2] = 0x0; - sub_81186B8(sprite); - if (!(gUnknown_083F8D90[RDATA->var7E].var04 & RDATA->var08)) + s8 t[0x2]; //sign + memcpy(t, &gUnknown_083FA64A, 0x2); + if (!(sprite->data[0x1]-- < 0x0)) { - RDATA->var7D = 0xFF; - RDATA->var03_7 = 0x0; - StartSpriteAnim(sprite, sprite->animCmdIndex + 0x3); - sub_81186B8(sprite); - sprite->data[0x4] = 30; - sub_811866C(sprite); - sprite->data[0x6] = (sprite->data[0x6] / 30) * 30 + 15; - sprite->callback = &sub_8118834; - m4aSongNumStartOrChange(0x47); + sprite->pos1.x += t[eRoulette->var38->data[0x0]] * 0x2; + gSprites[sprite->data[0x6]].invisible ^= 0x1; } else { - u8 t; - u32 z; - m4aSongNumStart(0x38); - if ((z = (Random() & 0x1))) + sprite->callback = &sub_8119A90; + } +} + +void sub_8119D80(struct Sprite *sprite) +{ + if (eRoulette->var38->data[0x0] == 0x0) + { + if (eRoulette->var38->data[0x3] == gUnknown_083F8DF4[eRoulette->var04_0].var12 + 90) { - RDATA->var8C = 0.0f; - t = (RDATA->var7E + 0x1) % 0xC; - RDATA->var7F = t; + gSprites[sprite->data[0x6]].data[0x1] = 0x34; + gSprites[sprite->data[0x4]].data[0x1] = 0x34; } else { - RDATA->var8C = gUnknown_083F8DF4[RDATA->var04_0].var1C * 2; - t = (RDATA->var7E + 0xB) % 0xC; - RDATA->var7F = t; + return; } - if (gUnknown_083F8D90[t].var04 & RDATA->var08) + } + else + { + if (eRoulette->var38->data[0x3] == gUnknown_083F8DF4[eRoulette->var04_0].var14 + 270) { - sprite->data[0x0] = 0x1; - sprite->data[0x2] = gUnknown_083F8DF4[RDATA->var04_0].var02; + gSprites[sprite->data[0x6]].data[0x1] = 0x2E; + gSprites[sprite->data[0x4]].data[0x1] = 0x2E; } else { - sprite->data[0x0] = gUnknown_083F8D90[t].var04 & RDATA->var08; - if (RDATA->var04_0) - { - sprite->data[0x2] = gUnknown_083F8DF4[RDATA->var04_0].var01; - } - else - { - sprite->data[0x2] = gUnknown_083F8DF4[RDATA->var04_0].var02; - if (z) - { - RDATA->var8C = 1.5f; - } - else - { - RDATA->var8C = -1.5f; - } - } + return; } - RDATA->var98 = 0.085000000894069671630859375f; - sprite->callback = &sub_8118D2C; - sprite->data[0x1] = 0x5; } + gSprites[sprite->data[0x6]].callback = &sub_8119D08; + gSprites[sprite->data[0x4]].callback = &sub_8119BCC; + m4aSongNumStart(0x2B); } -- cgit v1.2.3 From 842ffa33b3964d43a896be4f9248c33200b7137a Mon Sep 17 00:00:00 2001 From: M Date: Sat, 6 Jan 2018 14:55:38 +0100 Subject: fix indents and build, remove diff.sh --- src/roulette.c | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) (limited to 'src/roulette.c') diff --git a/src/roulette.c b/src/roulette.c index 36c15bf23..1d612d071 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -1,8 +1,7 @@ #include "global.h" - #include "ewram.h" #include "field_fadetransition.h" -#include "game_stat.h" +#include "constants/game_stat.h" #include "m4a.h" #include "main.h" #include "menu.h" @@ -11,14 +10,13 @@ #include "overworld.h" #include "palette.h" #include "pokemon.h" -#include "rng.h" #include "roulette.h" #include "roulette_util.h" #include "rtc.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "script.h" -#include "species.h" +#include "constants/species.h" #include "sprite.h" #include "strings2.h" #include "string_util.h" @@ -29,14 +27,6 @@ asm(".include \"constants/gba_constants.inc\""); -struct OamMatrix -{ - s16 a; - s16 b; - s16 c; - s16 d; -}; - struct Roulette /* ewram + 0x19000 */ { u8 var00; -- cgit v1.2.3 From 6d16dba22e9ea2b40bf684f7549b73a583d143f6 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Mon, 8 Jan 2018 23:16:13 -0600 Subject: re-label some window and text code --- src/roulette.c | 68 +++++++++++++++++++++++++++++----------------------------- 1 file changed, 34 insertions(+), 34 deletions(-) (limited to 'src/roulette.c') diff --git a/src/roulette.c b/src/roulette.c index 1d612d071..0253a6bb8 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -625,8 +625,8 @@ void sub_8115384(void) sub_81182F8(0x6); sub_811829C(0x0); sub_8117158(0x0); - MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); - MenuPrint(&gUnknown_081C4157[0], 0x1, 0xF); + Menu_DrawStdWindowFrame(0x0, 0xE, 0x1D, 0x13); + Menu_PrintText(&gUnknown_081C4157[0], 0x1, 0xF); gSpriteCoordOffsetX = -0x3C; gSpriteCoordOffsetY = 0x0; gMain.state++; @@ -693,14 +693,14 @@ void sub_8115734(u8 taskid) { DisplayYesNoMenu(0x14, 0x8, 0x1); sub_814AAF8(0x2D9E); - MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); - MenuPrint(&gUnknown_081C41E3, 0x1, 0xF); + Menu_DrawStdWindowFrame(0x0, 0xE, 0x1D, 0x13); + Menu_PrintText(&gUnknown_081C41E3, 0x1, 0xF); DoYesNoFuncWithChoice(taskid, &gUnknown_083F8EBC); } void sub_811577C(u8 taskid) { - MenuZeroFillWindowRect(0x14, 0x8, 0x1A, 0xD); + Menu_EraseWindowRect(0x14, 0x8, 0x1A, 0xD); gTasks[taskid].func = &sub_81159BC; } @@ -1446,21 +1446,21 @@ void sub_8116638(u8 taskid) if (gTasks[taskid].data[0x2] == 0xC) { PlayFanfare(BGM_ME_B_BIG); - MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); - MenuPrint(&gUnknown_081C41A5, 0x1, 0xF); + Menu_DrawStdWindowFrame(0x0, 0xE, 0x1D, 0x13); + Menu_PrintText(&gUnknown_081C41A5, 0x1, 0xF); } else { PlayFanfare(BGM_ME_B_SMALL); - MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); - MenuPrint(&gUnknown_081C4199, 0x1, 0xF); + Menu_DrawStdWindowFrame(0x0, 0xE, 0x1D, 0x13); + Menu_PrintText(&gUnknown_081C4199, 0x1, 0xF); } break; case 0: default: m4aSongNumStart(SE_HAZURE); - MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); - MenuPrint(&gUnknown_081C41AE, 0x1, 0xF); + Menu_DrawStdWindowFrame(0x0, 0xE, 0x1D, 0x13); + Menu_PrintText(&gUnknown_081C41AE, 0x1, 0xF); } gTasks[taskid].data[0x1] = 0x0; gTasks[taskid].func = &sub_811659C; @@ -1500,8 +1500,8 @@ void sub_811677C(u8 taskid) { ConvertIntToDecimalStringN((u8 *)&gStringVar1, (eRoulette->var19 * gTasks[taskid].data[0x2]), STR_CONV_MODE_LEFT_ALIGN, 0x2); StringExpandPlaceholders((u8 *)&gStringVar4, &gUnknown_081C41BD); - MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); - MenuPrint((u8 *)&gStringVar4, 0x1, 0xF); + Menu_DrawStdWindowFrame(0x0, 0xE, 0x1D, 0x13); + Menu_PrintText((u8 *)&gStringVar4, 0x1, 0xF); gTasks[taskid].data[0x1] = (eRoulette->var19 * gTasks[taskid].data[0x2]); gTasks[taskid].data[0x7] = 0x0; gTasks[taskid].func = &sub_81166E8; @@ -1534,14 +1534,14 @@ void sub_8116880(u8 taskid) { if (gTasks[taskid].data[0x6] == 0x6) { - MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); - MenuPrint(&gUnknown_081C41F1, 0x1, 0xF); + Menu_DrawStdWindowFrame(0x0, 0xE, 0x1D, 0x13); + Menu_PrintText(&gUnknown_081C41F1, 0x1, 0xF); sub_8116C34(taskid, &dp01t_12_3_battle_menu, 0xFFFF, 0x3); } else if (gTasks[taskid].data[0xD] == 0x270F) { - MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); - MenuPrint(&gUnknown_081C4231, 0x1, 0xF); + Menu_DrawStdWindowFrame(0x0, 0xE, 0x1D, 0x13); + Menu_PrintText(&gUnknown_081C4231, 0x1, 0xF); sub_8116C34(taskid, &sub_8115734, 0xFFFF, 0x3); } else @@ -1551,8 +1551,8 @@ void sub_8116880(u8 taskid) } else { - MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); - MenuPrint(&gUnknown_081C41D2, 0x1, 0xF); + Menu_DrawStdWindowFrame(0x0, 0xE, 0x1D, 0x13); + Menu_PrintText(&gUnknown_081C41D2, 0x1, 0xF); sub_8116C34(taskid, &sub_81157AC, 0x3C, 0x3); } } @@ -1570,8 +1570,8 @@ void dp01t_12_3_battle_menu(u8 taskid) gSprites[eRoulette->var3C[i + 0x7]].invisible = FALSE; if (gTasks[taskid].data[0xD] == 0x270F) { - MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); - MenuPrint(&gUnknown_081C4231, 0x1, 0xF); + Menu_DrawStdWindowFrame(0x0, 0xE, 0x1D, 0x13); + Menu_PrintText(&gUnknown_081C4231, 0x1, 0xF); sub_8116C34(taskid, &sub_8115734, 0xFFFF, 0x3); } else @@ -2619,8 +2619,8 @@ void sub_8117528(u8 taskid) void sub_811755C(u8 taskid) { - MenuZeroFillWindowRect(0x14, 0x8, 0x1A, 0xD); - MenuZeroFillScreen(); + Menu_EraseWindowRect(0x14, 0x8, 0x1A, 0xD); + Menu_EraseScreen(); BeginNormalPaletteFade(-0x1, 0x0, 0x0, 0x10, 0x0); gPaletteFade.delayCounter = gPaletteFade.multipurpose2; UpdatePaletteFade(); @@ -2629,7 +2629,7 @@ void sub_811755C(u8 taskid) void sub_81175C0(u8 taskid) { - MenuZeroFillScreen(); + Menu_EraseScreen(); ScriptContext2_Disable(); DestroyTask(taskid); } @@ -2640,7 +2640,7 @@ void sub_81175DC(u8 taskid) if (!(gMain.newKeys & (A_BUTTON | B_BUTTON)) && gTasks[taskid].data[0] < 0x3D) return; gSpecialVar_0x8004 = 0x1; - MenuZeroFillScreen(); + Menu_EraseScreen(); ScriptContext2_Disable(); DestroyTask(taskid); } @@ -2650,8 +2650,8 @@ void sub_8117630(u8 taskid) u32 temp = gUnknown_083F8DF0[(gSpecialVar_0x8004 & 0x1) + (gSpecialVar_0x8004 >> 0x7 << 0x1)]; ConvertIntToDecimalStringN(gStringVar1, temp, 0x2, 0x1); StringExpandPlaceholders(gStringVar4, &gUnknown_081C40DF); - MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); - MenuPrint(gStringVar4, 0x1, 0xF); + Menu_DrawStdWindowFrame(0x0, 0xE, 0x1D, 0x13); + Menu_PrintText(gStringVar4, 0x1, 0xF); gTasks[taskid].func = &sub_81174F8; } @@ -2660,7 +2660,7 @@ void Task_Roulette_0(u8 taskid) s32 temp; ConvertIntToDecimalStringN(gStringVar1, gTasks[taskid].data[0xD], 0x1, 0x4); StringExpandPlaceholders(gStringVar4, gOtherText_Coins); - MenuDrawTextWindow(0x0, 0x0, 0x9, 0x3); + Menu_DrawStdWindowFrame(0x0, 0x0, 0x9, 0x3); MenuPrint_RightAligned(gStringVar4, 0x9, 0x1); temp = gUnknown_083F8DF0[(gSpecialVar_0x8004 & 0x1) + (gSpecialVar_0x8004 >> 0x7 << 0x1)]; ConvertIntToDecimalStringN(gStringVar1, temp, 0x2, 0x1); @@ -2668,23 +2668,23 @@ void Task_Roulette_0(u8 taskid) { if ((gSpecialVar_0x8004 & 0x80) && (gSpecialVar_0x8004 & 0x1)) { - MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); - MenuPrint(&gUnknown_081C4139, 0x1, 0xF); + Menu_DrawStdWindowFrame(0x0, 0xE, 0x1D, 0x13); + Menu_PrintText(&gUnknown_081C4139, 0x1, 0xF); sub_8116C34(taskid , &sub_8117630, 0xFFFF, 0x3); } else { StringExpandPlaceholders(gStringVar4, &gUnknown_081C40DF); - MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); - MenuPrint(gStringVar4, 0x1, 0xF); + Menu_DrawStdWindowFrame(0x0, 0xE, 0x1D, 0x13); + Menu_PrintText(gStringVar4, 0x1, 0xF); gTasks[taskid].func = &sub_81174F8; } } else { StringExpandPlaceholders(gStringVar4, &gUnknown_081C411C); - MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); - MenuPrint(gStringVar4, 0x1, 0xF); + Menu_DrawStdWindowFrame(0x0, 0xE, 0x1D, 0x13); + Menu_PrintText(gStringVar4, 0x1, 0xF); gTasks[taskid].func = &sub_81175DC; gTasks[taskid].data[0xD] = 0x0; gTasks[taskid].data[0x0] = 0x0; -- cgit v1.2.3 From 8869cbc98e2f8e761e9ff89182933643992e2bd7 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Tue, 9 Jan 2018 00:16:15 -0600 Subject: s/gWindowConfig/gWindowTemplate/g --- src/roulette.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/roulette.c') diff --git a/src/roulette.c b/src/roulette.c index 0253a6bb8..950cbdbb1 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -596,8 +596,8 @@ void sub_8115384(void) gMain.state++; break; case 0x2: - SetUpWindowConfig(&gWindowConfig_81E6C3C); - InitMenuWindow(&gWindowConfig_81E6CE4); + SetUpWindowConfig(&gWindowTemplate_81E6C3C); + InitMenuWindow(&gWindowTemplate_81E6CE4); LoadPalette(&gUnknown_083F86BC, 0x0, 0x1C0); gMain.state++; break; -- cgit v1.2.3 From 03b167a73e2f18fa79bbf0e6ffe11e0c35c12ad8 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Tue, 9 Jan 2018 14:26:15 -0600 Subject: more text/menu renaming --- src/roulette.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/roulette.c') diff --git a/src/roulette.c b/src/roulette.c index 950cbdbb1..e88c36c01 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -596,7 +596,7 @@ void sub_8115384(void) gMain.state++; break; case 0x2: - SetUpWindowConfig(&gWindowTemplate_81E6C3C); + Text_LoadWindowTemplate(&gWindowTemplate_81E6C3C); InitMenuWindow(&gWindowTemplate_81E6CE4); LoadPalette(&gUnknown_083F86BC, 0x0, 0x1C0); gMain.state++; -- cgit v1.2.3 From cf7ffa568a2a09c761bae6aa4c70b8d8913c3e81 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Tue, 9 Jan 2018 23:37:26 -0600 Subject: rename unknown_task to scanline_effect --- src/roulette.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/roulette.c') diff --git a/src/roulette.c b/src/roulette.c index e88c36c01..ae16b1460 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -23,7 +23,7 @@ #include "task.h" #include "text.h" #include "trig.h" -#include "unknown_task.h" +#include "scanline_effect.h" asm(".include \"constants/gba_constants.inc\""); -- cgit v1.2.3 From f9f0e84b70f1b313200acd6f0d180413e34517da Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Tue, 9 Jan 2018 23:55:03 -0600 Subject: label some scanline_effect functions --- src/roulette.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/roulette.c') diff --git a/src/roulette.c b/src/roulette.c index ae16b1460..6d79f9d38 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -578,7 +578,7 @@ void sub_8115384(void) { case 0x0: SetVBlankCallback(NULL); - remove_some_task(); + ScanlineEffect_Stop(); sub_80F9438(); sub_80F9368(); REG_BG2CNT = 0x4686; -- cgit v1.2.3 From bdb0628c913fe7f2e77598d6390f8f7d951b1703 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Mon, 15 Jan 2018 18:58:59 -0500 Subject: vertical scroll indicator labeling and more shop.c --- src/roulette.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/roulette.c') diff --git a/src/roulette.c b/src/roulette.c index 6d79f9d38..41e8ef77f 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -579,7 +579,7 @@ void sub_8115384(void) case 0x0: SetVBlankCallback(NULL); ScanlineEffect_Stop(); - sub_80F9438(); + ClearVideoCallbacks(); sub_80F9368(); REG_BG2CNT = 0x4686; REG_BG1CNT = 0x4401; @@ -603,7 +603,7 @@ void sub_8115384(void) break; case 0x3: sub_8115238(); - sub_80F9020(); + ClearBGTilemapBuffers(); LZ77UnCompWram(&gUnknown_083F88BC, (void *)(ewram18800)); LZ77UnCompVram(&gUnknown_083F8A60, (void *)(VRAM + 0x3000)); gMain.state++; @@ -1604,7 +1604,7 @@ void sub_8116B40(u8 taskid) // end oulette ? FreeAllSpritePalettes(); ResetPaletteFade(); ResetSpriteData(); - sub_80F9020(); + ClearBGTilemapBuffers(); REG_BLDCNT = 0x0; REG_BLDALPHA = 0x0; REG_BLDY = 0x0; -- cgit v1.2.3 From 91cfb6a564f73f02eb57792f8a0f4aa82e1867d1 Mon Sep 17 00:00:00 2001 From: Cameron Hall Date: Tue, 16 Jan 2018 22:25:35 -0600 Subject: add debug ifdefs --- src/roulette.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/roulette.c') diff --git a/src/roulette.c b/src/roulette.c index 6d79f9d38..ce95bc1c9 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -308,7 +308,10 @@ extern const u16 gUnknown_083FA632[]; extern const s8 gUnknown_083FA64A[0x2]; extern const s8 gUnknown_083FA64C[0x8][0x2]; - +#if DEBUG +EWRAM_DATA u8 unk_203955C[4] = { 0 }; +EWRAM_DATA u8 unk_2039560[4] = { 0 }; +#endif void sub_81150FC(void) -- cgit v1.2.3 From 8d14b68921bf5a355e71031a9311125af114cbfe Mon Sep 17 00:00:00 2001 From: Cameron Hall Date: Thu, 18 Jan 2018 14:30:07 -0600 Subject: add more debug code --- src/roulette.c | 1093 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 1092 insertions(+), 1 deletion(-) (limited to 'src/roulette.c') diff --git a/src/roulette.c b/src/roulette.c index ce95bc1c9..240ca11fa 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -131,6 +131,12 @@ struct StructgUnknown_083F8D90 u32 var04; }; +#if DEBUG +u8 gUnknown_Debug_03005FB8; +#endif + +#define static + static void sub_81150FC(void); static void sub_8115124(void); static void sub_8115238(void); @@ -573,6 +579,305 @@ void sub_8115238(void) } #endif +#if DEBUG +__attribute__((naked)) +void sub_8115384(void) +{ + asm("\ + push {r4, lr}\n\ + add sp, sp, #0xfffffffc\n\ + ldr r1, ._35\n\ + ldr r0, ._35 + 4\n\ + str r0, [r1]\n\ + ldr r1, ._35 + 8\n\ + ldr r2, ._35 + 12\n\ + add r0, r1, r2\n\ + ldrb r0, [r0]\n\ + add r2, r1, #0\n\ + cmp r0, #0x7\n\ + bls ._33 @cond_branch\n\ + b ._64\n\ +._33:\n\ + lsl r0, r0, #0x2\n\ + ldr r1, ._35 + 16\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ +._36:\n\ + .align 2, 0\n\ +._35:\n\ + .word gUnknown_Debug_03005FB8\n\ + .word +0x2019000\n\ + .word gMain\n\ + .word 0x43c\n\ + .word ._37\n\ +._37:\n\ + .word ._38\n\ + .word ._39\n\ + .word ._40\n\ + .word ._41\n\ + .word ._42\n\ + .word ._43\n\ + .word ._44\n\ + .word ._45\n\ +._38:\n\ + mov r0, #0x0\n\ + bl SetVBlankCallback\n\ + bl ScanlineEffect_Stop\n\ + bl sub_80F9438\n\ + bl sub_80F9368\n\ + ldr r1, ._47\n\ + ldr r3, ._47 + 4\n\ + add r0, r3, #0\n\ + strh r0, [r1]\n\ + sub r1, r1, #0x2\n\ + ldr r2, ._47 + 8\n\ + add r0, r2, #0\n\ + strh r0, [r1]\n\ + add r1, r1, #0x46\n\ + mov r3, #0x90\n\ + lsl r3, r3, #0x6\n\ + add r0, r3, #0\n\ + strh r0, [r1]\n\ + add r1, r1, #0x2\n\ + ldr r2, ._47 + 12\n\ + add r0, r2, #0\n\ + strh r0, [r1]\n\ + ldr r0, ._47 + 16\n\ + mov r1, #0xc0\n\ + lsl r1, r1, #0x13\n\ + bl gMysteryEventScriptCmdTableEnd+0x3cb8\n\ + ldr r0, ._47 + 20\n\ + ldr r1, ._47 + 24\n\ + bl gMysteryEventScriptCmdTableEnd+0x3cb8\n\ + ldr r1, ._47 + 28\n\ + ldr r3, ._47 + 32\n\ + add r1, r1, r3\n\ + b ._61\n\ +._48:\n\ + .align 2, 0\n\ +._47:\n\ + .word 0x400000c\n\ + .word 0x4686\n\ + .word 0x4401\n\ + .word 0x60a\n\ + .word gUnknown_08E8096C\n\ + .word gRouletteWheelTiles\n\ + .word 0x6004000\n\ + .word gMain\n\ + .word 0x43c\n\ +._39:\n\ + bl ResetPaletteFade\n\ + bl ResetSpriteData\n\ + bl ResetTasks\n\ + ldr r1, ._50\n\ + ldr r0, ._50 + 4\n\ + add r1, r1, r0\n\ + b ._61\n\ +._51:\n\ + .align 2, 0\n\ +._50:\n\ + .word gMain\n\ + .word 0x43c\n\ +._40:\n\ + ldr r0, ._53\n\ + bl Text_LoadWindowTemplate\n\ + ldr r0, ._53 + 4\n\ + bl InitMenuWindow\n\ + ldr r0, ._53 + 8\n\ + mov r2, #0xe0\n\ + lsl r2, r2, #0x1\n\ + mov r1, #0x0\n\ + bl LoadPalette\n\ + ldr r1, ._53 + 12\n\ + ldr r2, ._53 + 16\n\ + add r1, r1, r2\n\ + b ._61\n\ +._54:\n\ + .align 2, 0\n\ +._53:\n\ + .word gWindowTemplate_81E6C3C\n\ + .word gWindowTemplate_81E6CE4\n\ + .word gUnknown_083F86BC\n\ + .word gMain\n\ + .word 0x43c\n\ +._41:\n\ + bl sub_8115238\n\ + bl sub_80F9020\n\ + ldr r0, ._56\n\ + ldr r1, ._56 + 4\n\ + bl gMysteryEventScriptCmdTableEnd+0x3cbc\n\ + ldr r0, ._56 + 8\n\ + ldr r1, ._56 + 12\n\ + bl gMysteryEventScriptCmdTableEnd+0x3cb8\n\ + ldr r1, ._56 + 16\n\ + ldr r3, ._56 + 20\n\ + add r1, r1, r3\n\ + b ._61\n\ +._57:\n\ + .align 2, 0\n\ +._56:\n\ + .word gUnknown_083F88BC\n\ + .word +0x2018800\n\ + .word gUnknown_083F8A60\n\ + .word 0x6003000\n\ + .word gMain\n\ + .word 0x43c\n\ +._42:\n\ + mov r0, #0x0\n\ + bl sub_8117838\n\ + bl sub_811857C\n\ + bl sub_81184D8\n\ + bl sub_8117F2C\n\ + bl sub_8117900\n\ + bl sub_8117BBC\n\ + bl sub_8117DF4\n\ + ldr r1, ._59\n\ + ldr r0, ._59 + 4\n\ + add r1, r1, r0\n\ + b ._61\n\ +._60:\n\ + .align 2, 0\n\ +._59:\n\ + .word gMain\n\ + .word 0x43c\n\ +._43:\n\ + bl AnimateSprites\n\ + bl BuildOamBuffer\n\ + ldr r0, ._62\n\ + ldr r1, ._62 + 4\n\ + add r0, r0, r1\n\ + ldrh r0, [r0]\n\ + bl sub_81180F4\n\ + mov r0, #0x6\n\ + bl sub_81182F8\n\ + mov r0, #0x0\n\ + bl sub_811829C\n\ + mov r0, #0x0\n\ + bl sub_8117158\n\ + mov r0, #0x0\n\ + mov r1, #0xe\n\ + mov r2, #0x1d\n\ + mov r3, #0x13\n\ + bl Menu_DrawStdWindowFrame\n\ + ldr r0, ._62 + 8\n\ + mov r1, #0x1\n\ + mov r2, #0xf\n\ + bl Menu_PrintText\n\ + ldr r1, ._62 + 12\n\ + mov r2, #0x3c\n\ + neg r2, r2\n\ + add r0, r2, #0\n\ + strh r0, [r1]\n\ + ldr r1, ._62 + 16\n\ + mov r0, #0x0\n\ + strh r0, [r1]\n\ + ldr r1, ._62 + 20\n\ + ldr r3, ._62 + 24\n\ + add r1, r1, r3\n\ + b ._61\n\ +._63:\n\ + .align 2, 0\n\ +._62:\n\ + .word gSaveBlock1\n\ + .word 0x494\n\ + .word gUnknown_081C4157\n\ + .word gSpriteCoordOffsetX\n\ + .word gSpriteCoordOffsetY\n\ + .word gMain\n\ + .word 0x43c\n\ +._44:\n\ + mov r1, #0x80\n\ + lsl r1, r1, #0x13\n\ + ldr r3, ._65\n\ + add r0, r3, #0\n\ + strh r0, [r1]\n\ + ldr r0, ._65 + 4\n\ + add r1, r2, r0\n\ +._61:\n\ + ldrb r0, [r1]\n\ + add r0, r0, #0x1\n\ + strb r0, [r1]\n\ + b ._64\n\ +._66:\n\ + .align 2, 0\n\ +._65:\n\ + .word 0x1741\n\ + .word 0x43c\n\ +._45:\n\ + ldr r3, ._67\n\ + ldrh r2, [r3]\n\ + mov r0, #0x0\n\ + strh r0, [r3]\n\ + ldr r4, ._67 + 4\n\ + ldrh r0, [r4]\n\ + mov r1, #0x1\n\ + orr r0, r0, r1\n\ + strh r0, [r4]\n\ + strh r2, [r3]\n\ + ldr r2, ._67 + 8\n\ + ldrh r0, [r2]\n\ + mov r1, #0x8\n\ + orr r0, r0, r1\n\ + strh r0, [r2]\n\ + ldr r0, ._67 + 12\n\ + bl SetVBlankCallback\n\ + mov r0, #0x1\n\ + str r0, [sp]\n\ + mov r0, #0xff\n\ + mov r1, #0x0\n\ + mov r2, #0x10\n\ + mov r3, #0x0\n\ + bl BeginHardwarePaletteFade\n\ + ldr r0, ._67 + 16\n\ + mov r1, #0x0\n\ + bl CreateTask\n\ + ldr r4, ._67 + 20\n\ + add r1, r4, #0\n\ + add r1, r1, #0xa4\n\ + strb r0, [r1]\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + ldr r2, ._67 + 24\n\ + lsl r1, r0, #0x2\n\ + add r1, r1, r0\n\ + lsl r1, r1, #0x3\n\ + add r1, r1, r2\n\ + mov r0, #0x6\n\ + strh r0, [r1, #0x14]\n\ + ldr r0, ._67 + 28\n\ + ldr r2, ._67 + 32\n\ + add r0, r0, r2\n\ + ldrh r0, [r0]\n\ + strh r0, [r1, #0x22]\n\ + ldr r0, ._67 + 36\n\ + mov r1, #0x1\n\ + bl CreateTask\n\ + add r4, r4, #0xa5\n\ + strb r0, [r4]\n\ + ldr r0, ._67 + 40\n\ + bl SetMainCallback2\n\ +._64:\n\ + add sp, sp, #0x4\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ +._68:\n\ + .align 2, 0\n\ +._67:\n\ + .word 0x4000208\n\ + .word 0x4000200\n\ + .word 0x4000004\n\ + .word sub_8115124+1\n\ + .word sub_81156BC+1\n\ + .word +0x2019000\n\ + .word gTasks\n\ + .word gSaveBlock1\n\ + .word 0x494\n\ + .word sub_8115634+1\n\ + .word sub_81150FC+1"); +} +#else void sub_8115384(void) { u32 temp_IME; @@ -654,7 +959,120 @@ void sub_8115384(void) break; } } +#endif +#if DEBUG +__attribute__((naked)) +void sub_8115634(u8 unused) +{ + asm("\ + push {r4, r5, r6, lr}\n\ + ldr r0, ._75\n\ + add r3, r0, #0\n\ + add r3, r3, #0x21\n\ + ldrb r1, [r3]\n\ + add r2, r1, #1\n\ + strb r2, [r3]\n\ + add r2, r0, #0\n\ + add r2, r2, #0x23\n\ + lsl r1, r1, #0x18\n\ + lsr r1, r1, #0x18\n\ + add r6, r0, #0\n\ + ldrb r2, [r2]\n\ + cmp r1, r2\n\ + bne ._70 @cond_branch\n\ + mov r0, #0x0\n\ + strb r0, [r3]\n\ + add r2, r6, #0\n\ + add r2, r2, #0x22\n\ + ldrb r1, [r2]\n\ + ldrh r0, [r6, #0x24]\n\ + sub r0, r0, r1\n\ + strh r0, [r6, #0x24]\n\ + lsl r0, r0, #0x10\n\ + cmp r0, #0\n\ + bge ._70 @cond_branch\n\ + ldrb r1, [r2]\n\ + mov r2, #0xb4\n\ + lsl r2, r2, #0x1\n\ + add r0, r2, #0\n\ + sub r0, r0, r1\n\ + strh r0, [r6, #0x24]\n\ +._70:\n\ + add r4, r6, #0\n\ + ldrh r0, [r4, #0x24]\n\ + bl Sin2\n\ + lsl r0, r0, #0x10\n\ + lsr r5, r0, #0x10\n\ + ldrh r0, [r4, #0x24]\n\ + bl Cos2\n\ + lsl r0, r0, #0x10\n\ + lsr r1, r0, #0x10\n\ + lsl r0, r5, #0x10\n\ + asr r0, r0, #0x10\n\ + cmp r0, #0\n\ + bge ._71 @cond_branch\n\ + add r0, r0, #0xf\n\ +._71:\n\ + lsl r0, r0, #0xc\n\ + lsr r5, r0, #0x10\n\ + lsl r0, r1, #0x10\n\ + asr r0, r0, #0x10\n\ + cmp r0, #0\n\ + bge ._72 @cond_branch\n\ + add r0, r0, #0xf\n\ +._72:\n\ + asr r0, r0, #0x4\n\ + strh r0, [r6, #0x32]\n\ + strh r0, [r6, #0x2c]\n\ + strh r5, [r6, #0x2e]\n\ + lsl r0, r5, #0x10\n\ + asr r0, r0, #0x10\n\ + neg r0, r0\n\ + strh r0, [r6, #0x30]\n\ + ldr r0, ._75 + 4\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + beq ._74 @cond_branch\n\ + ldr r0, ._75 + 8\n\ + ldrh r1, [r0, #0x2e]\n\ + mov r0, #0x8\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._74 @cond_branch\n\ + ldr r2, ._75 + 12\n\ + add r0, r6, #0\n\ + add r0, r0, #0xa4\n\ + ldrb r1, [r0]\n\ + lsl r0, r1, #0x2\n\ + add r0, r0, r1\n\ + lsl r0, r0, #0x3\n\ + add r0, r0, r2\n\ + ldr r1, ._75 + 16\n\ + str r1, [r0]\n\ + ldr r0, ._75 + 20\n\ + bl gMysteryEventScriptCmdTableEnd+0x1c08\n\ + ldr r0, ._75 + 24\n\ + bl gMysteryEventScriptCmdTableEnd+0x1c08\n\ + ldr r0, ._75 + 28\n\ + bl gMysteryEventScriptCmdTableEnd+0x1c08\n\ +._74:\n\ + pop {r4, r5, r6}\n\ + pop {r0}\n\ + bx r0\n\ +._76:\n\ + .align 2, 0\n\ +._75:\n\ + .word +0x2019000\n\ + .word unk_203955C\n\ + .word gMain\n\ + .word gTasks\n\ + .word sub_81157AC+1\n\ + .word gMPlay_SE1\n\ + .word gMPlay_SE2\n\ + .word gMPlay_SE3"); +} +#else void sub_8115634(u8 unused) { s16 sin; @@ -675,6 +1093,7 @@ void sub_8115634(u8 unused) eRoulette->var2C.b = sin; eRoulette->var2C.c = -sin; } +#endif void sub_81156BC(u8 taskid) { @@ -1596,7 +2015,69 @@ void sub_8116AB0(u8 taskid) gTasks[taskid].func = &sub_8116B40; } -void sub_8116B40(u8 taskid) // end oulette ? +#if DEBUG +__attribute__((naked)) +void sub_8116B40(u8 taskid) // end roulette ? +{ + asm("\ + push {r4, r5, r6, lr}\n\ + lsl r0, r0, #0x18\n\ + lsr r6, r0, #0x18\n\ + bl UpdatePaletteFade\n\ + lsl r0, r0, #0x18\n\ + lsr r5, r0, #0x18\n\ + cmp r5, #0\n\ + bne ._380 @cond_branch\n\ + mov r0, #0x0\n\ + bl SetVBlankCallback\n\ + ldr r0, ._381\n\ + mov r2, #0xbe\n\ + lsl r2, r2, #0x1\n\ + mov r1, #0x0\n\ + bl gMysteryEventScriptCmdTableEnd+0x5c24\n\ + ldr r1, ._381 + 4\n\ + ldr r0, ._381 + 8\n\ + mov r4, #0x0\n\ + strh r5, [r0]\n\ + strh r5, [r1]\n\ + bl sub_80F9368\n\ + bl FreeAllSpritePalettes\n\ + bl ResetPaletteFade\n\ + bl ResetSpriteData\n\ + bl sub_80F9020\n\ + ldr r0, ._381 + 12\n\ + strh r5, [r0]\n\ + add r0, r0, #0x2\n\ + strh r5, [r0]\n\ + add r0, r0, #0x2\n\ + strh r5, [r0]\n\ + ldr r1, ._381 + 16\n\ + ldr r0, ._381 + 20\n\ + str r0, [r1]\n\ + ldr r0, ._381 + 24\n\ + bl SetMainCallback2\n\ + add r0, r6, #0\n\ + bl DestroyTask\n\ + ldr r0, ._381 + 28\n\ + strb r4, [r0]\n\ +._380:\n\ + pop {r4, r5, r6}\n\ + pop {r0}\n\ + bx r0\n\ +._382:\n\ + .align 2, 0\n\ +._381:\n\ + .word +0x2019000\n\ + .word gSpriteCoordOffsetX\n\ + .word gSpriteCoordOffsetY\n\ + .word 0x4000050\n\ + .word gFieldCallback\n\ + .word sub_8080990+1\n\ + .word c2_exit_to_overworld_2_switch+1\n\ + .word unk_203955C"); +} +#else +void sub_8116B40(u8 taskid) // end roulette ? { if (UpdatePaletteFade() == 0) { @@ -1616,6 +2097,7 @@ void sub_8116B40(u8 taskid) // end oulette ? DestroyTask(taskid); } } +#endif void sub_8116BC0(u8 taskid) { @@ -2632,6 +3114,9 @@ void sub_811755C(u8 taskid) void sub_81175C0(u8 taskid) { +#if DEBUG + unk_203955C[0] = 0; +#endif Menu_EraseScreen(); ScriptContext2_Disable(); DestroyTask(taskid); @@ -2694,6 +3179,386 @@ void Task_Roulette_0(u8 taskid) } } +#if DEBUG + +__attribute__((naked)) +void debug_sub_812CDE4() +{ + asm("\ + push {r4, r5, lr}\n\ + lsl r0, r0, #0x18\n\ + lsr r3, r0, #0x18\n\ + add r4, r3, #0\n\ + ldr r0, ._575\n\ + ldrh r1, [r0, #0x2e]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._572 @cond_branch\n\ + ldr r1, ._575 + 4\n\ + lsl r0, r3, #0x2\n\ + add r0, r0, r3\n\ + lsl r0, r0, #0x3\n\ + add r2, r0, r1\n\ + ldrh r0, [r2, #0x22]\n\ + add r0, r0, #0x1\n\ + strh r0, [r2, #0x22]\n\ + lsl r0, r0, #0x10\n\ + ldr r1, ._575 + 8\n\ + cmp r0, r1\n\ + bne ._573 @cond_branch\n\ + mov r0, #0x0\n\ + strh r0, [r2, #0x22]\n\ +._573:\n\ + ldr r0, ._575 + 12\n\ + mov r3, #0x22\n\ + ldsh r1, [r2, r3]\n\ + b ._584\n\ +._576:\n\ + .align 2, 0\n\ +._575:\n\ + .word gMain\n\ + .word gTasks\n\ + .word 0x27100000\n\ + .word gStringVar1\n\ +._572:\n\ + mov r0, #0x2\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._577 @cond_branch\n\ + ldr r1, ._580\n\ + lsl r0, r3, #0x2\n\ + add r0, r0, r3\n\ + lsl r0, r0, #0x3\n\ + add r2, r0, r1\n\ + ldrh r0, [r2, #0x22]\n\ + sub r0, r0, #0x1\n\ + strh r0, [r2, #0x22]\n\ + lsl r0, r0, #0x10\n\ + asr r0, r0, #0x10\n\ + mov r1, #0x1\n\ + neg r1, r1\n\ + cmp r0, r1\n\ + bne ._578 @cond_branch\n\ + ldr r0, ._580 + 4\n\ + strh r0, [r2, #0x22]\n\ +._578:\n\ + ldr r0, ._580 + 8\n\ + mov r3, #0x22\n\ + ldsh r1, [r2, r3]\n\ + b ._584\n\ +._581:\n\ + .align 2, 0\n\ +._580:\n\ + .word gTasks\n\ + .word 0x270f\n\ + .word gStringVar1\n\ +._577:\n\ + mov r0, #0x80\n\ + lsl r0, r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._582 @cond_branch\n\ + ldr r1, ._585\n\ + lsl r0, r3, #0x2\n\ + add r0, r0, r3\n\ + lsl r0, r0, #0x3\n\ + add r2, r0, r1\n\ + ldrh r3, [r2, #0x22]\n\ + add r0, r3, #0\n\ + add r0, r0, #0xa\n\ + strh r0, [r2, #0x22]\n\ + lsl r0, r0, #0x10\n\ + ldr r1, ._585 + 4\n\ + cmp r0, r1\n\ + ble ._583 @cond_branch\n\ + ldr r1, ._585 + 8\n\ + add r0, r3, r1\n\ + strh r0, [r2, #0x22]\n\ +._583:\n\ + ldr r0, ._585 + 12\n\ + mov r3, #0x22\n\ + ldsh r1, [r2, r3]\n\ + b ._584\n\ +._586:\n\ + .align 2, 0\n\ +._585:\n\ + .word gTasks\n\ + .word 0x270f0000\n\ + .word 0xffffd8fb\n\ + .word gStringVar1\n\ +._582:\n\ + mov r0, #0x80\n\ + lsl r0, r0, #0x2\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._587 @cond_branch\n\ + ldr r0, ._590\n\ + lsl r1, r3, #0x2\n\ + add r1, r1, r3\n\ + lsl r1, r1, #0x3\n\ + add r1, r1, r0\n\ + ldrh r2, [r1, #0x22]\n\ + add r0, r2, #0\n\ + sub r0, r0, #0xa\n\ + strh r0, [r1, #0x22]\n\ + lsl r0, r0, #0x10\n\ + cmp r0, #0\n\ + bge ._588 @cond_branch\n\ + ldr r3, ._590 + 4\n\ + add r0, r2, r3\n\ + strh r0, [r1, #0x22]\n\ +._588:\n\ + ldr r0, ._590 + 8\n\ + mov r2, #0x22\n\ + ldsh r1, [r1, r2]\n\ +._584:\n\ + mov r2, #0x1\n\ + mov r3, #0x4\n\ + bl ConvertIntToDecimalStringN\n\ + ldr r4, ._590 + 12\n\ + ldr r1, ._590 + 16\n\ + add r0, r4, #0\n\ + bl StringExpandPlaceholders\n\ + add r0, r4, #0\n\ + mov r1, #0x9\n\ + mov r2, #0x1\n\ + bl MenuPrint_RightAligned\n\ + b ._596\n\ +._591:\n\ + .align 2, 0\n\ +._590:\n\ + .word gTasks\n\ + .word 0x2705\n\ + .word gStringVar1\n\ + .word gStringVar4\n\ + .word gOtherText_Coins\n\ +._587:\n\ + mov r0, #0x8\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._592 @cond_branch\n\ + ldr r0, ._594\n\ + ldr r2, ._594 + 4\n\ + lsl r1, r3, #0x2\n\ + add r1, r1, r3\n\ + lsl r1, r1, #0x3\n\ + add r1, r1, r2\n\ + ldrh r2, [r1, #0x22]\n\ + ldr r3, ._594 + 8\n\ + add r0, r0, r3\n\ + mov r5, #0x0\n\ + strh r2, [r0]\n\ + ldr r0, ._594 + 12\n\ + str r0, [r1]\n\ + ldr r0, ._594 + 16\n\ + mov r2, #0x22\n\ + ldsh r1, [r1, r2]\n\ + mov r2, #0x1\n\ + mov r3, #0x4\n\ + bl ConvertIntToDecimalStringN\n\ + ldr r4, ._594 + 20\n\ + ldr r1, ._594 + 24\n\ + add r0, r4, #0\n\ + bl StringExpandPlaceholders\n\ + add r0, r4, #0\n\ + mov r1, #0x9\n\ + mov r2, #0x1\n\ + bl MenuPrint_RightAligned\n\ + ldr r0, ._594 + 28\n\ + strb r5, [r0]\n\ + b ._596\n\ +._595:\n\ + .align 2, 0\n\ +._594:\n\ + .word gSaveBlock1\n\ + .word gTasks\n\ + .word 0x494\n\ + .word Task_Roulette_0+1\n\ + .word gStringVar1\n\ + .word gStringVar4\n\ + .word gOtherText_Coins\n\ + .word unk_2039560\n\ +._592:\n\ + mov r0, #0x4\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._596 @cond_branch\n\ + ldr r0, ._597\n\ + ldr r2, ._597 + 4\n\ + lsl r1, r4, #0x2\n\ + add r1, r1, r4\n\ + lsl r1, r1, #0x3\n\ + add r1, r1, r2\n\ + ldrh r2, [r1, #0x22]\n\ + ldr r3, ._597 + 8\n\ + add r0, r0, r3\n\ + strh r2, [r0]\n\ + ldr r0, ._597 + 12\n\ + str r0, [r1]\n\ + ldr r0, ._597 + 16\n\ + mov r2, #0x22\n\ + ldsh r1, [r1, r2]\n\ + mov r2, #0x1\n\ + mov r3, #0x4\n\ + bl ConvertIntToDecimalStringN\n\ + ldr r4, ._597 + 20\n\ + ldr r1, ._597 + 24\n\ + add r0, r4, #0\n\ + bl StringExpandPlaceholders\n\ + add r0, r4, #0\n\ + mov r1, #0x9\n\ + mov r2, #0x1\n\ + bl MenuPrint_RightAligned\n\ + ldr r1, ._597 + 28\n\ + mov r0, #0x1\n\ + strb r0, [r1]\n\ +._596:\n\ + pop {r4, r5}\n\ + pop {r0}\n\ + bx r0\n\ +._598:\n\ + .align 2, 0\n\ +._597:\n\ + .word gSaveBlock1\n\ + .word gTasks\n\ + .word 0x494\n\ + .word Task_Roulette_0+1\n\ + .word gStringVar1\n\ + .word gStringVar4\n\ + .word gOtherText_Coins\n\ + .word unk_2039560"); +} + +__attribute__((naked)) +void debug_sub_812CFE8() +{ + asm("\ + push {r4, r5, lr}\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + ldr r2, ._600\n\ + lsl r1, r0, #0x2\n\ + add r1, r1, r0\n\ + lsl r1, r1, #0x3\n\ + add r5, r1, r2\n\ + ldr r0, ._600 + 4\n\ + ldr r1, ._600 + 8\n\ + add r0, r0, r1\n\ + ldrh r0, [r0]\n\ + strh r0, [r5, #0x22]\n\ + bl Random\n\ + mov r1, #0x1\n\ + and r1, r1, r0\n\ + cmp r1, #0\n\ + beq ._599 @cond_branch\n\ + ldr r0, ._600 + 12\n\ + ldrh r1, [r0]\n\ + mov r2, #0x80\n\ + orr r1, r1, r2\n\ + strh r1, [r0]\n\ +._599:\n\ + ldr r0, ._600 + 16\n\ + mov r2, #0x22\n\ + ldsh r1, [r5, r2]\n\ + mov r2, #0x1\n\ + mov r3, #0x4\n\ + bl ConvertIntToDecimalStringN\n\ + ldr r4, ._600 + 20\n\ + ldr r1, ._600 + 24\n\ + add r0, r4, #0\n\ + bl StringExpandPlaceholders\n\ + mov r0, #0x0\n\ + mov r1, #0x0\n\ + mov r2, #0x9\n\ + mov r3, #0x3\n\ + bl Menu_DrawStdWindowFrame\n\ + add r0, r4, #0\n\ + mov r1, #0x9\n\ + mov r2, #0x1\n\ + bl MenuPrint_RightAligned\n\ + mov r0, #0x0\n\ + mov r1, #0xe\n\ + mov r2, #0x1d\n\ + mov r3, #0x13\n\ + bl Menu_DrawStdWindowFrame\n\ + ldr r0, ._600 + 28\n\ + mov r1, #0x1\n\ + mov r2, #0xf\n\ + bl Menu_PrintText\n\ + ldr r0, ._600 + 32\n\ + str r0, [r5]\n\ + pop {r4, r5}\n\ + pop {r0}\n\ + bx r0\n\ +._601:\n\ + .align 2, 0\n\ +._600:\n\ + .word gTasks\n\ + .word gSaveBlock1\n\ + .word 0x494\n\ + .word gSpecialVar_0x8004\n\ + .word gStringVar1\n\ + .word gStringVar4\n\ + .word gOtherText_Coins\n\ + .word gUnknown_Debug_0842510D\n\ + .word debug_sub_812CDE4+1"); +} + +#endif + +#if DEBUG +__attribute__((naked)) +void PlayRoulette(void) +{ + asm("\ + push {lr}\n\ + bl ScriptContext2_Enable\n\ + ldr r1, ._604\n\ + mov r0, #0x0\n\ + strb r0, [r1]\n\ + ldr r0, ._604 + 4\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + beq ._602 @cond_branch\n\ + ldr r0, ._604 + 8\n\ + mov r1, #0x0\n\ + bl CreateTask\n\ + b ._603\n\ +._605:\n\ + .align 2, 0\n\ +._604:\n\ + .word unk_2039560\n\ + .word unk_203955C\n\ + .word debug_sub_812CFE8+1\n\ +._602:\n\ + ldr r0, ._606\n\ + mov r1, #0x0\n\ + bl CreateTask\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + ldr r2, ._606 + 4\n\ + lsl r1, r0, #0x2\n\ + add r1, r1, r0\n\ + lsl r1, r1, #0x3\n\ + add r1, r1, r2\n\ + ldr r0, ._606 + 8\n\ + ldr r2, ._606 + 12\n\ + add r0, r0, r2\n\ + ldrh r0, [r0]\n\ + strh r0, [r1, #0x22]\n\ +._603:\n\ + pop {r0}\n\ + bx r0\n\ +._607:\n\ + .align 2, 0\n\ +._606:\n\ + .word Task_Roulette_0+1\n\ + .word gTasks\n\ + .word gSaveBlock1\n\ + .word 0x494"); +} +#else void PlayRoulette(void) { u8 taskid; @@ -2701,6 +3566,7 @@ void PlayRoulette(void) taskid = CreateTask(&Task_Roulette_0, 0x0); gTasks[taskid].data[0xD] = gSaveBlock1.coins; } +#endif void sub_8117838(u8 r0) { @@ -3594,6 +4460,99 @@ void sub_8118D2C(struct Sprite *sprite) } } +#if DEBUG +__attribute__((naked)) +void debug_sub_812E698() +{ + asm("\ + push {r4, r5, r6, r7, lr}\n\ + add r7, r0, #0\n\ + bl sub_8118724\n\ + mov r0, #0x0\n\ + strh r0, [r7, #0x32]\n\ + add r0, r7, #0\n\ + bl sub_81186B8\n\ + mov r0, #0x38\n\ + bl gMysteryEventScriptCmdTableEnd+0x13c0\n\ + bl Random\n\ + mov r1, #0x1\n\ + and r1, r1, r0\n\ + cmp r1, #0\n\ + beq ._837 @cond_branch\n\ + ldr r4, ._839\n\ + add r1, r4, #0\n\ + add r1, r1, #0x8c\n\ + ldr r0, ._839 + 4\n\ + str r0, [r1]\n\ + add r0, r4, #0\n\ + add r0, r0, #0x7e\n\ + ldrb r0, [r0]\n\ + add r0, r0, #0x1\n\ + mov r1, #0xc\n\ + bl gMysteryEventScriptCmdTableEnd+0x3e40\n\ + add r1, r4, #0\n\ + add r1, r1, #0x7f\n\ + strb r0, [r1]\n\ + add r1, r4, #0\n\ + ldr r4, ._839 + 8\n\ + b ._838\n\ +._840:\n\ + .align 2, 0\n\ +._839:\n\ + .word +0x2019000\n\ + .word 0x0\n\ + .word gUnknown_083F8DF4\n\ +._837:\n\ + ldr r6, ._841\n\ + add r5, r6, #0\n\ + add r5, r5, #0x8c\n\ + ldr r4, ._841 + 4\n\ + ldrb r0, [r6, #0x4]\n\ + lsl r0, r0, #0x1e\n\ + lsr r0, r0, #0x19\n\ + add r1, r4, #0\n\ + add r1, r1, #0x1c\n\ + add r0, r0, r1\n\ + ldr r1, [r0]\n\ + add r0, r1, #0\n\ + bl gMysteryEventScriptCmdTableEnd+0x54dc\n\ + str r0, [r5]\n\ + add r0, r6, #0\n\ + add r0, r0, #0x7e\n\ + ldrb r0, [r0]\n\ + add r1, r6, #0\n\ + add r1, r1, #0x7f\n\ + strb r0, [r1]\n\ + add r1, r6, #0\n\ +._838:\n\ + mov r0, #0x1\n\ + strh r0, [r7, #0x2e]\n\ + ldrb r0, [r1, #0x4]\n\ + lsl r0, r0, #0x1e\n\ + lsr r0, r0, #0x19\n\ + add r0, r0, r4\n\ + ldrb r0, [r0, #0x2]\n\ + strh r0, [r7, #0x32]\n\ + add r1, r1, #0x98\n\ + ldr r0, ._841 + 8\n\ + str r0, [r1]\n\ + ldr r0, ._841 + 12\n\ + str r0, [r7, #0x1c]\n\ + mov r0, #0x5\n\ + strh r0, [r7, #0x30]\n\ + pop {r4, r5, r6, r7}\n\ + pop {r0}\n\ + bx r0\n\ +._842:\n\ + .align 2, 0\n\ +._841:\n\ + .word +0x2019000\n\ + .word gUnknown_083F8DF4\n\ + .word 0x3dae147b\n\ + .word sub_8118D2C+1"); +} +#endif + #ifdef NONMATCHING void sub_8118DE4(struct Sprite *sprite) { @@ -3869,6 +4828,137 @@ _08118F88: .4byte sub_8118D2C\n\ } #endif +#if DEBUG +__attribute__((naked)) +void sub_8118F8C(struct Sprite *sprite) +{ + asm("\ + push {r4, r5, r6, r7, lr}\n\ + mov r7, r9\n\ + mov r6, r8\n\ + push {r6, r7}\n\ + add r6, r0, #0\n\ + bl sub_8118724\n\ + ldr r5, ._868\n\ + mov r0, #0x8c\n\ + add r0, r0, r5\n\ + mov r8, r0\n\ + ldr r0, [r0]\n\ + ldr r1, ._868 + 4\n\ + bl gMysteryEventScriptCmdTableEnd+0x5928\n\ + cmp r0, #0\n\ + bgt ._874 @cond_branch\n\ + add r0, r6, #0\n\ + bl sub_81186B8\n\ + add r0, r6, #0\n\ + bl sub_81186E8\n\ + lsl r0, r0, #0x10\n\ + cmp r0, #0\n\ + bne ._864 @cond_branch\n\ + add r1, r5, #0\n\ + add r1, r1, #0x90\n\ + ldr r0, ._868 + 8\n\ + str r0, [r1]\n\ + ldr r1, ._868 + 12\n\ + mov r9, r1\n\ + ldrb r0, [r5, #0x4]\n\ + lsl r7, r0, #0x1e\n\ + lsr r0, r7, #0x19\n\ + add r0, r0, r9\n\ + mov r4, #0x3\n\ + ldsb r4, [r0, r4]\n\ + add r0, r4, #0\n\ + bl gMysteryEventScriptCmdTableEnd+0x5a48\n\ + add r5, r0, #0\n\ + cmp r4, #0\n\ + bge ._865 @cond_branch\n\ + ldr r1, ._868 + 16\n\ + bl gMysteryEventScriptCmdTableEnd+0x54dc\n\ + add r5, r0, #0\n\ +._865:\n\ + lsr r0, r7, #0x19\n\ + add r0, r0, r9\n\ + ldrb r0, [r0, #0x4]\n\ + add r0, r0, #0x1\n\ + bl gMysteryEventScriptCmdTableEnd+0x5a48\n\ + add r1, r0, #0\n\ + add r0, r5, #0\n\ + bl gMysteryEventScriptCmdTableEnd+0x56a0\n\ + add r1, r0, #0\n\ + mov r2, r8\n\ + ldr r0, [r2]\n\ + bl gMysteryEventScriptCmdTableEnd+0x5508\n\ + mov r1, r8\n\ + str r0, [r1]\n\ + mov r0, #0x4\n\ + strh r0, [r6, #0x30]\n\ + ldr r0, ._868 + 20\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + beq ._866 @cond_branch\n\ + ldr r0, ._868 + 24\n\ + str r0, [r6, #0x1c]\n\ + b ._874\n\ +._869:\n\ + .align 2, 0\n\ +._868:\n\ + .word +0x2019000\n\ + .word 0x3f000000\n\ + .word 0x0\n\ + .word gUnknown_083F8DF4\n\ + .word 0x43800000\n\ + .word unk_2039560\n\ + .word debug_sub_812E698+1\n\ +._866:\n\ + ldr r0, ._871\n\ + str r0, [r6, #0x1c]\n\ + b ._874\n\ +._872:\n\ + .align 2, 0\n\ +._871:\n\ + .word sub_8118DE4+1\n\ +._864:\n\ + add r6, r5, #0\n\ + add r6, r6, #0x90\n\ + ldr r0, [r6]\n\ + ldr r4, ._875\n\ + add r1, r4, #0\n\ + bl gMysteryEventScriptCmdTableEnd+0x58e0\n\ + cmp r0, #0\n\ + beq ._874 @cond_branch\n\ + mov r2, r8\n\ + ldr r0, [r2]\n\ + add r1, r4, #0\n\ + bl gMysteryEventScriptCmdTableEnd+0x59b8\n\ + cmp r0, #0\n\ + bge ._874 @cond_branch\n\ + str r4, [r6]\n\ + mov r0, r8\n\ + str r4, [r0]\n\ + add r4, r5, #0\n\ + add r4, r4, #0x98\n\ + ldr r0, [r4]\n\ + bl gMysteryEventScriptCmdTableEnd+0x5b4c\n\ + ldr r2, ._875 + 4\n\ + ldr r3, ._875 + 8\n\ + bl gMysteryEventScriptCmdTableEnd+0x4c2c\n\ + bl gMysteryEventScriptCmdTableEnd+0x51e8\n\ + str r0, [r4]\n\ +._874:\n\ + pop {r3, r4}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + pop {r4, r5, r6, r7}\n\ + pop {r0}\n\ + bx r0\n\ +._876:\n\ + .align 2, 0\n\ +._875:\n\ + .word 0x0\n\ + .word 0x3ff33333\n\ + .word 0x33333333"); +} +#else void sub_8118F8C(struct Sprite *sprite) { sub_8118724(sprite); @@ -3899,6 +4989,7 @@ void sub_8118F8C(struct Sprite *sprite) } } } +#endif void sub_8119088(struct Sprite *sprite) { -- cgit v1.2.3 From 0f09d2e7046a54c95e2ed4a7ff759d4cd1db87f7 Mon Sep 17 00:00:00 2001 From: Cameron Hall Date: Mon, 22 Jan 2018 22:35:27 -0600 Subject: fix false gMysteryEventScriptCmdTableEnd offsets --- src/roulette.c | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) (limited to 'src/roulette.c') diff --git a/src/roulette.c b/src/roulette.c index e01f085a2..5a8d35647 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -646,10 +646,10 @@ void sub_8115384(void) ldr r0, ._47 + 16\n\ mov r1, #0xc0\n\ lsl r1, r1, #0x13\n\ - bl gMysteryEventScriptCmdTableEnd+0x3cb8\n\ + bl LZ77UnCompVram\n\ ldr r0, ._47 + 20\n\ ldr r1, ._47 + 24\n\ - bl gMysteryEventScriptCmdTableEnd+0x3cb8\n\ + bl LZ77UnCompVram\n\ ldr r1, ._47 + 28\n\ ldr r3, ._47 + 32\n\ add r1, r1, r3\n\ @@ -706,10 +706,10 @@ void sub_8115384(void) bl ClearBGTilemapBuffers\n\ ldr r0, ._56\n\ ldr r1, ._56 + 4\n\ - bl gMysteryEventScriptCmdTableEnd+0x3cbc\n\ + bl LZ77UnCompWram\n\ ldr r0, ._56 + 8\n\ ldr r1, ._56 + 12\n\ - bl gMysteryEventScriptCmdTableEnd+0x3cb8\n\ + bl LZ77UnCompVram\n\ ldr r1, ._56 + 16\n\ ldr r3, ._56 + 20\n\ add r1, r1, r3\n\ @@ -1051,11 +1051,11 @@ void sub_8115634(u8 unused) ldr r1, ._75 + 16\n\ str r1, [r0]\n\ ldr r0, ._75 + 20\n\ - bl gMysteryEventScriptCmdTableEnd+0x1c08\n\ + bl m4aMPlayStop\n\ ldr r0, ._75 + 24\n\ - bl gMysteryEventScriptCmdTableEnd+0x1c08\n\ + bl m4aMPlayStop\n\ ldr r0, ._75 + 28\n\ - bl gMysteryEventScriptCmdTableEnd+0x1c08\n\ + bl m4aMPlayStop\n\ ._74:\n\ pop {r4, r5, r6}\n\ pop {r0}\n\ @@ -2034,7 +2034,7 @@ void sub_8116B40(u8 taskid) // end roulette ? mov r2, #0xbe\n\ lsl r2, r2, #0x1\n\ mov r1, #0x0\n\ - bl gMysteryEventScriptCmdTableEnd+0x5c24\n\ + bl memset\n\ ldr r1, ._381 + 4\n\ ldr r0, ._381 + 8\n\ mov r4, #0x0\n\ @@ -4473,7 +4473,7 @@ void debug_sub_812E698() add r0, r7, #0\n\ bl sub_81186B8\n\ mov r0, #0x38\n\ - bl gMysteryEventScriptCmdTableEnd+0x13c0\n\ + bl m4aSongNumStart\n\ bl Random\n\ mov r1, #0x1\n\ and r1, r1, r0\n\ @@ -4489,7 +4489,7 @@ void debug_sub_812E698() ldrb r0, [r0]\n\ add r0, r0, #0x1\n\ mov r1, #0xc\n\ - bl gMysteryEventScriptCmdTableEnd+0x3e40\n\ + bl __modsi3\n\ add r1, r4, #0\n\ add r1, r1, #0x7f\n\ strb r0, [r1]\n\ @@ -4515,7 +4515,7 @@ void debug_sub_812E698() add r0, r0, r1\n\ ldr r1, [r0]\n\ add r0, r1, #0\n\ - bl gMysteryEventScriptCmdTableEnd+0x54dc\n\ + bl __addsf3\n\ str r0, [r5]\n\ add r0, r6, #0\n\ add r0, r0, #0x7e\n\ @@ -4845,7 +4845,7 @@ void sub_8118F8C(struct Sprite *sprite) mov r8, r0\n\ ldr r0, [r0]\n\ ldr r1, ._868 + 4\n\ - bl gMysteryEventScriptCmdTableEnd+0x5928\n\ + bl __gtsf2\n\ cmp r0, #0\n\ bgt ._874 @cond_branch\n\ add r0, r6, #0\n\ @@ -4868,26 +4868,26 @@ void sub_8118F8C(struct Sprite *sprite) mov r4, #0x3\n\ ldsb r4, [r0, r4]\n\ add r0, r4, #0\n\ - bl gMysteryEventScriptCmdTableEnd+0x5a48\n\ + bl __floatsisf\n\ add r5, r0, #0\n\ cmp r4, #0\n\ bge ._865 @cond_branch\n\ ldr r1, ._868 + 16\n\ - bl gMysteryEventScriptCmdTableEnd+0x54dc\n\ + bl __addsf3\n\ add r5, r0, #0\n\ ._865:\n\ lsr r0, r7, #0x19\n\ add r0, r0, r9\n\ ldrb r0, [r0, #0x4]\n\ add r0, r0, #0x1\n\ - bl gMysteryEventScriptCmdTableEnd+0x5a48\n\ + bl __floatsisf\n\ add r1, r0, #0\n\ add r0, r5, #0\n\ - bl gMysteryEventScriptCmdTableEnd+0x56a0\n\ + bl __divsf3\n\ add r1, r0, #0\n\ mov r2, r8\n\ ldr r0, [r2]\n\ - bl gMysteryEventScriptCmdTableEnd+0x5508\n\ + bl __subsf3\n\ mov r1, r8\n\ str r0, [r1]\n\ mov r0, #0x4\n\ @@ -4923,13 +4923,13 @@ void sub_8118F8C(struct Sprite *sprite) ldr r0, [r6]\n\ ldr r4, ._875\n\ add r1, r4, #0\n\ - bl gMysteryEventScriptCmdTableEnd+0x58e0\n\ + bl __nesf2\n\ cmp r0, #0\n\ beq ._874 @cond_branch\n\ mov r2, r8\n\ ldr r0, [r2]\n\ add r1, r4, #0\n\ - bl gMysteryEventScriptCmdTableEnd+0x59b8\n\ + bl __ltsf2\n\ cmp r0, #0\n\ bge ._874 @cond_branch\n\ str r4, [r6]\n\ @@ -4938,11 +4938,11 @@ void sub_8118F8C(struct Sprite *sprite) add r4, r5, #0\n\ add r4, r4, #0x98\n\ ldr r0, [r4]\n\ - bl gMysteryEventScriptCmdTableEnd+0x5b4c\n\ + bl __extendsfdf2\n\ ldr r2, ._875 + 4\n\ ldr r3, ._875 + 8\n\ - bl gMysteryEventScriptCmdTableEnd+0x4c2c\n\ - bl gMysteryEventScriptCmdTableEnd+0x51e8\n\ + bl __divdf3\n\ + bl __truncdfsf2\n\ str r0, [r4]\n\ ._874:\n\ pop {r3, r4}\n\ -- cgit v1.2.3 From 8aae2583eb851d1442b85e28d7bcb13a15c1818d Mon Sep 17 00:00:00 2001 From: Cameron Hall Date: Sat, 27 Jan 2018 16:41:07 -0600 Subject: add comments for pool loads --- src/roulette.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'src/roulette.c') diff --git a/src/roulette.c b/src/roulette.c index 5a8d35647..ffdbc2c26 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -607,7 +607,7 @@ void sub_8115384(void) .align 2, 0\n\ ._35:\n\ .word gUnknown_Debug_03005FB8\n\ - .word +0x2019000\n\ + .word 0x2019000\n\ .word gMain\n\ .word 0x43c\n\ .word ._37\n\ @@ -718,7 +718,7 @@ void sub_8115384(void) .align 2, 0\n\ ._56:\n\ .word gUnknown_083F88BC\n\ - .word +0x2018800\n\ + .word 0x2018800\n\ .word gUnknown_083F8A60\n\ .word 0x6003000\n\ .word gMain\n\ @@ -870,7 +870,7 @@ void sub_8115384(void) .word 0x4000004\n\ .word sub_8115124+1\n\ .word sub_81156BC+1\n\ - .word +0x2019000\n\ + .word 0x2019000\n\ .word gTasks\n\ .word gSaveBlock1\n\ .word 0x494\n\ @@ -1063,7 +1063,7 @@ void sub_8115634(u8 unused) ._76:\n\ .align 2, 0\n\ ._75:\n\ - .word +0x2019000\n\ + .word 0x2019000\n\ .word unk_203955C\n\ .word gMain\n\ .word gTasks\n\ @@ -2067,7 +2067,7 @@ void sub_8116B40(u8 taskid) // end roulette ? ._382:\n\ .align 2, 0\n\ ._381:\n\ - .word +0x2019000\n\ + .word 0x2019000\n\ .word gSpriteCoordOffsetX\n\ .word gSpriteCoordOffsetY\n\ .word 0x4000050\n\ @@ -4499,7 +4499,7 @@ void debug_sub_812E698() ._840:\n\ .align 2, 0\n\ ._839:\n\ - .word +0x2019000\n\ + .word 0x2019000\n\ .word 0x0\n\ .word gUnknown_083F8DF4\n\ ._837:\n\ @@ -4546,7 +4546,7 @@ void debug_sub_812E698() ._842:\n\ .align 2, 0\n\ ._841:\n\ - .word +0x2019000\n\ + .word 0x2019000\n\ .word gUnknown_083F8DF4\n\ .word 0x3dae147b\n\ .word sub_8118D2C+1"); @@ -4902,7 +4902,7 @@ void sub_8118F8C(struct Sprite *sprite) ._869:\n\ .align 2, 0\n\ ._868:\n\ - .word +0x2019000\n\ + .word 0x2019000\n\ .word 0x3f000000\n\ .word 0x0\n\ .word gUnknown_083F8DF4\n\ -- cgit v1.2.3 From fe400f60b6609d37d2b8a0c2aec75321adc3e95f Mon Sep 17 00:00:00 2001 From: Cameron Hall Date: Sat, 27 Jan 2018 17:03:40 -0600 Subject: add comments for pool loads in C files --- src/roulette.c | 262 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 131 insertions(+), 131 deletions(-) (limited to 'src/roulette.c') diff --git a/src/roulette.c b/src/roulette.c index ffdbc2c26..838ce94f8 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -586,11 +586,11 @@ void sub_8115384(void) asm("\ push {r4, lr}\n\ add sp, sp, #0xfffffffc\n\ - ldr r1, ._35\n\ - ldr r0, ._35 + 4\n\ + ldr r1, ._35 @ gUnknown_Debug_03005FB8\n\ + ldr r0, ._35 + 4 @ 0x2019000\n\ str r0, [r1]\n\ - ldr r1, ._35 + 8\n\ - ldr r2, ._35 + 12\n\ + ldr r1, ._35 + 8 @ gMain\n\ + ldr r2, ._35 + 12 @ 0x43c\n\ add r0, r1, r2\n\ ldrb r0, [r0]\n\ add r2, r1, #0\n\ @@ -599,7 +599,7 @@ void sub_8115384(void) b ._64\n\ ._33:\n\ lsl r0, r0, #0x2\n\ - ldr r1, ._35 + 16\n\ + ldr r1, ._35 + 16 @ \n\ add r0, r0, r1\n\ ldr r0, [r0]\n\ mov pc, r0\n\ @@ -626,12 +626,12 @@ void sub_8115384(void) bl ScanlineEffect_Stop\n\ bl ClearVideoCallbacks\n\ bl sub_80F9368\n\ - ldr r1, ._47\n\ - ldr r3, ._47 + 4\n\ + ldr r1, ._47 @ 0x400000c\n\ + ldr r3, ._47 + 4 @ 0x4686\n\ add r0, r3, #0\n\ strh r0, [r1]\n\ sub r1, r1, #0x2\n\ - ldr r2, ._47 + 8\n\ + ldr r2, ._47 + 8 @ 0x4401\n\ add r0, r2, #0\n\ strh r0, [r1]\n\ add r1, r1, #0x46\n\ @@ -640,18 +640,18 @@ void sub_8115384(void) add r0, r3, #0\n\ strh r0, [r1]\n\ add r1, r1, #0x2\n\ - ldr r2, ._47 + 12\n\ + ldr r2, ._47 + 12 @ 0x60a\n\ add r0, r2, #0\n\ strh r0, [r1]\n\ - ldr r0, ._47 + 16\n\ + ldr r0, ._47 + 16 @ gUnknown_08E8096C\n\ mov r1, #0xc0\n\ lsl r1, r1, #0x13\n\ bl LZ77UnCompVram\n\ - ldr r0, ._47 + 20\n\ - ldr r1, ._47 + 24\n\ + ldr r0, ._47 + 20 @ gRouletteWheelTiles\n\ + ldr r1, ._47 + 24 @ 0x6004000\n\ bl LZ77UnCompVram\n\ - ldr r1, ._47 + 28\n\ - ldr r3, ._47 + 32\n\ + ldr r1, ._47 + 28 @ gMain\n\ + ldr r3, ._47 + 32 @ 0x43c\n\ add r1, r1, r3\n\ b ._61\n\ ._48:\n\ @@ -670,8 +670,8 @@ void sub_8115384(void) bl ResetPaletteFade\n\ bl ResetSpriteData\n\ bl ResetTasks\n\ - ldr r1, ._50\n\ - ldr r0, ._50 + 4\n\ + ldr r1, ._50 @ gMain\n\ + ldr r0, ._50 + 4 @ 0x43c\n\ add r1, r1, r0\n\ b ._61\n\ ._51:\n\ @@ -680,17 +680,17 @@ void sub_8115384(void) .word gMain\n\ .word 0x43c\n\ ._40:\n\ - ldr r0, ._53\n\ + ldr r0, ._53 @ gWindowTemplate_81E6C3C\n\ bl Text_LoadWindowTemplate\n\ - ldr r0, ._53 + 4\n\ + ldr r0, ._53 + 4 @ gWindowTemplate_81E6CE4\n\ bl InitMenuWindow\n\ - ldr r0, ._53 + 8\n\ + ldr r0, ._53 + 8 @ gUnknown_083F86BC\n\ mov r2, #0xe0\n\ lsl r2, r2, #0x1\n\ mov r1, #0x0\n\ bl LoadPalette\n\ - ldr r1, ._53 + 12\n\ - ldr r2, ._53 + 16\n\ + ldr r1, ._53 + 12 @ gMain\n\ + ldr r2, ._53 + 16 @ 0x43c\n\ add r1, r1, r2\n\ b ._61\n\ ._54:\n\ @@ -704,14 +704,14 @@ void sub_8115384(void) ._41:\n\ bl sub_8115238\n\ bl ClearBGTilemapBuffers\n\ - ldr r0, ._56\n\ - ldr r1, ._56 + 4\n\ + ldr r0, ._56 @ gUnknown_083F88BC\n\ + ldr r1, ._56 + 4 @ 0x2018800\n\ bl LZ77UnCompWram\n\ - ldr r0, ._56 + 8\n\ - ldr r1, ._56 + 12\n\ + ldr r0, ._56 + 8 @ gUnknown_083F8A60\n\ + ldr r1, ._56 + 12 @ 0x6003000\n\ bl LZ77UnCompVram\n\ - ldr r1, ._56 + 16\n\ - ldr r3, ._56 + 20\n\ + ldr r1, ._56 + 16 @ gMain\n\ + ldr r3, ._56 + 20 @ 0x43c\n\ add r1, r1, r3\n\ b ._61\n\ ._57:\n\ @@ -732,8 +732,8 @@ void sub_8115384(void) bl sub_8117900\n\ bl sub_8117BBC\n\ bl sub_8117DF4\n\ - ldr r1, ._59\n\ - ldr r0, ._59 + 4\n\ + ldr r1, ._59 @ gMain\n\ + ldr r0, ._59 + 4 @ 0x43c\n\ add r1, r1, r0\n\ b ._61\n\ ._60:\n\ @@ -744,8 +744,8 @@ void sub_8115384(void) ._43:\n\ bl AnimateSprites\n\ bl BuildOamBuffer\n\ - ldr r0, ._62\n\ - ldr r1, ._62 + 4\n\ + ldr r0, ._62 @ gSaveBlock1\n\ + ldr r1, ._62 + 4 @ 0x494\n\ add r0, r0, r1\n\ ldrh r0, [r0]\n\ bl sub_81180F4\n\ @@ -760,20 +760,20 @@ void sub_8115384(void) mov r2, #0x1d\n\ mov r3, #0x13\n\ bl Menu_DrawStdWindowFrame\n\ - ldr r0, ._62 + 8\n\ + ldr r0, ._62 + 8 @ gUnknown_081C4157\n\ mov r1, #0x1\n\ mov r2, #0xf\n\ bl Menu_PrintText\n\ - ldr r1, ._62 + 12\n\ + ldr r1, ._62 + 12 @ gSpriteCoordOffsetX\n\ mov r2, #0x3c\n\ neg r2, r2\n\ add r0, r2, #0\n\ strh r0, [r1]\n\ - ldr r1, ._62 + 16\n\ + ldr r1, ._62 + 16 @ gSpriteCoordOffsetY\n\ mov r0, #0x0\n\ strh r0, [r1]\n\ - ldr r1, ._62 + 20\n\ - ldr r3, ._62 + 24\n\ + ldr r1, ._62 + 20 @ gMain\n\ + ldr r3, ._62 + 24 @ 0x43c\n\ add r1, r1, r3\n\ b ._61\n\ ._63:\n\ @@ -789,10 +789,10 @@ void sub_8115384(void) ._44:\n\ mov r1, #0x80\n\ lsl r1, r1, #0x13\n\ - ldr r3, ._65\n\ + ldr r3, ._65 @ 0x1741\n\ add r0, r3, #0\n\ strh r0, [r1]\n\ - ldr r0, ._65 + 4\n\ + ldr r0, ._65 + 4 @ 0x43c\n\ add r1, r2, r0\n\ ._61:\n\ ldrb r0, [r1]\n\ @@ -805,22 +805,22 @@ void sub_8115384(void) .word 0x1741\n\ .word 0x43c\n\ ._45:\n\ - ldr r3, ._67\n\ + ldr r3, ._67 @ 0x4000208\n\ ldrh r2, [r3]\n\ mov r0, #0x0\n\ strh r0, [r3]\n\ - ldr r4, ._67 + 4\n\ + ldr r4, ._67 + 4 @ 0x4000200\n\ ldrh r0, [r4]\n\ mov r1, #0x1\n\ orr r0, r0, r1\n\ strh r0, [r4]\n\ strh r2, [r3]\n\ - ldr r2, ._67 + 8\n\ + ldr r2, ._67 + 8 @ 0x4000004\n\ ldrh r0, [r2]\n\ mov r1, #0x8\n\ orr r0, r0, r1\n\ strh r0, [r2]\n\ - ldr r0, ._67 + 12\n\ + ldr r0, ._67 + 12 @ sub_8115124\n\ bl SetVBlankCallback\n\ mov r0, #0x1\n\ str r0, [sp]\n\ @@ -829,33 +829,33 @@ void sub_8115384(void) mov r2, #0x10\n\ mov r3, #0x0\n\ bl BeginHardwarePaletteFade\n\ - ldr r0, ._67 + 16\n\ + ldr r0, ._67 + 16 @ sub_81156BC\n\ mov r1, #0x0\n\ bl CreateTask\n\ - ldr r4, ._67 + 20\n\ + ldr r4, ._67 + 20 @ 0x2019000\n\ add r1, r4, #0\n\ add r1, r1, #0xa4\n\ strb r0, [r1]\n\ lsl r0, r0, #0x18\n\ lsr r0, r0, #0x18\n\ - ldr r2, ._67 + 24\n\ + ldr r2, ._67 + 24 @ gTasks\n\ lsl r1, r0, #0x2\n\ add r1, r1, r0\n\ lsl r1, r1, #0x3\n\ add r1, r1, r2\n\ mov r0, #0x6\n\ strh r0, [r1, #0x14]\n\ - ldr r0, ._67 + 28\n\ - ldr r2, ._67 + 32\n\ + ldr r0, ._67 + 28 @ gSaveBlock1\n\ + ldr r2, ._67 + 32 @ 0x494\n\ add r0, r0, r2\n\ ldrh r0, [r0]\n\ strh r0, [r1, #0x22]\n\ - ldr r0, ._67 + 36\n\ + ldr r0, ._67 + 36 @ sub_8115634\n\ mov r1, #0x1\n\ bl CreateTask\n\ add r4, r4, #0xa5\n\ strb r0, [r4]\n\ - ldr r0, ._67 + 40\n\ + ldr r0, ._67 + 40 @ sub_81150FC\n\ bl SetMainCallback2\n\ ._64:\n\ add sp, sp, #0x4\n\ @@ -967,7 +967,7 @@ void sub_8115634(u8 unused) { asm("\ push {r4, r5, r6, lr}\n\ - ldr r0, ._75\n\ + ldr r0, ._75 @ 0x2019000\n\ add r3, r0, #0\n\ add r3, r3, #0x21\n\ ldrb r1, [r3]\n\ @@ -1030,17 +1030,17 @@ void sub_8115634(u8 unused) asr r0, r0, #0x10\n\ neg r0, r0\n\ strh r0, [r6, #0x30]\n\ - ldr r0, ._75 + 4\n\ + ldr r0, ._75 + 4 @ unk_203955C\n\ ldrb r0, [r0]\n\ cmp r0, #0\n\ beq ._74 @cond_branch\n\ - ldr r0, ._75 + 8\n\ + ldr r0, ._75 + 8 @ gMain\n\ ldrh r1, [r0, #0x2e]\n\ mov r0, #0x8\n\ and r0, r0, r1\n\ cmp r0, #0\n\ beq ._74 @cond_branch\n\ - ldr r2, ._75 + 12\n\ + ldr r2, ._75 + 12 @ gTasks\n\ add r0, r6, #0\n\ add r0, r0, #0xa4\n\ ldrb r1, [r0]\n\ @@ -1048,13 +1048,13 @@ void sub_8115634(u8 unused) add r0, r0, r1\n\ lsl r0, r0, #0x3\n\ add r0, r0, r2\n\ - ldr r1, ._75 + 16\n\ + ldr r1, ._75 + 16 @ sub_81157AC\n\ str r1, [r0]\n\ - ldr r0, ._75 + 20\n\ + ldr r0, ._75 + 20 @ gMPlay_SE1\n\ bl m4aMPlayStop\n\ - ldr r0, ._75 + 24\n\ + ldr r0, ._75 + 24 @ gMPlay_SE2\n\ bl m4aMPlayStop\n\ - ldr r0, ._75 + 28\n\ + ldr r0, ._75 + 28 @ gMPlay_SE3\n\ bl m4aMPlayStop\n\ ._74:\n\ pop {r4, r5, r6}\n\ @@ -2030,13 +2030,13 @@ void sub_8116B40(u8 taskid) // end roulette ? bne ._380 @cond_branch\n\ mov r0, #0x0\n\ bl SetVBlankCallback\n\ - ldr r0, ._381\n\ + ldr r0, ._381 @ 0x2019000\n\ mov r2, #0xbe\n\ lsl r2, r2, #0x1\n\ mov r1, #0x0\n\ bl memset\n\ - ldr r1, ._381 + 4\n\ - ldr r0, ._381 + 8\n\ + ldr r1, ._381 + 4 @ gSpriteCoordOffsetX\n\ + ldr r0, ._381 + 8 @ gSpriteCoordOffsetY\n\ mov r4, #0x0\n\ strh r5, [r0]\n\ strh r5, [r1]\n\ @@ -2045,20 +2045,20 @@ void sub_8116B40(u8 taskid) // end roulette ? bl ResetPaletteFade\n\ bl ResetSpriteData\n\ bl ClearBGTilemapBuffers\n\ - ldr r0, ._381 + 12\n\ + ldr r0, ._381 + 12 @ 0x4000050\n\ strh r5, [r0]\n\ add r0, r0, #0x2\n\ strh r5, [r0]\n\ add r0, r0, #0x2\n\ strh r5, [r0]\n\ - ldr r1, ._381 + 16\n\ - ldr r0, ._381 + 20\n\ + ldr r1, ._381 + 16 @ gFieldCallback\n\ + ldr r0, ._381 + 20 @ sub_8080990\n\ str r0, [r1]\n\ - ldr r0, ._381 + 24\n\ + ldr r0, ._381 + 24 @ c2_exit_to_overworld_2_switch\n\ bl SetMainCallback2\n\ add r0, r6, #0\n\ bl DestroyTask\n\ - ldr r0, ._381 + 28\n\ + ldr r0, ._381 + 28 @ unk_203955C\n\ strb r4, [r0]\n\ ._380:\n\ pop {r4, r5, r6}\n\ @@ -3189,13 +3189,13 @@ void debug_sub_812CDE4() lsl r0, r0, #0x18\n\ lsr r3, r0, #0x18\n\ add r4, r3, #0\n\ - ldr r0, ._575\n\ + ldr r0, ._575 @ gMain\n\ ldrh r1, [r0, #0x2e]\n\ mov r0, #0x1\n\ and r0, r0, r1\n\ cmp r0, #0\n\ beq ._572 @cond_branch\n\ - ldr r1, ._575 + 4\n\ + ldr r1, ._575 + 4 @ gTasks\n\ lsl r0, r3, #0x2\n\ add r0, r0, r3\n\ lsl r0, r0, #0x3\n\ @@ -3204,13 +3204,13 @@ void debug_sub_812CDE4() add r0, r0, #0x1\n\ strh r0, [r2, #0x22]\n\ lsl r0, r0, #0x10\n\ - ldr r1, ._575 + 8\n\ + ldr r1, ._575 + 8 @ 0x27100000\n\ cmp r0, r1\n\ bne ._573 @cond_branch\n\ mov r0, #0x0\n\ strh r0, [r2, #0x22]\n\ ._573:\n\ - ldr r0, ._575 + 12\n\ + ldr r0, ._575 + 12 @ gStringVar1\n\ mov r3, #0x22\n\ ldsh r1, [r2, r3]\n\ b ._584\n\ @@ -3226,7 +3226,7 @@ void debug_sub_812CDE4() and r0, r0, r1\n\ cmp r0, #0\n\ beq ._577 @cond_branch\n\ - ldr r1, ._580\n\ + ldr r1, ._580 @ gTasks\n\ lsl r0, r3, #0x2\n\ add r0, r0, r3\n\ lsl r0, r0, #0x3\n\ @@ -3240,10 +3240,10 @@ void debug_sub_812CDE4() neg r1, r1\n\ cmp r0, r1\n\ bne ._578 @cond_branch\n\ - ldr r0, ._580 + 4\n\ + ldr r0, ._580 + 4 @ 0x270f\n\ strh r0, [r2, #0x22]\n\ ._578:\n\ - ldr r0, ._580 + 8\n\ + ldr r0, ._580 + 8 @ gStringVar1\n\ mov r3, #0x22\n\ ldsh r1, [r2, r3]\n\ b ._584\n\ @@ -3259,7 +3259,7 @@ void debug_sub_812CDE4() and r0, r0, r1\n\ cmp r0, #0\n\ beq ._582 @cond_branch\n\ - ldr r1, ._585\n\ + ldr r1, ._585 @ gTasks\n\ lsl r0, r3, #0x2\n\ add r0, r0, r3\n\ lsl r0, r0, #0x3\n\ @@ -3269,14 +3269,14 @@ void debug_sub_812CDE4() add r0, r0, #0xa\n\ strh r0, [r2, #0x22]\n\ lsl r0, r0, #0x10\n\ - ldr r1, ._585 + 4\n\ + ldr r1, ._585 + 4 @ 0x270f0000\n\ cmp r0, r1\n\ ble ._583 @cond_branch\n\ - ldr r1, ._585 + 8\n\ + ldr r1, ._585 + 8 @ 0xffffd8fb\n\ add r0, r3, r1\n\ strh r0, [r2, #0x22]\n\ ._583:\n\ - ldr r0, ._585 + 12\n\ + ldr r0, ._585 + 12 @ gStringVar1\n\ mov r3, #0x22\n\ ldsh r1, [r2, r3]\n\ b ._584\n\ @@ -3293,7 +3293,7 @@ void debug_sub_812CDE4() and r0, r0, r1\n\ cmp r0, #0\n\ beq ._587 @cond_branch\n\ - ldr r0, ._590\n\ + ldr r0, ._590 @ gTasks\n\ lsl r1, r3, #0x2\n\ add r1, r1, r3\n\ lsl r1, r1, #0x3\n\ @@ -3305,19 +3305,19 @@ void debug_sub_812CDE4() lsl r0, r0, #0x10\n\ cmp r0, #0\n\ bge ._588 @cond_branch\n\ - ldr r3, ._590 + 4\n\ + ldr r3, ._590 + 4 @ 0x2705\n\ add r0, r2, r3\n\ strh r0, [r1, #0x22]\n\ ._588:\n\ - ldr r0, ._590 + 8\n\ + ldr r0, ._590 + 8 @ gStringVar1\n\ mov r2, #0x22\n\ ldsh r1, [r1, r2]\n\ ._584:\n\ mov r2, #0x1\n\ mov r3, #0x4\n\ bl ConvertIntToDecimalStringN\n\ - ldr r4, ._590 + 12\n\ - ldr r1, ._590 + 16\n\ + ldr r4, ._590 + 12 @ gStringVar4\n\ + ldr r1, ._590 + 16 @ gOtherText_Coins\n\ add r0, r4, #0\n\ bl StringExpandPlaceholders\n\ add r0, r4, #0\n\ @@ -3338,34 +3338,34 @@ void debug_sub_812CDE4() and r0, r0, r1\n\ cmp r0, #0\n\ beq ._592 @cond_branch\n\ - ldr r0, ._594\n\ - ldr r2, ._594 + 4\n\ + ldr r0, ._594 @ gSaveBlock1\n\ + ldr r2, ._594 + 4 @ gTasks\n\ lsl r1, r3, #0x2\n\ add r1, r1, r3\n\ lsl r1, r1, #0x3\n\ add r1, r1, r2\n\ ldrh r2, [r1, #0x22]\n\ - ldr r3, ._594 + 8\n\ + ldr r3, ._594 + 8 @ 0x494\n\ add r0, r0, r3\n\ mov r5, #0x0\n\ strh r2, [r0]\n\ - ldr r0, ._594 + 12\n\ + ldr r0, ._594 + 12 @ Task_Roulette_0\n\ str r0, [r1]\n\ - ldr r0, ._594 + 16\n\ + ldr r0, ._594 + 16 @ gStringVar1\n\ mov r2, #0x22\n\ ldsh r1, [r1, r2]\n\ mov r2, #0x1\n\ mov r3, #0x4\n\ bl ConvertIntToDecimalStringN\n\ - ldr r4, ._594 + 20\n\ - ldr r1, ._594 + 24\n\ + ldr r4, ._594 + 20 @ gStringVar4\n\ + ldr r1, ._594 + 24 @ gOtherText_Coins\n\ add r0, r4, #0\n\ bl StringExpandPlaceholders\n\ add r0, r4, #0\n\ mov r1, #0x9\n\ mov r2, #0x1\n\ bl MenuPrint_RightAligned\n\ - ldr r0, ._594 + 28\n\ + ldr r0, ._594 + 28 @ unk_2039560\n\ strb r5, [r0]\n\ b ._596\n\ ._595:\n\ @@ -3384,33 +3384,33 @@ void debug_sub_812CDE4() and r0, r0, r1\n\ cmp r0, #0\n\ beq ._596 @cond_branch\n\ - ldr r0, ._597\n\ - ldr r2, ._597 + 4\n\ + ldr r0, ._597 @ gSaveBlock1\n\ + ldr r2, ._597 + 4 @ gTasks\n\ lsl r1, r4, #0x2\n\ add r1, r1, r4\n\ lsl r1, r1, #0x3\n\ add r1, r1, r2\n\ ldrh r2, [r1, #0x22]\n\ - ldr r3, ._597 + 8\n\ + ldr r3, ._597 + 8 @ 0x494\n\ add r0, r0, r3\n\ strh r2, [r0]\n\ - ldr r0, ._597 + 12\n\ + ldr r0, ._597 + 12 @ Task_Roulette_0\n\ str r0, [r1]\n\ - ldr r0, ._597 + 16\n\ + ldr r0, ._597 + 16 @ gStringVar1\n\ mov r2, #0x22\n\ ldsh r1, [r1, r2]\n\ mov r2, #0x1\n\ mov r3, #0x4\n\ bl ConvertIntToDecimalStringN\n\ - ldr r4, ._597 + 20\n\ - ldr r1, ._597 + 24\n\ + ldr r4, ._597 + 20 @ gStringVar4\n\ + ldr r1, ._597 + 24 @ gOtherText_Coins\n\ add r0, r4, #0\n\ bl StringExpandPlaceholders\n\ add r0, r4, #0\n\ mov r1, #0x9\n\ mov r2, #0x1\n\ bl MenuPrint_RightAligned\n\ - ldr r1, ._597 + 28\n\ + ldr r1, ._597 + 28 @ unk_2039560\n\ mov r0, #0x1\n\ strb r0, [r1]\n\ ._596:\n\ @@ -3437,13 +3437,13 @@ void debug_sub_812CFE8() push {r4, r5, lr}\n\ lsl r0, r0, #0x18\n\ lsr r0, r0, #0x18\n\ - ldr r2, ._600\n\ + ldr r2, ._600 @ gTasks\n\ lsl r1, r0, #0x2\n\ add r1, r1, r0\n\ lsl r1, r1, #0x3\n\ add r5, r1, r2\n\ - ldr r0, ._600 + 4\n\ - ldr r1, ._600 + 8\n\ + ldr r0, ._600 + 4 @ gSaveBlock1\n\ + ldr r1, ._600 + 8 @ 0x494\n\ add r0, r0, r1\n\ ldrh r0, [r0]\n\ strh r0, [r5, #0x22]\n\ @@ -3452,20 +3452,20 @@ void debug_sub_812CFE8() and r1, r1, r0\n\ cmp r1, #0\n\ beq ._599 @cond_branch\n\ - ldr r0, ._600 + 12\n\ + ldr r0, ._600 + 12 @ gSpecialVar_0x8004\n\ ldrh r1, [r0]\n\ mov r2, #0x80\n\ orr r1, r1, r2\n\ strh r1, [r0]\n\ ._599:\n\ - ldr r0, ._600 + 16\n\ + ldr r0, ._600 + 16 @ gStringVar1\n\ mov r2, #0x22\n\ ldsh r1, [r5, r2]\n\ mov r2, #0x1\n\ mov r3, #0x4\n\ bl ConvertIntToDecimalStringN\n\ - ldr r4, ._600 + 20\n\ - ldr r1, ._600 + 24\n\ + ldr r4, ._600 + 20 @ gStringVar4\n\ + ldr r1, ._600 + 24 @ gOtherText_Coins\n\ add r0, r4, #0\n\ bl StringExpandPlaceholders\n\ mov r0, #0x0\n\ @@ -3482,11 +3482,11 @@ void debug_sub_812CFE8() mov r2, #0x1d\n\ mov r3, #0x13\n\ bl Menu_DrawStdWindowFrame\n\ - ldr r0, ._600 + 28\n\ + ldr r0, ._600 + 28 @ gUnknown_Debug_0842510D\n\ mov r1, #0x1\n\ mov r2, #0xf\n\ bl Menu_PrintText\n\ - ldr r0, ._600 + 32\n\ + ldr r0, ._600 + 32 @ debug_sub_812CDE4\n\ str r0, [r5]\n\ pop {r4, r5}\n\ pop {r0}\n\ @@ -3514,14 +3514,14 @@ void PlayRoulette(void) asm("\ push {lr}\n\ bl ScriptContext2_Enable\n\ - ldr r1, ._604\n\ + ldr r1, ._604 @ unk_2039560\n\ mov r0, #0x0\n\ strb r0, [r1]\n\ - ldr r0, ._604 + 4\n\ + ldr r0, ._604 + 4 @ unk_203955C\n\ ldrb r0, [r0]\n\ cmp r0, #0\n\ beq ._602 @cond_branch\n\ - ldr r0, ._604 + 8\n\ + ldr r0, ._604 + 8 @ debug_sub_812CFE8\n\ mov r1, #0x0\n\ bl CreateTask\n\ b ._603\n\ @@ -3532,18 +3532,18 @@ void PlayRoulette(void) .word unk_203955C\n\ .word debug_sub_812CFE8+1\n\ ._602:\n\ - ldr r0, ._606\n\ + ldr r0, ._606 @ Task_Roulette_0\n\ mov r1, #0x0\n\ bl CreateTask\n\ lsl r0, r0, #0x18\n\ lsr r0, r0, #0x18\n\ - ldr r2, ._606 + 4\n\ + ldr r2, ._606 + 4 @ gTasks\n\ lsl r1, r0, #0x2\n\ add r1, r1, r0\n\ lsl r1, r1, #0x3\n\ add r1, r1, r2\n\ - ldr r0, ._606 + 8\n\ - ldr r2, ._606 + 12\n\ + ldr r0, ._606 + 8 @ gSaveBlock1\n\ + ldr r2, ._606 + 12 @ 0x494\n\ add r0, r0, r2\n\ ldrh r0, [r0]\n\ strh r0, [r1, #0x22]\n\ @@ -4479,10 +4479,10 @@ void debug_sub_812E698() and r1, r1, r0\n\ cmp r1, #0\n\ beq ._837 @cond_branch\n\ - ldr r4, ._839\n\ + ldr r4, ._839 @ 0x2019000\n\ add r1, r4, #0\n\ add r1, r1, #0x8c\n\ - ldr r0, ._839 + 4\n\ + ldr r0, ._839 + 4 @ 0x0\n\ str r0, [r1]\n\ add r0, r4, #0\n\ add r0, r0, #0x7e\n\ @@ -4494,7 +4494,7 @@ void debug_sub_812E698() add r1, r1, #0x7f\n\ strb r0, [r1]\n\ add r1, r4, #0\n\ - ldr r4, ._839 + 8\n\ + ldr r4, ._839 + 8 @ gUnknown_083F8DF4\n\ b ._838\n\ ._840:\n\ .align 2, 0\n\ @@ -4503,10 +4503,10 @@ void debug_sub_812E698() .word 0x0\n\ .word gUnknown_083F8DF4\n\ ._837:\n\ - ldr r6, ._841\n\ + ldr r6, ._841 @ 0x2019000\n\ add r5, r6, #0\n\ add r5, r5, #0x8c\n\ - ldr r4, ._841 + 4\n\ + ldr r4, ._841 + 4 @ gUnknown_083F8DF4\n\ ldrb r0, [r6, #0x4]\n\ lsl r0, r0, #0x1e\n\ lsr r0, r0, #0x19\n\ @@ -4534,9 +4534,9 @@ void debug_sub_812E698() ldrb r0, [r0, #0x2]\n\ strh r0, [r7, #0x32]\n\ add r1, r1, #0x98\n\ - ldr r0, ._841 + 8\n\ + ldr r0, ._841 + 8 @ 0x3dae147b\n\ str r0, [r1]\n\ - ldr r0, ._841 + 12\n\ + ldr r0, ._841 + 12 @ sub_8118D2C\n\ str r0, [r7, #0x1c]\n\ mov r0, #0x5\n\ strh r0, [r7, #0x30]\n\ @@ -4839,12 +4839,12 @@ void sub_8118F8C(struct Sprite *sprite) push {r6, r7}\n\ add r6, r0, #0\n\ bl sub_8118724\n\ - ldr r5, ._868\n\ + ldr r5, ._868 @ 0x2019000\n\ mov r0, #0x8c\n\ add r0, r0, r5\n\ mov r8, r0\n\ ldr r0, [r0]\n\ - ldr r1, ._868 + 4\n\ + ldr r1, ._868 + 4 @ 0x3f000000\n\ bl __gtsf2\n\ cmp r0, #0\n\ bgt ._874 @cond_branch\n\ @@ -4857,9 +4857,9 @@ void sub_8118F8C(struct Sprite *sprite) bne ._864 @cond_branch\n\ add r1, r5, #0\n\ add r1, r1, #0x90\n\ - ldr r0, ._868 + 8\n\ + ldr r0, ._868 + 8 @ 0x0\n\ str r0, [r1]\n\ - ldr r1, ._868 + 12\n\ + ldr r1, ._868 + 12 @ gUnknown_083F8DF4\n\ mov r9, r1\n\ ldrb r0, [r5, #0x4]\n\ lsl r7, r0, #0x1e\n\ @@ -4872,7 +4872,7 @@ void sub_8118F8C(struct Sprite *sprite) add r5, r0, #0\n\ cmp r4, #0\n\ bge ._865 @cond_branch\n\ - ldr r1, ._868 + 16\n\ + ldr r1, ._868 + 16 @ 0x43800000\n\ bl __addsf3\n\ add r5, r0, #0\n\ ._865:\n\ @@ -4892,11 +4892,11 @@ void sub_8118F8C(struct Sprite *sprite) str r0, [r1]\n\ mov r0, #0x4\n\ strh r0, [r6, #0x30]\n\ - ldr r0, ._868 + 20\n\ + ldr r0, ._868 + 20 @ unk_2039560\n\ ldrb r0, [r0]\n\ cmp r0, #0\n\ beq ._866 @cond_branch\n\ - ldr r0, ._868 + 24\n\ + ldr r0, ._868 + 24 @ debug_sub_812E698\n\ str r0, [r6, #0x1c]\n\ b ._874\n\ ._869:\n\ @@ -4910,7 +4910,7 @@ void sub_8118F8C(struct Sprite *sprite) .word unk_2039560\n\ .word debug_sub_812E698+1\n\ ._866:\n\ - ldr r0, ._871\n\ + ldr r0, ._871 @ sub_8118DE4\n\ str r0, [r6, #0x1c]\n\ b ._874\n\ ._872:\n\ @@ -4921,7 +4921,7 @@ void sub_8118F8C(struct Sprite *sprite) add r6, r5, #0\n\ add r6, r6, #0x90\n\ ldr r0, [r6]\n\ - ldr r4, ._875\n\ + ldr r4, ._875 @ 0x0\n\ add r1, r4, #0\n\ bl __nesf2\n\ cmp r0, #0\n\ @@ -4939,8 +4939,8 @@ void sub_8118F8C(struct Sprite *sprite) add r4, r4, #0x98\n\ ldr r0, [r4]\n\ bl __extendsfdf2\n\ - ldr r2, ._875 + 4\n\ - ldr r3, ._875 + 8\n\ + ldr r2, ._875 + 4 @ 0x3ff33333\n\ + ldr r3, ._875 + 8 @ 0x33333333\n\ bl __divdf3\n\ bl __truncdfsf2\n\ str r0, [r4]\n\ -- cgit v1.2.3