diff --git a/asm/non_matching/cutsceneMiscObject/sub_08095EAC.inc b/asm/non_matching/cutsceneMiscObject/sub_08095EAC.inc deleted file mode 100644 index ed92dd8a..00000000 --- a/asm/non_matching/cutsceneMiscObject/sub_08095EAC.inc +++ /dev/null @@ -1,70 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - mov sb, r0 - adds r4, r1, #0 - movs r0, #0x6a - movs r1, #0x1e - movs r2, #1 - bl CreateObject - adds r5, r0, #0 - cmp r5, #0 - beq _08095F2A - ldr r0, [r4, #4] - cmp r0, #0 - bne _08095EE0 - movs r7, #0x10 - movs r6, #0x1f - movs r0, #0x80 - lsls r0, r0, #7 - mov sl, r0 - movs r2, #0 - mov r8, r2 - b _08095F02 -_08095EE0: - movs r7, #8 - movs r6, #0xf - movs r0, #0x80 - lsls r0, r0, #0xb - mov sl, r0 - ldr r4, _08095F34 @ =gUnk_08122B0E - bl Random - movs r1, #7 - ands r1, r0 - lsls r1, r1, #1 - adds r1, r1, r4 - movs r0, #0 - ldrsh r2, [r1, r0] - mov r8, r2 - movs r0, #0xff - strb r0, [r5, #0xb] -_08095F02: - bl Random - adds r4, r0, #0 - ands r4, r6 - subs r4, r7, r4 - bl Random - ands r6, r0 - subs r3, r7, r6 - lsls r4, r4, #0x10 - lsls r3, r3, #0x10 - mov r0, sb - adds r1, r5, #0 - adds r2, r4, #0 - bl PositionRelative - mov r2, sl - str r2, [r5, #0x20] - mov r0, r8 - strh r0, [r5, #0x24] -_08095F2A: - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08095F34: .4byte gUnk_08122B0E - .syntax divided diff --git a/asm/non_matching/eu/TextDispEnquiry.inc b/asm/non_matching/eu/TextDispEnquiry.inc deleted file mode 100644 index 1835ff7f..00000000 --- a/asm/non_matching/eu/TextDispEnquiry.inc +++ /dev/null @@ -1,153 +0,0 @@ -.syntax unified - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - adds r6, r0, #0 - ldr r0, _08056570 @ =gMessageChoices - movs r7, #3 - ldrsb r7, [r0, r7] - ldr r0, _08056574 @ =gInput - ldrh r0, [r0, #2] - cmp r0, #8 - beq _08056582 - cmp r0, #8 - bgt _08056578 - cmp r0, #1 - beq _08056582 - b _080565EA - .align 2, 0 -_08056570: .4byte gMessageChoices -_08056574: .4byte gInput -_08056578: - cmp r0, #0x10 - beq _080565E8 - cmp r0, #0x20 - beq _080565E4 - b _080565EA -_08056582: - ldr r0, _08056598EU @ =gMessageChoices - lsls r1, r7, #1 - adds r0, #0x10 - adds r1, r1, r0 - ldrh r1, [r1] - cmp r1, #0 - bne _080565A0EU - ldr r1, _0805659CEU @ =gUnk_08107C14 - adds r0, r6, #0 - adds r0, #0x20 - b _080565B0EU - .align 2, 0 -_08056598EU: .4byte gMessageChoices -_0805659CEU: .4byte gUnk_08107C14 -_080565A0EU: - strh r1, [r6, #8] - adds r4, r6, #0 - adds r4, #0x20 - adds r0, r4, #0 - bl sub_0805EEB4 - ldr r1, _080565D8 @ =gUnk_08107C0F - adds r0, r4, #0 -_080565B0EU: - bl sub_0805EF40 - ldr r2, _080565DC @ =gUnk_02000040 - ldr r0, _080565E0 @ =gMessageChoices - ldrb r1, [r0, #3] - strb r1, [r2, #1] - movs r1, #3 - strb r1, [r2] - movs r1, #0x18 - bl MemClear - movs r0, #0x6a - bl SoundReq - adds r1, r6, #0 - adds r1, #0x89 - movs r0, #1 - strb r0, [r1] - b _080565EA - .align 2, 0 -_080565D8: .4byte gUnk_08107C0F -_080565DC: .4byte gUnk_02000040 -_080565E0: .4byte gMessageChoices -_080565E4: - subs r7, #1 - b _080565EA -_080565E8: - adds r7, #1 -_080565EA: - ldr r4, _0805660C @ =gMessageChoices - movs r1, #2 - ldrsb r1, [r4, r1] - adds r0, r7, r1 - bl __modsi3 - adds r7, r0, #0 - movs r5, #3 - ldrsb r5, [r4, r5] - cmp r7, r5 - beq _08056610 - strb r7, [r4, #3] - movs r0, #0x69 - bl SoundReq - movs r1, #1 - b _08056612 - .align 2, 0 -_0805660C: .4byte gMessageChoices -_08056610: - movs r1, #0 -_08056612: - ldr r2, _08056674 @ =gUnk_02000040 - ldrb r0, [r2] - cmp r0, #1 - bne _08056624 - ldr r1, _08056678 @ =gMessageChoices - movs r0, #2 - strb r0, [r2] - strb r0, [r1] - movs r1, #1 -_08056624: - cmp r1, #0 - beq _0805666A - ldr r0, _0805667C @ =gTextRender - mov sl, r0 - movs r1, #0x56 - add r1, sl - mov sb, r1 - ldrh r0, [r1] - mov r8, r0 - ldr r4, _08056678 @ =gMessageChoices - lsls r0, r5, #1 - adds r4, #8 - adds r0, r0, r4 - ldrh r0, [r0] - strh r0, [r1] - adds r6, #0x50 - movs r0, #0 - adds r1, r6, #0 - bl sub_0805F8E4 - lsls r0, r7, #1 - adds r0, r0, r4 - ldrh r0, [r0] - mov r1, sb - strh r0, [r1] - movs r0, #1 - adds r1, r6, #0 - bl sub_0805F8E4 - mov r1, r8 - mov r0, sb - strh r1, [r0] - movs r0, #1 - ldr r1, _08056680 @ =0x0202281D - strb r0, [r1] -_0805666A: - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08056674: .4byte gUnk_02000040 -_08056678: .4byte gMessageChoices -_0805667C: .4byte gTextRender -_08056680: .4byte 0x0202281D -.syntax divided diff --git a/asm/non_matching/scroll/sub_0807FC7C.inc b/asm/non_matching/scroll/sub_0807FC7C.inc deleted file mode 100644 index 57cf9ed2..00000000 --- a/asm/non_matching/scroll/sub_0807FC7C.inc +++ /dev/null @@ -1,170 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - adds r2, r0, #0 - ldr r0, [r2, #0x30] - cmp r0, #0 - bne _0807FC88 - b _0807FDA6 -_0807FC88: - movs r1, #0xa - ldrsh r4, [r2, r1] - movs r1, #0x2e - ldrsh r0, [r0, r1] - subs r0, #0x78 - subs r3, r4, r0 - cmp r3, #0 - beq _0807FD16 - ldrh r6, [r2, #0xa] - movs r7, #7 - ands r7, r6 - mov ip, r6 - cmp r3, #0 - ble _0807FCDC - ldrh r0, [r2, #6] - adds r5, r0, #0 - cmp r5, r4 - bge _0807FD16 - ldrb r0, [r2, #0xe] - cmp r0, r3 - bgt _0807FCBC - adds r3, r0, #0 - ldrb r1, [r2, #0xf] - movs r0, #4 - orrs r0, r1 - strb r0, [r2, #0xf] -_0807FCBC: - mov r1, ip - subs r0, r1, r3 - strh r0, [r2, #0xa] - subs r0, r7, r3 - cmp r0, #0 - bgt _0807FCCE - ldr r1, _0807FCD8 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] -_0807FCCE: - movs r1, #0xa - ldrsh r0, [r2, r1] - cmp r5, r0 - blt _0807FD16 - b _0807FD14 - .align 2, 0 -_0807FCD8: .4byte gUpdateVisibleTiles -_0807FCDC: - ldrh r0, [r2, #6] - ldrh r1, [r2, #0x1e] - adds r0, r0, r1 - adds r5, r0, #0 - subs r5, #0xf0 - cmp r4, r5 - bge _0807FD16 - ldrb r0, [r2, #0xe] - rsbs r0, r0, #0 - cmp r0, r3 - blt _0807FCFC - adds r3, r0, #0 - ldrb r1, [r2, #0xf] - movs r0, #4 - orrs r0, r1 - strb r0, [r2, #0xf] -_0807FCFC: - subs r0, r6, r3 - strh r0, [r2, #0xa] - subs r0, r7, r3 - cmp r0, #7 - ble _0807FD0C - ldr r1, _0807FD68 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] -_0807FD0C: - movs r1, #0xa - ldrsh r0, [r2, r1] - cmp r0, r5 - blt _0807FD16 -_0807FD14: - strh r5, [r2, #0xa] -_0807FD16: - movs r0, #0xc - ldrsh r4, [r2, r0] - ldr r0, [r2, #0x30] - movs r1, #0x32 - ldrsh r0, [r0, r1] - subs r0, #0x50 - subs r3, r4, r0 - cmp r3, #0 - beq _0807FDA6 - ldrh r6, [r2, #0xc] - movs r7, #7 - ands r7, r6 - mov ip, r6 - cmp r3, #0 - ble _0807FD6C - ldrh r0, [r2, #8] - adds r5, r0, #0 - cmp r5, r4 - bge _0807FDA6 - ldrb r0, [r2, #0xe] - cmp r0, r3 - bgt _0807FD4C - adds r3, r0, #0 - ldrb r1, [r2, #0xf] - movs r0, #4 - orrs r0, r1 - strb r0, [r2, #0xf] -_0807FD4C: - mov r1, ip - subs r0, r1, r3 - strh r0, [r2, #0xc] - subs r0, r7, r3 - cmp r0, #0 - bgt _0807FD5E - ldr r1, _0807FD68 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] -_0807FD5E: - movs r1, #0xc - ldrsh r0, [r2, r1] - cmp r5, r0 - blt _0807FDA6 - b _0807FDA4 - .align 2, 0 -_0807FD68: .4byte gUpdateVisibleTiles -_0807FD6C: - ldrh r0, [r2, #8] - ldrh r1, [r2, #0x20] - adds r0, r0, r1 - adds r5, r0, #0 - subs r5, #0xa0 - cmp r4, r5 - bge _0807FDA6 - ldrb r0, [r2, #0xe] - rsbs r0, r0, #0 - cmp r0, r3 - blt _0807FD8C - adds r3, r0, #0 - ldrb r1, [r2, #0xf] - movs r0, #4 - orrs r0, r1 - strb r0, [r2, #0xf] -_0807FD8C: - subs r0, r6, r3 - strh r0, [r2, #0xc] - subs r0, r7, r3 - cmp r0, #7 - ble _0807FD9C - ldr r1, _0807FDAC @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] -_0807FD9C: - movs r1, #0xc - ldrsh r0, [r2, r1] - cmp r0, r5 - blt _0807FDA6 -_0807FDA4: - strh r5, [r2, #0xc] -_0807FDA6: - bl sub_08080BC4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0807FDAC: .4byte gUpdateVisibleTiles - .syntax divided diff --git a/asm/non_matching/ui/ButtonUIElement_Action1.inc b/asm/non_matching/ui/ButtonUIElement_Action1.inc deleted file mode 100644 index 76f9a763..00000000 --- a/asm/non_matching/ui/ButtonUIElement_Action1.inc +++ /dev/null @@ -1,99 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - adds r5, r0, #0 - ldrb r0, [r5, #2] - movs r6, #8 - cmp r0, #0 - bne _0801CC10 - movs r6, #4 - cmp r0, #0 - bne _0801CC10 - ldr r3, _0801CC08 @ =gUnk_0200AF00 - ldrb r0, [r3, #1] - ldrb r2, [r5, #1] - asrs r0, r2 - movs r1, #1 - ands r0, r1 - cmp r0, #0 - bne _0801CBF6 - ldr r0, _0801CC0C @ =gMessage - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0 - beq _0801CC10 -_0801CBF6: - lsls r0, r2, #1 - adds r1, r3, #0 - adds r1, #0x1c - adds r0, r0, r1 - movs r1, #0 - ldrsh r0, [r0, r1] - adds r1, r0, #0 - subs r1, #0x28 - b _0801CC1E - .align 2, 0 -_0801CC08: .4byte gUnk_0200AF00 -_0801CC0C: .4byte gMessage -_0801CC10: - ldr r1, _0801CC7C @ =gUnk_0200AF00 - ldrb r0, [r5, #1] - lsls r0, r0, #1 - adds r1, #0x1c - adds r0, r0, r1 - movs r2, #0 - ldrsh r1, [r0, r2] -_0801CC1E: - movs r2, #0xe - ldrsh r0, [r5, r2] - subs r4, r1, r0 - adds r1, r4, #0 - cmp r4, #0 - bge _0801CC2C - rsbs r4, r4, #0 -_0801CC2C: - cmp r6, r4 - bgt _0801CC32 - adds r4, r6, #0 -_0801CC32: - adds r0, r1, #0 - bl sub_08000E44 - muls r4, r0, r4 - cmp r4, #0 - beq _0801CC44 - ldrh r0, [r5, #0xe] - adds r0, r0, r4 - strh r0, [r5, #0xe] -_0801CC44: - ldr r0, _0801CC7C @ =gUnk_0200AF00 - ldrb r1, [r5, #1] - lsls r1, r1, #1 - adds r0, #0x16 - adds r1, r1, r0 - movs r0, #0 - ldrsh r1, [r1, r0] - movs r2, #0xc - ldrsh r0, [r5, r2] - subs r4, r1, r0 - adds r1, r4, #0 - cmp r4, #0 - bge _0801CC60 - rsbs r4, r4, #0 -_0801CC60: - cmp r6, r4 - bgt _0801CC66 - adds r4, r6, #0 -_0801CC66: - adds r0, r1, #0 - bl sub_08000E44 - muls r4, r0, r4 - cmp r4, #0 - beq _0801CC78 - ldrh r0, [r5, #0xc] - adds r0, r0, r4 - strh r0, [r5, #0xc] -_0801CC78: - pop {r4, r5, r6, pc} - .align 2, 0 -_0801CC7C: .4byte gUnk_0200AF00 - .syntax divided diff --git a/asm/non_matching/vaati/sub_0804334C.inc b/asm/non_matching/vaati/sub_0804334C.inc deleted file mode 100644 index 91e7120c..00000000 --- a/asm/non_matching/vaati/sub_0804334C.inc +++ /dev/null @@ -1,111 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _08043388 - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0804341C - movs r5, #0 - movs r7, #0x80 - movs r6, #4 - rsbs r6, r6, #0 - movs r3, #1 -_0804336A: - ldr r0, [r4, #0x64] - lsls r1, r5, #2 - adds r0, r0, r1 - ldr r2, [r0] - ldrb r0, [r2, #0x10] - orrs r0, r7 - strb r0, [r2, #0x10] - ldrb r1, [r2, #0x18] - adds r0, r6, #0 - ands r0, r1 - orrs r0, r3 - strb r0, [r2, #0x18] - adds r5, #1 - cmp r5, #4 - bls _0804336A -_08043388: - ldr r3, [r4, #0x64] - adds r2, r3, #0 - adds r2, #0x18 - ldr r1, _080433AC @ =gUnk_080D131C - ldrb r0, [r4, #0xb] - adds r0, r0, r1 - ldrb r0, [r0] - ldrb r1, [r2, #1] - subs r0, r0, r1 - adds r0, #1 - cmp r0, #2 - bls _080433B0 - ldrh r0, [r2, #8] - ldrh r1, [r3, #0x18] - adds r0, r0, r1 - strh r0, [r3, #0x18] - movs r7, #0 - b _080433B2 - .align 2, 0 -_080433AC: .4byte gUnk_080D131C -_080433B0: - movs r7, #1 -_080433B2: - adds r0, r4, #0 - bl sub_08043B9C - movs r5, #0 - movs r6, #0x18 -_080433BC: - ldr r0, [r4, #0x64] - adds r2, r0, r6 - ldr r0, _080433E4 @ =gUnk_080D1414 - adds r0, r5, r0 - ldrb r1, [r2, #0xc] - ldrb r3, [r0] - cmp r3, r1 - bls _080433E8 - adds r0, r1, #1 - strb r0, [r2, #0xc] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r3, r0 - bne _0804341C - movs r0, #0xaf - lsls r0, r0, #1 - bl SoundReq - b _0804341C - .align 2, 0 -_080433E4: .4byte gUnk_080D1414 -_080433E8: - cmp r7, #0 - beq _08043414 - cmp r5, #4 - bne _08043414 - adds r0, r4, #0 - bl sub_08043BC8 - adds r0, r4, #0 - movs r1, #7 - bl InitAnimationForceUpdate - adds r1, r4, #0 - adds r1, #0x7e - ldrb r0, [r1] - cmp r0, #0 - beq _08043414 - movs r0, #0 - strb r0, [r1] - ldr r0, [r4, #0x64] - ldr r1, [r0, #0x14] - movs r0, #2 - strb r0, [r1, #0xd] -_08043414: - adds r6, #0x10 - adds r5, #1 - cmp r5, #4 - bls _080433BC -_0804341C: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - .syntax divided diff --git a/src/enemy/vaatiArm.c b/src/enemy/vaatiArm.c index 569a6bbf..4ed717de 100644 --- a/src/enemy/vaatiArm.c +++ b/src/enemy/vaatiArm.c @@ -900,10 +900,9 @@ void sub_080432A8(Entity* this) { } } -static NONMATCH("asm/non_matching/vaati/sub_0804334C.inc", void sub_0804334C(Entity* this)) { - int bVar1; +void sub_0804334C(Entity* this) { + u32 bVar1; Entity* entity; - VaatiArm_HeapStruct1* s; u32 i; VaatiArm_HeapStruct1* ptr; @@ -913,13 +912,13 @@ static NONMATCH("asm/non_matching/vaati/sub_0804334C.inc", void sub_0804334C(Ent } for (i = 0; i < 5; i++) { entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[i]; - entity->flags = entity->flags | ENT_COLLIDE; + COLLISION_ON(entity); entity->spriteSettings.draw = 1; } } - s = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; - if ((gUnk_080D131C[this->type2] - s->unk00.HALF.HI) + 1 > 2u) { - s->unk00.HWORD += s->unk08; + ptr = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; + if (gUnk_080D131C[this->type2] - ptr->unk00.HALF.HI + 1 > 2u) { + ptr->unk00.HWORD += ptr->unk08; bVar1 = 0; } else { bVar1 = 1; @@ -927,12 +926,11 @@ static NONMATCH("asm/non_matching/vaati/sub_0804334C.inc", void sub_0804334C(Ent sub_08043B9C(this); for (i = 0; i < 5; i++) { ptr = &(((VaatiArm_HeapStruct*)this->myHeap)->s1)[i]; + if (gUnk_080D1414[i] > ptr->unk0c) { - ptr->unk0c++; - if (gUnk_080D1414[i] != ptr->unk0c) { - return; + if (gUnk_080D1414[i] == ++ptr->unk0c) { + SoundReq(SFX_15E); } - SoundReq(SFX_15E); return; } if ((bVar1) && (i == 4)) { @@ -945,7 +943,6 @@ static NONMATCH("asm/non_matching/vaati/sub_0804334C.inc", void sub_0804334C(Ent } } } -END_NONMATCH static void sub_08043420(Entity* this) { gUnk_080D1320[this->subAction](this); diff --git a/src/message.c b/src/message.c index 01305823..165c58d1 100644 --- a/src/message.c +++ b/src/message.c @@ -505,11 +505,7 @@ u16 RunTextCommand(TextRender* this) { const u8 gUnk_08107C0F[] = { 0x8, 0x1e, 0x4, 0x12, 0x0 }; const u8 gUnk_08107C14[] = { 0x8, 0x1e, 0x8, 0xFE, 0x0 }; -#ifdef EU -ASM_FUNC("asm/non_matching/eu/TextDispEnquiry.inc", /*static*/ void TextDispEnquiry(TextRender* ctb)) -#else - -/*static*/ void TextDispEnquiry(TextRender* this) { +void TextDispEnquiry(TextRender* this) { s32 nextTextIdx, choiceIdx, lastChoice; u32 doSwitch; const u8* src; @@ -556,10 +552,22 @@ ASM_FUNC("asm/non_matching/eu/TextDispEnquiry.inc", /*static*/ void TextDispEnqu doSwitch = 1; } if (doSwitch) { +#ifdef EU + u32 previousUnk6 = gTextRender._50.unk6; + gTextRender._50.unk6 = gMessageChoices.unk_08[lastChoice]; + sub_0805F8E4(0, &this->_50); + gTextRender._50.unk6 = gMessageChoices.unk_08[choiceIdx]; + sub_0805F8E4(1, &this->_50); + gTextRender._50.unk6 = previousUnk6; + gTextRender.updateDraw = 1; +#else SwitchChoice(choiceIdx, lastChoice); +#endif } } +#ifndef EU + static void SwitchChoice(u32 to, u32 from) { u16 t; t = gTextRender._50.unk6; diff --git a/src/object/cutsceneMiscObject.c b/src/object/cutsceneMiscObject.c index 25a7107c..8d971ba2 100644 --- a/src/object/cutsceneMiscObject.c +++ b/src/object/cutsceneMiscObject.c @@ -1107,34 +1107,34 @@ void sub_08095E7C(CutsceneMiscObjectEntity* this, ScriptExecutionContext* ctx) { } } -NONMATCH("asm/non_matching/cutsceneMiscObject/sub_08095EAC.inc", - void sub_08095EAC(CutsceneMiscObjectEntity* this, ScriptExecutionContext* ctx)) { +void sub_08095EAC(Entity* this, ScriptExecutionContext* ctx) { Entity* e = CreateObject(CUTSCENE_MISC_OBJECT, 0x1E, 1); - s32 x, y; + s32 x; + s16 y; + s32 a, b, speed; + s32 vel; if (e != NULL) { - s32 a, b, vel, speed; if (ctx->intVariable == 0) { a = 0x10; b = 0x1F; - vel = 0x4000; + vel = Q_16_16(0.25); speed = 0; } else { a = 0x8; b = 0xF; - vel = 0x40000; + vel = Q_16_16(4); speed = gUnk_08122B0E[Random() & 7]; e->type2 = -1; } - x = a - (Random() & b); - y = a - (Random() & b); - PositionRelative(super, e, x << 16, y << 16); + x = (a - (Random() & b)); + y = (a - (Random() & b)); + PositionRelative(this, e, x << 16, y << 16); e->zVelocity = vel; e->speed = speed; } } -END_NONMATCH #define local ((Type1F*)this) void sub_08095F38(CutsceneMiscObjectEntity* this) { diff --git a/src/scroll.c b/src/scroll.c index 051ee4a4..8e4d4018 100644 --- a/src/scroll.c +++ b/src/scroll.c @@ -83,92 +83,83 @@ void sub_0807FC64(RoomControls* controls) { UpdateIsDiggingCave(); } -NONMATCH("asm/non_matching/scroll/sub_0807FC7C.inc", void sub_0807FC7C(RoomControls* controls)) { - u32 uVar1; - u32 uVar2; - u32 uVar3; - int iVar4; - u32 uVar5; - u32 temp; - u32 temp2; - u32 uVar6; +void sub_0807FC7C(RoomControls* controls) { + s32 uVar2; + s32 uVar3; + s32 iVar4; + s32 uVar5; + s32 temp; if (controls->camera_target != NULL) { - iVar4 = (int)controls->scroll_x; + iVar4 = controls->scroll_x; temp = controls->camera_target->x.HALF.HI - 0x78; - uVar3 = iVar4 - temp; + uVar3 = controls->scroll_x - temp; if (uVar3 != 0) { - uVar1 = (u16)controls->scroll_x; - uVar5 = uVar1 & 7; - uVar6 = uVar1; - if ((int)uVar3 >= 1) { - uVar2 = controls->origin_x; - if ((int)uVar2 < iVar4) { - if ((int)controls->unk5 <= (int)uVar3) { + uVar5 = controls->scroll_x & 7; + if (uVar3 >= 1) { + if (controls->origin_x < controls->scroll_x) { + if (controls->unk5 <= uVar3) { uVar3 = controls->unk5; - controls->scroll_flags = controls->scroll_flags | 4; + controls->scroll_flags |= 4; } - controls->scroll_x = uVar6 - uVar3; - if ((int)((uVar5)-uVar3) < 1) { + controls->scroll_x = controls->scroll_x - uVar3; + if (uVar5 - uVar3 < 1) { gUpdateVisibleTiles = 1; } - if ((int)uVar2 >= (int)controls->scroll_x) { - controls->scroll_x = (s16)uVar2; + if (controls->origin_x >= controls->scroll_x) { + controls->scroll_x = controls->origin_x; } } } else { - uVar2 = (controls->origin_x + controls->width) - 0xf0; - if (iVar4 < (int)uVar2) { - if ((int)-controls->unk5 >= (int)uVar3) { + uVar2 = controls->origin_x + controls->width - 0xf0; + if (controls->scroll_x < uVar2) { + if (-controls->unk5 >= uVar3) { uVar3 = -controls->unk5; controls->scroll_flags |= 4; } - controls->scroll_x = uVar1 - (short)uVar3; - if (7 < (int)((uVar5)-uVar3)) { + controls->scroll_x -= uVar3; + if (uVar5 - uVar3 > 7) { gUpdateVisibleTiles = 1; } - if ((int)controls->scroll_x >= (int)uVar2) { - controls->scroll_x = (s16)uVar2; + if (controls->scroll_x >= uVar2) { + controls->scroll_x = uVar2; } } } } - iVar4 = (int)controls->scroll_y; + iVar4 = controls->scroll_y; temp = controls->camera_target->y.HALF.HI - 0x50; - uVar3 = iVar4 - (temp); + uVar3 = controls->scroll_y - (temp); if (uVar3 != 0) { - uVar1 = (u16)controls->scroll_y; - uVar5 = uVar1 & 7; - uVar6 = uVar1; - if ((int)uVar3 >= 1) { - uVar2 = temp2 = (u16)controls->origin_y; - if ((int)uVar2 < iVar4) { - if ((int)controls->unk5 <= (int)uVar3) { + uVar5 = controls->scroll_y & 7; + if (uVar3 >= 1) { + if (controls->origin_y < controls->scroll_y) { + if (controls->unk5 <= uVar3) { uVar3 = controls->unk5; controls->scroll_flags |= 4; } - controls->scroll_y = uVar6 - uVar3; - if ((int)((uVar5)-uVar3) < 1) { + controls->scroll_y = controls->scroll_y - uVar3; + if (uVar5 - uVar3 < 1) { gUpdateVisibleTiles = 1; } - if ((int)uVar2 >= (int)controls->scroll_y) { - controls->scroll_y = (s16)uVar2; + if (controls->origin_y >= controls->scroll_y) { + controls->scroll_y = controls->origin_y; } } } else { - uVar2 = (controls->origin_y + controls->height) - DISPLAY_HEIGHT; - if (iVar4 < (int)uVar2) { - if ((int)-controls->unk5 >= (int)uVar3) { + uVar2 = controls->origin_y + controls->height - DISPLAY_HEIGHT; + if (controls->scroll_y < uVar2) { + if (-controls->unk5 >= uVar3) { uVar3 = -controls->unk5; - controls->scroll_flags = controls->scroll_flags | 4; + controls->scroll_flags |= 4; } - controls->scroll_y = uVar1 - (short)uVar3; - if (7 < (int)((uVar1 & 7) - uVar3)) { + controls->scroll_y -= uVar3; + if (uVar5 - uVar3 > 7) { gUpdateVisibleTiles = 1; } - if ((int)controls->scroll_y >= (int)uVar2) { - controls->scroll_y = (s16)uVar2; + if (controls->scroll_y >= uVar2) { + controls->scroll_y = uVar2; } } } @@ -176,7 +167,6 @@ NONMATCH("asm/non_matching/scroll/sub_0807FC7C.inc", void sub_0807FC7C(RoomContr } sub_08080BC4(); } -END_NONMATCH void sub_0807FDB0(RoomControls* controls) { static void (*const gUnk_0811E780[])(RoomControls*) = { diff --git a/src/ui.c b/src/ui.c index 613afa2e..cf68578d 100644 --- a/src/ui.c +++ b/src/ui.c @@ -11,6 +11,7 @@ extern void sub_0805ECEC(u32, u32, u32, u32); extern bool32 ItemIsBottle(u32); +extern u32 sub_08000E44(u32); typedef struct { u16 unk_0; @@ -669,7 +670,48 @@ void ButtonUIElement_Action0(UIElement* element) { sub_0801CAFC(element, element->type); } -ASM_FUNC("asm/non_matching/ui/ButtonUIElement_Action1.inc", void ButtonUIElement_Action1()) +void ButtonUIElement_Action1(UIElement* element) { + u32 MAX_MOVEMENT; + s32 y; + u32 y_diff; + s32 x; + u32 x_diff; + + MAX_MOVEMENT = (!element->type2) ? 4 : 8; + + if (element->type2 == 0 && (((gUnk_0200AF00.unk_1 >> element->type) & 1) || (gMessage.doTextBox & 0x7f) != 0)) { + y = (s16)gUnk_0200AF00.buttonY[element->type] - 0x28; + } else { + y = (s16)gUnk_0200AF00.buttonY[element->type]; + } + + y -= (s16)element->y; + y_diff = (y > 0) ? y : -y; + + if ((s32)MAX_MOVEMENT <= (s32)y_diff) { + y_diff = MAX_MOVEMENT; + } + + y_diff *= sub_08000E44(y); + + if (y_diff != 0) { + element->y += y_diff; + } + + x = (short)gUnk_0200AF00.buttonX[element->type]; + x -= (short)element->x; + x_diff = (x < 0) ? -x : x; + + if ((int)MAX_MOVEMENT <= (int)x_diff) { + x_diff = MAX_MOVEMENT; + } + + x_diff *= sub_08000E44(x); + + if (x_diff != 0) { + element->x += x_diff; + } +} u32 sub_0801CC80(UIElement* element) { u8 type = element->type;