summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2017-06-20 22:14:36 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2017-06-20 22:14:36 -0400
commitf5e71601ec02e0d3826a47902c1d82c80426e369 (patch)
tree0188ad524e9566927dfbf5b26186b16f93f57f25 /src
parent8ce2dd0be78310a839b75516a4d50a2af213c493 (diff)
Blow through the glass workshop functions
Diffstat (limited to 'src')
-rwxr-xr-xsrc/field_specials.c237
1 files changed, 237 insertions, 0 deletions
diff --git a/src/field_specials.c b/src/field_specials.c
index 716043d03..ae73c0e25 100755
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -1492,3 +1492,240 @@ void IsGrassTypeInParty(void)
}
gScriptResult = FALSE;
}
+
+const u8 *const gUnknown_083F83C0[] = {
+ OtherText_BlueFlute,
+ OtherText_YellowFlute,
+ OtherText_RedFlute,
+ OtherText_WhiteFlute,
+ OtherText_BlackFlute,
+ OtherText_PrettyChair,
+ OtherText_PrettyDesk,
+ gOtherText_CancelNoTerminator
+};
+
+void sub_810F118(u8);
+bool8 sub_810F1F4(u8, u8);
+void sub_810F2B4(void);
+void GlassWorkshopUpdateScrollIndicators(u8, u8);
+
+void ShowGlassWorkshopMenu(void)
+{
+ u8 i;
+ ScriptContext2_Enable();
+ MenuDrawTextWindow(0, 0, 10, 11);
+ InitMenu(0, 1, 1, 5, 0, 9);
+ gUnknown_0203925C = 0;
+ sub_80F944C();
+ LoadScrollIndicatorPalette();
+ sub_810F2B4();
+ for (i=0; i<5; i++)
+ {
+ MenuPrint(gUnknown_083F83C0[i], 1, 2 * i + 1);
+ }
+ gUnknown_0203925B = 0;
+ gUnknown_0203925A = ARRAY_COUNT(gUnknown_083F83C0);
+ CreateTask(sub_810F118, 8);
+}
+
+void sub_810F118(u8 taskId)
+{
+ u8 prevCursorPos;
+ if (gMain.newKeys == DPAD_UP && gUnknown_0203925B != 0)
+ {
+ gUnknown_0203925B--;
+ prevCursorPos = GetMenuCursorPos();
+ MoveMenuCursorNoWrap(-1);
+ sub_810F1F4(prevCursorPos, DPAD_UP);
+ }
+ if (gMain.newKeys == DPAD_DOWN && gUnknown_0203925B != gUnknown_0203925A - 1)
+ {
+ gUnknown_0203925B++;
+ prevCursorPos = GetMenuCursorPos();
+ MoveMenuCursorNoWrap(1);
+ sub_810F1F4(prevCursorPos, DPAD_DOWN);
+ }
+ if (gMain.newKeys & A_BUTTON)
+ {
+ HandleDestroyMenuCursors();
+ gScriptResult = gUnknown_0203925B;
+ PlaySE(SE_SELECT);
+ sub_810EEDC();
+ MenuZeroFillWindowRect(0, 0, 29, 12);
+ sub_810EC9C(taskId);
+ }
+ if (gMain.newKeys & B_BUTTON)
+ {
+ HandleDestroyMenuCursors();
+ gScriptResult = 0x7f;
+ PlaySE(SE_SELECT);
+ sub_810EEDC();
+ MenuZeroFillWindowRect(0, 0, 29, 12);
+ sub_810EC9C(taskId);
+ }
+}
+
+// Second verse, same as the first
+#ifdef NONMATCHING
+bool8 sub_810F1F4(u8 prevCursorPos, u8 dpadInput)
+{
+ u8 i;
+ u8 flag = 0;
+ u8 newPos = 0;
+ if (gUnknown_0203925A < 5)
+ {
+ return FALSE;
+ }
+ if (dpadInput == DPAD_UP)
+ {
+ if (prevCursorPos == 0)
+ {
+ newPos = gUnknown_0203925B;
+ flag = TRUE;
+ }
+ }
+ else if (dpadInput == DPAD_DOWN)
+ {
+ if (prevCursorPos == 4)
+ {
+ newPos = gUnknown_0203925B - 4;
+ flag = TRUE;
+ }
+ }
+ if (flag)
+ {
+ GlassWorkshopUpdateScrollIndicators(newPos, 5);
+ MenuFillWindowRectWithBlankTile(2, 1, 9, 10);
+ for (i=0; i<5; newPos++, i++)
+ {
+ MenuPrint(gUnknown_083F83C0[newPos], 1, 2 * i + 1);
+ }
+ }
+ return flag;
+}
+#else
+__attribute__((naked))
+bool8 sub_810F1F4(u8 prevCursorPos, u8 dpadInput)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r2, r0, 24\n"
+ "\tadds r5, r2, 0\n"
+ "\tlsls r1, 24\n"
+ "\tlsrs r1, 24\n"
+ "\tadds r3, r1, 0\n"
+ "\tmovs r6, 0\n"
+ "\tmovs r4, 0\n"
+ "\tldr r0, _0810F214 @ =gUnknown_0203925A\n"
+ "\tldrb r0, [r0]\n"
+ "\tcmp r0, 0x4\n"
+ "\tbhi _0810F218\n"
+ "\tmovs r0, 0\n"
+ "\tb _0810F282\n"
+ "\t.align 2, 0\n"
+ "_0810F214: .4byte gUnknown_0203925A\n"
+ "_0810F218:\n"
+ "\tcmp r1, 0x40\n"
+ "\tbne _0810F22C\n"
+ "\tcmp r2, 0\n"
+ "\tbne _0810F240\n"
+ "\tldr r0, _0810F228 @ =gUnknown_0203925B\n"
+ "\tldrb r4, [r0]\n"
+ "\tmovs r6, 0x1\n"
+ "\tb _0810F244\n"
+ "\t.align 2, 0\n"
+ "_0810F228: .4byte gUnknown_0203925B\n"
+ "_0810F22C:\n"
+ "\tcmp r3, 0x80\n"
+ "\tbne _0810F240\n"
+ "\tcmp r5, 0x4\n"
+ "\tbne _0810F240\n"
+ "\tldr r0, _0810F288 @ =gUnknown_0203925B\n"
+ "\tldrb r0, [r0]\n"
+ "\tsubs r0, 0x4\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r4, r0, 24\n"
+ "\tmovs r6, 0x1\n"
+ "_0810F240:\n"
+ "\tcmp r6, 0\n"
+ "\tbeq _0810F280\n"
+ "_0810F244:\n"
+ "\tadds r0, r4, 0\n"
+ "\tmovs r1, 0x5\n"
+ "\tbl GlassWorkshopUpdateScrollIndicators\n"
+ "\tmovs r0, 0x2\n"
+ "\tmovs r1, 0x1\n"
+ "\tmovs r2, 0x9\n"
+ "\tmovs r3, 0xA\n"
+ "\tbl MenuFillWindowRectWithBlankTile\n"
+ "\tmovs r5, 0\n"
+ "\tldr r7, _0810F28C @ =gUnknown_083F83C0\n"
+ "_0810F25C:\n"
+ "\tlsls r0, r4, 2\n"
+ "\tadds r0, r7\n"
+ "\tldr r0, [r0]\n"
+ "\tlsls r2, r5, 1\n"
+ "\tadds r2, 0x1\n"
+ "\tlsls r2, 24\n"
+ "\tlsrs r2, 24\n"
+ "\tmovs r1, 0x1\n"
+ "\tbl MenuPrint\n"
+ "\tadds r0, r4, 0x1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r4, r0, 24\n"
+ "\tadds r0, r5, 0x1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r5, r0, 24\n"
+ "\tcmp r5, 0x4\n"
+ "\tbls _0810F25C\n"
+ "_0810F280:\n"
+ "\tadds r0, r6, 0\n"
+ "_0810F282:\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r1}\n"
+ "\tbx r1\n"
+ "\t.align 2, 0\n"
+ "_0810F288: .4byte gUnknown_0203925B\n"
+ "_0810F28C: .4byte gUnknown_083F83C0");
+}
+#endif
+
+void sub_810F290(void)
+{
+ if (gUnknown_0203925C >> 1 != 1)
+ {
+ gUnknown_0203925C |= 0x02;
+ CreateVerticalScrollIndicators(0, 0x2c, 0x08);
+ }
+}
+
+void sub_810F2B4(void)
+{
+ if (!(gUnknown_0203925C & 0x01))
+ {
+ gUnknown_0203925C |= 0x01;
+ CreateVerticalScrollIndicators(1, 0x2c, 0x58);
+ }
+}
+
+void GlassWorkshopUpdateScrollIndicators(u8 newPos, u8 maxItems)
+{
+ if (newPos == 0)
+ {
+ gUnknown_0203925C ^= 0x02;
+ DestroyVerticalScrollIndicator(0);
+ }
+ else
+ {
+ sub_810F290();
+ }
+ if (newPos + maxItems < gUnknown_0203925A)
+ {
+ sub_810F2B4();
+ }
+ else if (newPos + maxItems == gUnknown_0203925A)
+ {
+ gUnknown_0203925C ^= 0x01;
+ DestroyVerticalScrollIndicator(1);
+ }
+}