diff options
author | scnorton <scnorton@biociphers.org> | 2017-06-20 13:41:30 -0400 |
---|---|---|
committer | scnorton <scnorton@biociphers.org> | 2017-06-20 13:41:30 -0400 |
commit | c8993068c9a9b25b9ea573737646872098829d24 (patch) | |
tree | 2e6087cc4372f064294d7a1a36c8d5a7d80c6d9e | |
parent | 3e5267b6a13794f4f2b2178c9fa719a26e654cfe (diff) |
Some elevator menu related functions
-rwxr-xr-x | asm/field_specials.s | 203 | ||||
-rwxr-xr-x | data/field_specials.s | 19 | ||||
-rw-r--r-- | include/field_specials.h | 18 | ||||
-rw-r--r-- | include/menu_helpers.h | 1 | ||||
-rwxr-xr-x | src/field_specials.c | 83 |
5 files changed, 99 insertions, 225 deletions
diff --git a/asm/field_specials.s b/asm/field_specials.s index 6018b83fd..c09151173 100755 --- a/asm/field_specials.s +++ b/asm/field_specials.s @@ -6,209 +6,6 @@ .text - thumb_func_start ScriptAddElevatorMenuItem -ScriptAddElevatorMenuItem: @ 810E7AC - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 24 - lsrs r7, r1, 24 - lsls r2, 24 - lsrs r2, 24 - mov r12, r2 - lsls r3, 24 - lsrs r3, 24 - mov r8, r3 - ldr r0, _0810E81C @ =gSpecialVar_0x8004 - ldrh r1, [r0] - adds r2, r0, 0 - ldr r3, _0810E820 @ =gUnknown_03000760 - cmp r1, 0 - bne _0810E7E8 - movs r1, 0 - adds r5, r3, 0 - movs r4, 0x10 -_0810E7D8: - lsls r0, r1, 2 - adds r0, r5 - strb r4, [r0] - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x13 - bls _0810E7D8 -_0810E7E8: - ldrh r0, [r2] - lsls r0, 2 - adds r0, r3 - strb r6, [r0] - ldrh r0, [r2] - lsls r0, 2 - adds r0, r3 - strb r7, [r0, 0x1] - ldrh r0, [r2] - lsls r0, 2 - adds r0, r3 - mov r1, r12 - strb r1, [r0, 0x2] - ldrh r0, [r2] - lsls r0, 2 - adds r0, r3 - mov r1, r8 - strb r1, [r0, 0x3] - ldrh r0, [r2] - adds r0, 0x1 - strh r0, [r2] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0810E81C: .4byte gSpecialVar_0x8004 -_0810E820: .4byte gUnknown_03000760 - thumb_func_end ScriptAddElevatorMenuItem - - thumb_func_start ScriptShowElevatorMenu -ScriptShowElevatorMenu: @ 810E824 - push {r4,r5,lr} - movs r4, 0 - ldr r5, _0810E868 @ =gUnknown_0203925A - strb r4, [r5] - ldr r0, _0810E86C @ =gUnknown_0203925B - strb r4, [r0] - movs r0, 0x10 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl ScriptAddElevatorMenuItem - ldr r2, _0810E870 @ =gUnknown_03000760 - ldrb r0, [r2] - cmp r0, 0x10 - beq _0810E85C - adds r1, r5, 0 -_0810E846: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r2 - ldrb r0, [r0] - cmp r0, 0x10 - bne _0810E846 -_0810E85C: - bl sub_810E874 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0810E868: .4byte gUnknown_0203925A -_0810E86C: .4byte gUnknown_0203925B -_0810E870: .4byte gUnknown_03000760 - thumb_func_end ScriptShowElevatorMenu - - thumb_func_start sub_810E874 -sub_810E874: @ 810E874 - push {r4-r6,lr} - sub sp, 0x8 - bl ScriptContext2_Enable - ldr r4, _0810E8B8 @ =gUnknown_0203925A - ldrb r0, [r4] - cmp r0, 0x5 - bls _0810E8C0 - movs r0, 0 - movs r1, 0 - movs r2, 0x8 - movs r3, 0xB - bl MenuDrawTextWindow - movs r4, 0 - str r4, [sp] - movs r0, 0x7 - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0x1 - movs r2, 0x1 - movs r3, 0x5 - bl InitMenu - ldr r0, _0810E8BC @ =gUnknown_0203925C - strb r4, [r0] - bl sub_80F944C - bl LoadScrollIndicatorPalette - bl sub_810ECD4 - b _0810E8E8 - .align 2, 0 -_0810E8B8: .4byte gUnknown_0203925A -_0810E8BC: .4byte gUnknown_0203925C -_0810E8C0: - ldrb r3, [r4] - lsls r3, 1 - adds r3, 0x1 - lsls r3, 24 - lsrs r3, 24 - movs r0, 0 - movs r1, 0 - movs r2, 0x8 - bl MenuDrawTextWindow - ldrb r3, [r4] - movs r0, 0 - str r0, [sp] - movs r0, 0x7 - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0x1 - movs r2, 0x1 - bl InitMenu -_0810E8E8: - movs r4, 0 - ldr r1, _0810E938 @ =gUnknown_03000760 - ldrb r0, [r1] - cmp r0, 0x10 - beq _0810E924 - ldr r6, _0810E93C @ =gUnknown_083F8380 - adds r5, r1, 0 -_0810E8F6: - lsls r0, r4, 2 - adds r0, r5 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r6 - ldr r0, [r0] - lsls r2, r4, 1 - adds r2, 0x1 - lsls r2, 24 - lsrs r2, 24 - movs r1, 0x1 - bl MenuPrint - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x4 - bhi _0810E924 - lsls r0, r4, 2 - adds r0, r5 - ldrb r0, [r0] - cmp r0, 0x10 - bne _0810E8F6 -_0810E924: - bl sub_810E944 - ldr r0, _0810E940 @ =sub_810E984 - movs r1, 0x8 - bl CreateTask - add sp, 0x8 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0810E938: .4byte gUnknown_03000760 -_0810E93C: .4byte gUnknown_083F8380 -_0810E940: .4byte sub_810E984 - thumb_func_end sub_810E874 - thumb_func_start sub_810E944 sub_810E944: @ 810E944 push {lr} diff --git a/data/field_specials.s b/data/field_specials.s index 36c817d62..9589e49b7 100755 --- a/data/field_specials.s +++ b/data/field_specials.s @@ -4,25 +4,6 @@ .section .rodata .align 2 -gUnknown_083F8380:: @ 83F8380 - .4byte OtherText_1F - .4byte OtherText_2F - .4byte OtherText_3F - .4byte OtherText_4F - .4byte OtherText_5F - .4byte OtherText_6F - .4byte OtherText_7F - .4byte OtherText_8F - .4byte OtherText_9F - .4byte OtherText_10F - .4byte OtherText_11F - .4byte OtherText_B1F - .4byte OtherText_B2F - .4byte OtherText_B3F - .4byte OtherText_B4F - .4byte OtherText_Rooftop - - .align 2 gUnknown_083F83C0:: @ 83F83C0 .4byte OtherText_BlueFlute .4byte OtherText_YellowFlute diff --git a/include/field_specials.h b/include/field_specials.h index 0521c094f..ee7b80e1a 100644 --- a/include/field_specials.h +++ b/include/field_specials.h @@ -1,17 +1,29 @@ #ifndef GUARD_FIELD_SPECIALS_H #define GUARD_FIELD_SPECIALS_H +struct ElevatorMenu { + u8 var0; + u8 var1; + u8 var2; + u8 var3; +}; +extern struct ElevatorMenu gUnknown_03000760[20]; extern struct WarpData gUnknown_020297F0; +extern u8 gUnknown_02024D26; + extern u16 gScriptResult; extern u8 gUnknown_02039250; extern u8 gUnknown_02039251; extern u32 gUnknown_02039254; -extern u16 gSpecialVar_0x8004; -extern u16 gSpecialVar_0x8005; extern u8 gUnknown_02039258; extern u8 gUnknown_02039259; -extern u8 gUnknown_02024D26; +extern u8 gUnknown_0203925A; +extern u8 gUnknown_0203925B; +extern u8 gUnknown_0203925C; + +extern u16 gSpecialVar_0x8004; +extern u16 gSpecialVar_0x8005; void ResetCyclingRoadChallengeData(void); bool32 CountSSTidalStep(u16); diff --git a/include/menu_helpers.h b/include/menu_helpers.h index 0aa9f79f7..0e39a3732 100644 --- a/include/menu_helpers.h +++ b/include/menu_helpers.h @@ -23,5 +23,6 @@ void DestroyVerticalScrollIndicator(u8); void BuyMenuFreeMemory(void); void sub_80F98DC(int); void sub_80F996C(u8); +void LoadScrollIndicatorPalette(void); #endif // GUARD_MENU_HELPERS_H diff --git a/src/field_specials.c b/src/field_specials.c index a6f1e9a8b..83aede229 100755 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -22,6 +22,8 @@ #include "link.h" #include "songs.h" #include "sound.h" +#include "menu.h" +#include "menu_helpers.h" #if ENGLISH #define CHAR_DECIMAL_SEPARATOR CHAR_PERIOD @@ -929,6 +931,30 @@ void EndLotteryCornerComputerEffect(void) DrawWholeMapView(); } +static void sub_810E874(void); +void sub_810E944(void); +void sub_810E984(u8); +void sub_810ECD4(void); + +const u8 *const gUnknown_083F8380[] = { + OtherText_1F, + OtherText_2F, + OtherText_3F, + OtherText_4F, + OtherText_5F, + OtherText_6F, + OtherText_7F, + OtherText_8F, + OtherText_9F, + OtherText_10F, + OtherText_11F, + OtherText_B1F, + OtherText_B2F, + OtherText_B3F, + OtherText_B4F, + OtherText_Rooftop +}; + void SetDepartmentStoreFloorVar(void) { u8 deptStoreFloor; @@ -958,3 +984,60 @@ void SetDepartmentStoreFloorVar(void) } VarSet(VAR_DEPT_STORE_FLOOR, deptStoreFloor); } + +void ScriptAddElevatorMenuItem(u8 a0, u8 a1, u8 a2, u8 a3) +{ + u8 i; + if (gSpecialVar_0x8004 == 0) + { + for (i=0; i<20; i++) + { + gUnknown_03000760[i].var0 = 16; + } + } + gUnknown_03000760[gSpecialVar_0x8004].var0 = a0; + gUnknown_03000760[gSpecialVar_0x8004].var1 = a1; + gUnknown_03000760[gSpecialVar_0x8004].var2 = a2; + gUnknown_03000760[gSpecialVar_0x8004].var3 = a3; + gSpecialVar_0x8004++; +} + +void ScriptShowElevatorMenu(void) +{ + u8 i = 0; + gUnknown_0203925A = 0; + gUnknown_0203925B = 0; + ScriptAddElevatorMenuItem(16, 0, 0, 0); + while (gUnknown_03000760[i].var0 != 16) + { + gUnknown_0203925A++; + i++; + } + sub_810E874(); +} + +static void sub_810E874(void) +{ + u8 i; + ScriptContext2_Enable(); + if (gUnknown_0203925A > 5) + { + MenuDrawTextWindow(0, 0, 8, 11); + InitMenu(0, 1, 1, 5, 0, 7); + gUnknown_0203925C = 0; + sub_80F944C(); + LoadScrollIndicatorPalette(); + sub_810ECD4(); + } + else + { + MenuDrawTextWindow(0, 0, 8, 2 * gUnknown_0203925A + 1); + InitMenu(0, 1, 1, gUnknown_0203925A, 0, 7); + } + for (i = 0; i < 5 && gUnknown_03000760[i].var0 != 16; i ++) + { + MenuPrint(gUnknown_083F8380[gUnknown_03000760[i].var0], 1, 2 * i + 1); + } + sub_810E944(); + CreateTask(sub_810E984, 8); +} |