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/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;