From febcb77f067c6a69290b216953887489a3259093 Mon Sep 17 00:00:00 2001 From: scnorton Date: Tue, 11 Jul 2017 10:14:35 -0400 Subject: Decompile secret base data --- src/decoration.c | 0 src/field_specials.c | 0 src/field_tasks.c | 0 src/pokeblock.c | 0 src/secret_base.c | 93 ++++++++++++++++++++++++++++++++++++++++++++------ src/sound_check_menu.c | 0 src/use_pokeblock.c | 0 7 files changed, 83 insertions(+), 10 deletions(-) mode change 100755 => 100644 src/decoration.c mode change 100755 => 100644 src/field_specials.c mode change 100755 => 100644 src/field_tasks.c mode change 100755 => 100644 src/pokeblock.c mode change 100755 => 100644 src/sound_check_menu.c mode change 100755 => 100644 src/use_pokeblock.c (limited to 'src') diff --git a/src/decoration.c b/src/decoration.c old mode 100755 new mode 100644 diff --git a/src/field_specials.c b/src/field_specials.c old mode 100755 new mode 100644 diff --git a/src/field_tasks.c b/src/field_tasks.c old mode 100755 new mode 100644 diff --git a/src/pokeblock.c b/src/pokeblock.c old mode 100755 new mode 100644 diff --git a/src/secret_base.c b/src/secret_base.c index d88d2c66a..2923d770d 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -22,20 +22,93 @@ #include "text.h" #include "vars.h" -extern u8 gUnknown_020387DC; -extern u16 gSpecialVar_0x8004; -extern u16 gSpecialVar_0x8005; -extern u16 gSpecialVar_0x8006; -extern u16 gSpecialVar_0x8007; -extern u16 gScriptResult; -extern const struct +u8 sub_80BCA84(); +u8 sub_80BCBF8(); +void sub_80BCB90(u8); +void sub_80BCBC0(u8); + +const struct { u16 unk_083D1358_0; u16 unk_083D1358_1; -} gUnknown_083D1358[7]; -extern const u8 gUnknown_083D1374[4 * 16]; +} gUnknown_083D1358[] = { + {0x26, 0x36}, + {0x27, 0x37}, + {0x1a0, 0x1a1}, + {0x1a8, 0x1a9}, + {0x1b0, 0x1b1}, + {0x208, 0x210}, + {0x271, 0x278} +}; + +extern u8 gUnknown_020387DC; + +const u8 gUnknown_083D1374[] = { + MAP_ID_SECRET_BASE_RED_CAVE1, 0, + MAP_ID_SECRET_BASE_BROWN_CAVE1, 3, + MAP_ID_SECRET_BASE_RED_CAVE2, 0, + MAP_ID_SECRET_BASE_SHRUB1, 9, + MAP_ID_SECRET_BASE_RED_CAVE3, 0, + MAP_ID_SECRET_BASE_BROWN_CAVE1, 3, + MAP_ID_SECRET_BASE_RED_CAVE4, 0, + MAP_ID_SECRET_BASE_BROWN_CAVE2, 13, + MAP_ID_SECRET_BASE_BROWN_CAVE1, 0, + MAP_ID_SECRET_BASE_BLUE_CAVE1, 3, + MAP_ID_SECRET_BASE_BROWN_CAVE2, 0, + MAP_ID_SECRET_BASE_YELLOW_CAVE2, 2, + MAP_ID_SECRET_BASE_BROWN_CAVE3, 0, + MAP_ID_SECRET_BASE_BROWN_CAVE3, 4, + MAP_ID_SECRET_BASE_BROWN_CAVE4, 0, + MAP_ID_SECRET_BASE_BROWN_CAVE1, 2, + MAP_ID_SECRET_BASE_BLUE_CAVE1, 0, + MAP_ID_SECRET_BASE_BROWN_CAVE1, 3, + MAP_ID_SECRET_BASE_BLUE_CAVE2, 0, + MAP_ID_SECRET_BASE_BROWN_CAVE1, 2, + MAP_ID_SECRET_BASE_BLUE_CAVE3, 0, + MAP_ID_SECRET_BASE_YELLOW_CAVE1, 15, + MAP_ID_SECRET_BASE_BLUE_CAVE4, 0, + MAP_ID_SECRET_BASE_YELLOW_CAVE1, 14, + MAP_ID_SECRET_BASE_YELLOW_CAVE1, 0, + MAP_ID_SECRET_BASE_YELLOW_CAVE2, 3, + MAP_ID_SECRET_BASE_YELLOW_CAVE2, 0, + MAP_ID_SECRET_BASE_BLUE_CAVE2, 7, + MAP_ID_SECRET_BASE_YELLOW_CAVE3, 0, + MAP_ID_SECRET_BASE_YELLOW_CAVE1, 6, + MAP_ID_SECRET_BASE_YELLOW_CAVE4, 0, + MAP_ID_SECRET_BASE_SHRUB1, 9, + MAP_ID_SECRET_BASE_TREE1, 0, + MAP_ID_SECRET_BASE_BLUE_CAVE1, 3, + MAP_ID_SECRET_BASE_TREE2, 0, + MAP_ID_SECRET_BASE_SHRUB1, 6, + MAP_ID_SECRET_BASE_TREE3, 0, + MAP_ID_SECRET_BASE_YELLOW_CAVE3, 3, + MAP_ID_SECRET_BASE_TREE4, 0, + MAP_ID_SECRET_BASE_TREE1, 10, + MAP_ID_SECRET_BASE_SHRUB1, 0, + MAP_ID_SECRET_BASE_YELLOW_CAVE1, 3, + MAP_ID_SECRET_BASE_SHRUB2, 0, + MAP_ID_SECRET_BASE_BROWN_CAVE1, 2, + MAP_ID_SECRET_BASE_SHRUB3, 0, + MAP_ID_SECRET_BASE_BROWN_CAVE2, 8, + MAP_ID_SECRET_BASE_SHRUB4, 0, + MAP_ID_SECRET_BASE_YELLOW_CAVE2, 6 +}; + +const struct MenuAction gUnknown_083D13D4[] = { + {SecretBaseText_DelRegist, sub_80BCA84}, + {gUnknownText_Exit, sub_80BCBF8} +}; + +void (*const gUnknown_083D13E4[])(u8) = { + sub_80BCB90, + sub_80BCBC0 +}; + +const u8 gUnknown_083D13EC[] = { + 0x23,0x24,0xF,0x1F,0x21,0x2F,0xE,0x14,0x20,0x22,0x0,0x0 +}; + extern void *gUnknown_0300485C; -extern const u8 gUnknown_083D13EC[12]; extern u8 gUnknown_081A2E14[]; diff --git a/src/sound_check_menu.c b/src/sound_check_menu.c old mode 100755 new mode 100644 diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c old mode 100755 new mode 100644 -- cgit v1.2.3 From 37ffd07ac741016f8da662f9cf416c82ffd269d7 Mon Sep 17 00:00:00 2001 From: scnorton Date: Tue, 11 Jul 2017 10:51:22 -0400 Subject: Matching sub_80BBCCC --- src/secret_base.c | 134 ++---------------------------------------------------- 1 file changed, 4 insertions(+), 130 deletions(-) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index 2923d770d..a5074c4e0 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -396,7 +396,6 @@ bool8 CurrentMapIsSecretBase(void) return FALSE; } -#ifdef NONMATCHING void sub_80BBCCC(u8 flagIn) { u16 curBaseId; @@ -404,8 +403,8 @@ void sub_80BBCCC(u8 flagIn) if (CurrentMapIsSecretBase()) { curBaseId = VarGet(VAR_0x4054); for (x=0; x<16; x++) { - if ((u8)(gSaveBlock1.secretBases[curBaseId].decorations[x] - 1) <= 0x77 && gDecorations[gSaveBlock1.secretBases[curBaseId].decorations[x]].decor_field_11 != 4) { - sub_80FF394((gSaveBlock1.secretBases[0].decorationPos[x] >> 4) + 7, (gSaveBlock1.secretBases[0].decorationPos[x] & 0xF) + 7, gSaveBlock1.secretBases[curBaseId].decorations[x]); + if (gSaveBlock1.secretBases[curBaseId].decorations[x] > 0 && gSaveBlock1.secretBases[curBaseId].decorations[x] <= 0x78 && gDecorations[gSaveBlock1.secretBases[curBaseId].decorations[x]].permission != DECORPERM_SOLID_MAT) { + sub_80FF394((gSaveBlock1.secretBases[curBaseId].decorationPos[x] >> 4) + 7, (gSaveBlock1.secretBases[curBaseId].decorationPos[x] & 0xF) + 7, gSaveBlock1.secretBases[curBaseId].decorations[x]); } } if (curBaseId != 0) { @@ -418,6 +417,7 @@ void sub_80BBCCC(u8 flagIn) } } +#ifdef NONMATCHING void sub_80BBDD0(void) { u8 *roomdecor; @@ -439,7 +439,7 @@ void sub_80BBDD0(void) for (decidx=0; decidxmapObjectCount; objid++) { if (gMapHeader.events->mapObjects[objid].flagId == gSpecialVar_0x8004 + 0xAE) @@ -464,132 +464,6 @@ void sub_80BBDD0(void) } #else -__attribute__((naked)) -void sub_80BBCCC(u8 flagIn) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - sub sp, 0x4\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r8, r0\n\ - bl CurrentMapIsSecretBase\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080BBDBC\n\ - ldr r0, _080BBD70 @ =0x00004054\n\ - bl VarGet\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - movs r1, 0\n\ - mov r0, sp\n\ - strh r1, [r0]\n\ - ldr r6, _080BBD74 @ =gSaveBlock1\n\ - mov r4, sp\n\ - ldr r0, _080BBD78 @ =0x00001a2a\n\ - adds r7, r6, r0\n\ -_080BBCFC:\n\ - lsls r0, r5, 2\n\ - adds r0, r5\n\ - lsls r0, 5\n\ - ldrh r1, [r4]\n\ - adds r2, r0, r1\n\ - ldr r1, _080BBD7C @ =0x00001a1a\n\ - adds r0, r6, r1\n\ - adds r1, r2, r0\n\ - ldrb r0, [r1]\n\ - subs r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x77\n\ - bhi _080BBD3A\n\ - ldr r0, _080BBD80 @ =gDecorations\n\ - ldrb r3, [r1]\n\ - lsls r1, r3, 5\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x11]\n\ - cmp r0, 0x4\n\ - beq _080BBD3A\n\ - adds r0, r2, r7\n\ - ldrb r2, [r0]\n\ - lsrs r0, r2, 4\n\ - adds r0, 0x7\n\ - movs r1, 0xF\n\ - ands r1, r2\n\ - adds r1, 0x7\n\ - adds r2, r3, 0\n\ - bl sub_80FF394\n\ -_080BBD3A:\n\ - ldrh r0, [r4]\n\ - adds r0, 0x1\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - strh r0, [r4]\n\ - cmp r0, 0xF\n\ - bls _080BBCFC\n\ - cmp r5, 0\n\ - beq _080BBD88\n\ - mov r4, sp\n\ - adds r4, 0x2\n\ - movs r2, 0x88\n\ - lsls r2, 2\n\ - mov r0, sp\n\ - adds r1, r4, 0\n\ - bl sub_80BB764\n\ - mov r0, sp\n\ - ldrh r0, [r0]\n\ - adds r0, 0x7\n\ - ldrh r1, [r4]\n\ - adds r1, 0x7\n\ - ldr r2, _080BBD84 @ =0x00000e21\n\ - bl MapGridSetMetatileIdAt\n\ - b _080BBDBC\n\ - .align 2, 0\n\ -_080BBD70: .4byte 0x00004054\n\ -_080BBD74: .4byte gSaveBlock1\n\ -_080BBD78: .4byte 0x00001a2a\n\ -_080BBD7C: .4byte 0x00001a1a\n\ -_080BBD80: .4byte gDecorations\n\ -_080BBD84: .4byte 0x00000e21\n\ -_080BBD88:\n\ - mov r0, r8\n\ - cmp r0, 0x1\n\ - bne _080BBDBC\n\ - ldr r0, _080BBDC8 @ =0x00004089\n\ - bl VarGet\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r0, 0x1\n\ - bne _080BBDBC\n\ - mov r4, sp\n\ - adds r4, 0x2\n\ - movs r2, 0x88\n\ - lsls r2, 2\n\ - mov r0, sp\n\ - adds r1, r4, 0\n\ - bl sub_80BB764\n\ - mov r0, sp\n\ - ldrh r0, [r0]\n\ - adds r0, 0x7\n\ - ldrh r1, [r4]\n\ - adds r1, 0x7\n\ - ldr r2, _080BBDCC @ =0x00000e0a\n\ - bl MapGridSetMetatileIdAt\n\ -_080BBDBC:\n\ - add sp, 0x4\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080BBDC8: .4byte 0x00004089\n\ -_080BBDCC: .4byte 0x00000e0a\n\ -.syntax divided\n"); -} - __attribute__((naked)) void sub_80BBDD0(void) { -- cgit v1.2.3 From e9e2f4f5cf1ca2801d31453eeb6b7ea646f6d48d Mon Sep 17 00:00:00 2001 From: scnorton Date: Tue, 11 Jul 2017 11:18:31 -0400 Subject: Futile attempt to get sub_80BBDD0 matching --- src/secret_base.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index a5074c4e0..c35797168 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -418,6 +418,8 @@ void sub_80BBCCC(u8 flagIn) } #ifdef NONMATCHING +// The only nonmatching property of this function is that the implicit variables &gSaveBlock1 and &roomdecor[decidx] +// are stored in the wrong registers. void sub_80BBDD0(void) { u8 *roomdecor; @@ -437,20 +439,19 @@ void sub_80BBDD0(void) ndecor = 16; } for (decidx=0; decidxmapObjectCount; objid++) { - if (gMapHeader.events->mapObjects[objid].flagId == gSpecialVar_0x8004 + 0xAE) - break; - } - if (objid != gMapHeader.events->mapObjectCount) { + if (roomdecor[decidx] != 0 && gDecorations[roomdecor[decidx]].permission == DECORPERM_SOLID_MAT) + { + for (objid=0; objidmapObjectCount; objid++) { + if (gMapHeader.events->mapObjects[objid].flagId == gSpecialVar_0x8004 + 0xAE) + break; + } + if (objid == gMapHeader.events->mapObjectCount) + continue; gSpecialVar_0x8006 = roomdecorpos[decidx] >> 4; gSpecialVar_0x8007 = roomdecorpos[decidx] & 0xF; metatile = MapGridGetMetatileBehaviorAt(gSpecialVar_0x8006 + 7, gSpecialVar_0x8007 + 7); - if (sub_80572D8(metatile) == 1 || sub_80572EC(metatile) == 1) { - gScriptResult = gMapHeader.events->mapObjects[objid].graphicsId + 0x3f20; + if (sub_80572D8(metatile) == TRUE || sub_80572EC(metatile) == TRUE) { + gScriptResult = gMapHeader.events->mapObjects[objid].graphicsId + VAR_0x3F20; VarSet(gScriptResult, gDecorations[roomdecor[decidx]].tiles[0]); gScriptResult = gMapHeader.events->mapObjects[objid].localId; FlagReset(gSpecialVar_0x8004 + 0xAE); -- cgit v1.2.3 From 20f8a5dd5971fedf01ea49f4f26a8fb74a79acf9 Mon Sep 17 00:00:00 2001 From: scnorton Date: Tue, 11 Jul 2017 12:17:05 -0400 Subject: Futile attempt to get sub_80BC300 --- src/secret_base.c | 44 +++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index c35797168..17377a287 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -1,6 +1,9 @@ #include "global.h" #include "secret_base.h" #include "decoration.h" +#include "species.h" +#include "items.h" +#include "moves.h" #include "event_data.h" #include "field_camera.h" #include "field_fadetransition.h" @@ -821,32 +824,31 @@ u8 sub_80BC298(struct Pokemon *mon) { // 80bc298 } #ifdef NONMATCHING +// So much is wrong with this function. +// The compiler likes to store pointers in temp variables. That's not what it's supposed to do. void sub_80BC300(void) { + u16 partyidx; u16 moveidx; u16 sbpartyidx = 0; - int resetVal = 0; - u16 partyidx = 0; - while (partyidx < 6) { - partyidx ++; - for (moveidx=0; moveidx<4; moveidx++) { - gSaveBlock1.secretBases[0].partyMoves[(partyidx - 1) * 6 + moveidx] = resetVal; - } - gSaveBlock1.secretBases[0].partySpecies[partyidx - 1] = resetVal; - gSaveBlock1.secretBases[0].partyHeldItems[partyidx - 1] = resetVal; - gSaveBlock1.secretBases[0].partyLevels[partyidx - 1] = resetVal; - gSaveBlock1.secretBases[0].partyPersonality[partyidx - 1] = resetVal; - gSaveBlock1.secretBases[0].partyEVs[partyidx - 1] = resetVal; - if (GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_SPECIES) != 0 && !GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_IS_EGG)) { + for (partyidx=0; partyidx Date: Tue, 11 Jul 2017 12:29:45 -0400 Subject: sub_80BC474 --- src/secret_base.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index 17377a287..0488a3bf3 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -1023,3 +1023,27 @@ void SecretBasePC_PackUp(void) IncrementGameStat(20); sub_80BC440(); } + +void sub_80BC474(void) +{ + u16 i, j; + s16 metatileId; + struct MapEvents *mapEvents = gMapHeader.events; + for (i=0; ibgEventCount; i++) + { + if (mapEvents->bgEvents[i].kind == 8 && gSaveBlock1.secretBases[0].sbr_field_0 == mapEvents->bgEvents[i].bgUnion.secretBaseId) + { + metatileId = MapGridGetMetatileIdAt(mapEvents->bgEvents[i].x + 7, mapEvents->bgEvents[i].y + 7); + for (j=0; j<7; j++) + { + if (gUnknown_083D1358[j].unk_083D1358_1 == metatileId) + { + MapGridSetMetatileIdAt(mapEvents->bgEvents[i].x + 7, mapEvents->bgEvents[i].y + 7, gUnknown_083D1358[j].unk_083D1358_0 | 0xc00); + break; + } + } + DrawWholeMapView(); + break; + } + } +} -- cgit v1.2.3 From 89f34eedccd7e8c346cd4e20277e79c94b5b5064 Mon Sep 17 00:00:00 2001 From: scnorton Date: Tue, 11 Jul 2017 14:01:53 -0400 Subject: sub_80BC50C --- src/secret_base.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index 0488a3bf3..544289885 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -1047,3 +1047,13 @@ void sub_80BC474(void) } } } + +void sub_80BC50C(void) +{ + u16 backup_sbr_field_e; + sub_80BC474(); + IncrementGameStat(GAME_STAT_MOVED_SECRET_BASE); + backup_sbr_field_e = gSaveBlock1.secretBases[0].sbr_field_e; + ResetSecretBase(0); + gSaveBlock1.secretBases[0].sbr_field_e = backup_sbr_field_e; +} -- cgit v1.2.3 From 1a8ac29f66ce7be99950d016c41e0b066e271aa8 Mon Sep 17 00:00:00 2001 From: scnorton Date: Tue, 11 Jul 2017 14:03:57 -0400 Subject: sub_80BC538 --- src/secret_base.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index 544289885..88547881d 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -1057,3 +1057,15 @@ void sub_80BC50C(void) ResetSecretBase(0); gSaveBlock1.secretBases[0].sbr_field_e = backup_sbr_field_e; } + +u8 sub_80BC538(void) +{ + s16 i; + u8 count = 0; + for (i=1; i<20; i++) + { + if (sub_80BC268(i) == TRUE) + count++; + } + return count; +} -- cgit v1.2.3 From 34343d1b9710ca14a5a271e758137ea6ec27d3db Mon Sep 17 00:00:00 2001 From: scnorton Date: Tue, 11 Jul 2017 14:06:20 -0400 Subject: sub_80BC56C --- src/secret_base.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index 88547881d..77491fb0e 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -1069,3 +1069,13 @@ u8 sub_80BC538(void) } return count; } + +void sub_80BC56C(void) +{ + if (sub_80BC268(sub_80BC14C(gUnknown_020387DC)) == TRUE) + gScriptResult = 1; + else if (sub_80BC538() > 9) + gScriptResult = 2; + else + gScriptResult = 0; +} -- cgit v1.2.3 From b2e57bc5b2c173a848e02bbe9687c0eaef72290f Mon Sep 17 00:00:00 2001 From: scnorton Date: Tue, 11 Jul 2017 14:09:33 -0400 Subject: sub_80BC5BC --- src/secret_base.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index 77491fb0e..a099b14e7 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -1079,3 +1079,9 @@ void sub_80BC56C(void) else gScriptResult = 0; } + +void sub_80BC5BC(void) +{ + gSaveBlock1.secretBases[sub_80BC14C(gUnknown_020387DC)].sbr_field_1_6 ^= 1; + FlagSet(0x10c); +} -- cgit v1.2.3 From 071a1ff58d550078427310f695113d8d44938f31 Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 20 Jul 2017 14:34:18 -0400 Subject: Task_SecretBasePC_Registry --- src/secret_base.c | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index a099b14e7..bf98b0b4c 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -30,6 +30,11 @@ u8 sub_80BCBF8(); void sub_80BCB90(u8); void sub_80BCBC0(u8); +void Task_SecretBasePC_Registry(u8); +void sub_80BC7D8(u8); +void sub_80BC824(u8); +void sub_80BCC54(u8); + const struct { u16 unk_083D1358_0; @@ -1085,3 +1090,100 @@ void sub_80BC5BC(void) gSaveBlock1.secretBases[sub_80BC14C(gUnknown_020387DC)].sbr_field_1_6 ^= 1; FlagSet(0x10c); } + +void SecretBasePC_Decoration(void) +{ + CreateTask(Task_SecretBasePC_Decoration, 0); +} + +void SecretBasePC_Registry(void) +{ + CreateTask(Task_SecretBasePC_Registry, 0); +} + +#ifdef NONMATCHING +void Task_SecretBasePC_Registry(u8 taskId) +{ + s16 *data; + ScriptContext2_Enable(); + sub_80F944C(); + LoadScrollIndicatorPalette(); + data = gTasks[taskId].data; + if ((data[0] = sub_80BC538()) != 0) + { + data[3] = max(data[0], 7); + data[1] = 0; + data[2] = 0; + MenuZeroFillWindowRect(0, 0, 29, 19); + sub_80BC7D8(taskId); + gTasks[taskId].func = sub_80BC824; + } + else + { + DisplayItemMessageOnField(taskId, gSecretBaseText_NoRegistry, sub_80BCC54, 0); + } +} +#else +__attribute__((naked)) +void Task_SecretBasePC_Registry(u8 taskId) +{ + asm_unified("\tpush {r4,r5,lr}\n" + "\tlsls r0, 24\n" + "\tlsrs r5, r0, 24\n" + "\tbl ScriptContext2_Enable\n" + "\tbl sub_80F944C\n" + "\tbl LoadScrollIndicatorPalette\n" + "\tlsls r0, r5, 2\n" + "\tadds r0, r5\n" + "\tlsls r0, 3\n" + "\tldr r1, _080BC688 @ =gTasks + 0x8\n" + "\tadds r4, r0, r1\n" + "\tbl sub_80BC538\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tstrh r0, [r4]\n" + "\tadds r1, r0, 0\n" + "\tcmp r1, 0\n" + "\tbeq _080BC694\n" + "\tcmp r1, 0x7\n" + "\tble _080BC65E\n" + "\tmovs r0, 0x7\n" + "_080BC65E:\n" + "\tstrh r0, [r4, 0x6]\n" + "\tmovs r0, 0\n" + "\tstrh r0, [r4, 0x2]\n" + "\tstrh r0, [r4, 0x4]\n" + "\tmovs r0, 0\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0x1D\n" + "\tmovs r3, 0x13\n" + "\tbl MenuZeroFillWindowRect\n" + "\tadds r0, r5, 0\n" + "\tbl sub_80BC7D8\n" + "\tldr r1, _080BC68C @ =gTasks\n" + "\tlsls r0, r5, 2\n" + "\tadds r0, r5\n" + "\tlsls r0, 3\n" + "\tadds r0, r1\n" + "\tldr r1, _080BC690 @ =sub_80BC824\n" + "\tstr r1, [r0]\n" + "\tb _080BC6A0\n" + "\t.align 2, 0\n" + "_080BC688: .4byte gTasks + 0x8\n" + "_080BC68C: .4byte gTasks\n" + "_080BC690: .4byte sub_80BC824\n" + "_080BC694:\n" + "\tldr r1, _080BC6A8 @ =gSecretBaseText_NoRegistry\n" + "\tldr r2, _080BC6AC @ =sub_80BCC54\n" + "\tadds r0, r5, 0\n" + "\tmovs r3, 0\n" + "\tbl DisplayItemMessageOnField\n" + "_080BC6A0:\n" + "\tpop {r4,r5}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_080BC6A8: .4byte gSecretBaseText_NoRegistry\n" + "_080BC6AC: .4byte sub_80BCC54"); +} +#endif -- cgit v1.2.3 From 3339df8b2fb8644bc57820a446e094d75afd3879 Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 20 Jul 2017 15:21:32 -0400 Subject: sub_80BC6B0 --- src/secret_base.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index bf98b0b4c..a4776719e 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -1187,3 +1187,46 @@ void Task_SecretBasePC_Registry(u8 taskId) "_080BC6AC: .4byte sub_80BCC54"); } #endif + +void sub_80BC6B0(u8 taskId) +{ + u8 i; + s16 *data = gTasks[taskId].data; + u8 m = 0; + u8 n = 0; + for (i=1; i<20; i++) + { + if (m == data[2]) + { + m = i; + break; + } + if (sub_80BC268(i) == TRUE) + m ++; + } + for (i=m; i<20; i++) + { + if (sub_80BC268(i) == TRUE) + { + sub_80BC190(gStringVar1, i); + MenuFillWindowRectWithBlankTile(18, 2 * n + 2, 28, 2 * n + 3); + MenuPrint(gStringVar1, 18, 2 * n + 2); + if (++n == 8) + break; + } + } + if (n < 8) + { + MenuFillWindowRectWithBlankTile(18, 2 * n + 2, 28, 2 * n + 3); + MenuPrint(gUnknownText_Exit, 18, 2 * n + 2); + DestroyVerticalScrollIndicator(1); + if (n != 7) + MenuFillWindowRectWithBlankTile(18, ((n << 25) + (1 << 26)) >> 24, 28, 18); // needed to match + } + else + CreateVerticalScrollIndicators(1, 0xbc, 0x98); + if (data[2] == 0) + DestroyVerticalScrollIndicator(0); + else + CreateVerticalScrollIndicators(0, 0xbc, 0x08); +} -- cgit v1.2.3 From 01865ff248543d58e78a63237e15e849fd8e590a Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 20 Jul 2017 15:35:26 -0400 Subject: sub_80BC7D8 --- src/secret_base.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index a4776719e..1f4e257db 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -1230,3 +1230,11 @@ void sub_80BC6B0(u8 taskId) else CreateVerticalScrollIndicators(0, 0xbc, 0x08); } + +void sub_80BC7D8(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + MenuDrawTextWindow(17, 0, 29, 19); + InitMenu(0, 18, 2, data[3] + 1, data[1], 11); + sub_80BC6B0(taskId); +} -- cgit v1.2.3 From be5840dac3fb62ffc60841b3170163834f99df6e Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 20 Jul 2017 16:43:14 -0400 Subject: sub_80BC824 --- src/secret_base.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index 1f4e257db..a4ec4aeae 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -11,6 +11,8 @@ #include "field_weather.h" #include "fieldmap.h" #include "main.h" +#include "sound.h" +#include "songs.h" #include "map_constants.h" #include "map_name_popup.h" #include "menu.h" @@ -34,6 +36,8 @@ void Task_SecretBasePC_Registry(u8); void sub_80BC7D8(u8); void sub_80BC824(u8); void sub_80BCC54(u8); +u8 sub_80BC948(u8); +void sub_80BC980(u8); const struct { @@ -1238,3 +1242,62 @@ void sub_80BC7D8(u8 taskId) InitMenu(0, 18, 2, data[3] + 1, data[1], 11); sub_80BC6B0(taskId); } + +void sub_80BC824(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + if (data[1] != 0) + { + PlaySE(SE_SELECT); + data[1] = MoveMenuCursor(-1); + } + else if (data[2] != 0) + { + PlaySE(SE_SELECT); + data[2]--; + sub_80BC6B0(taskId); + } + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + if (data[1] == data[3]) + { + if (data[2] + data[1] != data[0]) + { + PlaySE(SE_SELECT); + data[2]++; + sub_80BC6B0(taskId); + } + } + else + { + PlaySE(SE_SELECT); + data[1] = MoveMenuCursor(+1); + } + } + else if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + if (data[1] + data[2] == data[0]) + { + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(0, 0, 29, 19); + sub_80BCC54(taskId); + } + else + { + HandleDestroyMenuCursors(); + data[4] = sub_80BC948(data[1] + data[2]); + sub_80BC980(taskId); + } + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(0, 0, 29, 19); + sub_80BCC54(taskId); + } +} -- cgit v1.2.3 From 8d95b42e7c840d11ec3bd86bfa128d115ad1c226 Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 20 Jul 2017 16:47:32 -0400 Subject: sub_80BC948 --- src/secret_base.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index a4ec4aeae..6530ea7c6 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -1301,3 +1301,19 @@ void sub_80BC824(u8 taskId) sub_80BCC54(taskId); } } + +u8 sub_80BC948(u8 a0) +{ + u8 n = 0; + u8 i; + for (i=1; i<20; i++) + { + if (sub_80BC268(i) == TRUE) + { + if (a0 == n) + return i; + n++; + } + } + return 0; +} -- cgit v1.2.3 From 82d3ffe0d2bf1a1a4d9f97fccbcd381f85e753aa Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 20 Jul 2017 17:07:03 -0400 Subject: sub_80BC980 --- src/secret_base.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index 6530ea7c6..ecc230425 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -16,6 +16,7 @@ #include "map_constants.h" #include "map_name_popup.h" #include "menu.h" +#include "menu_helpers.h" #include "metatile_behavior.h" #include "palette.h" #include "pokemon.h" @@ -38,6 +39,7 @@ void sub_80BC824(u8); void sub_80BCC54(u8); u8 sub_80BC948(u8); void sub_80BC980(u8); +void sub_80BC9E4(u8); const struct { @@ -1317,3 +1319,13 @@ u8 sub_80BC948(u8 a0) } return 0; } + +void sub_80BC980(u8 taskId) +{ + PauseVerticalScrollIndicator(0); + PauseVerticalScrollIndicator(1); + MenuDrawTextWindow(1, 0, 12, 5); + PrintMenuItems(2, 1, 2, gUnknown_083D13D4); + InitMenu(0, 2, 1, 2, 0, 10); + gTasks[taskId].func = sub_80BC9E4; +} -- cgit v1.2.3 From cc2bc365519a7a690e8d030fff961a18032c9d56 Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 20 Jul 2017 17:12:58 -0400 Subject: sub_80BC9E4 --- src/secret_base.c | 38 ++++++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index ecc230425..bcf7371f4 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -28,8 +28,8 @@ #include "text.h" #include "vars.h" -u8 sub_80BCA84(); -u8 sub_80BCBF8(); +void sub_80BCA84(u8); +void sub_80BCBF8(u8); void sub_80BCB90(u8); void sub_80BCBC0(u8); @@ -108,7 +108,7 @@ const u8 gUnknown_083D1374[] = { MAP_ID_SECRET_BASE_YELLOW_CAVE2, 6 }; -const struct MenuAction gUnknown_083D13D4[] = { +const struct MenuAction2 gUnknown_083D13D4[] = { {SecretBaseText_DelRegist, sub_80BCA84}, {gUnknownText_Exit, sub_80BCBF8} }; @@ -1325,7 +1325,37 @@ void sub_80BC980(u8 taskId) PauseVerticalScrollIndicator(0); PauseVerticalScrollIndicator(1); MenuDrawTextWindow(1, 0, 12, 5); - PrintMenuItems(2, 1, 2, gUnknown_083D13D4); + PrintMenuItems(2, 1, 2, (const struct MenuAction *)gUnknown_083D13D4); InitMenu(0, 2, 1, 2, 0, 10); gTasks[taskId].func = sub_80BC9E4; } + +void sub_80BC9E4(u8 taskId) +{ + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + if (GetMenuCursorPos() != 0) + { + PlaySE(SE_SELECT); + MoveMenuCursor(-1); + } + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + if (GetMenuCursorPos() != 1) + { + PlaySE(SE_SELECT); + MoveMenuCursor(+1); + } + } + else if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + gUnknown_083D13D4[GetMenuCursorPos()].func(taskId); + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + sub_80BCBF8(taskId); + } +} -- cgit v1.2.3 From a44190a0b09c8fc0a6d5517218942f9aa3bbe188 Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 20 Jul 2017 17:18:03 -0400 Subject: sub_80BCA84 --- src/secret_base.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index bcf7371f4..b5d1ef310 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -40,6 +40,7 @@ void sub_80BCC54(u8); u8 sub_80BC948(u8); void sub_80BC980(u8); void sub_80BC9E4(u8); +void sub_80BCAEC(u8); const struct { @@ -1359,3 +1360,15 @@ void sub_80BC9E4(u8 taskId) sub_80BCBF8(taskId); } } + +void sub_80BCA84(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + DestroyVerticalScrollIndicator(0); + DestroyVerticalScrollIndicator(1); + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(0, 0, 29, 19); + sub_80BC190(gStringVar1, data[4]); + StringExpandPlaceholders(gStringVar4, gOtherText_OkayToDeleteFromRegistry); + DisplayItemMessageOnField(taskId, gStringVar4, sub_80BCAEC, 0); +} -- cgit v1.2.3 From 1761e09ccdfb575c98e728f63a31cbc5db5c5935 Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 20 Jul 2017 17:33:51 -0400 Subject: Through sub_80BCB10 --- src/secret_base.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index b5d1ef310..4904f7667 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -114,7 +114,7 @@ const struct MenuAction2 gUnknown_083D13D4[] = { {gUnknownText_Exit, sub_80BCBF8} }; -void (*const gUnknown_083D13E4[])(u8) = { +const struct YesNoFuncTable gUnknown_083D13E4 = { sub_80BCB90, sub_80BCBC0 }; @@ -1108,6 +1108,7 @@ void SecretBasePC_Registry(void) CreateTask(Task_SecretBasePC_Registry, 0); } +// This function tries to keep gTasks + 8 in a register. It should not. #ifdef NONMATCHING void Task_SecretBasePC_Registry(u8 taskId) { @@ -1372,3 +1373,23 @@ void sub_80BCA84(u8 taskId) StringExpandPlaceholders(gStringVar4, gOtherText_OkayToDeleteFromRegistry); DisplayItemMessageOnField(taskId, gStringVar4, sub_80BCAEC, 0); } + +void sub_80BCAEC(u8 taskId) +{ + DisplayYesNoMenu(20, 8, 1); + DoYesNoFuncWithChoice(taskId, &gUnknown_083D13E4); +} + +void sub_80BCB10(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + MenuZeroFillWindowRect(0, 0, 29, 19); + gSaveBlock1.secretBases[data[4]].sbr_field_1_6 = 0; + data[0]--; + if (data[2] > 0) + data[2]--; + if (data[0] < 8) + data[3]--; + sub_80BC7D8(taskId); + gTasks[taskId].func = sub_80BC824; +} -- cgit v1.2.3 From bab5b59b088452951e3afec325a8cacbb5f8d21f Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 20 Jul 2017 17:40:15 -0400 Subject: through sub_80BCBC0 --- src/secret_base.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index 4904f7667..6304e3acf 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -1393,3 +1393,16 @@ void sub_80BCB10(u8 taskId) sub_80BC7D8(taskId); gTasks[taskId].func = sub_80BC824; } + +void sub_80BCB90(u8 taskId) +{ + MenuZeroFillWindowRect(20, 8, 26, 13); + DisplayItemMessageOnField(taskId, gOtherText_RegisteredDataDeleted, sub_80BCB10, 0); +} + +void sub_80BCBC0(u8 taskId) +{ + MenuZeroFillWindowRect(0, 0, 29, 19); + sub_80BC7D8(taskId); + gTasks[taskId].func = sub_80BC824; +} -- cgit v1.2.3 From f18645e5d7e4fb4d9b060a77625d305a27791f43 Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 20 Jul 2017 17:44:01 -0400 Subject: sub_80BCBF8 --- src/secret_base.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index 6304e3acf..291ddc41d 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -1406,3 +1406,13 @@ void sub_80BCBC0(u8 taskId) sub_80BC7D8(taskId); gTasks[taskId].func = sub_80BC824; } + +void sub_80BCBF8(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + InitMenu(0, 18, 2, data[3] + 1, data[1], 11); + MenuZeroFillWindowRect(1, 0, 12, 5); + StartVerticalScrollIndicators(0); + StartVerticalScrollIndicators(1); + gTasks[taskId].func = sub_80BC824; +} -- cgit v1.2.3 From 5f0a01fc627003b17bc54fd4716a7380792005cf Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 20 Jul 2017 17:48:36 -0400 Subject: sub_80BCC54 --- src/secret_base.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index 291ddc41d..b9c316d95 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -28,6 +28,9 @@ #include "text.h" #include "vars.h" +extern u8 gUnknown_0815F399[]; +extern u8 gUnknown_0815F49A[]; + void sub_80BCA84(u8); void sub_80BCBF8(u8); void sub_80BCB90(u8); @@ -1416,3 +1419,20 @@ void sub_80BCBF8(u8 taskId) StartVerticalScrollIndicators(1); gTasks[taskId].func = sub_80BC824; } + +void sub_80BCC54(u8 taskId) +{ + u16 var54 = VarGet(VAR_0x4054); + BuyMenuFreeMemory(); + DestroyVerticalScrollIndicator(0); + DestroyVerticalScrollIndicator(1); + if (var54 == 0) + { + ScriptContext1_SetupScript(gUnknown_0815F399); + } + else + { + ScriptContext1_SetupScript(gUnknown_0815F49A); + } + DestroyTask(taskId); +} -- cgit v1.2.3 From 65efebf2d8cb0e727e7c6e179f5cdb281ec9482b Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 20 Jul 2017 17:55:32 -0400 Subject: sub_80BCCA4 --- src/secret_base.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index b9c316d95..16ff656c1 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -44,6 +44,7 @@ u8 sub_80BC948(u8); void sub_80BC980(u8); void sub_80BC9E4(u8); void sub_80BCAEC(u8); +u8 sub_80BCCA4(u8); const struct { @@ -1436,3 +1437,8 @@ void sub_80BCC54(u8 taskId) } DestroyTask(taskId); } + +u8 sub_80BCCA4(u8 sbid) +{ + return (gSaveBlock1.secretBases[sbid].trainerId[0] % 5) + gSaveBlock1.secretBases[sbid].gender * 5; +} -- cgit v1.2.3 From 96ebc5d46287e33df7bda74a6fb340281cdaa4c5 Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 20 Jul 2017 18:03:49 -0400 Subject: sub_80BCCE8 --- src/secret_base.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index 16ff656c1..20bf02ded 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -31,6 +31,17 @@ extern u8 gUnknown_0815F399[]; extern u8 gUnknown_0815F49A[]; +extern const u8 UnknownString_81A1BB2[]; +extern const u8 UnknownString_81A1F67[]; +extern const u8 UnknownString_81A2254[]; +extern const u8 UnknownString_81A25C3[]; +extern const u8 UnknownString_81A2925[]; +extern const u8 UnknownString_81A1D74[]; +extern const u8 UnknownString_81A20C9[]; +extern const u8 UnknownString_81A2439[]; +extern const u8 UnknownString_81A2754[]; +extern const u8 UnknownString_81A2B2A[]; + void sub_80BCA84(u8); void sub_80BCBF8(u8); void sub_80BCB90(u8); @@ -1442,3 +1453,18 @@ u8 sub_80BCCA4(u8 sbid) { return (gSaveBlock1.secretBases[sbid].trainerId[0] % 5) + gSaveBlock1.secretBases[sbid].gender * 5; } + +const u8 *sub_80BCCE8(void) +{ + u8 param = sub_80BCCA4(VarGet(VAR_0x4054)); + if (param == 0) return UnknownString_81A1BB2; + if (param == 1) return UnknownString_81A1F67; + if (param == 2) return UnknownString_81A2254; + if (param == 3) return UnknownString_81A25C3; + if (param == 4) return UnknownString_81A2925; + if (param == 5) return UnknownString_81A1D74; + if (param == 6) return UnknownString_81A20C9; + if (param == 7) return UnknownString_81A2439; + if (param == 8) return UnknownString_81A2754; + return UnknownString_81A2B2A; +} -- cgit v1.2.3