summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorscnorton <scnorton@biociphers.org>2017-06-20 13:41:30 -0400
committerscnorton <scnorton@biociphers.org>2017-06-20 13:41:30 -0400
commitc8993068c9a9b25b9ea573737646872098829d24 (patch)
tree2e6087cc4372f064294d7a1a36c8d5a7d80c6d9e
parent3e5267b6a13794f4f2b2178c9fa719a26e654cfe (diff)
Some elevator menu related functions
-rwxr-xr-xasm/field_specials.s203
-rwxr-xr-xdata/field_specials.s19
-rw-r--r--include/field_specials.h18
-rw-r--r--include/menu_helpers.h1
-rwxr-xr-xsrc/field_specials.c83
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);
+}