summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorscnorton <scnorton@biociphers.org>2019-01-06 14:52:00 -0500
committerscnorton <scnorton@biociphers.org>2019-01-06 14:52:00 -0500
commit607d6e13d4378ea6530f03d2c290ddd30506aa14 (patch)
treeb7911b74a03e6967d64910700fcd5d7ae4936557
parentbc977437599e7dd024ed3b4981379807066a0867 (diff)
ScrCmd_waitbuttonpress
-rw-r--r--asm/scrcmd.s342
-rw-r--r--include/new_menu_helpers.h3
-rw-r--r--include/quest_log.h1
-rw-r--r--include/script.h5
-rw-r--r--src/scrcmd.c155
5 files changed, 164 insertions, 342 deletions
diff --git a/asm/scrcmd.s b/asm/scrcmd.s
index cec72ef73..67c37dc76 100644
--- a/asm/scrcmd.s
+++ b/asm/scrcmd.s
@@ -5,348 +5,6 @@
.text
- thumb_func_start ScrCmd_message
-ScrCmd_message: @ 806B80C
- push {r4,lr}
- adds r4, r0, 0
- bl ScriptReadWord
- cmp r0, 0
- bne _0806B81A
- ldr r0, [r4, 0x64]
-_0806B81A:
- bl ShowFieldMessage
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end ScrCmd_message
-
- thumb_func_start ScrCmd_cmdC8
-ScrCmd_cmdC8: @ 806B828
- push {r4,lr}
- adds r4, r0, 0
- bl ScriptReadWord
- cmp r0, 0
- bne _0806B836
- ldr r0, [r4, 0x64]
-_0806B836:
- bl sub_80F7974
- bl GetStartMenuWindowId
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1
- bl CopyWindowToVram
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end ScrCmd_cmdC8
-
- thumb_func_start ScrCmd_cmdC9
-ScrCmd_cmdC9: @ 806B850
- push {lr}
- bl sub_80F7998
- movs r0, 0
- pop {r1}
- bx r1
- thumb_func_end ScrCmd_cmdC9
-
- thumb_func_start ScrCmd_messageautoscroll
-ScrCmd_messageautoscroll: @ 806B85C
- push {r4,lr}
- adds r4, r0, 0
- bl ScriptReadWord
- cmp r0, 0
- bne _0806B86A
- ldr r0, [r4, 0x64]
-_0806B86A:
- bl ShowFieldAutoScrollMessage
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end ScrCmd_messageautoscroll
-
- thumb_func_start ScrCmd_waitmessage
-ScrCmd_waitmessage: @ 806B878
- push {lr}
- ldr r1, _0806B888 @ =IsFieldMessageBoxHidden
- bl SetupNativeScript
- movs r0, 0x1
- pop {r1}
- bx r1
- .align 2, 0
-_0806B888: .4byte IsFieldMessageBoxHidden
- thumb_func_end ScrCmd_waitmessage
-
- thumb_func_start ScrCmd_closemessage
-ScrCmd_closemessage: @ 806B88C
- push {lr}
- bl HideFieldMessageBox
- movs r0, 0
- pop {r1}
- bx r1
- thumb_func_end ScrCmd_closemessage
-
- thumb_func_start sub_806B898
-sub_806B898: @ 806B898
- push {r4,lr}
- ldr r0, _0806B8F0 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0806B922
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _0806B922
- ldr r4, _0806B8F4 @ =gUnknown_3005070
- ldr r0, [r4]
- bl sub_806B93C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0806B906
- ldr r0, [r4]
- bl sub_806B96C
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl sub_8069998
- cmp r4, 0
- beq _0806B906
- ldr r0, _0806B8F8 @ =gUnknown_203ADFA
- ldrb r0, [r0]
- cmp r0, 0x2
- beq _0806B906
- bl sub_80699F8
- adds r0, r4, 0
- subs r0, 0x9
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bls _0806B8FC
- bl sub_8069964
- b _0806B922
- .align 2, 0
-_0806B8F0: .4byte gMain
-_0806B8F4: .4byte gUnknown_3005070
-_0806B8F8: .4byte gUnknown_203ADFA
-_0806B8FC:
- bl sub_80699A4
- bl sub_8069970
- b _0806B922
-_0806B906:
- bl sub_8112CAC
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0806B91A
- ldr r0, _0806B928 @ =gUnknown_203ADFA
- ldrb r0, [r0]
- cmp r0, 0x2
- bne _0806B934
-_0806B91A:
- ldr r1, _0806B92C @ =gUnknown_20370AC
- ldrb r0, [r1]
- cmp r0, 0x78
- bne _0806B930
-_0806B922:
- movs r0, 0x1
- b _0806B936
- .align 2, 0
-_0806B928: .4byte gUnknown_203ADFA
-_0806B92C: .4byte gUnknown_20370AC
-_0806B930:
- adds r0, 0x1
- strb r0, [r1]
-_0806B934:
- movs r0, 0
-_0806B936:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_806B898
-
- thumb_func_start sub_806B93C
-sub_806B93C: @ 806B93C
- push {lr}
- adds r2, r0, 0
- ldr r0, [r2, 0x8]
- ldrb r0, [r0]
- cmp r0, 0x3
- bne _0806B958
- ldrb r1, [r2]
- subs r1, 0x1
- lsls r1, 2
- adds r0, r2, 0
- adds r0, 0xC
- adds r0, r1
- ldr r0, [r0]
- ldrb r0, [r0]
-_0806B958:
- subs r0, 0x6B
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bhi _0806B966
- movs r0, 0x1
- b _0806B968
-_0806B966:
- movs r0, 0
-_0806B968:
- pop {r1}
- bx r1
- thumb_func_end sub_806B93C
-
- thumb_func_start sub_806B96C
-sub_806B96C: @ 806B96C
- push {lr}
- ldr r2, _0806B988 @ =gMain
- ldrh r1, [r2, 0x2C]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0806B990
- ldr r0, _0806B98C @ =gSpecialVar_Facing
- ldrh r0, [r0]
- cmp r0, 0x2
- beq _0806B990
- movs r0, 0x1
- b _0806BA36
- .align 2, 0
-_0806B988: .4byte gMain
-_0806B98C: .4byte gSpecialVar_Facing
-_0806B990:
- ldrh r1, [r2, 0x2C]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0806B9AC
- ldr r0, _0806B9A8 @ =gSpecialVar_Facing
- ldrh r0, [r0]
- cmp r0, 0x1
- beq _0806B9AC
- movs r0, 0x2
- b _0806BA36
- .align 2, 0
-_0806B9A8: .4byte gSpecialVar_Facing
-_0806B9AC:
- ldrh r1, [r2, 0x2C]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0806B9C8
- ldr r0, _0806B9C4 @ =gSpecialVar_Facing
- ldrh r0, [r0]
- cmp r0, 0x3
- beq _0806B9C8
- movs r0, 0x3
- b _0806BA36
- .align 2, 0
-_0806B9C4: .4byte gSpecialVar_Facing
-_0806B9C8:
- ldrh r1, [r2, 0x2C]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0806B9E4
- ldr r0, _0806B9E0 @ =gSpecialVar_Facing
- ldrh r0, [r0]
- cmp r0, 0x4
- beq _0806B9E4
- movs r0, 0x4
- b _0806BA36
- .align 2, 0
-_0806B9E0: .4byte gSpecialVar_Facing
-_0806B9E4:
- ldrh r1, [r2, 0x2E]
- movs r0, 0x80
- lsls r0, 2
- ands r0, r1
- cmp r0, 0
- beq _0806B9F4
- movs r0, 0x5
- b _0806BA36
-_0806B9F4:
- ldrh r2, [r2, 0x2C]
- movs r0, 0x80
- lsls r0, 1
- ands r0, r2
- cmp r0, 0
- beq _0806BA04
- movs r0, 0x6
- b _0806BA36
-_0806BA04:
- movs r0, 0x8
- ands r0, r2
- cmp r0, 0
- beq _0806BA10
- movs r0, 0x7
- b _0806BA36
-_0806BA10:
- movs r0, 0x4
- ands r0, r2
- cmp r0, 0
- beq _0806BA1C
- movs r0, 0x8
- b _0806BA36
-_0806BA1C:
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0806BA28
- movs r0, 0x9
- b _0806BA36
-_0806BA28:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _0806BA34
- movs r0, 0
- b _0806BA36
-_0806BA34:
- movs r0, 0xA
-_0806BA36:
- pop {r1}
- bx r1
- thumb_func_end sub_806B96C
-
- thumb_func_start ScrCmd_waitbuttonpress
-ScrCmd_waitbuttonpress: @ 806BA3C
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _0806BA70 @ =gUnknown_3005070
- str r4, [r0]
- bl sub_8112CAC
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0806BA58
- ldr r0, _0806BA74 @ =gUnknown_203ADFA
- ldrb r0, [r0]
- cmp r0, 0x2
- bne _0806BA5E
-_0806BA58:
- ldr r1, _0806BA78 @ =gUnknown_20370AC
- movs r0, 0
- strb r0, [r1]
-_0806BA5E:
- ldr r1, _0806BA7C @ =sub_806B898
- adds r0, r4, 0
- bl SetupNativeScript
- movs r0, 0x1
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0806BA70: .4byte gUnknown_3005070
-_0806BA74: .4byte gUnknown_203ADFA
-_0806BA78: .4byte gUnknown_20370AC
-_0806BA7C: .4byte sub_806B898
- thumb_func_end ScrCmd_waitbuttonpress
-
thumb_func_start ScrCmd_yesnobox
ScrCmd_yesnobox: @ 806BA80
push {lr}
diff --git a/include/new_menu_helpers.h b/include/new_menu_helpers.h
index 2a68a35e6..ce8e8d697 100644
--- a/include/new_menu_helpers.h
+++ b/include/new_menu_helpers.h
@@ -19,5 +19,8 @@ void sub_80F6F54(u8, u8);
u8 sub_80F78A8(void);
void sub_80F6E9C(void);
void sub_80F6EE4(u8 windowId, bool8 transfer);
+void sub_80F7974(const u8 *);
+u8 GetStartMenuWindowId(void);
+void sub_80F7998(void);
#endif // GUARD_NEW_MENU_HELPERS_H
diff --git a/include/quest_log.h b/include/quest_log.h
index 73c0b5dac..faa47a809 100644
--- a/include/quest_log.h
+++ b/include/quest_log.h
@@ -22,6 +22,7 @@ extern struct UnkStruct_203AE98 * gUnknown_3005E94;
void sub_8112720(u8);
void sub_8113550(u16, const u16 *);
void sub_8115748(u16);
+u8 sub_8112CAC(void);
extern u8 gUnknown_203ADFA;
diff --git a/include/script.h b/include/script.h
index acd88adf3..88e729526 100644
--- a/include/script.h
+++ b/include/script.h
@@ -65,6 +65,11 @@ void sub_80992A0(u8 *script, u16 scriptSize);
bool32 sub_8069DFC(void);
void sub_8069EA4(u8 * script, u16 scriptSize);
u8 * sub_8069E48(void);
+void sub_8069998(u8 var);
+void sub_80699F8(void);
+void sub_8069964(void);
+void sub_80699A4(void);
+void sub_8069970(void);
extern const u8 *gRAMScriptPtr;
diff --git a/src/scrcmd.c b/src/scrcmd.c
index 4cd0fdad2..976b80564 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -20,6 +20,9 @@
#include "field_map_obj_helpers.h"
#include "map_obj_lock.h"
#include "field_message_box.h"
+#include "new_menu_helpers.h"
+#include "window.h"
+#include "start_menu.h"
extern u16 (*const gSpecials[])(void);
extern u16 (*const gSpecialsEnd[])(void);
@@ -1252,3 +1255,155 @@ SCRCMD_DEF(cmdC7)
gUnknown_20370DA = ScriptReadByte(ctx);
return FALSE;
}
+
+SCRCMD_DEF(message)
+{
+ const u8 *msg = (const u8 *)ScriptReadWord(ctx);
+
+ if (msg == NULL)
+ msg = (const u8 *)ctx->data[0];
+ ShowFieldMessage(msg);
+ return FALSE;
+}
+
+SCRCMD_DEF(cmdC8)
+{
+ const u8 *msg = (const u8 *)ScriptReadWord(ctx);
+
+ if (msg == NULL)
+ msg = (const u8 *)ctx->data[0];
+ sub_80F7974(msg);
+ CopyWindowToVram(GetStartMenuWindowId(), 1);
+ return FALSE;
+}
+
+SCRCMD_DEF(cmdC9)
+{
+ sub_80F7998();
+ return FALSE;
+}
+
+SCRCMD_DEF(messageautoscroll)
+{
+ const u8 *msg = (const u8 *)ScriptReadWord(ctx);
+
+ if (msg == NULL)
+ msg = (const u8 *)ctx->data[0];
+ ShowFieldAutoScrollMessage(msg);
+ return FALSE;
+}
+
+SCRCMD_DEF(waitmessage)
+{
+ SetupNativeScript(ctx, IsFieldMessageBoxHidden);
+ return TRUE;
+}
+
+SCRCMD_DEF(closemessage)
+{
+ HideFieldMessageBox();
+ return FALSE;
+}
+
+extern IWRAM_DATA struct ScriptContext * gUnknown_3005070;
+
+bool8 sub_806B93C(struct ScriptContext * ctx);
+u8 sub_806B96C(struct ScriptContext * ctx);
+
+bool8 WaitForAorBPress(void)
+{
+ if (gMain.newKeys & A_BUTTON)
+ return TRUE;
+ if (gMain.newKeys & B_BUTTON)
+ return TRUE;
+
+ if (sub_806B93C(gUnknown_3005070) == TRUE)
+ {
+ u8 r4 = sub_806B96C(gUnknown_3005070);
+ sub_8069998(r4);
+ if (r4)
+ {
+ if (gUnknown_203ADFA != 2)
+ {
+ sub_80699F8();
+ if (r4 < 9 || r4 > 10)
+ sub_8069964();
+ else
+ {
+ sub_80699A4();
+ sub_8069970();
+ }
+ return TRUE;
+ }
+ }
+ }
+ if (sub_8112CAC() == 1 || gUnknown_203ADFA == 2)
+ {
+ if (gUnknown_20370AC == 120)
+ return TRUE;
+ else
+ gUnknown_20370AC++;
+ }
+
+ return FALSE;
+}
+
+bool8 sub_806B93C(struct ScriptContext * ctx)
+{
+ const u8 * script = ctx->scriptPtr;
+ u8 nextCmd = *script;
+ if (nextCmd == 3) // return
+ {
+ script = ctx->stack[ctx->stackDepth - 1];
+ nextCmd = *script;
+ }
+ if (nextCmd < 0x6B || nextCmd > 0x6C) // releaseall or release
+ return FALSE;
+ else
+ return TRUE;
+}
+
+u8 sub_806B96C(struct ScriptContext * ctx)
+{
+ if (gMain.heldKeys & DPAD_UP && gSpecialVar_Facing != 2)
+ return 1;
+
+ if (gMain.heldKeys & DPAD_DOWN && gSpecialVar_Facing != 1)
+ return 2;
+
+ if (gMain.heldKeys & DPAD_LEFT && gSpecialVar_Facing != 3)
+ return 3;
+
+ if (gMain.heldKeys & DPAD_RIGHT && gSpecialVar_Facing != 4)
+ return 4;
+
+ if (gMain.newKeys & L_BUTTON)
+ return 5;
+
+ if (gMain.heldKeys & R_BUTTON)
+ return 6;
+
+ if (gMain.heldKeys & START_BUTTON)
+ return 7;
+
+ if (gMain.heldKeys & SELECT_BUTTON)
+ return 8;
+
+ if (gMain.newKeys & A_BUTTON)
+ return 9;
+
+ if (gMain.newKeys & B_BUTTON)
+ return 10;
+
+ return 0;
+}
+
+SCRCMD_DEF(waitbuttonpress)
+{
+ gUnknown_3005070 = ctx;
+
+ if (sub_8112CAC() == 1 || gUnknown_203ADFA == 2)
+ gUnknown_20370AC = 0;
+ SetupNativeScript(ctx, WaitForAorBPress);
+ return TRUE;
+}