diff options
| -rwxr-xr-x | asm/field_specials.s | 338 | ||||
| -rwxr-xr-x | data/field_specials.s | 11 | ||||
| -rwxr-xr-x | src/field_specials.c | 237 | 
3 files changed, 237 insertions, 349 deletions
| diff --git a/asm/field_specials.s b/asm/field_specials.s index 3c8a476cb..3bd35217a 100755 --- a/asm/field_specials.s +++ b/asm/field_specials.s @@ -6,344 +6,6 @@  	.text -	thumb_func_start ShowGlassWorkshopMenu -ShowGlassWorkshopMenu: @ 810F090 -	push {r4,r5,lr} -	sub sp, 0x8 -	bl ScriptContext2_Enable -	movs r0, 0 -	movs r1, 0 -	movs r2, 0xA -	movs r3, 0xB -	bl MenuDrawTextWindow -	movs r4, 0 -	str r4, [sp] -	movs r0, 0x9 -	str r0, [sp, 0x4] -	movs r0, 0 -	movs r1, 0x1 -	movs r2, 0x1 -	movs r3, 0x5 -	bl InitMenu -	ldr r0, _0810F104 @ =gUnknown_0203925C -	strb r4, [r0] -	bl sub_80F944C -	bl LoadScrollIndicatorPalette -	bl sub_810F2B4 -	ldr r5, _0810F108 @ =gUnknown_083F83C0 -_0810F0CA: -	lsls r0, r4, 2 -	adds r0, r5 -	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 -	bls _0810F0CA -	ldr r1, _0810F10C @ =gUnknown_0203925B -	movs r0, 0 -	strb r0, [r1] -	ldr r1, _0810F110 @ =gUnknown_0203925A -	movs r0, 0x8 -	strb r0, [r1] -	ldr r0, _0810F114 @ =sub_810F118 -	movs r1, 0x8 -	bl CreateTask -	add sp, 0x8 -	pop {r4,r5} -	pop {r0} -	bx r0 -	.align 2, 0 -_0810F104: .4byte gUnknown_0203925C -_0810F108: .4byte gUnknown_083F83C0 -_0810F10C: .4byte gUnknown_0203925B -_0810F110: .4byte gUnknown_0203925A -_0810F114: .4byte sub_810F118 -	thumb_func_end ShowGlassWorkshopMenu - -	thumb_func_start sub_810F118 -sub_810F118: @ 810F118 -	push {r4,r5,lr} -	lsls r0, 24 -	lsrs r5, r0, 24 -	ldr r0, _0810F1E4 @ =gMain -	ldrh r0, [r0, 0x2E] -	cmp r0, 0x40 -	bne _0810F14A -	ldr r1, _0810F1E8 @ =gUnknown_0203925B -	ldrb r0, [r1] -	cmp r0, 0 -	beq _0810F14A -	subs r0, 0x1 -	strb r0, [r1] -	bl GetMenuCursorPos -	lsls r0, 24 -	lsrs r4, r0, 24 -	movs r0, 0x1 -	negs r0, r0 -	bl MoveMenuCursorNoWrap -	adds r0, r4, 0 -	movs r1, 0x40 -	bl sub_810F1F4 -_0810F14A: -	ldr r0, _0810F1E4 @ =gMain -	ldrh r0, [r0, 0x2E] -	cmp r0, 0x80 -	bne _0810F17A -	ldr r2, _0810F1E8 @ =gUnknown_0203925B -	ldrb r1, [r2] -	ldr r0, _0810F1EC @ =gUnknown_0203925A -	ldrb r0, [r0] -	subs r0, 0x1 -	cmp r1, r0 -	beq _0810F17A -	adds r0, r1, 0x1 -	strb r0, [r2] -	bl GetMenuCursorPos -	lsls r0, 24 -	lsrs r4, r0, 24 -	movs r0, 0x1 -	bl MoveMenuCursorNoWrap -	adds r0, r4, 0 -	movs r1, 0x80 -	bl sub_810F1F4 -_0810F17A: -	ldr r4, _0810F1E4 @ =gMain -	ldrh r1, [r4, 0x2E] -	movs r0, 0x1 -	ands r0, r1 -	cmp r0, 0 -	beq _0810F1AE -	bl HandleDestroyMenuCursors -	ldr r0, _0810F1F0 @ =gScriptResult -	ldr r1, _0810F1E8 @ =gUnknown_0203925B -	ldrb r1, [r1] -	strh r1, [r0] -	movs r0, 0x5 -	bl PlaySE -	bl sub_810EEDC -	movs r0, 0 -	movs r1, 0 -	movs r2, 0x1D -	movs r3, 0xC -	bl MenuZeroFillWindowRect -	adds r0, r5, 0 -	bl sub_810EC9C -_0810F1AE: -	ldrh r1, [r4, 0x2E] -	movs r0, 0x2 -	ands r0, r1 -	cmp r0, 0 -	beq _0810F1DE -	bl HandleDestroyMenuCursors -	ldr r1, _0810F1F0 @ =gScriptResult -	movs r0, 0x7F -	strh r0, [r1] -	movs r0, 0x5 -	bl PlaySE -	bl sub_810EEDC -	movs r0, 0 -	movs r1, 0 -	movs r2, 0x1D -	movs r3, 0xC -	bl MenuZeroFillWindowRect -	adds r0, r5, 0 -	bl sub_810EC9C -_0810F1DE: -	pop {r4,r5} -	pop {r0} -	bx r0 -	.align 2, 0 -_0810F1E4: .4byte gMain -_0810F1E8: .4byte gUnknown_0203925B -_0810F1EC: .4byte gUnknown_0203925A -_0810F1F0: .4byte gScriptResult -	thumb_func_end sub_810F118 - -	thumb_func_start sub_810F1F4 -sub_810F1F4: @ 810F1F4 -	push {r4-r7,lr} -	lsls r0, 24 -	lsrs r2, r0, 24 -	adds r5, r2, 0 -	lsls r1, 24 -	lsrs r1, 24 -	adds r3, r1, 0 -	movs r6, 0 -	movs r4, 0 -	ldr r0, _0810F214 @ =gUnknown_0203925A -	ldrb r0, [r0] -	cmp r0, 0x4 -	bhi _0810F218 -	movs r0, 0 -	b _0810F282 -	.align 2, 0 -_0810F214: .4byte gUnknown_0203925A -_0810F218: -	cmp r1, 0x40 -	bne _0810F22C -	cmp r2, 0 -	bne _0810F240 -	ldr r0, _0810F228 @ =gUnknown_0203925B -	ldrb r4, [r0] -	movs r6, 0x1 -	b _0810F244 -	.align 2, 0 -_0810F228: .4byte gUnknown_0203925B -_0810F22C: -	cmp r3, 0x80 -	bne _0810F240 -	cmp r5, 0x4 -	bne _0810F240 -	ldr r0, _0810F288 @ =gUnknown_0203925B -	ldrb r0, [r0] -	subs r0, 0x4 -	lsls r0, 24 -	lsrs r4, r0, 24 -	movs r6, 0x1 -_0810F240: -	cmp r6, 0 -	beq _0810F280 -_0810F244: -	adds r0, r4, 0 -	movs r1, 0x5 -	bl GlassWorkshopUpdateScrollIndicators -	movs r0, 0x2 -	movs r1, 0x1 -	movs r2, 0x9 -	movs r3, 0xA -	bl MenuFillWindowRectWithBlankTile -	movs r5, 0 -	ldr r7, _0810F28C @ =gUnknown_083F83C0 -_0810F25C: -	lsls r0, r4, 2 -	adds r0, r7 -	ldr r0, [r0] -	lsls r2, r5, 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 -	adds r0, r5, 0x1 -	lsls r0, 24 -	lsrs r5, r0, 24 -	cmp r5, 0x4 -	bls _0810F25C -_0810F280: -	adds r0, r6, 0 -_0810F282: -	pop {r4-r7} -	pop {r1} -	bx r1 -	.align 2, 0 -_0810F288: .4byte gUnknown_0203925B -_0810F28C: .4byte gUnknown_083F83C0 -	thumb_func_end sub_810F1F4 - -	thumb_func_start sub_810F290 -sub_810F290: @ 810F290 -	push {lr} -	ldr r2, _0810F2B0 @ =gUnknown_0203925C -	ldrb r1, [r2] -	lsrs r0, r1, 1 -	cmp r0, 0x1 -	beq _0810F2AC -	movs r0, 0x2 -	orrs r0, r1 -	strb r0, [r2] -	movs r0, 0 -	movs r1, 0x2C -	movs r2, 0x8 -	bl CreateVerticalScrollIndicators -_0810F2AC: -	pop {r0} -	bx r0 -	.align 2, 0 -_0810F2B0: .4byte gUnknown_0203925C -	thumb_func_end sub_810F290 - -	thumb_func_start sub_810F2B4 -sub_810F2B4: @ 810F2B4 -	push {lr} -	ldr r2, _0810F2D8 @ =gUnknown_0203925C -	ldrb r1, [r2] -	movs r0, 0x1 -	ands r0, r1 -	cmp r0, 0 -	bne _0810F2D2 -	movs r0, 0x1 -	orrs r0, r1 -	strb r0, [r2] -	movs r0, 0x1 -	movs r1, 0x2C -	movs r2, 0x58 -	bl CreateVerticalScrollIndicators -_0810F2D2: -	pop {r0} -	bx r0 -	.align 2, 0 -_0810F2D8: .4byte gUnknown_0203925C -	thumb_func_end sub_810F2B4 - -	thumb_func_start GlassWorkshopUpdateScrollIndicators -GlassWorkshopUpdateScrollIndicators: @ 810F2DC -	push {r4,r5,lr} -	lsls r0, 24 -	lsrs r4, r0, 24 -	lsls r1, 24 -	lsrs r5, r1, 24 -	cmp r4, 0 -	bne _0810F300 -	ldr r0, _0810F2FC @ =gUnknown_0203925C -	ldrb r1, [r0] -	movs r2, 0x2 -	eors r1, r2 -	strb r1, [r0] -	movs r0, 0 -	bl DestroyVerticalScrollIndicator -	b _0810F304 -	.align 2, 0 -_0810F2FC: .4byte gUnknown_0203925C -_0810F300: -	bl sub_810F290 -_0810F304: -	adds r1, r4, r5 -	ldr r0, _0810F314 @ =gUnknown_0203925A -	ldrb r0, [r0] -	cmp r1, r0 -	bge _0810F318 -	bl sub_810F2B4 -	b _0810F32C -	.align 2, 0 -_0810F314: .4byte gUnknown_0203925A -_0810F318: -	cmp r1, r0 -	bne _0810F32C -	ldr r0, _0810F334 @ =gUnknown_0203925C -	ldrb r1, [r0] -	movs r2, 0x1 -	eors r1, r2 -	strb r1, [r0] -	movs r0, 0x1 -	bl DestroyVerticalScrollIndicator -_0810F32C: -	pop {r4,r5} -	pop {r0} -	bx r0 -	.align 2, 0 -_0810F334: .4byte gUnknown_0203925C -	thumb_func_end GlassWorkshopUpdateScrollIndicators -  	thumb_func_start SpawnCameraDummy  SpawnCameraDummy: @ 810F338  	push {lr} diff --git a/data/field_specials.s b/data/field_specials.s index 9589e49b7..78cf99e2c 100755 --- a/data/field_specials.s +++ b/data/field_specials.s @@ -3,17 +3,6 @@  	.section .rodata -	.align 2 -gUnknown_083F83C0:: @ 83F83C0 -	.4byte OtherText_BlueFlute -	.4byte OtherText_YellowFlute -	.4byte OtherText_RedFlute -	.4byte OtherText_WhiteFlute -	.4byte OtherText_BlackFlute -	.4byte OtherText_PrettyChair -	.4byte OtherText_PrettyDesk -	.4byte gOtherText_CancelNoTerminator -  gUnknown_083F83E0:: @ 83F83E0  	.byte 12, 2, 4, 5, 1, 8, 7, 11, 3, 10, 9, 6 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); +    } +} | 
