diff --git a/.gitattributes b/.gitattributes index 9e4fad21..3922803e 100644 --- a/.gitattributes +++ b/.gitattributes @@ -19,3 +19,5 @@ Makefile text eol=lf *.h linguist-language=C *.inc linguist-language=Assembly +data/** linguist-language=data +tools/** linguist-vendored diff --git a/.gitignore b/.gitignore index e3bb8d94..69ee3035 100644 --- a/.gitignore +++ b/.gitignore @@ -85,3 +85,4 @@ _Deparsed_XSubs.pm *.sna __pycache__ Info.plist +ctx.c diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1b8e5c60..d43217a5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -69,7 +69,7 @@ sub_08086284: @ 0x08086284 ldrh r2, [r0] adds r0, r4, #0 movs r3, #0 - bl sub_0805EC9C + bl SetAffineInfo pop {r4, pc} .align 2, 0 _080862B4: .4byte gUnk_08120668 @@ -119,10 +119,10 @@ Then, start translating the code to `src/evilSpirit.c`, bit by bit: ldrh r2, [r0] add r0, r4, #0 mov r3, #0 - bl sub_0805EC9C + bl SetAffineInfo ``` ```c - sub_0805EC9C(r0, *(u16 *)(r0 + 0x76), *(u16 *)(r0 + 0x7a), 0); + SetAffineInfo(r0, *(u16 *)(r0 + 0x76), *(u16 *)(r0 + 0x7a), 0); ``` --- ```asm @@ -151,7 +151,7 @@ Putting it all together, we get: void sub_08086284(u8 *r0) { gUnk_08120668[*(u8 *)(r0 + 0xc)](r0); *(u8 *)(r0 + 0x41) = 0; - sub_0805EC9C(r0, *(u16 *)(r0 + 0x76), *(u16 *)(r0 + 0x7a), 0); + SetAffineInfo(r0, *(u16 *)(r0 + 0x76), *(u16 *)(r0 + 0x7a), 0); return; } ``` @@ -217,7 +217,7 @@ Much better. void sub_08086284(Entity *r0) { gUnk_08120668[r0->action](r0); r0->bitfield = 0; - sub_0805EC9C(r0, r0->field_0x76.HWORD, r0->field_0x7a.HWORD, 0); + SetAffineInfo(r0, r0->field_0x76.HWORD, r0->field_0x7a.HWORD, 0); return; } ``` @@ -235,18 +235,18 @@ src/evilSpirit.c: In function `sub_08086284': src/evilSpirit.c:4: syntax error before `*' src/evilSpirit.c:5: `gUnk_08120668' undeclared (first use in this function) src/evilSpirit.c:5: (Each undeclared identifier is reported only once for each function it appears in.) -src/evilSpirit.c:7: warning: implicit declaration of function `sub_0805EC9C' +src/evilSpirit.c:7: warning: implicit declaration of function `SetAffineInfo' ``` -We got some errors. We need to tell the compiler what `gUnk_08120668`, `Entity`, and `sub_0805EC9C` are. +We got some errors. We need to tell the compiler what `gUnk_08120668`, `Entity`, and `SetAffineInfo` are. We know `r0` is an `Entity`, which is from `entity.h`. We can declare this above the function: ```c #include "entity.h" ``` -What about `gUnk_08120668` and `sub_0805EC9C`? +What about `gUnk_08120668` and `SetAffineInfo`? ```c -extern void sub_0805EC9C(); +extern void SetAffineInfo(); extern void (*gUnk_08120668[])(Entity *); ``` Now the compiler will look outside of this file for both of these. We don't have to set the size of `gUnk_08120668`, a function array, since it's size is irrelevant for now. @@ -258,13 +258,13 @@ Now our file looks like this: #include "global.h" #include "entity.h" -extern void sub_0805EC9C(); +extern void SetAffineInfo(); extern void (*gUnk_08120668[])(Entity *); void sub_08086284(Entity *r0) { gUnk_08120668[r0->action](r0); r0->bitfield = 0; - sub_0805EC9C(r0, r0->field_0x76.HWORD, r0->field_0x7a.HWORD, 0); + SetAffineInfo(r0, r0->field_0x76.HWORD, r0->field_0x7a.HWORD, 0); return; } ``` diff --git a/asm/beanstalkSubtask.s b/asm/beanstalkSubtask.s index 8086e86e..0d925e49 100644 --- a/asm/beanstalkSubtask.s +++ b/asm/beanstalkSubtask.s @@ -3181,7 +3181,7 @@ sub_0801AE44: @ 0x0801AE44 bl LoadRoomGfx _0801AE5A: bl sub_080809D4 - bl sub_080805F8 + bl UpdateIsDiggingCave ldr r0, _0801AEE4 @ =gRoomTransition adds r0, #0x2d ldrb r0, [r0] diff --git a/asm/code_08049D30.s b/asm/code_08049D30.s deleted file mode 100644 index a68192f5..00000000 --- a/asm/code_08049D30.s +++ /dev/null @@ -1,1120 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start UpdateRoomTracker -UpdateRoomTracker: @ 0x08049D30 - push {r4, r5, r6, lr} - ldr r1, _08049D58 @ =gUnk_020354B0 - ldr r0, _08049D5C @ =gRoomMemory - str r0, [r1] - adds r5, r1, #0 - ldr r6, _08049D60 @ =gRoomControls - ldr r4, _08049D64 @ =0x0000FFFF -_08049D3E: - ldr r3, [r5] - ldrh r0, [r3] - ldrh r2, [r6, #4] - adds r1, r4, #0 - ands r1, r0 - adds r0, r4, #0 - ands r0, r2 - cmp r1, r0 - bne _08049D68 - adds r0, r3, #0 - bl sub_08049DCC - b _08049D7C - .align 2, 0 -_08049D58: .4byte gUnk_020354B0 -_08049D5C: .4byte gRoomMemory -_08049D60: .4byte gRoomControls -_08049D64: .4byte 0x0000FFFF -_08049D68: - adds r1, r3, #0 - adds r1, #8 - str r1, [r5] - ldr r0, _08049D80 @ =gUnk_02024090 - cmp r1, r0 - blo _08049D3E - bl sub_08049D88 - ldr r1, _08049D84 @ =gUnk_020354B0 - str r0, [r1] -_08049D7C: - pop {r4, r5, r6, pc} - .align 2, 0 -_08049D80: .4byte gUnk_02024090 -_08049D84: .4byte gUnk_020354B0 - - thumb_func_start sub_08049D88 -sub_08049D88: @ 0x08049D88 - push {r4, r5, lr} - ldr r4, _08049DC0 @ =gRoomMemory - adds r1, r4, #0 - adds r1, #8 - ldr r3, _08049DC4 @ =gRoomControls - adds r2, r4, #0 - adds r2, #0x40 -_08049D96: - ldrh r0, [r1, #2] - ldrh r5, [r4, #2] - cmp r0, r5 - bls _08049DA0 - adds r4, r1, #0 -_08049DA0: - adds r1, #8 - cmp r1, r2 - blo _08049D96 - ldrb r0, [r3, #4] - movs r1, #0 - strb r0, [r4] - ldrb r0, [r3, #5] - strb r0, [r4, #1] - ldr r0, _08049DC8 @ =0x0000FFFF - strh r0, [r4, #2] - str r1, [r4, #4] - adds r0, r4, #0 - bl sub_08049DCC - adds r0, r4, #0 - pop {r4, r5, pc} - .align 2, 0 -_08049DC0: .4byte gRoomMemory -_08049DC4: .4byte gRoomControls -_08049DC8: .4byte 0x0000FFFF - - thumb_func_start sub_08049DCC -sub_08049DCC: @ 0x08049DCC - push {r4, lr} - adds r2, r0, #0 - ldr r1, _08049DF0 @ =gRoomMemory - adds r3, r1, #0 - adds r3, #0x40 -_08049DD6: - ldrh r0, [r1, #2] - ldrh r4, [r2, #2] - cmp r0, r4 - bhs _08049DE2 - adds r0, #1 - strh r0, [r1, #2] -_08049DE2: - adds r1, #8 - cmp r1, r3 - blo _08049DD6 - movs r0, #0 - strh r0, [r2, #2] - pop {r4, pc} - .align 2, 0 -_08049DF0: .4byte gRoomMemory - - thumb_func_start sub_08049DF4 -sub_08049DF4: @ 0x08049DF4 - push {lr} - adds r2, r0, #0 - ldr r0, _08049E10 @ =gUnk_020000B0 - ldr r0, [r0] - cmp r0, #0 - bne _08049E0C - ldr r1, _08049E14 @ =gUnk_080D3BE8 - lsls r0, r2, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 -_08049E0C: - pop {pc} - .align 2, 0 -_08049E10: .4byte gUnk_020000B0 -_08049E14: .4byte gUnk_080D3BE8 - - thumb_func_start sub_08049E18 -sub_08049E18: @ 0x08049E18 - push {lr} - ldr r1, _08049E38 @ =gPlayerState - adds r0, r1, #0 - adds r0, #0x3c - ldrb r0, [r0] - cmp r0, #0 - bne _08049E48 - ldr r0, [r1, #0x30] - ldr r1, _08049E3C @ =0x22189B75 - ands r0, r1 - cmp r0, #0 - bne _08049E48 - ldr r1, _08049E40 @ =gUnk_020000B0 - ldr r0, _08049E44 @ =gPlayerEntity - str r0, [r1] - b _08049E4A - .align 2, 0 -_08049E38: .4byte gPlayerState -_08049E3C: .4byte 0x22189B75 -_08049E40: .4byte gUnk_020000B0 -_08049E44: .4byte gPlayerEntity -_08049E48: - movs r0, #0 -_08049E4A: - pop {pc} - - thumb_func_start sub_08049E4C -sub_08049E4C: @ 0x08049E4C - push {lr} - ldr r1, _08049E6C @ =gPlayerState - adds r0, r1, #0 - adds r0, #0x3c - ldrb r0, [r0] - cmp r0, #0 - bne _08049E7C - ldr r0, [r1, #0x30] - ldr r1, _08049E70 @ =0x22189BF5 - ands r0, r1 - cmp r0, #0 - bne _08049E7C - ldr r1, _08049E74 @ =gUnk_020000B0 - ldr r0, _08049E78 @ =gPlayerEntity - str r0, [r1] - b _08049E7E - .align 2, 0 -_08049E6C: .4byte gPlayerState -_08049E70: .4byte 0x22189BF5 -_08049E74: .4byte gUnk_020000B0 -_08049E78: .4byte gPlayerEntity -_08049E7C: - movs r0, #0 -_08049E7E: - pop {pc} - - thumb_func_start sub_08049E80 -sub_08049E80: @ 0x08049E80 - push {lr} - ldr r1, _08049E9C @ =gPlayerState - adds r0, r1, #0 - adds r0, #0x3c - ldrb r0, [r0] - cmp r0, #0 - bne _08049E98 - ldr r0, [r1, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _08049EA0 -_08049E98: - movs r0, #0 - b _08049EA6 - .align 2, 0 -_08049E9C: .4byte gPlayerState -_08049EA0: - ldr r1, _08049EA8 @ =gUnk_020000B0 - ldr r0, _08049EAC @ =gPlayerEntity - str r0, [r1] -_08049EA6: - pop {pc} - .align 2, 0 -_08049EA8: .4byte gUnk_020000B0 -_08049EAC: .4byte gPlayerEntity - - thumb_func_start sub_08049EB0 -sub_08049EB0: @ 0x08049EB0 - push {lr} - ldr r1, _08049ED0 @ =gPlayerState - adds r0, r1, #0 - adds r0, #0x3c - ldrb r0, [r0] - cmp r0, #0 - bne _08049EE0 - ldr r0, [r1, #0x30] - ldr r1, _08049ED4 @ =0x00080190 - ands r0, r1 - cmp r0, #0 - bne _08049EE0 - ldr r1, _08049ED8 @ =gUnk_020000B0 - ldr r0, _08049EDC @ =gPlayerEntity - str r0, [r1] - b _08049EE2 - .align 2, 0 -_08049ED0: .4byte gPlayerState -_08049ED4: .4byte 0x00080190 -_08049ED8: .4byte gUnk_020000B0 -_08049EDC: .4byte gPlayerEntity -_08049EE0: - movs r0, #0 -_08049EE2: - pop {pc} - - thumb_func_start sub_08049EE4 -sub_08049EE4: @ 0x08049EE4 - push {r4, r5, lr} - mov ip, r0 - adds r0, #0x70 - mov r1, ip - adds r1, #0x6e - ldrb r2, [r1] - lsls r2, r2, #2 - ldrh r0, [r0] - adds r2, r2, r0 - lsls r2, r2, #0x10 - lsrs r2, r2, #0x10 - adds r1, #4 - mov r0, ip - adds r0, #0x6f - ldrb r3, [r0] - lsls r3, r3, #2 - ldrh r1, [r1] - adds r3, r3, r1 - lsls r3, r3, #0x10 - lsrs r3, r3, #0x10 - mov r1, ip - movs r4, #0x2e - ldrsh r0, [r1, r4] - movs r5, #0x32 - ldrsh r1, [r1, r5] - bl CalculateDirectionTo - pop {r4, r5, pc} - - thumb_func_start sub_08049F1C -sub_08049F1C: @ 0x08049F1C - push {r4, r5, lr} - adds r4, r0, #0 - adds r3, r1, #0 - adds r5, r2, #0 - adds r0, #0x38 - adds r1, #0x38 - ldrb r2, [r0] - ldrb r0, [r1] - ands r0, r2 - cmp r0, #0 - beq _08049F5E - movs r0, #0x2e - ldrsh r2, [r3, r0] - movs r1, #0x2e - ldrsh r0, [r4, r1] - subs r2, r2, r0 - movs r0, #0x32 - ldrsh r1, [r3, r0] - movs r3, #0x32 - ldrsh r0, [r4, r3] - subs r1, r1, r0 - adds r3, r5, #0 - muls r3, r5, r3 - adds r0, r2, #0 - muls r0, r2, r0 - adds r2, r1, #0 - muls r2, r1, r2 - adds r1, r2, #0 - adds r0, r0, r1 - cmp r3, r0 - blt _08049F5E - movs r0, #1 - b _08049F60 -_08049F5E: - movs r0, #0 -_08049F60: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start PlayerInRange -PlayerInRange: @ 0x08049F64 - push {r4, r5, lr} - adds r4, r0, #0 - adds r0, r1, #0 - adds r5, r2, #0 - bl sub_08049DF4 - adds r1, r0, #0 - cmp r1, #0 - beq _08049F80 - adds r0, r4, #0 - adds r2, r5, #0 - bl sub_08049F1C - b _08049F82 -_08049F80: - movs r0, #0 -_08049F82: - pop {r4, r5, pc} - - thumb_func_start sub_08049F84 -sub_08049F84: @ 0x08049F84 - push {r4, lr} - adds r4, r0, #0 - adds r0, r1, #0 - bl sub_08049DF4 - adds r1, r0, #0 - cmp r1, #0 - beq _08049F9C - adds r0, r4, #0 - bl GetFacingDirection - b _08049F9E -_08049F9C: - movs r0, #0xff -_08049F9E: - pop {r4, pc} - - thumb_func_start sub_08049FA0 -sub_08049FA0: @ 0x08049FA0 - push {lr} - adds r3, r0, #0 - adds r0, #0x6e - ldrb r2, [r0] - lsls r2, r2, #3 - movs r1, #0x2e - ldrsh r0, [r3, r1] - adds r1, r3, #0 - adds r1, #0x70 - ldrh r1, [r1] - subs r0, r0, r1 - cmp r2, r0 - blo _08049FD6 - adds r0, r3, #0 - adds r0, #0x6f - ldrb r2, [r0] - lsls r2, r2, #3 - movs r1, #0x32 - ldrsh r0, [r3, r1] - adds r1, r3, #0 - adds r1, #0x72 - ldrh r1, [r1] - subs r0, r0, r1 - cmp r2, r0 - blo _08049FD6 - movs r0, #1 - b _08049FD8 -_08049FD6: - movs r0, #0 -_08049FD8: - pop {pc} - .align 2, 0 - - thumb_func_start sub_08049FDC -sub_08049FDC: @ 0x08049FDC - push {r4, lr} - adds r4, r0, #0 - adds r0, r1, #0 - bl sub_08049DF4 - adds r3, r0, #0 - cmp r3, #0 - beq _0804A020 - adds r0, r4, #0 - adds r0, #0x6e - ldrb r2, [r0] - lsls r2, r2, #3 - movs r1, #0x2e - ldrsh r0, [r3, r1] - adds r1, r4, #0 - adds r1, #0x70 - ldrh r1, [r1] - subs r0, r0, r1 - cmp r2, r0 - blo _0804A020 - adds r0, r4, #0 - adds r0, #0x6f - ldrb r2, [r0] - lsls r2, r2, #3 - movs r1, #0x32 - ldrsh r0, [r3, r1] - adds r1, r4, #0 - adds r1, #0x72 - ldrh r1, [r1] - subs r0, r0, r1 - cmp r2, r0 - blo _0804A020 - movs r0, #1 - b _0804A022 -_0804A020: - movs r0, #0 -_0804A022: - pop {r4, pc} - - thumb_func_start sub_0804A024 -sub_0804A024: @ 0x0804A024 - push {r4, r5, lr} - adds r4, r0, #0 - adds r0, r1, #0 - adds r5, r2, #0 - bl sub_08049DF4 - adds r1, r0, #0 - cmp r1, #0 - beq _0804A040 - adds r0, r4, #0 - adds r2, r5, #0 - bl sub_0804A044 - b _0804A042 -_0804A040: - movs r0, #0xff -_0804A042: - pop {r4, r5, pc} - - thumb_func_start sub_0804A044 -sub_0804A044: @ 0x0804A044 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #4 - adds r7, r0, #0 - mov r8, r1 - mov r0, r8 - adds r0, #0x38 - movs r1, #0x38 - adds r1, r1, r7 - mov sl, r1 - ldrb r1, [r0] - mov r3, sl - ldrb r0, [r3] - ands r0, r1 - cmp r0, #0 - beq _0804A15A - movs r5, #0 - mov r0, r8 - movs r3, #0x2e - ldrsh r1, [r0, r3] - ldr r0, [r0, #0x48] - mov ip, r0 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r1, r1, r0 - movs r3, #0x2e - ldrsh r0, [r7, r3] - subs r1, r1, r0 - ldr r4, [r7, #0x48] - movs r0, #0 - ldrsb r0, [r4, r0] - subs r6, r1, r0 - lsrs r3, r2, #1 - adds r0, r6, r3 - cmp r2, r0 - blo _0804A096 - movs r5, #1 -_0804A096: - lsls r0, r2, #1 - mov sb, r0 - adds r0, r6, r2 - cmp sb, r0 - blo _0804A0A4 - movs r0, #2 - orrs r5, r0 -_0804A0A4: - mov r1, r8 - movs r0, #0x32 - ldrsh r1, [r1, r0] - str r1, [sp] - mov r1, ip - ldrb r1, [r1, #1] - lsls r1, r1, #0x18 - asrs r1, r1, #0x18 - mov ip, r1 - ldr r0, [sp] - add r0, ip - str r0, [sp] - movs r0, #0x32 - ldrsh r1, [r7, r0] - ldr r0, [sp] - subs r0, r0, r1 - movs r1, #1 - ldrsb r1, [r4, r1] - subs r4, r0, r1 - adds r0, r4, r3 - cmp r2, r0 - blo _0804A0D4 - movs r0, #4 - orrs r5, r0 -_0804A0D4: - adds r0, r4, r2 - cmp sb, r0 - blo _0804A0DE - movs r0, #8 - orrs r5, r0 -_0804A0DE: - cmp r5, #0 - beq _0804A15A - movs r0, #5 - ands r0, r5 - cmp r0, #0xa - beq _0804A15A - mov r1, sl - ldrb r0, [r1] - bl GetLayerByIndex - mov sb, r0 - cmp r6, #0 - bge _0804A0FA - rsbs r6, r6, #0 -_0804A0FA: - cmp r4, #0 - bge _0804A100 - rsbs r4, r4, #0 -_0804A100: - cmp r6, r4 - bge _0804A12E - movs r0, #1 - ands r0, r5 - cmp r0, #0 - beq _0804A11A - adds r0, r7, #0 - mov r1, r8 - mov r2, sb - bl sub_0804A168 - cmp r0, #0xff - bne _0804A15C -_0804A11A: - movs r0, #4 - ands r5, r0 - cmp r5, #0 - beq _0804A15A - adds r0, r7, #0 - mov r1, r8 - mov r2, sb - bl sub_0804A318 - b _0804A156 -_0804A12E: - movs r0, #4 - ands r0, r5 - cmp r0, #0 - beq _0804A144 - adds r0, r7, #0 - mov r1, r8 - mov r2, sb - bl sub_0804A318 - cmp r0, #0xff - bne _0804A15C -_0804A144: - movs r0, #1 - ands r5, r0 - cmp r5, #0 - beq _0804A15A - adds r0, r7, #0 - mov r1, r8 - mov r2, sb - bl sub_0804A168 -_0804A156: - cmp r0, #0xff - bne _0804A15C -_0804A15A: - movs r0, #0xff -_0804A15C: - add sp, #4 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_0804A168 -sub_0804A168: @ 0x0804A168 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #4 - adds r4, r0, #0 - mov sb, r1 - adds r5, r2, #0 - movs r0, #0x32 - ldrsh r1, [r1, r0] - movs r2, #0x32 - ldrsh r0, [r4, r2] - cmp r1, r0 - ble _0804A248 - movs r3, #0x2e - ldrsh r0, [r4, r3] - subs r2, r0, #4 - movs r0, #0xf - mov sl, r0 - adds r0, r2, #0 - mov r1, sl - ands r0, r1 - movs r7, #5 - cmp r0, #7 - bhi _0804A19E - movs r7, #0xa -_0804A19E: - ldr r3, _0804A240 @ =gRoomControls - mov r8, r3 - ldrh r1, [r3, #6] - subs r1, r2, r1 - lsrs r1, r1, #4 - movs r6, #0x3f - ands r1, r6 - movs r2, #0x32 - ldrsh r0, [r4, r2] - ldrh r3, [r3, #8] - mov ip, r3 - mov r2, ip - subs r2, #0xa - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r6 - lsls r0, r0, #6 - orrs r0, r1 - mov r2, sb - movs r3, #0x32 - ldrsh r2, [r2, r3] - mov r3, ip - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r6 - lsls r2, r2, #6 - orrs r1, r2 - ldr r2, _0804A244 @ =0x00002004 - adds r0, r0, r2 - adds r0, r5, r0 - adds r1, r1, r2 - adds r1, r5, r1 - movs r2, #0x40 - adds r3, r7, #0 - bl sub_0804A4BC - cmp r0, #0 - bne _0804A1EC - b _0804A308 -_0804A1EC: - movs r1, #0x2e - ldrsh r0, [r4, r1] - adds r2, r0, #4 - mov r3, sl - eors r7, r3 - mov r0, r8 - ldrh r1, [r0, #6] - subs r1, r2, r1 - lsrs r1, r1, #4 - ands r1, r6 - movs r2, #0x32 - ldrsh r0, [r4, r2] - mov r4, r8 - ldrh r3, [r4, #8] - adds r2, r3, #0 - subs r2, #0xa - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r6 - lsls r0, r0, #6 - orrs r0, r1 - mov r2, sb - movs r4, #0x32 - ldrsh r2, [r2, r4] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r6 - lsls r2, r2, #6 - orrs r1, r2 - ldr r2, _0804A244 @ =0x00002004 - adds r0, r0, r2 - adds r0, r5, r0 - adds r1, r1, r2 - adds r1, r5, r1 - movs r2, #0x40 - adds r3, r7, #0 - bl sub_0804A4BC - cmp r0, #0 - beq _0804A308 - movs r0, #0x10 - b _0804A30A - .align 2, 0 -_0804A240: .4byte gRoomControls -_0804A244: .4byte 0x00002004 -_0804A248: - movs r3, #0x2e - ldrsh r0, [r4, r3] - subs r2, r0, #4 - adds r0, r2, #0 - movs r1, #0xf - ands r0, r1 - movs r7, #5 - cmp r0, #7 - bhi _0804A25C - movs r7, #0xa -_0804A25C: - ldr r3, _0804A300 @ =gRoomControls - mov r8, r3 - ldrh r1, [r3, #6] - subs r1, r2, r1 - lsrs r1, r1, #4 - movs r6, #0x3f - ands r1, r6 - movs r2, #0x32 - ldrsh r0, [r4, r2] - ldrh r3, [r3, #8] - mov sl, r3 - mov r2, sl - adds r2, #0xa - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r6 - lsls r0, r0, #6 - orrs r0, r1 - mov r2, sb - movs r3, #0x32 - ldrsh r2, [r2, r3] - mov r3, sl - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r6 - lsls r2, r2, #6 - orrs r1, r2 - ldr r2, _0804A304 @ =0x00002004 - adds r0, r0, r2 - adds r0, r5, r0 - adds r1, r1, r2 - adds r1, r5, r1 - movs r2, #0x40 - rsbs r2, r2, #0 - mov sl, r2 - adds r3, r7, #0 - bl sub_0804A4BC - cmp r0, #0 - beq _0804A308 - movs r3, #0x2e - ldrsh r0, [r4, r3] - adds r2, r0, #4 - movs r0, #0xf - eors r7, r0 - mov r3, r8 - ldrh r1, [r3, #6] - subs r1, r2, r1 - lsrs r1, r1, #4 - ands r1, r6 - movs r2, #0x32 - ldrsh r0, [r4, r2] - ldrh r3, [r3, #8] - adds r2, r3, #0 - adds r2, #0xa - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r6 - lsls r0, r0, #6 - orrs r0, r1 - mov r4, sb - movs r2, #0x32 - ldrsh r4, [r4, r2] - subs r2, r4, r3 - asrs r2, r2, #4 - ands r2, r6 - lsls r2, r2, #6 - orrs r1, r2 - ldr r3, _0804A304 @ =0x00002004 - adds r0, r0, r3 - adds r0, r5, r0 - adds r1, r1, r3 - adds r1, r5, r1 - mov r2, sl - adds r3, r7, #0 - bl sub_0804A4BC - cmp r0, #0 - beq _0804A308 - movs r0, #0 - b _0804A30A - .align 2, 0 -_0804A300: .4byte gRoomControls -_0804A304: .4byte 0x00002004 -_0804A308: - movs r0, #0xff -_0804A30A: - add sp, #4 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_0804A318 -sub_0804A318: @ 0x0804A318 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - adds r5, r0, #0 - mov sl, r1 - adds r6, r2, #0 - movs r0, #0x2e - ldrsh r1, [r1, r0] - movs r2, #0x2e - ldrsh r0, [r5, r2] - cmp r1, r0 - ble _0804A3F0 - movs r4, #0x32 - ldrsh r0, [r5, r4] - subs r4, r0, #4 - adds r0, r4, #0 - movs r1, #0xf - ands r0, r1 - movs r2, #3 - mov r8, r2 - cmp r0, #7 - bhi _0804A34C - movs r0, #0xc - mov r8, r0 -_0804A34C: - movs r1, #0x2e - ldrsh r0, [r5, r1] - ldr r2, _0804A3E8 @ =gRoomControls - mov sb, r2 - ldrh r3, [r2, #6] - adds r1, r3, #0 - subs r1, #0xa - subs r0, r0, r1 - asrs r0, r0, #4 - movs r7, #0x3f - ands r0, r7 - ldrh r2, [r2, #8] - subs r2, r4, r2 - lsrs r2, r2, #4 - ands r2, r7 - lsls r2, r2, #6 - orrs r0, r2 - mov r4, sl - movs r1, #0x2e - ldrsh r4, [r4, r1] - subs r1, r4, r3 - asrs r1, r1, #4 - ands r1, r7 - orrs r1, r2 - ldr r2, _0804A3EC @ =0x00002004 - adds r0, r0, r2 - adds r0, r6, r0 - adds r1, r1, r2 - adds r1, r6, r1 - movs r2, #1 - mov r3, r8 - bl sub_0804A4BC - cmp r0, #0 - bne _0804A394 - b _0804A4B0 -_0804A394: - movs r2, #0x32 - ldrsh r0, [r5, r2] - adds r4, r0, #4 - mov r0, r8 - movs r1, #0xf - eors r0, r1 - mov r8, r0 - movs r2, #0x2e - ldrsh r0, [r5, r2] - mov r5, sb - ldrh r3, [r5, #6] - adds r1, r3, #0 - subs r1, #0xa - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r7 - ldrh r2, [r5, #8] - subs r2, r4, r2 - lsrs r2, r2, #4 - ands r2, r7 - lsls r2, r2, #6 - orrs r0, r2 - mov r4, sl - movs r5, #0x2e - ldrsh r1, [r4, r5] - subs r1, r1, r3 - asrs r1, r1, #4 - ands r1, r7 - orrs r1, r2 - ldr r2, _0804A3EC @ =0x00002004 - adds r0, r0, r2 - adds r0, r6, r0 - adds r1, r1, r2 - adds r1, r6, r1 - movs r2, #1 - mov r3, r8 - bl sub_0804A4BC - cmp r0, #0 - beq _0804A4B0 - movs r0, #8 - b _0804A4B2 - .align 2, 0 -_0804A3E8: .4byte gRoomControls -_0804A3EC: .4byte 0x00002004 -_0804A3F0: - movs r4, #0x32 - ldrsh r0, [r5, r4] - subs r4, r0, #4 - adds r0, r4, #0 - movs r1, #0xf - ands r0, r1 - movs r2, #3 - mov r8, r2 - cmp r0, #7 - bhi _0804A408 - movs r0, #0xc - mov r8, r0 -_0804A408: - movs r1, #0x2e - ldrsh r0, [r5, r1] - ldr r2, _0804A4A8 @ =gRoomControls - mov sb, r2 - ldrh r3, [r2, #6] - adds r1, r3, #0 - adds r1, #0xa - subs r0, r0, r1 - asrs r0, r0, #4 - movs r7, #0x3f - ands r0, r7 - ldrh r2, [r2, #8] - subs r2, r4, r2 - lsrs r2, r2, #4 - ands r2, r7 - lsls r2, r2, #6 - orrs r0, r2 - mov r4, sl - movs r1, #0x2e - ldrsh r4, [r4, r1] - subs r1, r4, r3 - asrs r1, r1, #4 - ands r1, r7 - orrs r1, r2 - ldr r2, _0804A4AC @ =0x00002004 - adds r0, r0, r2 - adds r0, r6, r0 - adds r1, r1, r2 - adds r1, r6, r1 - movs r2, #1 - rsbs r2, r2, #0 - mov r3, r8 - bl sub_0804A4BC - cmp r0, #0 - beq _0804A4B0 - movs r2, #0x32 - ldrsh r0, [r5, r2] - adds r4, r0, #4 - mov r0, r8 - movs r1, #0xf - eors r0, r1 - mov r8, r0 - movs r2, #0x2e - ldrsh r0, [r5, r2] - mov r5, sb - ldrh r3, [r5, #6] - adds r1, r3, #0 - adds r1, #0xa - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r7 - ldrh r2, [r5, #8] - subs r2, r4, r2 - lsrs r2, r2, #4 - ands r2, r7 - lsls r2, r2, #6 - orrs r0, r2 - mov r4, sl - movs r5, #0x2e - ldrsh r1, [r4, r5] - subs r1, r1, r3 - asrs r1, r1, #4 - ands r1, r7 - orrs r1, r2 - ldr r2, _0804A4AC @ =0x00002004 - adds r0, r0, r2 - adds r0, r6, r0 - adds r1, r1, r2 - adds r1, r6, r1 - movs r2, #1 - rsbs r2, r2, #0 - mov r3, r8 - bl sub_0804A4BC - cmp r0, #0 - beq _0804A4B0 - movs r0, #0x18 - b _0804A4B2 - .align 2, 0 -_0804A4A8: .4byte gRoomControls -_0804A4AC: .4byte 0x00002004 -_0804A4B0: - movs r0, #0xff -_0804A4B2: - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_0804A4BC -sub_0804A4BC: @ 0x0804A4BC - push {r4, lr} - adds r4, r0, #0 - cmp r4, r1 - beq _0804A4DE -_0804A4C4: - ldrb r0, [r4] - cmp r0, #0 - beq _0804A4D8 - cmp r0, #0xf - bhi _0804A4D4 - ands r0, r3 - cmp r0, #0 - beq _0804A4D8 -_0804A4D4: - movs r0, #0 - b _0804A4E0 -_0804A4D8: - adds r4, r4, r2 - cmp r4, r1 - bne _0804A4C4 -_0804A4DE: - movs r0, #1 -_0804A4E0: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0804A4E4 -sub_0804A4E4: @ 0x0804A4E4 - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - adds r6, r1, #0 - adds r7, r5, #0 - adds r7, #0x6d - ldrb r1, [r7] - movs r4, #0x40 - adds r0, r4, #0 - ands r0, r1 - movs r1, #4 - adds r2, r6, #0 - adds r2, #0x6d - orrs r0, r1 - strb r0, [r2] - adds r0, r5, #0 - adds r0, #0x6c - ldrb r1, [r0] - adds r0, r6, #0 - adds r0, #0x6c - strb r1, [r0] - adds r0, r5, #0 - adds r0, #0x70 - ldrh r1, [r0] - adds r0, r6, #0 - adds r0, #0x70 - strh r1, [r0] - adds r0, r5, #0 - adds r0, #0x72 - ldrh r0, [r0] - adds r1, r6, #0 - adds r1, #0x72 - strh r0, [r1] - adds r0, r5, #0 - adds r0, #0x6e - ldrb r0, [r0] - subs r1, #4 - strb r0, [r1] - adds r0, r5, #0 - adds r0, #0x6f - ldrb r0, [r0] - adds r1, #1 - strb r0, [r1] - adds r0, r5, #0 - adds r1, r6, #0 - bl CopyPositionAndSpriteOffset - ldrb r0, [r7] - ands r4, r0 - cmp r4, #0 - beq _0804A550 - adds r0, r5, #0 - adds r1, r6, #0 - bl ReplaceMonitoredEntity -_0804A550: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - - - - diff --git a/asm/enemy/chuchuBoss.s b/asm/enemy/chuchuBoss.s index c14282fe..0cf40833 100644 --- a/asm/enemy/chuchuBoss.s +++ b/asm/enemy/chuchuBoss.s @@ -488,7 +488,7 @@ sub_08026060: @ 0x08026060 adds r0, #4 ldrh r3, [r0] adds r0, r4, #0 - bl sub_0805EC9C + bl SetAffineInfo pop {r4, pc} .align 2, 0 _0802608C: .4byte gUnk_080CC1C8 diff --git a/asm/enemy/flyingPot.s b/asm/enemy/flyingPot.s deleted file mode 100644 index 5650403a..00000000 --- a/asm/enemy/flyingPot.s +++ /dev/null @@ -1,560 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start FlyingPot -FlyingPot: @ 0x0803704C - push {r4, r5, lr} - adds r5, r0, #0 - bl sub_080012DC - adds r1, r0, #0 - cmp r1, #0 - beq _08037070 - ldr r0, _0803706C @ =gUnk_080012C8 - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r5, #0 - bl _call_via_r1 - b _08037084 - .align 2, 0 -_0803706C: .4byte gUnk_080012C8 -_08037070: - ldr r4, _08037088 @ =gUnk_080CF244 - adds r0, r5, #0 - bl GetNextFunction - lsls r0, r0, #2 - adds r0, r0, r4 - ldr r1, [r0] - adds r0, r5, #0 - bl _call_via_r1 -_08037084: - pop {r4, r5, pc} - .align 2, 0 -_08037088: .4byte gUnk_080CF244 - - thumb_func_start sub_0803708C -sub_0803708C: @ 0x0803708C - push {lr} - ldr r2, _080370A0 @ =gUnk_080CF25C - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_080370A0: .4byte gUnk_080CF25C - - thumb_func_start sub_080370A4 -sub_080370A4: @ 0x080370A4 - push {r4, r5, r6, lr} - adds r5, r0, #0 - bl sub_08037418 - adds r0, r5, #0 - adds r0, #0x41 - ldrb r0, [r0] - cmp r0, #0x9d - bne _08037110 - movs r0, #6 - strb r0, [r5, #0xc] - ldrb r1, [r5, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r5, #0x10] - movs r0, #0xa8 - lsls r0, r0, #0xa - str r0, [r5, #0x20] - adds r2, r5, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #8 - orrs r0, r1 - strb r0, [r2] - adds r0, r5, #0 - adds r0, #0x74 - ldrh r0, [r0] - movs r2, #0x2e - ldrsh r1, [r5, r2] - ldr r3, _0803710C @ =gRoomControls - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r4, #0x3f - ands r1, r4 - movs r6, #0x32 - ldrsh r2, [r5, r6] - ldrh r3, [r3, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - adds r2, r5, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl SetTile - b _0803711E - .align 2, 0 -_0803710C: .4byte gRoomControls -_08037110: - movs r1, #0x36 - ldrsh r0, [r5, r1] - cmp r0, #0 - beq _0803711E - adds r0, r5, #0 - bl sub_08037408 -_0803711E: - ldr r1, _08037128 @ =gUnk_080CF244 - adds r0, r5, #0 - bl EnemyFunctionHandlerAfterCollision - pop {r4, r5, r6, pc} - .align 2, 0 -_08037128: .4byte gUnk_080CF244 - - thumb_func_start sub_0803712C -sub_0803712C: @ 0x0803712C - push {lr} - ldr r2, _08037140 @ =gUnk_080CF278 - ldrb r1, [r0, #0xd] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08037140: .4byte gUnk_080CF278 - - thumb_func_start sub_08037144 -sub_08037144: @ 0x08037144 - push {r4, lr} - adds r4, r0, #0 - bl sub_08037418 - movs r1, #0 - movs r0, #1 - strb r0, [r4, #0xd] - strb r1, [r4, #0xe] - movs r0, #0x30 - strb r0, [r4, #0x1d] - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803715C -sub_0803715C: @ 0x0803715C - push {r4, lr} - adds r4, r0, #0 - bl sub_08037418 - adds r0, r4, #0 - bl sub_0806F520 - cmp r0, #0 - beq _08037176 - adds r0, r4, #0 - bl sub_0806F4E8 - b _0803718A -_08037176: - adds r1, r4, #0 - adds r1, #0x62 - strb r0, [r1] - movs r1, #0x36 - ldrsh r0, [r4, r1] - cmp r0, #0 - beq _0803718A - adds r0, r4, #0 - bl sub_08037408 -_0803718A: - pop {r4, pc} - - thumb_func_start sub_0803718C -sub_0803718C: @ 0x0803718C - push {r4, r5, r6, lr} - adds r5, r0, #0 - ldrb r4, [r5, #0xe] - cmp r4, #0 - bne _080371DA - bl sub_08037418 - movs r0, #1 - strb r0, [r5, #0xe] - ldrb r1, [r5, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r5, #0x10] - adds r0, r5, #0 - adds r0, #0x62 - strb r4, [r0] - adds r0, #0x12 - ldrh r0, [r0] - movs r2, #0x2e - ldrsh r1, [r5, r2] - ldr r3, _080371EC @ =gRoomControls - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r4, #0x3f - ands r1, r4 - movs r6, #0x32 - ldrsh r2, [r5, r6] - ldrh r3, [r3, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - adds r2, r5, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl SetTile -_080371DA: - adds r0, r5, #0 - bl sub_0806F520 - cmp r0, #0 - beq _080371F0 - adds r0, r5, #0 - bl sub_0806F3E4 - b _080371F6 - .align 2, 0 -_080371EC: .4byte gRoomControls -_080371F0: - adds r0, r5, #0 - bl sub_08037408 -_080371F6: - pop {r4, r5, r6, pc} - - thumb_func_start sub_080371F8 -sub_080371F8: @ 0x080371F8 - push {lr} - adds r2, r0, #0 - ldr r0, _08037210 @ =gPlayerState - ldrb r1, [r0, #0x1c] - movs r0, #0xf - ands r0, r1 - cmp r0, #0 - bne _0803720E - adds r0, r2, #0 - bl sub_08037408 -_0803720E: - pop {pc} - .align 2, 0 -_08037210: .4byte gPlayerState - - thumb_func_start nullsub_161 -nullsub_161: @ 0x08037214 - bx lr - .align 2, 0 - - thumb_func_start sub_08037218 -sub_08037218: @ 0x08037218 - push {lr} - bl sub_08037408 - pop {pc} - - thumb_func_start sub_08037220 -sub_08037220: @ 0x08037220 - push {r4, r5, r6, lr} - adds r5, r0, #0 - movs r0, #1 - strb r0, [r5, #0xc] - movs r0, #2 - strb r0, [r5, #0x1c] - ldrh r0, [r5, #0x32] - adds r0, #3 - strh r0, [r5, #0x32] - movs r0, #0x2e - ldrsh r4, [r5, r0] - ldr r1, _0803727C @ =gRoomControls - ldrh r0, [r1, #6] - subs r4, r4, r0 - asrs r4, r4, #4 - movs r2, #0x3f - ands r4, r2 - movs r3, #0x32 - ldrsh r0, [r5, r3] - ldrh r1, [r1, #8] - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r2 - lsls r0, r0, #6 - orrs r4, r0 - adds r6, r5, #0 - adds r6, #0x38 - ldrb r1, [r6] - adds r0, r4, #0 - bl GetTileIndex - adds r1, r5, #0 - adds r1, #0x74 - strh r0, [r1] - movs r0, #0x80 - lsls r0, r0, #7 - ldrb r2, [r6] - adds r1, r4, #0 - bl SetTile - adds r0, r5, #0 - movs r1, #5 - bl InitializeAnimation - pop {r4, r5, r6, pc} - .align 2, 0 -_0803727C: .4byte gRoomControls - - thumb_func_start sub_08037280 -sub_08037280: @ 0x08037280 - push {r4, r5, r6, lr} - adds r5, r0, #0 - bl sub_08037418 - adds r0, r5, #0 - bl GetTileTypeByEntity - movs r1, #0x80 - lsls r1, r1, #7 - cmp r0, r1 - beq _080372CC - adds r0, r5, #0 - adds r0, #0x74 - ldrh r0, [r0] - movs r2, #0x2e - ldrsh r1, [r5, r2] - ldr r3, _080372E4 @ =gRoomControls - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r4, #0x3f - ands r1, r4 - movs r6, #0x32 - ldrsh r2, [r5, r6] - ldrh r3, [r3, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - adds r2, r5, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl SetTile - adds r0, r5, #0 - bl sub_08037408 -_080372CC: - adds r0, r5, #0 - movs r1, #1 - movs r2, #0x40 - bl PlayerInRange - cmp r0, #0 - beq _080372E2 - movs r0, #2 - strb r0, [r5, #0xc] - movs r0, #0x1e - strb r0, [r5, #0xe] -_080372E2: - pop {r4, r5, r6, pc} - .align 2, 0 -_080372E4: .4byte gRoomControls - - thumb_func_start sub_080372E8 -sub_080372E8: @ 0x080372E8 - push {r4, r5, r6, lr} - adds r5, r0, #0 - bl sub_08037418 - adds r3, r5, #0 - adds r3, #0x62 - ldr r2, _08037370 @ =gUnk_080CF290 - ldrb r1, [r5, #0xe] - movs r6, #3 - adds r0, r6, #0 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - ldrb r1, [r3] - adds r0, r0, r1 - strb r0, [r3] - ldrb r0, [r5, #0xe] - subs r0, #1 - strb r0, [r5, #0xe] - lsls r0, r0, #0x18 - lsrs r4, r0, #0x18 - cmp r4, #0 - bne _0803736E - strb r6, [r5, #0xc] - adds r2, r5, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #8 - orrs r0, r1 - strb r0, [r2] - strb r4, [r3] - adds r1, r5, #0 - adds r1, #0x3f - movs r0, #0xa0 - strb r0, [r1] - subs r1, #4 - movs r0, #0xf - strb r0, [r1] - ldr r0, _08037374 @ =gUnk_080FD34C - str r0, [r5, #0x48] - adds r0, r5, #0 - adds r0, #0x74 - ldrh r0, [r0] - movs r2, #0x2e - ldrsh r1, [r5, r2] - ldr r3, _08037378 @ =gRoomControls - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r4, #0x3f - ands r1, r4 - movs r6, #0x32 - ldrsh r2, [r5, r6] - ldrh r3, [r3, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - adds r2, r5, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl SetTile -_0803736E: - pop {r4, r5, r6, pc} - .align 2, 0 -_08037370: .4byte gUnk_080CF290 -_08037374: .4byte gUnk_080FD34C -_08037378: .4byte gRoomControls - - thumb_func_start sub_0803737C -sub_0803737C: @ 0x0803737C - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x34] - ldr r1, _080373A8 @ =0xFFFF0000 - adds r0, r0, r1 - str r0, [r4, #0x34] - movs r0, #0x36 - ldrsh r1, [r4, r0] - movs r0, #6 - rsbs r0, r0, #0 - cmp r1, r0 - bgt _080373A6 - movs r0, #4 - strb r0, [r4, #0xc] - movs r0, #0xa - strb r0, [r4, #0xe] - ldr r1, _080373AC @ =gPlayerEntity - adds r0, r4, #0 - bl GetFacingDirection - strb r0, [r4, #0x15] -_080373A6: - pop {r4, pc} - .align 2, 0 -_080373A8: .4byte 0xFFFF0000 -_080373AC: .4byte gPlayerEntity - - thumb_func_start sub_080373B0 -sub_080373B0: @ 0x080373B0 - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xe] - subs r0, #1 - strb r0, [r1, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080373C4 - movs r0, #5 - strb r0, [r1, #0xc] -_080373C4: - pop {pc} - .align 2, 0 - - thumb_func_start sub_080373C8 -sub_080373C8: @ 0x080373C8 - push {r4, lr} - adds r4, r0, #0 - bl ProcessMovement2 - ldrh r0, [r4, #0x2a] - cmp r0, #0 - beq _080373DC - adds r0, r4, #0 - bl sub_08037408 -_080373DC: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080373E0 -sub_080373E0: @ 0x080373E0 - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x20] - cmp r0, #0 - bge _080373F2 - ldrb r0, [r4, #0x18] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r4, #0x18] -_080373F2: - movs r1, #0x80 - lsls r1, r1, #6 - adds r0, r4, #0 - bl GravityUpdate - cmp r0, #0 - bne _08037406 - adds r0, r4, #0 - bl sub_08037408 -_08037406: - pop {r4, pc} - - thumb_func_start sub_08037408 -sub_08037408: @ 0x08037408 - push {lr} - movs r1, #5 - movs r2, #0 - bl CreateFx - bl DeleteThisEntity - pop {pc} - - thumb_func_start sub_08037418 -sub_08037418: @ 0x08037418 - push {r4, r5, r6, lr} - adds r5, r0, #0 - movs r1, #0x2e - ldrsh r0, [r5, r1] - ldr r3, _08037464 @ =gRoomControls - ldrh r1, [r3, #6] - subs r0, r0, r1 - asrs r4, r0, #4 - movs r2, #0x3f - ands r4, r2 - movs r1, #0x32 - ldrsh r0, [r5, r1] - ldrh r1, [r3, #8] - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r2 - lsls r0, r0, #6 - orrs r4, r0 - adds r6, r5, #0 - adds r6, #0x38 - ldrb r1, [r6] - adds r0, r4, #0 - bl GetTileIndex - ldr r1, _08037468 @ =0x00004067 - cmp r0, r1 - bne _08037460 - adds r0, r5, #0 - adds r0, #0x74 - ldrh r0, [r0] - ldrb r2, [r6] - adds r1, r4, #0 - bl SetTile - bl DeleteThisEntity -_08037460: - pop {r4, r5, r6, pc} - .align 2, 0 -_08037464: .4byte gRoomControls -_08037468: .4byte 0x00004067 diff --git a/asm/non_matching/GetEmptyEntity.inc b/asm/non_matching/GetEmptyEntity.inc index faa6d4d6..4330be0a 100644 --- a/asm/non_matching/GetEmptyEntity.inc +++ b/asm/non_matching/GetEmptyEntity.inc @@ -48,7 +48,7 @@ _0805E6CC: .4byte gPlayerEntity _0805E6D0: .4byte gUpdateContext _0805E6D4: adds r4, #0x88 - ldr r0, _0805E738 @ =gUnk_03003BE0 + ldr r0, _0805E738 @ =gCarryEntities cmp r4, r0 blo _0805E6A8 movs r0, #0 @@ -101,7 +101,7 @@ _0805E730: mov r8, r3 pop {r4, r5, r6, r7, pc} .align 2, 0 -_0805E738: .4byte gUnk_03003BE0 +_0805E738: .4byte gCarryEntities _0805E73C: .4byte gEntityLists _0805E740: .4byte gUpdateContext .syntax divided diff --git a/asm/non_matching/sub_0805EC9C.inc b/asm/non_matching/SetAffineInfo.inc similarity index 100% rename from asm/non_matching/sub_0805EC9C.inc rename to asm/non_matching/SetAffineInfo.inc diff --git a/asm/non_matching/bombPeahat/sub_0802AFC8.inc b/asm/non_matching/bombPeahat/sub_0802AFC8.inc index 89393e10..6781fe36 100644 --- a/asm/non_matching/bombPeahat/sub_0802AFC8.inc +++ b/asm/non_matching/bombPeahat/sub_0802AFC8.inc @@ -49,7 +49,7 @@ _0802B00C: adds r0, r4, #0 adds r1, r2, #0 movs r3, #0 - bl sub_0805EC9C + bl SetAffineInfo _0802B022: ldrb r0, [r4, #0xf] ands r0, r7 diff --git a/asm/non_matching/code_0805EC04/sub_0805ED30.inc b/asm/non_matching/code_0805EC04/UpdatePlayerInput.inc similarity index 97% rename from asm/non_matching/code_0805EC04/sub_0805ED30.inc rename to asm/non_matching/code_0805EC04/UpdatePlayerInput.inc index bdf6bc56..0ace695b 100644 --- a/asm/non_matching/code_0805EC04/sub_0805ED30.inc +++ b/asm/non_matching/code_0805EC04/UpdatePlayerInput.inc @@ -79,7 +79,7 @@ _0805EDB4: strb r0, [r2] ldr r0, _0805EDF8 @ =gInput ldrh r0, [r0] - bl sub_0805EE04 + bl ConvInputToState adds r1, r4, #0 adds r1, #0x90 strh r0, [r1] @@ -88,7 +88,7 @@ _0805EDC6: ldrh r1, [r0] _0805EDCA: adds r0, r1, #0 - bl sub_0805EE04 + bl ConvInputToState ldr r3, _0805EDFC @ =gPlayerState adds r1, r3, #0 adds r1, #0x90 diff --git a/asm/non_matching/frozenOctorok/FrozenOctorok_Action1.inc b/asm/non_matching/frozenOctorok/FrozenOctorok_Action1.inc index a764d5b5..4eb27cb8 100644 --- a/asm/non_matching/frozenOctorok/FrozenOctorok_Action1.inc +++ b/asm/non_matching/frozenOctorok/FrozenOctorok_Action1.inc @@ -252,7 +252,7 @@ _0809C7C4: adds r0, #6 ldrh r3, [r0] adds r0, r5, #0 - bl sub_0805EC9C + bl SetAffineInfo b _0809C7DE _0809C7D2: ldr r0, _0809C7E0 @ =gRoomControls diff --git a/asm/non_matching/itemBomb/sub_08076088.inc b/asm/non_matching/itemBomb/sub_08076088.inc index 6f95363b..b5f733df 100644 --- a/asm/non_matching/itemBomb/sub_08076088.inc +++ b/asm/non_matching/itemBomb/sub_08076088.inc @@ -98,7 +98,7 @@ _08076138: _0807614A: adds r0, r4, #0 movs r1, #0x13 - bl CreatePlayerBomb + bl CreatePlayerItemWithParent adds r3, r0, #0 cmp r3, #0 bne _08076162 diff --git a/asm/non_matching/itemMoleMitts/sub_080772A8.inc b/asm/non_matching/itemMoleMitts/sub_080772A8.inc index e3424dcf..11be37fb 100644 --- a/asm/non_matching/itemMoleMitts/sub_080772A8.inc +++ b/asm/non_matching/itemMoleMitts/sub_080772A8.inc @@ -99,7 +99,7 @@ _08077370: .4byte gUnk_0811BE16 _08077374: adds r0, r4, #0 adds r1, r6, #0 - bl sub_08077E78 + bl DeletePlayerItem ldr r0, _08077388 @ =gPlayerState adds r0, #0x3d movs r1, #0 diff --git a/asm/non_matching/itemTryPickupObject/sub_080761C0.inc b/asm/non_matching/itemTryPickupObject/ItemPickupCheck.inc similarity index 96% rename from asm/non_matching/itemTryPickupObject/sub_080761C0.inc rename to asm/non_matching/itemTryPickupObject/ItemPickupCheck.inc index 08ce1ec9..e355fe27 100644 --- a/asm/non_matching/itemTryPickupObject/sub_080761C0.inc +++ b/asm/non_matching/itemTryPickupObject/ItemPickupCheck.inc @@ -33,7 +33,7 @@ _080761DE: blo _0807626E cmp r3, #2 bne _080762C0 - ldr r0, _0807622C @ =gUnk_03003BE0 + ldr r0, _0807622C @ =gCarryEntities ldr r2, [r0, #8] ldrb r1, [r2, #0x16] movs r0, #0xf @@ -49,7 +49,7 @@ _080761DE: _08076220: .4byte gPlayerState _08076224: .4byte 0x00001201 _08076228: .4byte gPlayerEntity -_0807622C: .4byte gUnk_03003BE0 +_0807622C: .4byte gCarryEntities _08076230: str r2, [r4, #0x18] strb r3, [r2, #0xc] diff --git a/asm/non_matching/kid/Kid_Head.inc b/asm/non_matching/kid/Kid_Head.inc deleted file mode 100644 index acd3574a..00000000 --- a/asm/non_matching/kid/Kid_Head.inc +++ /dev/null @@ -1,126 +0,0 @@ - .syntax unified - .text - - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - ldrb r4, [r5, #0xa] - lsls r0, r4, #2 - mov ip, r0 - ldr r2, _08062868 @ =gUnk_0810C0A0 - add r2, ip - adds r0, r5, #0 - adds r0, #0x5a - ldrb r3, [r0] - movs r1, #0x1f - adds r0, r1, #0 - ands r0, r3 - ldrb r3, [r2] - adds r6, r0, r3 - ldrb r0, [r5, #0x1e] - ands r1, r0 - ldrb r2, [r2, #1] - adds r7, r1, r2 - cmp r4, #8 - bhi _08062946 - ldr r0, _0806286C @ =_08062870 - add r0, ip - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08062868: .4byte gUnk_0810C0A0 -_0806286C: .4byte _08062870 @ jump table -_08062870: - .4byte _08062894 @ case 0 - .4byte _08062894 @ case 1 - .4byte _08062894 @ case 2 - .4byte _08062894 @ case 3 - .4byte _08062894 @ case 4 - .4byte _08062894 @ case 5 - .4byte _080628D8 @ case 6 - .4byte _08062922 @ case 7 - .4byte _08062922 @ case 8 -_08062894: - adds r0, r5, #0 - adds r0, #0x5b - ldrb r1, [r0] - movs r0, #0x30 - ands r0, r1 - lsrs r4, r0, #4 - cmp r4, #0 - beq _080628A6 - adds r4, #0x50 -_080628A6: - subs r4, #1 - adds r0, r5, #0 - movs r1, #0 - adds r2, r6, #0 - bl SetExtraSpriteFrame - adds r0, r5, #0 - movs r1, #1 - adds r2, r7, #0 - bl SetExtraSpriteFrame - adds r0, r5, #0 - movs r1, #2 - adds r2, r4, #0 - bl SetExtraSpriteFrame - adds r0, r5, #0 - movs r1, #1 - movs r2, #0 - bl SetSpriteSubEntryOffsetData1 - adds r0, r5, #0 - movs r1, #1 - movs r2, #2 - b _08062916 -_080628D8: - adds r0, r5, #0 - adds r0, #0x5b - ldrb r0, [r0] - movs r2, #0xf - ands r2, r0 - cmp r2, #0 - beq _080628E8 - adds r2, #0x93 -_080628E8: - subs r2, #1 - adds r0, r5, #0 - movs r1, #0 - bl SetExtraSpriteFrame - adds r0, r5, #0 - movs r1, #1 - adds r2, r6, #0 - bl SetExtraSpriteFrame - adds r0, r5, #0 - movs r1, #2 - adds r2, r7, #0 - bl SetExtraSpriteFrame - adds r0, r5, #0 - movs r1, #2 - movs r2, #1 - bl SetSpriteSubEntryOffsetData1 - adds r0, r5, #0 - movs r1, #1 - movs r2, #0 -_08062916: - bl SetSpriteSubEntryOffsetData2 - adds r0, r5, #0 - bl sub_0807000C - b _08062946 -_08062922: - adds r0, r5, #0 - movs r1, #0 - adds r2, r6, #0 - bl SetExtraSpriteFrame - adds r0, r5, #0 - movs r1, #1 - adds r2, r7, #0 - bl SetExtraSpriteFrame - adds r0, r5, #0 - movs r1, #1 - movs r2, #0 - bl SetSpriteSubEntryOffsetData1 - adds r0, r5, #0 - bl sub_0807000C -_08062946: - pop {r4, r5, r6, r7, pc} - - .syntax divided diff --git a/asm/non_matching/kid/sub_08062948.inc b/asm/non_matching/kid/sub_08062948.inc deleted file mode 100644 index e751a7c0..00000000 --- a/asm/non_matching/kid/sub_08062948.inc +++ /dev/null @@ -1,141 +0,0 @@ - .syntax unified - .text - - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r6, r1, #0 - ldrb r0, [r6, #0x18] - cmp r0, #0 - bne _080629B4 - adds r0, #1 - strb r0, [r6, #0x18] - bl Random - movs r1, #0x3f - ands r0, r1 - adds r0, #0x20 - strh r0, [r6, #0x12] - bl Random - adds r1, r0, #0 - movs r0, #0x18 - ands r1, r0 - ldrb r0, [r4, #0x15] - cmp r0, #8 - beq _08062990 - cmp r0, #8 - bgt _0806297E - cmp r0, #0 - beq _08062988 - b _080629A6 -_0806297E: - cmp r0, #0x10 - beq _08062998 - cmp r0, #0x18 - beq _080629A0 - b _080629A6 -_08062988: - cmp r1, #0x10 - bne _080629A6 - movs r1, #8 - b _080629A6 -_08062990: - cmp r1, #0x18 - bne _080629A6 - movs r1, #0x10 - b _080629A6 -_08062998: - cmp r1, #0 - bne _080629A6 - movs r1, #0x18 - b _080629A6 -_080629A0: - cmp r1, #8 - bne _080629A6 - movs r1, #0 -_080629A6: - strb r1, [r4, #0x15] - adds r0, r1, #0 - bl sub_0806F5B0 - strb r0, [r4, #0x14] - movs r0, #0x80 - strh r0, [r4, #0x24] -_080629B4: - ldrb r0, [r4, #0x14] - lsrs r0, r0, #1 - adds r1, r0, #4 - adds r5, r4, #0 - adds r5, #0x58 - ldrb r0, [r5] - cmp r1, r0 - beq _080629D2 - adds r0, r4, #0 - bl InitializeAnimation - ldrb r1, [r5] - adds r0, r4, #0 - adds r0, #0x80 - strh r1, [r0] -_080629D2: - adds r0, r4, #0 - bl ProcessMovement0 - movs r3, #0x2e - ldrsh r1, [r4, r3] - adds r2, r4, #0 - adds r2, #0x6c - movs r5, #0 - ldrsh r0, [r2, r5] - subs r1, r1, r0 - cmp r1, #0x10 - ble _080629F4 - ldrh r0, [r2] - adds r0, #0x10 - strh r0, [r4, #0x2e] - movs r0, #1 - strh r0, [r6, #0x12] -_080629F4: - movs r3, #0x10 - rsbs r3, r3, #0 - cmp r1, r3 - bge _08062A06 - ldrh r0, [r2] - subs r0, #0x10 - strh r0, [r4, #0x2e] - movs r0, #1 - strh r0, [r6, #0x12] -_08062A06: - movs r0, #0x32 - ldrsh r1, [r4, r0] - adds r2, r4, #0 - adds r2, #0x6e - movs r5, #0 - ldrsh r0, [r2, r5] - subs r1, r1, r0 - cmp r1, #0x10 - ble _08062A22 - ldrh r0, [r2] - adds r0, #0x10 - strh r0, [r4, #0x32] - movs r0, #1 - strh r0, [r6, #0x12] -_08062A22: - cmp r1, r3 - bge _08062A30 - ldrh r0, [r2] - subs r0, #0x10 - strh r0, [r4, #0x32] - movs r0, #1 - strh r0, [r6, #0x12] -_08062A30: - ldrh r0, [r6, #0x12] - subs r0, #1 - strh r0, [r6, #0x12] - lsls r0, r0, #0x10 - cmp r0, #0 - beq _08062A42 - ldr r1, _08062A44 @ =gActiveScriptInfo - movs r0, #0 - strb r0, [r1, #6] -_08062A42: - pop {r4, r5, r6, pc} - .align 2, 0 -_08062A44: .4byte gActiveScriptInfo - - .syntax divided diff --git a/asm/non_matching/menu/kinstone_menu/sub_080A3B48.inc b/asm/non_matching/menu/kinstone_menu/sub_080A3B48.inc new file mode 100644 index 00000000..aabfe091 --- /dev/null +++ b/asm/non_matching/menu/kinstone_menu/sub_080A3B48.inc @@ -0,0 +1,24 @@ + .syntax unified + push {lr} + movs r1, #0 + ldr r0, _080A3B6C @ =gSave + ldr r3, _080A3B70 @ =0x0000012B + adds r2, r0, r3 + ldrb r0, [r2] + cmp r0, #0 + beq _080A3B66 +_080A3B58: + adds r1, #1 + cmp r1, #0x12 + bhi _080A3B66 + adds r0, r1, r2 + ldrb r0, [r0] + cmp r0, #0 + bne _080A3B58 +_080A3B66: + adds r0, r1, #0 + pop {pc} + .align 2, 0 +_080A3B6C: .4byte gSave +_080A3B70: .4byte 0x0000012B + .syntax divided diff --git a/asm/non_matching/minishEzlo/sub_080630A4.inc b/asm/non_matching/minishEzlo/sub_080630A4.inc index 4a041f21..269de92b 100644 --- a/asm/non_matching/minishEzlo/sub_080630A4.inc +++ b/asm/non_matching/minishEzlo/sub_080630A4.inc @@ -132,7 +132,7 @@ _08063186: adds r0, r4, #0 adds r1, r2, #0 movs r3, #0 - bl sub_0805EC9C + bl SetAffineInfo adds r0, r4, #0 movs r1, #0x11 bl InitAnimationForceUpdate @@ -163,7 +163,7 @@ _080631CA: ldr r2, [r4, #0x70] adds r0, r4, #0 movs r3, #0 - bl sub_0805EC9C + bl SetAffineInfo ldr r1, _080631E4 @ =gActiveScriptInfo movs r0, #0 strb r0, [r1, #6] diff --git a/asm/non_matching/objectB9/sub_080A1270.inc b/asm/non_matching/objectB9/sub_080A1270.inc new file mode 100644 index 00000000..5079781b --- /dev/null +++ b/asm/non_matching/objectB9/sub_080A1270.inc @@ -0,0 +1,144 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #8 + mov sb, r0 + movs r6, #0 + ldr r0, [r0, #0x64] + str r0, [sp, #4] + mov r4, sb + adds r4, #0x70 + ldr r0, _080A12F8 @ =gRoomControls + movs r2, #0xd8 + lsls r2, r2, #2 + adds r1, r2, #0 + ldrh r3, [r0, #6] + adds r1, r1, r3 + movs r7, #0xd4 + lsls r7, r7, #2 + adds r2, r7, #0 + ldrh r0, [r0, #8] + adds r2, r2, r0 + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + mov r8, r1 + lsls r2, r2, #0x10 + asrs r3, r2, #0x10 + movs r0, #9 + mov sl, r0 + movs r1, #1 + rsbs r1, r1, #0 + adds r5, r1, #0 +_080A12B2: + ldr r7, [sp, #4] + ldr r2, [r7] + movs r0, #0 + ldrsb r0, [r4, r0] + cmp r0, #0 + bne _080A1300 + ldr r0, [r2, #4] + cmp r0, #0 + beq _080A132C + cmp r2, #0 + beq _080A132C + movs r1, #0x2e + ldrsh r0, [r2, r1] + cmp r8, r0 + bgt _080A132E + movs r7, #0x32 + ldrsh r0, [r2, r7] + cmp r3, r0 + bgt _080A132E + ldrb r0, [r2, #0xa] + adds r0, #1 + strb r0, [r4] + movs r0, #1 + strb r0, [r2, #0xb] + adds r6, #1 + ldr r1, _080A12FC @ =CuccoMinigame_Sounds + ldrb r0, [r2, #0xa] + lsls r0, r0, #1 + adds r0, r0, r1 + ldrh r0, [r0] + str r3, [sp] + bl SoundReq + ldr r3, [sp] + b _080A132E + .align 2, 0 +_080A12F8: .4byte gRoomControls +_080A12FC: .4byte CuccoMinigame_Sounds +_080A1300: + cmp r0, #0 + ble _080A132E + adds r6, #1 + ldr r0, [r2, #4] + cmp r0, #0 + beq _080A132C + cmp r2, #0 + beq _080A132C + mov r1, r8 + adds r1, #4 + movs r7, #0x2e + ldrsh r0, [r2, r7] + cmp r1, r0 + ble _080A131E + strh r1, [r2, #0x2e] +_080A131E: + adds r1, r3, #4 + movs r7, #0x32 + ldrsh r0, [r2, r7] + cmp r1, r0 + ble _080A132E + strh r1, [r2, #0x32] + b _080A132E +_080A132C: + strb r5, [r4] +_080A132E: + movs r0, #1 + rsbs r0, r0, #0 + add sl, r0 + adds r4, #1 + ldr r1, [sp, #4] + adds r1, #4 + str r1, [sp, #4] + mov r2, sl + cmp r2, #0 + bge _080A12B2 + mov r0, sb + adds r0, #0x6a + strh r6, [r0] + ldr r0, _080A136C @ =gPlayerState + adds r0, #0x27 + movs r1, #0xff + strb r1, [r0] + mov r1, sb + adds r1, #0x68 + ldrh r0, [r1] + subs r0, #1 + strh r0, [r1] + lsls r0, r0, #0x10 + cmp r0, #0 + bgt _080A1370 + movs r0, #0xe2 + bl SoundReq + bl sub_08050384 + b _080A1376 + .align 2, 0 +_080A136C: .4byte gPlayerState +_080A1370: + ldr r1, _080A1384 @ =gActiveScriptInfo + movs r0, #0 + strb r0, [r1, #6] +_080A1376: + add sp, #8 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7, pc} + .align 2, 0 + _080A1384: .4byte gActiveScriptInfo + .syntax divided diff --git a/asm/non_matching/ocarina/OcarinaUpdate.inc b/asm/non_matching/ocarina/OcarinaUpdate.inc index ffd951df..b6d19673 100644 --- a/asm/non_matching/ocarina/OcarinaUpdate.inc +++ b/asm/non_matching/ocarina/OcarinaUpdate.inc @@ -27,7 +27,7 @@ bl ResetPlayerEventPriority adds r0, r5, #0 adds r1, r6, #0 - bl sub_08077E78 + bl DeletePlayerItem _08076C6E: pop {r4, r5, r6, pc} .align 2, 0 diff --git a/asm/non_matching/octorokBossObject/OctorokBossObject_Action1.inc b/asm/non_matching/octorokBossObject/OctorokBossObject_Action1.inc index fdcbb90b..5a9cc660 100644 --- a/asm/non_matching/octorokBossObject/OctorokBossObject_Action1.inc +++ b/asm/non_matching/octorokBossObject/OctorokBossObject_Action1.inc @@ -308,7 +308,7 @@ _0809A420: adds r0, #0x7a ldrh r3, [r0] adds r0, r7, #0 - bl sub_0805EC9C + bl SetAffineInfo b _0809A436 _0809A432: subs r0, #1 diff --git a/asm/non_matching/playerItem13/sub_080AD040.inc b/asm/non_matching/playerItem13/sub_080AD040.inc index bb2ed5c3..9f1785e5 100644 --- a/asm/non_matching/playerItem13/sub_080AD040.inc +++ b/asm/non_matching/playerItem13/sub_080AD040.inc @@ -85,7 +85,7 @@ _080AD0D8: ldr r0, [r4, #0x34] str r0, [r5, #0x34] adds r0, r4, #0 - bl sub_080B1AA8 + bl GetTileUnderEntity cmp r0, #0x11 bhi _080AD0FC cmp r0, #0x10 diff --git a/asm/non_matching/playerItemBomb/sub_0801B2CC.inc b/asm/non_matching/playerItemBomb/sub_0801B2CC.inc index a538e0b3..f10caa01 100644 --- a/asm/non_matching/playerItemBomb/sub_0801B2CC.inc +++ b/asm/non_matching/playerItemBomb/sub_0801B2CC.inc @@ -5,7 +5,7 @@ cmp r0, #0 bne _0801B2DE adds r0, r4, #0 - bl sub_08078930 + bl RegisterCarryEntity _0801B2DE: movs r0, #8 bl IsItemEquipped diff --git a/asm/non_matching/playerItemBomb/sub_0801B3A4.inc b/asm/non_matching/playerItemBomb/sub_0801B3A4.inc index 21a6c44c..7c4a5b73 100644 --- a/asm/non_matching/playerItemBomb/sub_0801B3A4.inc +++ b/asm/non_matching/playerItemBomb/sub_0801B3A4.inc @@ -40,7 +40,7 @@ _0801B3E0: adds r0, r4, #0 adds r1, r2, #0 movs r3, #0 - bl sub_0805EC9C + bl SetAffineInfo _0801B3F4: ldrb r0, [r4, #0xf] ands r0, r5 diff --git a/asm/non_matching/playerUtils/sub_08078954.inc b/asm/non_matching/playerUtils/FreeCarryEntity.inc similarity index 90% rename from asm/non_matching/playerUtils/sub_08078954.inc rename to asm/non_matching/playerUtils/FreeCarryEntity.inc index 57002a64..2c604c70 100644 --- a/asm/non_matching/playerUtils/sub_08078954.inc +++ b/asm/non_matching/playerUtils/FreeCarryEntity.inc @@ -2,7 +2,7 @@ push {r4, r5, lr} adds r5, r0, #0 movs r4, #0 - ldr r0, _08078970 @ =gUnk_03003BE0 + ldr r0, _08078970 @ =gCarryEntities ldrb r1, [r0, #2] adds r2, r0, #0 cmp r4, r1 @@ -13,7 +13,7 @@ subs r0, r1, #1 b _0807898C .align 2, 0 -_08078970: .4byte gUnk_03003BE0 +_08078970: .4byte gCarryEntities _08078974: adds r4, #1 ldrb r3, [r2, #2] diff --git a/asm/non_matching/playerUtils/sub_08078930.inc b/asm/non_matching/playerUtils/RegisterCarryEntity.inc similarity index 79% rename from asm/non_matching/playerUtils/sub_08078930.inc rename to asm/non_matching/playerUtils/RegisterCarryEntity.inc index 8e5c252f..613f17dc 100644 --- a/asm/non_matching/playerUtils/sub_08078930.inc +++ b/asm/non_matching/playerUtils/RegisterCarryEntity.inc @@ -1,7 +1,7 @@ .syntax unified push {lr} adds r3, r0, #0 - ldr r2, _08078950 @ =gUnk_03003BE0 + ldr r2, _08078950 @ =gCarryEntities ldrb r0, [r2, #2] cmp r0, #0x1f bhi _0807894C @@ -16,5 +16,5 @@ _0807894C: pop {pc} .align 2, 0 -_08078950: .4byte gUnk_03003BE0 +_08078950: .4byte gCarryEntities .syntax divided diff --git a/asm/non_matching/playerUtils/sub_08078180.inc b/asm/non_matching/playerUtils/sub_08078180.inc index ba6be0b6..8086c11b 100644 --- a/asm/non_matching/playerUtils/sub_08078180.inc +++ b/asm/non_matching/playerUtils/sub_08078180.inc @@ -124,7 +124,7 @@ _08078278: ldrb r0, [r0] cmp r0, #0xe beq _080782BC - ldr r1, _080782A0 @ =gUnk_03003BE0 + ldr r1, _080782A0 @ =gCarryEntities ldrb r0, [r1, #1] movs r4, #9 cmp r0, #2 @@ -136,7 +136,7 @@ _08078278: movs r4, #8 b _080782B6 .align 2, 0 -_080782A0: .4byte gUnk_03003BE0 +_080782A0: .4byte gCarryEntities _080782A4: adds r0, r5, #0 adds r0, #0xa8 diff --git a/asm/non_matching/playerUtils/sub_080789A8.inc b/asm/non_matching/playerUtils/sub_080789A8.inc index ecb20e64..4c9b058d 100644 --- a/asm/non_matching/playerUtils/sub_080789A8.inc +++ b/asm/non_matching/playerUtils/sub_080789A8.inc @@ -2,14 +2,14 @@ push {r4, r5, r6, r7, lr} mov r7, r8 push {r7} - ldr r1, _080789BC @ =gUnk_03003BE0 + ldr r1, _080789BC @ =gCarryEntities ldrb r0, [r1] cmp r0, #0 beq _080789C0 ldrb r0, [r1, #1] b _08078A88 .align 2, 0 -_080789BC: .4byte gUnk_03003BE0 +_080789BC: .4byte gCarryEntities _080789C0: ldr r0, _08078A5C @ =gPlayerState ldr r0, [r0, #0x30] @@ -34,7 +34,7 @@ _080789E6: ldrb r0, [r0, #0x12] cmp r0, #0x12 beq _08078A56 - ldr r3, _08078A68 @ =gUnk_03003BE0 + ldr r3, _08078A68 @ =gCarryEntities movs r0, #1 strb r0, [r3] ldrb r4, [r3, #2] @@ -80,7 +80,7 @@ _08078A2E: lsls r2, r2, #0x18 asrs r2, r2, #0x18 bl sub_080B1A0C - ldr r4, _08078A68 @ =gUnk_03003BE0 + ldr r4, _08078A68 @ =gCarryEntities strh r0, [r4, #4] movs r1, #6 bl sub_0806FC24 @@ -93,7 +93,7 @@ _08078A56: _08078A5C: .4byte gPlayerState _08078A60: .4byte gPlayerEntity _08078A64: .4byte gUnk_080084BC -_08078A68: .4byte gUnk_03003BE0 +_08078A68: .4byte gCarryEntities _08078A6C: .4byte gUnk_0811BFE0 _08078A70: .4byte gUnk_08007DF4 _08078A74: diff --git a/asm/non_matching/pullableMushroom/sub_0808ABC4.inc b/asm/non_matching/pullableMushroom/sub_0808ABC4.inc index 254d7866..d89258b1 100644 --- a/asm/non_matching/pullableMushroom/sub_0808ABC4.inc +++ b/asm/non_matching/pullableMushroom/sub_0808ABC4.inc @@ -150,6 +150,6 @@ _0808ACDE: ldr r2, [r4, #0x78] ldr r3, [r4, #0x70] adds r0, r4, #0 - bl sub_0805EC9C + bl SetAffineInfo pop {r4, r5, pc} .syntax divided diff --git a/asm/non_matching/scroll/sub_0807FDF8.inc b/asm/non_matching/scroll/sub_0807FDF8.inc deleted file mode 100644 index 2bd0510a..00000000 --- a/asm/non_matching/scroll/sub_0807FDF8.inc +++ /dev/null @@ -1,110 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldr r1, _0807FE18 @ =gUpdateVisibleTiles - movs r0, #2 - strb r0, [r1] - ldrh r0, [r4, #0x18] - adds r0, #1 - strh r0, [r4, #0x18] - ldrb r0, [r4, #0x10] - cmp r0, #1 - beq _0807FE44 - cmp r0, #1 - bgt _0807FE1C - cmp r0, #0 - beq _0807FE26 - b _0807FEB6 - .align 2, 0 -_0807FE18: .4byte gUpdateVisibleTiles -_0807FE1C: - cmp r0, #2 - beq _0807FE68 - cmp r0, #3 - beq _0807FE94 - b _0807FEB6 -_0807FE26: - ldrh r0, [r4, #0xc] - subs r0, #4 - strh r0, [r4, #0xc] - ldr r1, [r4, #0x30] - ldr r0, _0807FE3C @ =gPlayerEntity - cmp r1, r0 - bne _0807FE80 - ldr r0, [r1, #0x30] - ldr r2, _0807FE40 @ =0xFFFFA000 - b _0807FE7C - .align 2, 0 -_0807FE3C: .4byte gPlayerEntity -_0807FE40: .4byte 0xFFFFA000 -_0807FE44: - ldrh r0, [r4, #0xa] - adds r0, #4 - strh r0, [r4, #0xa] - ldr r1, [r4, #0x30] - ldr r0, _0807FE64 @ =gPlayerEntity - cmp r1, r0 - bne _0807FE5C - ldr r0, [r1, #0x2c] - movs r2, #0x80 - lsls r2, r2, #7 - adds r0, r0, r2 - str r0, [r1, #0x2c] -_0807FE5C: - ldrh r0, [r4, #0x18] - cmp r0, #0x3c - bne _0807FEB6 - b _0807FE86 - .align 2, 0 -_0807FE64: .4byte gPlayerEntity -_0807FE68: - ldrh r0, [r4, #0xc] - adds r0, #4 - strh r0, [r4, #0xc] - ldr r1, [r4, #0x30] - ldr r0, _0807FE90 @ =gPlayerEntity - cmp r1, r0 - bne _0807FE80 - ldr r0, [r1, #0x30] - movs r2, #0xc0 - lsls r2, r2, #7 -_0807FE7C: - adds r0, r0, r2 - str r0, [r1, #0x30] -_0807FE80: - ldrh r0, [r4, #0x18] - cmp r0, #0x28 - bne _0807FEB6 -_0807FE86: - adds r0, r4, #0 - bl sub_0807FEC8 - b _0807FEB6 - .align 2, 0 -_0807FE90: .4byte gPlayerEntity -_0807FE94: - ldrh r0, [r4, #0xa] - subs r0, #4 - strh r0, [r4, #0xa] - ldr r1, [r4, #0x30] - ldr r0, _0807FEC0 @ =gPlayerEntity - cmp r1, r0 - bne _0807FEAA - ldr r0, [r1, #0x2c] - ldr r2, _0807FEC4 @ =0xFFFFC000 - adds r0, r0, r2 - str r0, [r1, #0x2c] -_0807FEAA: - ldrh r0, [r4, #0x18] - cmp r0, #0x3c - bne _0807FEB6 - adds r0, r4, #0 - bl sub_0807FEC8 -_0807FEB6: - movs r0, #0 - strh r0, [r4, #0x16] - bl sub_08080BC4 - pop {r4, pc} - .align 2, 0 -_0807FEC0: .4byte gPlayerEntity -_0807FEC4: .4byte 0xFFFFC000 - .syntax divided diff --git a/asm/non_matching/scroll/sub_0807FF6C.inc b/asm/non_matching/scroll/sub_0807FF6C.inc deleted file mode 100644 index 665d72e0..00000000 --- a/asm/non_matching/scroll/sub_0807FF6C.inc +++ /dev/null @@ -1,57 +0,0 @@ - .syntax unified - push {r4, lr} - movs r1, #1 - strb r1, [r0, #3] - ldr r3, _0807FFC8 @ =gScreen - ldrh r1, [r3] - movs r2, #0x80 - lsls r2, r2, #7 - adds r0, r2, #0 - orrs r0, r1 - strh r0, [r3] - adds r2, r3, #0 - adds r2, #0x60 - ldrb r0, [r2] - movs r4, #0xb8 - lsls r4, r4, #5 - adds r1, r4, #0 - orrs r0, r1 - strh r0, [r2] - adds r2, #2 - ldrh r1, [r2] - movs r0, #0xff - lsls r0, r0, #8 - ands r0, r1 - movs r1, #7 - movs r4, #0 - orrs r0, r1 - strh r0, [r2] - adds r0, r3, #0 - adds r0, #0x5a - movs r1, #0xf0 - strh r1, [r0] - adds r0, #4 - strh r1, [r0] - bl ResetPlayer - bl ResetPlayerAnimationAndAction - ldr r0, _0807FFCC @ =gUnk_03004030 - ldrb r0, [r0, #8] - cmp r0, #0 - beq _0807FFD4 - ldr r1, _0807FFD0 @ =gPlayerEntity - movs r0, #4 - strb r0, [r1, #0x14] - b _0807FFD8 - .align 2, 0 -_0807FFC8: .4byte gScreen -_0807FFCC: .4byte gUnk_03004030 -_0807FFD0: .4byte gPlayerEntity -_0807FFD4: - ldr r0, _0807FFE0 @ =gPlayerEntity - strb r4, [r0, #0x14] -_0807FFD8: - bl sub_080809D4 - pop {r4, pc} - .align 2, 0 -_0807FFE0: .4byte gPlayerEntity - .syntax divided diff --git a/asm/non_matching/scroll/sub_0807FFE4.inc b/asm/non_matching/scroll/sub_0807FFE4.inc deleted file mode 100644 index b7bf033b..00000000 --- a/asm/non_matching/scroll/sub_0807FFE4.inc +++ /dev/null @@ -1,39 +0,0 @@ - .syntax unified - push {r4, r5, lr} - adds r5, r0, #0 - movs r0, #2 - strb r0, [r5, #3] - bl sub_080803D0 - adds r0, #6 - strh r0, [r5, #0x18] - ldr r4, _0808002C @ =gUnk_0200B640 - bl sub_08080278 - strh r0, [r4] - ldr r1, _08080030 @ =gUnk_08109194 - ldr r0, _08080034 @ =gUnk_03004030 - ldr r0, [r0] - ldrb r0, [r0, #3] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - ldr r0, [r0] - bl sub_080197D4 - ldr r4, _08080038 @ =gMapDataTop - ldrh r1, [r5, #0x1e] - lsrs r1, r1, #4 - ldrh r2, [r5, #0x20] - lsrs r2, r2, #4 - adds r0, r4, #0 - bl sub_0807C8B0 - ldr r0, _0808003C @ =gMapDataTopSpecial - subs r4, #4 - adds r1, r4, #0 - bl sub_0801AB08 - pop {r4, r5, pc} - .align 2, 0 -_0808002C: .4byte gUnk_0200B640 -_08080030: .4byte gUnk_08109194 -_08080034: .4byte gUnk_03004030 -_08080038: .4byte gMapDataTop -_0808003C: .4byte gMapDataTopSpecial - .syntax divided diff --git a/asm/non_matching/scroll/sub_08080040.inc b/asm/non_matching/scroll/sub_08080040.inc deleted file mode 100644 index 36ecbde3..00000000 --- a/asm/non_matching/scroll/sub_08080040.inc +++ /dev/null @@ -1,102 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - ldrh r4, [r5, #0x18] - subs r4, #6 - strh r4, [r5, #0x18] - ldrh r0, [r5, #0x18] - lsls r0, r0, #1 - movs r1, #3 - bl __divsi3 - strh r0, [r5, #0x1a] - lsls r4, r4, #0x10 - lsrs r4, r4, #0x10 - cmp r4, #0x2a - bls _080800C6 - ldr r3, [r5, #0x30] - movs r1, #0x2e - ldrsh r0, [r3, r1] - movs r2, #0xa - ldrsh r1, [r5, r2] - subs r2, r0, r1 - ldrh r1, [r5, #0x18] - subs r0, r2, r1 - adds r7, r0, #0 - adds r7, #8 - cmp r7, #0 - bge _08080078 - movs r7, #0 -_08080078: - adds r0, r2, r1 - adds r6, r0, #0 - subs r6, #8 - cmp r6, #0xf0 - ble _08080084 - movs r6, #0xf0 -_08080084: - movs r1, #0x32 - ldrsh r0, [r3, r1] - movs r2, #0xc - ldrsh r1, [r5, r2] - subs r2, r0, r1 - ldrh r1, [r5, #0x1a] - subs r0, r2, r1 - adds r4, r0, #0 - adds r4, #8 - cmp r4, #0 - bge _0808009C - movs r4, #0 -_0808009C: - adds r0, r2, r1 - adds r3, r0, #0 - subs r3, #8 - cmp r3, #0xa0 - ble _080800A8 - movs r3, #0xa0 -_080800A8: - ldr r2, _080800F0 @ =gScreen - movs r1, #0xff - ands r7, r1 - lsls r0, r7, #8 - ands r6, r1 - orrs r0, r6 - adds r6, r2, #0 - adds r6, #0x5a - strh r0, [r6] - ands r4, r1 - lsls r0, r4, #8 - ands r3, r1 - orrs r0, r3 - adds r2, #0x5e - strh r0, [r2] -_080800C6: - ldrh r0, [r5, #0x18] - cmp r0, #0 - bne _080800FC - movs r0, #3 - strb r0, [r5, #3] - bl DeleteSleepingEntities - bl sub_0807C810 - ldr r1, _080800F4 @ =gUnk_08109194 - ldr r0, _080800F8 @ =gUnk_03004030 - ldr r0, [r0] - ldrb r0, [r0, #3] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - ldr r0, [r0, #4] - bl sub_08080C80 - b _08080102 - .align 2, 0 -_080800F0: .4byte gScreen -_080800F4: .4byte gUnk_08109194 -_080800F8: .4byte gUnk_03004030 -_080800FC: - ldr r1, _08080104 @ =gUpdateVisibleTiles - movs r0, #4 - strb r0, [r1] -_08080102: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08080104: .4byte gUpdateVisibleTiles - .syntax divided diff --git a/asm/non_matching/scroll/sub_08080108.inc b/asm/non_matching/scroll/sub_08080108.inc deleted file mode 100644 index 195a563e..00000000 --- a/asm/non_matching/scroll/sub_08080108.inc +++ /dev/null @@ -1,56 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - movs r1, #4 - strb r1, [r0, #3] - ldr r5, _08080178 @ =gMapDataBottom - movs r0, #0xc0 - lsls r0, r0, #6 - adds r1, r5, r0 - movs r6, #0x80 - lsls r6, r6, #6 - adds r0, r5, #0 - adds r2, r6, #0 - bl MemCopy - ldr r4, _0808017C @ =gMapDataTop - movs r0, #0xc0 - lsls r0, r0, #6 - adds r1, r4, r0 - adds r0, r4, #0 - adds r2, r6, #0 - bl MemCopy - bl sub_08080368 - ldr r1, _08080180 @ =gUnk_02034480 - ldr r0, _08080184 @ =gUnk_0200B640 - ldrh r0, [r0] - strh r0, [r1] - ldr r0, _08080188 @ =gUnk_02022830 - ldr r1, _0808018C @ =gUnk_020246B0 - movs r2, #0xc0 - lsls r2, r2, #5 - bl MemCopy - subs r5, #4 - adds r0, r5, #0 - bl sub_08080B60 - subs r4, #4 - adds r0, r4, #0 - bl sub_08080B60 - bl sub_0807BBE4 - bl sub_0807BC84 - bl sub_0805E248 - ldr r0, _08080190 @ =gMapDataBottomSpecial - adds r1, r5, #0 - bl sub_0801AB08 - ldr r0, _08080194 @ =gMapDataTopSpecial - adds r1, r4, #0 - bl sub_0801AB08 - pop {r4, r5, r6, pc} - .align 2, 0 -_08080178: .4byte gMapDataBottom -_0808017C: .4byte gMapDataTop -_08080180: .4byte gUnk_02034480 -_08080184: .4byte gUnk_0200B640 -_08080188: .4byte gUnk_02022830 -_0808018C: .4byte gUnk_020246B0 -_08080190: .4byte gMapDataBottomSpecial -_08080194: .4byte gMapDataTopSpecial - .syntax divided diff --git a/asm/non_matching/scroll/sub_080801BC.inc b/asm/non_matching/scroll/sub_080801BC.inc deleted file mode 100644 index efa96fb5..00000000 --- a/asm/non_matching/scroll/sub_080801BC.inc +++ /dev/null @@ -1,100 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - ldrh r4, [r5, #0x18] - adds r4, #6 - strh r4, [r5, #0x18] - ldrh r0, [r5, #0x18] - lsls r0, r0, #1 - movs r1, #3 - bl __divsi3 - strh r0, [r5, #0x1a] - lsls r4, r4, #0x10 - lsrs r4, r4, #0x10 - cmp r4, #0x1e - bls _08080232 - ldr r2, [r5, #0x30] - movs r0, #0x2e - ldrsh r1, [r2, r0] - movs r3, #0xa - ldrsh r0, [r5, r3] - subs r0, r1, r0 - ldrh r1, [r5, #0x18] - subs r7, r0, r1 - cmp r7, #0 - bge _080801F0 - movs r7, #0 -_080801F0: - adds r6, r0, r1 - cmp r6, #0xf0 - ble _080801F8 - movs r6, #0xf0 -_080801F8: - movs r0, #0x32 - ldrsh r1, [r2, r0] - movs r2, #0xc - ldrsh r0, [r5, r2] - subs r0, r1, r0 - ldrh r1, [r5, #0x1a] - subs r4, r0, r1 - cmp r4, #0 - bge _0808020C - movs r4, #0 -_0808020C: - adds r3, r0, r1 - cmp r3, #0xa0 - ble _08080214 - movs r3, #0xa0 -_08080214: - ldr r2, _08080260 @ =gScreen - movs r1, #0xff - ands r7, r1 - lsls r0, r7, #8 - ands r6, r1 - orrs r0, r6 - adds r6, r2, #0 - adds r6, #0x5a - strh r0, [r6] - ands r4, r1 - lsls r0, r4, #8 - ands r3, r1 - orrs r0, r3 - adds r2, #0x5e - strh r0, [r2] -_08080232: - ldrh r0, [r5, #0x1c] - cmp r0, #0 - bne _08080268 - strb r0, [r5, #2] - strh r0, [r5] - bl ResetSystemPriority - ldr r1, _08080260 @ =gScreen - ldrh r2, [r1] - ldr r0, _08080264 @ =0x0000BFFF - ands r0, r2 - strh r0, [r1] - adds r2, r1, #0 - adds r2, #0x60 - ldrb r0, [r2] - strh r0, [r2] - adds r1, #0x62 - ldrh r2, [r1] - movs r0, #0xff - lsls r0, r0, #8 - ands r0, r2 - strh r0, [r1] - b _08080272 - .align 2, 0 -_08080260: .4byte gScreen -_08080264: .4byte 0x0000BFFF -_08080268: - ldr r0, _08080274 @ =gUpdateVisibleTiles - movs r1, #4 - strb r1, [r0] - movs r0, #0 - strh r0, [r5, #0x1c] -_08080272: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08080274: .4byte gUpdateVisibleTiles - .syntax divided diff --git a/asm/object/bird.s b/asm/object/bird.s deleted file mode 100644 index fce0c464..00000000 --- a/asm/object/bird.s +++ /dev/null @@ -1,698 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_0809D1F0 -sub_0809D1F0: @ 0x0809D1F0 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - adds r5, r0, #0 - ldrb r0, [r5, #0xc] - mov sb, r0 - cmp r0, #0 - beq _0809D224 - cmp r0, #1 - beq _0809D2B0 - bl sub_08078B48 - ldr r2, _0809D220 @ =gPlayerEntity - ldrb r1, [r2, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2, #0x18] - movs r1, #0x68 - adds r1, r1, r5 - mov r8, r1 - b _0809D3A8 - .align 2, 0 -_0809D220: .4byte gPlayerEntity -_0809D224: - ldrb r1, [r5, #0xe] - cmp r1, #0 - beq _0809D234 - movs r0, #0xff - strb r0, [r5, #0x1e] - subs r0, r1, #1 - strb r0, [r5, #0xe] - b _0809D488 -_0809D234: - movs r1, #1 - strb r1, [r5, #0xc] - mov r2, sb - str r2, [r5, #0x20] - ldr r0, _0809D2A0 @ =0xFFEC0000 - str r0, [r5, #0x34] - movs r0, #0xc0 - lsls r0, r0, #1 - strh r0, [r5, #0x24] - movs r0, #8 - strb r0, [r5, #0x15] - adds r0, r5, #0 - adds r0, #0x38 - strb r1, [r0] - adds r2, r5, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2] - ldrb r2, [r5, #0x19] - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r2 - strb r0, [r5, #0x19] - ldrb r0, [r5, #0x1b] - ands r1, r0 - movs r0, #0x40 - orrs r1, r0 - strb r1, [r5, #0x1b] - ldr r0, _0809D2A4 @ =gRoomControls - ldrh r0, [r0, #0xa] - strh r0, [r5, #0x2e] - ldr r0, _0809D2A8 @ =gPlayerEntity - ldrh r0, [r0, #0x32] - strh r0, [r5, #0x32] - mov r3, sb - str r3, [r5, #0x54] - adds r0, r5, #0 - movs r1, #6 - bl SetDefaultPriority - adds r0, r5, #0 - movs r1, #0 - bl InitAnimationForceUpdate - ldr r0, _0809D2AC @ =0x00000123 - bl SoundReq - movs r0, #0x68 - adds r0, r0, r5 - mov r8, r0 - b _0809D3A8 - .align 2, 0 -_0809D2A0: .4byte 0xFFEC0000 -_0809D2A4: .4byte gRoomControls -_0809D2A8: .4byte gPlayerEntity -_0809D2AC: .4byte 0x00000123 -_0809D2B0: - ldr r6, _0809D430 @ =gPlayerEntity - adds r0, r6, #0 - adds r0, #0x38 - ldrb r1, [r0] - adds r0, r5, #0 - adds r0, #0x38 - strb r1, [r0] - ldrh r0, [r5, #0x24] - adds r0, #8 - strh r0, [r5, #0x24] - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - movs r1, #0xc0 - lsls r1, r1, #2 - mov sl, r1 - cmp r0, sl - ble _0809D2D6 - mov r2, sl - strh r2, [r5, #0x24] -_0809D2D6: - ldrb r1, [r6, #0x10] - movs r0, #0x80 - ands r0, r1 - movs r3, #0x68 - adds r3, r3, r5 - mov r8, r3 - cmp r0, #0 - beq _0809D3A8 - ldr r0, _0809D434 @ =gMessage - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0 - bne _0809D3A8 - ldrb r0, [r6, #0xc] - cmp r0, #0x1c - beq _0809D3A8 - cmp r0, #6 - beq _0809D3A8 - cmp r0, #9 - beq _0809D3A8 - ldr r7, _0809D438 @ =gPlayerState - adds r0, r7, #0 - adds r0, #0xa8 - ldrb r0, [r0] - cmp r0, #0x18 - beq _0809D3A8 - cmp r0, #0xb - beq _0809D3A8 - cmp r0, #8 - beq _0809D3A8 - bl sub_08079F8C - cmp r0, #0 - beq _0809D3A8 - adds r0, r5, #0 - adds r1, r6, #0 - movs r2, #0xe - movs r3, #0xe - bl EntityInRectRadius - cmp r0, #0 - beq _0809D3A8 - movs r1, #0x36 - ldrsh r0, [r6, r1] - movs r2, #0x36 - ldrsh r1, [r5, r2] - subs r0, r0, r1 - subs r0, #8 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - cmp r0, #0x1f - bhi _0809D3A8 - adds r0, r6, #0 - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #0 - beq _0809D3A8 - movs r0, #0x95 - movs r1, #0xa - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _0809D3A8 - str r4, [r5, #0x54] - movs r0, #2 - strb r0, [r5, #0xc] - movs r0, #8 - strb r0, [r5, #0xe] - mov r3, sl - strh r3, [r5, #0x24] - movs r0, #0xe0 - lsls r0, r0, #8 - mov r1, r8 - strh r0, [r1] - bl sub_08079184 - bl sub_08078B48 - bl ResetPlayerAnimationAndAction - bl sub_08077B20 - adds r0, r7, #0 - adds r0, #0x26 - movs r2, #0 - strb r2, [r0] - strb r2, [r7, #2] - ldrb r1, [r6, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r6, #0x10] - ldrb r1, [r6, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r6, #0x18] - ldr r1, _0809D43C @ =gPriorityHandler - movs r0, #6 - strb r0, [r1] - ldr r0, _0809D440 @ =gUnk_02034490 - mov r3, sb - strb r3, [r0] -_0809D3A8: - adds r0, r5, #0 - bl LinearMoveUpdate - mov r0, r8 - movs r2, #0 - ldrsh r1, [r0, r2] - adds r0, r5, #0 - bl GravityUpdate - adds r0, r5, #0 - bl UpdateAnimationSingleFrame - ldr r4, [r5, #0x54] - cmp r4, #0 - beq _0809D454 - ldr r2, _0809D430 @ =gPlayerEntity - movs r3, #0x2e - ldrsh r1, [r2, r3] - movs r3, #0x2e - ldrsh r0, [r5, r3] - subs r0, #8 - cmp r1, r0 - bge _0809D3DA - movs r0, #0 - strb r0, [r5, #0xe] -_0809D3DA: - ldrb r0, [r5, #0xe] - cmp r0, #0 - bne _0809D448 - ldr r2, _0809D444 @ =0xFFF80000 - adds r0, r5, #0 - adds r1, r4, #0 - movs r3, #0 - bl PositionRelative - ldrh r0, [r4, #0x36] - adds r0, #0x18 - strh r0, [r4, #0x36] - adds r0, r5, #0 - adds r0, #0x29 - ldrb r1, [r0] - lsls r1, r1, #0x1d - adds r3, r4, #0 - adds r3, #0x29 - lsrs r1, r1, #0x1d - ldrb r2, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - ldrb r2, [r5, #0x19] - lsrs r2, r2, #6 - lsls r2, r2, #6 - ldrb r3, [r4, #0x19] - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r3 - orrs r0, r2 - strb r0, [r4, #0x19] - ldrb r0, [r5, #0x1b] - lsrs r0, r0, #6 - lsls r0, r0, #6 - ldrb r2, [r4, #0x1b] - ands r1, r2 - orrs r1, r0 - strb r1, [r4, #0x1b] - b _0809D454 - .align 2, 0 -_0809D430: .4byte gPlayerEntity -_0809D434: .4byte gMessage -_0809D438: .4byte gPlayerState -_0809D43C: .4byte gPriorityHandler -_0809D440: .4byte gUnk_02034490 -_0809D444: .4byte 0xFFF80000 -_0809D448: - subs r0, #1 - strb r0, [r5, #0xe] - adds r0, r2, #0 - adds r1, r4, #0 - bl CopyPosition -_0809D454: - adds r0, r5, #0 - bl CheckOnScreen - cmp r0, #0 - bne _0809D488 - ldrb r0, [r5, #0xc] - cmp r0, #2 - bne _0809D478 - ldr r0, _0809D494 @ =gSave - ldr r1, [r0, #0x40] - movs r2, #0x80 - lsls r2, r2, #0x15 - orrs r1, r2 - str r1, [r0, #0x40] - movs r0, #9 - movs r1, #0 - bl MenuFadeIn -_0809D478: - ldr r4, [r5, #0x54] - cmp r4, #0 - beq _0809D484 - adds r0, r4, #0 - bl DeleteEntityAny -_0809D484: - bl DeleteThisEntity -_0809D488: - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0809D494: .4byte gSave - - thumb_func_start sub_0809D498 -sub_0809D498: @ 0x0809D498 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r5, r0, #0 - ldrb r0, [r5, #0xc] - cmp r0, #0 - bne _0809D548 - movs r2, #1 - movs r3, #1 - strb r3, [r5, #0xc] - ldrb r1, [r5, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - orrs r0, r2 - strb r0, [r5, #0x18] - ldr r0, _0809D534 @ =0xFFFD8000 - str r0, [r5, #0x20] - ldr r0, _0809D538 @ =0xFFB4C000 - str r0, [r5, #0x34] - adds r4, r5, #0 - adds r4, #0x68 - movs r0, #0xf0 - lsls r0, r0, #8 - strh r0, [r4] - movs r0, #0xc0 - lsls r0, r0, #2 - strh r0, [r5, #0x24] - movs r0, #8 - strb r0, [r5, #0x15] - adds r0, r5, #0 - adds r0, #0x38 - strb r3, [r0] - adds r6, r5, #0 - adds r6, #0x29 - ldrb r1, [r6] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r6] - ldrb r2, [r5, #0x19] - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r2 - strb r0, [r5, #0x19] - ldrb r0, [r5, #0x1b] - ands r1, r0 - movs r0, #0x40 - orrs r1, r0 - strb r1, [r5, #0x1b] - adds r0, r5, #0 - movs r1, #6 - bl SetDefaultPriority - ldr r0, _0809D53C @ =gRoomControls - ldrh r0, [r0, #0xa] - strh r0, [r5, #0x2e] - ldr r0, _0809D540 @ =gPlayerEntity - ldrh r0, [r0, #0x32] - strh r0, [r5, #0x32] - ldr r0, _0809D544 @ =0x00000123 - bl SoundReq - ldrb r1, [r6] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #0x10 - orrs r0, r1 - strb r0, [r6] - adds r0, r5, #0 - movs r1, #0 - bl InitAnimationForceUpdate - bl sub_08078B48 - adds r7, r4, #0 - b _0809D62E - .align 2, 0 -_0809D534: .4byte 0xFFFD8000 -_0809D538: .4byte 0xFFB4C000 -_0809D53C: .4byte gRoomControls -_0809D540: .4byte gPlayerEntity -_0809D544: .4byte 0x00000123 -_0809D548: - adds r7, r5, #0 - adds r7, #0x68 - cmp r0, #1 - bne _0809D62E - ldr r6, _0809D658 @ =gPlayerEntity - ldrb r1, [r6, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - mov r8, r0 - ands r0, r1 - strb r0, [r6, #0x18] - ldr r4, [r5, #0x54] - cmp r4, #0 - beq _0809D5B0 - ldr r2, _0809D65C @ =0xFFF80000 - adds r0, r5, #0 - adds r1, r4, #0 - movs r3, #0 - bl PositionRelative - ldrh r0, [r4, #0x36] - adds r0, #0x18 - strh r0, [r4, #0x36] - adds r0, r5, #0 - adds r0, #0x29 - ldrb r1, [r0] - lsls r1, r1, #0x1d - adds r3, r4, #0 - adds r3, #0x29 - lsrs r1, r1, #0x1d - ldrb r2, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - ldrb r2, [r5, #0x19] - lsrs r2, r2, #6 - lsls r2, r2, #6 - ldrb r3, [r4, #0x19] - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r3 - orrs r0, r2 - strb r0, [r4, #0x19] - ldrb r0, [r5, #0x1b] - lsrs r0, r0, #6 - lsls r0, r0, #6 - ldrb r2, [r4, #0x1b] - ands r1, r2 - orrs r1, r0 - strb r1, [r4, #0x1b] -_0809D5B0: - bl sub_08078B48 - ldr r3, _0809D660 @ =gRoomControls - movs r1, #0xa - ldrsh r0, [r3, r1] - adds r0, #0x78 - movs r2, #0x2e - ldrsh r1, [r5, r2] - cmp r0, r1 - bge _0809D62E - ldrb r0, [r5, #0xc] - adds r0, #1 - strb r0, [r5, #0xc] - adds r2, r5, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #8 - orrs r0, r1 - strb r0, [r2] - cmp r4, #0 - beq _0809D5E6 - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] -_0809D5E6: - str r6, [r3, #0x30] - ldrb r1, [r6, #0x18] - mov r0, r8 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r6, #0x18] - bl ResetPlayerAnimationAndAction - bl ResetPlayerEventPriority - ldr r1, _0809D664 @ =gUnk_02034490 - movs r0, #0 - strb r0, [r1] - movs r0, #0x52 - bl CheckGlobalFlag - cmp r0, #0 - bne _0809D62E - movs r0, #0x69 - movs r1, #0 - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _0809D62E - ldr r1, _0809D668 @ =script_EzloTalkOcarina - bl StartCutscene - adds r1, r4, #0 - adds r1, #0x84 - str r0, [r1] - movs r0, #0x52 - bl SetGlobalFlag -_0809D62E: - adds r0, r5, #0 - bl LinearMoveUpdate - movs r0, #0 - ldrsh r1, [r7, r0] - adds r0, r5, #0 - bl GravityUpdate - adds r0, r5, #0 - bl UpdateAnimationSingleFrame - adds r0, r5, #0 - bl CheckOnScreen - cmp r0, #0 - bne _0809D652 - bl DeleteThisEntity -_0809D652: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0809D658: .4byte gPlayerEntity -_0809D65C: .4byte 0xFFF80000 -_0809D660: .4byte gRoomControls -_0809D664: .4byte gUnk_02034490 -_0809D668: .4byte script_EzloTalkOcarina - - thumb_func_start sub_0809D66C -sub_0809D66C: @ 0x0809D66C - push {r4, lr} - adds r4, r0, #0 - ldr r0, _0809D694 @ =gPlayerEntity - ldrb r1, [r0, #0x1a] - lsls r1, r1, #0x1c - lsrs r1, r1, #0x1c - ldrb r2, [r4, #0x1a] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x1a] - ldrb r0, [r4, #0xc] - cmp r0, #1 - beq _0809D6EC - cmp r0, #1 - bgt _0809D698 - cmp r0, #0 - beq _0809D6A2 - b _0809D6FE - .align 2, 0 -_0809D694: .4byte gPlayerEntity -_0809D698: - cmp r0, #2 - beq _0809D6F4 - cmp r0, #3 - beq _0809D6FA - b _0809D6FE -_0809D6A2: - movs r3, #1 - movs r2, #1 - strb r2, [r4, #0xc] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - orrs r0, r3 - strb r0, [r4, #0x18] - adds r0, r4, #0 - adds r0, #0x38 - strb r2, [r0] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2] - ldrb r2, [r4, #0x19] - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r2 - strb r0, [r4, #0x19] - ldrb r0, [r4, #0x1b] - ands r1, r0 - movs r0, #0x40 - orrs r1, r0 - strb r1, [r4, #0x1b] - adds r0, r4, #0 - movs r1, #6 - bl SetDefaultPriority - adds r0, r4, #0 - movs r1, #0xe0 - bl InitAnimationForceUpdate -_0809D6EC: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - b _0809D6FE -_0809D6F4: - movs r0, #3 - strb r0, [r4, #0xc] - b _0809D6FE -_0809D6FA: - bl DeleteThisEntity -_0809D6FE: - pop {r4, pc} - - thumb_func_start CreateBird -CreateBird: @ 0x0809D700 - push {r4, lr} - sub sp, #4 -.ifdef EU - bl AreaIsOverworld @ TODO correct function? -.else - bl AreaAllowsWarp -.endif - cmp r0, #0 - beq _0809D732 - movs r0, #0 - str r0, [sp] - movs r0, #6 - movs r1, #0x95 - movs r2, #6 - movs r3, #8 - bl FindEntity - adds r4, r0, #0 - cmp r4, #0 - bne _0809D732 - movs r0, #0x95 - movs r1, #8 - movs r2, #0 - bl CreateObject - cmp r0, #0 - beq _0809D732 - strb r4, [r0, #0xe] -_0809D732: - add sp, #4 - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0809D738 -sub_0809D738: @ 0x0809D738 - push {r4, lr} - movs r0, #0x95 - movs r1, #9 - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _0809D77C - ldr r1, _0809D774 @ =gRoomControls - movs r0, #0 - str r0, [r1, #0x30] - adds r0, r4, #0 - movs r1, #6 - bl SetDefaultPriority - bl SetPlayerEventPriority - movs r0, #0x95 - movs r1, #0xa - movs r2, #0 - bl CreateObject - cmp r0, #0 - beq _0809D76C - str r0, [r4, #0x54] -_0809D76C: - ldr r1, _0809D778 @ =gUnk_02034490 - movs r0, #1 - strb r0, [r1] - b _0809D780 - .align 2, 0 -_0809D774: .4byte gRoomControls -_0809D778: .4byte gUnk_02034490 -_0809D77C: - bl ResetPlayerAnimationAndAction -_0809D780: - pop {r4, pc} - .align 2, 0 diff --git a/asm/object/code_0808C964.s b/asm/object/code_0808C964.s index 1cef7b78..dabd1f86 100644 --- a/asm/object/code_0808C964.s +++ b/asm/object/code_0808C964.s @@ -89,7 +89,7 @@ _0808C9FA: adds r0, r4, #0 adds r1, r2, #0 movs r3, #0 - bl sub_0805EC9C + bl SetAffineInfo _0808CA04: pop {r4, pc} .align 2, 0 @@ -205,7 +205,7 @@ _0808CAD6: adds r0, r4, #0 adds r1, r3, #0 movs r3, #0 - bl sub_0805EC9C + bl SetAffineInfo _0808CAE0: pop {r4, r5, r6, pc} .align 2, 0 diff --git a/asm/object/evilSpirit.s b/asm/object/evilSpirit.s index bcdd728a..6998684b 100644 --- a/asm/object/evilSpirit.s +++ b/asm/object/evilSpirit.s @@ -33,7 +33,7 @@ EvilSpirit: @ 0x08086284 ldrh r2, [r0] adds r0, r4, #0 movs r3, #0 - bl sub_0805EC9C + bl SetAffineInfo pop {r4, pc} .align 2, 0 _080862B4: .4byte gUnk_08120668 diff --git a/asm/object/mazaalBossObject.s b/asm/object/mazaalBossObject.s deleted file mode 100644 index ffe7e4a1..00000000 --- a/asm/object/mazaalBossObject.s +++ /dev/null @@ -1,384 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start MazaalBossObject -MazaalBossObject: @ 0x0809AAEC - push {lr} - ldr r2, _0809AB00 @ =gUnk_08123D28 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0809AB00: .4byte gUnk_08123D28 - - thumb_func_start sub_0809AB04 -sub_0809AB04: @ 0x0809AB04 - push {r4, r5, lr} - adds r5, r0, #0 - movs r0, #0x31 - bl CheckFlags - cmp r0, #0 - beq _0809AB22 - adds r0, r5, #0 - bl sub_0809AD68 - adds r0, r5, #0 - bl sub_0809AD8C - bl DeleteThisEntity -_0809AB22: - movs r0, #0x36 - movs r1, #0 - bl CreateEnemy - adds r4, r0, #0 - cmp r4, #0 - beq _0809AB9C - adds r0, r5, #0 - adds r1, r4, #0 - bl CopyPosition - str r4, [r5, #0x54] - ldr r2, _0809AB68 @ =gRoomTransition - adds r0, r2, #0 - adds r0, #0x38 - ldrb r1, [r0] - cmp r1, #0 - beq _0809AB70 - adds r0, #1 - ldrb r0, [r0] - cmp r0, #0 - beq _0809AB52 - bl DeleteThisEntity -_0809AB52: - movs r0, #7 - strb r0, [r5, #0xc] - ldrb r1, [r5, #0x18] - subs r0, #0xb - ands r0, r1 - strb r0, [r5, #0x18] - ldr r0, _0809AB6C @ =gRoomControls - str r5, [r0, #0x30] - bl sub_080809D4 - b _0809AB9C - .align 2, 0 -_0809AB68: .4byte gRoomTransition -_0809AB6C: .4byte gRoomControls -_0809AB70: - movs r0, #1 - strb r0, [r5, #0xc] - movs r0, #0x1e - strb r0, [r5, #0xe] - strb r1, [r5, #0x1e] - adds r2, r5, #0 - adds r2, #0x29 - ldrb r0, [r2] - movs r1, #7 - orrs r0, r1 - strb r0, [r2] - adds r1, r5, #0 - adds r1, #0x63 - movs r0, #0x20 - strb r0, [r1] - ldr r1, _0809ABA0 @ =script_Object89Mazaal - adds r0, r5, #0 - bl StartCutscene - adds r1, r5, #0 - adds r1, #0x84 - str r0, [r1] -_0809AB9C: - pop {r4, r5, pc} - .align 2, 0 -_0809ABA0: .4byte script_Object89Mazaal - - thumb_func_start sub_0809ABA4 -sub_0809ABA4: @ 0x0809ABA4 - push {lr} - movs r1, #0 - bl ExecuteScriptForEntity - pop {pc} - .align 2, 0 - - thumb_func_start sub_0809ABB0 -sub_0809ABB0: @ 0x0809ABB0 - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xe] - subs r0, #1 - strb r0, [r2, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0809ABCE - movs r0, #3 - strb r0, [r2, #0xc] - movs r0, #0x78 - strb r0, [r2, #0xe] - ldr r1, _0809ABD0 @ =gRoomControls - ldr r0, [r2, #0x54] - str r0, [r1, #0x30] -_0809ABCE: - pop {pc} - .align 2, 0 -_0809ABD0: .4byte gRoomControls - - thumb_func_start sub_0809ABD4 -sub_0809ABD4: @ 0x0809ABD4 - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xe] - subs r0, #1 - strb r0, [r1, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0809ABF2 - movs r0, #4 - strb r0, [r1, #0xc] - movs r0, #0x5a - strb r0, [r1, #0xe] - ldr r1, [r1, #0x54] - movs r0, #1 - strb r0, [r1, #0xd] -_0809ABF2: - pop {pc} - - thumb_func_start sub_0809ABF4 -sub_0809ABF4: @ 0x0809ABF4 - push {lr} - adds r2, r0, #0 - ldr r0, [r2, #0x54] - ldrb r0, [r0, #0xd] - cmp r0, #2 - bls _0809AC36 - ldrb r0, [r2, #0xe] - subs r0, #1 - strb r0, [r2, #0xe] - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - bne _0809AC36 - movs r0, #5 - strb r0, [r2, #0xc] - movs r0, #8 - strb r0, [r2, #0xe] - strb r1, [r2, #0xf] - ldrb r1, [r2, #0x19] - subs r0, #0x15 - ands r0, r1 - movs r1, #4 - orrs r0, r1 - strb r0, [r2, #0x19] - ldr r1, _0809AC38 @ =gScreen - adds r2, r1, #0 - adds r2, #0x66 - movs r0, #0xf4 - lsls r0, r0, #4 - strh r0, [r2] - adds r1, #0x68 - movs r0, #0x10 - strh r0, [r1] -_0809AC36: - pop {pc} - .align 2, 0 -_0809AC38: .4byte gScreen - - thumb_func_start sub_0809AC3C -sub_0809AC3C: @ 0x0809AC3C - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - movs r3, #0xff - lsls r0, r0, #0x18 - lsrs r5, r0, #0x18 - cmp r5, #0 - bne _0809AC9A - movs r0, #8 - strb r0, [r4, #0xe] - ldrb r2, [r4, #0xf] - adds r2, #1 - strb r2, [r4, #0xf] - adds r1, r2, #0 - ands r1, r3 - ldr r6, _0809AC9C @ =gScreen - lsls r3, r1, #8 - movs r0, #0x10 - subs r0, r0, r1 - movs r1, #0xff - ands r0, r1 - orrs r3, r0 - adds r0, r6, #0 - adds r0, #0x68 - strh r3, [r0] - lsls r2, r2, #0x18 - lsrs r2, r2, #0x18 - cmp r2, #0xf - bls _0809AC9A - ldrb r1, [r4, #0x19] - movs r0, #0xd - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x19] - adds r0, r6, #0 - adds r0, #0x66 - strh r5, [r0] - movs r0, #6 - strb r0, [r4, #0xc] - movs r0, #0xf - strb r0, [r4, #0xe] - ldrb r1, [r4, #0x18] - subs r0, #0x13 - ands r0, r1 - strb r0, [r4, #0x18] -_0809AC9A: - pop {r4, r5, r6, pc} - .align 2, 0 -_0809AC9C: .4byte gScreen - - thumb_func_start sub_0809ACA0 -sub_0809ACA0: @ 0x0809ACA0 - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xe] - subs r0, #1 - strb r0, [r2, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0809ACC4 - ldr r1, [r2, #0x54] - movs r0, #6 - strb r0, [r1, #0xd] - ldr r0, _0809ACC8 @ =gRoomTransition - adds r0, #0x38 - movs r1, #0xf1 - strb r1, [r0] - adds r0, r2, #0 - bl DeleteEntity -_0809ACC4: - pop {pc} - .align 2, 0 -_0809ACC8: .4byte gRoomTransition - - thumb_func_start sub_0809ACCC -sub_0809ACCC: @ 0x0809ACCC - push {lr} - adds r2, r0, #0 - ldr r0, [r2, #0x54] - ldrb r0, [r0, #0xe] - cmp r0, #1 - bne _0809ACE4 - movs r0, #0 - movs r1, #8 - strb r1, [r2, #0xc] - strb r0, [r2, #0xd] - movs r0, #0xb4 - strb r0, [r2, #0xe] -_0809ACE4: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0809ACE8 -sub_0809ACE8: @ 0x0809ACE8 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xd] - cmp r0, #1 - beq _0809AD1E - cmp r0, #2 - beq _0809AD3A - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0809AD58 - movs r0, #0x5a - strb r0, [r4, #0xe] - movs r0, #1 - strb r0, [r4, #0xd] - movs r0, #0x73 - bl SoundReq - movs r0, #0x31 - bl SetFlag - adds r0, r4, #0 - bl sub_0809AD8C - b _0809AD58 -_0809AD1E: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0809AD58 - movs r0, #0x78 - strb r0, [r4, #0xe] - movs r0, #2 - strb r0, [r4, #0xd] - adds r0, r4, #0 - bl sub_0809AD68 - b _0809AD58 -_0809AD3A: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0809AD58 - ldr r1, _0809AD5C @ =gRoomControls - ldr r0, _0809AD60 @ =gPlayerEntity - str r0, [r1, #0x30] - ldr r0, _0809AD64 @ =gPlayerState - adds r0, #0x8b - movs r1, #1 - strb r1, [r0] - bl DeleteThisEntity -_0809AD58: - pop {r4, pc} - .align 2, 0 -_0809AD5C: .4byte gRoomControls -_0809AD60: .4byte gPlayerEntity -_0809AD64: .4byte gPlayerState - - thumb_func_start sub_0809AD68 -sub_0809AD68: @ 0x0809AD68 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xa] - bl GetCurrentRoomProperty - bl LoadRoomEntityList - movs r0, #0x17 - bl GetInventoryValue - cmp r0, #0 - beq _0809AD8A - ldrb r0, [r4, #0xb] - bl GetCurrentRoomProperty - bl LoadRoomEntityList -_0809AD8A: - pop {r4, pc} - - thumb_func_start sub_0809AD8C -sub_0809AD8C: @ 0x0809AD8C - push {lr} - movs r0, #0x4f - movs r1, #0x22 - movs r2, #0 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _0809ADAC - ldr r0, _0809ADB0 @ =gRoomControls - ldrh r1, [r0, #6] - adds r1, #0xb8 - strh r1, [r2, #0x2e] - ldrh r0, [r0, #8] - adds r0, #8 - strh r0, [r2, #0x32] -_0809ADAC: - pop {pc} - .align 2, 0 -_0809ADB0: .4byte gRoomControls diff --git a/asm/object/minecart.s b/asm/object/minecart.s deleted file mode 100644 index e1579bbb..00000000 --- a/asm/object/minecart.s +++ /dev/null @@ -1,322 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_08091C0C -sub_08091C0C: @ 0x08091C0C - push {r4, lr} - adds r4, r0, #0 - bl sub_08004168 - ldr r1, _08091C30 @ =gPlayerEntity - adds r0, r4, #0 - bl CopyPosition - adds r0, r4, #0 - bl sub_080B1AA8 - cmp r0, #0x68 - beq _08091C46 - cmp r0, #0x68 - bhi _08091C34 - cmp r0, #0x67 - beq _08091C3E - b _08091C80 - .align 2, 0 -_08091C30: .4byte gPlayerEntity -_08091C34: - cmp r0, #0x69 - beq _08091C4E - cmp r0, #0x6a - beq _08091C66 - b _08091C80 -_08091C3E: - ldrb r0, [r4, #0x15] - cmp r0, #0x18 - beq _08091C54 - b _08091C76 -_08091C46: - ldrb r0, [r4, #0x15] - cmp r0, #8 - beq _08091C6C - b _08091C5C -_08091C4E: - ldrb r0, [r4, #0x15] - cmp r0, #8 - bne _08091C5C -_08091C54: - movs r0, #0 - strb r0, [r4, #0x15] - strb r0, [r4, #0x14] - b _08091C86 -_08091C5C: - movs r0, #0x18 - strb r0, [r4, #0x15] - movs r0, #3 - strb r0, [r4, #0x14] - b _08091C86 -_08091C66: - ldrb r0, [r4, #0x15] - cmp r0, #0x18 - bne _08091C76 -_08091C6C: - movs r0, #0x10 - strb r0, [r4, #0x15] - movs r0, #2 - strb r0, [r4, #0x14] - b _08091C86 -_08091C76: - movs r0, #8 - strb r0, [r4, #0x15] - movs r0, #1 - strb r0, [r4, #0x14] - b _08091C86 -_08091C80: - movs r0, #3 - strb r0, [r4, #0xc] - b _08091C92 -_08091C86: - movs r0, #3 - strb r0, [r4, #0xc] - ldr r1, _08091C94 @ =gPlayerEntity - ldrb r0, [r4, #0x14] - lsls r0, r0, #1 - strb r0, [r1, #0x14] -_08091C92: - pop {r4, pc} - .align 2, 0 -_08091C94: .4byte gPlayerEntity - - thumb_func_start sub_08091C98 -sub_08091C98: @ 0x08091C98 - push {r4, r5, lr} - adds r4, r0, #0 - bl LinearMoveUpdate - ldr r5, _08091CC0 @ =gPlayerEntity - adds r0, r4, #0 - adds r1, r5, #0 - bl CopyPosition - ldr r1, _08091CC4 @ =gRoomControls - ldrh r0, [r1] - cmp r0, #0 - bne _08091CBE - movs r0, #3 - strb r0, [r4, #0xc] - movs r0, #0xe0 - lsls r0, r0, #3 - strh r0, [r4, #0x24] - str r5, [r1, #0x30] -_08091CBE: - pop {r4, r5, pc} - .align 2, 0 -_08091CC0: .4byte gPlayerEntity -_08091CC4: .4byte gRoomControls - - thumb_func_start sub_08091CC8 -sub_08091CC8: @ 0x08091CC8 - push {r4, r5, r6, lr} - adds r6, r0, #0 - ldr r2, _08091D58 @ =gPlayerState - ldrb r0, [r2, #2] - cmp r0, #0 - bne _08091D64 - movs r0, #1 - strb r0, [r6, #0xc] - ldrb r0, [r6, #0x15] - movs r1, #0x10 - eors r0, r1 - strb r0, [r6, #0x15] - ldrb r0, [r6, #0x14] - movs r1, #2 - eors r0, r1 - strb r0, [r6, #0x14] - ldr r0, [r2, #0x30] - movs r1, #0x80 - lsls r1, r1, #0x13 - eors r0, r1 - str r0, [r2, #0x30] - adds r0, r6, #0 - adds r0, #0x84 - ldr r4, [r0] - movs r0, #0x2e - ldrsh r1, [r6, r0] - ldr r5, _08091D5C @ =gRoomControls - ldrh r0, [r5, #6] - subs r1, r1, r0 - asrs r1, r1, #4 - movs r3, #0x3f - ands r1, r3 - movs r2, #0x32 - ldrsh r0, [r6, r2] - ldrh r2, [r5, #8] - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r3 - lsls r0, r0, #6 - orrs r1, r0 - strh r1, [r4] - ldrb r0, [r5, #5] - strb r0, [r4, #4] - ldrb r0, [r6, #0x14] - strb r0, [r4, #5] - ldrb r1, [r6, #0x14] - adds r1, #0x10 - adds r0, r6, #0 - bl InitAnimationForceUpdate - ldr r0, _08091D60 @ =0x00004022 - movs r3, #0x2e - ldrsh r1, [r6, r3] - ldrh r2, [r5, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r4, #0x3f - ands r1, r4 - movs r3, #0x32 - ldrsh r2, [r6, r3] - ldrh r3, [r5, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - adds r2, r6, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl SetTile - b _08091D8A - .align 2, 0 -_08091D58: .4byte gPlayerState -_08091D5C: .4byte gRoomControls -_08091D60: .4byte 0x00004022 -_08091D64: - adds r0, r6, #0 - bl UpdateAnimationSingleFrame - ldr r3, _08091D8C @ =gPlayerEntity - adds r0, r6, #0 - adds r0, #0x29 - ldrb r1, [r0] - lsls r1, r1, #0x1d - lsrs r1, r1, #0x1d - subs r1, #1 - adds r3, #0x29 - movs r0, #7 - ands r1, r0 - ldrb r2, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] -_08091D8A: - pop {r4, r5, r6, pc} - .align 2, 0 -_08091D8C: .4byte gPlayerEntity - - thumb_func_start sub_08091D90 -sub_08091D90: @ 0x08091D90 - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x20] - cmp r0, #0 - bge _08091DA0 - adds r0, r4, #0 - bl UpdateAnimationSingleFrame -_08091DA0: - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0 - bne _08091DD8 - movs r1, #0x80 - lsls r1, r1, #6 - adds r0, r4, #0 - bl GravityUpdate - cmp r0, #0 - bne _08091DD8 - ldrb r1, [r4, #0xb] - movs r0, #4 - eors r1, r0 - strb r1, [r4, #0xb] - movs r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - adds r0, #0x84 - ldr r0, [r0] - strb r1, [r0, #6] - movs r0, #0x9e - lsls r0, r0, #1 - bl SoundReq -_08091DD8: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08091DDC -sub_08091DDC: @ 0x08091DDC - push {r4, lr} - adds r4, r0, #0 - ldr r2, _08091E30 @ =gUnk_081223D0 - ldrb r0, [r4, #0x14] - lsls r0, r0, #1 - adds r1, r0, r2 - ldrb r1, [r1] - lsls r1, r1, #0x18 - asrs r1, r1, #0x18 - adds r0, #1 - adds r0, r0, r2 - movs r2, #0 - ldrsb r2, [r0, r2] - adds r0, r4, #0 - bl sub_080B1AF0 - cmp r0, #0xff - bne _08091E5C - ldr r0, _08091E34 @ =gPlayerEntity - ldrb r1, [r4, #0x14] - bl sub_0807BD14 - cmp r0, #0 - beq _08091E5C - ldrb r1, [r4, #0x11] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #6 - orrs r0, r1 - strb r0, [r4, #0x11] - movs r0, #5 - strb r0, [r4, #0xc] - ldrb r0, [r4, #0x15] - cmp r0, #8 - beq _08091E40 - cmp r0, #8 - bgt _08091E38 - cmp r0, #0 - beq _08091E40 - b _08091E44 - .align 2, 0 -_08091E30: .4byte gUnk_081223D0 -_08091E34: .4byte gPlayerEntity -_08091E38: - cmp r0, #0x10 - beq _08091E40 - cmp r0, #0x18 - bne _08091E44 -_08091E40: - movs r0, #0xa0 - strh r0, [r4, #0x24] -_08091E44: - ldr r0, _08091E54 @ =gPlayerEntity - ldrb r1, [r4, #0x15] - strb r1, [r0, #0x15] - ldr r0, _08091E58 @ =gRoomControls - str r4, [r0, #0x30] - movs r0, #1 - b _08091E5E - .align 2, 0 -_08091E54: .4byte gPlayerEntity -_08091E58: .4byte gRoomControls -_08091E5C: - movs r0, #0 -_08091E5E: - pop {r4, pc} diff --git a/asm/object/object96.s b/asm/object/object96.s deleted file mode 100644 index 62c8674d..00000000 --- a/asm/object/object96.s +++ /dev/null @@ -1,288 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Object96 -Object96: @ 0x0809D784 - push {lr} - ldr r1, _0809D7A0 @ =gUnk_081240B0 - ldrb r3, [r0, #0xc] - lsls r3, r3, #2 - adds r3, r3, r1 - ldrb r1, [r0, #0xa] - lsls r1, r1, #5 - ldr r2, _0809D7A4 @ =gUnk_08123FB0 - adds r1, r1, r2 - ldr r2, [r3] - bl _call_via_r2 - pop {pc} - .align 2, 0 -_0809D7A0: .4byte gUnk_081240B0 -_0809D7A4: .4byte gUnk_08123FB0 - - thumb_func_start sub_0809D7A8 -sub_0809D7A8: @ 0x0809D7A8 - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xc] - adds r0, #1 - movs r4, #0 - strb r0, [r5, #0xc] - adds r2, r5, #0 - adds r2, #0x38 - movs r0, #2 - strb r0, [r2] - ldrb r2, [r5, #0x19] - movs r0, #0x3f - ands r0, r2 - movs r2, #0x40 - orrs r0, r2 - strb r0, [r5, #0x19] - ldr r0, [r1, #0x10] - str r0, [r5, #0x20] - ldrb r3, [r1, #0xf] - strb r3, [r5, #0x15] - ldrh r0, [r1, #0x18] - strh r0, [r5, #0x24] - ldrh r0, [r5, #0x32] - ldrh r2, [r1, #0x1a] - subs r0, r0, r2 - strh r0, [r5, #0x32] - str r4, [r5, #0x34] - ldrb r0, [r1, #0x1e] - strb r0, [r5, #0xe] - movs r0, #0x80 - ands r0, r3 - cmp r0, #0 - beq _0809D80C - ldrb r0, [r5, #0x15] - cmp r0, #0x81 - bne _0809D80C - bl Random - ldr r1, _0809D820 @ =gPlayerEntity - ldrb r1, [r1, #0x14] - lsls r1, r1, #2 - movs r2, #3 - ands r0, r2 - adds r1, r1, r0 - subs r1, #2 - movs r0, #0x1f - ands r1, r0 - movs r0, #0x10 - eors r1, r0 - strb r1, [r5, #0x15] -_0809D80C: - adds r0, r5, #0 - bl UpdateSpriteForCollisionLayer - ldrb r4, [r5, #0xa] - adds r0, r5, #0 - bl sub_08080CB4 - strb r4, [r5, #0xa] - pop {r4, r5, pc} - .align 2, 0 -_0809D820: .4byte gPlayerEntity - - thumb_func_start sub_0809D824 -sub_0809D824: @ 0x0809D824 - push {r4, r5, r6, lr} - adds r5, r0, #0 - adds r6, r1, #0 - movs r0, #1 - ldr r2, [r6, #4] - cmp r2, #0 - beq _0809D838 - adds r0, r5, #0 - bl _call_via_r2 -_0809D838: - cmp r0, #0 - beq _0809D850 - ldrb r0, [r5, #0xc] - adds r0, #1 - strb r0, [r5, #0xc] - ldrh r1, [r6, #0x1a] - ldrh r2, [r5, #0x32] - adds r0, r1, r2 - strh r0, [r5, #0x32] - ldrh r0, [r5, #0x36] - subs r0, r0, r1 - strh r0, [r5, #0x36] -_0809D850: - ldrb r4, [r5, #0xa] - ldrb r0, [r6, #0xd] - strb r0, [r5, #0xa] - adds r0, r5, #0 - bl sub_08080CB4 - strb r4, [r5, #0xa] - pop {r4, r5, r6, pc} - - thumb_func_start sub_0809D860 -sub_0809D860: @ 0x0809D860 - push {r4, r5, r6, lr} - adds r5, r0, #0 - adds r6, r1, #0 - bl LinearMoveUpdate - ldr r1, [r6, #0x14] - adds r0, r5, #0 - bl sub_080044EC - cmp r0, #1 - bhi _0809D8B2 - ldrb r0, [r5, #0xe] - cmp r0, #0 - beq _0809D888 - subs r0, #1 - strb r0, [r5, #0xe] - ldr r0, [r6, #0x14] - lsls r0, r0, #3 - str r0, [r5, #0x20] - b _0809D8AC -_0809D888: - ldrb r0, [r5, #0xc] - adds r0, #1 - strb r0, [r5, #0xc] - ldr r0, _0809D8C4 @ =gPlayerEntity - adds r0, #0x38 - ldrb r1, [r0] - adds r0, r5, #0 - adds r0, #0x38 - strb r1, [r0] - adds r0, r5, #0 - bl UpdateSpriteForCollisionLayer - ldr r1, [r6] - cmp r1, #0 - beq _0809D8AC - adds r0, r5, #0 - bl _call_via_r1 -_0809D8AC: - movs r0, #0x6e - bl SoundReq -_0809D8B2: - ldrb r4, [r5, #0xa] - ldrb r0, [r6, #0xd] - strb r0, [r5, #0xa] - adds r0, r5, #0 - bl sub_08080CB4 - strb r4, [r5, #0xa] - pop {r4, r5, r6, pc} - .align 2, 0 -_0809D8C4: .4byte gPlayerEntity - - thumb_func_start sub_0809D8C8 -sub_0809D8C8: @ 0x0809D8C8 - push {r4, r5, r6, lr} - adds r5, r0, #0 - adds r6, r1, #0 - ldr r0, _0809D8E4 @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0809D8E8 - adds r0, r5, #0 - bl sub_0800445C - b _0809D90A - .align 2, 0 -_0809D8E4: .4byte gPlayerState -_0809D8E8: - adds r0, r5, #0 - bl IsCollidingPlayer - cmp r0, #0 - beq _0809D90A - ldrb r0, [r6, #0xd] - ldrb r1, [r5, #0xb] - movs r2, #0 - bl CreateItemEntity - ldrh r0, [r6, #0x1c] - cmp r0, #0 - beq _0809D906 - bl SetFlag -_0809D906: - bl DeleteThisEntity -_0809D90A: - ldrb r4, [r5, #0xa] - ldrb r0, [r6, #0xd] - strb r0, [r5, #0xa] - adds r0, r5, #0 - bl sub_08080CB4 - strb r4, [r5, #0xa] - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_0809D91C -sub_0809D91C: @ 0x0809D91C - push {r4, lr} - adds r4, r0, #0 - movs r1, #0x11 - movs r2, #0 - bl CreateFx - adds r1, r0, #0 - cmp r1, #0 - beq _0809D934 - adds r0, r4, #0 - bl SortEntityBelow -_0809D934: - movs r0, #0x72 - bl SoundReq - pop {r4, pc} - - thumb_func_start sub_0809D93C -sub_0809D93C: @ 0x0809D93C - push {r4, r5, lr} - adds r4, r0, #0 - adds r3, r1, #0 - ldr r2, _0809D9A0 @ =gPlayerEntity - ldrb r0, [r2, #0xc] - cmp r0, #6 - bne _0809D9A4 - ldrb r0, [r3, #0xc] - ldrb r1, [r2, #0x14] - asrs r0, r1 - movs r1, #1 - ands r0, r1 - cmp r0, #0 - beq _0809D9A4 - movs r5, #0x2e - ldrsh r0, [r2, r5] - movs r5, #0x2e - ldrsh r1, [r4, r5] - subs r0, r0, r1 - movs r1, #8 - ldrsb r1, [r3, r1] - adds r0, r0, r1 - ldrb r1, [r3, #0xa] - adds r0, r0, r1 - lsls r1, r1, #1 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - cmp r1, r0 - ble _0809D9A4 - movs r0, #0x32 - ldrsh r2, [r2, r0] - movs r1, #0x32 - ldrsh r0, [r4, r1] - movs r4, #0x1a - ldrsh r1, [r3, r4] - adds r0, r0, r1 - subs r2, r2, r0 - movs r0, #9 - ldrsb r0, [r3, r0] - adds r2, r2, r0 - ldrb r1, [r3, #0xb] - adds r0, r2, r1 - lsls r1, r1, #1 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - cmp r1, r0 - ble _0809D9A4 - movs r0, #1 - b _0809D9A6 - .align 2, 0 -_0809D9A0: .4byte gPlayerEntity -_0809D9A4: - movs r0, #0 -_0809D9A6: - pop {r4, r5, pc} diff --git a/asm/object/object98.s b/asm/object/object98.s deleted file mode 100644 index 97ecdf3b..00000000 --- a/asm/object/object98.s +++ /dev/null @@ -1,128 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Object98 -Object98: @ 0x0809E348 - push {lr} - ldr r2, _0809E35C @ =gUnk_0812418C - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0809E35C: .4byte gUnk_0812418C - - thumb_func_start sub_0809E360 -sub_0809E360: @ 0x0809E360 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - cmp r0, #8 - bls _0809E372 - movs r0, #8 - strb r0, [r4, #0xe] -_0809E372: - ldrb r2, [r4, #0xe] - movs r0, #0x48 - subs r0, r0, r2 - ldr r1, _0809E3E0 @ =gEntCount - ldrb r1, [r1] - cmp r0, r1 - ble _0809E3D8 - movs r5, #0 - adds r7, r4, #0 - adds r7, #0x7e - movs r0, #0x76 - adds r0, r0, r4 - mov r8, r0 - cmp r5, r2 - bhs _0809E3A6 - movs r6, #0xe -_0809E392: - movs r0, #0x17 - bl CreateProjectile - strb r6, [r0, #0xe] - str r4, [r0, #0x50] - adds r6, #0xc - adds r5, #1 - ldrb r2, [r4, #0xe] - cmp r5, r2 - blo _0809E392 -_0809E3A6: - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r0, [r7] - lsls r1, r0, #8 - mov r2, r8 - strh r1, [r2] - lsls r0, r0, #6 - strb r0, [r4, #0x14] - adds r0, r4, #0 - movs r1, #0 - bl SetDefaultPriority - ldrb r0, [r4, #0xa] - cmp r0, #0 - beq _0809E3D8 - bl GetCurrentRoomProperty - str r0, [r4, #0x54] - adds r1, r4, #0 - adds r1, #0x54 - adds r2, r4, #0 - adds r2, #0x74 - adds r0, r4, #0 - bl sub_080A2CC0 -_0809E3D8: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0809E3E0: .4byte gEntCount - - thumb_func_start sub_0809E3E4 -sub_0809E3E4: @ 0x0809E3E4 - push {r4, lr} - adds r4, r0, #0 - adds r2, r4, #0 - adds r2, #0x76 - ldrb r0, [r4, #0xb] - ldrh r1, [r2] - adds r1, r1, r0 - strh r1, [r2] - lsrs r1, r1, #2 - strb r1, [r4, #0x14] - ldrb r0, [r4, #0xa] - cmp r0, #0 - beq _0809E428 - ldrb r1, [r4, #0x15] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - bne _0809E40E - adds r0, r4, #0 - bl LinearMoveUpdate -_0809E40E: - adds r2, r4, #0 - adds r2, #0x74 - ldrh r0, [r2] - subs r0, #1 - strh r0, [r2] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _0809E428 - adds r1, r4, #0 - adds r1, #0x54 - adds r0, r4, #0 - bl sub_080A2CC0 -_0809E428: - pop {r4, pc} - .align 2, 0 diff --git a/asm/object/object99.s b/asm/object/object99.s deleted file mode 100644 index b3b78e2f..00000000 --- a/asm/object/object99.s +++ /dev/null @@ -1,117 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Object99 -Object99: @ 0x0809E42C - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - adds r4, r0, #0 - ldr r6, [r4, #0x50] - ldr r0, [r6, #4] - cmp r0, #0 - bne _0809E444 - bl DeleteThisEntity -_0809E444: - ldrb r0, [r4, #0xc] - movs r1, #0x76 - adds r1, r1, r4 - mov r8, r1 - adds r7, r4, #0 - adds r7, #0x62 - movs r2, #0x74 - adds r2, r2, r4 - mov sb, r2 - adds r5, r4, #0 - adds r5, #0x63 - movs r1, #0x75 - adds r1, r1, r4 - mov sl, r1 - cmp r0, #0 - bne _0809E482 - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r0, [r6, #0x14] - mov r2, r8 - strb r0, [r2] - ldrb r0, [r7] - mov r1, sb - strb r0, [r1] - ldrb r0, [r5] - mov r2, sl - strb r0, [r2] - ldrb r1, [r4, #0x14] - adds r0, r4, #0 - bl InitializeAnimation -_0809E482: - ldrb r0, [r6, #0x14] - mov r1, r8 - ldrb r1, [r1] - cmp r0, r1 - beq _0809E490 - bl DeleteThisEntity -_0809E490: - ldrb r1, [r6, #0x18] - lsls r1, r1, #0x1e - lsrs r1, r1, #0x1e - ldrb r2, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r0, r6, #0 - adds r1, r4, #0 - bl CopyPositionAndSpriteOffset - mov r2, sb - ldrb r0, [r2] - ldrb r1, [r7] - adds r0, r0, r1 - strb r0, [r7] - mov r2, sl - ldrb r0, [r2] - ldrb r1, [r5] - adds r0, r0, r1 - strb r0, [r5] - ldrb r0, [r4, #0x14] - cmp r0, #2 - beq _0809E4D0 - ldrh r0, [r4, #0x32] - adds r0, #1 - strh r0, [r4, #0x32] - ldrb r0, [r5] - subs r0, #1 - b _0809E4DA -_0809E4D0: - ldrh r0, [r4, #0x32] - subs r0, #1 - strh r0, [r4, #0x32] - ldrb r0, [r5] - adds r0, #1 -_0809E4DA: - strb r0, [r5] - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0809E4F4 - bl DeleteThisEntity -_0809E4F4: - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 diff --git a/asm/object/objectA6.s b/asm/object/objectA6.s deleted file mode 100644 index 6a4dc1f4..00000000 --- a/asm/object/objectA6.s +++ /dev/null @@ -1,95 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start ObjectA6 -ObjectA6: @ 0x0809F908 - push {lr} - ldr r2, _0809F91C @ =gUnk_08124800 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0809F91C: .4byte gUnk_08124800 - - thumb_func_start sub_0809F920 -sub_0809F920: @ 0x0809F920 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - cmp r0, #0 - beq _0809F934 - bl DeleteThisEntity -_0809F934: - movs r2, #1 - strb r2, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - adds r1, r4, #0 - adds r1, #0x3c - movs r0, #7 - strb r0, [r1] - adds r1, #4 - movs r0, #0x48 - strb r0, [r1] - adds r0, r4, #0 - adds r0, #0x3f - strb r2, [r0] - subs r1, #5 - movs r0, #2 - strb r0, [r1] - ldr r0, _0809F960 @ =gHitbox_0 - str r0, [r4, #0x48] - pop {r4, pc} - .align 2, 0 -_0809F960: .4byte gHitbox_0 - - thumb_func_start sub_0809F964 -sub_0809F964: @ 0x0809F964 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x41 - ldrb r0, [r0] - cmp r0, #0xa1 - bne _0809F9A8 - adds r0, r4, #0 - movs r1, #0x4e - movs r2, #0 - bl CreateFx - adds r2, r0, #0 - cmp r2, #0 - beq _0809F99A - adds r3, r2, #0 - adds r3, #0x29 - ldrb r1, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #3 - orrs r0, r1 - strb r0, [r3] - adds r1, r2, #0 - adds r1, #0x63 - movs r0, #0xfb - strb r0, [r1] -_0809F99A: - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl SetFlag - bl DeleteThisEntity -_0809F9A8: - pop {r4, pc} - .align 2, 0 diff --git a/asm/object/objectA9.s b/asm/object/objectA9.s deleted file mode 100644 index 5a290a2d..00000000 --- a/asm/object/objectA9.s +++ /dev/null @@ -1,79 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start ObjectA9 -ObjectA9: @ 0x0809FEE0 - push {lr} - ldr r2, _0809FEF4 @ =gUnk_08124850 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0809FEF4: .4byte gUnk_08124850 - - thumb_func_start sub_0809FEF8 -sub_0809FEF8: @ 0x0809FEF8 - push {r4, lr} - adds r4, r0, #0 - movs r0, #1 - strb r0, [r4, #0xc] - ldr r1, _0809FF20 @ =gUnk_0812485C - ldrb r0, [r4, #0xa] - adds r0, r0, r1 - ldrb r1, [r0] - adds r0, r4, #0 - bl InitializeAnimation - ldr r1, _0809FF24 @ =gUnk_08124860 - ldrb r0, [r4, #0xa] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r0, [r0] - bl SoundReq - pop {r4, pc} - .align 2, 0 -_0809FF20: .4byte gUnk_0812485C -_0809FF24: .4byte gUnk_08124860 - - thumb_func_start sub_0809FF28 -sub_0809FF28: @ 0x0809FF28 - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0809FF64 - movs r0, #2 - strb r0, [r4, #0xc] - ldr r1, [r4, #0x50] - ldrb r0, [r4, #0xe] - strb r0, [r1, #0x10] - ldrb r2, [r4, #0xf] - movs r0, #3 - ands r2, r0 - ldrb r3, [r1, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r3 - orrs r0, r2 - strb r0, [r1, #0x18] - adds r1, #0x6d - ldrb r2, [r1] - movs r0, #0xef - ands r0, r2 - strb r0, [r1] -_0809FF64: - pop {r4, pc} - .align 2, 0 diff --git a/asm/object/objectAB.s b/asm/object/objectAB.s deleted file mode 100644 index cbecc43b..00000000 --- a/asm/object/objectAB.s +++ /dev/null @@ -1,124 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start ObjectAB -ObjectAB: @ 0x080A00E0 - push {lr} - ldr r2, _080A00F4 @ =gUnk_0812486C - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_080A00F4: .4byte gUnk_0812486C - - thumb_func_start sub_080A00F8 -sub_080A00F8: @ 0x080A00F8 - push {lr} - ldrb r1, [r0, #0xc] - adds r1, #1 - movs r3, #0 - strb r1, [r0, #0xc] - adds r2, r0, #0 - adds r2, #0x38 - movs r1, #1 - strb r1, [r2] - ldrb r1, [r0, #0x19] - movs r2, #0xc0 - orrs r1, r2 - strb r1, [r0, #0x19] - movs r1, #0x29 - adds r1, r1, r0 - mov ip, r1 - ldrb r1, [r1] - movs r2, #7 - orrs r1, r2 - mov r2, ip - strb r1, [r2] - strb r3, [r0, #0xd] - movs r1, #0 - bl InitializeAnimation - pop {pc} - - thumb_func_start sub_080A012C -sub_080A012C: @ 0x080A012C - push {r4, lr} - adds r4, r0, #0 - movs r0, #0 - bl CheckRoomFlag - cmp r0, #0 - beq _080A0154 - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _080A0154 - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] -_080A0154: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080A0158 -sub_080A0158: @ 0x080A0158 - push {r4, lr} - adds r4, r0, #0 - movs r0, #1 - bl CheckRoomFlag - cmp r0, #0 - beq _080A018A - adds r0, r4, #0 - bl sub_080A0190 - adds r0, r4, #0 - movs r1, #0x1e - bl RequestPriorityDuration - ldr r1, _080A018C @ =gPlayerEntity - adds r0, r4, #0 - movs r2, #0x10 - movs r3, #0x10 - bl EntityInRectRadius - cmp r0, #0 - beq _080A018A - movs r0, #0x37 - bl sub_0805B390 -_080A018A: - pop {r4, pc} - .align 2, 0 -_080A018C: .4byte gPlayerEntity - - thumb_func_start sub_080A0190 -sub_080A0190: @ 0x080A0190 - push {r4, lr} - movs r4, #0 - movs r1, #1 - strb r1, [r0, #0xd] - ldr r1, _080A01B8 @ =gPlayerEntity - bl CopyPosition - ldr r2, _080A01BC @ =gPlayerState - movs r0, #3 - strb r0, [r2, #0xc] - adds r0, r2, #0 - adds r0, #0x38 - strb r4, [r0] - ldr r0, [r2, #0x30] - movs r1, #0x80 - lsls r1, r1, #8 - orrs r0, r1 - str r0, [r2, #0x30] - pop {r4, pc} - .align 2, 0 -_080A01B8: .4byte gPlayerEntity -_080A01BC: .4byte gPlayerState diff --git a/asm/object/objectAD.s b/asm/object/objectAD.s deleted file mode 100644 index 16f62476..00000000 --- a/asm/object/objectAD.s +++ /dev/null @@ -1,117 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start ObjectAD -ObjectAD: @ 0x080A048C - push {lr} - ldr r2, _080A04A0 @ =gUnk_081248BC - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_080A04A0: .4byte gUnk_081248BC - - thumb_func_start sub_080A04A4 -sub_080A04A4: @ 0x080A04A4 - push {r4, lr} - movs r3, #0 - movs r1, #1 - strb r1, [r0, #0xc] - movs r4, #4 - movs r1, #4 - strb r1, [r0, #0x1e] - strb r3, [r0, #0xe] - ldrb r1, [r0, #0x19] - movs r2, #0xc0 - orrs r1, r2 - strb r1, [r0, #0x19] - movs r1, #0x29 - adds r1, r1, r0 - mov ip, r1 - ldrb r1, [r1] - movs r2, #7 - orrs r1, r2 - mov r2, ip - strb r1, [r2] - str r3, [r0, #0x34] - ldrb r2, [r0, #0x19] - movs r1, #0xd - rsbs r1, r1, #0 - ands r1, r2 - orrs r1, r4 - strb r1, [r0, #0x19] - bl sub_080A04E8 - pop {r4, pc} - - thumb_func_start sub_080A04E0 -sub_080A04E0: @ 0x080A04E0 - push {lr} - bl sub_080A04E8 - pop {pc} - - thumb_func_start sub_080A04E8 -sub_080A04E8: @ 0x080A04E8 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r0, [r5, #0x50] - movs r1, #0x36 - ldrsh r0, [r0, r1] - cmp r0, #0 - bge _080A04F8 - rsbs r0, r0, #0 -_080A04F8: - movs r1, #0x80 - lsls r1, r1, #1 - adds r4, r0, r1 - adds r0, r5, #0 - adds r1, r4, #0 - adds r2, r4, #0 - movs r3, #0 - bl sub_0805EC9C - movs r1, #0xe0 - lsls r1, r1, #1 - subs r1, r1, r4 - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #1 - adds r1, r4, #0 - bl __divsi3 - adds r4, r0, #0 - ldr r0, [r5, #0x50] - ldrb r0, [r0, #0xa] - cmp r0, #0x41 - bne _080A0538 - lsls r3, r4, #1 - cmp r3, #0xc - bls _080A052E - movs r3, #0xc -_080A052E: - movs r0, #0x10 - subs r0, r0, r4 - lsls r4, r0, #8 - orrs r4, r3 - b _080A0540 -_080A0538: - movs r0, #0x10 - subs r0, r0, r4 - lsls r0, r0, #8 - orrs r4, r0 -_080A0540: - ldr r0, _080A054C @ =0x0000FFFF - ands r4, r0 - ldr r0, _080A0550 @ =gScreen - adds r0, #0x68 - strh r4, [r0] - pop {r4, r5, pc} - .align 2, 0 -_080A054C: .4byte 0x0000FFFF -_080A0550: .4byte gScreen diff --git a/asm/object/objectB4.s b/asm/object/objectB4.s deleted file mode 100644 index 27adbace..00000000 --- a/asm/object/objectB4.s +++ /dev/null @@ -1,352 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start ObjectB4 -ObjectB4: @ 0x080A0B90 - push {lr} - ldr r2, _080A0BA4 @ =gUnk_08124B20 - ldrb r1, [r0, #0xa] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_080A0BA4: .4byte gUnk_08124B20 - - thumb_func_start sub_080A0BA8 -sub_080A0BA8: @ 0x080A0BA8 - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r2, [r5, #0xc] - cmp r2, #0 - beq _080A0BB8 - cmp r2, #1 - beq _080A0C08 - b _080A0CE0 -_080A0BB8: - movs r0, #1 - strb r0, [r5, #0xc] - ldrb r1, [r5, #0x18] - subs r0, #5 - ands r0, r1 - movs r1, #2 - orrs r0, r1 - strb r0, [r5, #0x18] - movs r0, #9 - strb r0, [r5, #0x1e] - movs r0, #8 - strb r0, [r5, #0xe] - strb r2, [r5, #0xf] - ldrb r1, [r5, #0x19] - movs r2, #0x3f - adds r0, r2, #0 - ands r0, r1 - movs r3, #0x40 - orrs r0, r3 - strb r0, [r5, #0x19] - adds r4, r5, #0 - adds r4, #0x29 - ldrb r1, [r4] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #4 - orrs r0, r1 - strb r0, [r4] - ldrb r0, [r5, #0x1b] - ands r2, r0 - orrs r2, r3 - strb r2, [r5, #0x1b] - adds r0, r5, #0 - movs r1, #0xbf - movs r2, #0x48 - movs r3, #0x1e - bl sub_0806FB00 - b _080A0CE0 -_080A0C08: - ldrb r0, [r5, #0xf] - cmp r0, #6 - bhi _080A0C46 - ldrb r0, [r5, #0xe] - subs r0, #1 - strb r0, [r5, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080A0C46 - strb r2, [r5, #0xe] - ldrb r2, [r5, #0xf] - movs r0, #0xb4 - movs r1, #1 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _080A0C40 - adds r0, r5, #0 - adds r1, r4, #0 - bl CopyPosition - movs r0, #0x68 - strh r0, [r4, #0x32] - adds r0, r5, #0 - adds r1, r4, #0 - bl SortEntityBelow -_080A0C40: - ldrb r0, [r5, #0xf] - adds r0, #1 - strb r0, [r5, #0xf] -_080A0C46: - adds r0, r5, #0 - bl sub_0806FB38 - cmp r0, #0 - bne _080A0C58 - ldr r0, _080A0CE4 @ =gMenu - ldrb r0, [r0, #5] - cmp r0, #1 - bls _080A0CE0 -_080A0C58: - movs r0, #0xbf - strh r0, [r5, #0x2e] - movs r0, #0x48 - strh r0, [r5, #0x32] - movs r0, #0xa - strb r0, [r5, #0x1e] - movs r0, #2 - strb r0, [r5, #0xc] - ldrb r0, [r5, #0xf] - cmp r0, #6 - bhi _080A0CA0 -_080A0C6E: - ldrb r2, [r5, #0xf] - movs r0, #0xb4 - movs r1, #1 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _080A0C92 - adds r0, r5, #0 - adds r1, r4, #0 - bl CopyPosition - movs r0, #0x68 - strh r0, [r4, #0x32] - adds r0, r5, #0 - adds r1, r4, #0 - bl SortEntityBelow -_080A0C92: - ldrb r0, [r5, #0xf] - adds r0, #1 - strb r0, [r5, #0xf] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #6 - bls _080A0C6E -_080A0CA0: - movs r0, #0xb4 - movs r1, #2 - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _080A0CC0 - movs r0, #0xc4 - strh r0, [r4, #0x2e] - movs r0, #0x2c - strh r0, [r4, #0x32] - adds r0, r5, #0 - adds r1, r4, #0 - bl SortEntityAbove -_080A0CC0: - movs r0, #0xb4 - movs r1, #3 - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _080A0CE0 - movs r0, #0xb4 - strh r0, [r4, #0x2e] - movs r0, #0x19 - strh r0, [r4, #0x32] - adds r0, r5, #0 - adds r1, r4, #0 - bl SortEntityAbove -_080A0CE0: - pop {r4, r5, pc} - .align 2, 0 -_080A0CE4: .4byte gMenu - - thumb_func_start sub_080A0CE8 -sub_080A0CE8: @ 0x080A0CE8 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - beq _080A0CF8 - cmp r0, #1 - beq _080A0D28 - b _080A0D66 -_080A0CF8: - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #5 - ands r0, r1 - movs r1, #2 - orrs r0, r1 - strb r0, [r4, #0x18] - ldrb r0, [r4, #0xb] - adds r0, #2 - strb r0, [r4, #0x1e] - ldr r1, _080A0D24 @ =gUnk_08124B10 - ldrb r0, [r4, #0xb] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r1, [r0] - adds r0, r4, #0 - movs r2, #0x68 - movs r3, #0x14 - bl sub_0806FB00 - b _080A0D66 - .align 2, 0 -_080A0D24: .4byte gUnk_08124B10 -_080A0D28: - adds r0, r4, #0 - bl sub_0806FB38 - cmp r0, #0 - bne _080A0D3A - ldr r0, _080A0D68 @ =gMenu - ldrb r0, [r0, #5] - cmp r0, #1 - bls _080A0D66 -_080A0D3A: - ldr r1, _080A0D6C @ =gUnk_08124B10 - ldrb r0, [r4, #0xb] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r0, [r0] - strh r0, [r4, #0x2e] - movs r0, #0x68 - strh r0, [r4, #0x32] - ldrb r1, [r4, #0xb] - movs r0, #7 - subs r1, r0, r1 - adds r3, r4, #0 - adds r3, #0x29 - ands r1, r0 - ldrb r2, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - movs r0, #2 - strb r0, [r4, #0xc] -_080A0D66: - pop {r4, pc} - .align 2, 0 -_080A0D68: .4byte gMenu -_080A0D6C: .4byte gUnk_08124B10 - - thumb_func_start sub_080A0D70 -sub_080A0D70: @ 0x080A0D70 - push {r4, r5, r6, lr} - adds r5, r0, #0 - ldrb r6, [r5, #0xc] - cmp r6, #0 - bne _080A0DC4 - movs r0, #1 - strb r0, [r5, #0xc] - ldrb r1, [r5, #0x18] - subs r0, #5 - ands r0, r1 - movs r1, #2 - orrs r0, r1 - strb r0, [r5, #0x18] - ldrb r2, [r5, #0x19] - movs r4, #0x3f - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r2 - movs r3, #0x40 - orrs r0, r3 - strb r0, [r5, #0x19] - movs r0, #0x29 - adds r0, r0, r5 - mov ip, r0 - ldrb r2, [r0] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r2 - mov r2, ip - strb r0, [r2] - ldrb r0, [r5, #0x1b] - ands r1, r0 - orrs r1, r3 - strb r1, [r5, #0x1b] - movs r0, #0xb - strb r0, [r5, #0x1e] - bl Random - ands r0, r4 - adds r0, #0x40 - strb r0, [r5, #0xe] - strb r6, [r5, #0xf] -_080A0DC4: - ldrb r0, [r5, #0xe] - subs r0, #1 - strb r0, [r5, #0xe] - lsls r0, r0, #0x18 - lsrs r4, r0, #0x18 - cmp r4, #0 - bne _080A0E02 - movs r0, #4 - strb r0, [r5, #0xe] - ldr r2, _080A0E04 @ =gUnk_08124B30 - ldrb r0, [r5, #0xf] - adds r1, r0, #1 - strb r1, [r5, #0xf] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - adds r0, r0, r2 - ldrb r0, [r0] - adds r0, #2 - strb r0, [r5, #0x1e] - ldrb r0, [r5, #0xf] - adds r0, r0, r2 - ldrb r0, [r0] - cmp r0, #0xff - bne _080A0E02 - bl Random - movs r1, #0x3f - ands r0, r1 - adds r0, #0x40 - strb r0, [r5, #0xe] - strb r4, [r5, #0xf] -_080A0E02: - pop {r4, r5, r6, pc} - .align 2, 0 -_080A0E04: .4byte gUnk_08124B30 - - thumb_func_start sub_080A0E08 -sub_080A0E08: @ 0x080A0E08 - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xc] - cmp r0, #0 - bne _080A0E26 - movs r0, #1 - strb r0, [r2, #0xc] - ldrb r1, [r2, #0x18] - subs r0, #5 - ands r0, r1 - movs r1, #2 - orrs r0, r1 - strb r0, [r2, #0x18] - movs r0, #0xf - strb r0, [r2, #0x1e] -_080A0E26: - pop {pc} diff --git a/asm/object/objectB9.s b/asm/object/objectB9.s deleted file mode 100644 index 4741530f..00000000 --- a/asm/object/objectB9.s +++ /dev/null @@ -1,638 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start ObjectB9 -ObjectB9: @ 0x080A1204 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - adds r5, r0, #0 - cmp r5, #0 - bne _080A1260 - adds r0, #1 - strb r0, [r4, #0xc] - bl sub_080A1514 - lsls r0, r0, #2 - ldr r1, _080A126C @ =gUnk_08124C20 - adds r0, r0, r1 - ldrh r2, [r0] - lsls r1, r2, #4 - subs r1, r1, r2 - lsls r1, r1, #2 - adds r2, r4, #0 - adds r2, #0x68 - strh r1, [r2] - adds r1, r4, #0 - adds r1, #0x6a - strh r5, [r1] - ldrh r1, [r0, #2] - adds r0, r4, #0 - adds r0, #0x6c - strh r1, [r0] - adds r1, r4, #0 - adds r1, #0x6e - movs r0, #1 - strh r0, [r1] - adds r0, r4, #0 - adds r0, #0x70 - movs r2, #0 - movs r1, #9 -_080A124A: - strb r2, [r0] - adds r0, #1 - subs r1, #1 - cmp r1, #0 - bge _080A124A - adds r0, r4, #0 - bl sub_0807DD64 - adds r0, r4, #0 - bl sub_0806EC20 -_080A1260: - adds r0, r4, #0 - movs r1, #0 - bl sub_0807DD94 - pop {r4, r5, pc} - .align 2, 0 -_080A126C: .4byte gUnk_08124C20 - - thumb_func_start sub_080A1270 -sub_080A1270: @ 0x080A1270 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #8 - mov sb, r0 - movs r6, #0 - ldr r0, [r0, #0x64] - str r0, [sp, #4] - mov r4, sb - adds r4, #0x70 - ldr r0, _080A12F8 @ =gRoomControls - movs r2, #0xd8 - lsls r2, r2, #2 - adds r1, r2, #0 - ldrh r3, [r0, #6] - adds r1, r1, r3 - movs r7, #0xd4 - lsls r7, r7, #2 - adds r2, r7, #0 - ldrh r0, [r0, #8] - adds r2, r2, r0 - lsls r1, r1, #0x10 - asrs r1, r1, #0x10 - mov r8, r1 - lsls r2, r2, #0x10 - asrs r3, r2, #0x10 - movs r0, #9 - mov sl, r0 - movs r1, #1 - rsbs r1, r1, #0 - adds r5, r1, #0 -_080A12B2: - ldr r7, [sp, #4] - ldr r2, [r7] - movs r0, #0 - ldrsb r0, [r4, r0] - cmp r0, #0 - bne _080A1300 - ldr r0, [r2, #4] - cmp r0, #0 - beq _080A132C - cmp r2, #0 - beq _080A132C - movs r1, #0x2e - ldrsh r0, [r2, r1] - cmp r8, r0 - bgt _080A132E - movs r7, #0x32 - ldrsh r0, [r2, r7] - cmp r3, r0 - bgt _080A132E - ldrb r0, [r2, #0xa] - adds r0, #1 - strb r0, [r4] - movs r0, #1 - strb r0, [r2, #0xb] - adds r6, #1 - ldr r1, _080A12FC @ =gUnk_08124EC8 - ldrb r0, [r2, #0xa] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r0, [r0] - str r3, [sp] - bl SoundReq - ldr r3, [sp] - b _080A132E - .align 2, 0 -_080A12F8: .4byte gRoomControls -_080A12FC: .4byte gUnk_08124EC8 -_080A1300: - cmp r0, #0 - ble _080A132E - adds r6, #1 - ldr r0, [r2, #4] - cmp r0, #0 - beq _080A132C - cmp r2, #0 - beq _080A132C - mov r1, r8 - adds r1, #4 - movs r7, #0x2e - ldrsh r0, [r2, r7] - cmp r1, r0 - ble _080A131E - strh r1, [r2, #0x2e] -_080A131E: - adds r1, r3, #4 - movs r7, #0x32 - ldrsh r0, [r2, r7] - cmp r1, r0 - ble _080A132E - strh r1, [r2, #0x32] - b _080A132E -_080A132C: - strb r5, [r4] -_080A132E: - movs r0, #1 - rsbs r0, r0, #0 - add sl, r0 - adds r4, #1 - ldr r1, [sp, #4] - adds r1, #4 - str r1, [sp, #4] - mov r2, sl - cmp r2, #0 - bge _080A12B2 - mov r0, sb - adds r0, #0x6a - strh r6, [r0] - ldr r0, _080A136C @ =gPlayerState - adds r0, #0x27 - movs r1, #0xff - strb r1, [r0] - mov r1, sb - adds r1, #0x68 - ldrh r0, [r1] - subs r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - cmp r0, #0 - bgt _080A1370 - movs r0, #0xe2 - bl SoundReq - bl sub_08050384 - b _080A1376 - .align 2, 0 -_080A136C: .4byte gPlayerState -_080A1370: - ldr r1, _080A1384 @ =gActiveScriptInfo - movs r0, #0 - strb r0, [r1, #6] -_080A1376: - add sp, #8 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080A1384: .4byte gActiveScriptInfo - - thumb_func_start sub_080A1388 -sub_080A1388: @ 0x080A1388 - push {r4, r5, r6, lr} - adds r5, r0, #0 - adds r5, #0x70 - ldr r4, [r0, #0x64] - movs r6, #9 -_080A1392: - ldr r1, [r4] - movs r0, #0 - ldrsb r0, [r5, r0] - cmp r0, #0 - blt _080A13A6 - cmp r1, #0 - beq _080A13A6 - adds r0, r1, #0 - bl DeleteEntityAny -_080A13A6: - subs r6, #1 - adds r5, #1 - adds r4, #4 - cmp r6, #0 - bge _080A1392 - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_080A13B4 -sub_080A13B4: @ 0x080A13B4 - push {r4, lr} - adds r4, r1, #0 - adds r1, r0, #0 - adds r1, #0x6a - adds r0, #0x6c - movs r2, #0 - ldrsh r1, [r1, r2] - movs r2, #0 - ldrsh r0, [r0, r2] - cmp r1, r0 - blt _080A13D8 - ldr r0, _080A13D4 @ =0x0000300C - bl MessageFromTarget - movs r0, #1 - b _080A13E0 - .align 2, 0 -_080A13D4: .4byte 0x0000300C -_080A13D8: - ldr r0, _080A13E4 @ =0x00003005 - bl MessageFromTarget - movs r0, #0 -_080A13E0: - str r0, [r4, #0x14] - pop {r4, pc} - .align 2, 0 -_080A13E4: .4byte 0x00003005 - - thumb_func_start sub_080A13E8 -sub_080A13E8: @ 0x080A13E8 - push {r4, r5, r6, lr} - adds r5, r0, #0 - bl sub_080A1514 - lsls r0, r0, #2 - ldr r1, _080A1408 @ =gUnk_08124EA0 - adds r4, r0, r1 - movs r6, #0 - ldrb r0, [r4] - cmp r0, #0x5c - beq _080A141C - cmp r0, #0x5c - bgt _080A140C - cmp r0, #0x3f - beq _080A1412 - b _080A1444 - .align 2, 0 -_080A1408: .4byte gUnk_08124EA0 -_080A140C: - cmp r0, #0x63 - beq _080A1430 - b _080A1444 -_080A1412: - ldr r0, _080A1418 @ =gSave - adds r0, #0xbb - b _080A1424 - .align 2, 0 -_080A1418: .4byte gSave -_080A141C: - ldr r0, _080A142C @ =gSave - movs r1, #0x8b - lsls r1, r1, #1 - adds r0, r0, r1 -_080A1424: - ldrb r0, [r0] - cmp r0, #0 - beq _080A1444 - b _080A1454 - .align 2, 0 -_080A142C: .4byte gSave -_080A1430: - movs r0, #0x4f - bl CheckGlobalFlag - cmp r0, #0 - bne _080A1442 - movs r0, #0x4f - bl SetGlobalFlag - b _080A1444 -_080A1442: - movs r6, #1 -_080A1444: - cmp r6, #0 - bne _080A1454 - ldrb r0, [r4] - ldrb r1, [r4, #1] - movs r2, #0 - bl sub_080A7C18 - b _080A145C -_080A1454: - adds r1, r5, #0 - adds r1, #0x6e - movs r0, #2 - strh r0, [r1] -_080A145C: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_080A1460 -sub_080A1460: @ 0x080A1460 - push {r4, r5, lr} - adds r5, r0, #0 - bl sub_080A1514 - adds r1, r5, #0 - adds r1, #0x70 - movs r4, #0 - ldr r3, _080A149C @ =gUnk_08124ECC - movs r2, #9 -_080A1472: - movs r0, #0 - ldrsb r0, [r1, r0] - adds r0, r0, r3 - ldrb r0, [r0] - adds r4, r4, r0 - adds r1, #1 - subs r2, #1 - cmp r2, #0 - bge _080A1472 - adds r0, r4, #0 - bl ModRupees - ldr r0, _080A14A0 @ =0x00003007 - adds r1, r5, #0 - bl MessageNoOverlap - ldr r1, _080A14A4 @ =gMessage - lsls r0, r4, #0x10 - lsrs r0, r0, #0x10 - str r0, [r1, #0x10] - pop {r4, r5, pc} - .align 2, 0 -_080A149C: .4byte gUnk_08124ECC -_080A14A0: .4byte 0x00003007 -_080A14A4: .4byte gMessage - - thumb_func_start sub_080A14A8 -sub_080A14A8: @ 0x080A14A8 - push {r4, lr} - bl sub_080A1514 - adds r4, r0, #0 - adds r4, #1 - cmp r4, #9 - ble _080A14B8 - movs r4, #9 -_080A14B8: - movs r0, #1 - ands r0, r4 - cmp r0, #0 - beq _080A14C8 - movs r0, #0x4b - bl SetGlobalFlag - b _080A14CE -_080A14C8: - movs r0, #0x4b - bl ClearGlobalFlag -_080A14CE: - movs r0, #2 - ands r0, r4 - cmp r0, #0 - beq _080A14DE - movs r0, #0x4c - bl SetGlobalFlag - b _080A14E4 -_080A14DE: - movs r0, #0x4c - bl ClearGlobalFlag -_080A14E4: - movs r0, #4 - ands r0, r4 - cmp r0, #0 - beq _080A14F4 - movs r0, #0x4d - bl SetGlobalFlag - b _080A14FA -_080A14F4: - movs r0, #0x4d - bl ClearGlobalFlag -_080A14FA: - movs r0, #8 - ands r0, r4 - cmp r0, #0 - beq _080A150A - movs r0, #0x4e - bl SetGlobalFlag - b _080A1510 -_080A150A: - movs r0, #0x4e - bl ClearGlobalFlag -_080A1510: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080A1514 -sub_080A1514: @ 0x080A1514 - push {r4, lr} - movs r0, #0x4b - bl CheckGlobalFlag - rsbs r1, r0, #0 - orrs r1, r0 - lsrs r4, r1, #0x1f - movs r0, #0x4c - bl CheckGlobalFlag - cmp r0, #0 - beq _080A1530 - movs r0, #2 - orrs r4, r0 -_080A1530: - movs r0, #0x4d - bl CheckGlobalFlag - cmp r0, #0 - beq _080A153E - movs r0, #4 - orrs r4, r0 -_080A153E: - movs r0, #0x4e - bl CheckGlobalFlag - cmp r0, #0 - beq _080A154C - movs r0, #8 - orrs r4, r0 -_080A154C: - adds r0, r4, #0 - pop {r4, pc} - - thumb_func_start sub_080A1550 -sub_080A1550: @ 0x080A1550 - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - mov r8, r1 - movs r0, #0 - str r0, [r1, #0x14] - movs r0, #0xb9 - movs r1, #0 - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _080A15FE - movs r0, #0x28 - bl zMalloc - str r0, [r4, #0x64] - cmp r0, #0 - bne _080A1582 - adds r0, r4, #0 - bl DeleteEntityAny - b _080A15FE -_080A1582: - mov r0, r8 - ldr r1, [r0, #4] - adds r0, r4, #0 - bl StartCutscene - adds r1, r4, #0 - adds r1, #0x84 - str r0, [r1] - bl sub_080A1514 - lsls r1, r0, #4 - subs r1, r1, r0 - lsls r1, r1, #2 - ldr r0, _080A15B4 @ =gUnk_08124C48 - adds r5, r1, r0 - ldr r4, [r4, #0x64] - mov sb, r4 - ldr r7, _080A15B8 @ =gRoomControls - movs r6, #9 -_080A15A8: - movs r1, #0 - ldrsh r0, [r5, r1] - cmp r0, #0 - bgt _080A15BC - movs r4, #0 - b _080A15E6 - .align 2, 0 -_080A15B4: .4byte gUnk_08124C48 -_080A15B8: .4byte gRoomControls -_080A15BC: - movs r0, #0 - ldrsh r1, [r5, r0] - subs r1, #1 - movs r0, #0x41 - bl CreateEnemy - adds r4, r0, #0 - cmp r4, #0 - beq _080A15E6 - ldrh r0, [r5, #2] - ldrh r1, [r7, #6] - adds r0, r0, r1 - strh r0, [r4, #0x2e] - ldrh r0, [r5, #4] - ldrh r1, [r7, #8] - adds r0, r0, r1 - strh r0, [r4, #0x32] - adds r1, r4, #0 - adds r1, #0x38 - movs r0, #1 - strb r0, [r1] -_080A15E6: - mov r0, sb - adds r0, #4 - mov sb, r0 - subs r0, #4 - stm r0!, {r4} - subs r6, #1 - adds r5, #6 - cmp r6, #0 - bge _080A15A8 - movs r0, #1 - mov r1, r8 - str r0, [r1, #0x14] -_080A15FE: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_080A1608 -sub_080A1608: @ 0x080A1608 - push {r4, lr} - ldr r4, _080A163C @ =0x00003002 - movs r0, #1 - bl CheckRoomFlag - cmp r0, #0 - beq _080A1618 - adds r4, #4 -_080A1618: - adds r0, r4, #0 - bl MessageFromTarget - ldr r4, _080A1640 @ =gMessage - movs r1, #0 - movs r0, #1 - strb r0, [r4, #6] - strb r1, [r4, #7] - bl sub_080A1514 - lsls r0, r0, #2 - ldr r1, _080A1644 @ =gUnk_08124C20 - adds r0, r0, r1 - ldrh r1, [r0] - str r1, [r4, #0x10] - ldrh r0, [r0, #2] - str r0, [r4, #0x14] - pop {r4, pc} - .align 2, 0 -_080A163C: .4byte 0x00003002 -_080A1640: .4byte gMessage -_080A1644: .4byte gUnk_08124C20 - - thumb_func_start sub_080A1648 -sub_080A1648: @ 0x080A1648 - push {r4, lr} - ldr r4, _080A1684 @ =0x0000407F - ldr r1, _080A1688 @ =0x00000D36 - adds r0, r4, #0 - movs r2, #1 - bl SetTileType - ldr r1, _080A168C @ =0x00000D37 - adds r0, r4, #0 - movs r2, #1 - bl SetTileType - ldr r1, _080A1690 @ =0x00000D38 - adds r0, r4, #0 - movs r2, #1 - bl SetTileType - subs r4, #1 - ldr r1, _080A1694 @ =0x00000D75 - adds r0, r4, #0 - movs r2, #1 - bl SetTileType - ldr r1, _080A1698 @ =0x00000E75 - adds r0, r4, #0 - movs r2, #1 - bl SetTileType - pop {r4, pc} - .align 2, 0 -_080A1684: .4byte 0x0000407F -_080A1688: .4byte 0x00000D36 -_080A168C: .4byte 0x00000D37 -_080A1690: .4byte 0x00000D38 -_080A1694: .4byte 0x00000D75 -_080A1698: .4byte 0x00000E75 - - thumb_func_start sub_080A169C -sub_080A169C: @ 0x080A169C - push {lr} - ldr r0, _080A16C8 @ =0x00000D36 - movs r1, #1 - bl sub_0807BA8C - ldr r0, _080A16CC @ =0x00000D37 - movs r1, #1 - bl sub_0807BA8C - ldr r0, _080A16D0 @ =0x00000D38 - movs r1, #1 - bl sub_0807BA8C - ldr r0, _080A16D4 @ =0x00000D75 - movs r1, #1 - bl sub_0807BA8C - ldr r0, _080A16D8 @ =0x00000E75 - movs r1, #1 - bl sub_0807BA8C - pop {pc} - .align 2, 0 -_080A16C8: .4byte 0x00000D36 -_080A16CC: .4byte 0x00000D37 -_080A16D0: .4byte 0x00000D38 -_080A16D4: .4byte 0x00000D75 -_080A16D8: .4byte 0x00000E75 diff --git a/asm/object/objectBlockingStairs.s b/asm/object/objectBlockingStairs.s deleted file mode 100644 index f7cc26f1..00000000 --- a/asm/object/objectBlockingStairs.s +++ /dev/null @@ -1,677 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start ObjectBlockingStairs -ObjectBlockingStairs: @ 0x08092ED4 - push {lr} - ldr r2, _08092EE8 @ =gUnk_0812283C - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08092EE8: .4byte gUnk_0812283C - - thumb_func_start sub_08092EEC -sub_08092EEC: @ 0x08092EEC - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xa] - bl sub_080932D8 - cmp r0, #1 - beq _08092F2C - cmp r0, #2 - beq _08092F3A - movs r0, #1 - strb r0, [r4, #0xc] - movs r1, #0 - movs r2, #0x80 - strh r2, [r4, #0x24] - strb r0, [r4, #0x16] - strb r1, [r4, #0xe] - strb r1, [r4, #0xf] - adds r1, r4, #0 - adds r1, #0x7a - movs r0, #0x20 - strb r0, [r1] - adds r0, r4, #0 - adds r0, #0x7b - strb r2, [r0] - ldrb r0, [r4, #0xa] - cmp r0, #0 - bne _08092F48 - ldr r0, _08092F28 @ =gUnk_080FD288 - str r0, [r4, #0x48] - b _08092F48 - .align 2, 0 -_08092F28: .4byte gUnk_080FD288 -_08092F2C: - movs r0, #4 - strb r0, [r4, #0xc] - ldrh r0, [r4, #0x2e] - subs r0, #0x20 - strh r0, [r4, #0x2e] - movs r5, #2 - b _08092F5E -_08092F3A: - movs r0, #4 - strb r0, [r4, #0xc] - ldrh r0, [r4, #0x2e] - adds r0, #0x20 - strh r0, [r4, #0x2e] - movs r5, #3 - b _08092F5E -_08092F48: - movs r5, #0 - adds r1, r4, #0 - adds r1, #0x86 - ldrh r0, [r1] - cmp r0, #0 - beq _08092F5E - bl CheckFlags - cmp r0, #0 - bne _08092F5E - movs r5, #1 -_08092F5E: - adds r0, r4, #0 - adds r1, r5, #0 - bl sub_080931A4 - pop {r4, r5, pc} - - thumb_func_start sub_08092F68 -sub_08092F68: @ 0x08092F68 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r6, r0, #0 - ldr r0, _08092FA4 @ =gPlayerEntity - movs r2, #0x2e - ldrsh r1, [r0, r2] - movs r2, #0x2e - ldrsh r0, [r6, r2] - subs r1, r1, r0 - mov r8, r1 - adds r1, r6, #0 - adds r1, #0x86 - ldrh r0, [r1] - cmp r0, #0 - beq _08092FA8 - bl CheckFlags - cmp r0, #0 - bne _08092F92 - b _080930E6 -_08092F92: - adds r0, r6, #0 - adds r0, #0x7a - ldrb r0, [r0] - cmp r0, #0 - beq _08092FA8 - adds r0, r6, #0 - bl sub_080932A8 - b _080930E6 - .align 2, 0 -_08092FA4: .4byte gPlayerEntity -_08092FA8: - adds r1, r6, #0 - adds r1, #0x7b - ldrb r2, [r1] - movs r0, #0x3f - ands r0, r2 - adds r7, r1, #0 - cmp r0, #0 - bne _08092FD6 - movs r0, #0xf - movs r4, #0 - orrs r0, r2 - strb r0, [r7] - adds r0, r6, #0 - movs r1, #0 - bl sub_080931A4 - mov r0, r8 - cmp r0, #0 - bge _08092FD6 - ldrb r0, [r7] - movs r1, #0x40 - orrs r0, r1 - strb r0, [r7] -_08092FD6: - ldrb r1, [r7] - movs r0, #0x40 - ands r0, r1 - cmp r0, #0 - beq _08092FEA - adds r5, r6, #0 - adds r5, #0x78 - ldrh r0, [r5] - subs r0, #1 - b _08092FF2 -_08092FEA: - adds r5, r6, #0 - adds r5, #0x78 - ldrh r0, [r5] - adds r0, #1 -_08092FF2: - adds r4, r6, #0 - adds r4, #0x38 - ldrb r1, [r4] - bl GetTileType - adds r1, r0, #0 - ldr r0, _08093034 @ =0x00004031 - cmp r1, r0 - bhi _08093040 - subs r0, #1 - cmp r1, r0 - blo _08093040 - movs r0, #3 - strb r0, [r6, #0xc] - ldr r0, _08093038 @ =gPlayerEntity - ldrb r0, [r0, #0x14] - lsls r0, r0, #2 - strb r0, [r6, #0x15] - movs r0, #0x80 - strh r0, [r6, #0x24] - movs r0, #0x40 - strb r0, [r6, #0xe] - adds r0, r6, #0 - movs r1, #0x50 - bl RequestPriorityDuration - ldr r0, _0809303C @ =0x0000010F - bl EnqueueSFX - adds r0, r6, #0 - bl sub_08093248 - b _080930E6 - .align 2, 0 -_08093034: .4byte 0x00004031 -_08093038: .4byte gPlayerEntity -_0809303C: .4byte 0x0000010F -_08093040: - ldr r0, _0809307C @ =gPlayerEntity - ldrb r1, [r0, #0x14] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _080930E6 - adds r0, r6, #0 - bl sub_08078930 - adds r3, r7, #0 - ldrb r2, [r3] - movs r0, #0x80 - ands r0, r2 - cmp r0, #0 - beq _08093088 - movs r1, #0x7f - ands r1, r2 - strb r1, [r3] - movs r0, #0x40 - ands r0, r1 - cmp r0, #0 - beq _0809309C - ldr r0, _08093080 @ =0x0000402C - ldrh r1, [r5] - subs r1, #1 - ldrb r2, [r4] - bl SetTile - ldr r0, _08093084 @ =0x0000403D - b _080930AA - .align 2, 0 -_0809307C: .4byte gPlayerEntity -_08093080: .4byte 0x0000402C -_08093084: .4byte 0x0000403D -_08093088: - movs r0, #0x40 - ands r0, r2 - cmp r0, #0 - beq _080930C0 - mov r1, r8 - cmp r1, #4 - ble _080930E6 - movs r0, #0x3f - ands r0, r2 - strb r0, [r3] -_0809309C: - ldr r0, _080930B8 @ =0x0000403D - ldrh r1, [r5] - subs r1, #1 - ldrb r2, [r4] - bl SetTile - ldr r0, _080930BC @ =0x0000402D -_080930AA: - ldrh r1, [r5] - adds r1, #1 - ldrb r2, [r4] - bl SetTile - b _080930E6 - .align 2, 0 -_080930B8: .4byte 0x0000403D -_080930BC: .4byte 0x0000402D -_080930C0: - mov r1, r8 - rsbs r0, r1, #0 - cmp r0, #4 - ble _080930E6 - movs r0, #0x40 - orrs r0, r2 - strb r0, [r7] - ldr r0, _080930EC @ =0x0000402C - ldrh r1, [r5] - subs r1, #1 - ldrb r2, [r4] - bl SetTile - ldr r0, _080930F0 @ =0x0000403D - ldrh r1, [r5] - adds r1, #1 - ldrb r2, [r4] - bl SetTile -_080930E6: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080930EC: .4byte 0x0000402C -_080930F0: .4byte 0x0000403D - - thumb_func_start sub_080930F4 -sub_080930F4: @ 0x080930F4 - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldrb r3, [r4, #0xe] - cmp r3, #0 - beq _08093104 - bl sub_08093280 - b _08093174 -_08093104: - ldr r5, _0809315C @ =gPlayerState - ldrb r0, [r5, #5] - cmp r0, #0x12 - bne _08093168 - ldr r6, _08093160 @ =gPlayerEntity - adds r0, r6, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _08093174 - ldrb r0, [r4, #0xf] - adds r0, #1 - strb r0, [r4, #0xf] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #8 - bls _08093174 - movs r0, #0x10 - strb r0, [r5, #0xc] - adds r0, r5, #0 - adds r0, #0x38 - movs r2, #0x40 - strb r2, [r0] - ldr r0, [r5, #0x30] - movs r1, #1 - orrs r0, r1 - str r0, [r5, #0x30] - strh r3, [r6, #0x2c] - strh r3, [r6, #0x30] - ldrb r0, [r6, #0x14] - movs r1, #4 - eors r0, r1 - lsls r0, r0, #2 - strb r0, [r4, #0x15] - strb r2, [r4, #0xe] - ldr r0, _08093164 @ =0x0000010F - bl EnqueueSFX - adds r0, r4, #0 - bl sub_08093248 - b _08093174 - .align 2, 0 -_0809315C: .4byte gPlayerState -_08093160: .4byte gPlayerEntity -_08093164: .4byte 0x0000010F -_08093168: - ldrb r0, [r4, #0xd] - cmp r0, #6 - bne _08093174 - movs r0, #1 - strb r0, [r4, #0xc] - strb r3, [r4, #0xf] -_08093174: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_08093178 -sub_08093178: @ 0x08093178 - push {r4, lr} - adds r4, r0, #0 - bl sub_0800445C - adds r0, r4, #0 - bl LinearMoveUpdate - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08093198 - adds r0, r4, #0 - bl sub_08093334 -_08093198: - adds r0, r4, #0 - bl sub_08093364 - pop {r4, pc} - - thumb_func_start nullsub_120 -nullsub_120: @ 0x080931A0 - bx lr - .align 2, 0 - - thumb_func_start sub_080931A4 -sub_080931A4: @ 0x080931A4 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r5, r1, #0 - movs r1, #0x2e - ldrsh r2, [r0, r1] - ldr r3, _080931F0 @ =gRoomControls - ldrh r1, [r3, #6] - subs r2, r2, r1 - asrs r2, r2, #4 - movs r4, #0x3f - ands r2, r4 - movs r6, #0x32 - ldrsh r1, [r0, r6] - ldrh r3, [r3, #8] - subs r1, r1, r3 - asrs r1, r1, #4 - ands r1, r4 - lsls r1, r1, #6 - orrs r2, r1 - adds r1, r0, #0 - adds r1, #0x78 - strh r2, [r1] - ldrh r1, [r1] - subs r1, #0x40 - mov r8, r1 - adds r0, #0x38 - ldrb r7, [r0] - cmp r5, #1 - beq _080931F4 - cmp r5, #1 - blo _0809320C - cmp r5, #2 - beq _080931FC - cmp r5, #3 - beq _08093204 - b _0809320C - .align 2, 0 -_080931F0: .4byte gRoomControls -_080931F4: - ldr r0, _080931F8 @ =gUnk_08122862 - b _0809320E - .align 2, 0 -_080931F8: .4byte gUnk_08122862 -_080931FC: - ldr r0, _08093200 @ =gUnk_08122874 - b _0809320E - .align 2, 0 -_08093200: .4byte gUnk_08122874 -_08093204: - ldr r0, _08093208 @ =gUnk_08122886 - b _0809320E - .align 2, 0 -_08093208: .4byte gUnk_08122886 -_0809320C: - ldr r0, _08093230 @ =gUnk_08122850 -_0809320E: - movs r4, #0 - movs r6, #0 - adds r5, r0, #0 -_08093214: - mov r0, r8 - adds r1, r0, r6 - adds r1, r1, r4 - subs r1, #1 - ldrh r0, [r5] - adds r2, r7, #0 - bl SetTile - cmp r4, #2 - beq _08093234 - cmp r4, #5 - beq _08093238 - b _0809323A - .align 2, 0 -_08093230: .4byte gUnk_08122850 -_08093234: - movs r6, #0x3d - b _0809323A -_08093238: - movs r6, #0x7a -_0809323A: - adds r5, #2 - adds r4, #1 - cmp r4, #8 - bls _08093214 - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_08093248 -sub_08093248: @ 0x08093248 - push {r4, r5, r6, r7, lr} - adds r1, r0, #0 - adds r1, #0x78 - ldrh r1, [r1] - adds r7, r1, #0 - subs r7, #0x40 - adds r0, #0x38 - ldrb r6, [r0] - movs r4, #0 - movs r5, #0 -_0809325C: - adds r0, r7, r5 - adds r0, r0, r4 - subs r0, #1 - adds r1, r6, #0 - bl sub_0807BA8C - cmp r4, #2 - beq _08093272 - cmp r4, #5 - beq _08093276 - b _08093278 -_08093272: - movs r5, #0x3d - b _08093278 -_08093276: - movs r5, #0x7a -_08093278: - adds r4, #1 - cmp r4, #8 - bls _0809325C - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_08093280 -sub_08093280: @ 0x08093280 - push {r4, lr} - adds r4, r0, #0 - bl sub_0800445C - adds r0, r4, #0 - bl LinearMoveUpdate - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080932A0 - adds r0, r4, #0 - bl sub_08093334 -_080932A0: - adds r0, r4, #0 - bl sub_08093364 - pop {r4, pc} - - thumb_func_start sub_080932A8 -sub_080932A8: @ 0x080932A8 - push {lr} - adds r1, r0, #0 - adds r2, r1, #0 - adds r2, #0x7a - ldrb r0, [r2] - subs r0, #1 - strb r0, [r2] - movs r2, #3 - ands r2, r0 - cmp r2, #1 - beq _080932C8 - cmp r2, #3 - beq _080932D0 - adds r1, #0x62 - movs r0, #0 - b _080932D4 -_080932C8: - adds r0, r1, #0 - adds r0, #0x62 - strb r2, [r0] - b _080932D6 -_080932D0: - adds r1, #0x62 - movs r0, #0xff -_080932D4: - strb r0, [r1] -_080932D6: - pop {pc} - - thumb_func_start sub_080932D8 -sub_080932D8: @ 0x080932D8 - push {r4, lr} - lsls r0, r0, #3 - ldr r1, _080932F0 @ =gUnk_08122898 - adds r4, r0, r1 - ldr r0, [r4] - ldrh r1, [r4, #4] - bl CheckLocalFlagByBank - cmp r0, #0 - beq _080932F4 - movs r0, #1 - b _08093306 - .align 2, 0 -_080932F0: .4byte gUnk_08122898 -_080932F4: - ldr r0, [r4] - ldrh r1, [r4, #6] - bl CheckLocalFlagByBank - cmp r0, #0 - bne _08093304 - movs r0, #0 - b _08093306 -_08093304: - movs r0, #2 -_08093306: - pop {r4, pc} - - thumb_func_start sub_08093308 -sub_08093308: @ 0x08093308 - push {lr} - adds r2, r1, #0 - lsls r0, r0, #3 - ldr r1, _08093320 @ =gUnk_08122898 - adds r1, r0, r1 - cmp r2, #1 - bne _08093324 - ldr r0, [r1] - ldrh r1, [r1, #4] - bl SetLocalFlagByBank - b _08093330 - .align 2, 0 -_08093320: .4byte gUnk_08122898 -_08093324: - cmp r2, #2 - bne _08093330 - ldr r0, [r1] - ldrh r1, [r1, #6] - bl SetLocalFlagByBank -_08093330: - pop {pc} - .align 2, 0 - - thumb_func_start sub_08093334 -sub_08093334: @ 0x08093334 - push {r4, r5, lr} - adds r4, r0, #0 - movs r0, #4 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x15] - movs r0, #0x10 - ands r0, r1 - movs r5, #2 - cmp r0, #0 - beq _0809334A - movs r5, #1 -_0809334A: - adds r1, r5, #1 - adds r0, r4, #0 - bl sub_080931A4 - ldrb r0, [r4, #0xa] - adds r1, r5, #0 - bl sub_08093308 - movs r0, #0x72 - bl EnqueueSFX - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08093364 -sub_08093364: @ 0x08093364 - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r1, [r5, #0xe] - movs r0, #3 - ands r0, r1 - cmp r0, #0 - bne _080933BC - movs r0, #0xf - movs r1, #0x11 - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _080933BC - str r5, [r4, #0x50] - adds r0, r5, #0 - adds r1, r4, #0 - bl CopyPosition - ldrb r1, [r5, #0x15] - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - beq _0809339C - ldrh r0, [r4, #0x2e] - adds r0, #0x12 - b _080933A0 -_0809339C: - ldrh r0, [r4, #0x2e] - subs r0, #0x12 -_080933A0: - strh r0, [r4, #0x2e] - movs r0, #0x32 - ldrsh r2, [r4, r0] - ldrb r1, [r5, #0xe] - movs r0, #8 - ands r0, r1 - cmp r0, #0 - beq _080933B6 - adds r0, r2, #0 - adds r0, #8 - b _080933BA -_080933B6: - adds r0, r2, #0 - subs r0, #8 -_080933BA: - strh r0, [r4, #0x32] -_080933BC: - pop {r4, r5, pc} - .align 2, 0 diff --git a/asm/object/picoBloom.s b/asm/object/picoBloom.s deleted file mode 100644 index 0fa701a6..00000000 --- a/asm/object/picoBloom.s +++ /dev/null @@ -1,91 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start PicoBloom -PicoBloom: @ 0x08098A78 - push {lr} - ldr r2, _08098A8C @ =gUnk_08123568 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08098A8C: .4byte gUnk_08123568 - - thumb_func_start sub_08098A90 -sub_08098A90: @ 0x08098A90 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xb] - cmp r0, #1 - beq _08098A9C - movs r0, #2 -_08098A9C: - strb r0, [r4, #0xc] - bl Random - movs r1, #0x7f - ands r0, r1 - adds r0, #0x7f - strb r0, [r4, #0xe] - adds r1, r4, #0 - adds r1, #0x38 - movs r0, #1 - strb r0, [r1] - adds r0, r4, #0 - bl UpdateSpriteForCollisionLayer - ldr r1, _08098ACC @ =gUnk_08123574 - ldrb r0, [r4, #0xa] - adds r0, r0, r1 - ldrb r1, [r0] - ldrb r0, [r4, #0xb] - adds r1, r1, r0 - adds r0, r4, #0 - bl InitializeAnimation - pop {r4, pc} - .align 2, 0 -_08098ACC: .4byte gUnk_08123574 - - thumb_func_start sub_08098AD0 -sub_08098AD0: @ 0x08098AD0 - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xe] - subs r0, #1 - strb r0, [r1, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08098AE6 - ldrb r0, [r1, #0xc] - adds r0, #1 - strb r0, [r1, #0xc] -_08098AE6: - pop {pc} - - thumb_func_start sub_08098AE8 -sub_08098AE8: @ 0x08098AE8 - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r4, #0x5a - ldrb r1, [r4] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _08098B08 - movs r0, #0xfe - ands r0, r1 - strb r0, [r4] - ldr r0, _08098B0C @ =0x0000021B - bl EnqueueSFX -_08098B08: - pop {r4, pc} - .align 2, 0 -_08098B0C: .4byte 0x0000021B diff --git a/asm/src/code_08003FC4.s b/asm/src/code_08003FC4.s index 718c0306..ee3bd1d7 100644 --- a/asm/src/code_08003FC4.s +++ b/asm/src/code_08003FC4.s @@ -5,22 +5,22 @@ .text +@ r0 = Entity* +@ r1 = Gravity strength +@ returns z pos thumb_func_start GravityUpdate GravityUpdate: @ 0x08003FC4 - @ r0 = Entity* - @ r1 = Gravity strength - @ returns z pos adds r3, r0, #0 ldr r0, [r3, #0x34] ldr r2, [r3, #0x20] subs r0, r0, r2 - bpl _08003FD6 + bpl hitground subs r2, r2, r1 str r0, [r3, #0x34] str r2, [r3, #0x20] bx lr -_08003FD6: +hitground: movs r0, #0 str r0, [r3, #0x34] str r0, [r3, #0x20] @@ -29,7 +29,7 @@ _08003FD6: non_word_aligned_thumb_func_start sub_08003FDE sub_08003FDE: @ 0x08003FDE push {r0, lr} - bl sub_08003FF2 + bl CheckEntityPickup cmp r0, #0 pop {r2} beq _08003FF0 @@ -38,8 +38,8 @@ sub_08003FDE: @ 0x08003FDE _08003FF0: pop {pc} - non_word_aligned_thumb_func_start sub_08003FF2 -sub_08003FF2: @ 0x08003FF2 + non_word_aligned_thumb_func_start CheckEntityPickup +CheckEntityPickup: @ 0x08003FF2 push {r4, r5, r6, r7, lr} ldr r4, [r1, #0x48] ldrb r5, [r4, #6] diff --git a/asm/src/code_080043E8.s b/asm/src/code_080043E8.s index 8ce6abb5..9bd9eeee 100644 --- a/asm/src/code_080043E8.s +++ b/asm/src/code_080043E8.s @@ -170,7 +170,7 @@ _08004516: thumb_func_start sub_0800451C sub_0800451C: @ 0x0800451C push {r0, lr} - bl sub_080B1AA8 + bl GetTileUnderEntity adds r1, r0, #0 pop {r0, r3} mov lr, r3 diff --git a/asm/src/crt0.s b/asm/src/crt0.s index 2e3609b4..6dde879b 100644 --- a/asm/src/crt0.s +++ b/asm/src/crt0.s @@ -13,37 +13,25 @@ header: start_vector: mov r0, #0x12 msr cpsr_fc, r0 - ldr sp, sp_irq + ldr sp, =irq_stack_begin mov r0, #0x1f msr cpsr_fc, r0 - ldr sp, sp_usr - ldr r1, INTR_VECTOR_BUF - ldr r0, intr_main + ldr sp, =usr_stack_begin + ldr r1, =0x03007FFC + ldr r0, =ram_IntrMain str r0, [r1] -.ifdef EU - ldr r1, unk_function - mov lr, pc - bx r1 -.else -.ifdef DEMO_JP - ldr r1, unk_function + +.ifndef USA +.ifndef DEMO_USA +.ifndef JP + ldr r1, =fill_rq_stack mov lr, pc bx r1 .endif .endif +.endif + ldr r1, =AgbMain mov lr, pc bx r1 -_080000F0: b start_vector -sp_irq: .4byte irq_stack_begin -sp_usr: .4byte usr_stack_begin -INTR_VECTOR_BUF: .4byte 0x03007FFC -intr_main: .4byte ram_IntrMain -.ifdef EU -unk_function: .4byte fill_rq_stack -.else -.ifdef DEMO_JP -unk_function: .4byte fill_rq_stack -.endif -.endif diff --git a/asm/src/intr.s b/asm/src/intr.s index 4aea95fc..93b68c22 100644 --- a/asm/src/intr.s +++ b/asm/src/intr.s @@ -129,7 +129,7 @@ arm_sub_080B1A8C: @ 0x080B1A8C ldrb r2, [r0, #0x38] mov r0, r3 b arm_sub_080B1AB4 -arm_sub_080B1AA8: +arm_GetTileUnderEntity: ldrb r2, [r0, #0x38] ldrh r1, [r0, #0x32] ldrh r0, [r0, #0x2e] diff --git a/asm/src/script.s b/asm/src/script.s index 71de3364..4a607068 100644 --- a/asm/src/script.s +++ b/asm/src/script.s @@ -106,7 +106,7 @@ _08016A64: sub_08016A6C: @ 0x08016A6C push {r4, r5, lr} adds r4, r0, #0 - bl sub_080B1AA8 + bl GetTileUnderEntity add r1, pc, #0x38 _08016A76: adds r1, #4 diff --git a/asm/src/stack_check.s b/asm/src/stack_check.s new file mode 100644 index 00000000..32ed1fa5 --- /dev/null +++ b/asm/src/stack_check.s @@ -0,0 +1,43 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + .syntax unified + .text + + thumb_func_start fill_rq_stack +fill_rq_stack: // fill iqr and user stack with 'MCZ3' + adr r0, pool + ldm r0!, {r1, r2, r3} +loop1: + subs r2, #4 + str r1, [r2] + cmp r2, r3 + bgt loop1 + bx lr + +// unused +// returns the maximum values reached by irq stack (r0) and usr stack (r1) +check_stack_threshold: + adr r0, pool + ldm r0!, {r1, r2, r3} +loop2: + ldr r0, [r3] + adds r3, #4 + cmp r0, r1 // cmp against magic + beq loop2 + + subs r2, #0xa0 +loop3: + ldr r0, [r2] + adds r2, #4 + cmp r0, r1 // cmp against magic + beq loop3 + + subs r1, r2, #4 + subs r0, r3, #4 + bx lr + + .align 2, 0 +pool: + .byte '3, 'Z, 'C, 'M // r1 + .4byte irq_stack_begin // r2 + .4byte usr_stack_top // r3 diff --git a/asm/src/veneer.s b/asm/src/veneer.s index 3cb55e81..a160d6cd 100644 --- a/asm/src/veneer.s +++ b/asm/src/veneer.s @@ -5,51 +5,6 @@ .text -.ifndef USA -.ifndef DEMO_USA -.ifndef JP - thumb_func_start fill_rq_stack -fill_rq_stack: // fill iqr and user stack with 'MCZ3' - adr r0, 1f - ldm r0!, {r1, r2, r3} -0: - subs r2, #4 - str r1, [r2] - cmp r2, r3 - bgt 0b - bx lr - -// unused -// returns the maximum values reached by irq stack (r0) and usr stack (r1) -check_stack_threshold: - adr r0, 1f - ldm r0!, {r1, r2, r3} -0: - ldr r0, [r3] - adds r3, #4 - cmp r0, r1 // cmp against magic - beq 0b - - subs r2, #0xa0 -0: - ldr r0, [r2] - adds r2, #4 - cmp r0, r1 // cmp against magic - beq 0b - - subs r1, r2, #4 - subs r0, r3, #4 - bx lr - - .align 2, 0 -1: - .byte '3, 'Z, 'C, 'M // r1 - .4byte irq_stack_begin // r2 - .4byte usr_stack_top // r3 -.endif -.endif -.endif - thumb_func_start UpdateScrollVram UpdateScrollVram: @ 0x08000108 push {r4, lr} @@ -322,9 +277,9 @@ sub_080B1A8C: @ 0x080002B4 @ return: @ ======== @ Called every frame a pot is thrown, every frame the screen is sliding in a transition, and once when entering stairs. - thumb_func_start sub_080B1AA8 -sub_080B1AA8: @ 0x080002B8 - ldr r3, _08000324 @ =ram_sub_080B1AA8 + thumb_func_start GetTileUnderEntity +GetTileUnderEntity: @ 0x080002B8 + ldr r3, _08000324 @ =ram_GetTileUnderEntity bx r3 @ call 0x080B1AB4 @@ -458,7 +413,7 @@ _08000314: .4byte ram_sub_080B1A48 _08000318: .4byte ram_sub_080B1A58 _0800031C: .4byte ram_GetTileType _08000320: .4byte ram_sub_080B1A8C -_08000324: .4byte ram_sub_080B1AA8 +_08000324: .4byte ram_GetTileUnderEntity _08000328: .4byte ram_sub_080B1AB4 _0800032C: .4byte ram_sub_080B1AC8 _08000330: .4byte ram_sub_080B1AD8 diff --git a/asm/staffroll.s b/asm/staffroll.s deleted file mode 100644 index 0e876b9b..00000000 --- a/asm/staffroll.s +++ /dev/null @@ -1,716 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start StaffrollTask -StaffrollTask: @ 0x080A35E0 - push {lr} - ldr r1, _080A35FC @ =gRoomTransition - ldr r0, [r1] - adds r0, #1 - str r0, [r1] - ldr r1, _080A3600 @ =gUnk_08127D00 - ldr r0, _080A3604 @ =gMain - ldrb r0, [r0, #3] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {pc} - .align 2, 0 -_080A35FC: .4byte gRoomTransition -_080A3600: .4byte gUnk_08127D00 -_080A3604: .4byte gMain - - thumb_func_start sub_080A3608 -sub_080A3608: @ 0x080A3608 - push {r4, r5, lr} - ldr r0, _080A3640 @ =gSave - movs r5, #0 - movs r4, #1 - strb r4, [r0, #6] - movs r0, #0x55 - bl SetGlobalFlag - ldr r0, _080A3644 @ =gMain - strb r4, [r0, #3] - ldr r2, _080A3648 @ =gMenu - strb r5, [r2, #5] - movs r1, #0 - movs r0, #0xb4 - strh r0, [r2, #8] - movs r0, #5 - strb r0, [r2, #0x16] - movs r0, #4 - strb r0, [r2, #0x17] - strb r1, [r2, #0x1a] - movs r0, #0x80 - lsls r0, r0, #0x12 - ldrb r0, [r0, #7] - cmp r0, #1 - bls _080A3650 - ldr r0, _080A364C @ =gUnk_08127998 - b _080A365E - .align 2, 0 -_080A3640: .4byte gSave -_080A3644: .4byte gMain -_080A3648: .4byte gMenu -_080A364C: .4byte gUnk_08127998 -_080A3650: - cmp r0, #1 - bne _080A365C - ldr r0, _080A3658 @ =gUnk_08127644 - b _080A365E - .align 2, 0 -_080A3658: .4byte gUnk_08127644 -_080A365C: - ldr r0, _080A36B0 @ =gUnk_081272F0 -_080A365E: - str r0, [r2, #0xc] - movs r0, #0 - bl DispReset - movs r0, #0xb - bl LoadPaletteGroup - movs r0, #0xc - bl LoadPaletteGroup - movs r0, #0 - movs r1, #0 - bl SetColor - ldr r2, _080A36B4 @ =gScreen - movs r0, #0xc8 - lsls r0, r0, #3 - strh r0, [r2] - adds r1, r2, #0 - adds r1, #0x66 - ldr r0, _080A36B8 @ =0x00002442 - strh r0, [r1] - adds r1, #2 - movs r0, #0x80 - lsls r0, r0, #5 - strh r0, [r1] - ldr r0, _080A36BC @ =0x00001E4D - strh r0, [r2, #0x14] - subs r0, #0x8a - strh r0, [r2, #0x20] - bl InitSoundPlayingInfo - bl ResetSystemPriority - movs r1, #0x80 - lsls r1, r1, #1 - movs r0, #5 - bl SetFade - pop {r4, r5, pc} - .align 2, 0 -_080A36B0: .4byte gUnk_081272F0 -_080A36B4: .4byte gScreen -_080A36B8: .4byte 0x00002442 -_080A36BC: .4byte 0x00001E4D - - thumb_func_start sub_080A36C0 -sub_080A36C0: @ 0x080A36C0 - push {lr} - ldr r1, _080A36D4 @ =gUnk_08127D10 - ldr r0, _080A36D8 @ =gMenu - ldrb r0, [r0, #5] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {pc} - .align 2, 0 -_080A36D4: .4byte gUnk_08127D10 -_080A36D8: .4byte gMenu - - thumb_func_start sub_080A36DC -sub_080A36DC: @ 0x080A36DC - push {lr} - ldr r1, _080A36F4 @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _080A36F0 - bl sub_080A3954 -_080A36F0: - pop {pc} - .align 2, 0 -_080A36F4: .4byte gMenu - - thumb_func_start sub_080A36F8 -sub_080A36F8: @ 0x080A36F8 - push {r4, r5, lr} - ldr r0, _080A3754 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _080A3752 - ldr r5, _080A3758 @ =gMenu - movs r0, #0x10 - ldrsh r4, [r5, r0] - lsls r4, r4, #1 - ldr r0, _080A375C @ =gUnk_08127CEC - adds r4, r4, r0 - ldrb r0, [r4] - bl LoadPaletteGroup - ldrb r0, [r4, #1] - bl LoadGfxGroup - ldr r0, _080A3760 @ =gBG1Buffer - movs r1, #0x80 - lsls r1, r1, #4 - bl MemClear - ldr r1, _080A3764 @ =gScreen - movs r2, #0 - movs r0, #1 - strh r0, [r1, #0x1a] - ldrh r0, [r5, #0x12] - strh r0, [r1, #0x22] - adds r1, #0x68 - movs r0, #0x80 - lsls r0, r0, #5 - strh r0, [r1] - strb r2, [r5, #5] - ldrb r0, [r5, #0x1a] - cmp r0, #0 - bne _080A374A - movs r0, #1 - strb r0, [r5, #0x1a] - movs r0, #9 - bl SoundReq -_080A374A: - movs r0, #4 - movs r1, #8 - bl SetFade -_080A3752: - pop {r4, r5, pc} - .align 2, 0 -_080A3754: .4byte gFadeControl -_080A3758: .4byte gMenu -_080A375C: .4byte gUnk_08127CEC -_080A3760: .4byte gBG1Buffer -_080A3764: .4byte gScreen - - thumb_func_start sub_080A3768 -sub_080A3768: @ 0x080A3768 - push {r4, lr} - ldr r4, _080A377C @ =gMenu - ldrb r1, [r4, #6] - cmp r1, #1 - beq _080A37C4 - cmp r1, #1 - bgt _080A3780 - cmp r1, #0 - beq _080A378A - b _080A384C - .align 2, 0 -_080A377C: .4byte gMenu -_080A3780: - cmp r1, #2 - beq _080A3804 - cmp r1, #3 - beq _080A3812 - b _080A384C -_080A378A: - ldr r0, _080A37B8 @ =gBG1Buffer - movs r1, #0x80 - lsls r1, r1, #4 - bl MemClear - movs r1, #0x10 - ldrsh r0, [r4, r1] - ldr r2, _080A37BC @ =gUnk_081272E0 - ldrb r1, [r4, #0x19] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl sub_0805F46C - ldr r1, _080A37C0 @ =gScreen - movs r2, #0 - movs r0, #1 - strh r0, [r1, #0x1a] - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - strb r2, [r4, #0x18] - b _080A385E - .align 2, 0 -_080A37B8: .4byte gBG1Buffer -_080A37BC: .4byte gUnk_081272E0 -_080A37C0: .4byte gScreen -_080A37C4: - ldr r0, _080A37F8 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _080A385E - ldr r0, _080A37FC @ =gRoomTransition - ldr r0, [r0] - ands r0, r1 - cmp r0, #0 - bne _080A385E - ldrb r1, [r4, #0x18] - adds r1, #1 - strb r1, [r4, #0x18] - lsls r0, r1, #0x18 - lsrs r3, r0, #0x18 - ldr r2, _080A3800 @ =gScreen - movs r0, #0x10 - subs r0, r0, r3 - lsls r0, r0, #8 - orrs r0, r3 - adds r2, #0x68 - strh r0, [r2] - lsls r1, r1, #0x18 - lsrs r1, r1, #0x18 - cmp r1, #0xf - bls _080A385E - b _080A383C - .align 2, 0 -_080A37F8: .4byte gFadeControl -_080A37FC: .4byte gRoomTransition -_080A3800: .4byte gScreen -_080A3804: - ldrh r0, [r4, #8] - subs r0, #1 - strh r0, [r4, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _080A385E - b _080A383C -_080A3812: - ldr r0, _080A3844 @ =gRoomTransition - ldr r0, [r0] - movs r1, #1 - ands r0, r1 - cmp r0, #0 - bne _080A385E - ldrb r1, [r4, #0x18] - subs r1, #1 - strb r1, [r4, #0x18] - lsls r0, r1, #0x18 - lsrs r3, r0, #0x18 - ldr r2, _080A3848 @ =gScreen - movs r0, #0x10 - subs r0, r0, r3 - lsls r0, r0, #8 - orrs r0, r3 - adds r2, #0x68 - strh r0, [r2] - lsls r1, r1, #0x18 - cmp r1, #0 - bne _080A385E -_080A383C: - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - b _080A385E - .align 2, 0 -_080A3844: .4byte gRoomTransition -_080A3848: .4byte gScreen -_080A384C: - ldr r1, _080A3860 @ =gFadeControl - ldrb r0, [r1] - cmp r0, #0 - bne _080A385E - movs r0, #1 - rsbs r0, r0, #0 - str r0, [r1, #4] - bl sub_080A3954 -_080A385E: - pop {r4, pc} - .align 2, 0 -_080A3860: .4byte gFadeControl - - thumb_func_start sub_080A3864 -sub_080A3864: @ 0x080A3864 - push {lr} - ldr r1, _080A3884 @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _080A3880 - bl sub_080A3954 - movs r0, #5 - movs r1, #8 - bl SetFade -_080A3880: - pop {pc} - .align 2, 0 -_080A3884: .4byte gMenu - - thumb_func_start sub_080A3888 -sub_080A3888: @ 0x080A3888 - push {lr} - ldr r1, _080A38A8 @ =gFadeControl - ldr r0, _080A38AC @ =0xFFFF7FFF - str r0, [r1, #4] - movs r0, #5 - movs r1, #4 - bl SetFade - ldr r0, _080A38B0 @ =gMenu - ldrh r0, [r0, #8] - bl SetFadeProgress - bl sub_080A3954 - pop {pc} - .align 2, 0 -_080A38A8: .4byte gFadeControl -_080A38AC: .4byte 0xFFFF7FFF -_080A38B0: .4byte gMenu - - thumb_func_start sub_080A38B4 -sub_080A38B4: @ 0x080A38B4 - push {lr} - movs r0, #4 - movs r1, #4 - bl SetFade - ldr r0, _080A38CC @ =gMenu - ldrh r0, [r0, #8] - bl SetFadeProgress - bl sub_080A3954 - pop {pc} - .align 2, 0 -_080A38CC: .4byte gMenu - - thumb_func_start sub_080A38D0 -sub_080A38D0: @ 0x080A38D0 - push {r4, r5, r6, lr} - mov r6, r8 - push {r6} - ldr r0, _080A391C @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _080A3914 - ldr r0, _080A3920 @ =gBG1Buffer - movs r6, #0x80 - lsls r6, r6, #4 - adds r1, r6, #0 - bl MemClear - ldr r4, _080A3924 @ =gScreen - movs r0, #0 - mov r8, r0 - movs r5, #1 - strh r5, [r4, #0x1a] - ldr r0, _080A3928 @ =gBG2Buffer - adds r1, r6, #0 - bl MemClear - strh r5, [r4, #0x26] - adds r4, #0x68 - movs r0, #0x80 - lsls r0, r0, #5 - strh r0, [r4] - ldr r0, _080A392C @ =gMenu - mov r1, r8 - strb r1, [r0, #5] - movs r0, #4 - movs r1, #8 - bl SetFade -_080A3914: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, pc} - .align 2, 0 -_080A391C: .4byte gFadeControl -_080A3920: .4byte gBG1Buffer -_080A3924: .4byte gScreen -_080A3928: .4byte gBG2Buffer -_080A392C: .4byte gMenu - - thumb_func_start sub_080A3930 -sub_080A3930: @ 0x080A3930 - push {lr} - ldr r0, _080A394C @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _080A3948 - movs r0, #7 - movs r1, #8 - bl SetFade - ldr r1, _080A3950 @ =gMain - movs r0, #2 - strb r0, [r1, #3] -_080A3948: - pop {pc} - .align 2, 0 -_080A394C: .4byte gFadeControl -_080A3950: .4byte gMain - - thumb_func_start sub_080A3954 -sub_080A3954: @ 0x080A3954 - ldr r2, _080A397C @ =gMenu - ldr r1, [r2, #0xc] - ldrb r0, [r1] - movs r3, #0 - strb r0, [r2, #5] - strb r3, [r2, #6] - ldrh r0, [r1, #6] - strh r0, [r2, #0x10] - ldrh r0, [r1, #4] - strh r0, [r2, #8] - ldrh r0, [r1, #8] - strh r0, [r2, #0x12] - ldrh r0, [r1, #0xa] - strh r0, [r2, #0x14] - ldrb r0, [r1, #1] - strb r0, [r2, #0x19] - adds r1, #0xc - str r1, [r2, #0xc] - bx lr - .align 2, 0 -_080A397C: .4byte gMenu - - thumb_func_start sub_080A3980 -sub_080A3980: @ 0x080A3980 - push {lr} - ldr r0, _080A3990 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _080A398E - bl DoSoftReset -_080A398E: - pop {pc} - .align 2, 0 -_080A3990: .4byte gFadeControl - - thumb_func_start sub_080A3994 -sub_080A3994: @ 0x080A3994 - push {r4, r5, lr} - ldr r0, _080A39AC @ =gMenu - ldrb r1, [r0, #6] - adds r2, r0, #0 - cmp r1, #4 - bls _080A39A2 - b _080A3B14 -_080A39A2: - lsls r0, r1, #2 - ldr r1, _080A39B0 @ =_080A39B4 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080A39AC: .4byte gMenu -_080A39B0: .4byte _080A39B4 -_080A39B4: @ jump table - .4byte _080A39C8 @ case 0 - .4byte _080A3A38 @ case 1 - .4byte _080A3AB8 @ case 2 - .4byte _080A3AEE @ case 3 - .4byte _080A3B14 @ case 4 -_080A39C8: - movs r5, #1 - strb r5, [r2, #6] - movs r4, #0 - movs r0, #0x1e - strh r0, [r2, #8] - strb r4, [r2, #3] - movs r0, #1 - bl DispReset - bl InitSoundPlayingInfo - bl sub_080A4D34 - movs r0, #0xa - bl LoadPaletteGroup - movs r0, #0 - movs r1, #0 - bl SetColor - movs r0, #4 - bl LoadGfxGroup - movs r0, #0xc0 - lsls r0, r0, #0x13 - movs r1, #0x20 - bl MemClear - movs r0, #0 - movs r1, #0 - bl SetPopupState - ldr r2, _080A3A2C @ =gScreen - ldrh r0, [r2] - movs r3, #0xc0 - lsls r3, r3, #3 - adds r1, r3, #0 - orrs r0, r1 - strh r0, [r2] - ldr r0, _080A3A30 @ =0x00001C01 - strh r0, [r2, #0x14] - ldr r0, _080A3A34 @ =0x00001D05 - strh r0, [r2, #0x20] - strh r5, [r2, #0x26] - movs r0, #4 - movs r1, #8 - bl SetFade - b _080A3B36 - .align 2, 0 -_080A3A2C: .4byte gScreen -_080A3A30: .4byte 0x00001C01 -_080A3A34: .4byte 0x00001D05 -_080A3A38: - ldr r0, _080A3A50 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - beq _080A3A42 - b _080A3B36 -_080A3A42: - ldrh r0, [r2, #8] - cmp r0, #0 - beq _080A3A54 - subs r0, #1 - strh r0, [r2, #8] - b _080A3B36 - .align 2, 0 -_080A3A50: .4byte gFadeControl -_080A3A54: - ldrb r4, [r2, #3] - ldr r0, _080A3A68 @ =gInput - ldrh r0, [r0, #2] - cmp r0, #0x40 - beq _080A3A72 - cmp r0, #0x40 - bgt _080A3A6C - cmp r0, #1 - beq _080A3A7A - b _080A3A9A - .align 2, 0 -_080A3A68: .4byte gInput -_080A3A6C: - cmp r0, #0x80 - beq _080A3A76 - b _080A3A9A -_080A3A72: - movs r4, #0 - b _080A3A9A -_080A3A76: - movs r4, #1 - b _080A3A9A -_080A3A7A: - cmp r4, #0 - beq _080A3A82 - movs r0, #4 - b _080A3A8C -_080A3A82: - movs r0, #8 - movs r1, #0 - bl CreateDialogBox - movs r0, #2 -_080A3A8C: - ldr r1, _080A3AB4 @ =gMenu - strb r0, [r1, #6] - movs r0, #0x3c - strh r0, [r1, #8] - movs r0, #0x6a - bl SoundReq -_080A3A9A: - ldr r1, _080A3AB4 @ =gMenu - ldrb r0, [r1, #3] - cmp r0, r4 - beq _080A3B36 - strb r4, [r1, #3] - movs r0, #0 - adds r1, r4, #0 - bl SetPopupState - movs r0, #0x69 - bl SoundReq - b _080A3B36 - .align 2, 0 -_080A3AB4: .4byte gMenu -_080A3AB8: - movs r0, #0 - bl HandleSave - adds r1, r0, #0 - ldr r4, _080A3AD8 @ =gMenu - strb r1, [r4] - movs r0, #1 - rsbs r0, r0, #0 - cmp r1, r0 - beq _080A3ADC - cmp r1, #1 - bne _080A3B36 - movs r0, #4 - strb r0, [r4, #6] - b _080A3B36 - .align 2, 0 -_080A3AD8: .4byte gMenu -_080A3ADC: - movs r0, #0x3c - strh r0, [r4, #8] - movs r0, #9 - movs r1, #0 - bl CreateDialogBox - movs r0, #3 - strb r0, [r4, #6] - b _080A3B36 -_080A3AEE: - adds r1, r2, #0 - ldrh r0, [r1, #8] - cmp r0, #0 - beq _080A3AFC - subs r0, #1 - strh r0, [r1, #8] - b _080A3B36 -_080A3AFC: - ldr r0, _080A3B10 @ =gInput - ldrh r1, [r0, #2] - movs r0, #0xb - ands r0, r1 - cmp r0, #0 - beq _080A3B36 - movs r0, #1 - strb r0, [r2, #6] - b _080A3B36 - .align 2, 0 -_080A3B10: .4byte gInput -_080A3B14: - ldr r2, _080A3B38 @ =gScreen - ldrh r1, [r2] - ldr r0, _080A3B3C @ =0x0000FDFF - ands r0, r1 - movs r4, #0 - strh r0, [r2] - bl sub_08050384 - movs r0, #7 - movs r1, #8 - bl SetFade - ldr r1, _080A3B40 @ =gMain - movs r0, #3 - strb r0, [r1, #3] - ldr r0, _080A3B44 @ =gMenu - strb r4, [r0, #6] -_080A3B36: - pop {r4, r5, pc} - .align 2, 0 -_080A3B38: .4byte gScreen -_080A3B3C: .4byte 0x0000FDFF -_080A3B40: .4byte gMain -_080A3B44: .4byte gMenu - - thumb_func_start sub_080A3B48 -sub_080A3B48: @ 0x080A3B48 - push {lr} - movs r1, #0 - ldr r0, _080A3B6C @ =gSave - ldr r3, _080A3B70 @ =0x0000012B - adds r2, r0, r3 - ldrb r0, [r2] - cmp r0, #0 - beq _080A3B66 -_080A3B58: - adds r1, #1 - cmp r1, #0x12 - bhi _080A3B66 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, #0 - bne _080A3B58 -_080A3B66: - adds r0, r1, #0 - pop {pc} - .align 2, 0 -_080A3B6C: .4byte gSave -_080A3B70: .4byte 0x0000012B - - thumb_func_start sub_080A3B74 -sub_080A3B74: @ 0x080A3B74 - ldr r0, _080A3B80 @ =gMenu - adds r0, #0x2f - movs r1, #0 - strb r1, [r0] - bx lr - .align 2, 0 -_080A3B80: .4byte gMenu diff --git a/asm/text.s b/asm/text.s deleted file mode 100644 index 63c05280..00000000 --- a/asm/text.s +++ /dev/null @@ -1,1203 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_0805EEB4 -sub_0805EEB4: @ 0x0805EEB4 - push {r4, r5, r6, r7, lr} - adds r7, r0, #0 - adds r3, r1, #0 - strh r3, [r7, #8] - movs r0, #0x80 - lsls r0, r0, #0x12 - ldrb r1, [r0, #7] - cmp r1, #1 - bls _0805EED6 - lsrs r0, r3, #8 - cmp r0, #1 - bne _0805EED6 - movs r0, #0x8c - lsls r0, r0, #1 - cmp r3, r0 - bhi _0805EED6 - movs r1, #3 -_0805EED6: - ldr r0, _0805EF14 @ =gUnk_08109214 - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r2, [r1] - lsrs r0, r3, #8 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x16 - adds r0, r0, r2 - ldr r4, [r0] - adds r2, r2, r4 - lsls r0, r3, #0x18 - lsrs r0, r0, #0x16 - adds r0, r0, r2 - ldr r4, [r0] - ldr r0, [r1] - ldr r1, [r0] - lsrs r1, r1, #2 - ldr r0, [r2] - lsrs r6, r0, #2 - movs r5, #0 - ldrh r3, [r7, #8] - lsrs r0, r3, #8 - cmp r0, r1 - bhs _0805EF0E - lsls r0, r3, #0x18 - lsrs r0, r0, #0x18 - cmp r0, r6 - blo _0805EF18 -_0805EF0E: - movs r5, #1 - b _0805EF22 - .align 2, 0 -_0805EF14: .4byte gUnk_08109214 -_0805EF18: - adds r0, r2, r4 - ldrb r0, [r0] - cmp r0, #0 - bne _0805EF22 - movs r5, #2 -_0805EF22: - cmp r5, #2 - bhi _0805EF2E - cmp r5, #1 - blo _0805EF2E - ldr r2, _0805EF3C @ =gUnk_08109244 - movs r4, #0 -_0805EF2E: - adds r2, r2, r4 - adds r0, r7, #0 - adds r1, r2, #0 - bl sub_0805EF40 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0805EF3C: .4byte gUnk_08109244 - - thumb_func_start sub_0805EF40 -sub_0805EF40: @ 0x0805EF40 - push {r4, lr} - adds r3, r0, #0 - adds r4, r1, #0 - ldrb r2, [r3] - movs r0, #1 - ands r0, r2 - cmp r0, #0 - beq _0805EF70 - lsls r1, r2, #0x1b - lsrs r0, r1, #0x1c - cmp r0, #6 - bls _0805EF5C - movs r0, #0 - b _0805EF8A -_0805EF5C: - lsrs r0, r1, #0x1c - adds r0, #1 - movs r1, #0xf - ands r0, r1 - lsls r0, r0, #1 - movs r1, #0x1f - rsbs r1, r1, #0 - ands r1, r2 - orrs r1, r0 - strb r1, [r3] -_0805EF70: - ldrb r0, [r3] - lsls r0, r0, #0x1b - lsrs r0, r0, #0x1c - lsls r0, r0, #2 - adds r1, r3, #0 - adds r1, #0x10 - adds r1, r1, r0 - str r4, [r1] - ldrb r0, [r3] - movs r1, #1 - orrs r0, r1 - strb r0, [r3] - movs r0, #1 -_0805EF8A: - pop {r4, pc} - - thumb_func_start sub_0805EF8C -sub_0805EF8C: @ 0x0805EF8C - push {lr} - adds r2, r0, #0 - ldrb r1, [r2] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _0805EFAE - lsls r0, r1, #0x1b - lsrs r0, r0, #0x1c - lsls r0, r0, #2 - adds r2, #0x10 - adds r2, r2, r0 - ldr r1, [r2] - ldrb r0, [r1] - adds r1, #1 - str r1, [r2] - b _0805EFB0 -_0805EFAE: - movs r0, #0 -_0805EFB0: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0805EFB4 -sub_0805EFB4: @ 0x0805EFB4 - push {r4, lr} - adds r3, r0, #0 - ldrb r2, [r3] - lsls r1, r2, #0x1b - lsrs r4, r1, #0x1c - movs r0, #0x1e - ands r0, r2 - cmp r0, #0 - beq _0805EFDC - adds r0, r4, #0 - subs r0, #1 - movs r1, #0xf - ands r0, r1 - lsls r0, r0, #1 - movs r1, #0x1f - rsbs r1, r1, #0 - ands r1, r2 - orrs r1, r0 - strb r1, [r3] - b _0805EFE4 -_0805EFDC: - movs r0, #2 - rsbs r0, r0, #0 - ands r0, r2 - strb r0, [r3] -_0805EFE4: - adds r0, r4, #0 - pop {r4, pc} - - thumb_func_start GetCharacter -GetCharacter: @ 0x0805EFE8 - push {r4, r5, r6, r7, lr} - adds r6, r0, #0 -_0805EFEC: - adds r0, r6, #0 - bl sub_0805EF8C - adds r5, r0, #0 - strb r5, [r6, #1] - movs r7, #0 - cmp r5, #0xf - bls _0805EFFE - b _0805F22C -_0805EFFE: - lsls r0, r5, #2 - ldr r1, _0805F008 @ =_0805F00C - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0805F008: .4byte _0805F00C -_0805F00C: @ jump table - .4byte _0805F04C @ case 0 - .4byte _0805F058 @ case 1 - .4byte _0805F06E @ case 2 - .4byte _0805F07A @ case 3 - .4byte _0805F090 @ case 4 - .4byte _0805F130 @ case 5 - .4byte _0805F150 @ case 6 - .4byte _0805F196 @ case 7 - .4byte _0805F1C0 @ case 8 - .4byte _0805F1CC @ case 9 - .4byte _0805F1D8 @ case 10 - .4byte _0805F1DC @ case 11 - .4byte _0805F1EC @ case 12 - .4byte _0805F1FC @ case 13 - .4byte _0805F20C @ case 14 - .4byte _0805F21C @ case 15 -_0805F04C: - adds r0, r6, #0 - bl sub_0805EFB4 - adds r7, r0, #0 - movs r5, #0 - b _0805F232 -_0805F058: - adds r0, r6, #0 - bl sub_0805EF8C - adds r4, r0, #0 - strh r4, [r6, #2] - movs r5, #6 - cmp r4, #0xa - bls _0805F06A - b _0805F232 -_0805F06A: - movs r5, #5 - b _0805F232 -_0805F06E: - adds r0, r6, #0 - bl sub_0805EF8C - strh r0, [r6, #2] - movs r5, #7 - b _0805F232 -_0805F07A: - adds r0, r6, #0 - bl sub_0805EF8C - lsls r4, r0, #8 - adds r0, r6, #0 - bl sub_0805EF8C - adds r4, r4, r0 - strh r4, [r6, #2] - movs r5, #8 - b _0805F232 -_0805F090: - adds r0, r6, #0 - bl sub_0805EF8C - adds r4, r0, #0 - cmp r4, #0x15 - bhi _0805F12C - lsls r0, r4, #2 - ldr r1, _0805F0A8 @ =_0805F0AC - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0805F0A8: .4byte _0805F0AC -_0805F0AC: @ jump table - .4byte _0805F104 @ case 0 - .4byte _0805F104 @ case 1 - .4byte _0805F104 @ case 2 - .4byte _0805F104 @ case 3 - .4byte _0805F104 @ case 4 - .4byte _0805F104 @ case 5 - .4byte _0805F104 @ case 6 - .4byte _0805F104 @ case 7 - .4byte _0805F104 @ case 8 - .4byte _0805F104 @ case 9 - .4byte _0805F104 @ case 10 - .4byte _0805F104 @ case 11 - .4byte _0805F104 @ case 12 - .4byte _0805F104 @ case 13 - .4byte _0805F104 @ case 14 - .4byte _0805F104 @ case 15 - .4byte _0805F108 @ case 16 - .4byte _0805F114 @ case 17 - .4byte _0805F118 @ case 18 - .4byte _0805F11C @ case 19 - .4byte _0805F120 @ case 20 - .4byte _0805F120 @ case 21 -_0805F104: - movs r5, #9 - b _0805F12C -_0805F108: - adds r0, r6, #0 - bl sub_0805EF8C - adds r4, r0, #0 - movs r5, #0xa - b _0805F12C -_0805F114: - movs r5, #2 - b _0805F12C -_0805F118: - movs r5, #3 - b _0805F12C -_0805F11C: - movs r5, #4 - b _0805F12C -_0805F120: - movs r5, #0xb - movs r1, #0x14 - eors r1, r4 - rsbs r0, r1, #0 - orrs r0, r1 - lsrs r4, r0, #0x1f -_0805F12C: - strh r4, [r6, #2] - b _0805F232 -_0805F130: - adds r0, r6, #0 - bl sub_0805EF8C - adds r4, r0, #0 - cmp r4, #0xff - bne _0805F140 - movs r4, #0 - b _0805F14A -_0805F140: - lsls r4, r4, #8 - adds r0, r6, #0 - bl sub_0805EF8C - adds r4, r4, r0 -_0805F14A: - strh r4, [r6, #6] - movs r5, #0xc - b _0805F232 -_0805F150: - adds r0, r6, #0 - bl sub_0805EF8C - adds r4, r0, #0 - cmp r4, #4 - bls _0805F162 - cmp r4, #5 - beq _0805F17C - b _0805EFEC -_0805F162: - ldr r1, [r6, #0xc] - cmp r1, #0 - bne _0805F16A - ldr r1, _0805F178 @ =gUnk_08109230 -_0805F16A: - lsls r0, r4, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r6, #0 - bl sub_0805EF40 - b _0805EFEC - .align 2, 0 -_0805F178: .4byte gUnk_08109230 -_0805F17C: - adds r0, r6, #0 - bl sub_0805EF8C - lsls r4, r0, #8 - adds r0, r6, #0 - bl sub_0805EF8C - adds r4, r4, r0 - adds r0, r6, #0 - adds r1, r4, #0 - bl sub_0805EEB4 - b _0805EFEC -_0805F196: - adds r0, r6, #0 - bl sub_0805EF8C - lsls r4, r0, #8 - adds r0, r6, #0 - bl sub_0805EF8C - adds r4, r4, r0 - ldrb r1, [r6] - movs r0, #2 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #0x1f - rsbs r1, r1, #0 - ands r0, r1 - strb r0, [r6] - adds r0, r6, #0 - adds r1, r4, #0 - bl sub_0805EEB4 - b _0805EFEC -_0805F1C0: - adds r0, r6, #0 - bl sub_0805EF8C - strh r0, [r6, #2] - movs r5, #0xd - b _0805F232 -_0805F1CC: - adds r0, r6, #0 - bl sub_0805EF8C - strh r0, [r6, #2] - movs r5, #0xe - b _0805F232 -_0805F1D8: - movs r5, #1 - b _0805F232 -_0805F1DC: - adds r0, r6, #0 - bl sub_0805EF8C - adds r5, r0, #0 - movs r0, #0x80 - lsls r0, r0, #3 - orrs r5, r0 - b _0805F232 -_0805F1EC: - adds r0, r6, #0 - bl sub_0805EF8C - adds r5, r0, #0 - movs r0, #0xe0 - lsls r0, r0, #3 - orrs r5, r0 - b _0805F232 -_0805F1FC: - adds r0, r6, #0 - bl sub_0805EF8C - adds r5, r0, #0 - movs r0, #0xa0 - lsls r0, r0, #3 - orrs r5, r0 - b _0805F232 -_0805F20C: - adds r0, r6, #0 - bl sub_0805EF8C - adds r5, r0, #0 - movs r0, #0xc0 - lsls r0, r0, #3 - orrs r5, r0 - b _0805F232 -_0805F21C: - adds r0, r6, #0 - bl sub_0805EF8C - adds r5, r0, #0 - movs r0, #0xc0 - lsls r0, r0, #2 - orrs r5, r0 - b _0805F232 -_0805F22C: - movs r0, #0x80 - lsls r0, r0, #1 - adds r5, r5, r0 -_0805F232: - cmp r7, #0 - beq _0805F238 - b _0805EFEC -_0805F238: - lsrs r0, r5, #8 - cmp r0, #0 - beq _0805F256 - ldrb r0, [r6] - lsls r0, r0, #0x19 - lsrs r0, r0, #0x1e - cmp r0, #0 - beq _0805F254 - cmp r0, #1 - bne _0805F254 - adds r0, r5, #0 - bl sub_0805F9A0 - adds r5, r0, #0 -_0805F254: - strh r5, [r6, #4] -_0805F256: - adds r0, r5, #0 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_0805F25C -sub_0805F25C: @ 0x0805F25C - push {lr} - adds r2, r0, #0 - lsrs r3, r2, #8 - movs r0, #0xf - ands r3, r0 - movs r0, #0xff - ands r2, r0 - cmp r3, #8 - bhi _0805F2B6 - lsls r0, r3, #2 - ldr r1, _0805F278 @ =_0805F27C - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0805F278: .4byte _0805F27C -_0805F27C: @ jump table - .4byte _0805F2A0 @ case 0 - .4byte _0805F2A0 @ case 1 - .4byte _0805F2B6 @ case 2 - .4byte _0805F2B6 @ case 3 - .4byte _0805F2B6 @ case 4 - .4byte _0805F2B4 @ case 5 - .4byte _0805F2B4 @ case 6 - .4byte _0805F2B4 @ case 7 - .4byte _0805F2B4 @ case 8 -_0805F2A0: - cmp r2, #0x7f - bls _0805F2B6 - movs r0, #0x80 - lsls r0, r0, #0x12 - ldrb r0, [r0, #7] - cmp r0, #0 - beq _0805F2B6 - subs r2, #0x80 - movs r3, #2 - b _0805F2B6 -_0805F2B4: - lsls r2, r2, #1 -_0805F2B6: - ldr r1, _0805F2C4 @ =gUnk_08109248 - lsls r0, r3, #2 - adds r0, r0, r1 - lsls r1, r2, #6 - ldr r0, [r0] - adds r0, r0, r1 - pop {pc} - .align 2, 0 -_0805F2C4: .4byte gUnk_08109248 - - thumb_func_start sub_0805F2C8 -sub_0805F2C8: @ 0x0805F2C8 - push {r4, r5, lr} - movs r1, #0 - ldr r4, _0805F2EC @ =gUnk_02036540 - adds r5, r4, #0 -_0805F2D0: - ldrb r0, [r4] - lsls r0, r0, #0x1f - cmp r0, #0 - bne _0805F2F0 - adds r0, r5, #0 - movs r1, #0xc - bl MemClear - ldrb r0, [r4] - movs r1, #1 - orrs r0, r1 - strb r0, [r4] - adds r0, r5, #0 - b _0805F2FC - .align 2, 0 -_0805F2EC: .4byte gUnk_02036540 -_0805F2F0: - adds r4, #0xc - adds r5, #0xc - adds r1, #1 - cmp r1, #3 - bls _0805F2D0 - movs r0, #0 -_0805F2FC: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0805F300 -sub_0805F300: @ 0x0805F300 - push {lr} - adds r2, r0, #0 - movs r1, #0 - ldr r0, _0805F314 @ =gUnk_02036540 -_0805F308: - cmp r0, r2 - bne _0805F318 - movs r1, #0xc - bl MemClear - b _0805F320 - .align 2, 0 -_0805F314: .4byte gUnk_02036540 -_0805F318: - adds r0, #0xc - adds r1, #1 - cmp r1, #3 - bls _0805F308 -_0805F320: - pop {pc} - .align 2, 0 - - thumb_func_start GetFontStrWith -GetFontStrWith: @ 0xGetFontStrWidth - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #0x38 - adds r7, r1, #0 - mov r1, sp - movs r2, #0x30 - bl MemCopy - movs r0, #0 - str r0, [sp, #0x34] - movs r1, #0 - str r1, [sp, #0x30] - mov sl, r1 - mov r8, r1 - b _0805F34C -_0805F348: - cmp r6, #0 - beq _0805F41E -_0805F34C: - movs r5, #0 - movs r2, #1 - mov sb, r2 -_0805F352: - mov r0, sp - bl GetCharacter - adds r6, r0, #0 - cmp r6, #0xe - bhi _0805F3B4 - lsls r0, r6, #2 - ldr r1, _0805F368 @ =_0805F36C - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0805F368: .4byte _0805F36C -_0805F36C: @ jump table - .4byte _0805F402 @ case 0 - .4byte _0805F402 @ case 1 - .4byte _0805F3FC @ case 2 - .4byte _0805F3FC @ case 3 - .4byte _0805F3FC @ case 4 - .4byte _0805F3FC @ case 5 - .4byte _0805F3FC @ case 6 - .4byte _0805F3FC @ case 7 - .4byte _0805F3FC @ case 8 - .4byte _0805F3FC @ case 9 - .4byte _0805F3FC @ case 10 - .4byte _0805F3AC @ case 11 - .4byte _0805F3A8 @ case 12 - .4byte _0805F3FC @ case 13 - .4byte _0805F3FC @ case 14 -_0805F3A8: - adds r5, #8 - b _0805F3FC -_0805F3AC: - mov r0, sp - ldrh r0, [r0, #2] - mov r8, r0 - b _0805F3FC -_0805F3B4: - mov r0, r8 - cmp r0, #0 - bne _0805F3DE - adds r0, r6, #0 - bl sub_0805F25C - adds r4, r0, #0 - lsrs r0, r6, #8 - cmp r0, #4 - bls _0805F3D2 - ldr r0, [r4, #0x40] - bl sub_0805F7A0 - lsrs r0, r0, #8 - adds r5, r5, r0 -_0805F3D2: - ldr r0, [r4] - bl sub_0805F7A0 - lsrs r0, r0, #8 - adds r5, r5, r0 - b _0805F3EA -_0805F3DE: - lsrs r0, r6, #8 - cmp r0, #4 - bls _0805F3E8 - adds r5, #0x10 - b _0805F3EA -_0805F3E8: - adds r5, #8 -_0805F3EA: - mov r0, sp - ldrb r1, [r0] - movs r0, #0x60 - ands r0, r1 - cmp r0, #0x20 - bne _0805F3FC - cmp r5, #1 - bls _0805F3FC - subs r5, #1 -_0805F3FC: - mov r1, sb - cmp r1, #0 - bne _0805F352 -_0805F402: - cmp r5, sl - bls _0805F408 - mov sl, r5 -_0805F408: - cmp r5, #0 - beq _0805F414 - ldr r2, [sp, #0x30] - adds r2, #1 - str r2, [sp, #0x30] - b _0805F41A -_0805F414: - ldr r0, [sp, #0x34] - adds r0, #1 - str r0, [sp, #0x34] -_0805F41A: - cmp r7, #0 - bne _0805F348 -_0805F41E: - cmp r7, #0 - bne _0805F426 - mov r0, sl - b _0805F434 -_0805F426: - ldr r1, [sp, #0x34] - lsls r0, r1, #0x18 - ldr r2, [sp, #0x30] - lsls r1, r2, #0x10 - orrs r0, r1 - mov r1, sl - orrs r0, r1 -_0805F434: - add sp, #0x38 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_0805F440 -sub_0805F440: @ 0x0805F440 - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r1, #0 - movs r1, #0x30 - bl MemClear - ldr r0, _0805F45C @ =0x0000FFFF - cmp r5, r0 - bls _0805F460 - adds r0, r4, #0 - adds r1, r5, #0 - bl sub_0805EF40 - b _0805F468 - .align 2, 0 -_0805F45C: .4byte 0x0000FFFF -_0805F460: - adds r0, r4, #0 - adds r1, r5, #0 - bl sub_0805EEB4 -_0805F468: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0805F46C -sub_0805F46C: @ 0x0805F46C - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - sub sp, #0x48 - adds r6, r0, #0 - adds r5, r1, #0 - bl sub_0805F2C8 - mov r8, r0 - cmp r0, #0 - bne _0805F486 - b _0805F5BC -_0805F486: - add r4, sp, #0x30 - adds r0, r5, #0 - adds r1, r4, #0 - movs r2, #0x18 - bl MemCopy - mov r0, sp - adds r1, r6, #0 - bl sub_0805F440 - mov r3, sp - ldrb r0, [r4, #0x17] - movs r1, #3 - ands r1, r0 - lsls r1, r1, #5 - ldrb r2, [r3] - movs r0, #0x61 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - ldrb r1, [r4, #0x17] - lsls r1, r1, #4 - mov r0, r8 - ldrb r2, [r0] - movs r0, #0xf - ands r0, r2 - orrs r0, r1 - mov r1, r8 - strb r0, [r1] - ldrb r0, [r4, #0x12] - strh r0, [r1, #4] - ldr r0, [r4, #8] - str r0, [r1, #8] - ldrb r0, [r4, #0x15] - strb r0, [r1, #2] - ldrb r0, [r4, #0x14] - strb r0, [r1, #3] - ldrb r1, [r4, #0x13] - movs r0, #8 - ands r0, r1 - mov sb, r4 - cmp r0, #0 - beq _0805F59E - lsrs r0, r1, #4 - ldrb r1, [r4, #0x14] - ldr r2, [r4, #4] - bl sub_0805F918 - ldr r0, [r4, #4] - adds r0, #0xe0 - str r0, [r4, #4] - mov r0, sp - movs r1, #1 - bl GetFontStrWith - lsrs r2, r0, #0x18 - ldrb r1, [r4, #0x16] - muls r2, r1, r2 - asrs r1, r0, #0x10 - lsls r1, r1, #0x18 - lsrs r1, r1, #0x17 - adds r7, r2, r1 - lsls r0, r0, #0x10 - lsrs r4, r0, #0x10 - adds r1, r4, #0 - mov r2, sb - ldrb r3, [r2, #0x12] - cmp r3, r1 - bge _0805F514 - adds r1, r3, #0 -_0805F514: - adds r4, r1, #7 - movs r2, #8 - rsbs r2, r2, #0 - mov r0, sb - ldrb r1, [r0, #0x13] - movs r0, #2 - ands r0, r1 - ands r4, r2 - cmp r0, #0 - bne _0805F52A - adds r4, r3, #0 -_0805F52A: - ldr r5, [sp, #0x30] - adds r0, r5, #0 - adds r0, #0x40 - str r0, [sp, #0x30] - mov r2, sb - ldrb r1, [r2, #0x13] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _0805F54E - adds r4, #0xf - movs r0, #0x10 - rsbs r0, r0, #0 - ands r4, r0 - lsrs r0, r4, #3 - adds r0, #2 - subs r5, r5, r0 - b _0805F554 -_0805F54E: - adds r0, r5, #0 - adds r0, #0x42 - str r0, [sp, #0x30] -_0805F554: - lsrs r4, r4, #3 - mov r3, sb - ldrh r6, [r3, #0x10] - adds r0, r5, #0 - adds r1, r4, #0 - adds r2, r7, #0 - adds r3, r6, #0 - bl DispMessageFrame - adds r5, #2 - mov r1, sb - ldrh r0, [r1, #0x10] - adds r0, #7 - strh r0, [r1, #0x10] - ldrh r0, [r1, #0x10] - subs r6, r0, #1 - adds r0, r7, #0 - subs r7, #1 - cmp r0, #0 - beq _0805F59E -_0805F57C: - adds r1, r5, #0 - adds r1, #0x40 - adds r5, r1, #0 - subs r2, r4, #1 - subs r3, r7, #1 - cmp r4, #0 - ble _0805F596 -_0805F58A: - strh r6, [r1] - adds r1, #2 - adds r0, r2, #0 - subs r2, #1 - cmp r0, #0 - bgt _0805F58A -_0805F596: - adds r0, r7, #0 - adds r7, r3, #0 - cmp r0, #0 - bne _0805F57C -_0805F59E: - ldr r0, _0805F5C8 @ =gUnk_02034330 - movs r1, #0x18 - bl MemClear -_0805F5A6: - mov r0, sb - mov r1, sp - mov r2, r8 - bl sub_0805F5CC - lsls r0, r0, #0x10 - cmp r0, #0 - bne _0805F5A6 - mov r0, r8 - bl sub_0805F300 -_0805F5BC: - movs r0, #0 - add sp, #0x48 - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0805F5C8: .4byte gUnk_02034330 - - thumb_func_start sub_0805F5CC -sub_0805F5CC: @ 0x0805F5CC - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r6, r1, #0 - adds r5, r2, #0 - ldrb r0, [r4, #0x14] - bl sub_0805F8F8 - ldr r1, [r4, #8] - ldrb r2, [r4, #0x12] - adds r2, #7 - movs r3, #0xfc - lsls r3, r3, #1 - ands r2, r3 - lsls r2, r2, #3 - bl MemFill32 - adds r0, r6, #0 - movs r1, #0 - bl GetFontStrWith - adds r2, r0, #0 - ldrb r1, [r4, #0x13] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _0805F60E - adds r0, r2, #1 - lsrs r0, r0, #1 - movs r1, #8 - subs r1, r1, r0 - movs r0, #7 - ands r0, r1 - b _0805F610 -_0805F60E: - movs r0, #0 -_0805F610: - strh r0, [r5, #6] - adds r0, r6, #0 - adds r1, r5, #0 - bl sub_0805F6A4 - adds r2, r0, #0 - cmp r2, #0 - beq _0805F660 - ldrh r1, [r5, #6] - adds r0, r1, #7 - asrs r5, r0, #3 - ldr r2, [r4] - ldrb r1, [r4, #0x13] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _0805F63A - adds r0, r5, #1 - lsrs r0, r0, #1 - lsls r0, r0, #1 - subs r2, r2, r0 -_0805F63A: - ldrh r1, [r4, #0x10] - adds r0, r2, #0 - adds r2, r5, #0 - bl sub_0805F67C - strh r0, [r4, #0x10] - ldr r0, [r4] - adds r0, #0x80 - str r0, [r4] - lsls r5, r5, #6 - ldr r0, [r4, #8] - ldr r1, [r4, #4] - adds r2, r5, #0 - bl MemCopy - ldr r0, [r4, #4] - adds r0, r0, r5 - str r0, [r4, #4] - b _0805F670 -_0805F660: - ldrb r0, [r6, #1] - cmp r0, #0xa - bne _0805F670 - ldrb r1, [r4, #0x16] - lsls r1, r1, #6 - ldr r0, [r4] - adds r0, r0, r1 - str r0, [r4] -_0805F670: - ldrb r1, [r6, #1] - rsbs r0, r1, #0 - orrs r0, r1 - lsrs r0, r0, #0x1f - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_0805F67C -sub_0805F67C: @ 0x0805F67C - push {r4, lr} - adds r3, r0, #0 - subs r2, #1 - movs r0, #1 - rsbs r0, r0, #0 - cmp r2, r0 - beq _0805F6A0 - adds r4, r0, #0 -_0805F68C: - strh r1, [r3] - adds r1, #1 - adds r0, r3, #0 - adds r0, #0x40 - strh r1, [r0] - adds r1, #1 - adds r3, #2 - subs r2, #1 - cmp r2, r4 - bne _0805F68C -_0805F6A0: - adds r0, r1, #0 - pop {r4, pc} - - thumb_func_start sub_0805F6A4 -sub_0805F6A4: @ 0x0805F6A4 - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - adds r4, r1, #0 - movs r6, #0 -_0805F6AC: - adds r0, r5, #0 - bl GetCharacter - movs r7, #1 - cmp r0, #0xe - bhi _0805F746 - lsls r0, r0, #2 - ldr r1, _0805F6C4 @ =_0805F6C8 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0805F6C4: .4byte _0805F6C8 -_0805F6C8: @ jump table - .4byte _0805F768 @ case 0 - .4byte _0805F768 @ case 1 - .4byte _0805F764 @ case 2 - .4byte _0805F764 @ case 3 - .4byte _0805F764 @ case 4 - .4byte _0805F764 @ case 5 - .4byte _0805F764 @ case 6 - .4byte _0805F704 @ case 7 - .4byte _0805F764 @ case 8 - .4byte _0805F764 @ case 9 - .4byte _0805F764 @ case 10 - .4byte _0805F740 @ case 11 - .4byte _0805F70E @ case 12 - .4byte _0805F764 @ case 13 - .4byte _0805F764 @ case 14 -_0805F704: - ldrh r0, [r5, #2] - cmp r0, #0xd - bhi _0805F764 - strb r0, [r4, #2] - b _0805F764 -_0805F70E: - ldr r3, _0805F73C @ =gUnk_02034330 - movs r2, #2 - ldrsb r2, [r3, r2] - cmp r2, #3 - bhi _0805F732 - adds r0, r2, #1 - strb r0, [r3, #2] - lsls r2, r2, #1 - adds r0, r3, #0 - adds r0, #0x10 - adds r0, r2, r0 - ldrh r1, [r5, #6] - strh r1, [r0] - adds r0, r3, #0 - adds r0, #8 - adds r2, r2, r0 - ldrh r0, [r4, #6] - strh r0, [r2] -_0805F732: - ldrh r0, [r4, #6] - adds r0, #8 - strh r0, [r4, #6] - adds r6, #8 - b _0805F764 - .align 2, 0 -_0805F73C: .4byte gUnk_02034330 -_0805F740: - ldrh r0, [r5, #2] - strb r0, [r4, #1] - b _0805F764 -_0805F746: - adds r1, r4, #0 - bl sub_0805F7DC - adds r6, r6, r0 - ldrb r1, [r5] - movs r0, #0x60 - ands r0, r1 - cmp r0, #0x20 - bne _0805F764 - ldrh r0, [r4, #6] - cmp r0, #1 - bls _0805F764 - subs r6, #1 - subs r0, #1 - strh r0, [r4, #6] -_0805F764: - cmp r7, #0 - bne _0805F6AC -_0805F768: - adds r0, r6, #0 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_0805F76C -sub_0805F76C: @ 0x0805F76C - push {r4, lr} - sub sp, #0x30 - adds r2, r0, #0 - adds r4, r1, #0 - mov r0, sp - adds r1, r2, #0 - bl sub_0805F440 - mov r3, sp - ldrb r0, [r4] - lsrs r0, r0, #4 - movs r1, #3 - ands r1, r0 - lsls r1, r1, #5 - ldrb r2, [r3] - movs r0, #0x61 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - mov r0, sp - adds r1, r4, #0 - bl sub_0805F6A4 - add sp, #0x30 - pop {r4, pc} - - thumb_func_start sub_0805F7A0 -sub_0805F7A0: @ 0x0805F7A0 - push {r4, lr} - adds r4, r0, #0 - movs r1, #0xf - movs r2, #0 - b _0805F7B4 -_0805F7AA: - lsls r1, r1, #4 - adds r2, #1 - cmp r2, #7 - bhi _0805F7BA - adds r0, r4, #0 -_0805F7B4: - ands r0, r1 - cmp r1, r0 - beq _0805F7AA -_0805F7BA: - adds r3, r2, #0 - cmp r3, #7 - bhi _0805F7D2 - b _0805F7CA -_0805F7C2: - lsls r1, r1, #4 - adds r2, #1 - cmp r2, #7 - bhi _0805F7D2 -_0805F7CA: - adds r0, r4, #0 - ands r0, r1 - cmp r1, r0 - bne _0805F7C2 -_0805F7D2: - subs r2, r2, r3 - lsls r0, r2, #8 - orrs r0, r3 - pop {r4, pc} - .align 2, 0 diff --git a/assets/assets.json b/assets/assets.json index 7e26261b..d3aed18c 100644 --- a/assets/assets.json +++ b/assets/assets.json @@ -25987,11 +25987,6 @@ "size": 5, "type": "animation" }, - { - "path": "flyingPot/gUnk_080CF290.bin", - "start": 848528, - "size": 4 - }, { "path": "animations/gSpriteAnimations_Gibdo_0.bin", "start": 848592, @@ -43800,16 +43795,6 @@ "size": 8, "type": "animation" }, - { - "path": "minecart/gUnk_081223C8.bin", - "start": 1188808, - "size": 8 - }, - { - "path": "minecart/gUnk_081223D0.bin", - "start": 1188816, - "size": 8 - }, { "path": "animations/gSpriteAnimations_ThoughtBubble_0.bin", "start": 1189280, @@ -43911,31 +43896,6 @@ "size": 27, "type": "animation" }, - { - "path": "objectBlockingStairs/gUnk_08122850.bin", - "start": 1189968, - "size": 18 - }, - { - "path": "objectBlockingStairs/gUnk_08122862.bin", - "start": 1189986, - "size": 18 - }, - { - "path": "objectBlockingStairs/gUnk_08122874.bin", - "start": 1190004, - "size": 18 - }, - { - "path": "objectBlockingStairs/gUnk_08122886.bin", - "start": 1190022, - "size": 18 - }, - { - "path": "objectBlockingStairs/gUnk_08122898.bin", - "start": 1190040, - "size": 16 - }, { "path": "swordsmanNewsletter/gUnk_081228A8.bin", "start": 1190056, @@ -44547,11 +44507,6 @@ "start": 1193532, "size": 32 }, - { - "path": "picoBloom/gUnk_08123574.bin", - "start": 1193332, - "size": 6 - }, { "path": "animations/gSpriteAnimations_BigVortex_0.bin", "start": 1193624, @@ -44743,11 +44698,6 @@ "size": 4, "type": "animation" }, - { - "path": "object96/gUnk_08123FB0.bin", - "start": 1196172, - "size": 36 - }, { "path": "animations/gSpriteAnimations_Object98_0.bin", "start": 1196436, @@ -44907,16 +44857,6 @@ "size": 20, "type": "animation" }, - { - "path": "objectA9/gUnk_0812485C.bin", - "start": 1198172, - "size": 4 - }, - { - "path": "objectA9/gUnk_08124860.bin", - "start": 1198176, - "size": 8 - }, { "path": "animations/gSpriteAnimations_ObjectAB_0.bin", "start": 1198200, @@ -45058,41 +44998,6 @@ "size": 83, "type": "animation" }, - { - "path": "objectB4/gUnk_08124B10.bin", - "start": 1198864, - "size": 16 - }, - { - "path": "objectB4/gUnk_08124B30.bin", - "start": 1198896, - "size": 8 - }, - { - "path": "objectB9/gUnk_08124C20.bin", - "start": 1199136, - "size": 40 - }, - { - "path": "objectB9/gUnk_08124C48.bin", - "start": 1199176, - "size": 600 - }, - { - "path": "objectB9/gUnk_08124EA0.bin", - "start": 1199776, - "size": 40 - }, - { - "path": "objectB9/gUnk_08124EC8.bin", - "start": 1199816, - "size": 4 - }, - { - "path": "objectB9/gUnk_08124ECC.bin", - "start": 1199820, - "size": 4 - }, { "path": "windcrest/gUnk_08125010.bin", "start": 1200144, @@ -45389,26 +45294,6 @@ "DEMO_USA": 2640 } }, - { - "path": "data_08127280/gUnk_08127280.bin", - "start": 1208960, - "size": 24 - }, - { - "path": "data_08127280/gUnk_08127298.bin", - "start": 1208984, - "size": 24 - }, - { - "path": "data_08127280/gUnk_081272B0.bin", - "start": 1209008, - "size": 24 - }, - { - "path": "data_08127280/gUnk_081272C8.bin", - "start": 1209032, - "size": 24 - }, { "path": "data_08127280/gUnk_081272F0.bin", "start": 1209072, diff --git a/data/const/enemy/flyingPot.s b/data/const/enemy/flyingPot.s deleted file mode 100644 index f02b1ecc..00000000 --- a/data/const/enemy/flyingPot.s +++ /dev/null @@ -1,34 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - - -gUnk_080CF244:: @ 080CF244 - .4byte sub_0803708C - .4byte sub_080370A4 - .4byte GenericKnockback - .4byte GenericDeath - .4byte GenericConfused - .4byte sub_0803712C - -gUnk_080CF25C:: @ 080CF25C - .4byte sub_08037220 - .4byte sub_08037280 - .4byte sub_080372E8 - .4byte sub_0803737C - .4byte sub_080373B0 - .4byte sub_080373C8 - .4byte sub_080373E0 - -gUnk_080CF278:: @ 080CF278 - .4byte sub_08037144 - .4byte sub_0803715C - .4byte sub_0803718C - .4byte sub_080371F8 - .4byte nullsub_161 - .4byte sub_08037218 - -gUnk_080CF290:: @ 080CF290 - .incbin "flyingPot/gUnk_080CF290.bin" diff --git a/data/const/item/itemTryPickupObject.s b/data/const/item/itemTryPickupObject.s index 2c523ea7..ba058a82 100644 --- a/data/const/item/itemTryPickupObject.s +++ b/data/const/item/itemTryPickupObject.s @@ -6,7 +6,7 @@ gUnk_0811BDB4:: @ 0811BDB4 - .4byte sub_080761C0 + .4byte ItemPickupCheck .4byte sub_080762D8 .4byte sub_08076488 .4byte sub_08076518 diff --git a/data/const/object/bird.s b/data/const/object/bird.s deleted file mode 100644 index c07b7eb7..00000000 --- a/data/const/object/bird.s +++ /dev/null @@ -1,34 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08123EC0:: @ 08123EC0 - .4byte sub_0809CF3C - .4byte sub_0809D030 - .4byte sub_0809D0F4 - .4byte sub_0809D178 - .4byte sub_0809D178 - .4byte sub_0809D178 - .4byte sub_0809D178 - .4byte sub_0809D178 - .4byte sub_0809D1F0 - .4byte sub_0809D498 - .4byte sub_0809D66C - -gUnk_08123EEC:: @ 08123EEC - .4byte sub_0809CF54 - .4byte sub_0809CFEC - -gUnk_08123EF4:: @ 08123EF4 - .4byte sub_0809D048 - .4byte sub_0809D06C - -gUnk_08123EFC:: @ 08123EFC - .4byte sub_0809D084 - .4byte sub_0809D0AC - -gUnk_08123F04:: @ 08123F04 - .4byte sub_0809D10C - .4byte sub_0809D130 diff --git a/data/const/object/mazaalBossObject.s b/data/const/object/mazaalBossObject.s deleted file mode 100644 index a58e800e..00000000 --- a/data/const/object/mazaalBossObject.s +++ /dev/null @@ -1,16 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08123D28:: @ 08123D28 - .4byte sub_0809AB04 - .4byte sub_0809ABA4 - .4byte sub_0809ABB0 - .4byte sub_0809ABD4 - .4byte sub_0809ABF4 - .4byte sub_0809AC3C - .4byte sub_0809ACA0 - .4byte sub_0809ACCC - .4byte sub_0809ACE8 diff --git a/data/const/object/minecart.s b/data/const/object/minecart.s deleted file mode 100644 index 049745c8..00000000 --- a/data/const/object/minecart.s +++ /dev/null @@ -1,21 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_081223A8:: @ 081223A8 - .4byte sub_080916EC - .4byte sub_080917DC - .4byte sub_080918A4 - .4byte sub_080919AC - .4byte sub_08091C0C - .4byte sub_08091C98 - .4byte sub_08091CC8 - .4byte sub_08091D90 - -gUnk_081223C8:: @ 081223C8 - .incbin "minecart/gUnk_081223C8.bin" - -gUnk_081223D0:: @ 081223D0 - .incbin "minecart/gUnk_081223D0.bin" diff --git a/data/const/object/object96.s b/data/const/object/object96.s deleted file mode 100644 index 88aad895..00000000 --- a/data/const/object/object96.s +++ /dev/null @@ -1,83 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08123FB0:: @ 08123FB0 - .4byte sub_0809D91C - .4byte sub_0809D93C - .4byte 0x30300000 - .4byte 0x133c3c01 - .4byte 0x00010000 - .4byte 0x00001800 - .4byte 0x00400060 - .4byte 0x00014021 - .4byte sub_0809D91C - .4byte 00000000 - .4byte 00000000 - .4byte 0x10636300 - .4byte 00000000 - .4byte 0x00001800 - .4byte 0x00180000 -.ifdef JP - .4byte 0x000000CD -.else -.ifdef DEMO_JP - .4byte 0x000000CD -.else -.ifdef EU - .4byte 0x000000CD @ TODO deduplicate -.else - .4byte 0x000000d0 -.endif -.endif -.endif - .4byte sub_0809D91C - .4byte 00000000 - .4byte 00000000 - .4byte 0x0f3c3c00 - .4byte 0x00010000 - .4byte 0x00001800 - .4byte 0x00400060 - .4byte 0x00014021 - .4byte sub_0809D91C - .4byte 00000000 - .4byte 00000000 - .4byte 0x023c3c00 - .4byte 0x00010000 - .4byte 0x00001800 - .4byte 0x00400140 - .4byte 0x00014021 - .4byte sub_0809D91C - .4byte 00000000 - .4byte 00000000 - .4byte 0x0d3c3c00 - .4byte 0x00010000 - .4byte 0x00001800 - .4byte 0x00400060 - .4byte 0x00014021 - .4byte sub_0809D91C - .4byte 00000000 - .4byte 00000000 - .4byte 0x1a3c3c00 - .4byte 0x00010000 - .4byte 0x00001800 - .4byte 0x00400100 - .4byte 0x00014021 - .4byte sub_0809D91C - .4byte 00000000 - .4byte 00000000 - .4byte 0x133c3c00 - .4byte 0x00010000 - .4byte 0x00001800 - .4byte 0x00400060 - - .incbin "object96/gUnk_08123FB0.bin" - -gUnk_081240B0:: @ 081240B0 - .4byte sub_0809D7A8 - .4byte sub_0809D824 - .4byte sub_0809D860 - .4byte sub_0809D8C8 - diff --git a/data/const/object/object98.s b/data/const/object/object98.s deleted file mode 100644 index 732233be..00000000 --- a/data/const/object/object98.s +++ /dev/null @@ -1,9 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812418C:: @ 0812418C - .4byte sub_0809E360 - .4byte sub_0809E3E4 diff --git a/data/const/object/objectA6.s b/data/const/object/objectA6.s deleted file mode 100644 index 112174af..00000000 --- a/data/const/object/objectA6.s +++ /dev/null @@ -1,9 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08124800:: @ 08124800 - .4byte sub_0809F920 - .4byte sub_0809F964 diff --git a/data/const/object/objectA9.s b/data/const/object/objectA9.s deleted file mode 100644 index 50217af0..00000000 --- a/data/const/object/objectA9.s +++ /dev/null @@ -1,16 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08124850:: @ 08124850 - .4byte sub_0809FEF8 - .4byte sub_0809FF28 - .4byte DeleteEntity - -gUnk_0812485C:: @ 0812485C - .incbin "objectA9/gUnk_0812485C.bin" - -gUnk_08124860:: @ 08124860 - .incbin "objectA9/gUnk_08124860.bin" diff --git a/data/const/object/objectAB.s b/data/const/object/objectAB.s deleted file mode 100644 index 3ac4b9fb..00000000 --- a/data/const/object/objectAB.s +++ /dev/null @@ -1,10 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812486C:: @ 0812486C - .4byte sub_080A00F8 - .4byte sub_080A012C - .4byte sub_080A0158 diff --git a/data/const/object/objectAD.s b/data/const/object/objectAD.s deleted file mode 100644 index a569ed91..00000000 --- a/data/const/object/objectAD.s +++ /dev/null @@ -1,9 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_081248BC:: @ 081248BC - .4byte sub_080A04A4 - .4byte sub_080A04E0 diff --git a/data/const/object/objectB4.s b/data/const/object/objectB4.s deleted file mode 100644 index cc9159af..00000000 --- a/data/const/object/objectB4.s +++ /dev/null @@ -1,17 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08124B10:: @ 08124B10 - .incbin "objectB4/gUnk_08124B10.bin" - -gUnk_08124B20:: @ 08124B20 - .4byte sub_080A0BA8 - .4byte sub_080A0CE8 - .4byte sub_080A0D70 - .4byte sub_080A0E08 - -gUnk_08124B30:: @ 08124B30 - .incbin "objectB4/gUnk_08124B30.bin" diff --git a/data/const/object/objectB9.s b/data/const/object/objectB9.s deleted file mode 100644 index 7a5da340..00000000 --- a/data/const/object/objectB9.s +++ /dev/null @@ -1,21 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08124C20:: @ 08124C20 - .incbin "objectB9/gUnk_08124C20.bin" - -gUnk_08124C48:: @ 08124C48 - .incbin "objectB9/gUnk_08124C48.bin" - -gUnk_08124EA0:: @ 08124EA0 - .incbin "objectB9/gUnk_08124EA0.bin" - -gUnk_08124EC8:: @ 08124EC8 - .incbin "objectB9/gUnk_08124EC8.bin" - -gUnk_08124ECC:: @ 08124ECC - .incbin "objectB9/gUnk_08124ECC.bin" - diff --git a/data/const/object/objectBlockingStairs.s b/data/const/object/objectBlockingStairs.s deleted file mode 100644 index a68959bf..00000000 --- a/data/const/object/objectBlockingStairs.s +++ /dev/null @@ -1,27 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812283C:: @ 0812283C - .4byte sub_08092EEC - .4byte sub_08092F68 - .4byte sub_080930F4 - .4byte sub_08093178 - .4byte nullsub_120 - -gUnk_08122850:: @ 08122850 - .incbin "objectBlockingStairs/gUnk_08122850.bin" - -gUnk_08122862:: @ 08122862 - .incbin "objectBlockingStairs/gUnk_08122862.bin" - -gUnk_08122874:: @ 08122874 - .incbin "objectBlockingStairs/gUnk_08122874.bin" - -gUnk_08122886:: @ 08122886 - .incbin "objectBlockingStairs/gUnk_08122886.bin" - -gUnk_08122898:: @ 08122898 - .incbin "objectBlockingStairs/gUnk_08122898.bin" diff --git a/data/const/object/picoBloom.s b/data/const/object/picoBloom.s deleted file mode 100644 index db60592d..00000000 --- a/data/const/object/picoBloom.s +++ /dev/null @@ -1,13 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08123568:: @ 08123568 - .4byte sub_08098A90 - .4byte sub_08098AD0 - .4byte sub_08098AE8 - -gUnk_08123574:: @ 08123574 - .incbin "picoBloom/gUnk_08123574.bin" diff --git a/data/data_08108E6C.s b/data/data_08108E6C.s index 5e50bd0e..8cad3253 100644 --- a/data/data_08108E6C.s +++ b/data/data_08108E6C.s @@ -390,7 +390,7 @@ gUnk_081091F8:: @ 081091F8 gUnk_08109202:: @ 08109202 .incbin "data_08108E6C/gUnk_08109202.bin" -gUnk_08109214:: @ 08109214 +gTranslations:: @ 08109214 .4byte translation .4byte translation .4byte translation diff --git a/data/data_0811E750.s b/data/data_0811E750.s index df1745c8..fe86f629 100644 --- a/data/data_0811E750.s +++ b/data/data_0811E750.s @@ -4,30 +4,10 @@ .section .rodata .align 2 -gUnk_0811E768:: @ 0811E768 - .4byte sub_0807FC64 - .4byte sub_0807FC7C - .4byte sub_0807FDB0 - .4byte 00000000 - .4byte sub_0807FEF0 - .4byte sub_0807FF54 -gUnk_0811E780:: @ 0811E780 - .4byte sub_0807FDC8 - .4byte sub_0807FDE4 - .4byte sub_0807FDF8 -gUnk_0811E78C:: @ 0811E78C - .4byte sub_0807FF08 - .4byte sub_0807FF1C -gUnk_0811E794:: @ 0811E794 - .4byte sub_0807FF6C - .4byte sub_0807FFE4 - .4byte sub_08080040 - .4byte sub_08080108 - .4byte sub_08080198 - .4byte sub_080801BC + gUnk_0811E7AC:: @ 0811E7AC .4byte sub_08080794 diff --git a/data/data_08127280.s b/data/data_08127280.s index cc57aa11..26384a3d 100644 --- a/data/data_08127280.s +++ b/data/data_08127280.s @@ -4,23 +4,7 @@ .section .rodata .align 2 -gUnk_08127280:: @ 08127280 - .incbin "data_08127280/gUnk_08127280.bin" - -gUnk_08127298:: @ 08127298 - .incbin "data_08127280/gUnk_08127298.bin" - -gUnk_081272B0:: @ 081272B0 - .incbin "data_08127280/gUnk_081272B0.bin" - -gUnk_081272C8:: @ 081272C8 - .incbin "data_08127280/gUnk_081272C8.bin" - -gUnk_081272E0:: @ 081272E0 - .4byte gUnk_08127280 - .4byte gUnk_08127298 - .4byte gUnk_081272B0 - .4byte gUnk_081272C8 +@ staffroll rodata gUnk_081272F0:: @ 081272F0 .incbin "data_08127280/gUnk_081272F0.bin" @@ -35,20 +19,23 @@ gUnk_08127CEC:: @ 08127CEC .incbin "data_08127280/gUnk_08127CEC.bin" gUnk_08127D00:: @ 08127D00 - .4byte sub_080A3608 - .4byte sub_080A36C0 - .4byte sub_080A3994 - .4byte sub_080A3980 + .4byte StaffrollTask_State0 + .4byte StaffrollTask_State1 + .4byte StaffrollTask_State2 + .4byte StaffrollTask_State3 gUnk_08127D10:: @ 08127D10 - .4byte sub_080A36DC - .4byte sub_080A36F8 - .4byte sub_080A3768 - .4byte sub_080A3864 - .4byte sub_080A3888 - .4byte sub_080A38B4 - .4byte sub_080A38D0 - .4byte sub_080A3930 + .4byte StaffrollTask_State1MenuType0 + .4byte StaffrollTask_State1MenuType1 + .4byte StaffrollTask_State1MenuType2 + .4byte StaffrollTask_State1MenuType3 + .4byte StaffrollTask_State1MenuType4 + .4byte StaffrollTask_State1MenuType5 + .4byte StaffrollTask_State1MenuType6 + .4byte StaffrollTask_State1MenuType7 + +@ End of staffroll + gAreaMetadata:: @ 08127D30 .ifdef EU diff --git a/data/scripts/cutscene/introBusinessScrub/script_ZeldaIntroBusinessScrub.inc b/data/scripts/cutscene/introBusinessScrub/script_ZeldaIntroBusinessScrub.inc index ae7c5633..24942bab 100644 --- a/data/scripts/cutscene/introBusinessScrub/script_ZeldaIntroBusinessScrub.inc +++ b/data/scripts/cutscene/introBusinessScrub/script_ZeldaIntroBusinessScrub.inc @@ -33,7 +33,7 @@ SCRIPT_START script_ZeldaIntroBusinessScrub SetEntitySpeed 0x0200 WalkSouth 0x0008 SetAnimation 0x0040 - Call WaitForFrameHiBit + Call WaitForAnimDone SetAnimationState 0x0006 DoPostScriptAction 0x0000 SetSyncFlag 0x00000002 diff --git a/data/scripts/cutscene/introCeremony/script_Npc4EMonsters.inc b/data/scripts/cutscene/introCeremony/script_Npc4EMonsters.inc index 46e39e17..8427c4de 100644 --- a/data/scripts/cutscene/introCeremony/script_Npc4EMonsters.inc +++ b/data/scripts/cutscene/introCeremony/script_Npc4EMonsters.inc @@ -30,7 +30,7 @@ SCRIPT_START script_Npc4EMonsters Call NPC4E_SaveEquippedItems Call SetPlayerActionNormal CallWithArg EquipItem, 0x0000000d - CallWithArg sub_0807F29C, gUnk_080049F6 + CallWithArg SetInputMacro, gUnk_080049F6 _0807F0B4 0x0001 SetEntityPositionRelative 0x01f8, 0x0068 SetSyncFlag 0x00000004 @@ -41,7 +41,7 @@ SCRIPT_START script_Npc4EMonsters PlaySound SFX_1C3 SetSyncFlag 0x20000000 Wait 0x0078 - CallWithArg sub_0807F29C, 0x00000000 + CallWithArg SetInputMacro, 0x00000000 Call NPC4E_RestoreEquippedItems SetSyncFlag 0x40000000 SetSyncFlag 0x00000010 diff --git a/data/scripts/cutscene/introCeremony/script_Npc4EVaatiAttacking.inc b/data/scripts/cutscene/introCeremony/script_Npc4EVaatiAttacking.inc index 02d18eba..f807fc41 100644 --- a/data/scripts/cutscene/introCeremony/script_Npc4EVaatiAttacking.inc +++ b/data/scripts/cutscene/introCeremony/script_Npc4EVaatiAttacking.inc @@ -10,11 +10,11 @@ SCRIPT_START script_Npc4EVaatiAttacking Call NPC4E_SaveEquippedItems Call SetPlayerActionNormal CallWithArg EquipItem, 0x0000000d - CallWithArg sub_0807F29C, gUnk_080049F6 + CallWithArg SetInputMacro, gUnk_080049F6 Wait 0x001e SetSyncFlag 0x00000100 WaitForSyncFlagAndClear 0x00000200 - CallWithArg sub_0807F29C, 0x00000000 + CallWithArg SetInputMacro, 0x00000000 Call NPC4E_RestoreEquippedItems Wait 0x003c SetSyncFlag 0x08000000 diff --git a/data/scripts/cutscene/introCeremony/script_PlayerFainting.inc b/data/scripts/cutscene/introCeremony/script_PlayerFainting.inc index 8e0ae500..f35afc73 100644 --- a/data/scripts/cutscene/introCeremony/script_PlayerFainting.inc +++ b/data/scripts/cutscene/introCeremony/script_PlayerFainting.inc @@ -11,7 +11,7 @@ SCRIPT_START script_PlayerFainting Call sub_0807F1E8 DoPostScriptAction 0x0011 EndBlock - Call WaitForFrameHiBit + Call WaitForAnimDone WaitForSyncFlag 0x80000000 Call SetPlayerActionNormal SCRIPT_END diff --git a/data/scripts/cutscene/introCeremony/script_VaatiIntroCeremony.inc b/data/scripts/cutscene/introCeremony/script_VaatiIntroCeremony.inc index 13d6fa8c..5236e03b 100644 --- a/data/scripts/cutscene/introCeremony/script_VaatiIntroCeremony.inc +++ b/data/scripts/cutscene/introCeremony/script_VaatiIntroCeremony.inc @@ -13,21 +13,21 @@ SCRIPT_START script_VaatiIntroCeremony WaitForSyncFlagAndClear 0x00000100 SetAnimationState 0x0004 DoPostScriptAction 0x001c - Call WaitForFrameHiBit + Call WaitForAnimDone SetAnimationState 0x0004 DoPostScriptAction 0x0000 SetSyncFlag 0x00000200 WaitForSyncFlagAndClear 0x00000100 SetAnimationState 0x0000 DoPostScriptAction 0x001c - Call WaitForFrameHiBit + Call WaitForAnimDone SetAnimationState 0x0000 DoPostScriptAction 0x0000 SetSyncFlag 0x00000200 WaitForSyncFlagAndClear 0x00000100 SetAnimationState 0x0000 DoPostScriptAction 0x001a - Call WaitForFrameHiBit + Call WaitForAnimDone DoPostScriptAction 0x0000 SetSyncFlag 0x00000200 WaitForSyncFlagAndClear 0x00000100 @@ -71,7 +71,7 @@ SCRIPT_START script_VaatiIntroCeremony Wait 0x005a SetAnimationState 0x0004 DoPostScriptAction 0x001c - Call WaitForFrameHiBit + Call WaitForAnimDone SetAnimationState 0x0004 DoPostScriptAction 0x0000 Wait 0x001e diff --git a/data/scripts/cutscene/introCeremony/script_ZeldaIntroCastle.inc b/data/scripts/cutscene/introCeremony/script_ZeldaIntroCastle.inc index cfe741b1..9ccd1167 100644 --- a/data/scripts/cutscene/introCeremony/script_ZeldaIntroCastle.inc +++ b/data/scripts/cutscene/introCeremony/script_ZeldaIntroCastle.inc @@ -48,7 +48,7 @@ script_08011206: Call sub_08066E20 Wait 0x0014 DoPostScriptAction 0x0010 - Call WaitForFrameHiBit + Call WaitForAnimDone PlaySound SFX_1CA SetSyncFlag 0x00000020 WaitForSyncFlagAndClear 0x00000010 diff --git a/data/scripts/cutscene/introTown/script_Npc4EIntroTown.inc b/data/scripts/cutscene/introTown/script_Npc4EIntroTown.inc index 10f3eef7..ffd9dc02 100644 --- a/data/scripts/cutscene/introTown/script_Npc4EIntroTown.inc +++ b/data/scripts/cutscene/introTown/script_Npc4EIntroTown.inc @@ -164,14 +164,14 @@ SCRIPT_START script_Npc4EIntroTown CallWithArg EquipItem, 0x0000000d SetIntVariable 0x000000ff Call sub_0807F5B0 - CallWithArg sub_0807F29C, gUnk_080049D6 + CallWithArg SetInputMacro, gUnk_080049D6 Wait 0x00b7 SetIntVariable 0x00000000 Call sub_0807F5B0 MessageFromTargetPos 0x102c, 0x0000 WaitUntilTextboxCloses @ Give control back to the player - CallWithArg sub_0807F29C, 0x00000000 + CallWithArg SetInputMacro, 0x00000000 Call NPC4E_RestoreEquippedItems _0807F0B4 0x0004 CameraTargetPlayer diff --git a/data/scripts/cutscene/originStory/script_MinishEzlo.inc b/data/scripts/cutscene/originStory/script_MinishEzlo.inc index 5acc0d71..7b5e52c9 100644 --- a/data/scripts/cutscene/originStory/script_MinishEzlo.inc +++ b/data/scripts/cutscene/originStory/script_MinishEzlo.inc @@ -34,7 +34,7 @@ SCRIPT_START script_MinishEzlo SetSyncFlag 0x00010000 WaitForSyncFlagAndClear 0x00008000 SetAnimation 0x000d - Call WaitForFrameHiBit + Call WaitForAnimDone SetSyncFlag 0x00010000 Wait 0x003c DoPostScriptAction 0x0005 diff --git a/data/scripts/cutscene/originStory/script_Object6AMinishCap.inc b/data/scripts/cutscene/originStory/script_Object6AMinishCap.inc index 75e76a5b..2d149f47 100644 --- a/data/scripts/cutscene/originStory/script_Object6AMinishCap.inc +++ b/data/scripts/cutscene/originStory/script_Object6AMinishCap.inc @@ -17,7 +17,7 @@ SCRIPT_START script_Object6AMinishCap SetSyncFlag 0x00000100 WaitForSyncFlagAndClear 0x00000080 SetAnimation 0x0001 - Call WaitForFrameHiBit + Call WaitForAnimDone DoPostScriptAction 0x0006 SCRIPT_END .2byte 0x0000 diff --git a/data/scripts/cutscene/originStory/script_Vaati.inc b/data/scripts/cutscene/originStory/script_Vaati.inc index 3a48e430..ac8c49a7 100644 --- a/data/scripts/cutscene/originStory/script_Vaati.inc +++ b/data/scripts/cutscene/originStory/script_Vaati.inc @@ -23,7 +23,7 @@ SCRIPT_START script_Vaati SetSyncFlag 0x00001000 WaitForSyncFlagAndClear 0x00000800 DoPostScriptAction 0x0018 - Call WaitForFrameHiBit + Call WaitForAnimDone SetAnimationState 0x0004 DoPostScriptAction 0x0000 SetSyncFlag 0x00001000 diff --git a/data/scripts/cutscene/originStory/script_VaatiAppearsAgain.inc b/data/scripts/cutscene/originStory/script_VaatiAppearsAgain.inc index 8e9cce5d..f356d65f 100644 --- a/data/scripts/cutscene/originStory/script_VaatiAppearsAgain.inc +++ b/data/scripts/cutscene/originStory/script_VaatiAppearsAgain.inc @@ -16,7 +16,7 @@ SCRIPT_START script_VaatiAppearsAgain Wait 0x0014 SetAnimationState 0x0000 DoPostScriptAction 0x001c - Call WaitForFrameHiBit + Call WaitForAnimDone DoPostScriptAction 0x0000 SetSyncFlag 0x00000004 WaitForSyncFlagAndClear 0x00000002 diff --git a/data/scripts/cutscene/outro/script_MinishEzloGoodbye.inc b/data/scripts/cutscene/outro/script_MinishEzloGoodbye.inc index ba35737d..db38ceb7 100644 --- a/data/scripts/cutscene/outro/script_MinishEzloGoodbye.inc +++ b/data/scripts/cutscene/outro/script_MinishEzloGoodbye.inc @@ -25,17 +25,17 @@ SCRIPT_START script_MinishEzloGoodbye SetSyncFlag 0x00000004 WaitForSyncFlagAndClear 0x00000002 SetAnimation 0x000c - Call WaitForFrameHiBit + Call WaitForAnimDone Call sub_08094B94 SetSyncFlag 0x00000004 WaitForSyncFlagAndClear 0x00000002 SetAnimation 0x000f - Call WaitForFrameHiBit + Call WaitForAnimDone SetSyncFlag 0x00000004 WaitForSyncFlagAndClear 0x00000002 CallWithArg sub_080960C4, script_Object6AEzloFinalMagic SetAnimation 0x0012 - Call WaitForFrameHiBit + Call WaitForAnimDone Wait 0x001e SetSyncFlag 0x00000020 StopBgm diff --git a/data/scripts/cutscene/outro/script_MinishEzloOutro.inc b/data/scripts/cutscene/outro/script_MinishEzloOutro.inc index b82f4618..1741a522 100644 --- a/data/scripts/cutscene/outro/script_MinishEzloOutro.inc +++ b/data/scripts/cutscene/outro/script_MinishEzloOutro.inc @@ -10,20 +10,20 @@ SCRIPT_START script_MinishEzloOutro WaitForSyncFlagAndClear 0x00000002 SetAnimation 0x000e DoPostScriptAction 0x0007 - Call WaitForFrameHiBit + Call WaitForAnimDone DoPostScriptAction 0x0004 SetSyncFlag 0x00000040 WaitForSyncFlagAndClear 0x00000002 SetAnimation 0x000c - Call WaitForFrameHiBit + Call WaitForAnimDone SetSyncFlag 0x00000040 WaitForSyncFlagAndClear 0x00000002 SetAnimation 0x000f - Call WaitForFrameHiBit + Call WaitForAnimDone SetSyncFlag 0x00000040 WaitForSyncFlagAndClear 0x00000002 SetAnimation 0x000c - Call WaitForFrameHiBit + Call WaitForAnimDone SetSyncFlag 0x00000040 WaitForSyncFlagAndClear 0x00000002 CallWithArg sub_080960C4, script_EzloZeldaMagic diff --git a/data/scripts/cutscene/reveal/script_PlayerFaintAgain.inc b/data/scripts/cutscene/reveal/script_PlayerFaintAgain.inc index 6593d60f..460b706c 100644 --- a/data/scripts/cutscene/reveal/script_PlayerFaintAgain.inc +++ b/data/scripts/cutscene/reveal/script_PlayerFaintAgain.inc @@ -1,9 +1,9 @@ @ Sanctuary Player faint from Vaati attack SCRIPT_START script_PlayerFaintAgain Call sub_0807F1C4 - Call WaitForFrameHiBit + Call WaitForAnimDone Call sub_0807F1E8 - Call WaitForFrameHiBit + Call WaitForAnimDone SetSyncFlag 0x00000002 WaitForSyncFlagAndClear 0x00000004 PlaySound SFX_PLY_JUMP diff --git a/data/scripts/cutscene/takeover/script_VaatiTakeover.inc b/data/scripts/cutscene/takeover/script_VaatiTakeover.inc index efd31a2b..1a2520c3 100644 --- a/data/scripts/cutscene/takeover/script_VaatiTakeover.inc +++ b/data/scripts/cutscene/takeover/script_VaatiTakeover.inc @@ -14,7 +14,7 @@ SCRIPT_START script_VaatiTakeover Wait 0x0014 SetAnimationState 0x0000 DoPostScriptAction 0x001c - Call WaitForFrameHiBit + Call WaitForAnimDone DoPostScriptAction 0x0000 SetSyncFlag 0x00000020 WaitForSyncFlagAndClear 0x00000010 diff --git a/data/scripts/dhc/script_Vaati1Intro.inc b/data/scripts/dhc/script_Vaati1Intro.inc index 3255d880..0308aab2 100644 --- a/data/scripts/dhc/script_Vaati1Intro.inc +++ b/data/scripts/dhc/script_Vaati1Intro.inc @@ -25,7 +25,7 @@ SCRIPT_START script_Vaati1Intro PlayBgm BGM_VAATI_REBORN DoPostScriptAction 0x0019 PlaySound SFX_198 - Call WaitForFrameHiBit + Call WaitForAnimDone SetRoomFlag 0x0000 DoPostScriptAction 0x0008 Wait 0x0080 diff --git a/data/scripts/dhc/script_VaatiWithZelda.inc b/data/scripts/dhc/script_VaatiWithZelda.inc index 1464b9a8..55897c74 100644 --- a/data/scripts/dhc/script_VaatiWithZelda.inc +++ b/data/scripts/dhc/script_VaatiWithZelda.inc @@ -11,7 +11,7 @@ SCRIPT_START script_VaatiWithZelda Wait 0x003c SetAnimationState 0x0004 DoPostScriptAction 0x001c - Call WaitForFrameHiBit + Call WaitForAnimDone DoPostScriptAction 0x0000 Wait 0x003c SetSyncFlag 0x00000002 diff --git a/data/scripts/dhc/script_ZeldaAfterDefeatingV2.inc b/data/scripts/dhc/script_ZeldaAfterDefeatingV2.inc index 8c2d1161..bad68ee4 100644 --- a/data/scripts/dhc/script_ZeldaAfterDefeatingV2.inc +++ b/data/scripts/dhc/script_ZeldaAfterDefeatingV2.inc @@ -18,7 +18,7 @@ script_0800DCD0: StopBgm Call sub_08066E50 PlaySound SFX_1C9 - Call WaitForFrameHiBit + Call WaitForAnimDone PlaySound SFX_1CA Wait 0x003c DoPostScriptAction 0x0004 diff --git a/data/scripts/hyruleTown/script_Anju.inc b/data/scripts/hyruleTown/script_Anju.inc index 627bc9b1..b6cb6bb4 100644 --- a/data/scripts/hyruleTown/script_Anju.inc +++ b/data/scripts/hyruleTown/script_Anju.inc @@ -19,7 +19,7 @@ script_0801015A: Call sub_080A1608 WaitUntilTextboxCloses EnablePlayerControl - CallWithArg sub_080A1550, script_080101AC + CallWithArg CuccoMinigame_Init, script_080101AC JumpIfNot script_0801015A PlayBgm BGM_CUCCO_MINIGAME SetRoomFlag 0x0001 @@ -49,7 +49,7 @@ script_080101AC: Call sub_0807FB74 _0807E8E4_1 Call SetPlayerCollisionLayer1 - Call sub_080A1388 + Call CuccoMinigame_Cleanup Call sub_0806EC38 BeginBlock MoveEntityToPlayer diff --git a/data/scripts/hyruleTown/script_Librari.inc b/data/scripts/hyruleTown/script_Librari.inc index 759b102e..7f456a0e 100644 --- a/data/scripts/hyruleTown/script_Librari.inc +++ b/data/scripts/hyruleTown/script_Librari.inc @@ -10,7 +10,7 @@ script_0800E974: JumpIfNot script_0800E974 SetPlayerIdle SetAnimation 0x0008 - Call WaitForFrameHiBit + Call WaitForAnimDone SetAnimation 0x0009 Call sub_0806B260 JumpIfNot script_0800E9E4 diff --git a/data/scripts/hyruleTown/script_LibrariLater.inc b/data/scripts/hyruleTown/script_LibrariLater.inc index cc4fda75..5b97f721 100644 --- a/data/scripts/hyruleTown/script_LibrariLater.inc +++ b/data/scripts/hyruleTown/script_LibrariLater.inc @@ -10,7 +10,7 @@ script_08012440: JumpIfNot script_08012440 SetPlayerIdle SetAnimation 0x0008 - Call WaitForFrameHiBit + Call WaitForAnimDone SetAnimation 0x0009 Call sub_0806B2B4 WaitUntilTextboxCloses diff --git a/data/scripts/hyruleTown/script_LibrarianLeft.inc b/data/scripts/hyruleTown/script_LibrarianLeft.inc index 2cda1ba0..bed65448 100644 --- a/data/scripts/hyruleTown/script_LibrarianLeft.inc +++ b/data/scripts/hyruleTown/script_LibrarianLeft.inc @@ -10,7 +10,7 @@ script_08008BA2: TriggerInteract SetPlayerIdle SetAnimation 0x0004 - Call WaitForFrameHiBit + Call WaitForAnimDone MessageFromTarget 0x4912 WaitUntilTextboxCloses SetAnimation 0x0008 diff --git a/data/scripts/hyruleTown/script_LibrarianLeftWithQuest.inc b/data/scripts/hyruleTown/script_LibrarianLeftWithQuest.inc index 6fbcd584..a6f0efee 100644 --- a/data/scripts/hyruleTown/script_LibrarianLeftWithQuest.inc +++ b/data/scripts/hyruleTown/script_LibrarianLeftWithQuest.inc @@ -16,13 +16,13 @@ script_08008BD2: SetGlobalFlag 0x0061 .endif SetAnimation 0x0004 - Call WaitForFrameHiBit + Call WaitForAnimDone WaitUntilTextboxCloses Call sub_0806BA34 JumpIfNot script_08008C54 WaitUntilTextboxCloses CallWithArg sub_0806BB1C, 0x00000000 - Call WaitForFrameHiBit + Call WaitForAnimDone CallWithArg sub_0806BB1C, 0x00000001 Call sub_0806BB7C JumpIfNot script_08008C5C @@ -34,11 +34,11 @@ script_08008BD2: Wait 0x000f PlaySound SFX_SECRET SetAnimation 0x0004 - Call WaitForFrameHiBit + Call WaitForAnimDone MessageNoOverlap 0x4913 WaitUntilTextboxCloses SetAnimation 0x0008 - Call WaitForFrameHiBit + Call WaitForAnimDone Jump script_08008C5C script_08008C54: SetAnimation 0x0008 diff --git a/data/scripts/hyruleTown/script_LibrarianRight.inc b/data/scripts/hyruleTown/script_LibrarianRight.inc index df64ef65..2945aaf2 100644 --- a/data/scripts/hyruleTown/script_LibrarianRight.inc +++ b/data/scripts/hyruleTown/script_LibrarianRight.inc @@ -10,7 +10,7 @@ script_08008B6E: TriggerInteract SetPlayerIdle SetAnimation 0x0004 - Call WaitForFrameHiBit + Call WaitForAnimDone Call sub_0806BBB0 WaitUntilTextboxCloses SetAnimation 0x0008 diff --git a/data/scripts/hyruleTown/script_Mayor.inc b/data/scripts/hyruleTown/script_Mayor.inc index 83a6c6a5..1761b2cf 100644 --- a/data/scripts/hyruleTown/script_Mayor.inc +++ b/data/scripts/hyruleTown/script_Mayor.inc @@ -12,12 +12,12 @@ script_0800EA6A: SetPlayerIdle FacePlayer CallWithArg sub_0807F3D8, 0x00000004 - Call WaitForFrameHiBit + Call WaitForAnimDone SetAnimation 0x0009 Call sub_0806CE80 WaitUntilTextboxCloses EnablePlayerControl SetAnimation 0x000a - Call WaitForFrameHiBit + Call WaitForAnimDone SetAnimation 0x0008 Jump script_0800EA6A diff --git a/data/scripts/hyruleTown/script_Pita.inc b/data/scripts/hyruleTown/script_Pita.inc index 5732755d..4c554ae1 100644 --- a/data/scripts/hyruleTown/script_Pita.inc +++ b/data/scripts/hyruleTown/script_Pita.inc @@ -11,7 +11,7 @@ script_080106BE: JumpIfNot script_080106BE SetPlayerIdle FacePlayer - Call WaitForFrameHiBit + Call WaitForAnimDone DoPostScriptAction 0x0000 HasRoomItemForSale JumpIf script_080106E0 diff --git a/data/scripts/hyruleTown/script_Stamp.inc b/data/scripts/hyruleTown/script_Stamp.inc index c478adeb..1b70e3de 100644 --- a/data/scripts/hyruleTown/script_Stamp.inc +++ b/data/scripts/hyruleTown/script_Stamp.inc @@ -11,7 +11,7 @@ script_080107AA: CheckEntityInteractType JumpIfNot script_080107AA SetPlayerIdle - Call WaitForFrameHiBit + Call WaitForAnimDone DoPostScriptAction 0x0001 Call sub_08062CBC WaitUntilTextboxCloses diff --git a/data/scripts/npc/script_BladeBrothers.inc b/data/scripts/npc/script_BladeBrothers.inc index e42d8c46..8dbcf6d5 100644 --- a/data/scripts/npc/script_BladeBrothers.inc +++ b/data/scripts/npc/script_BladeBrothers.inc @@ -36,7 +36,7 @@ script_08016262: Call sub_08068E00 WaitUntilTextboxCloses DoPostScriptAction 0x0001 - Call WaitForFrameHiBit + Call WaitForAnimDone Call sub_08068E90 Call sub_08068C8C JumpIf script_0801631C diff --git a/data/scripts/npc/script_Farmer.inc b/data/scripts/npc/script_Farmer.inc index a03617d1..2aa74c78 100644 --- a/data/scripts/npc/script_Farmer.inc +++ b/data/scripts/npc/script_Farmer.inc @@ -11,7 +11,7 @@ script_0800B0E8: script_0800B0F6: SetPlayerIdle Call sub_0807DF28 - Call WaitForFrameHiBit + Call WaitForAnimDone FacePlayer CallWithArg sub_0806BC94, 0x00000004 Call sub_0806BCE8 @@ -24,7 +24,7 @@ script_0800B0F6: script_0800B134: SetPlayerIdle Call sub_0807DF28 - Call WaitForFrameHiBit + Call WaitForAnimDone FacePlayer CallWithArg sub_0806BC94, 0x00000004 Call sub_0807F650 diff --git a/data/scripts/sanctuary/script_Npc4EThirdSanctuary.inc b/data/scripts/sanctuary/script_Npc4EThirdSanctuary.inc index 3e97485d..509c2f48 100644 --- a/data/scripts/sanctuary/script_Npc4EThirdSanctuary.inc +++ b/data/scripts/sanctuary/script_Npc4EThirdSanctuary.inc @@ -85,9 +85,9 @@ script_080138D0: .endif Call NPC4E_SaveEquippedItems CallWithArg EquipItem, 0x00010001 - CallWithArg sub_0807F29C, gUnk_080049FE + CallWithArg SetInputMacro, gUnk_080049FE Wait 0x00c8 - CallWithArg sub_0807F29C, 0x00000000 + CallWithArg SetInputMacro, 0x00000000 Call NPC4E_RestoreEquippedItems script_08013A8E: .ifndef EU diff --git a/data/scripts/sanctuary/script_Object6ASword2.inc b/data/scripts/sanctuary/script_Object6ASword2.inc index 2acab4f5..8723ac1a 100644 --- a/data/scripts/sanctuary/script_Object6ASword2.inc +++ b/data/scripts/sanctuary/script_Object6ASword2.inc @@ -6,7 +6,7 @@ SCRIPT_START script_Object6ASword2 EndBlock WaitForSyncFlagAndClear 0x00000080 SetAnimation 0x000c - Call WaitForFrameHiBit + Call WaitForAnimDone SetSyncFlag 0x00000100 WaitForSyncFlagAndClear 0x00000080 DoPostScriptAction 0x0006 diff --git a/data/scripts/sanctuary/script_Object6ASword3.inc b/data/scripts/sanctuary/script_Object6ASword3.inc index 38b36455..1cd22b94 100644 --- a/data/scripts/sanctuary/script_Object6ASword3.inc +++ b/data/scripts/sanctuary/script_Object6ASword3.inc @@ -6,7 +6,7 @@ SCRIPT_START script_Object6ASword3 EndBlock WaitForSyncFlagAndClear 0x00000080 SetAnimation 0x000d - Call WaitForFrameHiBit + Call WaitForAnimDone SetSyncFlag 0x00000100 WaitForSyncFlagAndClear 0x00000080 DoPostScriptAction 0x0006 diff --git a/data/scripts/sanctuary/script_Object6ASwordCharge10.inc b/data/scripts/sanctuary/script_Object6ASwordCharge10.inc index 000d1c95..31fd102a 100644 --- a/data/scripts/sanctuary/script_Object6ASwordCharge10.inc +++ b/data/scripts/sanctuary/script_Object6ASwordCharge10.inc @@ -9,6 +9,6 @@ SCRIPT_START script_Object6ASwordCharge10 EndBlock WaitForSyncFlag 0x00000020 Wait 0x0078 - Call WaitForFrameHiBit + Call WaitForAnimDone DoPostScriptAction 0x0006 SCRIPT_END diff --git a/data/scripts/sanctuary/script_Object6ASwordCharge5.inc b/data/scripts/sanctuary/script_Object6ASwordCharge5.inc index 3b06636f..8dc55e5f 100644 --- a/data/scripts/sanctuary/script_Object6ASwordCharge5.inc +++ b/data/scripts/sanctuary/script_Object6ASwordCharge5.inc @@ -6,11 +6,11 @@ SCRIPT_START script_Object6ASwordCharge5 EndBlock WaitForSyncFlagAndClear 0x00000200 SetAnimation 0x0008 - Call WaitForFrameHiBit + Call WaitForAnimDone SetAnimation 0x000c SetSyncFlag 0x00002000 WaitForSyncFlag 0x00000020 SetAnimation 0x0010 - Call WaitForFrameHiBit + Call WaitForAnimDone DoPostScriptAction 0x0006 SCRIPT_END diff --git a/data/scripts/sanctuary/script_Object6ASwordCharge6.inc b/data/scripts/sanctuary/script_Object6ASwordCharge6.inc index 0fccc71d..1a080034 100644 --- a/data/scripts/sanctuary/script_Object6ASwordCharge6.inc +++ b/data/scripts/sanctuary/script_Object6ASwordCharge6.inc @@ -6,11 +6,11 @@ SCRIPT_START script_Object6ASwordCharge6 EndBlock WaitForSyncFlagAndClear 0x00000400 SetAnimation 0x0009 - Call WaitForFrameHiBit + Call WaitForAnimDone SetAnimation 0x000d SetSyncFlag 0x00004000 WaitForSyncFlag 0x00000020 SetAnimation 0x0011 - Call WaitForFrameHiBit + Call WaitForAnimDone DoPostScriptAction 0x0006 SCRIPT_END diff --git a/data/scripts/sanctuary/script_Object6ASwordCharge8.inc b/data/scripts/sanctuary/script_Object6ASwordCharge8.inc index 9120d4b9..d86e5dce 100644 --- a/data/scripts/sanctuary/script_Object6ASwordCharge8.inc +++ b/data/scripts/sanctuary/script_Object6ASwordCharge8.inc @@ -7,12 +7,12 @@ SCRIPT_START script_Object6ASwordCharge8 EndBlock WaitForSyncFlagAndClear 0x00001000 SetAnimation 0x000b - Call WaitForFrameHiBit + Call WaitForAnimDone SetAnimation 0x000f SetSyncFlag 0x00010000 WaitForSyncFlag 0x00000020 SetAnimation 0x0013 - Call WaitForFrameHiBit + Call WaitForAnimDone DoPostScriptAction 0x0006 SCRIPT_END .2byte 0x0000 diff --git a/data/scripts/sanctuary/script_Object6ASwordCharge9.inc b/data/scripts/sanctuary/script_Object6ASwordCharge9.inc index 637466b7..7b1b20c0 100644 --- a/data/scripts/sanctuary/script_Object6ASwordCharge9.inc +++ b/data/scripts/sanctuary/script_Object6ASwordCharge9.inc @@ -8,7 +8,7 @@ SCRIPT_START script_Object6ASwordCharge9 EndBlock WaitForSyncFlag 0x00000020 Wait 0x0078 - Call WaitForFrameHiBit + Call WaitForAnimDone DoPostScriptAction 0x0006 SCRIPT_END .2byte 0x0000 diff --git a/data/scripts/sanctuary/script_Object6ASwordInPedestal.inc b/data/scripts/sanctuary/script_Object6ASwordInPedestal.inc index 2584cb86..b2096d46 100644 --- a/data/scripts/sanctuary/script_Object6ASwordInPedestal.inc +++ b/data/scripts/sanctuary/script_Object6ASwordInPedestal.inc @@ -6,7 +6,7 @@ SCRIPT_START script_Object6ASwordInPedestal EndBlock WaitForSyncFlagAndClear 0x00000080 SetAnimation 0x000b - Call WaitForFrameHiBit + Call WaitForAnimDone SetSyncFlag 0x00000100 WaitForSyncFlagAndClear 0x00000080 DoPostScriptAction 0x0006 diff --git a/data/scripts/sanctuary/script_Objet6ASwordCharge7.inc b/data/scripts/sanctuary/script_Objet6ASwordCharge7.inc index 30ab72f0..ab1e6db4 100644 --- a/data/scripts/sanctuary/script_Objet6ASwordCharge7.inc +++ b/data/scripts/sanctuary/script_Objet6ASwordCharge7.inc @@ -7,12 +7,12 @@ SCRIPT_START script_Objet6ASwordCharge7 EndBlock WaitForSyncFlagAndClear 0x00000800 SetAnimation 0x000a - Call WaitForFrameHiBit + Call WaitForAnimDone SetAnimation 0x000e SetSyncFlag 0x00008000 WaitForSyncFlag 0x00000020 SetAnimation 0x0012 - Call WaitForFrameHiBit + Call WaitForAnimDone DoPostScriptAction 0x0006 SCRIPT_END .2byte 0x0000 diff --git a/genctx.sh b/genctx.sh new file mode 100644 index 00000000..f9fd2a23 --- /dev/null +++ b/genctx.sh @@ -0,0 +1,38 @@ +headers="" +num=0 + +recurse_dir() { + for file in `ls $1` + do + if [ -d $1/$file ] + then + recurse_dir $1/$file + else + if [ -f $1/$file ] + then + if [ ${file##*.} = "h" ] + then + # make a copy of the path but without ./ + p=${1#./} + #if path begins with / then remove it + p=${p#/} + # if path isnt empty add / + if [ -n "$p" ] + then + p="$p/" + fi + headers+="#include \"$p$file\"\n" + num=$(( $num + 1 )) + fi + fi + fi + done +} + +cd include +recurse_dir ./ +cd .. + +echo "#include \"gba/types.h\"\n$headers" | cc -E -nostdinc -Iinclude -Itools/agbcc/include - > ctx.c +echo "$headers" +echo "$num headers, written to ctx.c" diff --git a/include/coord.h b/include/coord.h index 31453184..b8af7117 100644 --- a/include/coord.h +++ b/include/coord.h @@ -7,13 +7,16 @@ s16 FixedMul(s16 r0, s16 r1); s16 FixedDiv(s16 r0, s16 r1); +void* AllocMutableHitbox(Entity*); +void UnloadHitbox(Entity*); + void CopyPosition(Entity*, Entity*); void PositionEntityOnTop(Entity*, Entity*); void PositionRelative(Entity*, Entity*, s32, s32); void CopyPositionAndSpriteOffset(Entity* param_1, Entity* param_2); void sub_0806FA90(Entity*, Entity*, s32, s32); -void SortEntityAbove(Entity*, Entity*); -void SortEntityBelow(Entity*, Entity*); +void SortEntityAbove(Entity* below_ent, Entity* above_ent); +void SortEntityBelow(Entity* above_ent, Entity* below_ent); u32 sub_0806F5A4(u32 idx); bool32 sub_0806F3E4(Entity*); diff --git a/include/entity.h b/include/entity.h index 4b25be09..4f2cc3ca 100644 --- a/include/entity.h +++ b/include/entity.h @@ -106,7 +106,7 @@ typedef struct { } Hitbox3D; typedef struct { - u8 b0 : 3; // 1-4 + u8 b0 : 3; // 1-4 /**< set to is 4 in entity init (default/lowest?) u8 b1 : 3; // 8 u8 b2 : 1; // 0x40 u8 b3 : 1; // 0x80 @@ -504,6 +504,8 @@ extern u8 gManagerCount; #define COLLISION_OFF(entity) ((entity)->flags &= ~ENT_COLLIDE) #define COLLISION_ON(entity) ((entity)->flags |= ENT_COLLIDE) +#define ANIM_DONE (1 << 7) /* invalid frame index */ + /** @name Tile Macros */ /// @{ #define TILE(x, y) (((((x)-gRoomControls.origin_x) >> 4) & 0x3F) | ((((y)-gRoomControls.origin_y) >> 4) & 0x3F) << 6) #define TILE_POS(x, y) (x + (y << 6)) @@ -512,7 +514,8 @@ extern u8 gManagerCount; /// @} /** @name Animation State Macros */ ///@{ -#define AnimationStateTurnAround(expr) ((expr) ^ 0x4) +#define AnimationStateFlip90(expr) ((expr) ^ 0x2) +#define AnimationStateFlip180(expr) ((expr) ^ 0x4) #define AnimationStateIdle(expr) ((expr)&0x6) #define AnimationStateWalk(expr) ((expr)&0xe) ///@} diff --git a/include/fileselect.h b/include/fileselect.h index 31d75ea5..066e3e88 100644 --- a/include/fileselect.h +++ b/include/fileselect.h @@ -23,21 +23,16 @@ static_assert(sizeof(ChooseFileState) == 0x30); // TODO: This occupies the same memory region as gMenu extern ChooseFileState gChooseFileState; -typedef struct { - u8 filler0[0x1]; - u8 unk1; - u8 charColor; - u8 bgColor; - u16 unk4; - u16 unk6; - u8* unk8; -} struct_02036540; - -typedef struct { - u8 filler0[0x10]; - u16 unk10; - u8 filler12[0x6]; -} struct_080FC844; +// typedef struct { +// u8 unk00 : 4; +// u8 unk04 : 4; +// u8 unk1; +// u8 charColor; +// u8 bgColor; +// u16 unk4; +// u16 unk6; +// u8* unk8; +// } struct_02036540; extern struct_020227E8 gUnk_020227E8[]; @@ -57,18 +52,19 @@ extern struct_02019EE0 gMapDataBottomSpecial; // TODO size: 0x8000 from ClearTilemaps? extern void sub_08056FEC(u32, struct_020227E8*); -extern void sub_0805F46C(u32, void*); +extern u32 sub_0805F46C(u32, Font*); extern void RecoverUI(u32 bottomPt, u32 topPt); extern void ClearTilemaps(void); extern void sub_0805194C(u32); -extern struct_02036540* sub_0805F2C8(void); -extern void sub_0805F7DC(u32, struct_02036540*); -extern void sub_0805F300(struct_02036540*); +extern WStruct* sub_0805F2C8(void); +extern u32 sub_0805F7DC(u32, WStruct*); +extern void sub_0805F300(WStruct*); extern void sub_08050A64(u32); extern void sub_08050AFC(u32); extern void sub_08050384(); +extern void CreateDialogBox(u32, u32); -extern const struct_080FC844 gUnk_080FC844; +extern const Font gUnk_080FC844; extern const u16 gUnk_080FC85C[][3]; extern void (*const gUnk_080FC908[])(void); extern const u8 gGlobalGfxAndPalettes[]; diff --git a/include/functions.h b/include/functions.h index b4e79f4d..59505428 100644 --- a/include/functions.h +++ b/include/functions.h @@ -24,7 +24,7 @@ extern void CreateItemOnGround(Entity*); extern Entity* CreateLargeWaterTrace(Entity*); extern void CreateMagicSparkles(u32, u32, u32); extern void CreateMinishEntrance(u32 tile); -extern Entity* CreatePlayerBomb(ItemBehavior*, u32); +extern Entity* CreatePlayerItemWithParent(ItemBehavior*, u32); extern u32 CreateRandomItemDrop(Entity*, u32); extern void CreateSparkle(Entity*); extern void DoPlayerAction(Entity*); @@ -52,7 +52,7 @@ extern void LoadResources(void); extern bool32 LoadSwapGFX(Entity*, u16, u32); extern void MenuFadeIn(u32, u32); extern void ModBombs(s32); -extern u32 PlayerInRange(Entity*, u32, u32); +extern bool32 PlayerInRange(Entity*, u32, s32); extern bool32 ProcessMovement1(Entity*); extern bool32 ProcessMovement12(Entity*); extern bool32 ProcessMovement2(Entity*); @@ -85,7 +85,7 @@ extern void sub_08000148(u32, u32, u32); extern u32 sub_080B1A0C(Entity*, s32, s32); extern u32 sub_080B1A48(u32, u32, u32); extern u32 sub_080B1A8C(Entity*, u32, u32); -extern u32 sub_080B1AA8(Entity*); +extern u32 GetTileUnderEntity(Entity*); extern u32 sub_080B1AE0(u16, u8); extern u32 sub_080B1AF0(Entity*, s32, s32); extern u32 sub_080B1B18(s32, s32, u32); @@ -130,15 +130,16 @@ extern void sub_0803C0AC(Entity*); extern void sub_08049CF4(Entity*); extern Entity* sub_08049DF4(u32); extern u32 sub_08049EE4(Entity*); -extern u32 sub_08049F1C(Entity*, Entity*, u32); -extern u32 sub_08049F84(Entity*, u32); -extern u32 sub_08049FA0(Entity*); -extern u32 sub_08049FDC(Entity*, u32); +extern bool32 sub_08049F1C(Entity*, Entity*, s32); +extern bool32 sub_08049F84(Entity*, s32); +extern bool32 sub_08049FA0(Entity*); +extern bool32 sub_08049FDC(Entity*, u32); extern u32 sub_0804A024(Entity*, u32, u32); extern u32 sub_0804A044(Entity*, Entity*, u32); +extern void sub_0804A4E4(Entity*, Entity*); extern void sub_0804A720(Entity*); extern void sub_0804AA1C(Entity*); -extern void sub_0804C128(); +extern void sub_0804C128(void); extern u32 sub_080542AC(u32); extern void sub_08054564(); extern void sub_08054570(void); @@ -152,8 +153,8 @@ extern void sub_08059278(void); extern void sub_0805B4D0(u32); extern void sub_0805BC4C(void); extern void sub_0805EC60(Entity*); -extern void sub_0805EC9C(Entity*, u32, u32, u32); -extern void sub_0805ED14(u32*); +extern void SetAffineInfo(Entity*, u32, u32, u32); +extern void InitPlayerMacro(u32*); extern u32* sub_0805F25C(u32); extern u32 sub_0805F7A0(u32); extern void sub_0805F8E4(u32 r0, WStruct* r1); @@ -163,7 +164,7 @@ extern void sub_08060158(Entity*); extern void sub_0806D02C(Entity*); extern void sub_0806D0B0(Entity*); extern void sub_0806F4E8(Entity*); -extern u32 sub_0806F520(); +extern bool32 sub_0806F520(Entity*); extern u32 sub_0806F5B0(u32); extern u32 sub_0806F824(Entity*, Entity*, s32, s32); extern u32 sub_0806F948(Entity*); @@ -182,7 +183,7 @@ extern void sub_08077D38(ItemBehavior*, u32); extern void sub_08077DF4(ItemBehavior*, u32); extern void sub_08077E3C(ItemBehavior*, u32); extern void sub_08077E54(ItemBehavior*); -extern void sub_08077E78(ItemBehavior*, u32); +extern void DeletePlayerItem(ItemBehavior*, u32); extern bool32 sub_08077EC8(ItemBehavior*); extern bool32 sub_08077EFC(ItemBehavior*); extern bool32 sub_08077F10(ItemBehavior*); @@ -198,8 +199,8 @@ extern void sub_08078850(Entity*, u32, u32, void*); extern s32 sub_0807887C(Entity*, u32, u32); extern void sub_080788E0(Entity*); extern s32 sub_08078904(); -extern void sub_08078930(Entity*); -extern void sub_08078954(Entity*); +extern void RegisterCarryEntity(Entity*); +extern void FreeCarryEntity(Entity*); extern void sub_08078AC0(u32, u32, u32); extern void sub_08078B48(void); extern void sub_08078E84(Entity*, Entity*); diff --git a/include/manager.h b/include/manager.h index 4835a712..131e9967 100644 --- a/include/manager.h +++ b/include/manager.h @@ -141,7 +141,7 @@ typedef struct { DiggingCaveEntrance* unk_00; u16 unk_04; u16 unk_06; - u8 unk_08; + u8 isDiggingCave; u8 unk_09; u8 unk_0a; u8 unk_0b; diff --git a/include/message.h b/include/message.h index c0164810..4a450767 100644 --- a/include/message.h +++ b/include/message.h @@ -17,7 +17,7 @@ typedef struct { u16 textIndex; u16 unk2; // HI? u32 field_0xc; - u32 field_0x10; + u32 rupees; u32 field_0x14; u32 field_0x18; u32 field_0x1c; @@ -25,14 +25,17 @@ typedef struct { extern Message gMessage; typedef struct { - u8 flags; + u8 unk00 : 1; + u8 unk01 : 4; + u8 unk05 : 2; + u8 unk06 : 1; u8 code; // first byte read u16 param; // second byte read u16 extended; // ascii adjusted for jp chars u16 _6; u16 textIndex; void* _c; - u8 buf[32]; + const u8* buf[8]; } Token; typedef struct { diff --git a/include/object.h b/include/object.h index 5d6cb713..ef3d2d08 100644 --- a/include/object.h +++ b/include/object.h @@ -215,7 +215,7 @@ typedef enum { OBJECT_B6, WELL, WIND_TRIBE_TELEPORTER, - OBJECT_B9, + CUCCO_MINIGAME, GYORG_BOSS_OBJECT, WINDCREST, LIT_AREA, diff --git a/include/player.h b/include/player.h index ba4d4de6..0776c0a5 100644 --- a/include/player.h +++ b/include/player.h @@ -109,7 +109,7 @@ enum PlayerFlags { PL_FROZEN = 0x800, PL_IN_MINECART = 0x1000, PL_DRUGGED = 0x4000, - PL_FLAGS8000 = 0x8000, + PL_PIT_IS_EXIT = 0x8000, PL_FLAGS10000 = 0x10000, PL_FLAGS20000 = 0x20000, PL_ROLLING = 0x40000, @@ -204,7 +204,7 @@ typedef struct { /*0x02*/ u8 jump_status; /*0x03*/ u8 field_0x3[2]; /*0x05*/ u8 heldObject; - /*0x06*/ u8 pushedObject; + /*0x06*/ u8 pushedObject; // hi bit is special, rest is used as a timer /*0x07*/ u8 field_0x7; /*0x08*/ u16 animation; /*0x0a*/ u8 field_0xa; @@ -224,7 +224,7 @@ typedef struct { /*0x1a*/ u8 mobility; /*0x1b*/ u8 sword_state; /*0x1c*/ u8 field_0x1c; - /*0x1d*/ u8 field_0x1d; + /*0x1d*/ u8 gustJarSpeed; /*0x1e*/ u8 dash_state; /*0x1f*/ u8 field_0x1f[3]; /*0x22*/ u16 field_0x22[2]; diff --git a/include/room.h b/include/room.h index 43ac8f40..3ab02772 100644 --- a/include/room.h +++ b/include/room.h @@ -83,6 +83,16 @@ typedef struct { static_assert(sizeof(RoomVars) == 0xCC); extern RoomVars gRoomVars; +typedef struct { + u8 area; + u8 room; + u16 unk_02; + u32 unk_04; +} RoomMemory; + +extern RoomMemory* gUnk_020354B0; +extern RoomMemory gRoomMemory[]; + // Packets used to store which entities to load in a room typedef struct { u8 kind; @@ -96,10 +106,10 @@ typedef struct { } EntityData; typedef struct { - u16 field_0x0; + u16 tilePos; u16 field_0x2; - u8 field_0x4; - u8 field_0x5; + u8 room; + u8 animationState; u8 field_0x6; u8 field_0x7; } struct_030010EC; @@ -128,7 +138,7 @@ typedef struct { /* 0x12 */ u16 dungeon_map_y; /* 0x14 */ u16 overworld_map_x; /* 0x16 */ u16 overworld_map_y; - /* 0x18 */ u8 field_0x24[0x8]; + /* 0x18 */ u8 field_0x24[8]; } PlayerRoomStatus; static_assert(sizeof(PlayerRoomStatus) == 0x20); @@ -140,7 +150,8 @@ typedef struct { /* 0x09 */ u8 type; // transition when changing areas /* 0x0a */ u16 stairs_idx; // seems to be a tile type /* 0x0c */ PlayerRoomStatus player_status; - /* 0x2c */ u8 field_0x2c[0x9]; + /* 0x2c */ u8 entity_update_type; // differentiates entity priority on kinstone menu? + /* 0x2d */ u8 field_0x2c[0x8]; /* 0x35 */ u8 hint_height; /* 0x36 */ u16 hint_idx; /* 0x38 */ u8 field_0x38; diff --git a/include/structures.h b/include/structures.h index 12d15690..00e83b72 100644 --- a/include/structures.h +++ b/include/structures.h @@ -222,15 +222,19 @@ extern struct { static_assert(sizeof(gUnk_02034490) == 0x18); typedef struct { - u8 unk0; + u8 unk00 : 1; + u8 unk01 : 3; + u8 unk04 : 4; u8 unk1; - u8 unk2; - u8 unk3; + u8 charColor; + u8 bgColor; u16 unk4; u16 unk6; void* unk8; } WStruct; +static_assert(sizeof(WStruct) == 12); + typedef struct { u8 unk0; u8 unk1; @@ -296,4 +300,22 @@ typedef struct { extern SpritePtr gSpritePtrs[]; +typedef struct { + u16* dest; + void* gfx_dest; + void* buffer_loc; + u32 _c; + u16 gfx_src; + u8 width; + u8 right_align : 1; + u8 sm_border : 1; + u8 unused : 1; + u8 draw_border : 1; + u8 border_type : 4; + u8 fill_type; + u8 _15; + u8 _16; + u8 stylized; +} Font; + #endif diff --git a/linker.ld b/linker.ld index 830b22f1..c251d4c7 100644 --- a/linker.ld +++ b/linker.ld @@ -136,7 +136,7 @@ SECTIONS { . = 0x00035542; gUnk_02035542 = .; . = 0x00036540; gUnk_02036540 = .; . = 0x00036570; gScriptExecutionContextArray = .; - . = 0x000369F0; gUnk_020369F0 = .; + . = 0x000369F0; gEntityListsBackup = .; . = 0x00036A38; gCurrentWindow = .; . = 0x00036A40; gNewWindow = .; #if defined(DEMO_USA) || defined(DEMO_JP) @@ -177,7 +177,7 @@ SECTIONS { . = 0x00001160; gPlayerEntity = .; . = 0x000011E8; gUnk_030011E8 = .; . = 0x000015A0; gUnk_030015A0 = .; - . = 0x00003BE0; gUnk_03003BE0 = .; + . = 0x00003BE0; gCarryEntities = .; . = 0x00003C70; gUnk_03003C70 = .; . = 0x00003D70; gEntityLists = .; . = 0x00003DB8; gCollidableCount = .; @@ -213,7 +213,7 @@ SECTIONS { . = 0x000057CC; ram_sub_080B1A58 = .; . = 0x000057D4; ram_GetTileType = .; . = 0x00005800; ram_sub_080B1A8C = .; - . = 0x0000581C; ram_sub_080B1AA8 = .; + . = 0x0000581C; ram_GetTileUnderEntity = .; . = 0x00005828; ram_sub_080B1AB4 = .; . = 0x0000583C; ram_sub_080B1AC8 = .; . = 0x0000584C; ram_sub_080B1AD8 = .; @@ -274,6 +274,9 @@ SECTIONS { /* handwritten assembly */ asm/src/crt0.o(.text); +#if defined(EU) || defined(DEMO_JP) + asm/src/stack_check.o(.text); +#endif asm/src/veneer.o(.text); data/data_08000360.o(.rodata); asm/src/code_08000E44.o(.text); @@ -378,7 +381,7 @@ SECTIONS { src/enemy/mazaalMacro.o(.text); src/enemy/mazaalHand.o(.text); src/enemy/octorokBoss.o(.text); - asm/enemy/flyingPot.o(.text); + src/enemy/flyingPot.o(.text); src/enemy/gibdo.o(.text); src/enemy/octorokGolden.o(.text); src/enemy/tektiteGolden.o(.text); @@ -425,7 +428,7 @@ SECTIONS { src/enemy/enemy66.o(.text); /* END enemies */ src/code_08049CD4.o(.text); /* enemyUtils.c */ - asm/code_08049D30.o(.text); + src/code_08049DF4.o(.text); src/enemyUtils.o(.text); src/createEnemy.o(.text); src/enterPortalSubtask.o(.text); @@ -498,7 +501,6 @@ SECTIONS { src/manager/manager39.o(.text); src/entity.o(.text); src/code_0805EC04.o(.text); /* objaffine? */ - asm/text.o(.text); src/text.o(.text); src/debug.o(.text); src/playerItem/playerItem14.o(.text); @@ -708,7 +710,6 @@ SECTIONS { src/object/object53.o(.text); src/object/pullableLever.o(.text); src/object/minecart.o(.text); - asm/object/minecart.o(.text); src/object/thoughtBubble.o(.text); src/object/hiddenLadderDown.o(.text); src/object/gentariCurtains.o(.text); @@ -718,7 +719,7 @@ SECTIONS { src/object/mask.o(.text); src/object/houseDoorInterior.o(.text); src/object/whirlwind.o(.text); - asm/object/objectBlockingStairs.o(.text); + src/object/objectBlockingStairs.o(.text); src/object/swordsmanNewsletter.o(.text); src/object/object61.o(.text); src/object/giantTwig.o(.text); @@ -748,7 +749,7 @@ SECTIONS { src/object/macroShoes.o(.text); src/object/objectOnSpinyBeetle.o(.text); src/object/object7E.o(.text); - asm/object/picoBloom.o(.text); + src/object/picoBloom.o(.text); src/object/board.o(.text); src/object/object81.o(.text); src/object/bigVortex.o(.text); @@ -758,7 +759,7 @@ SECTIONS { src/object/object86.o(.text); src/object/octorokBossObject.o(.text); src/object/macroBook.o(.text); - asm/object/mazaalBossObject.o(.text); + src/object/mazaalBossObject.o(.text); src/object/cabinFurniture.o(.text); src/object/doubleBookshelf.o(.text); src/object/book.o(.text); @@ -771,11 +772,10 @@ SECTIONS { src/object/lamp.o(.text); src/object/windTribeFlag.o(.text); src/object/bird.o(.text); - asm/object/bird.o(.text); - asm/object/object96.o(.text); + src/object/object96.o(.text); src/object/keyStealingTakkuri.o(.text); - asm/object/object98.o(.text); - asm/object/object99.o(.text); + src/object/object98.o(.text); + src/object/object99.o(.text); src/object/macroAcorn.o(.text); src/object/object9B.o(.text); src/object/treeHidingPortal.o(.text); @@ -788,26 +788,26 @@ SECTIONS { src/object/cloud.o(.text); src/object/minishLight.o(.text); asm/object/fireballChain.o(.text); - asm/object/objectA6.o(.text); + src/object/objectA6.o(.text); src/object/objectA7.o(.text); src/object/objectA8.o(.text); - asm/object/objectA9.o(.text); + src/object/objectA9.o(.text); src/object/waterfallOpening.o(.text); - asm/object/objectAB.o(.text); + src/object/objectAB.o(.text); src/object/fourElements.o(.text); - asm/object/objectAD.o(.text); + src/object/objectAD.o(.text); src/object/floatingBlock.o(.text); src/object/objectAF.o(.text); src/object/metalDoor.o(.text); src/object/jailBars.o(.text); src/object/objectB2.o(.text); src/object/objectB3.o(.text); - asm/object/objectB4.o(.text); + src/object/objectB4.o(.text); src/object/objectB5.o(.text); src/object/objectB6.o(.text); src/object/well.o(.text); src/object/windTribeTeleporter.o(.text); - asm/object/objectB9.o(.text); + src/object/cuccoMinigame.o(.text); src/object/gyorgBossObject.o(.text); src/object/windcrest.o(.text); src/object/litArea.o(.text); @@ -824,7 +824,7 @@ SECTIONS { src/demo.o(.text); #endif src/sound.o(.text); - asm/staffroll.o(.text); + src/staffroll.o(.text); src/menu/kinstone_menu.o(.text); src/menu/figurine_menu.o(.text); src/menu/pause_menu.o(.text); @@ -1017,7 +1017,7 @@ SECTIONS { data/animations/enemy/mazaalHand.o(.rodata); src/enemy/octorokBoss.o(.rodata); data/animations/enemy/octorokBoss.o(.rodata); - data/const/enemy/flyingPot.o(.rodata); + src/enemy/flyingPot.o(.rodata); src/enemy/gibdo.o(.rodata); data/animations/enemy/gibdo.o(.rodata); src/enemy/octorokGolden.o(.rodata); @@ -1329,6 +1329,7 @@ SECTIONS { src/flags.o(.rodata); src/save.o(.rodata); src/script.o(.rodata); + src/scroll.o(.rodata); data/data_0811E750.o(.rodata); data/const/object/itemOnGround.o(.rodata); src/object/deathFx.o(.rodata); @@ -1443,7 +1444,7 @@ SECTIONS { src/object/object53.o(.rodata); src/object/pullableLever.o(.rodata); data/animations/object/pullableLever.o(.rodata); - data/const/object/minecart.o(.rodata); + src/object/minecart.o(.rodata); data/animations/object/minecart.o(.rodata); data/const/object/thoughtBubble.o(.rodata); data/animations/object/thoughtBubble.o(.rodata); @@ -1458,7 +1459,7 @@ SECTIONS { src/object/houseDoorInterior.o(.rodata); src/object/whirlwind.o(.rodata); data/animations/object/whirlwind.o(.rodata); - data/const/object/objectBlockingStairs.o(.rodata); + src/object/objectBlockingStairs.o(.rodata); data/const/object/swordsmanNewsletter.o(.rodata); src/object/object61.o(.rodata); src/object/giantTwig.o(.rodata); @@ -1491,7 +1492,7 @@ SECTIONS { data/animations/object/pushableLever.o(.rodata); src/object/macroShoes.o(.rodata); src/object/objectOnSpinyBeetle.o(.rodata); - data/const/object/picoBloom.o(.rodata); + src/object/picoBloom.o(.rodata); data/animations/object/picoBloom.o(.rodata); src/object/board.o(.rodata); src/object/object81.o(.rodata); @@ -1508,7 +1509,7 @@ SECTIONS { src/object/octorokBossObject.o(.rodata); src/object/macroBook.o(.rodata); data/animations/object/macroBook.o(.rodata); - data/const/object/mazaalBossObject.o(.rodata); + src/object/mazaalBossObject.o(.rodata); src/object/cabinFurniture.o(.rodata); src/object/doubleBookshelf.o(.rodata); src/object/book.o(.rodata); @@ -1521,11 +1522,11 @@ SECTIONS { data/animations/object/bakerOven.o(.rodata); src/object/lamp.o(.rodata); data/animations/object/lamp.o(.rodata); - data/const/object/bird.o(.rodata); + src/object/bird.o(.rodata); data/animations/object/bird.o(.rodata); - data/const/object/object96.o(.rodata); + src/object/object96.o(.rodata); src/object/keyStealingTakkuri.o(.rodata); - data/const/object/object98.o(.rodata); + src/object/object98.o(.rodata); data/animations/object/object98.o(.rodata); src/object/macroAcorn.o(.rodata); src/object/object9B.o(.rodata); @@ -1541,15 +1542,15 @@ SECTIONS { data/animations/object/objectA2.o(.rodata); data/const/object/cloud.o(.rodata); data/const/object/minishLight.o(.rodata); - data/const/object/objectA6.o(.rodata); + src/object/objectA6.o(.rodata); data/animations/object/objectA6.o(.rodata); src/object/objectA8.o(.rodata); - data/const/object/objectA9.o(.rodata); + src/object/objectA9.o(.rodata); src/object/waterfallOpening.o(.rodata); - data/const/object/objectAB.o(.rodata); + src/object/objectAB.o(.rodata); data/animations/object/objectAB.o(.rodata); src/object/fourElements.o(.rodata); - data/const/object/objectAD.o(.rodata); + src/object/objectAD.o(.rodata); data/const/object/objectAF.o(.rodata); data/animations/object/objectAF.o(.rodata); data/const/object/metalDoor.o(.rodata); @@ -1558,11 +1559,11 @@ SECTIONS { data/animations/object/objectB2.o(.rodata); src/object/objectB3.o(.rodata); data/animations/object/objectB3.o(.rodata); - data/const/object/objectB4.o(.rodata); + src/object/objectB4.o(.rodata); data/animations/object/objectB4.o(.rodata); data/const/object/well.o(.rodata); src/object/windTribeTeleporter.o(.rodata); - data/const/object/objectB9.o(.rodata); + src/object/cuccoMinigame.o(.rodata); src/object/gyorgBossObject.o(.rodata); data/const/object/windcrest.o(.rodata); src/object/objectBD.o(.rodata); @@ -1577,6 +1578,7 @@ SECTIONS { #ifdef DEMO_USA data/const/demo.o(.rodata); #endif + src/staffroll.o(.rodata); data/data_08127280.o(.rodata); src/menu/kinstone_menu.o(.rodata); src/menu/figurine_menu.o(.rodata); diff --git a/src/affine.c b/src/affine.c index f0e2549b..00ee3c32 100644 --- a/src/affine.c +++ b/src/affine.c @@ -55,7 +55,7 @@ void CopyOAM(void) { void DrawEntities(void) { void (*fn)(void); - gOAMControls._0[6] = gRoomTransition.field_0x2c[3] ? 15 : 0; + gOAMControls._0[6] = gRoomTransition.field_0x2c[2] ? 15 : 0; gOAMControls._4 = gRoomControls.aff_x + gRoomControls.scroll_x; gOAMControls._6 = gRoomControls.aff_y + gRoomControls.scroll_y; gOAMControls.field_0x1++; diff --git a/src/code_08049CD4.c b/src/code_08049CD4.c index a773306d..c98323d1 100644 --- a/src/code_08049CD4.c +++ b/src/code_08049CD4.c @@ -1,25 +1,76 @@ +#define NENT_DEPRECATED #include "global.h" - -extern u32* gUnk_020354B0; -extern u32 gRoomMemory; +#include "room.h" extern void MemFill32(u32, void*, u32); +void sub_08049DCC(RoomMemory*); +RoomMemory* sub_08049D88(void); + void ClearRoomMemory(void) { - MemFill32(0xFFFFFFFF, &gRoomMemory, 0x40); - gUnk_020354B0 = &gRoomMemory; + MemFill32(0xFFFFFFFF, gRoomMemory, 0x40); + gUnk_020354B0 = gRoomMemory; } -void sub_08049CF4(u8* arg0) { - u8 field_0x6c = *(arg0 + 0x6c); +void sub_08049CF4(GenericEntity* ent) { + u8 field_0x6c = ent->field_0x6c.HALF.LO; if (field_0x6c & 0x80) { - *(gUnk_020354B0 + 1) |= 1 << (field_0x6c & 0x1f); + gUnk_020354B0->unk_04 |= 1 << (field_0x6c & 0x1f); } } u32 sub_08049D1C(u32 arg0) { - u32 bitmask = *(gUnk_020354B0 + 1) >> arg0; + u32 bitmask = gUnk_020354B0->unk_04 >> arg0; u32 output = 1; output &= ~bitmask; return output; } + +void UpdateRoomTracker(void) { + gUnk_020354B0 = gRoomMemory; + + do { + if (gUnk_020354B0->area == gRoomControls.area && gUnk_020354B0->room == gRoomControls.room) { + sub_08049DCC(gUnk_020354B0); + return; + } + gUnk_020354B0++; + + } while (gUnk_020354B0 < gRoomMemory + 8); + gUnk_020354B0 = sub_08049D88(); +} + +RoomMemory* sub_08049D88(void) { + RoomMemory* rm = gRoomMemory; + RoomMemory* r1 = rm + 1; + + do { + if (r1->unk_02 > rm->unk_02) { + rm = r1; + } + r1++; + } while (r1 < gRoomMemory + 8); + + rm->area = gRoomControls.area; + rm->room = gRoomControls.room; + + rm->unk_02 = 0xFFFF; + rm->unk_04 = 0; + + sub_08049DCC(rm); + + return rm; +} + +void sub_08049DCC(RoomMemory* rm) { + RoomMemory* r1 = gRoomMemory; + + do { + if (r1->unk_02 < rm->unk_02) { + r1->unk_02++; + } + r1++; + } while (r1 < gRoomMemory + 8); + + rm->unk_02 = 0; +} diff --git a/src/code_08049DF4.c b/src/code_08049DF4.c new file mode 100644 index 00000000..06b77524 --- /dev/null +++ b/src/code_08049DF4.c @@ -0,0 +1,324 @@ +#define NENT_DEPRECATED +#include "asm.h" +#include "global.h" +#include "entity.h" +#include "functions.h" +#include "map.h" +#include "player.h" +#include "room.h" + +extern Entity* gUnk_020000B0; +extern Entity* (*const gUnk_080D3BE8[])(void); + +extern void ReplaceMonitoredEntity(Entity*, Entity*); + +Entity* sub_08049DF4(u32 arg0) { + if (gUnk_020000B0 != NULL) { + return gUnk_020000B0; + } + return gUnk_080D3BE8[arg0](); +} + +Entity* sub_08049E18(void) { + if ((gPlayerState.field_0x3c[0] == 0) && !(gPlayerState.flags & 0x22189b75)) { + gUnk_020000B0 = &gPlayerEntity; + return &gPlayerEntity; + } + return NULL; +} + +Entity* sub_08049E4C(void) { + if ((gPlayerState.field_0x3c[0] == 0) && !(gPlayerState.flags & 0x22189bf5)) { + gUnk_020000B0 = &gPlayerEntity; + return &gPlayerEntity; + } + return NULL; +} + +Entity* sub_08049E80(void) { + if ((gPlayerState.field_0x3c[0] != 0) || !(gPlayerState.flags & 0x80)) { + return NULL; + } + gUnk_020000B0 = &gPlayerEntity; + return &gPlayerEntity; +} + +Entity* sub_08049EB0(void) { + if ((gPlayerState.field_0x3c[0] == 0) && !(gPlayerState.flags & 0x80190)) { + gUnk_020000B0 = &gPlayerEntity; + return &gPlayerEntity; + } + return NULL; +} + +u32 sub_08049EE4(Entity* ent) { + GenericEntity* genEnt = (GenericEntity*)ent; + u16 tempLO = genEnt->field_0x70.HALF.LO + 4 * genEnt->field_0x6e.HALF.LO; + u16 tempHI = genEnt->field_0x70.HALF.HI + 4 * genEnt->field_0x6e.HALF.HI; + + return CalculateDirectionTo(genEnt->base.x.HALF.HI, genEnt->base.y.HALF.HI, tempLO, tempHI); +} + +bool32 sub_08049F1C(Entity* entA, Entity* entB, s32 maxDist) { + if ((entA->collisionLayer & entB->collisionLayer) != 0) { + s32 xDiff = entB->x.HALF.HI - entA->x.HALF.HI; + s32 yDiff = entB->y.HALF.HI - entA->y.HALF.HI; + s32 maxDistSq = maxDist * maxDist; + s32 distSq = xDiff * xDiff + yDiff * yDiff; + + if (maxDistSq >= distSq) { + return TRUE; + } + } + return FALSE; +} + +bool32 PlayerInRange(Entity* ent, u32 arg1, s32 maxDist) { + Entity* tempEnt = sub_08049DF4(arg1); + if (tempEnt == NULL) { + return FALSE; + } else { + return sub_08049F1C(ent, tempEnt, maxDist); + } +} + +u32 sub_08049F84(Entity* ent, s32 arg2) { + Entity* target = sub_08049DF4(arg2); + + if (target == NULL) { + return 0xFF; + } else { + return GetFacingDirection(ent, target); + } +} + +bool32 sub_08049FA0(Entity* ent) { + GenericEntity* genEnt = (GenericEntity*)ent; + u32 temp = 8 * genEnt->field_0x6e.HALF.LO; + + if (temp >= genEnt->base.x.HALF.HI - genEnt->field_0x70.HALF_U.LO) { + temp = 8 * genEnt->field_0x6e.HALF.HI; + if (temp >= genEnt->base.y.HALF.HI - genEnt->field_0x70.HALF_U.HI) { + return TRUE; + } + } + return FALSE; +} + +bool32 sub_08049FDC(Entity* ent, u32 arg1) { + u32 temp; + GenericEntity* genEnt = (GenericEntity*)ent; + GenericEntity* tempEnt = (GenericEntity*)sub_08049DF4(arg1); + + if (tempEnt != NULL) { + temp = 8 * genEnt->field_0x6e.HALF.LO; + if (temp >= tempEnt->base.x.HALF.HI - genEnt->field_0x70.HALF_U.LO) { + temp = 8 * genEnt->field_0x6e.HALF.HI; + if (temp >= tempEnt->base.y.HALF.HI - genEnt->field_0x70.HALF_U.HI) { + return TRUE; + } + } + } + return FALSE; +} + +u32 sub_0804A024(Entity* ent, u32 arg1, u32 arg2) { + Entity* tempEnt = sub_08049DF4(arg1); + if (tempEnt == NULL) { + return 0xFF; + } else { + return sub_0804A044(ent, tempEnt, arg2); + } +} + +u32 sub_0804A168(Entity*, Entity*, LayerStruct*); +u32 sub_0804A318(Entity*, Entity*, LayerStruct*); + +u32 sub_0804A044(Entity* entA, Entity* entB, u32 arg2) { + LayerStruct* layer; + s32 ret; + s32 yDiff; + s32 xDiff; + s32 flags; + + if ((entB->collisionLayer & entA->collisionLayer) != 0) { + flags = 0; + xDiff = entB->x.HALF.HI + entB->hitbox->offset_x - entA->x.HALF.HI - entA->hitbox->offset_x; + + if (arg2 >= xDiff + (arg2 >> 1)) { + flags |= 1; + } + if (arg2 << 1 >= xDiff + arg2) { + flags |= 2; + } + + yDiff = entB->y.HALF.HI + entB->hitbox->offset_y - entA->y.HALF.HI - entA->hitbox->offset_y; + if (arg2 >= yDiff + (arg2 >> 1)) { + flags |= 4; + } + if (arg2 << 1 >= yDiff + arg2) { + flags |= 8; + } + + //! @bug flags & 5 can never equal 0xA + if (flags && ((flags & 5) != 0xA)) { + layer = GetLayerByIndex(entA->collisionLayer); + if (xDiff < 0) { + xDiff = -xDiff; + } + if (yDiff < 0) { + yDiff = -yDiff; + } + if (xDiff < yDiff) { + if (flags & 1) { + ret = sub_0804A168(entA, entB, layer); + if (ret != 0xFF) { + return ret; + } + } + if (!(flags & 4)) { + return 0xFF; + } + ret = sub_0804A318(entA, entB, layer); + } else { + if (flags & 4) { + ret = sub_0804A318(entA, entB, layer); + if (ret != 0xFF) { + return ret; + } + } + if (!(flags & 1)) { + return 0xFF; + } + ret = sub_0804A168(entA, entB, layer); + } + if (ret != 0xFF) { + return ret; + } + } + } + return 0xFF; +} + +bool32 sub_0804A4BC(u8* arg0, u8* arg1, s32 arg2, u32 arg3); + +u32 sub_0804A168(Entity* entA, Entity* entB, LayerStruct* layer) { + u32 uVar2; + u32 uVar3; + u32 tile1; + u32 tile2; + + if (entB->y.HALF.HI > entA->y.HALF.HI) { + uVar2 = entA->x.HALF.HI - 4; + uVar3 = ((uVar2 & 0xF) < 8) ? 10 : 5; + tile1 = TILE(uVar2, entA->y.HALF.HI + 10); + tile2 = TILE(uVar2, entB->y.HALF.HI); + + if (sub_0804A4BC(&layer->collisionData[tile1], &layer->collisionData[tile2], 0x40, uVar3)) { + uVar2 = entA->x.HALF.HI + 4; + uVar3 ^= 0xF; + tile1 = TILE(uVar2, entA->y.HALF.HI + 10); + tile2 = TILE(uVar2, entB->y.HALF.HI); + + if (sub_0804A4BC(&layer->collisionData[tile1], &layer->collisionData[tile2], 0x40, uVar3)) { + return 0x10; + } + } + } else { + uVar2 = entA->x.HALF.HI - 4; + uVar3 = ((uVar2 & 0xF) < 8) ? 10 : 5; + tile1 = TILE(uVar2, entA->y.HALF.HI - 10); + tile2 = TILE(uVar2, entB->y.HALF.HI); + + if (sub_0804A4BC(&layer->collisionData[tile1], &layer->collisionData[tile2], -0x40, uVar3)) { + uVar2 = entA->x.HALF.HI + 4; + uVar3 ^= 0xF; + tile1 = TILE(uVar2, entA->y.HALF.HI - 10); + tile2 = TILE(uVar2, entB->y.HALF.HI); + + if (sub_0804A4BC(&layer->collisionData[tile1], &layer->collisionData[tile2], -0x40, uVar3)) { + return 0; + } + } + } + return 0xFF; +} + +u32 sub_0804A318(Entity* entA, Entity* entB, LayerStruct* layer) { + u32 uVar2; + u32 uVar3; + u32 tile1; + u32 tile2; + + if (entB->x.HALF.HI > entA->x.HALF.HI) { + uVar2 = entA->y.HALF.HI - 4; + uVar3 = ((uVar2 & 0xF) < 8) ? 0xC : 3; + tile1 = TILE(entA->x.HALF.HI + 10, uVar2); + tile2 = TILE(entB->x.HALF.HI, uVar2); + + if (sub_0804A4BC(&layer->collisionData[tile1], &layer->collisionData[tile2], 1, uVar3)) { + uVar2 = entA->y.HALF.HI + 4; + uVar3 ^= 0xF; + tile1 = TILE(entA->x.HALF.HI + 10, uVar2); + tile2 = TILE(entB->x.HALF.HI, uVar2); + + if (sub_0804A4BC(&layer->collisionData[tile1], &layer->collisionData[tile2], 1, uVar3)) { + return 8; + } + } + } else { + uVar2 = entA->y.HALF.HI - 4; + uVar3 = ((uVar2 & 0xF) < 8) ? 0xC : 3; + tile1 = TILE(entA->x.HALF.HI - 10, uVar2); + tile2 = TILE(entB->x.HALF.HI, uVar2); + + if (sub_0804A4BC(&layer->collisionData[tile1], &layer->collisionData[tile2], -1, uVar3)) { + uVar2 = entA->y.HALF.HI + 4; + uVar3 ^= 0xF; + tile1 = TILE(entA->x.HALF.HI - 10, uVar2); + tile2 = TILE(entB->x.HALF.HI, uVar2); + if (sub_0804A4BC(&layer->collisionData[tile1], &layer->collisionData[tile2], -1, uVar3)) { + return 0x18; + } + } + } + return 0xFF; +} + +bool32 sub_0804A4BC(u8* arg0, u8* arg1, s32 arg2, u32 arg3) { + while (arg0 != arg1) { + u8 r0 = *arg0; + + if (r0 != 0) { + if (r0 > 0xF) { + return FALSE; + } + + r0 &= arg3; + if (r0 != 0) { + return FALSE; + } + } + arg0 += arg2; + } + + return TRUE; +} + +void sub_0804A4E4(Entity* entA, Entity* entB) { + GenericEntity* r5 = (GenericEntity*)entA; + GenericEntity* r6 = (GenericEntity*)entB; + + r6->field_0x6c.HALF.HI = (r5->field_0x6c.HALF.HI & 0x40) | 4; + r6->field_0x6c.HALF.LO = r5->field_0x6c.HALF.LO; + r6->field_0x70.HALF.LO = r5->field_0x70.HALF.LO; + r6->field_0x70.HALF.HI = r5->field_0x70.HALF.HI; + r6->field_0x6e.HALF.LO = r5->field_0x6e.HALF.LO; + r6->field_0x6e.HALF.HI = r5->field_0x6e.HALF.HI; + + CopyPositionAndSpriteOffset(&r5->base, &r6->base); + + if (r5->field_0x6c.HALF.HI & 0x40) { + ReplaceMonitoredEntity(&r5->base, &r6->base); + } +} diff --git a/src/code_0805EC04.c b/src/code_0805EC04.c index 37996780..42f1403a 100644 --- a/src/code_0805EC04.c +++ b/src/code_0805EC04.c @@ -32,7 +32,7 @@ void sub_0805EC60(Entity* this) { } } -ASM_FUNC("asm/non_matching/sub_0805EC9C.inc", bool32 sub_0805EC9C(Entity* ent, u32 param_2, u32 param_3, u32 param_4)) +ASM_FUNC("asm/non_matching/SetAffineInfo.inc", bool32 SetAffineInfo(Entity* ent, u32 param_2, u32 param_3, u32 param_4)) void sub_0805ECEC(int param_1, u32 param_2, u32 param_3, u32 param_4) { u16* temp; @@ -45,46 +45,46 @@ void sub_0805ECEC(int param_1, u32 param_2, u32 param_3, u32 param_4) { temp[2] = param_4; } -void sub_0805ED14(u32 param_1) { +void InitPlayerMacro(u32 param_1) { gPlayerState.field_0x9c = param_1; gPlayerState.field_0x98 = 0; gPlayerState.field_0x9a = 0; } -ASM_FUNC("asm/non_matching/code_0805EC04/sub_0805ED30.inc", void sub_0805ED30()) +ASM_FUNC("asm/non_matching/code_0805EC04/UpdatePlayerInput.inc", void UpdatePlayerInput()) -u32 sub_0805EE04(u32 param_1) { - u32 result = (s32) - (param_1 & 0x200) >> 0x1f & 0x1000; - if ((param_1 & 0x100) != 0) { +u32 ConvInputToState(u32 keys) { + u32 result = (s32) - (keys & 0x200) >> 0x1f & 0x1000; + if (keys & R_BUTTON) { result |= 0x20; result |= 0x8000; result |= 0x80; } - if ((param_1 & 1) != 0) { + if (keys & A_BUTTON) { result |= 0x8; result |= 0x41; } - if ((param_1 & 2) != 0) { + if (keys & B_BUTTON) { result |= 0x10; result |= 0x2; } - if ((param_1 & 0x10) != 0) { + if (keys & DPAD_RIGHT) { result |= 0x100; } - if ((param_1 & 0x20) != 0) { + if (keys & DPAD_LEFT) { result |= 0x200; } - if ((param_1 & 0x40) != 0) { + if (keys & DPAD_UP) { result |= 0x400; } - if ((param_1 & 0x80) != 0) { + if (keys & DPAD_DOWN) { result |= 0x800; } return result; } void sub_0805EE88(void) { - if ((gRoomTransition.field_0x2c[3] != 0) && ((gRoomTransition.frameCount & 3) == 0)) { + if ((gRoomTransition.field_0x2c[2] != 0) && ((gRoomTransition.frameCount & 3) == 0)) { LoadPaletteGroup((((u32)gRoomTransition.frameCount & 0xc) >> 2) + 0x2f); } } diff --git a/src/collision.c b/src/collision.c index 9832b61c..52bd8d27 100644 --- a/src/collision.c +++ b/src/collision.c @@ -370,7 +370,7 @@ s32 sub_08017B1C(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) s32 sub_08017B58(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) { if ((tgt->field_0x3a & 4) != 0) { if (tgt->field_0x1d) { - s32 x = tgt->field_0x1d = tgt->field_0x1d - gPlayerState.field_0x1d; + s32 x = tgt->field_0x1d = tgt->field_0x1d - gPlayerState.gustJarSpeed; if (x << 24 <= 0) { tgt->field_0x1d = 0; tgt->subAction = 2; diff --git a/src/color.c b/src/color.c index 6e243a88..301e5613 100644 --- a/src/color.c +++ b/src/color.c @@ -47,7 +47,7 @@ void sub_0801D000(u32 a1) { tmp = 0; } - roomTransition->field_0x2c[3] = tmp; + roomTransition->field_0x2c[2] = tmp; if (a1) { CleanUpObjPalettes(); sub_0801CFD0(0xf); diff --git a/src/coord.c b/src/coord.c index 61cfb199..98f3f65e 100644 --- a/src/coord.c +++ b/src/coord.c @@ -1,6 +1,8 @@ +#define NENT_DEPRECATED #include "asm.h" #include "area.h" #include "player.h" +#include "new_player.h" #include "coord.h" #include "common.h" #include "sound.h" @@ -20,7 +22,6 @@ extern const u16 gUnk_080047F6[]; u32 sub_0806F58C(Entity*, Entity*); u32 sub_0806FCA0(Entity*, Entity*); -void UnloadHitbox(Entity*); extern u32 sub_08007DD6(u32, const u16*); u32 PointInsideRadius(s32 x, s32 y, s32 radius); extern void sub_0806FEE8(struct_gUnk_020000C0_1*, u32, u32, u32); @@ -39,7 +40,7 @@ void sub_0806F38C(void) { u32 sub_0806F39C(Entity* ent) { s32 dist; - if (gPlayerEntity.animationState & 2) { + if (gNewPlayerEntity.base.animationState & 2) { dist = ent->x.HALF.HI - gPlayerEntity.x.HALF.HI; } else { dist = ent->y.HALF.HI - gPlayerEntity.y.HALF.HI; @@ -56,12 +57,12 @@ u32 sub_0806F39C(Entity* ent) { } bool32 sub_0806F3E4(Entity* ent) { - Entity tmp_ent; + GenericEntity tmp_ent; s8* p; if ((gPlayerState.field_0x1c & 0x7F) != 1) return 0; - switch (gPlayerState.field_0x1d) { + switch (gPlayerState.gustJarSpeed) { case 1: ent->knockbackSpeed += 64; break; @@ -75,15 +76,15 @@ bool32 sub_0806F3E4(Entity* ent) { if (ent->knockbackSpeed > 0x500) ent->knockbackSpeed = 0x500; p = &gUnk_08126EE4[gPlayerEntity.animationState & 0xE]; - tmp_ent.x.HALF.HI = p[0] + gPlayerEntity.x.HALF.HI; - tmp_ent.y.HALF.HI = p[1] + gPlayerEntity.y.HALF.HI; - LinearMoveDirection(ent, ent->knockbackSpeed, GetFacingDirection(ent, &tmp_ent)); - if (sub_0800419C(&tmp_ent, ent, 4, 4)) { + tmp_ent.base.x.HALF.HI = p[0] + gPlayerEntity.x.HALF.HI; + tmp_ent.base.y.HALF.HI = p[1] + gPlayerEntity.y.HALF.HI; + LinearMoveDirection(ent, ent->knockbackSpeed, GetFacingDirection(ent, &tmp_ent.base)); + if (sub_0800419C(&tmp_ent.base, ent, 4, 4)) { u32 state = ent->field_0x1c & 0xF; if (state == 2) { Entity* item; ent->subAction = 3; - (Entity*)gPlayerEntity.field_0x70.WORD = ent; + gNewPlayerEntity.unk_70 = ent; gPlayerState.field_0x1c = 7; item = CreatePlayerItem(0x11, 0, 0, 0); if (item != NULL) { @@ -117,7 +118,7 @@ void sub_0806F4E8(Entity* ent) { } } -u32 sub_0806F520(Entity* ent) { +bool32 sub_0806F520(Entity* ent) { if (ent->bitfield == 0x93) return 1; ent->field_0x3a &= ~4; @@ -329,46 +330,46 @@ void sub_0806FA90(Entity* source, Entity* target, s32 offsetX, s32 offsetY) { PositionRelative(source, target, Q_16_16(offsetX), Q_16_16(offsetY)); } -void SortEntityAbove(Entity* param_1, Entity* param_2) { - param_2->spritePriority.b0 = gSpriteSortAboveTable[param_1->spritePriority.b0]; +void SortEntityAbove(Entity* below_ent, Entity* above_ent) { + above_ent->spritePriority.b0 = gSpriteSortAboveTable[below_ent->spritePriority.b0]; } -void SortEntityBelow(Entity* param_1, Entity* param_2) { - param_2->spritePriority.b0 = gSpriteSortBelowTable[param_1->spritePriority.b0]; +void SortEntityBelow(Entity* above_ent, Entity* below_ent) { + below_ent->spritePriority.b0 = gSpriteSortBelowTable[above_ent->spritePriority.b0]; } -void sub_0806FB00(Entity* ent, u32 param_1, u32 param_2, u32 param_3) { +void sub_0806FB00(GenericEntity* ent, u32 param_1, u32 param_2, u32 param_3) { if (param_3 == 0) { param_3 = 1; } ent->field_0x7c.BYTES.byte2 = 0; ent->field_0x7c.BYTES.byte3 = param_3; - ent->field_0x80.HWORD = ent->x.HALF.HI; - ent->field_0x82.HWORD = ent->y.HALF.HI; + ent->field_0x80.HWORD = ent->base.x.HALF.HI; + ent->field_0x82.HWORD = ent->base.y.HALF.HI; ent->cutsceneBeh.HWORD = param_1; ent->field_0x86.HWORD = param_2; } -bool32 sub_0806FB38(Entity* ent) { +bool32 sub_0806FB38(GenericEntity* ent) { s32 val; u32 rv; if (ent->field_0x7c.BYTES.byte2 < ent->field_0x7c.BYTES.byte3) { ent->field_0x7c.BYTES.byte2++; - ent->x.HALF.HI = + ent->base.x.HALF.HI = ((((((s16)ent->cutsceneBeh.HWORD - (s16)ent->field_0x80.HWORD) * ent->field_0x7c.BYTES.byte2) << 8) / ent->field_0x7c.BYTES.byte3) >> 8) + ent->field_0x80.HWORD; - ent->y.HALF.HI = + ent->base.y.HALF.HI = (((((((s16)ent->field_0x86.HWORD - (s16)ent->field_0x82.HWORD) * ent->field_0x7c.BYTES.byte2) << 8) / ent->field_0x7c.BYTES.byte3) >> 8)) + ent->field_0x82.HWORD; rv = 0; } else { - ent->x.HALF.HI = ent->cutsceneBeh.HWORD; - ent->y.HALF.HI = ent->field_0x86.HWORD; + ent->base.x.HALF.HI = ent->cutsceneBeh.HWORD; + ent->base.y.HALF.HI = ent->field_0x86.HWORD; rv = 1; } return rv; @@ -380,9 +381,10 @@ void sub_0806FBB4(Entity* ent) { } } -void AllocMutableHitbox(Entity* ent) { +void* AllocMutableHitbox(Entity* ent) { UnloadHitbox(ent); ent->hitbox = zMalloc(sizeof(Hitbox3D)); + return ent->hitbox; } void UnloadHitbox(Entity* ent) { @@ -538,7 +540,7 @@ u32 LoadExtraSpriteData(Entity* ent, const SpriteLoadData* data) { return 1; } -void sub_0806FE84(Entity* ent) { +void UnloadOBJPalette2(Entity* ent) { u32 index; u32 spriteAnimation = ent->spriteAnimation[2]; ent->spriteAnimation[2] = 0; diff --git a/src/demo.c b/src/demo.c index 04d7baff..9b7b4356 100644 --- a/src/demo.c +++ b/src/demo.c @@ -216,7 +216,7 @@ void sub_080A3198(u32 param_1, u32 param_2) { MemClear(gUnk_08127C98 - 0x1e, 0x180); if (r4 != 0) { - sub_0805F46C(r4, &gUnk_08127C98); + sub_0805F46C(r4, (Font*)&gUnk_08127C98); // TODO } gScreen.bg0.updated = 1; diff --git a/src/enemy/acroBandits.c b/src/enemy/acroBandits.c index 0edf6d34..34d0ea7c 100644 --- a/src/enemy/acroBandits.c +++ b/src/enemy/acroBandits.c @@ -155,7 +155,7 @@ void sub_08031B48(Entity* this) { this->frame = 0; COLLISION_ON(this); } else { - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 0x3; this->actionDelay = gUnk_080CE5B0[Random() & 7]; InitializeAnimation(this, 1); @@ -188,7 +188,7 @@ void sub_08031B98(Entity* this) { void sub_08031C1C(Entity* this) { GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = '\x01'; this->actionDelay = gUnk_080CE5B8[Random() & 7]; this->spriteSettings.draw = 0; @@ -199,7 +199,7 @@ void sub_08031C58(Entity* this) { Entity *a, *b; GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { if (gEntCount < 0x43) { u32 tmp = Random(); tmp &= 3; @@ -274,7 +274,7 @@ void sub_08031DA0(Entity* this) { } void sub_08031DC4(Entity* this) { - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 1; this->actionDelay = 0xb4; this->spriteSettings.draw = 0; @@ -360,7 +360,7 @@ void sub_08031F54(Entity* this) { void sub_08031FB0(Entity* this) { GetNextFrame(this); - if ((this->frame & 0x80) && (this->parent || --this->actionDelay == 0)) { + if ((this->frame & ANIM_DONE) && (this->parent || --this->actionDelay == 0)) { this->action = 4; this->direction = sub_08049F84(this, 1); *(u8*)&this->field_0x76 = 0; @@ -469,7 +469,7 @@ void sub_08032204(Entity* this) { this->frame = 0; this->frameDuration = (Random() & 0x30) + 30; } else { - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 9; InitializeAnimation(this, 13); } @@ -478,7 +478,7 @@ void sub_08032204(Entity* this) { void sub_08032248(Entity* this) { if (GravityUpdate(this, Q_8_8(24.0)) == 0) { - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { ((Entity*)this->field_0x7c.WORD)->actionDelay--; DeleteEntity(this); diff --git a/src/enemy/armos.c b/src/enemy/armos.c index 829e195d..09c732e7 100644 --- a/src/enemy/armos.c +++ b/src/enemy/armos.c @@ -113,7 +113,7 @@ void sub_080301D4(ArmosEntity* this) { void sub_08030240(ArmosEntity* this) { if (super->animIndex == 6) { - if ((super->frame & 0x80) == 0) { + if ((super->frame & ANIM_DONE) == 0) { GetNextFrame(super); } } @@ -188,8 +188,8 @@ void sub_08030338(ArmosEntity* this) { EnqueueSFX(SFX_12A); return; } - bVar2 = super->frame & 0x80; - if ((super->frame & 0x80) != 0) { + bVar2 = super->frame & ANIM_DONE; + if ((super->frame & ANIM_DONE) != 0) { if (this->unk_80 != 2) { super->action = 3; super->animationState = 0xff; @@ -244,7 +244,7 @@ NONMATCH("asm/non_matching/armos/sub_080304BC.inc", void sub_080304BC(ArmosEntit u32 tmp; sub_080309A8(this); - tmp = super->frame & 0x80; + tmp = super->frame & ANIM_DONE; if (tmp != 0) { sub_08030580(this); } else { @@ -267,7 +267,7 @@ void sub_080304F4(ArmosEntity* this) { } void sub_08030524(ArmosEntity* this) { - if ((super->frame & 0x80) == 0) { + if ((super->frame & ANIM_DONE) == 0) { sub_080309A8(this); } else if (super->frame == 1) { super->frame = 0; @@ -277,7 +277,7 @@ void sub_08030524(ArmosEntity* this) { void sub_08030554(ArmosEntity* this) { sub_080309A8(this); - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { super->action = 3; sub_080309C8(this, (u32)super->animationState); sub_080306C4(this); @@ -306,12 +306,12 @@ bool32 sub_08030650(ArmosEntity* this) { return 1; } } else if (this->unk_80 != 2) { - if ((sub_08049FDC(super, 1) == 0) || (0x20 < (gUnk_020000B0->x.HALF.HI - super->x.HALF.HI) + 0x10U)) { + if (!sub_08049FDC(super, 1) || (0x20 < (gUnk_020000B0->x.HALF.HI - super->x.HALF.HI) + 0x10U)) { return FALSE; } return TRUE; } else { - if (sub_08049FDC(super, 1) == 0) { + if (!sub_08049FDC(super, 1)) { return FALSE; } if (gUnk_020000B0->x.HALF.HI >= (s32)(gRoomControls.origin_x + 0xa8)) { diff --git a/src/enemy/ballChainSoldier.c b/src/enemy/ballChainSoldier.c index f29df68c..9e1ef699 100644 --- a/src/enemy/ballChainSoldier.c +++ b/src/enemy/ballChainSoldier.c @@ -150,7 +150,7 @@ void sub_0803E71C(BallChainSoldierEntity* this) { } void sub_0803E75C(BallChainSoldierEntity* this) { - if ((super->frame & 0x80) == 0) { + if ((super->frame & ANIM_DONE) == 0) { UpdateAnimationSingleFrame(super); } else { if (--super->actionDelay == 0) { diff --git a/src/enemy/beetle.c b/src/enemy/beetle.c index 207cf1c7..25e104c8 100644 --- a/src/enemy/beetle.c +++ b/src/enemy/beetle.c @@ -117,7 +117,7 @@ void sub_080218CC(Entity* this) { this->frameDuration = 1; } - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 2; this->actionDelay = (Random() & 0x38) + 8; this->field_0xf = 1; @@ -209,7 +209,7 @@ void sub_08021AD8(Entity* this) { this->frameDuration = 1; } - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 2; this->actionDelay = 20; ((u8*)&this->field_0x86)[0] = 60; @@ -268,7 +268,7 @@ void sub_08021C58(Entity* this) { this->frameDuration = 1; } - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 2; this->actionDelay = 60; this->field_0xf = 1; @@ -280,7 +280,7 @@ void sub_08021C58(Entity* this) { } void sub_08021CD0(Entity* this) { - if ((this->frame & 0x80) == 0) + if ((this->frame & ANIM_DONE) == 0) GetNextFrame(this); if (sub_08049F84(this, 1) == 0xff) diff --git a/src/enemy/bobomb.c b/src/enemy/bobomb.c index 42c3d2b1..7e214b63 100644 --- a/src/enemy/bobomb.c +++ b/src/enemy/bobomb.c @@ -245,7 +245,7 @@ void sub_0802CAF8(Entity* this) { EnqueueSFX(SFX_104); } sub_0802CC18(this); - sub_08078930(this); + RegisterCarryEntity(this); if (this->field_0xf && this->z.HALF.HI == 0) { this->field_0xf = 0; COLLISION_ON(this); @@ -286,7 +286,7 @@ void sub_0802CBC4(Entity* this) { if (this->field_0x82.HALF.HI) { sub_08079184(); } - sub_08078954(this); + FreeCarryEntity(this); ent = CreateObjectWithParent(this, OBJECT_20, 0, 0); if (ent) { diff --git a/src/enemy/bombPeahat.c b/src/enemy/bombPeahat.c index 5a1a80f3..5c327b91 100644 --- a/src/enemy/bombPeahat.c +++ b/src/enemy/bombPeahat.c @@ -289,7 +289,7 @@ void sub_0802AB40(Entity* this) { #endif void sub_0802AC08(Entity* this) { - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 2; this->subAction = 0; this->actionDelay = 0x40; @@ -470,7 +470,7 @@ void sub_0802AED4(Entity* this) { } } else { if (!sub_0800442E(this)) { - sub_08078930(this); + RegisterCarryEntity(this); } } if (this->type2 != 0 && this->field_0x80.HALF.HI) { @@ -535,7 +535,7 @@ NONMATCH("asm/non_matching/bombPeahat/sub_0802AFC8.inc", void sub_0802AFC8(Entit this->field_0x82.HWORD ^= 0x8000; } tmp = 0x130 - (this->field_0x82.HWORD & 0xf0); - sub_0805EC9C(this, tmp, tmp, 0); + SetAffineInfo(this, tmp, tmp, 0); } if (this->field_0xf & flag) { this->palette.b.b0 = this->palette.b.b4; @@ -572,7 +572,7 @@ void sub_0802B048(Entity* this) { this->field_0xf = 0x50; this->field_0x82.HWORD = 0; this->spriteRendering.b0 = 3; - sub_0805EC9C(this, 0x100, 0x100, 0); + SetAffineInfo(this, 0x100, 0x100, 0); } } else { if (this->field_0xf) { @@ -587,7 +587,7 @@ void sub_0802B048(Entity* this) { this->spriteSettings.draw = 0; COLLISION_ON(this); this->field_0x7a.HALF.HI = 0; - sub_08078954(this); + FreeCarryEntity(this); if (this->parent->next) { this->parent->field_0x80.HALF.HI = 0; } diff --git a/src/enemy/businessScrub.c b/src/enemy/businessScrub.c index 6c71441d..45cf55b8 100644 --- a/src/enemy/businessScrub.c +++ b/src/enemy/businessScrub.c @@ -112,7 +112,7 @@ void sub_08028A74(Entity* this) { switch (this->subAction) { case 0: unk = 1; - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->subAction = 1; this->actionDelay = 0x3c; this->field_0xf = 0x10; @@ -150,7 +150,7 @@ void sub_08028A74(Entity* this) { break; case 3: unk = 2; - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->subAction = 4; this->actionDelay = 0x50; sub_080290E0(this, 1); @@ -189,7 +189,7 @@ void sub_08028BC4(Entity* this) { switch (this->subAction) { case 0: if (this->actionDelay == 0) { - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->subAction = 1; sub_08028FDC(this); sub_080290E0(this, 5); @@ -200,7 +200,7 @@ void sub_08028BC4(Entity* this) { } break; case 1: - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 4; this->subAction = 0; this->actionDelay = 0x1e; @@ -384,7 +384,7 @@ void sub_08028F0C(Entity* this) { SetPlayerControl(1); } MessageFromTarget(dialog); - gMessage.field_0x10 = offer->price; + gMessage.rupees = offer->price; } } diff --git a/src/enemy/businessScrubPrologue.c b/src/enemy/businessScrubPrologue.c index 036c4e19..f87040f3 100644 --- a/src/enemy/businessScrubPrologue.c +++ b/src/enemy/businessScrubPrologue.c @@ -100,7 +100,7 @@ void sub_08045CE0(BusinessScrubPrologueEntity* this) { switch (super->subAction) { case 0: r6 = 1; - if (super->frame & 0x80) { + if (super->frame & ANIM_DONE) { super->subAction = 1; super->actionDelay = 0x3c; super->field_0xf = 0x10; @@ -133,7 +133,7 @@ void sub_08045CE0(BusinessScrubPrologueEntity* this) { break; case 3: r6 = 2; - if (super->frame & 0x80) { + if (super->frame & ANIM_DONE) { super->subAction = 4; super->actionDelay = 0x50; sub_08046030(this, 1); @@ -170,7 +170,7 @@ void sub_08045E14(BusinessScrubPrologueEntity* this) { switch (super->subAction) { case 0: if (super->actionDelay == 0) { - if (super->frame & 0x80) { + if (super->frame & ANIM_DONE) { super->subAction = 1; sub_08045F98(this); sub_08046030(this, 5); @@ -181,7 +181,7 @@ void sub_08045E14(BusinessScrubPrologueEntity* this) { } break; case 1: - if (super->frame & 0x80) { + if (super->frame & ANIM_DONE) { super->action = 5; super->subAction = 0; sub_08046030(this, 0); @@ -222,7 +222,7 @@ void sub_08045EDC(BusinessScrubPrologueEntity* this) { super->frame &= 0xfe; sub_080954AC(super, this->unk_84); EnqueueSFX(SFX_18D); - } else if (super->frame & 0x80) { + } else if (super->frame & ANIM_DONE) { super->action = 5; super->subAction = 0; sub_08046030(this, 1); diff --git a/src/enemy/chaser.c b/src/enemy/chaser.c index 16a61b2a..24dca7cf 100644 --- a/src/enemy/chaser.c +++ b/src/enemy/chaser.c @@ -64,7 +64,7 @@ void sub_0802B56C(Entity* this) { void sub_0802B5C8(Entity* this) { GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 1; this->actionDelay = 30; InitializeAnimation(this, 0); diff --git a/src/enemy/chuchu.c b/src/enemy/chuchu.c index 8521f64b..34094ef5 100644 --- a/src/enemy/chuchu.c +++ b/src/enemy/chuchu.c @@ -123,7 +123,7 @@ void Chuchu_OnCollision(Entity* this) { } void Chuchu_OnGrabbed(Entity* this) { - if (sub_0806F520(this) == 0 && this->confusedTime) { + if (!sub_0806F520(this) && this->confusedTime) { Create0x68FX(this, FX_STARS); InitializeAnimation(this, 6); } else { @@ -155,7 +155,7 @@ void Chuchu_OnDeath(Entity* this) { } void Chuchu_OnConfused(Entity* this) { - if ((this->frame & 0x80) == 0) + if ((this->frame & ANIM_DONE) == 0) GetNextFrame(this); GenericConfused(this); } @@ -173,7 +173,7 @@ void nullsub_4(Entity* this) { void sub_0801F0C8(Entity* this) { GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 3; this->actionDelay = (Random() & 3) + 0xc; this->field_0xf = Random(); @@ -221,7 +221,7 @@ void sub_0801F1B0(Entity* this) { GetNextFrame(this); } - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { if (sub_0801FBD0(this)) { sub_0801F328(this); } else { @@ -240,7 +240,7 @@ void sub_0801F228(Entity* this) { void sub_0801F250(Entity* this) { GetNextFrame(this); - if (this->frame & 0x80) + if (this->frame & ANIM_DONE) sub_0801F360(this); } @@ -267,7 +267,7 @@ void sub_0801F270(Entity* this) { void sub_0801F2CC(Entity* this) { GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 1; this->spriteSettings.draw = 0; InitializeAnimation(this, 4); @@ -277,7 +277,7 @@ void sub_0801F2CC(Entity* this) { void sub_0801F2F8(Entity* this) { GravityUpdate(this, 0x1800); GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { sub_0801F340(this); sub_0804AA1C(this); } @@ -362,7 +362,7 @@ void sub_0801F48C(Entity* this) { void sub_0801F494(Entity* this) { GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 3; this->field_0xf = 30; this->direction = sub_08049F84(this, 1); @@ -418,7 +418,7 @@ void sub_0801F584(Entity* this) { GetNextFrame(this); } - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { if (sub_0801FBD0(this)) { this->field_0x82.HALF.HI = 0; sub_0801F730(this); @@ -440,7 +440,7 @@ void sub_0801F61C(Entity* this) { void sub_0801F638(Entity* this) { GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 8; this->field_0xf = 30; this->direction = sub_08049F84(this, 1); @@ -465,7 +465,7 @@ void sub_0801F688(Entity* this) { void sub_0801F6CC(Entity* this) { GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 1; this->spriteSettings.draw = 0; InitializeAnimation(this, 4); @@ -475,7 +475,7 @@ void sub_0801F6CC(Entity* this) { void sub_0801F6F8(Entity* this) { GravityUpdate(this, 0x1800); GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 4; this->speed = 0x20; sub_0804AA1C(this); @@ -538,7 +538,7 @@ void sub_0801F7FC(Entity* this) { void sub_0801F840(Entity* this) { GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { sub_0801FB14(this); COLLISION_ON(this); this->spritePriority.b0 = 4; @@ -594,7 +594,7 @@ void sub_0801F940(Entity* this) { GetNextFrame(this); } - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { if (sub_0801FBD0(this)) { sub_0801FAE0(this); } else { @@ -614,7 +614,7 @@ void sub_0801F9C4(Entity* this) { void sub_0801F9E0(Entity* this) { GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 8; this->field_0xf = 30; this->direction = sub_08049F84(this, 1); @@ -639,7 +639,7 @@ void sub_0801FA30(Entity* this) { void sub_0801FA78(Entity* this) { GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 1; this->spriteSettings.draw = 0; InitializeAnimation(this, 4); @@ -650,7 +650,7 @@ void sub_0801FA78(Entity* this) { void sub_0801FAAC(Entity* this) { GravityUpdate(this, 0x1800); GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { sub_0801FB14(this); this->speed = 0x20; sub_0804AA1C(this); @@ -705,7 +705,7 @@ void sub_0801FB68(Entity* this) { } u32 sub_0801FBD0(Entity* this) { - if (sub_080B1AA8(this) == 0x10) { + if (GetTileUnderEntity(this) == 0x10) { return 1; } else { return 0; diff --git a/src/enemy/cuccoAggr.c b/src/enemy/cuccoAggr.c index 24c8555a..28b32be5 100644 --- a/src/enemy/cuccoAggr.c +++ b/src/enemy/cuccoAggr.c @@ -164,7 +164,7 @@ void sub_08038F20(CuccoAggrEntity* this) { sub_08039298(this); GetNextFrame(super); - if (super->frame & 0x80) { + if (super->frame & ANIM_DONE) { sub_0803901C(this); } } @@ -328,7 +328,7 @@ void CuccoAggr_CreateFx(CuccoAggrEntity* this) { void sub_08039298(CuccoAggrEntity* this) { if (super->type2 == 0) { - sub_08078930(super); + RegisterCarryEntity(super); } } diff --git a/src/enemy/curtain.c b/src/enemy/curtain.c index af8c22d0..0a0d342c 100644 --- a/src/enemy/curtain.c +++ b/src/enemy/curtain.c @@ -49,7 +49,7 @@ void sub_08048268(Entity* this) { } GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->actionDelay = 0; InitializeAnimation(this, 0); } @@ -58,7 +58,7 @@ void sub_08048268(Entity* this) { void sub_08048294(Entity* this) { GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 3; SetLocalFlag(0x72); InitializeAnimation(this, 1); diff --git a/src/enemy/darkNut.c b/src/enemy/darkNut.c index 6c1b0238..c3e84e19 100644 --- a/src/enemy/darkNut.c +++ b/src/enemy/darkNut.c @@ -141,7 +141,7 @@ void sub_08020D9C(Entity* this) { void sub_08020DB4(Entity* this) { UpdateAnimationSingleFrame(this); - if (this->frame & 0x80) + if (this->frame & ANIM_DONE) sub_08021390(this); } @@ -161,7 +161,7 @@ void sub_08020DD4(Entity* this) { void sub_08020E28(Entity* this) { UpdateAnimationSingleFrame(this); - if (this->frame & 0x80) + if (this->frame & ANIM_DONE) sub_080213B0(this); } @@ -170,14 +170,14 @@ void sub_08020E48(Entity* this) { sub_080213F0(this); } else { UpdateAnimationSingleFrame(this); - if (this->frame & 0x80) + if (this->frame & ANIM_DONE) sub_080213B0(this); } } void sub_08020E78(Entity* this) { UpdateAnimationSingleFrame(this); - if (this->frame & 0x80) + if (this->frame & ANIM_DONE) sub_08021390(this); } @@ -211,7 +211,7 @@ void sub_08020E98(Entity* this) { void sub_08020F28(Entity* this) { UpdateAnimationSingleFrame(this); - if (this->frame & 0x80) + if (this->frame & ANIM_DONE) sub_08021400(this); } @@ -241,7 +241,7 @@ void sub_08020F48(Entity* this) { } void sub_08020FAC(Entity* this) { - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { if (this->field_0x7a.HALF.LO) { this->field_0x7a.HALF.LO--; } else { @@ -264,7 +264,7 @@ void sub_08020FE4(Entity* this) { void sub_08021010(Entity* this) { UpdateAnimationSingleFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->hitType = 0x56; sub_080213F0(this); } @@ -280,7 +280,7 @@ void sub_08021038(Entity* this) { EnqueueSFX(SFX_10E); } - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { sub_08021588(this); if (this->field_0x7c.BYTES.byte0) { this->field_0x7c.BYTES.byte0--; @@ -300,7 +300,7 @@ void sub_080210A8(Entity* this) { this->frame = 0; sub_08021588(this); EnqueueSFX(SFX_15D); - } else if (this->frame & 0x80) { + } else if (this->frame & ANIM_DONE) { sub_08021390(this); } } @@ -330,7 +330,7 @@ void sub_080210E4(Entity* this) { } void sub_08021170(Entity* this) { - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { if (this->field_0x7a.HALF.HI) { this->field_0x7a.HALF.HI--; } else { @@ -346,7 +346,7 @@ void sub_080211A0(Entity* this) { sub_08021390(this); } else { UpdateAnimationSingleFrame(this); - if (this->frame & 0x80) + if (this->frame & ANIM_DONE) sub_080213B0(this); } } @@ -357,7 +357,7 @@ void sub_080211D0(Entity* this) UpdateAnimationSingleFrame(this); sub_0802159C(this); - if (this->frame & 0x80) + if (this->frame & ANIM_DONE) sub_08021390(this); } @@ -365,7 +365,7 @@ void sub_080211F4(Entity* this) { UpdateAnimationSingleFrame(this); sub_08021600(this); - if (this->frame & 0x80) + if (this->frame & ANIM_DONE) sub_08021390(this); } @@ -610,8 +610,6 @@ void sub_08021644(Entity* this) { } } -extern u32 sub_08049F1C(Entity*, Entity*, u32); - u32 sub_08021664(Entity* this, Entity* ent) { switch (this->animationState) { case 0: diff --git a/src/enemy/doorMimic.c b/src/enemy/doorMimic.c index f340affa..540ae972 100644 --- a/src/enemy/doorMimic.c +++ b/src/enemy/doorMimic.c @@ -75,7 +75,7 @@ void sub_080220D8(Entity* this) { void sub_080220F0(Entity* this) { GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { const PosOffset* off; u32 i; @@ -107,7 +107,7 @@ void sub_08022174(Entity* this) { void sub_08022198(Entity* this) { sub_0800445C(this); GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 1; this->actionDelay = 0x5a; } diff --git a/src/enemy/enemy4D.c b/src/enemy/enemy4D.c index e8165957..9c13ceaf 100644 --- a/src/enemy/enemy4D.c +++ b/src/enemy/enemy4D.c @@ -207,7 +207,7 @@ void Enemy4D_Action6(Enemy4DEntity* this) { } void Enemy4D_Action7(Enemy4DEntity* this) { - if ((super->frame & 0x80) == 0) { + if ((super->frame & ANIM_DONE) == 0) { UpdateAnimationSingleFrame(super); } else { if (--super->actionDelay == 0) { diff --git a/src/enemy/enemy50.c b/src/enemy/enemy50.c index 98f80480..40bd1fde 100644 --- a/src/enemy/enemy50.c +++ b/src/enemy/enemy50.c @@ -154,7 +154,7 @@ void sub_08040D30(Enemy50Entity* this) { } void sub_08040D90(Enemy50Entity* this) { - if (sub_0806F520()) { + if (sub_0806F520(super)) { Enemy50_SubActions[super->subAction](this); } else { sub_08041128(this); @@ -223,7 +223,7 @@ void Enemy50_Action2(Enemy50Entity* this) { void Enemy50_Action3(Enemy50Entity* this) { GetNextFrame(super); - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { super->flags |= 0x80; this->unk_7c = this->unk_80 * ((Random() & 0x30) + 0x3c) + 0x78; sub_08041128(this); @@ -292,7 +292,7 @@ void Enemy50_Action7(Enemy50Entity* this) { void Enemy50_Action8(Enemy50Entity* this) { sub_0803F738(this); GetNextFrame(super); - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { super->action = 9; this->unk_78 = 0; InitializeAnimation(super, 4); diff --git a/src/enemy/enemy64.c b/src/enemy/enemy64.c index 8fde9fbc..919a569b 100644 --- a/src/enemy/enemy64.c +++ b/src/enemy/enemy64.c @@ -54,7 +54,7 @@ void Enemy64(Enemy64Entity* this) { super->subAction = 0; } Enemy64_Actions[super->action](this); - sub_0805EC9C(super, 0xaa, 0xaa, this->unk_78); + SetAffineInfo(super, 0xaa, 0xaa, this->unk_78); super->animationState = -(this->unk_78 >> 8); sub_080499F0(this); this->unk_7d = super->spriteSettings.draw; diff --git a/src/enemy/enemyE.c b/src/enemy/enemyE.c index f0428d37..957c953b 100644 --- a/src/enemy/enemyE.c +++ b/src/enemy/enemyE.c @@ -54,7 +54,7 @@ void sub_08023000(Entity* this, int frames) { tmp *= -1; this->spriteRendering.b0 = 3; - sub_0805EC9C(this, tmp, 0x80, 0); + SetAffineInfo(this, tmp, 0x80, 0); } // clang-format off diff --git a/src/enemy/eyegore.c b/src/enemy/eyegore.c index 26b22f65..aae204a2 100644 --- a/src/enemy/eyegore.c +++ b/src/enemy/eyegore.c @@ -196,7 +196,7 @@ void Eyegore_Action3(EyegoreEntity* this) { super->spriteOffsetX = gUnk_080CE2BC[--super->actionDelay & 3]; } else { GetNextFrame(super); - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { super->flags |= ENT_COLLIDE; super->animationState = 2; sub_08030E58(this); @@ -214,7 +214,7 @@ void Eyegore_Action4(EyegoreEntity* this) { sub_08030E3C(this); break; case 2: - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { super->animationState = this->unk_7f; InitializeAnimation(super, super->animationState + 4); } @@ -227,7 +227,7 @@ void Eyegore_Action4(EyegoreEntity* this) { break; default: - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { InitializeAnimation(super, super->animationState); if ((this->unk_79 & 0x80) != 0) { super->action = 5; @@ -252,7 +252,7 @@ void Eyegore_Action5(EyegoreEntity* this) { sub_08030E3C(this); break; case 2: - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { super->animationState = this->unk_7f; InitializeAnimation(super, super->animationState + 4); } @@ -261,7 +261,7 @@ void Eyegore_Action5(EyegoreEntity* this) { } break; default: - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { InitializeAnimation(super, super->animationState); if (sub_08049FDC(super, 1)) { sub_08030E58(this); @@ -280,7 +280,7 @@ void Eyegore_Action5(EyegoreEntity* this) { void Eyegore_Action6(EyegoreEntity* this) { GetNextFrame(super); - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { super->action = 2; } } diff --git a/src/enemy/flyingPot.c b/src/enemy/flyingPot.c new file mode 100644 index 00000000..abba834c --- /dev/null +++ b/src/enemy/flyingPot.c @@ -0,0 +1,264 @@ +/** + * @file flyingPot.c + * @ingroup Enemies + * + * @brief Flying pot enemy + */ +#define NENT_DEPRECATED +#include "functions.h" +#include "enemy.h" +#include "player.h" +#include "room.h" + +extern void (*const gUnk_080012C8[])(Entity*); +extern Hitbox gUnk_080FD34C; + +typedef struct { + /* 0x00 */ Entity base; + /* 0x68 */ u8 filler[0xC]; + /* 0x74 */ u16 tileIndex; +} FlyingPotEntity; + +enum FlyingPotActions { + /* 0 */ FLYING_POT_ACTION_0, + /* 1 */ FLYING_POT_ACTION_1, + /* 2 */ FLYING_POT_ACTION_2, + /* 3 */ FLYING_POT_ACTION_3, + /* 4 */ FLYING_POT_ACTION_4, + /* 5 */ FLYING_POT_ACTION_5, + /* 6 */ FLYING_POT_ACTION_6, +}; + +enum FlyingPotSubActions { + /* 0 */ FLYING_POT_SUBACTION_0, + /* 1 */ FLYING_POT_SUBACTION_1, + /* 2 */ FLYING_POT_SUBACTION_2, + /* 3 */ FLYING_POT_SUBACTION_3, + /* 4 */ FLYING_POT_SUBACTION_DO_NOTHING, + /* 5 */ FLYING_POT_SUBACTION_5, +}; + +// Functions +void FlyingPot_OnTick(FlyingPotEntity*); // 0803708C +void FlyingPot_OnCollision(FlyingPotEntity*); // 080370A4 +void FlyingPot_OnGrabbed(FlyingPotEntity*); // 0803712C + +// Subactions +void FlyingPot_SubAction0(FlyingPotEntity*); // 08037144 +void FlyingPot_SubAction1(FlyingPotEntity*); // 0803715C +void FlyingPot_SubAction2(FlyingPotEntity*); // 0803718C +void FlyingPot_SubAction3(FlyingPotEntity*); // 080371F8 +void FlyingPot_SubActionDoNothing(FlyingPotEntity*); +void FlyingPot_SubAction5(FlyingPotEntity*); // 08037218 + +// Actions +void FlyingPot_Init(FlyingPotEntity*); // ? // 08037220 +void FlyingPot_Action1(FlyingPotEntity*); // 08037280 +void FlyingPot_Action2(FlyingPotEntity*); // 080372E8 +void FlyingPot_Action3(FlyingPotEntity*); // 0803737C +void FlyingPot_Action4(FlyingPotEntity*); // 080373B0 +void FlyingPot_Action5(FlyingPotEntity*); // 080373C8 +void FlyingPot_Action6(FlyingPotEntity*); // 080373E0 + +void sub_08037408(FlyingPotEntity*); +void sub_08037418(FlyingPotEntity*); + +void (*const FlyingPot_Functions[])(Entity*) = { + (EntityActionPtr)FlyingPot_OnTick, + (EntityActionPtr)FlyingPot_OnCollision, + GenericKnockback, + GenericDeath, + GenericConfused, + (EntityActionPtr)FlyingPot_OnGrabbed, +}; + +void FlyingPot(Entity* thisx) { + s32 index = sub_080012DC(thisx); + + if (index != 0) { + gUnk_080012C8[index](thisx); + } else { + FlyingPot_Functions[GetNextFunction(thisx)](thisx); + } +} + +void FlyingPot_OnTick(FlyingPotEntity* this) { + static void (*const FlyingPot_Actions[])(FlyingPotEntity*) = { + FlyingPot_Init, FlyingPot_Action1, FlyingPot_Action2, FlyingPot_Action3, + FlyingPot_Action4, FlyingPot_Action5, FlyingPot_Action6, + }; + + FlyingPot_Actions[super->action](this); +} + +void FlyingPot_OnCollision(FlyingPotEntity* this) { + sub_08037418(this); + + if (super->bitfield == 0x9D) { + super->action = FLYING_POT_ACTION_6; + COLLISION_OFF(super); + super->zVelocity = 0x2A000; + super->spritePriority.b1 = 1; + + SetTile(this->tileIndex, TILE(super->x.HALF.HI, super->y.HALF.HI), super->collisionLayer); + } else if (super->z.HALF.HI != 0) { + sub_08037408(this); + } + + EnemyFunctionHandlerAfterCollision(super, FlyingPot_Functions); +} + +void FlyingPot_OnGrabbed(FlyingPotEntity* this) { + static void (*const FlyingPot_SubActions[])(FlyingPotEntity*) = { + FlyingPot_SubAction0, FlyingPot_SubAction1, FlyingPot_SubAction2, + FlyingPot_SubAction3, FlyingPot_SubActionDoNothing, FlyingPot_SubAction5, + }; + + FlyingPot_SubActions[super->subAction](this); +} + +void FlyingPot_SubAction0(FlyingPotEntity* this) { + sub_08037418(this); + + super->subAction = FLYING_POT_SUBACTION_1; + super->actionDelay = 0; + super->field_0x1d = 0x30; +} + +void FlyingPot_SubAction1(FlyingPotEntity* this) { + sub_08037418(this); + + if (sub_0806F520(super)) { + sub_0806F4E8(super); + } else { + super->spriteOffsetX = 0; + + if (super->z.HALF.HI != 0) { + sub_08037408(this); + } + } +} + +void FlyingPot_SubAction2(FlyingPotEntity* this) { + if (super->actionDelay == 0) { + sub_08037418(this); + super->actionDelay = 1; + COLLISION_OFF(super); + super->spriteOffsetX = 0; + + SetTile(this->tileIndex, TILE(super->x.HALF.HI, super->y.HALF.HI), super->collisionLayer); + } + + if (sub_0806F520(super)) { + sub_0806F3E4(super); + } else { + sub_08037408(this); + } +} + +void FlyingPot_SubAction3(FlyingPotEntity* this) { + if (!(gPlayerState.field_0x1c & 0xF)) { + sub_08037408(this); + } +} + +void FlyingPot_SubActionDoNothing(FlyingPotEntity* this) { +} + +void FlyingPot_SubAction5(FlyingPotEntity* this) { + sub_08037408(this); +} + +void FlyingPot_Init(FlyingPotEntity* this) { + u32 tile; + + super->action = FLYING_POT_ACTION_1; + super->field_0x1c = 2; + super->y.HALF.HI += 3; + + tile = TILE(super->x.HALF.HI, super->y.HALF.HI); + this->tileIndex = GetTileIndex(tile, super->collisionLayer); + SetTile(0x4000, tile, super->collisionLayer); + InitializeAnimation(super, 5); +} + +void FlyingPot_Action1(FlyingPotEntity* this) { + sub_08037418(this); + + if (GetTileTypeByEntity(super) != 0x4000) { + SetTile(this->tileIndex, TILE(super->x.HALF.HI, super->y.HALF.HI), super->collisionLayer); + sub_08037408(this); + } + + if (PlayerInRange(super, 1, 0x40)) { + super->action = FLYING_POT_ACTION_2; + super->actionDelay = 30; + } +} + +void FlyingPot_Action2(FlyingPotEntity* this) { + static const u8 offsets[] = { -1, 1, 1, -1 }; + + sub_08037418(this); + + super->spriteOffsetX += offsets[super->actionDelay & 3]; + + if (--super->actionDelay == 0) { + super->action = FLYING_POT_ACTION_3; + super->spritePriority.b1 = 1; + super->spriteOffsetX = 0; + super->hitType = 0xA0; + super->flags2 = 0xF; + super->hitbox = &gUnk_080FD34C; + + SetTile(this->tileIndex, TILE(super->x.HALF.HI, super->y.HALF.HI), super->collisionLayer); + } +} + +void FlyingPot_Action3(FlyingPotEntity* this) { + super->z.WORD -= 0x10000; + + if (super->z.HALF.HI <= -6) { + super->action = FLYING_POT_ACTION_4; + super->actionDelay = 10; + super->direction = GetFacingDirection(super, &gPlayerEntity); + } +} + +void FlyingPot_Action4(FlyingPotEntity* this) { + if (--super->actionDelay == 0) { + super->action = FLYING_POT_ACTION_5; + } +} + +void FlyingPot_Action5(FlyingPotEntity* this) { + ProcessMovement2(super); + + if (super->collisions != 0) { + sub_08037408(this); + } +} + +void FlyingPot_Action6(FlyingPotEntity* this) { + if (super->zVelocity < 0) { + super->spriteSettings.flipY = 1; + } + + if (!GravityUpdate(super, 0x2000)) { + sub_08037408(this); + } +} + +void sub_08037408(FlyingPotEntity* this) { + CreateFx(super, FX_POT_SHATTER, 0); + DeleteThisEntity(); +} + +void sub_08037418(FlyingPotEntity* this) { + u32 tile = COORD_TO_TILE(super); + + if (GetTileIndex(tile, super->collisionLayer) == 0x4067) { + SetTile(this->tileIndex, tile, super->collisionLayer); + DeleteThisEntity(); + } +} diff --git a/src/enemy/flyingSkull.c b/src/enemy/flyingSkull.c index 261efa49..262781bb 100644 --- a/src/enemy/flyingSkull.c +++ b/src/enemy/flyingSkull.c @@ -20,7 +20,7 @@ void (*const gUnk_080CFBD4[])(FlyingSkullEntity*); const s8 gUnk_080CFBE4[4]; extern s32 sub_080012DC(Entity*); -extern void sub_08078930(Entity*); +extern void RegisterCarryEntity(Entity*); void sub_0803A100(FlyingSkullEntity* this); void sub_0803A0E0(FlyingSkullEntity* this); @@ -130,7 +130,7 @@ void sub_08039DD8(FlyingSkullEntity* this) { sub_0803A0E0(this); } - sub_08078930(super); + RegisterCarryEntity(super); } else { if ((gPlayerState.flags & PL_MINISH) == 0) { Entity* ent = &gPlayerEntity; diff --git a/src/enemy/ghini.c b/src/enemy/ghini.c index a7870e07..ab807ba0 100644 --- a/src/enemy/ghini.c +++ b/src/enemy/ghini.c @@ -113,7 +113,7 @@ void Ghini_OnConfused(GhiniEntity* this) { } void Ghini_OnGrabbed(GhiniEntity* this) { - if (sub_0806F520()) { + if (sub_0806F520(super)) { Ghini_SubActions[super->subAction](this); } else { sub_0803F51C(this); @@ -250,7 +250,7 @@ void Ghini_Action7(GhiniEntity* this) { void Ghini_Action8(GhiniEntity* this) { sub_0803F738(this); GetNextFrame(super); - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { super->action = 9; super->flags |= 0x80; this->unk_78 = 0; diff --git a/src/enemy/gibdo.c b/src/enemy/gibdo.c index 9c29dd4e..611e2fcc 100644 --- a/src/enemy/gibdo.c +++ b/src/enemy/gibdo.c @@ -42,9 +42,6 @@ void sub_08037ACC(GibdoEntity*); void Gibdo_CreateObjects(GibdoEntity*); void sub_08037A14(GibdoEntity*); -extern void sub_0804A4E4(Entity*, Entity*); -u32 sub_0804A044(Entity*, Entity*, u32); - void (*const Gibdo_Functions[6])(Entity*); void (*const gUnk_080CF2AC[9])(GibdoEntity*); extern Entity* gUnk_020000B0; @@ -164,7 +161,7 @@ void sub_08037624(GibdoEntity* this) { void sub_08037690(GibdoEntity* this) { UpdateAnimationSingleFrame(super); - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { this->field_0x77 = 0x14; sub_08037794(this); } else { @@ -196,7 +193,7 @@ void sub_080376D0(GibdoEntity* this) { void sub_0803773C(GibdoEntity* this) { UpdateAnimationSingleFrame(super); - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { sub_08037794(this); } } diff --git a/src/enemy/gleerok.c b/src/enemy/gleerok.c index fb2777e4..50ae9126 100644 --- a/src/enemy/gleerok.c +++ b/src/enemy/gleerok.c @@ -549,7 +549,7 @@ NONMATCH("asm/non_matching/gleerok/sub_0802D86C.inc", void sub_0802D86C(GleerokE UpdateAnimationSingleFrame(super); - if ((super->frame & 0x80) == 0) + if ((super->frame & ANIM_DONE) == 0) return; enemy = CreateEnemy(GLEEROK, 6); @@ -569,7 +569,7 @@ NONMATCH("asm/non_matching/gleerok/sub_0802D86C.inc", void sub_0802D86C(GleerokE GetNextFrame(super); - if ((super->frame & 0x80) == 0) + if ((super->frame & ANIM_DONE) == 0) return; enemy = CreateEnemy(GLEEROK, 3); @@ -998,7 +998,7 @@ void sub_0802E0B8(GleerokEntity* this) { void sub_0802E1D0(GleerokEntity* this) { Gleerok_HeapStruct* heap = this->unk_84; - if (!(super->frame & 0x80)) { + if (!(super->frame & ANIM_DONE)) { GetNextFrame(super); } if (super->frame & 0x3f) { @@ -1144,7 +1144,7 @@ void sub_0802E448(GleerokEntity* this) { void sub_0802E4C0(GleerokEntity* this) { GetNextFrame(super); - if (super->frame & 0x80) { + if (super->frame & ANIM_DONE) { if (super->action != 2) { this->unk_74 = 0; this->unk_75 = 8; @@ -1220,7 +1220,7 @@ NONMATCH("asm/non_matching/gleerok/sub_0802E518.inc", void sub_0802E518(GleerokE r7 += heap->ent2->actionDelay; } else { if (super->iframes == 0) { - if ((super->animIndex != (heap->filler[0x15] >> 3) + 0x2f) || (super->frame & 0x80) != 0) { + if ((super->animIndex != (heap->filler[0x15] >> 3) + 0x2f) || (super->frame & ANIM_DONE) != 0) { r7 = (heap->filler[0x15] >> 3) + 0x28; } } else { diff --git a/src/enemy/gyorgChild.c b/src/enemy/gyorgChild.c index 698ad03a..84bd4e6e 100644 --- a/src/enemy/gyorgChild.c +++ b/src/enemy/gyorgChild.c @@ -56,7 +56,7 @@ void GyorgChild_OnGrabbed(GyorgChildEntity* this) { GyorgChild_OnGrabbed_Action1, GyorgChild_OnGrabbed_Action3, }; - if (sub_0806F520()) { + if (sub_0806F520(super)) { GyorgChild_OnGrabbed_Actions[super->subAction](this); } } diff --git a/src/enemy/gyorgFemaleEye.c b/src/enemy/gyorgFemaleEye.c index 84d1aa3b..6ddb4f65 100644 --- a/src/enemy/gyorgFemaleEye.c +++ b/src/enemy/gyorgFemaleEye.c @@ -125,7 +125,7 @@ void sub_08048B2C(GyorgFemaleEyeEntity* this) { void sub_08048B84(GyorgFemaleEyeEntity* this) { GetNextFrame(super); - if (super->frame & 0x80) { + if (super->frame & ANIM_DONE) { super->action = 3; super->flags |= ENT_COLLIDE; super->hitType = 0x1E; @@ -155,7 +155,7 @@ void sub_08048BB0(GyorgFemaleEyeEntity* this) { SoundReq(SFX_ITEM_GLOVES_KNOCKBACK); } GetNextFrame(super); - if (super->frame & 0x80) { + if (super->frame & ANIM_DONE) { super->hitType = 0x1E; InitializeAnimation(super, gUnk_080D2010[(super->animationState << 3) + super->type]); UpdateAnimationVariableFrames(super, 7); @@ -176,7 +176,7 @@ void sub_08048BB0(GyorgFemaleEyeEntity* this) { void sub_08048CEC(GyorgFemaleEyeEntity* this) { GetNextFrame(super); - if (super->frame & 0x80) { + if (super->frame & ANIM_DONE) { super->action = 1; InitializeAnimation(super, gUnk_080D2010[(super->animationState << 3) + super->type]); } diff --git a/src/enemy/gyorgMale.c b/src/enemy/gyorgMale.c index f9ca7d8c..e0af39c7 100644 --- a/src/enemy/gyorgMale.c +++ b/src/enemy/gyorgMale.c @@ -106,7 +106,7 @@ void GyorgMale(GyorgMaleEntity* this) { } gUnk_080D1AFC[super->action](this); if (super->action != 7) { - sub_0805EC9C(super, 0xaa, 0xaa, this->unk_78); + SetAffineInfo(super, 0xaa, 0xaa, this->unk_78); } super->animationState = -(this->unk_78 >> 8); sub_08048004(this); @@ -986,7 +986,7 @@ void sub_08047BF0(GyorgMaleEntity* this) { } } } - sub_0805EC9C(super, 0xAA, 0xAA, this->unk_78); + SetAffineInfo(super, 0xAA, 0xAA, this->unk_78); } void sub_08047D24(GyorgMaleEntity* this) { @@ -1005,7 +1005,7 @@ void sub_08047D24(GyorgMaleEntity* this) { } else { sub_08047E58(this); } - sub_0805EC9C(super, this->unk_7e, this->unk_7e, this->unk_78); + SetAffineInfo(super, this->unk_7e, this->unk_7e, this->unk_78); } } diff --git a/src/enemy/gyorgMaleEye.c b/src/enemy/gyorgMaleEye.c index a7586c44..4e9128f3 100644 --- a/src/enemy/gyorgMaleEye.c +++ b/src/enemy/gyorgMaleEye.c @@ -79,7 +79,7 @@ void GyorgMaleEye_Init(GyorgMaleEyeEntity* this) { void GyorgMaleEye_Action1(GyorgMaleEyeEntity* this) { sub_08048F50(this); GetNextFrame(super); - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { super->action = 2; super->flags |= 0x80; super->actionDelay = 0x2d; @@ -98,7 +98,7 @@ void GyorgMaleEye_Action2(GyorgMaleEyeEntity* this) { void GyorgMaleEye_Action3(GyorgMaleEyeEntity* this) { sub_08048F50(this); GetNextFrame(super); - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { DeleteThisEntity(); } } diff --git a/src/enemy/helmasaur.c b/src/enemy/helmasaur.c index 2c593691..5d34065a 100644 --- a/src/enemy/helmasaur.c +++ b/src/enemy/helmasaur.c @@ -79,7 +79,7 @@ void sub_0802BC74(Entity* this) { sub_0802C1C0(this); this->subAction = 1; this->field_0x1d = 60; - this->animationState = (gPlayerEntity.animationState >> 1) ^ 2; + this->animationState = AnimationStateFlip90(gPlayerEntity.animationState >> 1); InitializeAnimation(this, this->animationState); } @@ -92,7 +92,7 @@ void sub_0802BCA8(Entity* this) { Entity* ent; this->action = 7; - this->actionDelay = 0x5a; + this->actionDelay = 90; this->zVelocity = Q_16_16(1.5); this->hitType = 0x19; this->field_0x3a = this->field_0x3a & 0xfb; diff --git a/src/enemy/keaton.c b/src/enemy/keaton.c index 340a9be5..09564cd3 100644 --- a/src/enemy/keaton.c +++ b/src/enemy/keaton.c @@ -85,7 +85,7 @@ void sub_0803248C(Entity* this) { void sub_080324CC(Entity* this) { if (sub_080325E8(this) == 0) { UpdateAnimationSingleFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { sub_080326FC(this); sub_08032740(this); } diff --git a/src/enemy/keese.c b/src/enemy/keese.c index 63b5b78d..bbc2bac6 100644 --- a/src/enemy/keese.c +++ b/src/enemy/keese.c @@ -79,7 +79,7 @@ void Keese_Fly(Entity* this) { this->field_0x7a.HWORD--; } GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { sub_08021F24(this); } else { ProcessMovement1(this); diff --git a/src/enemy/lakitu.c b/src/enemy/lakitu.c index 70145906..971ffd09 100644 --- a/src/enemy/lakitu.c +++ b/src/enemy/lakitu.c @@ -152,7 +152,7 @@ void Lakitu_Hide(Entity* this) { void Lakitu_EndHide(Entity* this) { UpdateAnimationSingleFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = IDLE; this->actionDelay = 0x3c; @@ -180,7 +180,7 @@ void Lakitu_Idle(Entity* this) { void Lakitu_BeginHide(Entity* this) { UpdateAnimationSingleFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 1; this->spriteSettings.draw = 0; @@ -191,7 +191,7 @@ void Lakitu_BeginHide(Entity* this) { void Lakitu_Lightning(Entity* this) { UpdateAnimationSingleFrame(this); - if (!(this->frame & 0x80)) { + if (!(this->frame & ANIM_DONE)) { return; } diff --git a/src/enemy/lakituCloud.c b/src/enemy/lakituCloud.c index 25616556..1c311f6c 100644 --- a/src/enemy/lakituCloud.c +++ b/src/enemy/lakituCloud.c @@ -34,7 +34,7 @@ void LakituCloud_OnKnockback(Entity* this) { } void LakituCloud_OnGrabbed(Entity* this) { - if (sub_0806F520(this) == 0) { + if (!sub_0806F520(this)) { if (this->subAction == 2) { sub_0803CE3C(this); } diff --git a/src/enemy/leever.c b/src/enemy/leever.c index 4226da39..3e53a53a 100644 --- a/src/enemy/leever.c +++ b/src/enemy/leever.c @@ -85,7 +85,7 @@ void Leever_Idle(Entity* this) { void Leever_DigUp(Entity* this) { GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 3; if (this->type == LeeverForm_Red) { this->field_0x74.HWORD = 180; @@ -113,7 +113,7 @@ void Leever_Attack(Entity* this) { void Leever_DigDown(Entity* this) { Leever_Move(this); GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 1; this->actionDelay = 0xf0; this->spriteSettings.draw = FALSE; diff --git a/src/enemy/madderpillar.c b/src/enemy/madderpillar.c index cdad77e6..26ed3023 100644 --- a/src/enemy/madderpillar.c +++ b/src/enemy/madderpillar.c @@ -277,7 +277,7 @@ void sub_08029D14(Entity* this) { } } else { GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 4; this->actionDelay = 0x78; this->hitType = 0x6c; @@ -299,7 +299,7 @@ void sub_08029D78(Entity* this) { void sub_08029DAC(Entity* this) { GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 6; this->parent->field_0x76.HALF.HI = 1; InitializeAnimation(this, this->animationState + 8); diff --git a/src/enemy/mazaalBracelet.c b/src/enemy/mazaalBracelet.c index 5d3a04b8..786039df 100644 --- a/src/enemy/mazaalBracelet.c +++ b/src/enemy/mazaalBracelet.c @@ -238,7 +238,7 @@ void sub_0803A364(Entity* this) { break; case 4: GetNextFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->subAction = 5; } break; @@ -261,7 +261,7 @@ void sub_0803A364(Entity* this) { break; case 7: GetNextFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->subAction = 8; this->spriteSettings.draw = 0; InitAnimationForceUpdate(this->child, 8); @@ -270,7 +270,7 @@ void sub_0803A364(Entity* this) { break; case 8: sub_0803B55C(this); - if ((this->child->frame & 0x80) == 0) { + if ((this->child->frame & ANIM_DONE) == 0) { return; } uVar1 = 9; @@ -286,7 +286,7 @@ void sub_0803A364(Entity* this) { break; case 10: sub_0803B55C(this); - if ((this->child->frame & 0x80) != 0) { + if ((this->child->frame & ANIM_DONE) != 0) { this->subAction = 0xb; this->spriteSettings.draw = 1; InitializeAnimation(this, 4); @@ -294,7 +294,7 @@ void sub_0803A364(Entity* this) { break; case 0xb: GetNextFrame(this); - if ((this->frame & 0x80) == 0) { + if ((this->frame & ANIM_DONE) == 0) { return; } if (this->type2 != 0) { @@ -365,7 +365,7 @@ void sub_0803A60C(Entity* this) { index = ((this->parent->field_0xf >> 4) + 3); this->z.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; GetNextFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->action = 6; this->spriteSettings.draw = 0; InitAnimationForceUpdate(this->child, 8); @@ -482,7 +482,7 @@ void sub_0803A814(Entity* this) { index = ((this->parent->field_0xf >> 4) + 3); this->z.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; sub_0803B55C(this); - if ((this->child->frame & 0x80) != 0) { + if ((this->child->frame & ANIM_DONE) != 0) { this->action = 0xe; this->spriteSettings.draw = 1; InitializeAnimation(this, 4); @@ -497,7 +497,7 @@ void sub_0803A86C(Entity* this) { index = ((this->parent->field_0xf >> 4) + 3); this->z.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; GetNextFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { COLLISION_ON(this); sub_0803B59C(this); } @@ -619,7 +619,7 @@ void sub_0803AB10(Entity* this) { this->z.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; LinearMoveUpdate(this); sub_0803B55C(this); - if ((this->child->frame & 0x80) != 0) { + if ((this->child->frame & ANIM_DONE) != 0) { this->action = 0x15; this->actionDelay = 0xf; } @@ -649,7 +649,7 @@ void sub_0803ABB4(Entity* this) { this->z.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; GetNextFrame(this); sub_0803B55C(this); - if ((this->child->frame & 0x80) != 0) { + if ((this->child->frame & ANIM_DONE) != 0) { this->action = 0x17; COLLISION_ON(this); this->speed = 0x180; @@ -768,7 +768,7 @@ void sub_0803ADF4(Entity* this) { this->z.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; UpdateAnimationSingleFrame(this); GetNextFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->action = 0x1c; this->actionDelay = 0x1e; this->spriteSettings.draw = 0; @@ -803,7 +803,7 @@ void sub_0803AEC4(Entity* this) { this->z.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; UpdateAnimationSingleFrame(this); GetNextFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { COLLISION_ON(this); sub_0803B59C(this); } @@ -818,7 +818,7 @@ void sub_0803AF18(Entity* this) { void sub_0803AF50(Entity* this) { GetNextFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->action = 0x20; this->spriteSettings.draw = 0; InitAnimationForceUpdate(this->child, 8); @@ -827,7 +827,7 @@ void sub_0803AF50(Entity* this) { void sub_0803AF7C(Entity* this) { sub_0803B55C(this); - if ((this->child->frame & 0x80) != 0) { + if ((this->child->frame & ANIM_DONE) != 0) { this->action = 0x21; this->actionDelay = 0xf; } @@ -892,7 +892,7 @@ void sub_0803B074(Entity* this) { index = ((this->parent->field_0xf >> 4) + 3); this->z.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; sub_0803B55C(this); - if ((this->child->frame & 0x80) != 0) { + if ((this->child->frame & ANIM_DONE) != 0) { this->action = 0x27; this->spriteSettings.draw = 1; InitializeAnimation(this, 4); @@ -903,7 +903,7 @@ void sub_0803B074(Entity* this) { void sub_0803B0D4(Entity* this) { UpdateAnimationSingleFrame(this); GetNextFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { COLLISION_ON(this); sub_0803B59C(this); } @@ -938,7 +938,7 @@ void sub_0803B144(Entity* this) { void sub_0803B17C(Entity* this) { GetNextFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->action = 0x2b; COLLISION_ON(this); this->hitType = 0x18; @@ -951,7 +951,7 @@ void sub_0803B1B8(Entity* this) { Entity* temp; u16 val; - if ((this->frame & 0x80) == 0) { + if ((this->frame & ANIM_DONE) == 0) { GetNextFrame(this); UpdateAnimationSingleFrame(this->child); } @@ -994,7 +994,7 @@ void sub_0803B2D0(Entity* this) { Entity* entity; GetNextFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->action = 0x2d; this->spriteSettings.draw = 0; entity = *(Entity**)&this->field_0x74; @@ -1009,7 +1009,7 @@ void sub_0803B30C(Entity* this) { Entity* entity; entity = *(Entity**)&this->field_0x74; - if ((entity->frame & 0x80) != 0) { + if ((entity->frame & ANIM_DONE) != 0) { this->action = 0x2e; sub_0803B8E8(this, 0x13); InitializeAnimation(entity, 0); @@ -1064,7 +1064,7 @@ void sub_0803B3F4(Entity* this) { index = ((this->parent->field_0xf >> 4) + 3); this->z.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; GetNextFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->hitType = 0x17; if (this->type == 0) { this->hitbox = (Hitbox*)&gUnk_080FD35C; diff --git a/src/enemy/mazaalHead.c b/src/enemy/mazaalHead.c index add39f8b..feee0839 100644 --- a/src/enemy/mazaalHead.c +++ b/src/enemy/mazaalHead.c @@ -757,7 +757,7 @@ void sub_08034B0C(Entity* this) { this->actionDelay--; } else { GetNextFrame(this); - if ((this->frame & 0x80) == 0) { + if ((this->frame & ANIM_DONE) == 0) { return; } this->action = 2; @@ -789,7 +789,7 @@ void sub_08034B38(Entity* this) { void sub_08034BA0(Entity* this) { GetNextFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->parent->field_0x7c.HALF.HI = 0xff; DeleteEntity(this); } diff --git a/src/enemy/moldworm.c b/src/enemy/moldworm.c index b6099372..03f29e2a 100644 --- a/src/enemy/moldworm.c +++ b/src/enemy/moldworm.c @@ -170,7 +170,7 @@ void sub_08023288(Entity* this) { void sub_08023330(Entity* this) { GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 4; this->actionDelay = 0x19; COLLISION_ON(this); diff --git a/src/enemy/octorok.c b/src/enemy/octorok.c index 5ee3c12a..a205d1d6 100644 --- a/src/enemy/octorok.c +++ b/src/enemy/octorok.c @@ -94,7 +94,7 @@ void sub_0801EB9C(Entity* this) { void Octorok_Initialize(Entity* this) { sub_0804A720(this); if (this->type == 2) { - this->animationState = this->type; + this->animationState = 2; } else { this->animationState = Random() & 3; } @@ -141,13 +141,13 @@ void Octorok_ShootNut(Entity* this) { } } - if (this->frame & 0x80) + if (this->frame & ANIM_DONE) Octorok_Pause(this); } void Octorok_Pause(Entity* this) { this->action = 1; - this->actionDelay = (Random() & 0x38) + 0x18; + this->actionDelay = (Random() & 0x38) + 24; } void Octorok_Turn(Entity* this) { diff --git a/src/enemy/octorokBoss.c b/src/enemy/octorokBoss.c index b4fbc73a..49ca9525 100644 --- a/src/enemy/octorokBoss.c +++ b/src/enemy/octorokBoss.c @@ -125,7 +125,7 @@ void OctorokBoss_Hit(OctorokBossEntity* this) { sub_08078B48(); } sub_0800445C(super); - sub_0805EC9C(super, this->unk_76, this->unk_74, this->angle.HWORD); + SetAffineInfo(super, this->unk_76, this->unk_74, this->angle.HWORD); } void OctorokBoss_Hit_SubAction0(OctorokBossEntity* this) { @@ -327,7 +327,7 @@ void OctorokBoss_Intro(OctorokBossEntity* this) { gUnk_02034490.unk0 = 1; sub_08036F60(this); OctorokBoss_Intro_SubActions[super->subAction](this); - sub_0805EC9C(super, this->unk_76, this->unk_74, this->angle.HWORD); + SetAffineInfo(super, this->unk_76, this->unk_74, this->angle.HWORD); } void OctorokBoss_Intro_SubAction0(OctorokBossEntity* this) { @@ -475,7 +475,7 @@ void OctorokBoss_Action1(OctorokBossEntity* this) { sub_08036914(super, angle, radius); this->angle.HALF.HI = ((OctorokBossEntity*)super->parent)->angle.HALF.HI + OctorokBoss_LegAngleOffset2[super->type - 1] + this->timer; - sub_0805EC9C(super, this->unk_76, this->unk_74, this->angle.HWORD); + SetAffineInfo(super, this->unk_76, this->unk_74, this->angle.HWORD); break; case TAIL: @@ -522,7 +522,7 @@ void OctorokBoss_Action1(OctorokBossEntity* this) { sub_080369D0(this, GET_TAIL_RADIUS(this), 4); } super->bitfield = 0; - sub_0805EC9C(super, this->unk_76, this->unk_74, -this->angle.HWORD ^ 0x8000); + SetAffineInfo(super, this->unk_76, this->unk_74, -this->angle.HWORD ^ 0x8000); break; case MOUTH: @@ -546,7 +546,7 @@ void OctorokBoss_Action1(OctorokBossEntity* this) { sub_08036914(super, angle, radius); this->angle.HALF.HI = ((OctorokBossEntity*)super->parent)->angle.HALF.HI; - sub_0805EC9C(super, this->unk_76, this->unk_74, this->angle.HWORD); + SetAffineInfo(super, this->unk_76, this->unk_74, this->angle.HWORD); sub_0800445C(super); } break; @@ -562,7 +562,7 @@ void OctorokBoss_Action1(OctorokBossEntity* this) { } } OctorokBoss_Action1_SubActions[super->subAction](this); - sub_0805EC9C(super, this->unk_76, this->unk_74, this->angle.HWORD); + SetAffineInfo(super, this->unk_76, this->unk_74, this->angle.HWORD); break; } } @@ -905,7 +905,7 @@ void OctorokBoss_Burning(OctorokBossEntity* this) { CreateProjectileWithParent(super, OCTOROK_BOSS_PROJECTILE, 3); } } - sub_0805EC9C(super, this->unk_76, this->unk_74, this->angle.HWORD); + SetAffineInfo(super, this->unk_76, this->unk_74, this->angle.HWORD); } void OctorokBoss_Burning_SubAction0(OctorokBossEntity* this) { diff --git a/src/enemy/octorokGolden.c b/src/enemy/octorokGolden.c index 9f38b9c7..a2fcfab6 100644 --- a/src/enemy/octorokGolden.c +++ b/src/enemy/octorokGolden.c @@ -8,9 +8,6 @@ extern void (*const gUnk_080012C8[])(Entity*); const s8 gUnk_080CF490[]; const u8 gUnk_080CF498[]; -extern s32 sub_080012DC(Entity*); -extern u32 sub_0804A044(Entity*, Entity*, u32); - void sub_08037E14(Entity* this); bool32 sub_08037E90(Entity* this); @@ -90,7 +87,7 @@ void sub_08037D54(Entity* this) { EnqueueSFX(SFX_124); } } - } else if (this->frame & 0x80) { + } else if (this->frame & ANIM_DONE) { if (--this->actionDelay == 0) { this->action = 1; this->field_0xf = 0x3c; diff --git a/src/enemy/peahat.c b/src/enemy/peahat.c index 3f85d704..dc15dbb6 100644 --- a/src/enemy/peahat.c +++ b/src/enemy/peahat.c @@ -19,9 +19,6 @@ extern const s8 gUnk_080CA5D4[]; void sub_080205F8(Entity*); void sub_08020604(Entity*); -extern u32 sub_08049F1C(Entity*, Entity*, u32); -extern void sub_0804AA1C(Entity*); - extern Entity* gUnk_020000B0; enum { @@ -289,7 +286,7 @@ void Peahat_Recover(Entity* this) { void Peahat_Hop(Entity* this) { GetNextFrame(this); if (--this->actionDelay == 0) { - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 9; this->zVelocity = Q_16_16(1.5); this->animationState = PeahatAnimation_NewPropeller; @@ -313,7 +310,7 @@ void Peahat_Hop(Entity* this) { void Peahat_Takeoff(Entity* this) { GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 1; this->hitType = 0x70; this->field_0x82.HALF.LO = 1; diff --git a/src/enemy/puffstool.c b/src/enemy/puffstool.c index 94111c8f..18838cf6 100644 --- a/src/enemy/puffstool.c +++ b/src/enemy/puffstool.c @@ -237,7 +237,7 @@ void sub_080253D4(Entity* this) { void sub_0802541C(Entity* this) { GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 3; this->field_0xf = 1; this->zVelocity = Q_16_16(2); @@ -270,7 +270,7 @@ void sub_0802547C(Entity* this) { void sub_080254B4(Entity* this) { GravityUpdate(this, Q_16_16(0.125)); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { if (this->z.HALF.HI == 0) { if (this->cutsceneBeh.HWORD == 0) { this->hitType = 0x82; diff --git a/src/enemy/rockChuchu.c b/src/enemy/rockChuchu.c index f1d8bad4..22746a16 100644 --- a/src/enemy/rockChuchu.c +++ b/src/enemy/rockChuchu.c @@ -8,8 +8,6 @@ #include "enemy.h" #include "functions.h" -extern void sub_0804A4E4(Entity*, Entity*); - extern void (*const RockChuchu_Functions[])(Entity*); extern void (*const gUnk_080CB960[])(Entity*); diff --git a/src/enemy/rollobite.c b/src/enemy/rollobite.c index d0d22bc9..c9beaa52 100644 --- a/src/enemy/rollobite.c +++ b/src/enemy/rollobite.c @@ -21,7 +21,7 @@ void sub_08020A7C(Entity*); bool32 Rollobite_TryToHoleUp(Entity*); bool32 Rollobite_IsRolledUp(Entity*); -extern void sub_08078930(Entity*); +extern void RegisterCarryEntity(Entity*); void Rollobite(Entity* this) { EnemyFunctionHandler(this, Rollobite_Functions); @@ -175,7 +175,7 @@ void Rollobite_Turn(Entity* this) { void Rollobite_RolledUp(Entity* this) { u32 unk; - if ((this->frame & 0x80) == 0) + if ((this->frame & ANIM_DONE) == 0) GetNextFrame(this); unk = sub_080044EC(this, 0x2800); @@ -185,7 +185,7 @@ void Rollobite_RolledUp(Entity* this) { this->action = 5; InitializeAnimation(this, this->animationState + 12); } - sub_08078930(this); + RegisterCarryEntity(this); } else { if (unk == 1) EnqueueSFX(SFX_104); @@ -197,7 +197,7 @@ void Rollobite_RolledUp(Entity* this) { void Rollobite_Unroll(Entity* this) { GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { COLLISION_ON(this); this->speed = 0x100; this->hitType = 34; @@ -206,7 +206,7 @@ void Rollobite_Unroll(Entity* this) { InitializeAnimation(this, this->animationState); } else { if ((this->frame & 1) == 0) - sub_08078930(this); + RegisterCarryEntity(this); } } diff --git a/src/enemy/rope.c b/src/enemy/rope.c index 48a59799..37c63337 100644 --- a/src/enemy/rope.c +++ b/src/enemy/rope.c @@ -12,7 +12,6 @@ extern void (*const Rope_Functions[6])(Entity*); extern void (*const gUnk_080CE460[4])(Entity*); extern void (*const gUnk_080CE470[3])(Entity*); extern Entity* gUnk_020000B0; -extern u32 sub_0804A044(Entity*, Entity*, u32); void sub_08031600(Entity*); u32 sub_0803163C(Entity*); @@ -39,7 +38,7 @@ void Rope_OnCollision(Entity* this) { } void Rope_OnGrabbed(Entity* this) { - if (sub_0806F520()) { + if (sub_0806F520(this)) { gUnk_080CE470[this->subAction](this); } } @@ -174,7 +173,7 @@ void sub_08031600(Entity* this) { u32 sub_0803163C(Entity* this) { u32 h; - if (sub_080B1AA8(this) == 0x13) { + if (GetTileUnderEntity(this) == 0x13) { h = this->field_0x7a.HWORD / 2; } else { h = this->field_0x7a.HWORD; diff --git a/src/enemy/ropeGolden.c b/src/enemy/ropeGolden.c index ca3a57c7..a4a6fc99 100644 --- a/src/enemy/ropeGolden.c +++ b/src/enemy/ropeGolden.c @@ -14,9 +14,6 @@ extern void (*const gUnk_080012C8[])(Entity*); extern void (*const RopeGolden_Functions[6])(Entity*); extern void (*const gUnk_080CF4E0[4])(Entity*); -extern s32 sub_080012DC(Entity*); -extern u32 sub_0804A044(Entity*, Entity*, u32); - void sub_080383AC(Entity*); void sub_080383E4(Entity*); diff --git a/src/enemy/rupeeLike.c b/src/enemy/rupeeLike.c index 903ddc0b..720243ed 100644 --- a/src/enemy/rupeeLike.c +++ b/src/enemy/rupeeLike.c @@ -122,7 +122,7 @@ void sub_08029474(Entity* this) { u32 bVar1; sub_080296C8(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 3; this->actionDelay = 8; bVar1 = GetFacingDirection(this, &gPlayerEntity); @@ -196,7 +196,7 @@ void sub_08029610(Entity* this) { void sub_08029630(Entity* this) { sub_080296C8(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->field_0x80.HALF.HI = 1; this->child->spriteSettings.draw = FALSE; sub_080297F0(this); diff --git a/src/enemy/scissorsBeetle.c b/src/enemy/scissorsBeetle.c index 41f84df0..28ce9d57 100644 --- a/src/enemy/scissorsBeetle.c +++ b/src/enemy/scissorsBeetle.c @@ -142,7 +142,7 @@ void sub_08038B08(ScissorsBeetleEntity* this) { } UpdateAnimationSingleFrame(super); - if (super->frame & 0x80) { + if (super->frame & ANIM_DONE) { super->action = 4; this->unk_82 = 3; super->actionDelay = 0x32; diff --git a/src/enemy/slime.c b/src/enemy/slime.c index 3c88ae1c..1cf982a0 100644 --- a/src/enemy/slime.c +++ b/src/enemy/slime.c @@ -15,8 +15,6 @@ typedef struct { void sub_08044FF8(Entity*); void sub_08045178(Entity*, Entity*, int, int); -extern void sub_0804A4E4(Entity*, Entity*); - extern void (*const gUnk_080D16BC[])(Entity*); extern void (*const Slime_Functions[])(Entity*); extern u8 gUnk_080D16D0[4]; // Entity count per form diff --git a/src/enemy/sluggula.c b/src/enemy/sluggula.c index e6b5eb87..06d27af1 100644 --- a/src/enemy/sluggula.c +++ b/src/enemy/sluggula.c @@ -8,13 +8,9 @@ #include "enemy.h" #include "functions.h" -extern s32 sub_080012DC(Entity*); -bool32 PlayerInRange(Entity*, u32, u32); - void sub_08023E10(Entity*); void sub_08023E54(Entity*); void sub_08023E9C(Entity*); -void sub_0804A4E4(Entity*, Entity*); extern void (*const gUnk_080012C8[])(Entity*); @@ -134,7 +130,7 @@ void sub_08023CE0(Entity* this) { default: GetNextFrame(this); if (this->frame) { - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { Entity* ent = CreateEnemy(SLUGGULA, 1); if (ent) { sub_0804A4E4(this, ent); @@ -157,7 +153,7 @@ void sub_08023E10(Entity* this) { } GetNextFrame(this); - if (this->frame & 0x80) + if (this->frame & ANIM_DONE) DeleteEntity(this); } @@ -178,7 +174,7 @@ extern Entity* gUnk_020000B0; void sub_08023E9C(Entity* this) { u32 uVar3 = Random(); - if (sub_08049FA0(this) == 0 && (uVar3 & 1)) { + if (!sub_08049FA0(this) && (uVar3 & 1)) { this->direction = DirectionRoundUp(sub_08049EE4(this)); } else if (sub_08049FDC(this, 1) && (uVar3 & 6)) { u32 uVar3 = GetFacingDirection(this, gUnk_020000B0) - this->direction; diff --git a/src/enemy/spinyBeetle.c b/src/enemy/spinyBeetle.c index 6ab1efcd..cbdfe52e 100644 --- a/src/enemy/spinyBeetle.c +++ b/src/enemy/spinyBeetle.c @@ -171,7 +171,7 @@ void sub_08033A7C(SpinyBeetleEntity* this) { } GetNextFrame(super); - if ((super->frame & 0x80) == 0) + if ((super->frame & ANIM_DONE) == 0) return; super->action = 3; diff --git a/src/enemy/spinyChuchu.c b/src/enemy/spinyChuchu.c index 784d1a2e..7499234b 100644 --- a/src/enemy/spinyChuchu.c +++ b/src/enemy/spinyChuchu.c @@ -9,11 +9,6 @@ #include "functions.h" #include "hitbox.h" -extern void sub_08001318(Entity*); -extern u32 PlayerInRange(Entity*, u32, u32); -extern void sub_0804A4E4(Entity*, Entity*); -extern void sub_0804AA1C(Entity*); - u32 sub_080228CC(Entity*); u32 sub_080228F0(Entity*); @@ -181,7 +176,7 @@ void sub_080226EC(Entity* this) { void sub_08022780(Entity* this) { GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 4; InitializeAnimation(this, 3); EnqueueSFX(SFX_194); @@ -201,7 +196,7 @@ void sub_080227AC(Entity* this) { this->hitType = 0x5c; } - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 2; this->field_0xf = gUnk_080CBA60[Random() & 3]; InitializeAnimation(this, 0); @@ -211,7 +206,7 @@ void sub_080227AC(Entity* this) { void sub_0802281C(Entity* this) { GravityUpdate(this, Q_8_8(24.0)); GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 2; this->speed = 0x20; InitializeAnimation(this, 0); @@ -234,7 +229,7 @@ void sub_08022854(Entity* this) { void sub_0802289C(Entity* this) { GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 2; this->speed = 0x20; this->field_0x80.HALF.HI = 0x78; diff --git a/src/enemy/stalfos.c b/src/enemy/stalfos.c index 2751cd5b..61512e7e 100644 --- a/src/enemy/stalfos.c +++ b/src/enemy/stalfos.c @@ -123,7 +123,7 @@ void sub_08039418(StalfosEntity* this) { } void sub_08039438(StalfosEntity* this) { - if (sub_0806F520()) { + if (sub_0806F520(super)) { Stalfos_SubActions[super->subAction](this); } } @@ -269,7 +269,7 @@ void Stalfos_Action11(StalfosEntity* this) { void Stalfos_Action12(StalfosEntity* this) { UpdateAnimationSingleFrame(super); - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { if (super->type2 == 1) { sub_0803998C(this); DeleteEntity(super->child); diff --git a/src/enemy/takkuri.c b/src/enemy/takkuri.c index dc28b862..a07b8330 100644 --- a/src/enemy/takkuri.c +++ b/src/enemy/takkuri.c @@ -74,7 +74,7 @@ void Takkuri_OnCollision(TakkuriEntity* this) { void Takkuri_OnGrabbed(TakkuriEntity* this) { gUnk_080CFF6C[super->subAction](this); GetNextFrame(super); - if (sub_0806F520(super) == 0) { + if (!sub_0806F520(super)) { super->action = 2; super->subAction = 0; this->unk_0x84 = 2; diff --git a/src/enemy/tektite.c b/src/enemy/tektite.c index ddeb53d2..db461a94 100644 --- a/src/enemy/tektite.c +++ b/src/enemy/tektite.c @@ -97,7 +97,7 @@ void sub_0802F284(Entity* this) { if (this->actionDelay != 0) { this->actionDelay--; } else if (this->field_0xf != 0) { - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 2; this->actionDelay = 0x10; this->field_0xf = this->type; @@ -105,7 +105,7 @@ void sub_0802F284(Entity* this) { sub_0802F45C(this); InitializeAnimation(this, 2); } - } else if (this->frame & 0x80) { + } else if (this->frame & ANIM_DONE) { this->field_0xf = 0x40; InitializeAnimation(this, 1); } @@ -137,7 +137,7 @@ void sub_0802F300(Entity* this) { return; } else if (this->collisions != 0) { sub_0800417E(this, this->collisions); - } else if ((sub_080B1AA8(this) & 0xf0) == 0x50) { + } else if ((GetTileUnderEntity(this) & 0xf0) == 0x50) { this->direction = (this->direction + 0x10) & 0x1f; } @@ -167,7 +167,7 @@ void sub_0802F3F4(Entity* this) { GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { if ((*(u8*)&this->field_0x7c.HALF.LO < 2) && ((this->type % 2) != 0)) { this->action = 2; this->actionDelay = 0x10; diff --git a/src/enemy/tektiteGolden.c b/src/enemy/tektiteGolden.c index b35f8f2c..af71db25 100644 --- a/src/enemy/tektiteGolden.c +++ b/src/enemy/tektiteGolden.c @@ -85,7 +85,7 @@ void sub_08037Fe0(Entity* this) { if (this->actionDelay != 0) { this->actionDelay--; } else if (this->field_0xf != 0) { - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 2; this->actionDelay = 6; this->field_0xf = 0; @@ -93,7 +93,7 @@ void sub_08037Fe0(Entity* this) { sub_08038168(this); InitializeAnimation(this, 2); } - } else if (this->frame & 0x80) { + } else if (this->frame & ANIM_DONE) { this->field_0xf = 0x40; InitializeAnimation(this, 1); } @@ -116,7 +116,7 @@ void sub_08038048(Entity* this) { return; } else if (this->collisions != 0) { sub_0800417E(this, this->collisions); - } else if ((sub_080B1AA8(this) & 0xf0) == 0x50) { + } else if ((GetTileUnderEntity(this) & 0xf0) == 0x50) { this->direction = (this->direction + 0x10) & 0x1f; } @@ -141,7 +141,7 @@ void sub_08038048(Entity* this) { void sub_08038110(Entity* this) { UpdateAnimationVariableFrames(this, 2); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { if (this->field_0x80.HALF.LO < 5) { this->action = 2; this->actionDelay = 8; diff --git a/src/enemy/vaatiArm.c b/src/enemy/vaatiArm.c index e4b6e5e4..d9f17946 100644 --- a/src/enemy/vaatiArm.c +++ b/src/enemy/vaatiArm.c @@ -713,7 +713,7 @@ void sub_08042FD8(Entity* this) { this->frame = 0; } } else { - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { if (--this->field_0xf == 0) { this->subAction = 8; this->actionDelay = 0x3c; diff --git a/src/enemy/vaatiBall.c b/src/enemy/vaatiBall.c index 222e1dd4..fa72f6f8 100644 --- a/src/enemy/vaatiBall.c +++ b/src/enemy/vaatiBall.c @@ -162,7 +162,7 @@ void sub_08044868(Entity* this) { if (this->field_0x82.HALF.HI) { switch (this->field_0x74.HALF.LO) { case 0: - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->field_0x74.HALF.LO = 1; this->direction = sub_080045B4(this, vaati->x.HALF.HI, vaati->y.HALF.HI - 0x10); this->speed = 0x180; diff --git a/src/enemy/vaatiProjectile.c b/src/enemy/vaatiProjectile.c index 9c875dd0..320e4bf3 100644 --- a/src/enemy/vaatiProjectile.c +++ b/src/enemy/vaatiProjectile.c @@ -153,7 +153,7 @@ void VaatiProjectileFunction0Action2(Entity* this) { } void VaatiProjectileFunction0Action3(Entity* this) { - if (this->child->frame & 0x80) { + if (this->child->frame & ANIM_DONE) { if (--this->z.HALF.HI <= -0x18) { this->action = 4; this->actionDelay = (Random() & 0xf) + 0xf; diff --git a/src/enemy/vaatiRebornEnemy.c b/src/enemy/vaatiRebornEnemy.c index a84dfcbc..07639d76 100644 --- a/src/enemy/vaatiRebornEnemy.c +++ b/src/enemy/vaatiRebornEnemy.c @@ -235,7 +235,7 @@ void VaatiRebornEnemyType0Action2(Entity* this) { } break; case 1: - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->field_0x74.HALF.LO = 2; this->spriteSettings.draw = 0; this->actionDelay = 0x10; @@ -260,7 +260,7 @@ void VaatiRebornEnemyType0Action2(Entity* this) { } break; case 3: - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->spriteSettings.draw = 1; if (4 < this->field_0x80.HALF.HI) { this->x.HALF.HI = gPlayerEntity.x.HALF.HI; @@ -318,7 +318,7 @@ void VaatiRebornEnemyType0Action3(Entity* this) { } break; case 2: - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->field_0x74.HALF.LO = 3; InitAnimationForceUpdate(this, 0); } diff --git a/src/enemy/vaatiTransfigured.c b/src/enemy/vaatiTransfigured.c index 7ca2f6d7..7149ea69 100644 --- a/src/enemy/vaatiTransfigured.c +++ b/src/enemy/vaatiTransfigured.c @@ -675,7 +675,7 @@ void VaatiTransfiguredType2Action1(Entity* this) { } break; case 1: - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->field_0x74.HALF.LO = 0; this->field_0xf = (Random() & 0x7f) + 0x17; InitAnimationForceUpdate(this, 0); @@ -790,7 +790,7 @@ void VaatiTransfiguredType5Action1(Entity* this) { this->field_0x80.HALF.LO = 0; this->spriteSettings.draw = 0; } else { - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->frame &= ~0x80; if (gEntCount < 0x47) { sub_08040648(this, this->type, 1); @@ -814,13 +814,13 @@ void VaatiTransfiguredType5Action2(Entity* this) { } if (this->field_0x80.HALF.LO == 0) { if (this->parent->parent->action != 6) { - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->field_0x80.HALF.LO += 1; InitializeAnimation(this, 3); } } } else { - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { DeleteThisEntity(); } } diff --git a/src/enemy/vaatiTransfiguredEye.c b/src/enemy/vaatiTransfiguredEye.c index cd42c7a3..457b294d 100644 --- a/src/enemy/vaatiTransfiguredEye.c +++ b/src/enemy/vaatiTransfiguredEye.c @@ -129,7 +129,7 @@ void VaatiTransfiguredEyeFunction0Action0(Entity* this) { void VaatiTransfiguredEyeFunction0Action1(Entity* this) { sub_08045A28(this); if (this->field_0x82.HALF.LO == 0) { - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { if (this->type != 0) { COLLISION_ON(this); } @@ -169,7 +169,7 @@ void VaatiTransfiguredEyeFunction0Action2(Entity* this) { void VaatiTransfiguredEyeFunction0Action3(Entity* this) { sub_08045A28(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->action = 2; if (this->type != 0) { if (this->actionDelay == 0) { @@ -187,7 +187,7 @@ void VaatiTransfiguredEyeFunction0Action4(Entity* this) { sub_08045A28(this); if (this->field_0xf == 0) { - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->field_0xf = 0x20; } } else { diff --git a/src/enemy/vaatiWrath.c b/src/enemy/vaatiWrath.c index af31d2f8..2d8c3619 100644 --- a/src/enemy/vaatiWrath.c +++ b/src/enemy/vaatiWrath.c @@ -365,7 +365,7 @@ void VaatiWrathType0Action6(Entity* this) { type1->frame &= 0xfd; } } else { - if ((type1->frame & 0x80) != 0) { + if ((type1->frame & ANIM_DONE) != 0) { sub_0804235C(this); } } @@ -546,7 +546,7 @@ void VaatiWrathType0ActionC(Entity* this) { entity->frame &= 0xfe; InitAnimationForceUpdate(this, 9); } else { - if (entity->frame & 0x80) { + if (entity->frame & ANIM_DONE) { sub_0804235C(this); } } @@ -617,7 +617,7 @@ void sub_08041BE8(Entity* this) { void sub_08041CD0(Entity* this) { GetNextFrame(((VaatiWrathHeapStruct*)this->myHeap)->type2); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { if (this->actionDelay != 0) { this->actionDelay--; } else { @@ -964,7 +964,7 @@ u32 sub_080422C0(Entity* this, u32 unk1) { type1->frame &= 0xfb; InitAnimationForceUpdate(this, 3); } else { - if (type1->frame & 0x80) { + if (type1->frame & ANIM_DONE) { InitAnimationForceUpdate(this, 0); type1->subAction = 0; InitializeAnimation(type1, 0xc); diff --git a/src/enemy/vaatiWrathEye.c b/src/enemy/vaatiWrathEye.c index 690d8ee6..784be12b 100644 --- a/src/enemy/vaatiWrathEye.c +++ b/src/enemy/vaatiWrathEye.c @@ -56,7 +56,7 @@ void VaatiWrathEyeAction0(Entity* this) { void VaatiWrathEyeAction1(Entity* this) { sub_080485D8(this); GetNextFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->action = 2; InitializeAnimation(this, 1); } @@ -105,7 +105,7 @@ void VaatiWrathEyeAction4(Entity* this) { } } else { GetNextFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->action = 5; this->actionDelay = 0; } @@ -137,7 +137,7 @@ void VaatiWrathEyeAction6(Entity* this) { InitializeAnimation(this, 6); } } else { - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 7; this->actionDelay = 120; this->field_0xf = 0; @@ -193,7 +193,7 @@ void VaatiWrathEyeAction8(Entity* this) { void VaatiWrathEyeAction9(Entity* this) { sub_080485FC(this); GetNextFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->action = 4; this->actionDelay = 1; this->parent->field_0x7a.HALF.HI = (this->parent->field_0x7a.HALF.HI & 0xf) | (1 << this->type); diff --git a/src/enemy/wallMaster.c b/src/enemy/wallMaster.c index 7f08b67e..b9377a19 100644 --- a/src/enemy/wallMaster.c +++ b/src/enemy/wallMaster.c @@ -112,7 +112,7 @@ void sub_0802A610(Entity* this) { GetNextFrame(this); sub_0802A7D0(this); - flags = this->frame & 0x80; + flags = this->frame & ANIM_DONE; if (flags) { this->action = 4; this->actionDelay = 0x1e; @@ -154,7 +154,7 @@ void sub_0802A69C(Entity* this) { /* sigh... */ GetNextFrame(this); - flags = this->frame & 0x80; + flags = this->frame & ANIM_DONE; if (flags) { this->action = 6; this->actionDelay = 0x1e; @@ -193,7 +193,7 @@ void sub_0802A78C(Entity* this) { void sub_0802A7D0(Entity* this) { u32 unk = gUnk_080CD0B0[(this->field_0x7c.BYTES.byte1++ >> 3) & 7] + 0x100; - sub_0805EC9C(this, unk, unk, 0); + SetAffineInfo(this, unk, unk, 0); } // clang-format off void (*const WallMaster_Functions[])(Entity*) = { diff --git a/src/enemy/wallMaster2.c b/src/enemy/wallMaster2.c index 3ee61f51..989097fe 100644 --- a/src/enemy/wallMaster2.c +++ b/src/enemy/wallMaster2.c @@ -131,7 +131,7 @@ void sub_0802CE68(Entity* this) { } sub_0802CFD8(this); GetNextFrame(this); - frames = this->frame & 0x80; + frames = this->frame & ANIM_DONE; if (frames) { this->action = 4; this->actionDelay = 30; @@ -169,7 +169,7 @@ ASM_FUNC("asm/non_matching/wallMaster2/sub_0802CF8C.inc", void sub_0802CF8C(Enti void sub_0802CFD8(Entity* this) { u32 unk = gUnk_080CD740[(this->field_0x7a.HALF.LO++ >> 3) & 7]; - sub_0805EC9C(this, (s16)this->field_0x74.HWORD + unk, 0x100 + unk, this->field_0x76.HWORD); + SetAffineInfo(this, (s16)this->field_0x74.HWORD + unk, 0x100 + unk, this->field_0x76.HWORD); } // clang-format off diff --git a/src/enemy/waterDrop.c b/src/enemy/waterDrop.c index 39c329a2..629c54cd 100644 --- a/src/enemy/waterDrop.c +++ b/src/enemy/waterDrop.c @@ -56,7 +56,7 @@ void sub_0802A2B4(Entity* this) { void sub_0802A2FC(Entity* this) { GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { DeleteEntity(this); } else if (this->frame & 1) { COLLISION_OFF(this); diff --git a/src/enemy/wisp.c b/src/enemy/wisp.c index 94943d52..213453c2 100644 --- a/src/enemy/wisp.c +++ b/src/enemy/wisp.c @@ -69,7 +69,7 @@ void Wisp_OnCollision(Entity* this) { } void Wisp_OnGrabbed(Entity* this) { - if (sub_0806F520() != 0) { + if (sub_0806F520(this)) { gUnk_080CEB98[this->subAction](this); } } diff --git a/src/entity.c b/src/entity.c index 4bd014e5..d696050c 100644 --- a/src/entity.c +++ b/src/entity.c @@ -9,15 +9,14 @@ extern u8 gUnk_081091F8[]; extern u8 gUnk_081091EE[]; extern u8 gUpdateVisibleTiles; extern Manager gUnk_02033290; -void sub_0805ED30(void); +void UpdatePlayerInput(void); void ClearHitboxList(void); void sub_0805EE88(void); void ClearAllDeletedEntities(void); void DeleteAllEntities(void); void sub_0805E98C(void); -extern void sub_0806FE84(Entity*); +extern void UnloadOBJPalette2(Entity*); extern void sub_08017744(Entity*); -extern void UnloadHitbox(Entity*); extern void sub_0804AA1C(Entity*); void ClearDeletedEntity(Entity*); @@ -64,8 +63,8 @@ void sub_0805E248(void) { gUpdateVisibleTiles = 0; } -void sub_0805E374(Entity* e) { - u8 r3 = gRoomTransition.player_status.field_0x24[8]; +void SetDefaultPriorityForKind(Entity* e) { + u8 r3 = gRoomTransition.entity_update_type; u8* array = gUnk_081091F8; if (r3 != 2) { @@ -201,7 +200,7 @@ void UpdateEntities(void) { gRoomVars.filler1[0] = gRoomVars.field_0x4; gRoomVars.field_0x4 = 0; - sub_0805ED30(); + UpdatePlayerInput(); UpdatePriority(); ClearHitboxList(); sub_0806F0A4(); @@ -232,7 +231,7 @@ void EraseAllEntities(void) { } extern Entity gUnk_030015A0[0x48]; -extern Entity gUnk_03003BE0; +extern Entity gCarryEntities; NONMATCH("asm/non_matching/GetEmptyEntity.inc", Entity* GetEmptyEntity()) { u8 flags_ip; @@ -263,7 +262,7 @@ NONMATCH("asm/non_matching/GetEmptyEntity.inc", Entity* GetEmptyEntity()) { ClearDeletedEntity(ptr); return ptr; } - } while (++ptr < &gUnk_03003BE0); + } while (++ptr < &gCarryEntities); flags_ip = 0; rv = NULL; @@ -343,9 +342,9 @@ void DeleteEntity(Entity* ent) { if (ent->next) { UnloadGFXSlots(ent); UnloadOBJPalette(ent); - sub_0806FE84(ent); + UnloadOBJPalette2(ent); sub_080788E0(ent); - sub_08078954(ent); + FreeCarryEntity(ent); sub_0805EC60(ent); sub_08017744(ent); ReleaseTransitionManager(ent); @@ -437,15 +436,15 @@ void ReleaseTransitionManager(void* mgr) { } } -extern Entity gUnk_020369F0; +extern LinkedList gEntityListsBackup; void sub_0805E958(void) { - MemCopy(&gEntityLists, &gUnk_020369F0, 0x48); + MemCopy(&gEntityLists, &gEntityListsBackup, 0x48); sub_0805E98C(); } void sub_0805E974(void) { - MemCopy(&gUnk_020369F0, &gEntityLists, 0x48); + MemCopy(&gEntityListsBackup, &gEntityLists, 0x48); } void sub_0805E98C(void) { @@ -479,7 +478,7 @@ void DeleteSleepingEntities(void) { list = &gEntityLists[0]; do { - for (ent = list->first; (u32)ent != (u32)list; ent = next) { + for (ent = list->first; (intptr_t)ent != (intptr_t)list; ent = next) { next = ent->next; if (ent->flags & ENT_DELETED) DeleteEntityAny(ent); @@ -501,7 +500,7 @@ void AppendEntityToList(Entity* entity, u32 listIndex) { } else { gManagerCount++; } - sub_0805E374(entity); + SetDefaultPriorityForKind(entity); } void PrependEntityToList(Entity* entity, u32 listIndex) { diff --git a/src/fileselect.c b/src/fileselect.c index 93355380..b0ce954b 100644 --- a/src/fileselect.c +++ b/src/fileselect.c @@ -106,12 +106,12 @@ void sub_08051458(void); void CreateDialogBox(u32 arg0, u32 arg1) { u32 sfx; - struct_080FC844 var0; + Font var0; sub_08050384(); MemCopy(&gUnk_080FC844, &var0, sizeof(gUnk_080FC844)); sub_08056FEC(arg1, gUnk_020227E8); - var0.unk10 |= gUnk_080FC85C[arg0][0] << 0xC; + var0.gfx_src |= gUnk_080FC85C[arg0][0] << 0xC; sub_0805F46C(gUnk_080FC85C[arg0][1], &var0); sfx = gUnk_080FC85C[arg0][2]; if (sfx) { @@ -296,7 +296,7 @@ static void sub_0805066C(void) { void sub_0805070C(void) { u32 i; int j; - struct_02036540* var0; + WStruct* var0; char* name; var0 = sub_0805F2C8(); @@ -322,7 +322,7 @@ void sub_0805070C(void) { void sub_08050790(void) { u32 i, j; - struct_02036540* var0; + WStruct* var0; u32 var1; var0 = sub_0805F2C8(); diff --git a/src/game.c b/src/game.c index 717d6b68..7baf9d5c 100644 --- a/src/game.c +++ b/src/game.c @@ -86,7 +86,6 @@ extern void* gAreaMetatiles[]; extern void* gUnk_080B755C[]; extern void** gAreaTable[]; -extern void CreateDialogBox(u32, u32); extern void FinalizeSave(void); extern void ClearArmosData(void); extern void ClearRoomMemory(void); @@ -169,24 +168,6 @@ typedef struct { } struct_08127F94; extern struct_08127F94 gUnk_08127F94[]; -typedef struct { - u16* dest; - void* gfx_dest; - void* buffer_loc; - u32 _c; - u16 gfx_src; - u8 width; - u8 right_align : 1; - u8 sm_border : 1; - u8 unused : 1; - u8 draw_border : 1; - u8 border_type : 4; - u8 fill_type; - u8 _15; - u8 _16; - u8 stylized; -} Font; - typedef struct { u8 dest_off[8]; u8 _8; @@ -408,7 +389,7 @@ static void GameMain_ChangeRoom(void) { sub_0801855C(); } #elif defined(DEMO_JP) - if (gRoomTransition.field_0x2c[5]) + if (gRoomTransition.field_0x2c[4]) CheckAreaDiscovery(); if (gArea.inventoryGfxIdx != 0xff) { sub_0801855C(); diff --git a/src/interrupts.c b/src/interrupts.c index 5115c45a..c52df16b 100644 --- a/src/interrupts.c +++ b/src/interrupts.c @@ -14,7 +14,7 @@ extern u8 gUnk_03003DE0; extern u8 gUnk_03000C30; extern u8 gUpdateVisibleTiles; -extern Entity gUnk_03003BE0; +extern Entity gCarryEntities; extern Entity* gPlayerClones[3]; extern u16 gUnk_080B2CD8[]; @@ -334,7 +334,7 @@ void sub_080171F0(void) { gPlayerState.mobility = 0; gPlayerState.speed_modifier = 0; gPlayerState.field_0xaa = 0; - MemClear(&gUnk_03003BE0, 0x8c); + MemClear(&gCarryEntities, 0x8c); gPlayerEntity.spriteOffsetY = gPlayerState.field_0x3f; gPlayerState.field_0x3f = 0; sub_0807B0C8(); diff --git a/src/item/itemBomb.c b/src/item/itemBomb.c index 96d8585e..5f20f8d7 100644 --- a/src/item/itemBomb.c +++ b/src/item/itemBomb.c @@ -29,7 +29,7 @@ void sub_08075FF8(ItemBehavior* this, u32 arg1) { } maxBombs = this->behaviorID == 7 ? 3 : 1; if (maxBombs > bombCount) { - entity = CreatePlayerBomb(this, 2); + entity = CreatePlayerItemWithParent(this, 2); if (entity != NULL) { tmp = &gUnk_0811BDAC[gPlayerEntity.animationState & 6]; // TODO fix array access @@ -41,8 +41,8 @@ void sub_08075FF8(ItemBehavior* this, u32 arg1) { } } } - sub_08077E78(this, arg1); + DeletePlayerItem(this, arg1); } -// TODO arg1 type not yet known, called by sub_080761C0 and sub_080762D8 +// TODO arg1 type not yet known, called by ItemPickupCheck and sub_080762D8 ASM_FUNC("asm/non_matching/itemBomb/sub_08076088.inc", void sub_08076088(ItemBehavior* this, void* arg1)) diff --git a/src/item/itemBoomerang.c b/src/item/itemBoomerang.c index eb6c67cc..9e402d00 100644 --- a/src/item/itemBoomerang.c +++ b/src/item/itemBoomerang.c @@ -15,7 +15,7 @@ void sub_08075D2C(ItemBehavior* this, u32 arg1) { sub_08077D38(this, arg1); gPlayerState.field_0x3[1] |= 8; } else { - sub_08077E78(this, arg1); + DeletePlayerItem(this, arg1); } } @@ -30,5 +30,5 @@ void sub_08075D88(ItemBehavior* this, u32 arg1) { return; } } - sub_08077E78(this, arg1); + DeletePlayerItem(this, arg1); } diff --git a/src/item/itemBow.c b/src/item/itemBow.c index 87e4544d..bc8244f9 100644 --- a/src/item/itemBow.c +++ b/src/item/itemBow.c @@ -16,7 +16,7 @@ void sub_08075DF4(ItemBehavior* this, u32 arg1) { sub_08077D38(this, arg1); gPlayerState.field_0x1f[2] = 1; } else { - sub_08077E78(this, arg1); + DeletePlayerItem(this, arg1); } } @@ -39,7 +39,7 @@ void sub_08075E40(ItemBehavior* this, u32 arg1) { } } gPlayerState.field_0x1f[2] = 0; - sub_08077E78(this, arg1); + DeletePlayerItem(this, arg1); } void sub_08075EC0(ItemBehavior* this, u32 arg1) { @@ -51,7 +51,7 @@ void sub_08075EC0(ItemBehavior* this, u32 arg1) { if (iVar2 != 0 && arrowCount != 0) { if (((gPlayerState.field_0x3[1] & 0x80) != 0) || (gPlayerState.field_0x1f[2] == 0)) { gPlayerState.field_0x1f[2] = 0; - sub_08077E78(this, arg1); + DeletePlayerItem(this, arg1); } } else { gPlayerState.field_0xa = (8 >> arg1) | gPlayerState.field_0xa; @@ -70,7 +70,7 @@ void sub_08075F38(ItemBehavior* this, u32 arg1) { } } else { gPlayerState.field_0x1f[2] = 0; - sub_08077E78(this, arg1); + DeletePlayerItem(this, arg1); } } @@ -86,5 +86,5 @@ void sub_08075F84(ItemBehavior* this, u32 arg1) { } } gPlayerState.field_0x1f[2] = 0; - sub_08077E78(this, arg1); + DeletePlayerItem(this, arg1); } diff --git a/src/item/itemDebug.c b/src/item/itemDebug.c index f8790cde..deec580d 100644 --- a/src/item/itemDebug.c +++ b/src/item/itemDebug.c @@ -1,9 +1,9 @@ #include "item.h" extern Entity* sub_08077BD4(ItemBehavior*); -extern void sub_08077E78(ItemBehavior*, u32); +extern void DeletePlayerItem(ItemBehavior*, u32); void ItemDebug(ItemBehavior* beh, u32 arg1) { sub_08077BD4(beh); - sub_08077E78(beh, arg1); + DeletePlayerItem(beh, arg1); } diff --git a/src/item/itemGustJar.c b/src/item/itemGustJar.c index 7393229f..ea3cd42d 100644 --- a/src/item/itemGustJar.c +++ b/src/item/itemGustJar.c @@ -18,12 +18,12 @@ void sub_08076DF4(ItemBehavior* this, u32 arg1) { this->field_0x5[5] = gPlayerEntity.animationState; this->field_0x5[4] |= 0x80; this->field_0x5[4]++; - gPlayerState.field_0x1d = 1; + gPlayerState.gustJarSpeed = 1; *(u32*)&gPlayerEntity.field_0x74 = 0; gPlayerState.field_0x1c = 1; sub_08077BB8(this); } else { - sub_08077E78(this, arg1); + DeletePlayerItem(this, arg1); } } @@ -31,7 +31,7 @@ void sub_08076E60(ItemBehavior* this, u32 arg1) { Entity* playerItem; if ((gPlayerState.field_0x1c & 0xf) == 0) { - sub_08077E78(this, arg1); + DeletePlayerItem(this, arg1); } if ((this->field_0x5[9] & 0x80) != 0) { this->stateID = 2; @@ -48,18 +48,18 @@ void sub_08076E60(ItemBehavior* this, u32 arg1) { void sub_08076EC8(ItemBehavior* this, u32 arg1) { if ((gPlayerState.field_0x1c & 0xf) == 0) { - sub_08077E78(this, arg1); + DeletePlayerItem(this, arg1); return; } if (sub_08077EFC(this)) { u32 val; if (this->field_0x5[2] > 0xef) { - gPlayerState.field_0x1d = 3; + gPlayerState.gustJarSpeed = 3; } else if (++this->field_0x5[2] > 0x77) { - gPlayerState.field_0x1d = 2; + gPlayerState.gustJarSpeed = 2; } else { - gPlayerState.field_0x1d = 1; + gPlayerState.gustJarSpeed = 1; } if (gPlayerEntity.subAction == 0x1b) { @@ -93,7 +93,7 @@ void sub_08076F64(ItemBehavior* this, u32 arg1) { if (this->field_0x5[3]) { this->field_0x5[3] = 0; this->field_0x5[2] = 0; - gPlayerState.field_0x1d = 1; + gPlayerState.gustJarSpeed = 1; player = &gPlayerEntity; *(u32*)&player->field_0x74 = 0; gPlayerState.field_0x1c = 1; @@ -137,7 +137,7 @@ void sub_08076F64(ItemBehavior* this, u32 arg1) { if (this->field_0x5[9] & 1) { gPlayerState.field_0x1c = 5; gPlayerEntity.field_0x70.WORD = 0; - if (gPlayerState.field_0x1d) { + if (gPlayerState.gustJarSpeed) { CreatePlayerItem(0x11, 0, 0, 0); } } @@ -157,7 +157,7 @@ void sub_08076F64(ItemBehavior* this, u32 arg1) { case 7: sub_08077DF4(this, 0x514); gPlayerState.field_0x1c = 3; - gPlayerState.field_0x1d = 0; + gPlayerState.gustJarSpeed = 0; break; case 1: case 2: @@ -169,7 +169,7 @@ void sub_08076F64(ItemBehavior* this, u32 arg1) { case0: gPlayerState.field_0x1c = 0; gPlayerEntity.field_0x70.WORD = 0; - sub_08077E78(this, arg1); + DeletePlayerItem(this, arg1); break; } } diff --git a/src/item/itemJarEmpty.c b/src/item/itemJarEmpty.c index 11a27fcc..c50dee06 100644 --- a/src/item/itemJarEmpty.c +++ b/src/item/itemJarEmpty.c @@ -62,7 +62,7 @@ void sub_08077640(ItemBehavior* this, u32 arg1) { UpdateItemAnim(this); if ((this->field_0x5[9] & 0x80) != 0) { gPlayerEntity.flags |= ENT_COLLIDE; - sub_08077E78(this, arg1); + DeletePlayerItem(this, arg1); } } @@ -70,6 +70,6 @@ void sub_0807766C(ItemBehavior* this, u32 arg1) { UpdateItemAnim(this); if ((this->field_0x5[9] & 0x80) != 0) { gPlayerEntity.flags |= ENT_COLLIDE; - sub_08077E78(this, arg1); + DeletePlayerItem(this, arg1); } } diff --git a/src/item/itemLantern.c b/src/item/itemLantern.c index e4aabd31..c05b8d01 100644 --- a/src/item/itemLantern.c +++ b/src/item/itemLantern.c @@ -27,7 +27,7 @@ void sub_08075A0C(ItemBehavior* this, u32 arg1) { ForceEquipItem(ITEM_LANTERN_OFF, itemSlot); gPlayerState.flags &= ~PL_USE_LANTERN; ForceEquipItem(ITEM_LANTERN_OFF, itemSlot); - sub_08077E78(this, arg1); + DeletePlayerItem(this, arg1); } else { this->field_0x5[4] |= 0x80; sub_08077D38(this, arg1); @@ -79,7 +79,7 @@ void sub_08075B54(ItemBehavior* this, u32 arg1) { if (!(((sub_08077F10(this) == 0) && (itemSlot < 2)) || (gPlayerState.jump_status != 0))) { ForceEquipItem(ITEM_LANTERN_OFF, itemSlot); gPlayerState.flags &= ~PL_USE_LANTERN; - sub_08077E78(this, arg1); + DeletePlayerItem(this, arg1); SoundReq(SFX_ITEM_LANTERN_OFF); } else { if (((gPlayerState.queued_action != PLAYER_ROLL) && (gPlayerEntity.frameIndex < 0x37)) && @@ -100,8 +100,8 @@ void sub_08075B54(ItemBehavior* this, u32 arg1) { } sub_08077DF4(this, 0x60c); bVar1 = (8 >> (arg1)); - gPlayerState.field_0xa = bVar1 | gPlayerState.field_0xa; - gPlayerState.keepFacing = bVar1 | gPlayerState.keepFacing; + gPlayerState.field_0xa |= bVar1; + gPlayerState.keepFacing |= bVar1; } } } diff --git a/src/item/itemMoleMitts.c b/src/item/itemMoleMitts.c index 355f69df..610c718f 100644 --- a/src/item/itemMoleMitts.c +++ b/src/item/itemMoleMitts.c @@ -41,7 +41,7 @@ void sub_08077130(ItemBehavior* this, u32 arg1) { this->stateID = 1; } } else { - sub_08077E78(this, arg1); + DeletePlayerItem(this, arg1); gPlayerState.field_0x3c[1] = 0; } } @@ -51,7 +51,7 @@ void sub_080771C8(ItemBehavior* this, u32 arg1) { UpdateItemAnim(this); if ((this->field_0x5[9] & 0x80) != 0) { - sub_08077E78(this, arg1); + DeletePlayerItem(this, arg1); gPlayerState.field_0x3c[1] = 0; } else { if (((this->field_0x5[9] & 0x20) != 0) && (this->field_0x5[3] == 0xff)) { @@ -94,7 +94,7 @@ void sub_08077448(ItemBehavior* this, u32 arg1) { UpdateItemAnim(this); if ((this->field_0x5[9] & 0x80) != 0) { gPlayerState.field_0x3c[1] = 0; - sub_08077E78(this, arg1); + DeletePlayerItem(this, arg1); } } diff --git a/src/item/itemOcarina.c b/src/item/itemOcarina.c index fff83945..a536d2d7 100644 --- a/src/item/itemOcarina.c +++ b/src/item/itemOcarina.c @@ -15,7 +15,7 @@ void ItemOcarina(ItemBehavior* this, u32 arg1) { void OcarinaUse(ItemBehavior* this, u32 arg1) { if (gPlayerState.queued_action == PLAYER_ROLL) { - sub_08077E78(this, arg1); + DeletePlayerItem(this, arg1); } else { this->field_0x5[4] |= 0xf; gPlayerEntity.animationState = 0x04; @@ -44,7 +44,7 @@ NONMATCH("asm/non_matching/ocarina/OcarinaUpdate.inc", void OcarinaUpdate(ItemBe gUnk_02034490.unk0 = 0; CreateBird(); ResetPlayerEventPriority(); - sub_08077E78(this, arg1); + DeletePlayerItem(this, arg1); } } END_NONMATCH diff --git a/src/item/itemPacciCane.c b/src/item/itemPacciCane.c index 4ea479f5..ada5d308 100644 --- a/src/item/itemPacciCane.c +++ b/src/item/itemPacciCane.c @@ -18,10 +18,10 @@ void sub_08076C98(ItemBehavior* beh, u32 arg1) { void sub_08076CBC(ItemBehavior* beh, u32 arg1) { if ((beh->field_0x5[9] & 0x80) != 0) { - sub_08077E78(beh, arg1); + DeletePlayerItem(beh, arg1); } else { if ((beh->field_0x5[9] & 0x40) != 0) { - CreatePlayerBomb(beh, 0x12); + CreatePlayerItemWithParent(beh, 0x12); } UpdateItemAnim(beh); } diff --git a/src/item/itemPegasusBoots.c b/src/item/itemPegasusBoots.c index b361f0fe..2a32cfd9 100644 --- a/src/item/itemPegasusBoots.c +++ b/src/item/itemPegasusBoots.c @@ -26,7 +26,7 @@ void ItemPegasusBoots(ItemBehavior* this, u32 arg1) { if (gPlayerEntity.field_0x7a.HWORD != 0) { gPlayerState.dash_state = 0; gPlayerState.field_0xe = 0; - sub_08077E78(this, arg1); + DeletePlayerItem(this, arg1); } else { bVar1 = this->field_0x5[2] - 1; this->field_0x5[2] = bVar1; @@ -78,7 +78,7 @@ void sub_080768F8(ItemBehavior* this, u32 arg1) { } else { gPlayerState.dash_state = 0; gPlayerState.field_0xe = 0; - sub_08077E78(this, arg1); + DeletePlayerItem(this, arg1); } } @@ -95,7 +95,7 @@ void sub_08076964(ItemBehavior* this, u32 arg1) { if ((++gPlayerState.dash_state) == 0x1e) { if ((gPlayerState.flags & PL_FLAGS2) != 0) { gPlayerState.dash_state = 0; - sub_08077E78(this, arg1); + DeletePlayerItem(this, arg1); return; } gPlayerState.dash_state = 0x40; @@ -105,7 +105,7 @@ void sub_08076964(ItemBehavior* this, u32 arg1) { (gPlayerState.skills & SKILL_DASH_ATTACK) != 0) { gPlayerState.field_0xab = 3; sub_08077DF4(this, 0x298); - bombEntity = CreatePlayerBomb(this, 0xc); + bombEntity = CreatePlayerItemWithParent(this, 0xc); if (bombEntity != NULL) { if (ItemIsSword(gSave.stats.itemButtons[SLOT_A]) != 0) { uVar3 = gSave.stats.itemButtons[SLOT_A]; @@ -127,7 +127,7 @@ void sub_08076964(ItemBehavior* this, u32 arg1) { } } gPlayerState.dash_state = 0; - sub_08077E78(this, arg1); + DeletePlayerItem(this, arg1); } void sub_08076A88(ItemBehavior* this, u32 arg1) { @@ -170,5 +170,5 @@ void sub_08076A88(ItemBehavior* this, u32 arg1) { } } gPlayerState.dash_state = 0; - sub_08077E78(this, arg1); + DeletePlayerItem(this, arg1); } diff --git a/src/item/itemRocsCape.c b/src/item/itemRocsCape.c index 3c94d851..486fc90e 100644 --- a/src/item/itemRocsCape.c +++ b/src/item/itemRocsCape.c @@ -55,7 +55,7 @@ void ItemRocsCape(ItemBehavior* this, u32 arg1) { } } } - sub_08077E78(this, arg1); + DeletePlayerItem(this, arg1); } void sub_08076758(ItemBehavior* this, u32 arg1) { @@ -84,6 +84,6 @@ void sub_08076758(ItemBehavior* this, u32 arg1) { } } } else { - sub_08077E78(this, arg1); + DeletePlayerItem(this, arg1); } } diff --git a/src/item/itemShield.c b/src/item/itemShield.c index 6c5a0866..d8cd9ace 100644 --- a/src/item/itemShield.c +++ b/src/item/itemShield.c @@ -30,7 +30,7 @@ void sub_08076D34(ItemBehavior* beh, u32 arg1) { } } else { gPlayerState.field_0x3[0] = 0; - sub_08077E78(beh, arg1); + DeletePlayerItem(beh, arg1); } } @@ -40,6 +40,6 @@ void sub_08076D94(ItemBehavior* beh, u32 arg1) { UpdateItemAnim(beh); } else { gPlayerState.field_0x3[0] = 0; - sub_08077E78(beh, arg1); + DeletePlayerItem(beh, arg1); } } diff --git a/src/item/itemSword.c b/src/item/itemSword.c index cce1e02f..f55a1275 100644 --- a/src/item/itemSword.c +++ b/src/item/itemSword.c @@ -107,7 +107,7 @@ void sub_080754B8(ItemBehavior* this, u32 arg1) { if (gPlayerEntity.frameSpriteSettings & 1) { iVar1 = sub_0807B014(); if (iVar1 && FindEntityByID(PLAYER_ITEM, PLAYER_ITEM_SWORD_BEAM1, 2) == 0) { - CreatePlayerBomb(this, 0xf); + CreatePlayerItemWithParent(this, 0xf); if (iVar1 == 0xf) { gPlayerState.field_0xab = 5; } else { @@ -228,7 +228,7 @@ void sub_08075738(ItemBehavior* this, u32 arg1) { } else { if (((((gPlayerEntity.frameSpriteSettings & 1) != 0) && ((gPlayerState.sword_state & 0x80) == 0)) && ((gPlayerState.skills & SKILL_FOURSWORD) != 0))) { - Entity* bombEnt = CreatePlayerBomb(this, 0x14); + Entity* bombEnt = CreatePlayerItemWithParent(this, 0x14); if (bombEnt) { bombEnt->animationState = (gPlayerEntity.animationState & 6) | 0x80; } @@ -313,5 +313,5 @@ void sub_080759B8(ItemBehavior* this, u32 arg1) { gPlayerState.flags &= ~PL_SWORD_THRUST; gPlayerState.sword_state = 0; gPlayerState.item = NULL; - sub_08077E78(this, arg1); + DeletePlayerItem(this, arg1); } diff --git a/src/item/itemTryPickupObject.c b/src/item/itemTryPickupObject.c index 1eb0c3e2..c4addc70 100644 --- a/src/item/itemTryPickupObject.c +++ b/src/item/itemTryPickupObject.c @@ -9,7 +9,7 @@ void ItemTryPickupObject(ItemBehavior* this, u32 arg1) { gUnk_0811BDB4[this->stateID](this, arg1); } -ASM_FUNC("asm/non_matching/itemTryPickupObject/sub_080761C0.inc", void sub_080761C0(ItemBehavior* this, u32 arg1)) +ASM_FUNC("asm/non_matching/itemTryPickupObject/ItemPickupCheck.inc", void ItemPickupCheck(ItemBehavior* this, u32 arg1)) void sub_080762C4(ItemBehavior* this, u32 arg1, u8 arg2, u32 arg3) { this->field_0x18 = arg1; @@ -61,6 +61,6 @@ void sub_0807660C(ItemBehavior* this, u32 arg1) { UpdateItemAnim(this); if ((--this->field_0x5[2] == 0xff) || (gPlayerState.field_0x0[1] == 0)) { gPlayerState.field_0x0[1] = 0; - sub_08077E78(this, arg1); + DeletePlayerItem(this, arg1); } } diff --git a/src/manager/manager1A.c b/src/manager/manager1A.c index 92a56415..ae167838 100644 --- a/src/manager/manager1A.c +++ b/src/manager/manager1A.c @@ -137,8 +137,8 @@ u32 sub_0805B1CC(Manager1A* this) { u32 re = 0; if (CheckPlayerProximity(this->unk_20, this->unk_22, this->unk_24, this->unk_26)) { if ((gPlayerState.flags & PL_DROWNING) && (gPlayerState.flags & PL_BUSY)) { - gPlayerState.flags |= PL_FLAGS8000; - } else if (gPlayerState.flags & PL_FLAGS8000) { + gPlayerState.flags |= PL_PIT_IS_EXIT; + } else if (gPlayerState.flags & PL_PIT_IS_EXIT) { re = 1; } } diff --git a/src/manager/manager4.c b/src/manager/manager4.c index 7568960d..7ed53807 100644 --- a/src/manager/manager4.c +++ b/src/manager/manager4.c @@ -12,7 +12,7 @@ void Manager4_Main(Manager* this) { gUnk_08107C70[this->action](this); } -extern void sub_080805F8(void); +extern void UpdateIsDiggingCave(void); extern DiggingCaveEntrance* sub_08057AA8(DiggingCaveEntrance*, int); @@ -21,8 +21,8 @@ void sub_0805786C(Manager* this) { u8 room; u8 area; u16 uVar = 0x81 << 7; - sub_080805F8(); - if (gUnk_03004030.unk_08 != 0) { + UpdateIsDiggingCave(); + if (gUnk_03004030.isDiggingCave != 0) { if (gUnk_03004030.unk_00 == 0) { gUnk_03004030.unk_0a = 0xFF; room = gRoomControls.room; @@ -66,7 +66,7 @@ void sub_08057A18(Manager*, DiggingCaveEntrance*); u32 sub_0805795C(Manager* this, DiggingCaveEntrance* entr) { u16 offsetX, offsetY, offsetX2, offsetY2; u32 tmp, tmp2; - if (gUnk_03004030.unk_08) { + if (gUnk_03004030.isDiggingCave) { offsetX = gPlayerEntity.x.HALF.HI - gRoomControls.origin_x; offsetY = gPlayerEntity.y.HALF.HI - gRoomControls.origin_y; offsetX2 = (entr->unk_00 & 0x3F) * 16 + 8; @@ -105,10 +105,10 @@ void sub_08057A18(Manager* this, DiggingCaveEntrance* entr) { gUnk_03004030.unk_06 = gPlayerEntity.y.HALF.HI - gRoomControls.origin_y - ((entr->unk_00 & 0xFC0) >> 2); #ifndef EU - tmp = gUnk_03004030.unk_08; + tmp = gUnk_03004030.isDiggingCave; if (!tmp) { if ((entr->target_room | 0x80) != gUnk_03004030.unk_0b) { - gUnk_02034480.unk_00 = gUnk_03004030.unk_08; + gUnk_02034480.unk_00 = gUnk_03004030.isDiggingCave; } gUnk_03004030.unk_0b = entr->target_room | 0x80; } diff --git a/src/menu/kinstone_menu.c b/src/menu/kinstone_menu.c index 45850f4d..13d95850 100644 --- a/src/menu/kinstone_menu.c +++ b/src/menu/kinstone_menu.c @@ -15,16 +15,6 @@ #include "enemy.h" #include "functions.h" -typedef struct { - u8 filler0[0x1]; - u8 unk1; - u8 charColor; - u8 bgColor; - u16 unk4; - u16 unk6; - u8* unk8; -} struct_02036540; - extern u32 sub_08000E44(u32); extern void sub_080A3B74(void); extern s32 sub_080A3B48(void); @@ -32,9 +22,9 @@ extern void sub_0805ECEC(u32, u32, u32, u32); extern void sub_0801C2F0(u32, u32); extern void sub_0801E6C8(u32); extern void sub_0801E798(u32); -extern struct_02036540* sub_0805F2C8(void); -extern void sub_0805F300(struct_02036540*); -extern u32 sub_0805F76C(u8*, struct_02036540*); +extern WStruct* sub_0805F2C8(void); +extern void sub_0805F300(WStruct*); +extern u32 sub_0805F76C(u8*, WStruct*); typedef struct { void* sourceAddress; @@ -55,7 +45,7 @@ extern const u8 gGlobalGfxAndPalettes[]; extern u8 gTextGfxBuffer[]; extern u8 gUnk_02002AC0[]; -u32 sub_080A44E0(struct_02036540*, u8*, u32); +u32 sub_080A44E0(WStruct*, u8*, u32); u32 sub_080A4418(u32, u32); u32 sub_080A43DC(u32); u32 sub_080A43A8(u32); @@ -74,13 +64,20 @@ Subtask KinstoneMenu_Type2; Subtask KinstoneMenu_Type3; Subtask KinstoneMenu_Type4; Subtask KinstoneMenu_Type5; + +ASM_FUNC("asm/non_matching/menu/kinstone_menu/sub_080A3B48.inc", s32 sub_080A3B48(void)) + +void sub_080A3B74(void) { + gKinstoneMenu.unk2f = 0; +} + void Subtask_KinstoneMenu(void) { static Subtask* const kinstoneMenuTypes[] = { KinstoneMenu_Type0, KinstoneMenu_Type1, KinstoneMenu_Type2, KinstoneMenu_Type3, KinstoneMenu_Type4, KinstoneMenu_Type5, }; #if !(defined(DEMO_USA) || defined(DEMO_JP)) - gRoomTransition.player_status.field_0x24[8] = 2; + gRoomTransition.entity_update_type = 2; FlushSprites(); kinstoneMenuTypes[gMenu.menuType](); sub_080A3B74(); @@ -90,7 +87,7 @@ void Subtask_KinstoneMenu(void) { UpdateEntities(); DrawEntities(); CopyOAM(); - gRoomTransition.player_status.field_0x24[8] = 0; + gRoomTransition.entity_update_type = 0; #endif } @@ -594,7 +591,7 @@ void KinstoneMenu_080A4468(void) { } u32 KinstoneMenu_080A4494(void) { - struct_02036540* psVar1; + WStruct* psVar1; u8* r1; u32 ret; @@ -617,7 +614,7 @@ u32 KinstoneMenu_080A4494(void) { return ret; } -u32 sub_080A44E0(struct_02036540* param_1, u8* param_2, u32 param_3) { +u32 sub_080A44E0(WStruct* param_1, u8* param_2, u32 param_3) { u32 uVar1; u32 size; diff --git a/src/message.c b/src/message.c index b10d00a1..e4db0a1e 100644 --- a/src/message.c +++ b/src/message.c @@ -31,17 +31,17 @@ enum { }; extern void WriteBit(u32*, u32); -extern void sub_0805EF40(Token* tok, const u8*); +extern bool32 sub_0805EF40(Token* tok, const u8*); extern void RecoverUI(u32 bottomPt, u32 topPt); extern void RefreshUI(void); -extern void sub_0805F918(u32, u32, u32); +extern void sub_0805F918(u32, u32, void*); extern u32 DecToHex(u32, u8*, u32); u32 sub_08056FEC(u32, u8*); u32 GetCharacter(Token* tok); extern void sub_0805EEB4(Token* tok, u32 textIdx); -u16 sub_0805F7DC(u32, u8*); -u32 GetFontStrWith(u8*, u32); +u32 sub_0805F7DC(u32, WStruct*); +u32 GetFontStrWith(Token*, u32); static void StatusUpdate(u32 status); @@ -270,7 +270,7 @@ END_NONMATCH if (gTextRender.renderStatus == RENDER_INIT) { gTextRender.renderStatus = RENDER_UPDATE; gTextRender._98.bytes.b1 = 1; - sub_08056F88(gTextRender.message.unk3, gTextRender._50.unk3); + sub_08056F88(gTextRender.message.unk3, gTextRender._50.bgColor); SoundReq(SFX_TEXTBOX_OPEN); } @@ -315,7 +315,7 @@ static u32 MsgUpdate(void) { } static void TextDispInit(TextRender* this) { - if ((gTextRender.curToken.flags & 1) == 0) { + if (gTextRender.curToken.unk00 == 0) { if (gTextRender._98.bytes.b1 == 0) { StatusUpdate(MSG_DIE); } @@ -398,7 +398,7 @@ NONMATCH("asm/non_matching/textbox/RunTextCommand.inc", /*static*/ u16 RunTextCo StatusUpdate(MSG_CLOSE); break; case 4: - this->_50.unk6 += (this->_50.unk4 - this->_50.unk6 - GetFontStrWith(&this->curToken.flags, 0)) / 2; + this->_50.unk6 += (this->_50.unk4 - this->_50.unk6 - GetFontStrWith(&this->curToken, 0)) / 2; break; case 5: gMessage.unk = this->curToken.param; @@ -427,7 +427,7 @@ NONMATCH("asm/non_matching/textbox/RunTextCommand.inc", /*static*/ u16 RunTextCo break; case 9: gTextRender.message.unk3 = this->curToken.param; - sub_08056F88(this->curToken.param, this->_50.unk3); + sub_08056F88(this->curToken.param, this->_50.bgColor); break; case 10: this->message.textWindowPosY = this->curToken.param; @@ -488,14 +488,14 @@ NONMATCH("asm/non_matching/textbox/RunTextCommand.inc", /*static*/ u16 RunTextCo PaletteChange(this, palette); } } - return sub_0805F7DC(chr, &this->_50.unk0); + return sub_0805F7DC(chr, &this->_50); } END_NONMATCH /*static*/ void PaletteChange(TextRender* this, u32 id) { u32 temp = id % 8; this->_8f = temp; - this->_50.unk2 = temp; + this->_50.charColor = temp; } const u8 gUnk_08107C0F[] = { 0x8, 0x1e, 0x4, 0x12, 0x0 }; @@ -813,12 +813,12 @@ void sub_08056F88(u32 unk_1, u32 unk_2) { uVar1 = unk_1 << 4 | unk_2; if (gTextRender._9c != uVar1) { gTextRender._9c = uVar1; - sub_0805F918(unk_1, unk_2, 0x0600CF60); + sub_0805F918(unk_1, unk_2, (void*)0x0600CF60); } } static void sub_08056FBC(TextRender* ctb) { - sub_08056FEC(ctb->message.field_0x10, &ctb->_66[0x2]); + sub_08056FEC(ctb->message.rupees, &ctb->_66[0x2]); sub_08056FEC(ctb->message.field_0x14, &ctb->_66[0xa]); sub_08056FEC(ctb->message.field_0x18, &ctb->_77[0x1]); sub_08056FEC(ctb->message.field_0x1c, &ctb->_77[0x9]); diff --git a/src/npc/beedle.c b/src/npc/beedle.c index ee5a33ac..ab3d2bae 100644 --- a/src/npc/beedle.c +++ b/src/npc/beedle.c @@ -67,7 +67,7 @@ void sub_0806336C(Entity* this) { void sub_08063390(Entity* this) { GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 1; InitializeAnimation(this, GetAnimationState(this)); sub_08078778(this); diff --git a/src/npc/bladeBrothers.c b/src/npc/bladeBrothers.c index e916f2c1..a8ab63b5 100644 --- a/src/npc/bladeBrothers.c +++ b/src/npc/bladeBrothers.c @@ -53,7 +53,7 @@ void sub_08068A1C(Entity* this) { int offset; this->type2 = this->type; - if (gRoomTransition.player_status.field_0x24[8] != 0) { + if (gRoomTransition.entity_update_type != 0) { offset = 6; bVar1 = 3; @@ -105,7 +105,7 @@ void sub_08068AA4(Entity* this) { } void sub_08068ADC(Entity* this) { - if (gRoomTransition.player_status.field_0x24[8] == 2) { + if (gRoomTransition.entity_update_type == 2) { GetNextFrame(this); } sub_0806FD3C(this); @@ -146,7 +146,7 @@ void sub_08068B84(Entity* this) { if (p = this->actionDelay, gUnk_08111618[p]) { ForceEquipItem(gUnk_08111618[this->actionDelay], 0); } - sub_0805ED14(gUnk_081115EC[this->actionDelay]); + InitPlayerMacro(gUnk_081115EC[this->actionDelay]); } void sub_08068BB4(Entity* this) { diff --git a/src/npc/brocco.c b/src/npc/brocco.c index 176f1e42..3ee53bcd 100644 --- a/src/npc/brocco.c +++ b/src/npc/brocco.c @@ -47,7 +47,7 @@ void sub_08063584(Entity* this) { if (this->field_0xf != 0) { UpdateAnimationSingleFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->field_0xf = 0; } } diff --git a/src/npc/castorWildsStatue.c b/src/npc/castorWildsStatue.c index 189c10c0..9d5e8567 100644 --- a/src/npc/castorWildsStatue.c +++ b/src/npc/castorWildsStatue.c @@ -32,7 +32,7 @@ void CastorWildsStatue(Entity* this) { } void sub_080673C0(Entity* this) { - if (gRoomTransition.player_status.field_0x24[8] != 0) { + if (gRoomTransition.entity_update_type != 0) { this->action = 3; } else { this->action = 1; diff --git a/src/npc/cat.c b/src/npc/cat.c index 9de7337d..8ff4860d 100644 --- a/src/npc/cat.c +++ b/src/npc/cat.c @@ -102,7 +102,7 @@ void sub_080678AC(Entity* this) { sub_08067AAC(this); } else { UpdateAnimationSingleFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { sub_08067B34(this); } } @@ -137,7 +137,7 @@ void sub_08067904(Entity* this) { void sub_0806797C(Entity* this) { UpdateAnimationSingleFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { sub_08067B08(this); } } @@ -166,7 +166,7 @@ void sub_08067A0C(Entity* this) { u8 tmp; UpdateAnimationSingleFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { if (sub_08067D20(this) != 0) { sub_08067B80(this, 5); this->actionDelay = this->actionDelay + 0x14; @@ -186,7 +186,7 @@ void sub_08067A0C(Entity* this) { void sub_08067A78(Entity* this) { UpdateAnimationSingleFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { sub_08067AAC(this); } } diff --git a/src/npc/cucco.c b/src/npc/cucco.c index 73b17303..254fbcbb 100644 --- a/src/npc/cucco.c +++ b/src/npc/cucco.c @@ -78,7 +78,7 @@ void Cucco_Idle(Entity* this) { InitAnimationForceUpdate(this, (Random() & 1) + 2); } - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 1; this->subAction = 0; } diff --git a/src/npc/dog.c b/src/npc/dog.c index b5924d68..e54e6477 100644 --- a/src/npc/dog.c +++ b/src/npc/dog.c @@ -119,7 +119,7 @@ void sub_08069D00(Entity* this) { this->field_0x6a.HALF.HI = 8; sub_0806A028(this); if (0x1f < this->animIndex) { - if ((this->frame & 0x80) == 0) { + if ((this->frame & ANIM_DONE) == 0) { return; } this->field_0x6a.HALF.HI = 8; @@ -197,7 +197,7 @@ void sub_08069E50(Entity* this) { sub_0806A028(this); UpdateAnimationSingleFrame(this); if (this->animIndex > 0x1f) { - if ((this->frame & 0x80) == 0) { + if ((this->frame & ANIM_DONE) == 0) { return; } this->field_0x6a.HALF.HI = 8; diff --git a/src/npc/drLeft.c b/src/npc/drLeft.c index d4798164..ba3005a6 100644 --- a/src/npc/drLeft.c +++ b/src/npc/drLeft.c @@ -40,7 +40,7 @@ void sub_0806BFD8(Entity* this) { } void sub_0806C00C(Entity* this, ScriptExecutionContext* context) { - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { context->condition = 1; } else { context->condition = 0; diff --git a/src/npc/festari.c b/src/npc/festari.c index 2af31802..8dbc8274 100644 --- a/src/npc/festari.c +++ b/src/npc/festari.c @@ -45,7 +45,7 @@ void sub_0805FE48(Entity* this) { } UpdateAnimationSingleFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { switch (this->animIndex) { case 8: case 10: diff --git a/src/npc/goronMerchant.c b/src/npc/goronMerchant.c index a0d29023..3cb1a668 100644 --- a/src/npc/goronMerchant.c +++ b/src/npc/goronMerchant.c @@ -25,7 +25,7 @@ void GoronMerchant(Entity* this) { } void sub_08069584(Entity* this) { - if (gRoomTransition.player_status.field_0x24[8] != 0) { + if (gRoomTransition.entity_update_type != 0) { this->action = 3; } else { this->action = 1; @@ -59,7 +59,7 @@ void sub_080695E8(Entity* this) { } void sub_0806961C(Entity* this) { - if (gRoomTransition.player_status.field_0x24[8] == 2) { + if (gRoomTransition.entity_update_type == 2) { UpdateAnimationSingleFrame(this); } sub_0806FD3C(this); @@ -77,7 +77,7 @@ void sub_08069654(Entity* this) { void sub_08069660(Entity* this) { MessageNoOverlap(0x2c1c, this); - gMessage.field_0x10 = (u16)GoronMerchant_GetSalePrice(this); + gMessage.rupees = (u16)GoronMerchant_GetSalePrice(this); } void sub_08069684(void) { diff --git a/src/npc/gregal.c b/src/npc/gregal.c index d503f209..7dfd3ada 100644 --- a/src/npc/gregal.c +++ b/src/npc/gregal.c @@ -97,7 +97,7 @@ void sub_0806CC08(Entity* this) { } void sub_0806CCB4(Entity* this, ScriptExecutionContext* context) { - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { context->condition = 1; } else { context->condition = 0; diff --git a/src/npc/kid.c b/src/npc/kid.c index 0375b162..f23e9b81 100644 --- a/src/npc/kid.c +++ b/src/npc/kid.c @@ -270,15 +270,18 @@ void sub_080627E8(Entity* this, ScriptExecutionContext* context) { sub_0807BA8C(0x64d, 1); } -NONMATCH("asm/non_matching/kid/Kid_Head.inc", void Kid_Head(Entity* this)) { - s32 iVar1; +void Kid_Head(Entity* this) { + u32 uVar1; u32 uVar2; u32 uVar3; u32 uVar4; + u32 uVar5; + u8* ptr; - iVar1 = (u32)this->type * 4; - uVar3 = ((u8)this->frame & 0x1f) + (u32)gUnk_0810C0A0[iVar1]; - uVar4 = (this->frameIndex & 0x1f) + (u32)gUnk_0810C0A0[iVar1 + 1]; + uVar1 = this->type * 4; + ptr = &gUnk_0810C0A0[uVar1]; + uVar3 = ((u8)this->frame & 0x1f) + ptr[0]; + uVar4 = (this->frameIndex & 0x1f) + ptr[1]; switch (this->type) { case 0: case 1: @@ -290,19 +293,20 @@ NONMATCH("asm/non_matching/kid/Kid_Head.inc", void Kid_Head(Entity* this)) { if (uVar2 != 0) { uVar2 = uVar2 + 0x50; } + uVar2--; SetExtraSpriteFrame(this, 0, uVar3); SetExtraSpriteFrame(this, 1, uVar4); - SetExtraSpriteFrame(this, 2, uVar2 - 1); + SetExtraSpriteFrame(this, 2, uVar2); SetSpriteSubEntryOffsetData1(this, 1, 0); SetSpriteSubEntryOffsetData2(this, 1, 2); sub_0807000C(this); break; case 6: - uVar2 = this->frameSpriteSettings & 0xf; + uVar5 = this->frameSpriteSettings & 0xf; if ((this->frameSpriteSettings & 0xf) != 0) { - uVar2 = uVar2 + 0x93; + uVar5 = uVar5 + 0x93; } - SetExtraSpriteFrame(this, 0, uVar2 - 1); + SetExtraSpriteFrame(this, 0, uVar5 - 1); SetExtraSpriteFrame(this, 1, uVar3); SetExtraSpriteFrame(this, 2, uVar4); SetSpriteSubEntryOffsetData1(this, 2, 1); @@ -320,10 +324,9 @@ NONMATCH("asm/non_matching/kid/Kid_Head.inc", void Kid_Head(Entity* this)) { break; } } -END_NONMATCH -NONMATCH("asm/non_matching/kid/sub_08062948.inc", void sub_08062948(Entity* this, ScriptExecutionContext* context)) { - u8 bVar1; +void sub_08062948(Entity* this, ScriptExecutionContext* context) { + s32 bVar1; u16 uVar2; u32 uVar3; s32 iVar4; @@ -332,64 +335,60 @@ NONMATCH("asm/non_matching/kid/sub_08062948.inc", void sub_08062948(Entity* this context->unk_18 += 1; context->unk_12 = (Random() & 0x3f) + 0x20; uVar3 = Random() & 0x18; - bVar1 = this->direction; - if (bVar1 != 8) { - if (bVar1 >= 9) { - if (bVar1 == 0x10) { - if (uVar3 == 0) { - uVar3 = 0x18; - } - } else { - if ((bVar1 == 0x18) && (uVar3 == 8)) { - uVar3 = 0; - } - } - } else { - if ((bVar1 == 0) && (uVar3 == 0x10)) { + switch (this->direction) { + case 0: + if (uVar3 == 0x10) { uVar3 = 8; } - } - } else { - if (uVar3 == 0x18) { - uVar3 = 0x10; - } + break; + case 0x8: + if (uVar3 == 0x18) { + uVar3 = 0x10; + } + break; + case 0x10: + if (uVar3 == 0) { + uVar3 = 0x18; + } + break; + case 0x18: + if ((uVar3 == 8)) { + uVar3 = 0; + } } + this->direction = (u8)uVar3; - uVar3 = sub_0806F5B0(uVar3); - this->animationState = (u8)uVar3; + this->animationState = sub_0806F5B0(uVar3); this->speed = 0x80; } uVar3 = (this->animationState >> 1) + 4; if (uVar3 != this->animIndex) { InitializeAnimation(this, uVar3); - this->field_0x80.HALF.LO = (u16)this->animIndex; + this->field_0x80.HWORD = (u16)this->animIndex; } ProcessMovement0(this); - iVar4 = this->x.HALF.HI - this->field_0x6c.HALF.LO; + iVar4 = this->x.HALF.HI - (s16)this->field_0x6c.HWORD; if (0x10 < iVar4) { - this->x.HALF.HI = this->field_0x6c.HALF.LO + 0x10; + this->x.HALF.HI = this->field_0x6c.HWORD + 0x10; context->unk_12 = 1; } if (iVar4 < -0x10) { - this->x.HALF.HI = this->field_0x6c.HALF.LO + -0x10; + this->x.HALF.HI = this->field_0x6c.HWORD - 0x10; context->unk_12 = 1; } - iVar4 = this->y.HALF.HI - this->field_0x6e.HALF.LO; + iVar4 = this->y.HALF.HI - (s16)this->field_0x6e.HWORD; if (0x10 < iVar4) { - this->y.HALF.HI = this->field_0x6e.HALF.LO + 0x10; + this->y.HALF.HI = this->field_0x6e.HWORD + 0x10; context->unk_12 = 1; } if (iVar4 < -0x10) { - this->y.HALF.HI = this->field_0x6e.HALF.LO + -0x10; + this->y.HALF.HI = this->field_0x6e.HWORD - 0x10; context->unk_12 = 1; } - uVar2 = context->unk_12 - 1; - context->unk_12 = uVar2; - if (uVar2 != 0) { + if (--context->unk_12 != 0) { gActiveScriptInfo.commandSize = 0; } } -END_NONMATCH void sub_08062A48(Entity* this, ScriptExecutionContext* context) { this->field_0x6a.HALF.LO = sub_0801E99C(this); diff --git a/src/npc/mailbox.c b/src/npc/mailbox.c index 755e0b2c..1f7c7835 100644 --- a/src/npc/mailbox.c +++ b/src/npc/mailbox.c @@ -40,7 +40,7 @@ void sub_08063220(Entity* this) { void sub_08063254(Entity* this, u32 unused) { sub_08063280(this, unused); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->action = 3; MessageFromTarget(0); } diff --git a/src/npc/mama.c b/src/npc/mama.c index 57290d94..210bce90 100644 --- a/src/npc/mama.c +++ b/src/npc/mama.c @@ -61,7 +61,7 @@ void Mama_Head(Entity* this) { void sub_0806C4A8(Entity* this, ScriptExecutionContext* context) { s32 tmp; - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { tmp = GetAnimationState(this); if (tmp < 0) { tmp = 3; diff --git a/src/npc/minishEzlo.c b/src/npc/minishEzlo.c index 5216a19f..d501f60f 100644 --- a/src/npc/minishEzlo.c +++ b/src/npc/minishEzlo.c @@ -34,7 +34,7 @@ void sub_0806305C(Entity* this) { this->spriteRendering.b0 = 3; *(u32*)&this->field_0x6c = 0x100; this->field_0x70.WORD = 0x100; - sub_0805EC9C(this, 0x100, 0x100, 0x0); + SetAffineInfo(this, 0x100, 0x100, 0x0); InitAnimationForceUpdate(this, 0x10); this->field_0x80.HWORD = 0x10; SoundReq(SFX_PLY_SHRINKING); diff --git a/src/npc/npc5.c b/src/npc/npc5.c index 2f8ae154..574527d4 100644 --- a/src/npc/npc5.c +++ b/src/npc/npc5.c @@ -270,7 +270,7 @@ void sub_08060D78(Entity* this) { void sub_08060DD0(Entity* this) { UpdateAnimationSingleFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->action = 1; sub_08060E70(this, 0); } @@ -296,7 +296,7 @@ void sub_08060DFC(Entity* this) { void sub_08060E34(Entity* this) { UpdateAnimationSingleFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->action = 2; this->animationState = DirectionToAnimationState(GetFacingDirection(this, &gPlayerEntity)) * 2; sub_08060E70(this, 8); @@ -323,7 +323,7 @@ void sub_08060E94(Entity* this) { void sub_08060EDC(Entity* this) { s32 tmp; - if (((u32)this->animIndex - 0x20 < 0x10) && ((this->frame & 0x80) == 0)) { + if (((u32)this->animIndex - 0x20 < 0x10) && ((this->frame & ANIM_DONE) == 0)) { UpdateAnimationSingleFrame(this); } else { tmp = GetFacingDirection(this, &gPlayerEntity) + this->animationState * -4; @@ -337,7 +337,7 @@ void sub_08060EDC(Entity* this) { } } else { if ((this->animationState & 1) == 0) { - if (((this->frame & 0x80) != 0) && (0xf >= (u32)this->animIndex - 0x20)) { + if (((this->frame & ANIM_DONE) != 0) && (0xf >= (u32)this->animIndex - 0x20)) { sub_08060E70(this, 0); } else { sub_08060E94(this); @@ -528,7 +528,7 @@ u32 sub_08061230(Entity* this) { } } else { UpdateAnimationSingleFrame(this); - if ((this->frame & 0x80) == 0) { + if ((this->frame & ANIM_DONE) == 0) { return 1; } ((UnkHeap*)this->myHeap)->unk_0 &= 0xfe; @@ -551,7 +551,7 @@ void sub_08061358(Entity* this) { switch (this->subAction) { case 0: UpdateAnimationSingleFrame(this); - if ((this->frame & 0x80) == 0) { + if ((this->frame & ANIM_DONE) == 0) { return; } this->subAction = 1; @@ -576,7 +576,7 @@ void sub_08061358(Entity* this) { break; case 2: UpdateAnimationSingleFrame(this); - if ((this->frame & 0x80) == 0) { + if ((this->frame & ANIM_DONE) == 0) { return; } this->animationState = ((this->frame & 0x18) >> 2); @@ -914,7 +914,7 @@ void sub_08061B58(Entity* this) { this->action = 1; InitAnimationForceUpdate(this, 2); } - if (gRoomTransition.player_status.field_0x24[8] == 2) { + if (gRoomTransition.entity_update_type == 2) { UpdateAnimationSingleFrame(this); } sub_0806FD3C(this); diff --git a/src/npc/npc9.c b/src/npc/npc9.c index df8cc07e..6e1ff9f6 100644 --- a/src/npc/npc9.c +++ b/src/npc/npc9.c @@ -29,7 +29,7 @@ void sub_08062B14(Entity* this) { void sub_08062B48(Entity* this) { GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { MessageFromTarget(0xa01); // invalid this->action++; } diff --git a/src/npc/phonograph.c b/src/npc/phonograph.c index dd731979..8643cf95 100644 --- a/src/npc/phonograph.c +++ b/src/npc/phonograph.c @@ -12,7 +12,7 @@ void sub_0806EABC(Entity* this); void sub_0806EABC(Entity* this, u32 param); #endif -extern u32 gUnk_081146B8; +extern Font gUnk_081146B8; extern s8 gUnk_081145E4[]; void Phonograph(Entity* this) { diff --git a/src/npc/picolyteBottle.c b/src/npc/picolyteBottle.c index 6dbf5010..dec3e542 100644 --- a/src/npc/picolyteBottle.c +++ b/src/npc/picolyteBottle.c @@ -175,7 +175,7 @@ void sub_0806E140(PicolyteBottleEntity* this, ScriptExecutionContext* context) { MessageFromTarget(0x421b); } else { MessageFromTarget(0x4218); - gMessage.field_0x10 = this->unk76; + gMessage.rupees = this->unk76; } } else { context->condition = 0; @@ -201,7 +201,7 @@ void sub_0806E1FC(PicolyteBottleEntity* this) { void sub_0806E20C(void) { if (gRoomTransition.field_0x6 != 0) { MessageFromTarget(0x421f); - gMessage.field_0x10 = gRoomTransition.field_0x6; + gMessage.rupees = gRoomTransition.field_0x6; } else { MessageFromTarget(0x4220); } diff --git a/src/npc/pina.c b/src/npc/pina.c index d4eea09e..e1ea0e4b 100644 --- a/src/npc/pina.c +++ b/src/npc/pina.c @@ -49,7 +49,7 @@ void sub_08063AC0(Entity* this) { if (this->field_0xf != 0) { UpdateAnimationSingleFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->field_0xf = 0; } } diff --git a/src/npc/rem.c b/src/npc/rem.c index 3353060d..2315efbd 100644 --- a/src/npc/rem.c +++ b/src/npc/rem.c @@ -73,7 +73,7 @@ void sub_0806A410(Entity* this) { } break; case 1: - if (((this->frame & 0x80) != 0)) { + if (((this->frame & ANIM_DONE) != 0)) { sub_0806A9B0(this, *(ScriptExecutionContext**)&this->cutsceneBeh); } break; @@ -88,14 +88,14 @@ void sub_0806A458(Entity* this) { } break; case 1: - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->subAction = 2; InitializeAnimation(this, 10); ClearLocalFlag(0x62); } break; case 2: - if (((this->frame & 0x80) != 0)) { + if (((this->frame & ANIM_DONE) != 0)) { this->action = 1; this->subAction = 0; this->actionDelay = 0x3c; @@ -108,7 +108,7 @@ void sub_0806A458(Entity* this) { void sub_0806A4CC(Entity* this) { switch (this->subAction) { case 0: - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { if ((u8)(this->animIndex - 8) < 2) { this->subAction = 1; this->field_0x6a.HWORD = 1; @@ -120,7 +120,7 @@ void sub_0806A4CC(Entity* this) { } break; case 1: - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->subAction = 2; InitializeAnimation(this, GetAnimationState(this)); } @@ -143,7 +143,7 @@ void sub_0806A550(Entity* this) { gActiveScriptInfo.syncFlags |= 0x100; SoundReq(SFX_CHEST_OPEN); } - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->action = 5; this->subAction = 0; InitializeAnimation(this, 0xd); @@ -157,7 +157,7 @@ void nullsub_503(Entity* this) { void sub_0806A5C0(Entity* this) { GetNextFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { InitializeAnimation(this, (Random() & 3) + 4); } } @@ -301,7 +301,7 @@ void sub_0806A890(Entity* this) { SetDefaultPriority(this, PRIO_MESSAGE); } GetNextFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { DeleteThisEntity(); } } diff --git a/src/npc/smith.c b/src/npc/smith.c index 02f9c472..ae4394dd 100644 --- a/src/npc/smith.c +++ b/src/npc/smith.c @@ -104,7 +104,7 @@ void sub_080661B0(Entity* this) { void sub_080661BC(Entity* this) { if (this->animIndex == 0xc) { UpdateAnimationSingleFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->field_0x80.HWORD = GetAnimationState(this) + 8; InitAnimationForceUpdate(this, this->field_0x80.HWORD); } diff --git a/src/npc/stockwell.c b/src/npc/stockwell.c index e72cb9c0..d305d835 100644 --- a/src/npc/stockwell.c +++ b/src/npc/stockwell.c @@ -66,7 +66,7 @@ void sub_080650CC(Entity* this) { MessageNoOverlap(confirmMsgId, this); //! @bug itemPrice (r8) is not initialized if gRoomVars.shopItemType == 0 - gMessage.field_0x10 = (u16)itemPrice; + gMessage.rupees = (u16)itemPrice; } else if ((this->frame & 0x40)) { InitializeAnimation(this, gUnk_0810FDB8[Random() & 0xf]); } else { diff --git a/src/npc/tingleSiblings.c b/src/npc/tingleSiblings.c index 82eb9ee2..d7628afe 100644 --- a/src/npc/tingleSiblings.c +++ b/src/npc/tingleSiblings.c @@ -171,7 +171,7 @@ void sub_08064F28(Entity* this, ScriptExecutionContext* context) { } MessageNoOverlap(TingleSiblings_MessageIndices[this->type][uVar5], this); if (iVar4 > 0) { - gMessage.field_0x10 = (u16)iVar4; + gMessage.rupees = (u16)iVar4; } if (CheckRoomFlag(roomFlag) == 0) { diff --git a/src/npc/townMinish.c b/src/npc/townMinish.c index 7f7ffa88..93914b00 100644 --- a/src/npc/townMinish.c +++ b/src/npc/townMinish.c @@ -70,7 +70,7 @@ void sub_0806AC3C(Entity* this) { if (!(this->field_0x68.HALF.HI & 7)) { this->animationState = sub_0806F5B0(this->field_0x68.HALF.HI); - InitializeAnimation(this, (this->animationState / 2) ^ 2); + InitializeAnimation(this, AnimationStateFlip90(this->animationState / 2)); } } diff --git a/src/npc/vaatiReborn.c b/src/npc/vaatiReborn.c index fb59284e..5209022d 100644 --- a/src/npc/vaatiReborn.c +++ b/src/npc/vaatiReborn.c @@ -130,7 +130,7 @@ void VaatiRebornAction1(Entity* this) { } break; case 1: - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->subAction = 2; ChangeObjPalette(this, 0x13f); InitAnimationForceUpdate(this, this->subAction - 1); @@ -153,7 +153,7 @@ void VaatiRebornAction1(Entity* this) { } break; case 3: - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { SetRoomFlag(0); DeleteThisEntity(); } diff --git a/src/npc/zelda.c b/src/npc/zelda.c index 46187a72..0b67a4a8 100644 --- a/src/npc/zelda.c +++ b/src/npc/zelda.c @@ -152,7 +152,7 @@ void sub_08066E80(Entity* this, ScriptExecutionContext* context) { break; case 4: UpdateAnimationSingleFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { gActiveScriptInfo.flags |= 1; return; } diff --git a/src/npcUtils.c b/src/npcUtils.c index 3c042b23..2bd9564a 100644 --- a/src/npcUtils.c +++ b/src/npcUtils.c @@ -178,7 +178,7 @@ u32 sub_0806EED0(Entity* ent) { } u32 sub_0806EEF4(Entity* ent) { - if (ent->frame & 0x80) + if (ent->frame & ANIM_DONE) return sub_0806EF74(ent, 1); return 0; } diff --git a/src/object.c b/src/object.c index da1eb312..060876d7 100644 --- a/src/object.c +++ b/src/object.c @@ -187,7 +187,7 @@ void (*const gObjectFunctions[])(Entity*) = { [OBJECT_B6] = ObjectB6, [WELL] = Well, [WIND_TRIBE_TELEPORTER] = WindTribeTeleporter, - [OBJECT_B9] = ObjectB9, + [CUCCO_MINIGAME] = ObjectB9, [GYORG_BOSS_OBJECT] = GyorgBossObject, [WINDCREST] = Windcrest, [LIT_AREA] = LitArea, diff --git a/src/object/angryStatue.c b/src/object/angryStatue.c index 097f4626..d3fbe01d 100644 --- a/src/object/angryStatue.c +++ b/src/object/angryStatue.c @@ -55,7 +55,7 @@ void AngryStatue_Action2(Entity* this) { EnqueueSFX(SFX_EC); } - } else if ((this->frame & 0x80) != 0) { + } else if ((this->frame & ANIM_DONE) != 0) { this->action = 1; InitializeAnimation(this, this->type); } diff --git a/src/object/beanstalk.c b/src/object/beanstalk.c index 729d0fe0..5dace1cc 100644 --- a/src/object/beanstalk.c +++ b/src/object/beanstalk.c @@ -169,7 +169,7 @@ void Beanstalk_Action1Type0(BeanstalkEntity* this) { void Beanstalk_Action1Type0SubAction0(BeanstalkEntity* this) { UpdateAnimationSingleFrame(super); - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { if (super->actionDelay < 2) { super->actionDelay++; } else { @@ -186,7 +186,7 @@ void Beanstalk_Action1Type0SubAction1(BeanstalkEntity* this) { SoundReq(SFX_198); } UpdateAnimationSingleFrame(super); - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { Entity* entity = CreateObject(BEANSTALK, 1, 0); super->child = entity; if (entity != NULL) { @@ -228,7 +228,7 @@ void Beanstalk_Action1Type2(BeanstalkEntity* this) { super->actionDelay = 0; } } - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { super->child = CreateObject(BEANSTALK, 3, 0); if (super->child != NULL) { super->child->x.HALF.HI = super->x.HALF.HI; @@ -242,7 +242,7 @@ void Beanstalk_Action1Type2(BeanstalkEntity* this) { } void Beanstalk_Action1Type4(BeanstalkEntity* this) { - if ((super->frame & 0x80) == 0) { + if ((super->frame & ANIM_DONE) == 0) { GetNextFrame(super); } } @@ -290,7 +290,7 @@ void Beanstalk_Action1Type7(BeanstalkEntity* this) { super->actionDelay = 0; } GetNextFrame(super); - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { InitializeAnimation(super, (super->type2 - 1) * 3 + 1); } break; diff --git a/src/object/bigIceBlock.c b/src/object/bigIceBlock.c index 09407bc4..79df9f91 100644 --- a/src/object/bigIceBlock.c +++ b/src/object/bigIceBlock.c @@ -87,7 +87,7 @@ void BigIceBlock_Action2(BigIceBlockEntity* this) { super->actionDelay += 1; } tmp = gUnk_081237B0[super->actionDelay >> 5]; - sub_0805EC9C(super, 0x100, tmp, 0); + SetAffineInfo(super, 0x100, tmp, 0); if (super->type != 1) { if (super->type != 2) { SetFlag(this->unk_86); @@ -114,7 +114,7 @@ void sub_08099880(BigIceBlockEntity* this) { sub_08099C18(this); } uVar4 = (0x3c - super->actionDelay) * 0x20 + 0x100; - sub_0805EC9C(super, 0x100, uVar4, 0); + SetAffineInfo(super, 0x100, uVar4, 0); sub_0806FCF4(super, uVar4, 2, 0); obj = CreateObject(SPECIAL_FX, 0x11, 0x40); if (obj != NULL) { diff --git a/src/object/bigPushableLever.c b/src/object/bigPushableLever.c index 5c36d40b..23aa475f 100644 --- a/src/object/bigPushableLever.c +++ b/src/object/bigPushableLever.c @@ -70,7 +70,7 @@ void BigPushableLever_Idle(BigPushableLeverEntity* this) { void BigPushableLever_Pushing(BigPushableLeverEntity* this) { GetNextFrame(super); - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { if (super->type2 == 0) { SetFlag(this->pushedFlag); } else { diff --git a/src/object/bigVortex.c b/src/object/bigVortex.c index 69260c5b..323cbf0b 100644 --- a/src/object/bigVortex.c +++ b/src/object/bigVortex.c @@ -91,7 +91,7 @@ void sub_08098E3C(Entity* this) { InitAnimationForceUpdate(this, this->type); } temp = &gUnk_08123690[this->type & 2]; - sub_0805EC9C(this, temp[0], temp[1], 0); + SetAffineInfo(this, temp[0], temp[1], 0); UpdateAnimationSingleFrame(this); } diff --git a/src/object/bird.c b/src/object/bird.c index cafe1262..3cb75c4b 100644 --- a/src/object/bird.c +++ b/src/object/bird.c @@ -2,22 +2,45 @@ #include "object.h" #include "functions.h" #include "item.h" +#include "message.h" +#include "game.h" -extern void (*const gUnk_08123EC0[])(Entity*); -extern void (*const gUnk_08123EEC[])(Entity*); -extern void (*const gUnk_08123EF4[])(Entity*); -extern void (*const gUnk_08123EFC[])(Entity*); -extern void (*const gUnk_08123F04[])(Entity*); +extern u16 script_EzloTalkOcarina[]; + +void Bird_Type0(Entity*); +void Bird_Type1(Entity*); +void Bird_Type2(Entity*); +void Bird_Type3(Entity*); +void Bird_Type8(Entity*); +void Bird_Type9(Entity*); +void Bird_Type10(Entity*); +void Bird_Type0_Init(Entity*); +void Bird_Type0_Action1(Entity*); +void Bird_Type1_Init(Entity*); +void Bird_Type1_Action1(Entity*); +void Bird_Type1_Action1_Subaction0(Entity*); +void Bird_Type1_Action1_Subaction1(Entity*); +void Bird_Type2_Init(Entity*); +void Bird_Type2_Action1(Entity*); void Bird(Entity* this) { - gUnk_08123EC0[this->type](this); + static void (*const typeFuncs[])(Entity*) = { + Bird_Type0, Bird_Type1, Bird_Type2, Bird_Type3, Bird_Type3, Bird_Type3, + Bird_Type3, Bird_Type3, Bird_Type8, Bird_Type9, Bird_Type10, + }; + typeFuncs[this->type](this); } -void sub_0809CF3C(Entity* this) { - gUnk_08123EEC[this->action](this); +void Bird_Type0(Entity* this) { + static void (*const actionFuncs[])(Entity*) = { + Bird_Type0_Init, + Bird_Type0_Action1, + }; + + actionFuncs[this->action](this); } -void sub_0809CF54(Entity* this) { +void Bird_Type0_Init(Entity* this) { Entity* target; this->action++; @@ -42,8 +65,7 @@ void sub_0809CF54(Entity* this) { } } -void sub_0809CFEC(Entity* this) { - +void Bird_Type0_Action1(Entity* this) { LinearMoveUpdate(this); GravityUpdate(this, *(s16*)&this->field_0x68.HWORD); if (this->actionDelay != 0) { @@ -56,22 +78,30 @@ void sub_0809CFEC(Entity* this) { UpdateAnimationSingleFrame(this); } -void sub_0809D030(Entity* this) { - gUnk_08123EF4[this->action](this); +void Bird_Type1(Entity* this) { + static void (*const actionFuncs[])(Entity*) = { + Bird_Type1_Init, + Bird_Type1_Action1, + }; + actionFuncs[this->action](this); } -void sub_0809D048(Entity* this) { +void Bird_Type1_Init(Entity* this) { this->action++; this->collisionLayer = 1; UpdateSpriteForCollisionLayer(this); InitAnimationForceUpdate(this, 0x17); } -void sub_0809D06C(Entity* this) { - gUnk_08123EFC[this->subAction](this); +void Bird_Type1_Action1(Entity* this) { + static void (*const subActionFuncs[])(Entity*) = { + Bird_Type1_Action1_Subaction0, + Bird_Type1_Action1_Subaction1, + }; + subActionFuncs[this->subAction](this); } -void sub_0809D084(Entity* this) { +void Bird_Type1_Action1_Subaction0(Entity* this) { u32 temp; if (this->parent != NULL) { @@ -85,7 +115,7 @@ void sub_0809D084(Entity* this) { } } -void sub_0809D0AC(Entity* this) { +void Bird_Type1_Action1_Subaction1(Entity* this) { Entity* fx; if (sub_080044EC(this, 0x1800) < 2) { @@ -102,28 +132,32 @@ void sub_0809D0AC(Entity* this) { } } -void sub_0809D0F4(Entity* this) { - gUnk_08123F04[this->action](this); +void Bird_Type2(Entity* this) { + static void (*const actionFuncs[])(Entity*) = { + Bird_Type2_Init, + Bird_Type2_Action1, + }; + actionFuncs[this->action](this); } -void sub_0809D10C(Entity* this) { +void Bird_Type2_Init(Entity* this) { this->action++; this->collisionLayer = 1; UpdateSpriteForCollisionLayer(this); InitAnimationForceUpdate(this, 0x17); } -void sub_0809D130(Entity* this) { +void Bird_Type2_Action1(Entity* this) { if ((gPlayerState.flags & PL_MINISH) != 0) { sub_0800445C(this); } else if (IsCollidingPlayer(this) != 0) { - CreateItemEntity(0x17, 0, 0); + CreateItemEntity(ITEM_OCARINA, 0, 0); gSave.windcrests |= 0x10000000; DeleteThisEntity(); } } -void sub_0809D178(Entity* this) { +void Bird_Type3(Entity* this) { if (this->action == 0) { this->action++; @@ -131,7 +165,8 @@ void sub_0809D178(Entity* this) { UpdateSpriteForCollisionLayer(this); this->frame = 0x80; } - if ((this->frame & 0x80) != 0) { + + if ((this->frame & ANIM_DONE) != 0) { InitializeAnimation(this, Random() & 3); this->frameDuration = (Random() & 0xf) + 0x10; this->spriteSettings.flipX = FALSE; @@ -142,3 +177,225 @@ void sub_0809D178(Entity* this) { GetNextFrame(this); } } + +void Bird_Type8(Entity* this) { + Entity* pEVar5; + + switch (this->action) { + case 0: + if (this->actionDelay != 0) { + this->frameIndex = 0xff; + this->actionDelay--; + return; + } + this->action = 1; + this->zVelocity = 0; + this->z.WORD = Q_16_16(-20.0); + this->speed = 0x180; + this->direction = 8; + this->collisionLayer = 1; + this->spritePriority.b0 = 0; + this->spriteRendering.b3 = 0; + this->spriteOrientation.flipY = 1; + this->x.HALF.HI = gRoomControls.scroll_x; + this->y.HALF.HI = gPlayerEntity.y.HALF.HI; + this->child = NULL; + SetDefaultPriority(this, 6); + InitAnimationForceUpdate(this, 0); + SoundReq(0x123); + break; + case 1: + this->collisionLayer = gPlayerEntity.collisionLayer; + this->speed += 8; + if (this->speed > 0x300) { + this->speed = 0x300; + } + + if ((gPlayerEntity.flags & 0x80) != 0 && (gMessage.doTextBox & 0x7f) == 0 && gPlayerEntity.action != 28 && + gPlayerEntity.action != 6 && gPlayerEntity.action != 9 && gPlayerState.framestate != 24 && + gPlayerState.framestate != 11 && gPlayerState.framestate != 8 && sub_08079F8C() && + (EntityInRectRadius(this, &gPlayerEntity, 0xe, 0xe))) { + s32 z = gPlayerEntity.z.HALF.HI - this->z.HALF.HI - 8; + if ((u16)z < 0x20 && gPlayerEntity.health != 0) { + pEVar5 = CreateObject(0x95, 10, 0); + if (pEVar5 != NULL) { + this->child = pEVar5; + this->action = 2; + this->actionDelay = 8; + this->speed = 0x300; + this->field_0x68.HWORD = 0xe000; + sub_08079184(); + sub_08078B48(); + ResetPlayerAnimationAndAction(); + sub_08077B20(); + gPlayerState.swim_state = 0; + gPlayerState.jump_status = 0; + gPlayerEntity.flags &= 0x7f; + gPlayerEntity.spriteSettings.draw = 0; + gPriorityHandler.sys_priority = 6; + gUnk_02034490.unk0 = 1; + } + } + } + break; + default: + sub_08078B48(); + gPlayerEntity.spriteSettings.draw = 0; + break; + } + LinearMoveUpdate(this); + GravityUpdate(this, (s16)this->field_0x68.HWORD); + UpdateAnimationSingleFrame(this); + pEVar5 = this->child; + if (pEVar5 != NULL) { + if (gPlayerEntity.x.HALF.HI < this->x.HALF.HI - 8) { + this->actionDelay = 0; + } + + if (this->actionDelay == 0) { + PositionRelative(this, pEVar5, 0xfff80000, 0); + pEVar5->z.HALF.HI += 0x18; + pEVar5->spritePriority.b0 = this->spritePriority.b0; + pEVar5->spriteRendering.b3 = this->spriteRendering.b3; + pEVar5->spriteOrientation.flipY = this->spriteOrientation.flipY; + } else { + this->actionDelay--; + CopyPosition(&gPlayerEntity, pEVar5); + } + } + + if (CheckOnScreen(this) == 0) { + if (this->action == 2) { + gSave.windcrests |= 0x10000000; + MenuFadeIn(9, 0); + } + pEVar5 = this->child; + if (pEVar5 != NULL) { + DeleteEntityAny(pEVar5); + } + DeleteThisEntity(); + } +} + +void Bird_Type9(Entity* this) { + Entity* pEVar1; + Entity* child; + + if (this->action == 0) { + this->action = 1; + this->spriteSettings.draw = 1; + this->zVelocity = -0x28000; + this->z.WORD = 0xffb4c000; + this->field_0x68.HWORD = 0xf000; + this->speed = 0x300; + this->direction = 8; + this->collisionLayer = 1; + this->spritePriority.b0 = 0; + this->spriteRendering.b3 = 0; + this->spriteOrientation.flipY = 1; + ; + SetDefaultPriority(this, 6); + this->x.HALF.HI = gRoomControls.scroll_x; + this->y.HALF.HI = gPlayerEntity.y.HALF.HI; + SoundReq(SFX_123); + this->spritePriority.b1 = 2; + InitAnimationForceUpdate(this, 0); + sub_08078B48(); + } else if (this->action == 1) { + gPlayerEntity.spriteSettings.draw = 0; + child = this->child; + if (child != NULL) { + PositionRelative(this, child, Q_16_16(-8), 0); + child->z.HALF.HI += 0x18; + child->spritePriority.b0 = this->spritePriority.b0; + child->spriteRendering.b3 = this->spriteRendering.b3; + child->spriteOrientation.flipY = this->spriteOrientation.flipY; + } + sub_08078B48(); + if (gRoomControls.scroll_x + 0x78 < this->x.HALF.HI) { + this->action++; + this->spritePriority.b1 = 1; + if (child != NULL) { + child->action++; + } + gRoomControls.camera_target = &gPlayerEntity; + gPlayerEntity.spriteSettings.draw = 1; + ResetPlayerAnimationAndAction(); + ResetPlayerEventPriority(); + gUnk_02034490.unk0 = 0; + if (!CheckGlobalFlag(WARP_1ST)) { + pEVar1 = CreateObject(OBJECT_69, 0, 0); + if (pEVar1 != NULL) { + *(ScriptExecutionContext**)&pEVar1->cutsceneBeh = StartCutscene(pEVar1, script_EzloTalkOcarina); + SetGlobalFlag(WARP_1ST); + } + } + } + } + LinearMoveUpdate(this); + GravityUpdate(this, (short)this->field_0x68.HWORD); + UpdateAnimationSingleFrame(this); + if (!CheckOnScreen(this)) { + DeleteThisEntity(); + } +} + +void Bird_Type10(Entity* this) { + this->palette.b.b0 = gPlayerEntity.palette.b.b0; + switch (this->action) { + case 0: + this->action = 1; + this->spriteSettings.draw = 1; + this->collisionLayer = 1; + this->spritePriority.b0 = 0; + this->spriteRendering.b3 = 0; + this->spriteOrientation.flipY = 1; + SetDefaultPriority(this, 6); + InitAnimationForceUpdate(this, 0xe0); + case 1: + UpdateAnimationSingleFrame(this); + break; + case 2: + this->action = 3; + break; + case 3: + DeleteThisEntity(); + break; + } +} + +void CreateBird(void) { + Entity* birdEnt; + +#ifndef EU + if (AreaAllowsWarp()) { +#else + if (AreaIsOverworld()) { +#endif + if (!FindEntity(OBJECT, BIRD, 6, 8, 0)) { + birdEnt = CreateObject(BIRD, 8, 0); + if (birdEnt != NULL) { + birdEnt->actionDelay = 0; + } + } + } +} + +void sub_0809D738(void) { + Entity* pEVar1; + Entity* pEVar2; + + pEVar1 = CreateObject(BIRD, 9, 0); + if (pEVar1 != NULL) { + gRoomControls.camera_target = NULL; + SetDefaultPriority(pEVar1, 6); + SetPlayerEventPriority(); + pEVar2 = CreateObject(BIRD, 10, 0); + if (pEVar2 != NULL) { + pEVar1->child = pEVar2; + } + gUnk_02034490.unk0 = 1; + } else { + ResetPlayerAnimationAndAction(); + } +} diff --git a/src/object/bollard.c b/src/object/bollard.c index 3a7d13b7..1c6a8bda 100644 --- a/src/object/bollard.c +++ b/src/object/bollard.c @@ -59,7 +59,7 @@ void sub_0808B2CC(BollardEntity* this) { void sub_0808B324(BollardEntity* this) { GetNextFrame(super); - if (super->frame & 0x80) { + if (super->frame & ANIM_DONE) { sub_0808B42C(this); } } @@ -80,7 +80,7 @@ void sub_0808B344(BollardEntity* this) { void sub_0808B38C(BollardEntity* this) { GetNextFrame(super); - if (super->frame & 0x80) { + if (super->frame & ANIM_DONE) { sub_0808B41C(this); } } diff --git a/src/object/bossDoor.c b/src/object/bossDoor.c index 5b1bd36d..0d1844e1 100644 --- a/src/object/bossDoor.c +++ b/src/object/bossDoor.c @@ -93,7 +93,7 @@ void BossDoor_Action1(BossDoorEntity* this) { } void BossDoor_Action2(BossDoorEntity* this) { - if ((super->frame & 0x80) == 0) { + if ((super->frame & ANIM_DONE) == 0) { if ((gRoomTransition.frameCount & 3) == 0) { SoundReq(SFX_185); } diff --git a/src/object/chestSpawner.c b/src/object/chestSpawner.c index a7890edb..a7072aa7 100644 --- a/src/object/chestSpawner.c +++ b/src/object/chestSpawner.c @@ -162,7 +162,7 @@ void ChestSpawner_Type2Action3(ChestSpawnerEntity* this) { void ChestSpawner_Type2Action4(ChestSpawnerEntity* this) { sub_0800445C(super); GetNextFrame(super); - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { if (--super->field_0xf == 0) { if (super->actionDelay == 0x18) { super->action = 6; diff --git a/src/object/crenelBeanSprout.c b/src/object/crenelBeanSprout.c index 13652224..52fe70db 100644 --- a/src/object/crenelBeanSprout.c +++ b/src/object/crenelBeanSprout.c @@ -133,7 +133,7 @@ void CrenelBeanSprout_Action1(CrenelBeanSproutEntity* this) { u32 tmp; if ((super->type & 1) != 0) { if (super->type == 3) { - sub_08078930(super); + RegisterCarryEntity(super); sub_0800445C(super); } else { PositionRelative(super->parent, super, -0x1c0000, -0x280000); @@ -159,7 +159,7 @@ void CrenelBeanSprout_Action1(CrenelBeanSproutEntity* this) { super->spriteRendering.b3 = parent->spriteRendering.b3; super->spriteOrientation.flipY = parent->spriteOrientation.flipY; } - sub_0805EC9C(super, 0xcc, 0xcc, 0); + SetAffineInfo(super, 0xcc, 0xcc, 0); } else { gPlayerState.mobility |= 0x80; gPlayerState.heldObject = 5; @@ -177,7 +177,7 @@ void CrenelBeanSprout_Action1(CrenelBeanSproutEntity* this) { gUnk_0200AF00.unk_2f = 0; } PositionRelative(&gPlayerEntity, super, 0, 0x10000); - if (sub_080B1AA8(super) == 0x19) { + if (GetTileUnderEntity(super) == 0x19) { sub_0807BA8C(0xdc, super->collisionLayer); sub_08096A78(this); } @@ -228,7 +228,7 @@ void CrenelBeanSprout_Action2SubAction3(CrenelBeanSproutEntity* this) { void CrenelBeanSprout_Action3(CrenelBeanSproutEntity* this) { UpdateAnimationSingleFrame(super); - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { super->action++; InitializeAnimation(super, 10); } diff --git a/src/object/cuccoMinigame.c b/src/object/cuccoMinigame.c new file mode 100644 index 00000000..19f63c3f --- /dev/null +++ b/src/object/cuccoMinigame.c @@ -0,0 +1,358 @@ +#define NENT_DEPRECATED +#include "entity.h" +#include "script.h" +#include "npc.h" +#include "fileselect.h" +#include "functions.h" +#include "object.h" +#include "enemy.h" + +typedef struct { + Entity base; + s16 unk68; + s16 unk6a; + s16 unk6c; + u16 unk6e; + u8 unk70[0x18]; +} ObjectB9Entity; + +typedef Entity* ObjectB9Heap[10]; + +u32 sub_080A1514(); + +const u16 gUnk_08124C20[] = { + 25, 0x2, 25, 0x3, 30, 0x4, 45, 0x5, 50, 0x5, 45, 0x5, 50, 0x6, 60, 0x7, 55, 0x2, 55, 0x3, +}; + +static const u16 pObjectB9_MinigameCuccoDefs[][30] = { + { 0x0001, 0x02E9, 0x0318, 0x0001, 0x0280, 0x0380, 0x0002, 0x0277, 0x0314, 0x0001, + 0x0332, 0x0248, 0x0001, 0x0257, 0x028C, 0x0001, 0x0199, 0x031B, 0x0001, 0x0321, + 0x01B4, 0x0002, 0x02DF, 0x01D8, 0x0001, 0x03AD, 0x02DE, 0x0001, 0x0216, 0x01CC }, + { 0x0001, 0x02E9, 0x0318, 0x0001, 0x0280, 0x0380, 0x0002, 0x0277, 0x0314, 0x0001, + 0x0332, 0x0248, 0x0001, 0x0257, 0x028C, 0x0001, 0x0199, 0x031B, 0x0001, 0x0321, + 0x01B4, 0x0002, 0x02DF, 0x01D8, 0x0001, 0x03AD, 0x02DE, 0x0001, 0x0216, 0x01CC }, + { 0x0001, 0x02E9, 0x0318, 0x0001, 0x0280, 0x0380, 0x0002, 0x0277, 0x0314, 0x0001, + 0x0332, 0x0248, 0x0001, 0x0257, 0x028C, 0x0001, 0x0199, 0x031B, 0x0001, 0x0321, + 0x01B4, 0x0002, 0x02DF, 0x01D8, 0x0001, 0x03AD, 0x02DE, 0x0001, 0x0216, 0x01CC }, + { + 0x0002, 0x02F6, 0x0346, 0x0001, 0x0266, 0x033C, 0x0001, 0x0319, 0x0296, 0x0001, + 0x0284, 0x0284, 0x0002, 0x0216, 0x0284, 0x0001, 0x0142, 0x0330, 0x0002, 0x0179, + 0x039F, 0x0001, 0x03A6, 0x0280, 0x0001, 0x039A, 0x015D, 0x0001, 0x031E, 0x01E5, + }, + { 0x0001, 0x0296, 0x0314, 0x0001, 0x02E6, 0x0231, 0x0001, 0x0254, 0x0290, 0x0001, + 0x01F8, 0x0325, 0x0001, 0x0185, 0x0367, 0x0001, 0x0320, 0x01D6, 0x0002, 0x01F8, + 0x0287, 0x0002, 0x029D, 0x01B1, 0x0002, 0x01F9, 0x022D, 0x0002, 0x0114, 0x0321 }, + { 0x0002, 0x02F6, 0x0346, 0x0001, 0x0266, 0x033C, 0x0001, 0x0319, 0x0296, 0x0001, + 0x0284, 0x0284, 0x0002, 0x0216, 0x0284, 0x0001, 0x0142, 0x0330, 0x0002, 0x0179, + 0x039F, 0x0002, 0x022D, 0x01CB, 0x0001, 0x039A, 0x015D, 0x0001, 0x031E, 0x01E5 }, + { 0x0001, 0x02E9, 0x0318, 0x0001, 0x0280, 0x0380, 0x0002, 0x0277, 0x0314, 0x0001, + 0x0332, 0x0248, 0x0001, 0x0257, 0x028C, 0x0001, 0x0199, 0x031B, 0x0001, 0x0321, + 0x01B4, 0x0002, 0x02DF, 0x01D8, 0x0001, 0x03AD, 0x02DE, 0x0001, 0x0216, 0x01CC }, + { 0x0001, 0x02E9, 0x0318, 0x0002, 0x0280, 0x0380, 0x0002, 0x0277, 0x0314, 0x0001, + 0x0332, 0x0248, 0x0001, 0x0257, 0x028C, 0x0001, 0x0199, 0x031B, 0x0001, 0x0321, + 0x01B4, 0x0002, 0x02DF, 0x01D8, 0x0002, 0x03AD, 0x02DE, 0x0001, 0x0216, 0x01CC }, + { 0x0001, 0x004D, 0x00F3, 0x0001, 0x011A, 0x0247, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 }, + { 0x0001, 0x0051, 0x0328, 0x0002, 0x0114, 0x0321, 0x0002, 0x0332, 0x0248, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 } +}; + +static const u8 gUnk_08124EA0[] = { 0x3F, 0x0A, 0x01, 0x00, 0x3F, 0x0A, 0x01, 0x00, 0x3F, 0x14, 0x01, 0x00, 0x3F, 0x14, + 0x01, 0x00, 0x3F, 0x1E, 0x01, 0x00, 0x3F, 0x1E, 0x01, 0x00, 0x5C, 0x6E, 0x01, 0x00, + 0x5C, 0x6F, 0x01, 0x00, 0x5C, 0x70, 0x01, 0x00, 0x63, 0x00, 0x01, 0x00 }; + +static const u16 CuccoMinigame_Sounds[] = { SFX_VO_CUCCO5, SFX_VO_CUCCO_CALL }; + +static const u8 CuccoMinigameRupees[] = { 0, 10, 50, 0 }; + +void ObjectB9(ObjectB9Entity* this) { + int index; + u32 val; + u8* puVar2; + const u16* ptr; + + if (super->action == 0) { + super->action++; + ptr = gUnk_08124C20 + sub_080A1514() * 2; + this->unk68 = ptr[0] * 0x3c; + this->unk6a = 0; + this->unk6c = ptr[1]; + this->unk6e = 1; + + for (puVar2 = this->unk70, val = 0, index = 9; index >= 0; index--) { + *puVar2++ = val; + } + sub_0807DD64(super); + sub_0806EC20(super); + } + sub_0807DD94(super, 0); +} + +NONMATCH("asm/non_matching/objectB9/sub_080A1270.inc", void sub_080A1270(ObjectB9Entity* this)) { + s32 iVar1; + int iVar2; + s32 iVar4; + s32 sVar6; + int iVar7; + s8* ptr; + s32 val; + Entity* pEnt; + Entity** entArray; + + sVar6 = 0; + entArray = ((Entity**)super->myHeap); + ptr = this->unk70; + iVar1 = (gRoomControls.origin_x + 0x360); + iVar4 = (gRoomControls.origin_y + 0x350); + iVar1 = (iVar1 << 16) >> 16; + iVar4 = (iVar4 << 16) >> 16; + val = -1; + + for (iVar7 = 0; iVar7 < 9; iVar7++) { + pEnt = entArray[iVar7]; + if (((s8*)ptr)[iVar7] == 0) { + if (pEnt->next != NULL && pEnt != NULL) { + if ((iVar1 <= pEnt->x.HALF.HI) && (iVar4 <= pEnt->y.HALF.HI)) { + ptr[iVar7] = pEnt->type + 1; + pEnt->type2 = 1; + sVar6++; + SoundReq(CuccoMinigame_Sounds[pEnt->type]); + } + } else { + ((s8*)ptr)[iVar7] = val; + } + } else if (0 < (s8)ptr[iVar7]) { + sVar6++; + if (pEnt->next != NULL && pEnt != NULL) { + iVar2 = iVar1 + 4; + if (iVar2 > pEnt->x.HALF.HI) { + pEnt->x.HALF.HI = iVar2; + } + iVar2 = iVar4 + 4; + if (iVar2 > pEnt->y.HALF.HI) { + pEnt->y.HALF.HI = iVar2; + } + } else { + ((s8*)ptr)[iVar7] = val; + } + } + } + + this->unk6a = sVar6; + gPlayerState.field_0x27[0] = 0xff; + if (--this->unk68 < 1) { + SoundReq(SFX_CUCCO_MINIGAME_BELL); + sub_08050384(); + } else { + gActiveScriptInfo.commandSize = 0; + } +} +END_NONMATCH + +void CuccoMinigame_Cleanup(ObjectB9Entity* this) { + Entity** puVar1; + s8* pcVar2; + int index; + + pcVar2 = this->unk70; + puVar1 = super->myHeap; + + for (index = 9; index >= 0; index--, pcVar2++, puVar1++) { + Entity* pEnt = *puVar1; + if (*pcVar2 >= 0 && pEnt != NULL) { + DeleteEntityAny(pEnt); + } + } +} + +void sub_080A13B4(ObjectB9Entity* this, ScriptExecutionContext* context) { + if (this->unk6a >= this->unk6c) { + MessageFromTarget(0x300c); + context->condition = 1; + } else { + MessageFromTarget(0x3005); + context->condition = 0; + } +} + +void sub_080A13E8(ObjectB9Entity* this) { + bool32 bVar2; + const u8* ptr = &gUnk_08124EA0[sub_080A1514() * 4]; + + bVar2 = 0; + switch (ptr[0]) { + case 0x3f: + if (gSave.stats.hasAllFigurines) { + bVar2 = 1; + } + break; + case 0x5c: + if (gSave.didAllFusions) { + bVar2 = 1; + } + break; + case 0x63: + if (!CheckGlobalFlag(0x4f)) { + SetGlobalFlag(0x4f); + break; + } + bVar2 = 1; + break; + } + + if (!bVar2) { + sub_080A7C18(ptr[0], ptr[1], 0); + } else { + this->unk6e = 2; + } +} + +void sub_080A1460(ObjectB9Entity* this) { + s8* pcVar1; + int iVar2; + s32 rupees; + const u8* ptr; + + sub_080A1514(); + pcVar1 = this->unk70; + rupees = 0; + ptr = CuccoMinigameRupees; + + for (iVar2 = 9; iVar2 >= 0; iVar2--) { + // Weird register addition + // ptr[*pcVar1] translates to add r0,r3,r0 but should be add r0,r3 + u32 temp = *pcVar1; + temp += (int)ptr; + rupees += *(u8*)temp; + pcVar1++; + } + ModRupees(rupees); + MessageNoOverlap(0x3007, super); + gMessage.rupees = (u16)rupees; +} + +void sub_080A14A8(void) { + int iVar1; + + iVar1 = sub_080A1514(); + iVar1++; + if (iVar1 > 9) { + iVar1 = 9; + } + + if (iVar1 & 1) { + SetGlobalFlag(0x4b); + } else { + ClearGlobalFlag(0x4b); + } + + if (iVar1 & 2) { + SetGlobalFlag(0x4c); + } else { + ClearGlobalFlag(0x4c); + } + + if (iVar1 & 4) { + SetGlobalFlag(0x4d); + } else { + ClearGlobalFlag(0x4d); + } + + if (iVar1 & 8) { + SetGlobalFlag(0x4e); + } else { + ClearGlobalFlag(0x4e); + } +} + +u32 sub_080A1514(void) { + u32 rv = 0; + + if (CheckGlobalFlag(0x4b)) { + rv = 1; + } + + if (CheckGlobalFlag(0x4c)) { + rv |= 2; + } + + if (CheckGlobalFlag(0x4d)) { + rv |= 4; + } + + if (CheckGlobalFlag(0x4e)) { + rv |= 8; + } + return rv; +} + +void CuccoMinigame_Init(Entity* this, ScriptExecutionContext* context) { + Entity* pEnt; + const short* pCuccoMinigameDef; + int index; + Entity** ppEVar5; + RoomControls* room; + + context->condition = 0; + pEnt = CreateObject(CUCCO_MINIGAME, 0, 0); + if (pEnt != NULL) { + pEnt->myHeap = (u32*)zMalloc(sizeof(ObjectB9Heap)); + if (pEnt->myHeap == NULL) { + DeleteEntityAny(pEnt); + } else { + *(ScriptExecutionContext**)&((GenericEntity*)pEnt)->cutsceneBeh = + (ScriptExecutionContext*)StartCutscene(pEnt, (u16*)context->intVariable); + pCuccoMinigameDef = pObjectB9_MinigameCuccoDefs[sub_080A1514()]; + ppEVar5 = (Entity**)pEnt->myHeap; + room = &gRoomControls; + for (index = 9; index >= 0; index--, pCuccoMinigameDef += 3) { + if (pCuccoMinigameDef[0] < 1) { + pEnt = NULL; + } else { + pEnt = (Entity*)CreateEnemy(CUCCO_AGGR, pCuccoMinigameDef[0] - 1); + if (pEnt != NULL) { + pEnt->x.HALF.HI = room->origin_x + pCuccoMinigameDef[1]; + pEnt->y.HALF.HI = room->origin_y + pCuccoMinigameDef[2]; + pEnt->collisionLayer = 1; + } + } + *ppEVar5++ = pEnt; + } + context->condition = 1; + } + } +} + +void sub_080A1608(void) { + u16 messageIndex; + const u16* ptr; + + messageIndex = 0x3002; + if (CheckRoomFlag(1)) { + messageIndex = 0x3006; + } + MessageFromTarget(messageIndex); + gMessage.textWindowPosX = 1; + gMessage.textWindowPosY = 0; + ptr = &gUnk_08124C20[sub_080A1514() * 2]; + gMessage.rupees = ptr[0]; + gMessage.field_0x14 = ptr[1]; +} + +void sub_080A1648(void) { + SetTileType(0x407f, 0xd36, 1); + SetTileType(0x407f, 0xd37, 1); + SetTileType(0x407f, 0xd38, 1); + SetTileType(0x407e, 0xd75, 1); + SetTileType(0x407e, 0xe75, 1); +} + +void sub_080A169C(void) { + sub_0807BA8C(0xd36, 1); + sub_0807BA8C(0xd37, 1); + sub_0807BA8C(0xd38, 1); + sub_0807BA8C(0xd75, 1); + sub_0807BA8C(0xe75, 1); +} diff --git a/src/object/deathFx.c b/src/object/deathFx.c index 4fe5ccb9..dee32ccc 100644 --- a/src/object/deathFx.c +++ b/src/object/deathFx.c @@ -49,7 +49,7 @@ void DeathFx_Action0(DeathFxObject* this) { tmp = super->actionDelay; super->actionDelay = 0; } - sub_0805EC9C(super, tmp, tmp, 0); + SetAffineInfo(super, tmp, tmp, 0); LoadSwapGFX(super, 4, 0); InitAnimationForceUpdate(super, 0); SoundReq(SFX_BOSS_EXPLODE); @@ -80,7 +80,7 @@ void DeathFx_Action0(DeathFxObject* this) { void DeathFx_Action1(DeathFxObject* this) { GetNextFrame(super); - if (super->frame & 0x80) { + if (super->frame & ANIM_DONE) { sub_08081790(this); DeathFx_Delete(this); } else { @@ -92,7 +92,7 @@ void DeathFx_Action1(DeathFxObject* this) { void DeathFx_Action2(DeathFxObject* this) { UpdateAnimationSingleFrame(super); - if (super->frame & 0x80) { + if (super->frame & ANIM_DONE) { DeathFx_Delete(this); } else { if ((super->frame & 1) != 0) { diff --git a/src/object/eyeSwitch.c b/src/object/eyeSwitch.c index 125e68fe..769a2cdf 100644 --- a/src/object/eyeSwitch.c +++ b/src/object/eyeSwitch.c @@ -56,7 +56,7 @@ void sub_08088718(EyeSwitchEntity* this) { void sub_08088760(EyeSwitchEntity* this) { GetNextFrame(super); - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { super->action = 3; this->unk70 = super->actionDelay << 1; InitializeAnimation(super, super->animationState + 4); @@ -78,7 +78,7 @@ void sub_08088790(EyeSwitchEntity* this) { void sub_080887D8(EyeSwitchEntity* this) { GetNextFrame(super); - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { super->action = 1; COLLISION_ON(super); InitializeAnimation(super, super->animationState); diff --git a/src/object/ezloCap.c b/src/object/ezloCap.c index e36a09cf..1a0d8894 100644 --- a/src/object/ezloCap.c +++ b/src/object/ezloCap.c @@ -152,7 +152,7 @@ void EzloCap_Type1Action1(EzloCapEntity* this) { } } } - } else if ((super->frame & 0x80) != 0) { + } else if ((super->frame & ANIM_DONE) != 0) { super->actionDelay = Random() & 3; if (super->actionDelay != 0) { super->spriteSettings.flipX = Random() & 1; @@ -203,7 +203,7 @@ void sub_08082C5C(EzloCapEntity* this) { } break; case 2: - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { InitAnimationForceUpdate(super, gUnk_0811F18C[Random() & 3] + (Random() & 3)); return; } @@ -292,7 +292,7 @@ void EzloCap_ScriptedAction2(EzloCapEntity* this) { void EzloCap_ScriptedAction3(EzloCapEntity* this) { UpdateAnimationSingleFrame(super); - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { super->action = 1; super->subAction = 0; super->spriteOffsetX = 0; diff --git a/src/object/fan.c b/src/object/fan.c index 890689e9..d372ff5c 100644 --- a/src/object/fan.c +++ b/src/object/fan.c @@ -81,7 +81,7 @@ void Fan_Action2(FanEntity* this) { void Fan_Action3(FanEntity* this) { sub_0809F08C(this); sub_0809EE44(this); - if (super->frame & 0x80) { + if (super->frame & ANIM_DONE) { sub_0809EE34(this); } } diff --git a/src/object/figurineDevice.c b/src/object/figurineDevice.c index 3ae836d1..a9efe80c 100644 --- a/src/object/figurineDevice.c +++ b/src/object/figurineDevice.c @@ -197,7 +197,7 @@ void FigurineDevice_Action3(FigurineDeviceEntity* this) { GetNextFrame(super); switch (this->unk_7a) { case 0: - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { this->unk_7a = 1; super->actionDelay = 0x28; ChangeObjPalette(super, gUnk_08120AA8[super->type2]); @@ -207,7 +207,7 @@ void FigurineDevice_Action3(FigurineDeviceEntity* this) { break; case 1: - if (((super->frame & 0x80) != 0) && (--super->actionDelay == 0)) { + if (((super->frame & ANIM_DONE) != 0) && (--super->actionDelay == 0)) { this->unk_7a = 2; SetRoomFlag(2); MenuFadeIn(7, super->field_0xf); @@ -303,7 +303,7 @@ void FigurineDevice_Action4(FigurineDeviceEntity* this) { gMessage.textWindowPosX = 1; gMessage.textWindowPosY = 0xc; #endif - gMessage.field_0x10 = this->unk_81; + gMessage.rupees = this->unk_81; break; } } @@ -417,9 +417,9 @@ void sub_080882A8(FigurineDeviceEntity* this) { sub_08057044(this->unk_83, &gUnk_020227E8[1], 0x202020); ptr = (u8*)0x02000000; if (ptr[7] == 0) { - sub_0805F46C((u32)gUnk_08120AE4[super->type2], &gUnk_08120AB4); + sub_0805F46C((u32)gUnk_08120AE4[super->type2], (Font*)&gUnk_08120AB4); // TODO convert data } else { - sub_0805F46C((u32)gUnk_08120AE4[super->type2], &gUnk_08120ACC); + sub_0805F46C((u32)gUnk_08120AE4[super->type2], (Font*)&gUnk_08120ACC); // TODO convert data } gScreen.bg0.updated = 1; } @@ -477,7 +477,7 @@ void sub_08088478(void) { gMessage.textWindowPosX = 1; gMessage.textWindowPosY = 0xc; if (set0x10) { - gMessage.field_0x10 = 5; + gMessage.rupees = 5; } #ifndef EU gPlayerEntity.animationState = 6; diff --git a/src/object/frozenWaterElement.c b/src/object/frozenWaterElement.c index c0019201..7d3bd4c7 100644 --- a/src/object/frozenWaterElement.c +++ b/src/object/frozenWaterElement.c @@ -47,12 +47,12 @@ void sub_0809BECC(FrozenWaterElementEntity* this) { super->frameIndex = 0; super->spriteRendering.b0 = 3; sub_0809C0A8(this); - sub_0805EC9C(super, 0xcc, 0xcc, 0); + SetAffineInfo(super, 0xcc, 0xcc, 0); } } void sub_0809BF1C(FrozenWaterElementEntity* this) { - sub_0805EC9C(super, 0xcc, 0xcc, 0); + SetAffineInfo(super, 0xcc, 0xcc, 0); if (CheckFlags(OUGONTEKI_G)) { Entity* obj = CreateObject(OBJECT_90, 0, 0); if (obj != NULL) { @@ -88,7 +88,7 @@ void sub_0809BF74(FrozenWaterElementEntity* this) { if (this->unk_74 < 0x78) { tmp2 = ((0x78 - this->unk_74) << 5); tmp2 += 0xcc; - sub_0805EC9C(super, ((0x78 - this->unk_74) << 4) + 0xcc, tmp2, 0); + SetAffineInfo(super, ((0x78 - this->unk_74) << 4) + 0xcc, tmp2, 0); sub_0806FCF4(super, tmp2, 8, 0); super->spriteOffsetY += 8; } diff --git a/src/object/gentariCurtains.c b/src/object/gentariCurtains.c index e3ff7b3a..eed470dc 100644 --- a/src/object/gentariCurtains.c +++ b/src/object/gentariCurtains.c @@ -27,7 +27,7 @@ void sub_080921F0(GentariCurtainEntity* this); void sub_08092214(GentariCurtainEntity* this); extern Entity gUnk_030011E8[7]; -extern Entity gUnk_03003BE0; +extern Entity gCarryEntities; void GentariCurtain(Entity* this) { static void (*const actionFuncs[])(GentariCurtainEntity*) = { @@ -76,7 +76,7 @@ void sub_0809214C(GentariCurtainEntity* this) { void sub_08092164(GentariCurtainEntity* this) { UpdateAnimationSingleFrame(super); - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { super->action = 3; SetTile(this->tileIndex, this->tile, 1); SetTile(this->tileIndex2, this->tile2, 1); diff --git a/src/object/greatFairy.c b/src/object/greatFairy.c index a03d9344..ffbfe2a6 100644 --- a/src/object/greatFairy.c +++ b/src/object/greatFairy.c @@ -173,7 +173,7 @@ void GreatFairy_WingsInit(Entity* this) { gScreen.controls.layerFXControl = 0xF40; gScreen.controls.alphaBlend = BLDALPHA_BLEND(9, 8); this->speed = 1024; - sub_0805EC9C(this, 1024, 256, 0); + SetAffineInfo(this, 1024, 256, 0); } void GreatFairy_WingsUpdate(Entity* this) { @@ -184,7 +184,7 @@ void GreatFairy_WingsUpdate(Entity* this) { gRoomVars.animFlags |= 32; gActiveScriptInfo.syncFlags |= 4; } else { - sub_0805EC9C(this, this->speed, 256, 0); + SetAffineInfo(this, this->speed, 256, 0); } } @@ -273,7 +273,7 @@ void GreatFairy_MiniAffineInit2(Entity* this) { this->actionDelay = 90; this->speed = 4096; this->spriteRendering.b0 = 3; - sub_0805EC9C(this, 256, 256, 0); + SetAffineInfo(this, 256, 256, 0); } } @@ -285,7 +285,7 @@ void GreatFairy_MiniAffineUpdate(Entity* this) { sub_0805EC60(this); } else { this->speed -= 24; - sub_0805EC9C(this, 256, this->speed >> 4, 0); + SetAffineInfo(this, 256, this->speed >> 4, 0); } } @@ -304,7 +304,7 @@ void GreatFairy_DropletInit(Entity* this) { void GreatFairy_DropletUpdate(Entity* this) { GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { DeleteEntity(this); } } @@ -370,7 +370,7 @@ void GreatFairy_EnergyInit(Entity* this) { void GreatFairy_EnergyUpdate(Entity* this) { GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { DeleteEntity(this); } } diff --git a/src/object/heartContainer.c b/src/object/heartContainer.c index a81709c4..421990cb 100644 --- a/src/object/heartContainer.c +++ b/src/object/heartContainer.c @@ -47,7 +47,7 @@ static void sub_0808E714(Entity* this) { int var0 = 0x400 - this->field_0xf * 8; if (var0 > 0x100) { this->field_0xf++; - sub_0805EC9C(this, var0, var0, 0); + SetAffineInfo(this, var0, var0, 0); } else { this->action = 3; this->field_0x3c |= 0x10; diff --git a/src/object/jailBars.c b/src/object/jailBars.c index 9983eb1c..3a4abc9b 100644 --- a/src/object/jailBars.c +++ b/src/object/jailBars.c @@ -5,7 +5,7 @@ #include "sound.h" #include "functions.h" -extern void sub_080A0960(Entity*, u32); +static void SetJailBarTiles(Entity*, u32); extern void (*const gUnk_08124950[])(Entity*); extern u16 gUnk_08124960[]; @@ -18,11 +18,11 @@ void JailBars(Entity* this) { void sub_080A08C4(Entity* this) { if (CheckFlags(this->field_0x86.HWORD) == 0) { this->action = 1; - sub_080A0960(this, 0); + SetJailBarTiles(this, 0); } else { this->action = 3; InitializeAnimation(this, 1); - sub_080A0960(this, 1); + SetJailBarTiles(this, 1); } this->spriteSettings.draw = 3; // ??? this->collisionLayer = 1; @@ -32,14 +32,14 @@ void sub_080A08C4(Entity* this) { void sub_080A0910(Entity* this) { if (CheckFlags(this->field_0x86.HWORD) != 0) { this->action = 2; - sub_080A0960(this, 1); + SetJailBarTiles(this, 1); SoundReq(SFX_10B); } } void sub_080A0938(Entity* this) { GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 3; InitializeAnimation(this, 1); } @@ -48,7 +48,7 @@ void sub_080A0938(Entity* this) { void nullsub_127(Entity* this) { } -void sub_080A0960(Entity* this, u32 arg1) { +static void SetJailBarTiles(Entity* this, u32 arg1) { u16* puVar1; puVar1 = gUnk_08124960; diff --git a/src/object/lavaPlatform.c b/src/object/lavaPlatform.c index 8576cfa8..56338844 100644 --- a/src/object/lavaPlatform.c +++ b/src/object/lavaPlatform.c @@ -95,7 +95,7 @@ void LavaPlatform_Type0Action2(LavaPlatformEntity* this) { (super->child)->spriteOffsetY = 0; InitializeAnimation(super->child, super->child->animationState); CreateFx(super, FX_LAVA_SPLASH_HUGE, 0); - } else if ((super->zVelocity < 0x18000) && ((super->frame & 0x80) == 0)) { + } else if ((super->zVelocity < 0x18000) && ((super->frame & ANIM_DONE) == 0)) { UpdateAnimationSingleFrame(super); } } @@ -169,7 +169,7 @@ void LavaPlatform_Type1Action4(LavaPlatformEntity* this) { } if (this->timer < 0x8d) { GetNextFrame(super); - tmp = super->frame & 0x80; + tmp = super->frame & ANIM_DONE; if (tmp) { // Platform sank super->action = 5; @@ -216,7 +216,7 @@ void LavaPlatform_Type1Action6(LavaPlatformEntity* this) { super->flags |= ENT_COLLIDE; super->hitType = 0xac; } else { - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { sub_0809264C(this); if (tmp) { gPlayerState.field_0x3f = 0xfd; diff --git a/src/object/lilypadLarge.c b/src/object/lilypadLarge.c index d7f653df..a7fd4209 100644 --- a/src/object/lilypadLarge.c +++ b/src/object/lilypadLarge.c @@ -124,7 +124,7 @@ void sub_08085A98(LilypadLargeEntity* this) { sub_08085F1C(this); if (0x7fffff < (u32)this->unk_78.WORD) { this->unk_78.WORD -= 0x20000; - sub_0805EC9C(super, this->unk_78.HALF_U.HI, this->unk_78.HALF_U.HI, this->unk_7c.HALF_U.HI); + SetAffineInfo(super, this->unk_78.HALF_U.HI, this->unk_78.HALF_U.HI, this->unk_7c.HALF_U.HI); } if (sub_080B1A8C(super, 0, 0x18) != 0x11) { super->subAction = 2; @@ -148,7 +148,7 @@ void sub_08085B40(LilypadLargeEntity* this) { if (GravityUpdate(super, 0x2000) != 0) { if ((u32)this->unk_78.WORD < 0x1200000) { this->unk_78.WORD += 0x100000; - sub_0805EC9C(super, this->unk_78.HALF_U.HI, this->unk_78.HALF_U.HI, this->unk_7c.HALF_U.HI); + SetAffineInfo(super, this->unk_78.HALF_U.HI, this->unk_78.HALF_U.HI, this->unk_7c.HALF_U.HI); } gPlayerEntity.y.HALF.HI = (super->y.HALF.HI + super->z.HALF.HI) - this->unk_74; if (gArea.locationIndex == 0x1b) { @@ -159,7 +159,7 @@ void sub_08085B40(LilypadLargeEntity* this) { } } else { ResetCollisionLayer(super); - if (sub_080B1AA8(super) == 0xd) { + if (GetTileUnderEntity(super) == 0xd) { ResetCollisionLayer(&gPlayerEntity); sub_08085CDC(this); super->direction = GetFacingDirection(&gPlayerEntity, super); @@ -181,7 +181,7 @@ void sub_08085B40(LilypadLargeEntity* this) { super->actionDelay |= 0x80; this->unk_70 = 0; this->unk_6c = 0; - if (sub_080B1AA8(super) == 0xd) { + if (GetTileUnderEntity(super) == 0xd) { super->action = 4; } } @@ -214,7 +214,7 @@ void sub_08085C5C(LilypadLargeEntity* this) { void sub_08085CDC(LilypadLargeEntity* this) { this->unk_78.WORD += 0x100000; if (this->unk_78.WORD_U < 0x4000000) { - sub_0805EC9C(super, this->unk_78.HALF_U.HI, this->unk_78.HALF_U.HI, this->unk_7c.HALF_U.HI); + SetAffineInfo(super, this->unk_78.HALF_U.HI, this->unk_78.HALF_U.HI, this->unk_7c.HALF_U.HI); } else { DeleteThisEntity(); } @@ -381,5 +381,5 @@ void sub_08085F48(LilypadLargeEntity* this) { } } } - sub_0805EC9C(super, this->unk_78.HALF_U.HI, this->unk_78.HALF_U.HI, this->unk_7c.HALF_U.HI); + SetAffineInfo(super, this->unk_78.HALF_U.HI, this->unk_78.HALF_U.HI, this->unk_7c.HALF_U.HI); } diff --git a/src/object/lilypadSmall.c b/src/object/lilypadSmall.c index c8cf76f1..ce03ff99 100644 --- a/src/object/lilypadSmall.c +++ b/src/object/lilypadSmall.c @@ -59,5 +59,5 @@ static void sub_08097B24(Entity* this) { temp2 = ++this->field_0xf; temp = temp3[(temp2 >> 5) & 7]; - sub_0805EC9C(this, temp, temp, 0); + SetAffineInfo(this, temp, temp, 0); } diff --git a/src/object/litArea.c b/src/object/litArea.c index 06d50198..f042209e 100644 --- a/src/object/litArea.c +++ b/src/object/litArea.c @@ -19,7 +19,7 @@ void LitArea(Entity* this) { this->actionDelay = 2; this->field_0x68.HWORD = 0xfffe; this->field_0x6a.HWORD = 0x80; - sub_0805EC9C(this, 0x80, 0x80, 0); + SetAffineInfo(this, 0x80, 0x80, 0); } else { if (--this->actionDelay == 0) { this->actionDelay = 2; @@ -30,7 +30,7 @@ void LitArea(Entity* this) { if (0x88 < this->field_0x6a.HWORD) { this->field_0x68.HWORD = 0xffff; } - sub_0805EC9C(this, this->field_0x6a.HWORD, this->field_0x6a.HWORD, 0); + SetAffineInfo(this, this->field_0x6a.HWORD, this->field_0x6a.HWORD, 0); } } gScreen.lcd.displayControl |= DISPCNT_OBJWIN_ON; diff --git a/src/object/macroBook.c b/src/object/macroBook.c index 462dfea1..b63bfc37 100644 --- a/src/object/macroBook.c +++ b/src/object/macroBook.c @@ -44,7 +44,7 @@ void MacroBook_Init(MacroBookEntity* this) { super->spriteOffsetY = -4; super->spritePriority.b0 = 7; super->spriteRendering.b3 = 3; - sub_0805EC9C(super, this->unk80, this->unk80, 0); + SetAffineInfo(super, this->unk80, this->unk80, 0); UpdateSpriteForCollisionLayer(super); InitAnimationForceUpdate(super, super->field_0xf); sub_0809A958(this); @@ -56,7 +56,7 @@ void MacroBook_Action1(MacroBookEntity* this) { if (super->actionDelay) { super->actionDelay--; } else { - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { if (super->field_0xf == 3) { super->action = 2; super->actionDelay = 90; @@ -83,7 +83,7 @@ void MacroBook_Action2(MacroBookEntity* this) { super->action = 1; super->actionDelay = 0; } else { - if ((super->frame & 0x80) == 0) { + if ((super->frame & ANIM_DONE) == 0) { return; } super->action = 3; @@ -117,7 +117,7 @@ void MacroBook_Action3(MacroBookEntity* this) { if (super->actionDelay) { this->unk80 += 8; super->x.WORD += 0x400; - sub_0805EC9C(super, this->unk80, this->unk80, 0); + SetAffineInfo(super, this->unk80, this->unk80, 0); } else { sub_0809AA9C(this, super->child, 0); sub_0809AA9C(this, &gPlayerEntity, 1); diff --git a/src/object/macroPlayer.c b/src/object/macroPlayer.c index 37cf06ce..4adcb573 100644 --- a/src/object/macroPlayer.c +++ b/src/object/macroPlayer.c @@ -111,7 +111,7 @@ void MacroPlayer_Type0_Init(MacroPlayerEntity* this) { super->z.HALF.HI = 0xff50; this->unk6a = 4; super->spriteRendering.b0 = 3; - sub_0805EC9C(super, 4, 4, 0); + SetAffineInfo(super, 4, 4, 0); ptr = gUnk_02018EB0; *(Entity**)&ptr[0x14] = super; ChangeObjPalette(super, sub_0807A094(0)); @@ -125,7 +125,7 @@ void MacroPlayer_Type0_Init(MacroPlayerEntity* this) { void sub_0808CC88(MacroPlayerEntity* this) { if (this->unk6a < 0x400) { this->unk6a += 4; - sub_0805EC9C(super, this->unk6a, this->unk6a, 0); + SetAffineInfo(super, this->unk6a, this->unk6a, 0); sub_0806FCF4(super, this->unk6a, 8, 2); } } diff --git a/src/object/mazaalBossObject.c b/src/object/mazaalBossObject.c new file mode 100644 index 00000000..27f42ffb --- /dev/null +++ b/src/object/mazaalBossObject.c @@ -0,0 +1,207 @@ +#define NENT_DEPRECATED +#include "global.h" +#include "entity.h" +#include "enemy.h" +#include "functions.h" +#include "item.h" +#include "object.h" +#include "player.h" +#include "new_player.h" +#include "room.h" +#include "screen.h" +#include "sound.h" + +extern u16 script_Object89Mazaal[]; + +typedef struct { + /* 0x00 */ Entity base; + /* 0x68 */ u8 unk_68[0x1C]; + /* 0x84 */ ScriptExecutionContext* cutsceneBeh; +} MazaalBossObjectEntity; + +enum MazaalBossObjectActions { + /* 0 */ MAZAAL_BOSS_OBJECT_ACTION_0, + /* 1 */ MAZAAL_BOSS_OBJECT_ACTION_1, + /* 2 */ MAZAAL_BOSS_OBJECT_ACTION_2, + /* 3 */ MAZAAL_BOSS_OBJECT_ACTION_3, + /* 4 */ MAZAAL_BOSS_OBJECT_ACTION_4, + /* 5 */ MAZAAL_BOSS_OBJECT_ACTION_5, + /* 6 */ MAZAAL_BOSS_OBJECT_ACTION_6, + /* 7 */ MAZAAL_BOSS_OBJECT_ACTION_7, + /* 8 */ MAZAAL_BOSS_OBJECT_ACTION_8, +}; + +void MazaalBossObject_Action0(MazaalBossObjectEntity* this); // 0809AB04 +void MazaalBossObject_Action1(MazaalBossObjectEntity* this); // 0809ABA4 +void MazaalBossObject_Action2(MazaalBossObjectEntity* this); // 0809ABB0 +void MazaalBossObject_Action3(MazaalBossObjectEntity* this); // 0809ABD4 +void MazaalBossObject_Action4(MazaalBossObjectEntity* this); // 0809ABF4 +void MazaalBossObject_Action5(MazaalBossObjectEntity* this); // 0809AC3C +void MazaalBossObject_Action6(MazaalBossObjectEntity* this); // 0809ACA0 +void MazaalBossObject_Action7(MazaalBossObjectEntity* this); // 0809ACCC +void MazaalBossObject_Action8(MazaalBossObjectEntity* this); // 0809ACE8 +void sub_0809AD68(MazaalBossObjectEntity* this); // 0809AD68 +void sub_0809AD8C(MazaalBossObjectEntity* this); // 0809AD8C + +void MazaalBossObject(Entity* thisx) { + static void (*const MazaalBossObject_Actions[])(MazaalBossObjectEntity*) = { + MazaalBossObject_Action0, MazaalBossObject_Action1, MazaalBossObject_Action2, + MazaalBossObject_Action3, MazaalBossObject_Action4, MazaalBossObject_Action5, + MazaalBossObject_Action6, MazaalBossObject_Action7, MazaalBossObject_Action8, + }; + + MazaalBossObject_Actions[thisx->action]((MazaalBossObjectEntity*)thisx); +} + +void MazaalBossObject_Action0(MazaalBossObjectEntity* this) { + Entity* mazaalHead; + + if (CheckFlags(0x31)) { + sub_0809AD68(this); + sub_0809AD8C(this); + DeleteThisEntity(); + } + + mazaalHead = CreateEnemy(MAZAAL_HEAD, 0); + if (mazaalHead == NULL) { + return; + } + + CopyPosition(super, mazaalHead); + super->child = mazaalHead; + + if (gRoomTransition.field_0x38 != 0) { + if (gRoomTransition.field_0x39 != 0) { + DeleteThisEntity(); + } + + super->action = MAZAAL_BOSS_OBJECT_ACTION_7; + super->spriteSettings.draw = 0; + gRoomControls.camera_target = super; + sub_080809D4(); + } else { + super->action = 1; + super->actionDelay = 30; + super->frameIndex = gRoomTransition.field_0x38; + super->spritePriority.b0 = 7; + super->spriteOffsetY = 0x20; + + this->cutsceneBeh = StartCutscene(super, script_Object89Mazaal); + } +} + +void MazaalBossObject_Action1(MazaalBossObjectEntity* this) { + ExecuteScriptForEntity(super, NULL); +} + +void MazaalBossObject_Action2(MazaalBossObjectEntity* this) { + if (--super->actionDelay == 0) { + super->action = MAZAAL_BOSS_OBJECT_ACTION_3; + super->actionDelay = 120; + gRoomControls.camera_target = super->child; + } +} + +void MazaalBossObject_Action3(MazaalBossObjectEntity* this) { + if (--super->actionDelay == 0) { + super->action = MAZAAL_BOSS_OBJECT_ACTION_4; + super->actionDelay = 90; + super->child->subAction = 1; + } +} + +void MazaalBossObject_Action4(MazaalBossObjectEntity* this) { + if (super->child->subAction > 2) { + if (--super->actionDelay == 0) { + super->action = MAZAAL_BOSS_OBJECT_ACTION_5; + super->actionDelay = 8; + super->field_0xf = 0; + super->spriteRendering.alphaBlend = BLDALPHA_BLEND(1, 0); + + gScreen.controls.layerFXControl = + BLDCNT_TGT2_BG3 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG0 | BLDCNT_EFFECT_BLEND; + gScreen.controls.alphaBlend = BLDALPHA_BLEND(0x10, 0); + } + } +} + +void MazaalBossObject_Action5(MazaalBossObjectEntity* this) { + u32 tmp; + + if (--super->actionDelay == 0) { + super->actionDelay = 8; + + tmp = ++super->field_0xf; + tmp &= 0xFF; + gScreen.controls.alphaBlend = BLDALPHA_BLEND((0x10 - tmp) & 0xFF, tmp); + + if (super->field_0xf > 15) { + super->spriteRendering.alphaBlend = BLDALPHA_BLEND(4, 0); + gScreen.controls.layerFXControl = 0; + super->action = MAZAAL_BOSS_OBJECT_ACTION_6; + super->actionDelay = 15; + super->spriteSettings.draw = 0; + } + } +} + +void MazaalBossObject_Action6(MazaalBossObjectEntity* this) { + if (--super->actionDelay == 0) { + super->child->subAction = 6; + gRoomTransition.field_0x38 = 0xF1; + + DeleteEntity(super); + } +} + +void MazaalBossObject_Action7(MazaalBossObjectEntity* this) { + if (super->child->actionDelay == 1) { + super->action = MAZAAL_BOSS_OBJECT_ACTION_8; + super->subAction = 0; + super->actionDelay = 180; + } +} + +void MazaalBossObject_Action8(MazaalBossObjectEntity* this) { + switch (super->subAction) { + default: + if (--super->actionDelay == 0) { + super->actionDelay = 90; + super->subAction = 1; + SoundReq(SFX_SECRET_BIG); + SetFlag(0x31); + sub_0809AD8C(this); + } + break; + case 1: + if (--super->actionDelay == 0) { + super->actionDelay = 120; + super->subAction = 2; + sub_0809AD68(this); + } + break; + case 2: + if (--super->actionDelay == 0) { + gRoomControls.camera_target = &gNewPlayerEntity.base; + gPlayerState.controlMode = CONTROL_1; + DeleteThisEntity(); + } + break; + } +} + +void sub_0809AD68(MazaalBossObjectEntity* this) { + LoadRoomEntityList(GetCurrentRoomProperty(super->type)); + if (GetInventoryValue(ITEM_OCARINA) != 0) { + LoadRoomEntityList(GetCurrentRoomProperty(super->type2)); + } +} + +void sub_0809AD8C(MazaalBossObjectEntity* this) { + Entity* archway = CreateObject(ARCHWAY, 0x22, 0); + + if (archway != NULL) { + archway->x.HALF.HI = gRoomControls.origin_x + 0xB8; + archway->y.HALF.HI = gRoomControls.origin_y + 8; + } +} diff --git a/src/object/minecart.c b/src/object/minecart.c index 5b2538f2..97b0adbb 100644 --- a/src/object/minecart.c +++ b/src/object/minecart.c @@ -1,67 +1,82 @@ +#define NENT_DEPRECATED #include "object.h" #include "functions.h" #include "hitbox.h" -extern u32 sub_08091DDC(Entity*); +typedef struct { + Entity base; + u8 filler[0x1C]; + struct_030010EC* minecartData; +} MinecartEntity; + extern u32 sub_08007DD6(u32, u32); extern void sub_08017744(Entity*); -extern void sub_08091C0C(Entity*); -extern void (*const gUnk_081223A8[])(Entity*); +u32 sub_08091DDC(MinecartEntity*); +void sub_080916EC(MinecartEntity*); +void sub_080917DC(MinecartEntity*); +void sub_080918A4(MinecartEntity*); +void sub_080919AC(MinecartEntity*); +void sub_08091C0C(MinecartEntity*); +void sub_08091C98(MinecartEntity*); +void sub_08091CC8(MinecartEntity*); +void sub_08091D90(MinecartEntity*); -extern const s8 gUnk_081223C8[]; extern const u32 gUnk_081223D8[]; void Minecart(Entity* this) { - gUnk_081223A8[this->action](this); + static void (*const actionFuncs[])(MinecartEntity*) = { + sub_080916EC, sub_080917DC, sub_080918A4, sub_080919AC, sub_08091C0C, sub_08091C98, sub_08091CC8, sub_08091D90, + }; + actionFuncs[this->action]((MinecartEntity*)this); this->bitfield = 0; } -void sub_080916EC(Entity* this) { - struct_030010EC* unk = &gRoomTransition.minecart_data[this->actionDelay]; +void sub_080916EC(MinecartEntity* this) { + struct_030010EC* unk = &gRoomTransition.minecart_data[super->actionDelay]; - *(struct_030010EC**)&this->cutsceneBeh.HWORD = unk; - if ((gRoomControls.room != unk->field_0x4) || (gPlayerState.flags & PL_IN_MINECART) != 0) { + this->minecartData = unk; + if ((gRoomControls.room != unk->room) || (gPlayerState.flags & PL_IN_MINECART) != 0) { DeleteThisEntity(); } - this->x.HALF.HI = gRoomControls.origin_x + ((unk->field_0x0 & 0x3f) << 4) + 8; - this->y.HALF.HI = gRoomControls.origin_y + ((unk->field_0x0 & 0xfc << 4) >> 2) + 8; - this->animationState = unk->field_0x5; - this->type2 = unk->field_0x6; - this->action = 1; - this->hitbox = (Hitbox*)&gUnk_080FD310; - COLLISION_ON(this); - this->hitType = 1; - this->field_0x3c = 0x47; - this->hurtType = 0x44; - this->flags2 = 0x80; - this->direction = DirectionFromAnimationState(this->animationState); - this->speed = 0x700; - this->spritePriority.b1 = 3; - InitAnimationForceUpdate(this, this->type2 + 4 + this->animationState); - SetTile(0x4022, COORD_TO_TILE(this), this->collisionLayer); + super->x.HALF.HI = gRoomControls.origin_x + ((unk->tilePos & 0x3f) << 4) + 8; + super->y.HALF.HI = gRoomControls.origin_y + ((unk->tilePos & 0xfc << 4) >> 2) + 8; + super->animationState = unk->animationState; + super->type2 = unk->field_0x6; + super->action = 1; + super->hitbox = (Hitbox*)&gUnk_080FD310; + COLLISION_ON(super); + super->hitType = 1; + super->field_0x3c = 0x47; + super->hurtType = 0x44; + super->flags2 = 0x80; + super->direction = DirectionFromAnimationState(super->animationState); + super->speed = 0x700; + super->spritePriority.b1 = 3; + InitAnimationForceUpdate(super, super->type2 + 4 + super->animationState); + SetTile(0x4022, COORD_TO_TILE(super), super->collisionLayer); } -void sub_080917DC(Entity* this) { - if ((this->bitfield & 0x7f) == 0x1d) { - this->zVelocity = Q_16_16(2.625); - this->action = 7; - InitAnimationForceUpdate(this, this->type2 + 4 + this->animationState); +void sub_080917DC(MinecartEntity* this) { + if ((super->bitfield & 0x7f) == 0x1d) { + super->zVelocity = Q_16_16(2.625); + super->action = 7; + InitAnimationForceUpdate(super, super->type2 + 4 + super->animationState); SoundReq(SFX_13B); } else { - if (sub_0800445C(this) != 0) { + if (sub_0800445C(super) != 0) { if (!((gPlayerState.flags & (PL_MINISH | PL_ROLLING)) || gPlayerState.field_0x1c || gPlayerState.heldObject || gPlayerState.jump_status)) { - this->actionDelay++; + super->actionDelay++; } else { - this->actionDelay = 0; + super->actionDelay = 0; } } else { - this->actionDelay = 0; + super->actionDelay = 0; } - if (this->type2 == 0) { - if (this->actionDelay > 8) { - this->action++; + if (super->type2 == 0) { + if (super->actionDelay > 8) { + super->action++; gPlayerState.jump_status = 0x81; gPlayerState.flags |= PL_ENTER_MINECART; gPlayerEntity.zVelocity = Q_16_16(2.0); @@ -72,100 +87,102 @@ void sub_080917DC(Entity* this) { SoundReq(SFX_PLY_JUMP); } } else { - this->actionDelay = 0; + super->actionDelay = 0; } } } -void sub_080918A4(Entity* this) { - if (EntityInRectRadius(this, &gPlayerEntity, 2, 2) != 0) { - gPlayerEntity.x.HALF.HI = this->x.HALF.HI; - gPlayerEntity.y.HALF.HI = this->y.HALF.HI; +void sub_080918A4(MinecartEntity* this) { + if (EntityInRectRadius(super, &gPlayerEntity, 2, 2) != 0) { + gPlayerEntity.x.HALF.HI = super->x.HALF.HI; + gPlayerEntity.y.HALF.HI = super->y.HALF.HI; if (gPlayerEntity.z.HALF.HI > -0x10) { if (gPlayerEntity.zVelocity >= 0) { return; } - gPlayerEntity.animationState = this->animationState << 1; + gPlayerEntity.animationState = super->animationState << 1; gPlayerState.flags = (gPlayerState.flags ^ PL_ENTER_MINECART) | PL_IN_MINECART; - this->action++; - this->field_0xf = 1; - this->flags |= ENT_PERSIST; - this->hitType = 0x97; - this->field_0x3c = (gPlayerEntity.field_0x3c + 1) | 0x20; - this->flags2 = gPlayerEntity.flags2; - this->hurtType = 0x18; - this->damage = 8; - sub_0801766C(this); - sub_0807BA8C(COORD_TO_TILE(this), this->collisionLayer); + super->action++; + super->field_0xf = 1; + super->flags |= ENT_PERSIST; + super->hitType = 0x97; + super->field_0x3c = (gPlayerEntity.field_0x3c + 1) | 0x20; + super->flags2 = gPlayerEntity.flags2; + super->hurtType = 0x18; + super->damage = 8; + sub_0801766C(super); + sub_0807BA8C(COORD_TO_TILE(super), super->collisionLayer); SoundReq(SFX_137); } } else { - gPlayerEntity.direction = GetFacingDirection(&gPlayerEntity, this); + gPlayerEntity.direction = GetFacingDirection(&gPlayerEntity, super); } if (gPlayerEntity.zVelocity < 0) { - gPlayerEntity.spritePriority.b0 = this->spritePriority.b0 - 1; + gPlayerEntity.spritePriority.b0 = super->spritePriority.b0 - 1; } } -void sub_080919AC(Entity* this) { +void sub_080919AC(MinecartEntity* this) { + static const s8 gUnk_081223C8[] = { 0, -7, 7, 0, 0, 7, -7, 0 }; + u32 iVar2; u32 uVar3; gRoomControls.unk5 = 7; if ((gPlayerState.flags & PL_IN_MINECART) == 0) { - this->action = 1; + super->action = 1; return; } if ((gPlayerEntity.frame & 0xf) == 0) { - COLLISION_OFF(this); - CopyPosition(this, &gPlayerEntity); + COLLISION_OFF(super); + CopyPosition(super, &gPlayerEntity); if ((gPlayerEntity.frame & 0xf0) == 0x10) { - this->spriteOffsetY = 1; + super->spriteOffsetY = 1; } else { - this->spriteOffsetY = 0; + super->spriteOffsetY = 0; } } else { - COLLISION_ON(this); + COLLISION_ON(super); gPlayerEntity.speed = 0; - LinearMoveUpdate(this); - CopyPosition(this, &gPlayerEntity); - gPlayerEntity.spritePriority.b0 = this->spritePriority.b0 - 1; + LinearMoveUpdate(super); + CopyPosition(super, &gPlayerEntity); + gPlayerEntity.spritePriority.b0 = super->spritePriority.b0 - 1; if (!sub_08091DDC(this)) { if ((gRoomTransition.frameCount & 0xf) == 0) { SoundReq(SFX_138); } - if (--this->field_0xf == 0xff) { + if (--super->field_0xf == 0xff) { SoundReq(SFX_PLY_VO7); - this->field_0xf = 0x3c; + super->field_0xf = 0x3c; } - uVar3 = sub_080B1A8C(this, gUnk_081223C8[this->animationState * 2], - gUnk_081223C8[this->animationState * 2 + 1]); - iVar2 = sub_08007DD6(uVar3, gUnk_081223D8[this->animationState]); + uVar3 = sub_080B1A8C(super, gUnk_081223C8[super->animationState * 2], + gUnk_081223C8[super->animationState * 2 + 1]); + iVar2 = sub_08007DD6(uVar3, gUnk_081223D8[super->animationState]); if (iVar2 == 0) { - this->direction = DirectionTurnAround(this->direction); - this->animationState = this->animationState ^ 2; + super->direction = DirectionTurnAround(super->direction); + super->animationState = AnimationStateFlip90(super->animationState); } else { switch (uVar3) { case 0x64: - this->flags &= ~ENT_PERSIST; - this->hitType = 1; - this->field_0x3c = 0x47; - this->hurtType = 0x44; - this->flags2 = 0x80; - this->action = 6; - sub_08017744(this); + super->flags &= ~ENT_PERSIST; + super->hitType = 1; + super->field_0x3c = 0x47; + super->hurtType = 0x44; + super->flags2 = 0x80; + super->action = 6; + sub_08017744(super); gPlayerState.jump_status = 0x41; gPlayerState.flags = (gPlayerState.flags ^ PL_IN_MINECART) | PL_ENTER_MINECART; gPlayerEntity.zVelocity = Q_16_16(2.0); gPlayerEntity.speed = 0x200; - gPlayerEntity.animationState = this->animationState << 1; - gPlayerEntity.direction = this->direction; + gPlayerEntity.animationState = super->animationState << 1; + gPlayerEntity.direction = super->direction; gPlayerEntity.flags |= PL_MINISH; - sub_08004168(this); - InitAnimationForceUpdate(this, this->animationState + 0xc); + sub_08004168(super); + InitAnimationForceUpdate(super, super->animationState + 0xc); SoundReq(SFX_PLY_VO4); SoundReq(SFX_139); return; @@ -177,21 +194,135 @@ void sub_080919AC(Entity* this) { case 0x6d: case 0x6e: case 0x6f: - if (uVar3 == sub_080B1AA8(this)) { + if (uVar3 == GetTileUnderEntity(super)) { sub_08091C0C(this); - gPlayerEntity.animationState = this->animationState << 1; + gPlayerEntity.animationState = super->animationState << 1; return; } break; } } - gPlayerEntity.animationState = this->animationState << 1; - if (this->animIndex == this->animationState) { - UpdateAnimationSingleFrame(this); + gPlayerEntity.animationState = super->animationState << 1; + if (super->animIndex == super->animationState) { + UpdateAnimationSingleFrame(super); } else { - InitAnimationForceUpdate(this, this->animationState); + InitAnimationForceUpdate(super, super->animationState); } } } } + +void sub_08091C0C(MinecartEntity* this) { + sub_08004168(super); + CopyPosition(super, &gPlayerEntity); + switch (GetTileUnderEntity(super)) { + case 0x67: + if (super->direction == DirectionWest) { + super->direction = DirectionNorth; + super->animationState = 0; + } else { + super->direction = DirectionEast; + super->animationState = 1; + } + break; + case 0x68: + if (super->direction == DirectionEast) { + super->direction = DirectionSouth; + super->animationState = 2; + } else { + super->direction = DirectionWest; + super->animationState = 3; + } + break; + case 0x69: + if (super->direction == DirectionEast) { + super->direction = DirectionNorth; + super->animationState = 0; + } else { + super->direction = DirectionWest; + super->animationState = 3; + } + break; + case 0x6a: + if (super->direction == DirectionWest) { + super->direction = DirectionSouth; + super->animationState = 2; + } else { + super->direction = DirectionEast; + super->animationState = 1; + } + break; + default: + super->action = 3; + return; + } + + super->action = 3; + gPlayerEntity.animationState = super->animationState << 1; +} + +void sub_08091C98(MinecartEntity* this) { + LinearMoveUpdate(super); + CopyPosition(super, &gPlayerEntity); + if (gRoomControls.reload_flags == 0) { + super->action = 3; + super->speed = 0x700; + gRoomControls.camera_target = &gPlayerEntity; + } +} + +void sub_08091CC8(MinecartEntity* this) { + struct_030010EC* minecartData; + + if (gPlayerState.jump_status == 0) { + super->action = 1; + super->direction = DirectionTurnAround(super->direction); + super->animationState ^= 2; + gPlayerState.flags ^= PL_ENTER_MINECART; + minecartData = this->minecartData; + minecartData->tilePos = COORD_TO_TILE(super); + minecartData->room = gRoomControls.room; + minecartData->animationState = super->animationState; + InitAnimationForceUpdate(super, super->animationState + 0x10); + SetTile(0x4022, COORD_TO_TILE(super), super->collisionLayer); + } else { + UpdateAnimationSingleFrame(super); + gPlayerEntity.spritePriority.b0 = super->spritePriority.b0 - 1; + } +} + +void sub_08091D90(MinecartEntity* this) { + if (super->zVelocity < 0) { + UpdateAnimationSingleFrame(super); + } + if (((super->frame & 0x7f) == 0) && GravityUpdate(super, 0x2000) == 0) { + super->type2 ^= 4; + super->action = 1; + this->minecartData->field_0x6 = super->type2; + SoundReq(SFX_13C); + } +} + +bool32 sub_08091DDC(MinecartEntity* this) { + static const s8 gUnk_081223D0[] = { 0, -8, 8, 0, 0, 8, -8, 0 }; + if ((sub_080B1AF0(super, gUnk_081223D0[super->animationState * 2], gUnk_081223D0[super->animationState * 2 + 1]) == + 0xff) && + (sub_0807BD14(&gPlayerEntity, super->animationState))) { + super->updatePriority = 6; + super->action = 5; + switch (super->direction) { + case 0: + case 8: + case 0x10: + case 0x18: + super->speed = 0xa0; + break; + } + gPlayerEntity.direction = super->direction; + gRoomControls.camera_target = super; + return 1; + } else { + return 0; + } +} diff --git a/src/object/mineralWaterSource.c b/src/object/mineralWaterSource.c index 1ffcd585..e4b438d4 100644 --- a/src/object/mineralWaterSource.c +++ b/src/object/mineralWaterSource.c @@ -1,5 +1,4 @@ -#include "global.h" -#include "entity.h" +#include "object.h" extern void (*MineralWaterSourceActionFuncs[])(Entity*); @@ -12,8 +11,6 @@ typedef struct { extern UnkStruct_MineralWater MineralWaterSourceParameters[]; -extern bool32 AllocMutableHitbox(Entity*); - void MineralWaterSource(Entity* this) { MineralWaterSourceActionFuncs[this->action](this); } @@ -21,7 +18,7 @@ void MineralWaterSource(Entity* this) { void MineralWaterSource_Init(Entity* this) { UnkStruct_MineralWater* unknownParameters; - if (!AllocMutableHitbox(this)) { + if (AllocMutableHitbox(this) == NULL) { return; } diff --git a/src/object/object15.c b/src/object/object15.c index 25bfe1f5..43b03d0b 100644 --- a/src/object/object15.c +++ b/src/object/object15.c @@ -34,7 +34,7 @@ void Object15_Action1(Entity* this) { DeleteThisEntity(); } } else { - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { DeleteThisEntity(); } } diff --git a/src/object/object1E.c b/src/object/object1E.c index 48991a92..1356bdd0 100644 --- a/src/object/object1E.c +++ b/src/object/object1E.c @@ -72,7 +72,7 @@ END_NONMATCH void sub_080875F4(Entity* this) { GetNextFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { DeleteThisEntity(); } if (this->type2 != 0) { diff --git a/src/object/object20.c b/src/object/object20.c index 1cfb4c2c..9474f662 100644 --- a/src/object/object20.c +++ b/src/object/object20.c @@ -48,7 +48,7 @@ void sub_08087824(Entity* this) { void sub_08087888(Entity* this) { GetNextFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { DeleteThisEntity(); } else { if (this->frame < 5) { diff --git a/src/object/object21.c b/src/object/object21.c index 6641b14c..f25e1a50 100644 --- a/src/object/object21.c +++ b/src/object/object21.c @@ -38,7 +38,7 @@ void Object21(Object21Entity* this) { } else { if (super->animIndex == 0xa) { InitializeAnimation(super, 0xd); - } else if ((super->frame & 0x80) != 0) { + } else if ((super->frame & ANIM_DONE) != 0) { DeleteThisEntity(); } } diff --git a/src/object/object2B.c b/src/object/object2B.c index 747bf241..efd23de9 100644 --- a/src/object/object2B.c +++ b/src/object/object2B.c @@ -17,6 +17,6 @@ void Object2B(Entity* object) { DeleteThisEntity(); } else { int position = 0x120 - parent->z.HALF.HI; - sub_0805EC9C(object, position, position, parent->field_0x7c.HALF_U.HI); + SetAffineInfo(object, position, position, parent->field_0x7c.HALF_U.HI); } } diff --git a/src/object/object36.c b/src/object/object36.c index 83150e0f..94dae2b3 100644 --- a/src/object/object36.c +++ b/src/object/object36.c @@ -69,7 +69,7 @@ void sub_0808BBE0(Object36Entity* this) { diff /= 0x10; super->spriteOffsetY = gUnk_08121474[diff]; ptr = &gUnk_0812144C[diff * 2]; - sub_0805EC9C(super, ptr[0], ptr[1], 0); + SetAffineInfo(super, ptr[0], ptr[1], 0); } else { super->bitfield &= 0x7f; } @@ -119,7 +119,7 @@ void sub_0808BD14(Object36Entity* this) { if (super->field_0xf != 0) { super->field_0xf -= 8; - sub_0805EC9C(super, 0x200 - super->field_0xf, 0x200 - super->field_0xf, 0); + SetAffineInfo(super, 0x200 - super->field_0xf, 0x200 - super->field_0xf, 0); } if (super->bitfield == 0x93) { super->direction = GetFacingDirection(super, &gPlayerEntity); diff --git a/src/object/object3D.c b/src/object/object3D.c index 0416ac2c..05514818 100644 --- a/src/object/object3D.c +++ b/src/object/object3D.c @@ -74,7 +74,7 @@ void Object3D_Action1(Object3DEntity* this) { super->actionDelay = 0x1e; super->field_0xf = 0xff; super->spriteRendering.b0 = 3; - sub_0805EC9C(super, 0x100, 0x100, 0); + SetAffineInfo(super, 0x100, 0x100, 0); gArea.field_0x10 = 1; SetFade(5, 8); } @@ -108,7 +108,7 @@ void Object3D_Action2(Object3DEntity* this) { if (0x80 < super->field_0xf) { super->field_0xf -= 8; } - sub_0805EC9C(super, super->field_0xf, super->field_0xf, 0); + SetAffineInfo(super, super->field_0xf, super->field_0xf, 0); } else { gArea.filler3[0]++; gArea.field_0x10 = 0; diff --git a/src/object/object3E.c b/src/object/object3E.c index 672c428e..c950452e 100644 --- a/src/object/object3E.c +++ b/src/object/object3E.c @@ -191,7 +191,7 @@ void Object3E_Type7(Object3EEntity* this) { super->spritePriority.b0 = 7; super->spriteRendering.alphaBlend = 1; super->frameIndex = super->type2; - sub_0805EC9C(super, (1 - super->type2) * 0x200 + 0x100, 0xffffff40, 0); + SetAffineInfo(super, (1 - super->type2) * 0x200 + 0x100, 0xffffff40, 0); } } diff --git a/src/object/object43.c b/src/object/object43.c index fdf67abc..b8d9edea 100644 --- a/src/object/object43.c +++ b/src/object/object43.c @@ -197,7 +197,7 @@ void Object43_Action3(Object43Entity* this) { void Object43_Action4(Object43Entity* this) { GetNextFrame(super); - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { DeleteThisEntity(); } } diff --git a/src/object/object44.c b/src/object/object44.c index 0753c7f4..b73c0bca 100644 --- a/src/object/object44.c +++ b/src/object/object44.c @@ -51,7 +51,7 @@ void sub_0808E298(Entity* this) { void sub_0808E318(Entity* this) { GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { sub_0808E354(this, 0x343); DeleteThisEntity(); } else { diff --git a/src/object/object49.c b/src/object/object49.c index aaecd05b..1b74b298 100644 --- a/src/object/object49.c +++ b/src/object/object49.c @@ -111,7 +111,7 @@ void sub_0808F244(Entity* this) { } static void sub_0808F2B0(Entity* this) { - sub_0805EC9C(this, *(u32*)&this->field_0x74, *(u32*)&this->field_0x78, this->field_0x70.WORD); + SetAffineInfo(this, *(u32*)&this->field_0x74, *(u32*)&this->field_0x78, this->field_0x70.WORD); } void sub_0808F2C0(Entity* this) { diff --git a/src/object/object4B.c b/src/object/object4B.c index 7e76e856..b7dbc6ab 100644 --- a/src/object/object4B.c +++ b/src/object/object4B.c @@ -48,7 +48,7 @@ void Object4B_Action1(Object4BEntity* this) { void Object4B_Action2(Object4BEntity* this) { GetNextFrame(super); - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { super->action++; super->spritePriority.b1 = 3; InitializeAnimation(super, 2); @@ -80,12 +80,12 @@ void Object4B_Action4(Object4BEntity* this) { } if ((super->y.HALF.HI - gRoomControls.origin_y) < 0x231) { super->y.HALF.HI = gRoomControls.origin_y + 0x230; - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { super->action++; super->actionDelay = 0x78; InitializeAnimation(super, 2); } - } else if ((super->frame & 0x80) != 0) { + } else if ((super->frame & ANIM_DONE) != 0) { super->zVelocity = 0x20000; InitializeAnimation(super, 3); SoundReq(SFX_12B); @@ -102,7 +102,7 @@ void Object4B_Action5(Object4BEntity* this) { void Object4B_Action6(Object4BEntity* this) { GetNextFrame(super); - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { super->action++; super->actionDelay = 0x3c; InitializeAnimation(super, 1); diff --git a/src/object/object61.c b/src/object/object61.c index 4c72c0d9..5756afdd 100644 --- a/src/object/object61.c +++ b/src/object/object61.c @@ -124,7 +124,7 @@ void Object61_Action1Type0(Object61Entity* this) { super->spriteOrientation.flipY = gPlayerEntity.spriteOrientation.flipY; super->spriteRendering.b3 = gPlayerEntity.spriteRendering.b3; sub_0806FCF4(super, this->unk_72, 10, 2); - sub_0805EC9C(super, this->unk_6e, this->unk_72, 0); + SetAffineInfo(super, this->unk_6e, this->unk_72, 0); sub_0806FEBC(&gPlayerEntity, 1, super); } diff --git a/src/object/object64.c b/src/object/object64.c index a536c556..d1d6f62e 100644 --- a/src/object/object64.c +++ b/src/object/object64.c @@ -67,7 +67,7 @@ void sub_08093EAC(Object64Entity* this) { void sub_08093ED0(Object64Entity* this) { GetNextFrame(super); - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { DeleteEntity(super); } } @@ -80,7 +80,7 @@ void sub_08093EF0(Object64Entity* this) { return; } GetNextFrame(super); - if ((super->frame & 0x80) == 0) { + if ((super->frame & ANIM_DONE) == 0) { return; } object = CreateObject(OBJECT_64, 1, 0); @@ -100,7 +100,7 @@ void sub_08093EF0(Object64Entity* this) { CopyPosition(super, object); } } - if ((super->frame & 0x80) == 0) { + if ((super->frame & ANIM_DONE) == 0) { return; } if (super->parent == &gPlayerEntity) { @@ -111,7 +111,7 @@ void sub_08093EF0(Object64Entity* this) { break; case 2: GetNextFrame(super); - if ((super->frame & 0x80) == 0) { + if ((super->frame & ANIM_DONE) == 0) { return; } DeleteThisEntity(); diff --git a/src/object/object66.c b/src/object/object66.c index 02f31e6c..bd82c084 100644 --- a/src/object/object66.c +++ b/src/object/object66.c @@ -27,7 +27,7 @@ void Object66(Entity* this) { iVar2 = 0x100 - 2 * (parent->z.HALF.HI + 0x40); iVar4 = 0x200 - 4 * (parent->z.HALF.HI + 0x40); } - sub_0805EC9C(this, iVar2, iVar4, 0); + SetAffineInfo(this, iVar2, iVar4, 0); } else { DeleteThisEntity(); } diff --git a/src/object/object67.c b/src/object/object67.c index 05218223..f36636f8 100644 --- a/src/object/object67.c +++ b/src/object/object67.c @@ -27,8 +27,6 @@ void sub_08094570(Object67Entity*); void sub_08094660(Object67Entity*); void sub_08094708(Object67Entity*, u32, u32); -extern bool32 AllocMutableHitbox(Entity*); - void Object67(Entity* this) { static void (*const actionFuncs[])(Object67Entity*) = { sub_08094148, sub_08094398, sub_08094424, sub_08094540, sub_08094570, @@ -135,7 +133,7 @@ void sub_08094148(Object67Entity* this) { this->unk84.HALF.HI = 0x100; } - if (AllocMutableHitbox(super)) { + if (AllocMutableHitbox(super) != NULL) { super->hitbox->offset_x = gUnk_080FD2E8.offset_x; super->hitbox->offset_y = gUnk_080FD2E8.offset_y; super->hitbox->unk2[0] = gUnk_080FD2E8.unk2[0]; @@ -181,7 +179,7 @@ void sub_08094398(Object67Entity* this) { this->unk7c = 600; super->action = 2; } - sub_0805EC9C(super, this->unk80.HALF_U.HI, this->unk84.HALF_U.HI, 0); + SetAffineInfo(super, this->unk80.HALF_U.HI, this->unk84.HALF_U.HI, 0); } else { if ((((GenericEntity*)super->child)->field_0x78.HALF.HI & 0x80) == 0) { DeleteThisEntity(); @@ -224,7 +222,7 @@ void sub_08094424(Object67Entity* this) { } else { sub_0806FCF4(super, this->unk80.HALF.HI, 0x20, super->actionDelay); sub_0806FCF4(super, this->unk84.HALF.HI, 0x20, super->field_0xf); - sub_0805EC9C(super, this->unk80.HALF_U.HI, this->unk84.HALF_U.HI, 0); + SetAffineInfo(super, this->unk80.HALF_U.HI, this->unk84.HALF_U.HI, 0); } if (super->hitbox != NULL) { @@ -241,7 +239,7 @@ void sub_08094540(Object67Entity* this) { super->action = 4; this->unk7c = 2; } - sub_0805EC9C(super, this->unk80.HALF_U.HI, this->unk84.HALF_U.HI, 0); + SetAffineInfo(super, this->unk80.HALF_U.HI, this->unk84.HALF_U.HI, 0); } void sub_08094570(Object67Entity* this) { @@ -275,7 +273,7 @@ void sub_08094570(Object67Entity* this) { } sub_0806FCF4(super, this->unk80.HALF.HI, 0x20, super->actionDelay); sub_0806FCF4(super, this->unk84.HALF.HI, 0x20, super->field_0xf); - sub_0805EC9C(super, this->unk80.HALF_U.HI, this->unk84.HALF_U.HI, 0); + SetAffineInfo(super, this->unk80.HALF_U.HI, this->unk84.HALF_U.HI, 0); } if (super->hitbox != NULL) { diff --git a/src/object/object6A.c b/src/object/object6A.c index 9ae71669..79670b5a 100644 --- a/src/object/object6A.c +++ b/src/object/object6A.c @@ -327,7 +327,7 @@ void sub_08094E30(Object6AEntity* this) { super->zVelocity = 0; SetDefaultPriority(super, PRIO_PLAYER_EVENT); InitializeAnimation(super, 0); - if (sub_080B1AA8(super) == 13) { + if (GetTileUnderEntity(super) == 13) { super->action = 3; } break; @@ -344,7 +344,7 @@ void sub_08094E30(Object6AEntity* this) { break; case 2: GetNextFrame(super); - if (super->frame & 0x80) { + if (super->frame & ANIM_DONE) { DeleteThisEntity(); } break; @@ -548,9 +548,9 @@ void sub_08095288(Object6AEntity* this) { if (super->subAction != 0) { if ((u32)sub_080044EC(super, 0x1800) <= 1) { super->subAction = 0; - sub_0805EC9C(super, 0x100, 0x100, 0xC000); + SetAffineInfo(super, 0x100, 0x100, 0xC000); } else { - sub_0805EC9C(super, 0x100, 0x100, super->actionDelay << 8); + SetAffineInfo(super, 0x100, 0x100, super->actionDelay << 8); super->actionDelay += 10; LinearMoveUpdate(super); } @@ -770,7 +770,7 @@ void sub_0809577C(Object6AEntity* this) { InitializeAnimation(super, 1); } GetNextFrame(super); - if (super->frame & 0x80) + if (super->frame & ANIM_DONE) DeleteThisEntity(); } @@ -951,7 +951,7 @@ void sub_08095B48(Object6AEntity* this) { p = super->parent; if (p != NULL) { if ((p->frame & 0x40) == 0) { - if (p->frame & 0x80) { + if (p->frame & ANIM_DONE) { DeleteThisEntity(); return; } diff --git a/src/object/object86.c b/src/object/object86.c index 57151a05..bdaa2811 100644 --- a/src/object/object86.c +++ b/src/object/object86.c @@ -31,7 +31,7 @@ void sub_08099E10(Entity* this) { this->frame = 0; sub_08099ECC(this); } - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 2; InitializeAnimation(this, 1); } @@ -40,7 +40,7 @@ void sub_08099E10(Entity* this) { void sub_08099E58(Entity* this) { GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->frame &= ~0x80; this->actionDelay++; if (this->actionDelay == 3) { @@ -70,5 +70,5 @@ void sub_08099ECC(Entity* this) { CopyPosition(this, &gPlayerEntity); gPlayerState.queued_action = PLAYER_FALL; gPlayerState.field_0x38 = 0; - gPlayerState.flags |= PL_FLAGS8000; + gPlayerState.flags |= PL_PIT_IS_EXIT; } diff --git a/src/object/object96.c b/src/object/object96.c new file mode 100644 index 00000000..2ffac509 --- /dev/null +++ b/src/object/object96.c @@ -0,0 +1,181 @@ +#define NENT_DEPRECATED +#include "entity.h" +#include "player.h" +#include "asm.h" +#include "functions.h" +#include "sound.h" +#include "item.h" +#include "flags.h" +#include "effects.h" + +typedef struct _struct_gUnk_08123FB0 { + void (*const funcEnt)(Entity*); + bool32 (*const func)(Entity*, const struct _struct_gUnk_08123FB0*); + s8 unk08; + s8 unk09; + u8 unk0a; + u8 unk0b; + u8 unk0c; + u8 type; + u8 unk0e; + u8 unk0f; + s32 zVelocity; + u32 unk14; + s16 speed; + s16 y; + u16 flag; + u8 actionDelay; + u8 unk1f; +} struct_gUnk_08123FB0; + +static_assert(sizeof(struct_gUnk_08123FB0) == 0x20); + +void sub_0809D91C(Entity*); +bool32 sub_0809D93C(Entity*, const struct_gUnk_08123FB0*); +void Object96_Init(Entity*, const struct_gUnk_08123FB0*); +void Object96_Action1(Entity*, const struct_gUnk_08123FB0*); +void Object96_Action2(Entity*, const struct_gUnk_08123FB0*); +void Object96_Action3(Entity*, const struct_gUnk_08123FB0*); + +static const struct_gUnk_08123FB0 gUnk_08123FB0[] = { + { sub_0809D91C, sub_0809D93C, 0, 0, 0x30, 0x30, 0x1, 0x3c, 0x3c, 0x13, 0x10000, 0x1800, 0x60, 0x40, 0x4021, 0x1, + 0x0 }, + { sub_0809D91C, NULL, 0, 0, 0, 0, 0, 0x63, 0x63, 0x10, 0, 0x1800, 0, 0x18, +#if defined(JP) || defined(DEMO_JP) || defined(EU) + 0xCD, +#else + 0xd0, +#endif + 0, 0 }, + { sub_0809D91C, NULL, 0, 0, 0, 0, 0, 0x3c, 0x3c, 0xf, 0x10000, 0x1800, 0x60, 0x40, 0x4021, 0x1, 0x0 }, + { sub_0809D91C, NULL, 0, 0, 0, 0, 0, 0x3c, 0x3c, 0x2, 0x10000, 0x1800, 0x140, 0x40, 0x4021, 0x1, 0x0 }, + { sub_0809D91C, NULL, 0, 0, 0, 0, 0x0, 0x3c, 0x3c, 0xd, 0x10000, 0x1800, 0x60, 0x40, 0x4021, 0x1, 0x0 }, + { sub_0809D91C, NULL, 0, 0, 0, 0, 0x0, 0x3c, 0x3c, 0x1a, 0x10000, 0x1800, 0x100, 0x40, 0x4021, 0x1, 0x0 }, + { sub_0809D91C, NULL, 0, 0, 0, 0, 0x0, 0x3c, 0x3c, 0x13, 0x10000, 0x1800, 0x60, 0x40, 0x4021, 0x1, 0x0 }, + { NULL, NULL, 0, 0, 0, 0, 0x0, 0x5c, 0x5c, 0x81, 0, 0x1800, 0x100, 0x20, 0x0, 0x1, 0x0 }, +}; + +void Object96(Entity* this) { + static void (*const actionFuncs[])(Entity*, const struct_gUnk_08123FB0*) = { + Object96_Init, + Object96_Action1, + Object96_Action2, + Object96_Action3, + }; + actionFuncs[this->action](this, &gUnk_08123FB0[this->type]); +} + +void Object96_Init(Entity* this, const struct_gUnk_08123FB0* param_2) { + u32 type; + u32 dir; + + this->action++; + this->collisionLayer = 2; + this->spriteRendering.b3 = 1; + this->zVelocity = param_2->zVelocity; + this->direction = param_2->unk0f; + this->speed = param_2->speed; + this->y.HALF.HI -= param_2->y; + this->z.WORD = 0; + this->actionDelay = param_2->actionDelay; + if ((this->direction & 0x80)) { + dir = this->direction; + if (dir == 0x81) { + this->direction = (((gPlayerEntity.animationState * 4 + (Random() & 3)) - 2) & 0x1f) ^ 0x10; + } + } + UpdateSpriteForCollisionLayer(this); + type = this->type; + sub_08080CB4(this); + this->type = type; +} + +void Object96_Action1(Entity* this, const struct_gUnk_08123FB0* param_2) { + u32 type; + s32 iVar3; + + iVar3 = 1; + if (param_2->func != NULL) { + iVar3 = param_2->func(this, param_2); + } + if (iVar3 != 0) { + this->action++; + this->y.HALF.HI += param_2->y; + this->z.HALF.HI -= param_2->y; + } + type = this->type; + this->type = param_2->type; + sub_08080CB4(this); + this->type = type; +} + +void Object96_Action2(Entity* this, const struct_gUnk_08123FB0* param_2) { + u8 type; + + LinearMoveUpdate(this); + if (sub_080044EC(this, param_2->unk14) < 2) { + if (this->actionDelay) { + this->actionDelay--; + this->zVelocity = param_2->unk14 << 3; + } else { + this->action++; + this->collisionLayer = gPlayerEntity.collisionLayer; + UpdateSpriteForCollisionLayer(this); + if (param_2->funcEnt != NULL) { + param_2->funcEnt(this); + } + } + SoundReq(SFX_RUPEE_BOUNCE); + } + type = this->type; + this->type = param_2->type; + sub_08080CB4(this); + this->type = type; +} + +void Object96_Action3(Entity* this, const struct_gUnk_08123FB0* param_2) { + u8 type; + + if (gPlayerState.flags & 0x80) { + sub_0800445C(this); + } else { + if (IsCollidingPlayer(this)) { + CreateItemEntity(param_2->type, this->type2, 0); + if (param_2->flag) { + SetFlag(param_2->flag); + } + DeleteThisEntity(); + } + } + type = this->type; + this->type = param_2->type; + sub_08080CB4(this); + this->type = type; +} + +void sub_0809D91C(Entity* this) { + Entity* fxEnt; + + fxEnt = CreateFx(this, FX_DASH, 0); + if (fxEnt != NULL) { + SortEntityBelow(this, fxEnt); + } + SoundReq(SFX_SECRET); +} + +bool32 sub_0809D93C(Entity* this, const struct_gUnk_08123FB0* param_2) { + u32 uVar1; + + if (gPlayerEntity.action == 6 && ((param_2->unk0c >> gPlayerEntity.animationState & 1) != 0)) { + uVar1 = (gPlayerEntity.x.HALF.HI - this->x.HALF.HI) + param_2->unk08 + param_2->unk0a; + if (param_2->unk0a * 2 <= (u16)uVar1) { + return 0; + } + + uVar1 = (gPlayerEntity.y.HALF.HI - (this->y.HALF.HI + param_2->y)) + param_2->unk09 + param_2->unk0b; + if (param_2->unk0b * 2 > (u16)uVar1) { + return 1; + } + } + return 0; +} diff --git a/src/object/object98.c b/src/object/object98.c new file mode 100644 index 00000000..798836dc --- /dev/null +++ b/src/object/object98.c @@ -0,0 +1,68 @@ +#define NENT_DEPRECATED +#include "entity.h" +#include "projectile.h" +#include "room.h" +#include "functions.h" + +typedef struct { + Entity base; + u8 filler[0xC]; + u16 unk74; + u16 unk76; + u8 filler2[0x6]; + u8 unk7e; +} Object98Entity; + +void sub_0809E360(Object98Entity*); +void sub_0809E3E4(Object98Entity*); + +void Object98(Entity* this) { + static void (*const actionFuncs[])(Object98Entity*) = { + sub_0809E360, + sub_0809E3E4, + }; + + actionFuncs[this->action]((Object98Entity*)this); +} + +void sub_0809E360(Object98Entity* this) { + u32 bVar1; + Entity* projEnt; + u32 index; + + if (8 < super->actionDelay) { + super->actionDelay = 8; + } + + if (0x48 - super->actionDelay > gEntCount) { + for (index = 0; index < super->actionDelay; index++) { + projEnt = CreateProjectile(GURUGURU_BAR_PROJECTILE); + projEnt->actionDelay = 14 + 12 * index; + projEnt->parent = super; + } + + super->action = 1; + bVar1 = this->unk7e; + this->unk76 = bVar1 << 8; + super->animationState = bVar1 << 6; + SetDefaultPriority(super, 0); + if (super->type != 0) { + super->child = (Entity*)GetCurrentRoomProperty(super->type); + sub_080A2CC0(super, (u16**)&super->child, &this->unk74); + } + } +} + +void sub_0809E3E4(Object98Entity* this) { + this->unk76 += super->type2; + super->animationState = this->unk76 >> 2; + if (super->type != 0) { + if ((super->direction & 0x80) == 0) { + LinearMoveUpdate(super); + } + + if (--this->unk74 == 0) { + sub_080A2CC0(super, (u16**)&super->child, &this->unk74); + } + } +} diff --git a/src/object/object99.c b/src/object/object99.c new file mode 100644 index 00000000..e8bf6a33 --- /dev/null +++ b/src/object/object99.c @@ -0,0 +1,39 @@ +#include "entity.h" +#include "coord.h" + +void Object99(Entity* this) { + Entity* parent; + + parent = this->parent; + if (parent->next == NULL) { + DeleteThisEntity(); + } + + if (this->action == 0) { + this->action = 1; + this->field_0x76.HALF.LO = parent->animationState; + this->field_0x74.HALF.LO = this->spriteOffsetX; + this->field_0x74.HALF.HI = this->spriteOffsetY; + InitializeAnimation(this, this->animationState); + } + + if (parent->animationState != this->field_0x76.HALF.LO) { + DeleteThisEntity(); + } + this->spriteSettings.draw = parent->spriteSettings.draw; + CopyPositionAndSpriteOffset(parent, this); + this->spriteOffsetX += this->field_0x74.HALF.LO; + this->spriteOffsetY += this->field_0x74.HALF.HI; + if (this->animationState != 2) { + this->y.HALF.HI++; + this->spriteOffsetY--; + } else { + this->y.HALF.HI--; + this->spriteOffsetY++; + } + + GetNextFrame(this); + if (this->frame & 0x80) { + DeleteThisEntity(); + } +} diff --git a/src/object/object9B.c b/src/object/object9B.c index 1f88aefa..82b7eebf 100644 --- a/src/object/object9B.c +++ b/src/object/object9B.c @@ -25,7 +25,7 @@ void sub_0809E7C0(Entity* this) { void sub_0809E7E0(Entity* this) { GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { DeleteThisEntity(); } } diff --git a/src/object/objectA2.c b/src/object/objectA2.c index e529794c..8091c484 100644 --- a/src/object/objectA2.c +++ b/src/object/objectA2.c @@ -74,7 +74,7 @@ void sub_0809F374(Entity* this) { } void sub_0809F3E8(Entity* this) { - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->action = 3; InitializeAnimation(this, 2); } diff --git a/src/object/objectA6.c b/src/object/objectA6.c new file mode 100644 index 00000000..fc77a54e --- /dev/null +++ b/src/object/objectA6.c @@ -0,0 +1,51 @@ +#define NENT_DEPRECATED +#include "entity.h" +#include "flags.h" +#include "hitbox.h" +#include "effects.h" + +typedef struct { + Entity base; + u8 filler[0x1E]; + u16 objFlags; +} ObjectA6Entity; + +void sub_0809F920(ObjectA6Entity*); +void sub_0809F964(ObjectA6Entity*); + +void ObjectA6(Entity* this) { + static void (*const actionFuncs[])(ObjectA6Entity*) = { + sub_0809F920, + sub_0809F964, + }; + + actionFuncs[this->action]((ObjectA6Entity*)this); +} + +void sub_0809F920(ObjectA6Entity* this) { + if (CheckFlags(this->objFlags)) { + DeleteThisEntity(); + } + + super->action = 1; + COLLISION_ON(super); + super->field_0x3c = 7; + super->hurtType = 0x48; + super->hitType = 1; + super->flags2 = 2; + super->hitbox = (Hitbox*)&gHitbox_0; +} + +void sub_0809F964(ObjectA6Entity* this) { + Entity* fxEnt; + + if (super->bitfield == 0xa1) { + fxEnt = CreateFx(super, FX_MAGIC_STORM, 0); + if (fxEnt != NULL) { + fxEnt->spritePriority.b0 = 3; + fxEnt->spriteOffsetY = -5; + } + SetFlag(this->objFlags); + DeleteThisEntity(); + } +} diff --git a/src/object/objectA9.c b/src/object/objectA9.c new file mode 100644 index 00000000..6d9981ba --- /dev/null +++ b/src/object/objectA9.c @@ -0,0 +1,37 @@ +#define NENT_DEPRECATED +#include "entity.h" +#include "sound.h" + +void sub_0809FEF8(Entity*); +void sub_0809FF28(Entity*); + +void ObjectA9(Entity* this) { + static void (*const actionFuncs[])(Entity*) = { + sub_0809FEF8, + sub_0809FF28, + DeleteEntity, + }; + + actionFuncs[this->action]((Entity*)this); +} + +void sub_0809FEF8(Entity* this) { + static const u8 typeAnimationStates[] = { 0x2, 0x0, 0x43, 0x0 }; + static const u16 typeSounds[] = { SFX_124, SFX_197, SFX_11D, SFX_NONE }; + this->action = 1; + InitializeAnimation(this, typeAnimationStates[this->type]); + SoundReq(typeSounds[this->type]); +} + +void sub_0809FF28(Entity* this) { + Entity* pEVar1; + + GetNextFrame(this); + if (this->frame & 0x80) { + this->action = 2; + pEVar1 = this->parent; + pEVar1->flags = this->actionDelay; + pEVar1->spriteSettings.draw = this->field_0xf; + ((GenericEntity*)pEVar1)->field_0x6c.HALF.HI &= 0xef; + } +} diff --git a/src/object/objectAB.c b/src/object/objectAB.c new file mode 100644 index 00000000..767c5238 --- /dev/null +++ b/src/object/objectAB.c @@ -0,0 +1,59 @@ +#define NENT_DEPRECATED +#include "entity.h" +#include "flags.h" +#include "asm.h" +#include "player.h" +#include "coord.h" + +extern void sub_0805B390(u32); + +void ObjectAB_Init(Entity*); +void ObjectAB_Action1(Entity*); +void ObjectAB_Action2(Entity*); +void sub_080A0190(Entity*); + +void ObjectAB(Entity* this) { + static void (*const actionFuncs[])(Entity*) = { + ObjectAB_Init, + ObjectAB_Action1, + ObjectAB_Action2, + }; + + actionFuncs[this->action]((Entity*)this); +} + +void ObjectAB_Init(Entity* this) { + this->action++; + this->collisionLayer = 1; + this->spriteRendering.b3 = 3; + this->spritePriority.b0 = 7; + this->subAction = 0; + InitializeAnimation(this, 0); +} + +void ObjectAB_Action1(Entity* this) { + if (CheckRoomFlag(0)) { + GetNextFrame(this); + if (this->frame & 0x80) { + this->action++; + } + } +} + +void ObjectAB_Action2(Entity* this) { + if (CheckRoomFlag(1)) { + sub_080A0190(this); + RequestPriorityDuration(this, 0x1e); + if (EntityInRectRadius(this, &gPlayerEntity, 0x10, 0x10)) { + sub_0805B390(0x37); + } + } +} + +void sub_080A0190(Entity* this) { + this->subAction = 1; + CopyPosition(this, &gPlayerEntity); + gPlayerState.queued_action = 3; + gPlayerState.field_0x38 = 0; + gPlayerState.flags |= PL_PIT_IS_EXIT; +} diff --git a/src/object/objectAD.c b/src/object/objectAD.c new file mode 100644 index 00000000..ca73277e --- /dev/null +++ b/src/object/objectAD.c @@ -0,0 +1,54 @@ +#define NENT_DEPRECATED +#include "entity.h" +#include "functions.h" +#include "screen.h" + +void sub_080A04A4(Entity*); +void sub_080A04E0(Entity*); +void sub_080A04E8(); + +void ObjectAD(Entity* this) { + static void (*const actionFuncs[])(Entity*) = { + sub_080A04A4, + sub_080A04E0, + }; + + actionFuncs[this->action]((Entity*)this); +} + +void sub_080A04A4(Entity* this) { + this->action = 1; + this->frameIndex = 4; + this->actionDelay = 0; + this->spriteRendering.b3 = 3; + this->spritePriority.b0 = 7; + this->z.WORD = 0; + this->spriteRendering.alphaBlend = 1; + sub_080A04E8(); +} + +void sub_080A04E0(Entity* this) { + sub_080A04E8(); +} + +void sub_080A04E8(Entity* this) { + int iVar2; + u32 uVar3; + + iVar2 = (this->parent->z.HALF.HI < 0 ? -this->parent->z.HALF.HI : this->parent->z.HALF.HI) + 0x100; + SetAffineInfo(this, iVar2, iVar2, 0); + iVar2 = ((0x1c0 - iVar2) * 10) / iVar2; + if (this->parent->type == 0x41) { + uVar3 = iVar2 * 2; + if (0xc < uVar3) { + uVar3 = 0xc; + } + iVar2 = (0x10 - iVar2) * 0x100; + iVar2 |= uVar3; + iVar2 &= 0xffff; + } else { + iVar2 |= (0x10 - iVar2) * 0x100; + iVar2 &= 0xffff; + } + gScreen.controls.alphaBlend = iVar2; +} diff --git a/src/object/objectAF.c b/src/object/objectAF.c index 8aa2c9ed..cd7ebe6a 100644 --- a/src/object/objectAF.c +++ b/src/object/objectAF.c @@ -40,7 +40,7 @@ void sub_080A05F4(Entity* this) { void sub_080A0624(Entity* this) { GetNextFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { DeleteThisEntity(); } } diff --git a/src/object/objectB.c b/src/object/objectB.c index f0cfc4e5..fbf4ef50 100644 --- a/src/object/objectB.c +++ b/src/object/objectB.c @@ -124,7 +124,7 @@ void ObjectB_Action2(ObjectBEntity* this) { break; } MessageFromTarget(messageIndex); - gMessage.field_0x10 = super->type2; + gMessage.rupees = super->type2; } } } diff --git a/src/object/objectB3.c b/src/object/objectB3.c index 770d4e27..de0313ee 100644 --- a/src/object/objectB3.c +++ b/src/object/objectB3.c @@ -75,7 +75,7 @@ void sub_080A0AF0(Entity* this) { ExecuteScriptForEntity(this, NULL); GetNextFrame(this); if (this->animIndex == 5) { - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { DeleteThisEntity(); } } diff --git a/src/object/objectB4.c b/src/object/objectB4.c new file mode 100644 index 00000000..90c3b287 --- /dev/null +++ b/src/object/objectB4.c @@ -0,0 +1,135 @@ +#define NENT_DEPRECATED +#include "entity.h" +#include "menu.h" +#include "coord.h" +#include "object.h" + +extern void sub_0806FB00(Entity*, u32, u32, u32); +extern bool32 sub_0806FB38(Entity*); + +void ObjectB4_Type0(Entity*); +void ObjectB4_Type1(Entity*); +void ObjectB4_Type2(Entity*); +void ObjectB4_Type3(Entity*); + +const u16 gUnk_08124B10[] = { 0x40, 0x58, 0x68, 0x80, 0x94, 0xA8, 0xB0, 0x0 }; + +void ObjectB4(Entity* this) { + static void (*const typeFuncs[])(Entity*) = { + ObjectB4_Type0, + ObjectB4_Type1, + ObjectB4_Type2, + ObjectB4_Type3, + }; + + typeFuncs[this->type]((Entity*)this); +} + +void ObjectB4_Type0(Entity* this) { + Entity* pEVar3; + + switch (this->action) { + case 0: + this->action = 1; + this->spriteSettings.draw = 2; + this->frameIndex = 9; + this->actionDelay = 8; + this->field_0xf = 0; + this->spriteRendering.b3 = 1; + this->spritePriority.b0 = 4; + this->spriteOrientation.flipY = 1; + sub_0806FB00(this, 0xbf, 0x48, 0x1e); + break; + case 1: + if ((this->field_0xf < 7) && (--this->actionDelay == 0)) { + this->actionDelay = 1; + pEVar3 = CreateObject(OBJECT_B4, 1, this->field_0xf); + if (pEVar3 != NULL) { + CopyPosition(this, pEVar3); + pEVar3->y.HALF.HI = 0x68; + SortEntityBelow(this, pEVar3); + } + this->field_0xf++; + } + + if (sub_0806FB38(this) || (1 < gMenu.menuType)) { + this->x.HALF.HI = 0xbf; + this->y.HALF.HI = 0x48; + this->frameIndex = 10; + this->action = 2; + while (this->field_0xf < 7) { + pEVar3 = CreateObject(OBJECT_B4, 1, this->field_0xf); + if (pEVar3 != NULL) { + CopyPosition(this, pEVar3); + pEVar3->y.HALF.HI = 0x68; + SortEntityBelow(this, pEVar3); + } + this->field_0xf++; + } + + pEVar3 = CreateObject(OBJECT_B4, 2, 0); + if (pEVar3 != NULL) { + pEVar3->x.HALF.HI = 0xc4; + pEVar3->y.HALF.HI = 0x2c; + SortEntityAbove(this, pEVar3); + } + + pEVar3 = CreateObject(OBJECT_B4, 3, 0); + if (pEVar3 != NULL) { + pEVar3->x.HALF.HI = 0xb4; + pEVar3->y.HALF.HI = 0x19; + SortEntityAbove(this, pEVar3); + } + } + } +} + +void ObjectB4_Type1(Entity* this) { + switch (this->action) { + case 0: + this->action = 1; + this->spriteSettings.draw = 2; + this->frameIndex = this->type2 + 2; + sub_0806FB00(this, gUnk_08124B10[this->type2], 0x68, 0x14); + break; + case 1: + if (sub_0806FB38(this) || 1 < gMenu.menuType) { + this->x.HALF.HI = gUnk_08124B10[this->type2]; + this->y.HALF.HI = 0x68; + this->spritePriority.b0 = 7 - this->type2; + this->action = 2; + } + break; + } +} + +void ObjectB4_Type2(Entity* this) { + static const u8 gUnk_08124B30[] = { 9, 10, 11, 12, 11, 10, 9, -1 }; + if (this->action == 0) { + this->action = 1; + this->spriteSettings.draw = 2; + this->spriteRendering.b3 = 1; + this->spritePriority.b0 = 0; + this->spriteOrientation.flipY = 1; + this->frameIndex = 11; + this->actionDelay = (Random() & 0x3f) + 0x40; + this->field_0xf = 0; + } + + if (--this->actionDelay == 0) { + this->actionDelay = 4; + this->frameIndex = gUnk_08124B30[this->field_0xf++] + 2; + if (gUnk_08124B30[this->field_0xf] == 0xff) { + this->actionDelay = (Random() & 0x3f) + 0x40; + this->field_0xf = 0; + } + } +} + +void ObjectB4_Type3(Entity* this) { + if (this->action == 0) { + this->action = 1; + this->spriteSettings.draw = 2; + this->frameIndex = 15; + } +} diff --git a/src/object/objectBlockingStairs.c b/src/object/objectBlockingStairs.c new file mode 100644 index 00000000..f9aa6a1b --- /dev/null +++ b/src/object/objectBlockingStairs.c @@ -0,0 +1,350 @@ +#define NENT_DEPRECATED +#include "entity.h" +#include "flags.h" +#include "sound.h" +#include "functions.h" +#include "asm.h" +#include "object.h" +#include "effects.h" + +typedef struct { + Entity base; + u8 filler[0x10]; + u16 tilePos; + u8 unk7a; + u8 unk7b; + u8 filler2[0xA]; + u16 objFlags; +} ObjectBlockingStairsEntity; + +extern const Hitbox gUnk_080FD288; + +void ObjectBlockingStairs_Init(ObjectBlockingStairsEntity*); +void ObjectBlockingStairs_Action1(ObjectBlockingStairsEntity*); +void ObjectBlockingStairs_Action2(ObjectBlockingStairsEntity*); +void ObjectBlockingStairs_Action3(ObjectBlockingStairsEntity*); +void sub_080932A8(ObjectBlockingStairsEntity*); +void sub_08093248(ObjectBlockingStairsEntity*); +void sub_08093280(ObjectBlockingStairsEntity*); +void sub_08093334(ObjectBlockingStairsEntity*); +void sub_08093364(ObjectBlockingStairsEntity*); +void ObjectBlockingStairs_Action4(ObjectBlockingStairsEntity*); +u32 sub_080932D8(u32); +void sub_080931A4(ObjectBlockingStairsEntity*, u32); + +void ObjectBlockingStairs(Entity* this) { + static void (*const actionFuncs[])(ObjectBlockingStairsEntity*) = { + ObjectBlockingStairs_Init, ObjectBlockingStairs_Action1, ObjectBlockingStairs_Action2, + ObjectBlockingStairs_Action3, ObjectBlockingStairs_Action4, + }; + + actionFuncs[this->action]((ObjectBlockingStairsEntity*)this); +} + +void ObjectBlockingStairs_Init(ObjectBlockingStairsEntity* this) { + int iVar1; + u32 uVar2; + + switch (sub_080932D8(super->type)) { + case 1: + super->action = 4; + super->x.HALF.HI -= 0x20; + uVar2 = 2; + break; + case 2: + super->action = 4; + super->x.HALF.HI += 0x20; + uVar2 = 3; + break; + default: + super->action = 1; + super->speed = 0x80; + super->field_0x16 = 1; + super->actionDelay = 0; + super->field_0xf = 0; + this->unk7a = 0x20; + this->unk7b = 0x80; + if (super->type == 0) { + super->hitbox = (Hitbox*)&gUnk_080FD288; + } + uVar2 = 0; + if ((this->objFlags) && !CheckFlags(this->objFlags)) { + uVar2 = 1; + } + break; + } + + sub_080931A4(this, uVar2); +} + +void ObjectBlockingStairs_Action1(ObjectBlockingStairsEntity* this) { + u32 tileType; + int xDist; + Entity* ent; + + xDist = (int)gPlayerEntity.x.HALF.HI - super->x.HALF.HI; + + if (this->objFlags) { + if (!CheckFlags(this->objFlags)) { + return; + } + if (this->unk7a != 0) { + sub_080932A8(this); + return; + } + } + + if ((this->unk7b & 0x3f) == 0) { + this->unk7b |= 0xf; + sub_080931A4(this, 0); + if (xDist < 0) { + this->unk7b |= 0x40; + } + } + + if (this->unk7b & 0x40) { + tileType = (u32)GetTileType(this->tilePos - 1, super->collisionLayer); + } else { + tileType = (u32)GetTileType(this->tilePos + 1, super->collisionLayer); + } + + switch (tileType) { + case 0x4030: + case 0x4031: + super->action = 3; + super->direction = Direction8FromAnimationState(gPlayerEntity.animationState); + super->speed = 0x80; + super->actionDelay = 0x40; + RequestPriorityDuration(super, 0x50); + EnqueueSFX(SFX_10F); + sub_08093248(this); + return; + } + + if ((gPlayerEntity.animationState & 2) == 0) { + return; + } + RegisterCarryEntity(super); + + if (this->unk7b & 0x80) { + this->unk7b &= ~0x80; + if ((this->unk7b & 0x40) != 0) { + SetTile(0x402c, this->tilePos - 1, super->collisionLayer); + SetTile(0x403d, this->tilePos + 1, super->collisionLayer); + } else { + SetTile(0x403d, this->tilePos - 1, super->collisionLayer); + SetTile(0x402d, this->tilePos + 1, super->collisionLayer); + } + } else if (this->unk7b & 0x40) { + if (xDist >= 5) { + this->unk7b &= ~(0x40 | 0x80); + SetTile(0x403d, this->tilePos - 1, super->collisionLayer); + SetTile(0x402d, this->tilePos + 1, super->collisionLayer); + } + } else { + if (-xDist > 4) { + this->unk7b |= 0x40; + SetTile(0x402c, this->tilePos - 1, super->collisionLayer); + SetTile(0x403d, this->tilePos + 1, super->collisionLayer); + } + } +} + +void ObjectBlockingStairs_Action2(ObjectBlockingStairsEntity* this) { + if (super->actionDelay) { + sub_08093280(this); + } else { + if (gPlayerState.heldObject == 0x12) { + if ((gPlayerEntity.frame & 2) != 0 && ++super->field_0xf > 8) { + gPlayerState.queued_action = 16; + gPlayerState.field_0x38 = 0x40; + gPlayerState.flags |= PL_BUSY; + gPlayerEntity.x.HALF.LO = 0; + gPlayerEntity.y.HALF.LO = 0; + super->direction = (gPlayerEntity.animationState ^ 4) << 2; + super->actionDelay = 0x40; + EnqueueSFX(SFX_10F); + sub_08093248(this); + } + } else if (super->subAction == 6) { + super->action = 1; + super->field_0xf = 0; + } + } +} + +void ObjectBlockingStairs_Action3(ObjectBlockingStairsEntity* this) { + sub_0800445C(super); + LinearMoveUpdate(super); + if (--super->actionDelay == 0) { + sub_08093334(this); + } + sub_08093364(this); +} + +void ObjectBlockingStairs_Action4(ObjectBlockingStairsEntity* this) { +} + +void sub_080931A4(ObjectBlockingStairsEntity* this, u32 param_2) { + static const u16 gUnk_08122850[] = { 0x4027, 0x4023, 0x4028, 0x402c, 0x402b, 0x402d, 0x4029, 0x4026, 0x402a }; + static const u16 gUnk_08122862[] = { 0x4027, 0x4023, 0x4028, 0x4024, 0x4022, 0x4025, 0x4029, 0x4026, 0x402a }; + static const u16 gUnk_08122874[] = { 0x4027, 0x4023, 0x4023, 0x4024, 0x4022, 0x4022, 0x4029, 0x4026, 0x4026 }; + static const u16 gUnk_08122886[] = { 0x4023, 0x4023, 0x4028, 0x4022, 0x4022, 0x4025, 0x4026, 0x4026, 0x402a }; + + u32 collisionLayer; + const u16* pTileTypes; + u32 index; + u32 tilePos; + int iVar5; + + this->tilePos = COORD_TO_TILE(super); + tilePos = this->tilePos - 0x40; + collisionLayer = super->collisionLayer; + + switch (param_2) { + case 1: + pTileTypes = gUnk_08122862; + break; + case 2: + pTileTypes = gUnk_08122874; + break; + case 3: + pTileTypes = gUnk_08122886; + break; + default: + case 0: + pTileTypes = gUnk_08122850; + break; + } + + for (index = 0, iVar5 = 0; index < 9; index++) { + u32 pos = tilePos + iVar5 + index - 1; + SetTile(pTileTypes[index], pos, collisionLayer); + switch (index) { + case 2: + iVar5 = 0x3d; + break; + case 5: + iVar5 = 0x7a; + break; + } + } +} + +void sub_08093248(ObjectBlockingStairsEntity* this) { + u32 collisionLayer; + u32 tilePos; + u32 index; + int iVar4; + + tilePos = this->tilePos - 0x40; + collisionLayer = super->collisionLayer; + for (index = 0, iVar4 = 0; index < 9; index++) { + sub_0807BA8C(tilePos + iVar4 + index - 1, collisionLayer); + switch (index) { + case 2: + iVar4 = 0x3d; + break; + case 5: + iVar4 = 0x7a; + break; + } + } +} + +void sub_08093280(ObjectBlockingStairsEntity* this) { + sub_0800445C(super); + LinearMoveUpdate(super); + if (--super->actionDelay == 0) { + sub_08093334(this); + } + sub_08093364(this); +} + +void sub_080932A8(ObjectBlockingStairsEntity* this) { + this->unk7a--; + switch (this->unk7a & 3) { + case 1: + super->spriteOffsetX = 1; + break; + case 3: + super->spriteOffsetX = -1; + break; + default: + super->spriteOffsetX = 0; + break; + } +} + +typedef struct { + u32 flagBank; + u16 unk4; + u16 unk6; +} struct_gUnk_08122898; + +const struct_gUnk_08122898 gUnk_08122898[] = { + { 0x200, 0xa1, 0xa2 }, + { 0x8c0, 0x6f, 0x70 }, +}; + +u32 sub_080932D8(u32 param_1) { + const struct_gUnk_08122898* ptr = gUnk_08122898 + param_1; + + if (CheckLocalFlagByBank(ptr->flagBank, ptr->unk4)) { + return 1; + } else { + if (CheckLocalFlagByBank(ptr->flagBank, ptr->unk6)) { + return 2; + } else { + return 0; + } + } +} + +void sub_08093308(u32 param_1, u32 param_2) { + const struct_gUnk_08122898* ptr = gUnk_08122898 + param_1; + if (param_2 == 1) { + SetLocalFlagByBank(ptr->flagBank, ptr->unk4); + } else if (param_2 == 2) { + SetLocalFlagByBank(ptr->flagBank, ptr->unk6); + } +} + +void sub_08093334(ObjectBlockingStairsEntity* this) { + u32 uVar1; + + super->action = 4; + if (super->direction & 0x10) { + uVar1 = 1; + } else { + uVar1 = 2; + } + sub_080931A4(this, uVar1 + 1); + sub_08093308(super->type, uVar1); + EnqueueSFX(SFX_SECRET); +} + +void sub_08093364(ObjectBlockingStairsEntity* this) { + s32 sVar1; + Entity* dashEffectEnt; + + if ((super->actionDelay & 3) == 0) { + dashEffectEnt = CreateObject(SPECIAL_FX, FX_DASH, 0); + if (dashEffectEnt != NULL) { + dashEffectEnt->parent = super; + CopyPosition(super, dashEffectEnt); + if (super->direction & 0x10) { + dashEffectEnt->x.HALF.HI += 0x12; + } else { + dashEffectEnt->x.HALF.HI -= 0x12; + } + + sVar1 = dashEffectEnt->y.HALF.HI; + if (super->actionDelay & 8) { + dashEffectEnt->y.HALF.HI = sVar1 + 8; + } else { + dashEffectEnt->y.HALF.HI = sVar1 - 8; + } + } + } +} diff --git a/src/object/objectC1.c b/src/object/objectC1.c index 780c1c78..ed045a6d 100644 --- a/src/object/objectC1.c +++ b/src/object/objectC1.c @@ -101,7 +101,7 @@ void ObjectC1_Action8(ObjectC1Entity* this) { if ((gMessage.doTextBox & 0x7f) != 0) { return; } - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { super->action = 1; gPlayerEntity.flags = this->unk_69; gPlayerEntity.spriteSettings.draw = this->unk_68; diff --git a/src/object/objectOnPillar.c b/src/object/objectOnPillar.c index 5582f707..0433a93d 100644 --- a/src/object/objectOnPillar.c +++ b/src/object/objectOnPillar.c @@ -99,7 +99,7 @@ void ObjectOnPillar_Action1(ObjectOnPillarEntity* this) { if (sub_08097008(this)) { super->action = 3; } else { - sub_08078930(super); + RegisterCarryEntity(super); } } } @@ -211,7 +211,7 @@ void sub_080970F4(ObjectOnPillarEntity* this) { bool32 sub_08097144(ObjectOnPillarEntity* this) { LinearMoveUpdate(super); sub_0800445C(super); - if (sub_080B1AA8(super) == 0x19) { + if (GetTileUnderEntity(super) == 0x19) { super->spriteOffsetY = 2; } if ((--this->unk_76 == 0) && sub_08097194(this) == FALSE) { diff --git a/src/object/objectOnSpinyBeetle.c b/src/object/objectOnSpinyBeetle.c index e986348f..faba73b0 100644 --- a/src/object/objectOnSpinyBeetle.c +++ b/src/object/objectOnSpinyBeetle.c @@ -120,7 +120,7 @@ void ObjectOnSpinyBeetle_Action1(ObjectOnSpinyBeetleEntity* this) { } } else { sub_08098918(this); - sub_08078930(super); + RegisterCarryEntity(super); } } else { sub_080989C0(this); diff --git a/src/object/octorokBossObject.c b/src/object/octorokBossObject.c index ef2f279a..f1fbb022 100644 --- a/src/object/octorokBossObject.c +++ b/src/object/octorokBossObject.c @@ -111,7 +111,7 @@ void OctorokBossObject_Init(Entity* this) { ((-(u32)this->parent->field_0x7a.HALF.HI << 0x18) >> 0x18) + (u32)gUnk_0812388C[(u32)this->type2 * 2 + 1], (u32)gUnk_0812388C[(u32)this->type2 * 2]); - sub_0805EC9C(this, this->field_0x76.HWORD, this->field_0x74.HWORD, this->field_0x7a.HWORD); + SetAffineInfo(this, this->field_0x76.HWORD, this->field_0x74.HWORD, this->field_0x7a.HWORD); InitializeAnimation(this, 7); break; case 7: @@ -239,8 +239,8 @@ NONMATCH("asm/non_matching/octorokBossObject/OctorokBossObject_Action1.inc", this->field_0x76.HWORD -= 0x20; this->field_0x74.HWORD -= 0x20; } - sub_0805EC9C(this, (u32)this->field_0x76.HWORD, (u32)(u16)this->field_0x74.HWORD, - (u32)(u16)this->field_0x7a.HWORD); + SetAffineInfo(this, (u32)this->field_0x76.HWORD, (u32)(u16)this->field_0x74.HWORD, + (u32)(u16)this->field_0x7a.HWORD); } else { *(int*)&this->field_0x78 -= 1; } diff --git a/src/object/picoBloom.c b/src/object/picoBloom.c new file mode 100644 index 00000000..de912b8a --- /dev/null +++ b/src/object/picoBloom.c @@ -0,0 +1,47 @@ +#define NENT_DEPRECATED +#include "entity.h" +#include "asm.h" +#include "sound.h" + +void PicoBloom_Init(Entity*); +void PicoBloom_Action1(Entity*); +void PicoBloom_Action2(Entity*); + +void PicoBloom(Entity* this) { + static void (*const actionFuncs[])(Entity*) = { + PicoBloom_Init, + PicoBloom_Action1, + PicoBloom_Action2, + }; + + actionFuncs[this->action](this); +} + +void PicoBloom_Init(Entity* this) { + static const u8 typeAnimationStates[] = { 3, 0, 3, 3, 3, 3 }; + u32 nextAction; + + nextAction = this->type2; + if (nextAction != 1) { + nextAction = 2; + } + this->action = nextAction; + this->actionDelay = (Random() & 0x7f) + 0x7f; + this->collisionLayer = 1; + UpdateSpriteForCollisionLayer(this); + InitializeAnimation(this, typeAnimationStates[this->type] + this->type2); +} + +void PicoBloom_Action1(Entity* this) { + if (--this->actionDelay == 0) { + this->action++; + } +} + +void PicoBloom_Action2(Entity* this) { + GetNextFrame(this); + if (this->frame & 1) { + this->frame &= ~1; + EnqueueSFX(SFX_21B); + } +} diff --git a/src/object/playerClone.c b/src/object/playerClone.c index eee252ae..b8a94abc 100644 --- a/src/object/playerClone.c +++ b/src/object/playerClone.c @@ -98,7 +98,7 @@ void PlayerClone_Action2(PlayerCloneEntity* this) { if (gPlayerEntity.iframes >= 1) { gPlayerState.chargeState.action = 1; } else { - sub_080B1AA8(super); + GetTileUnderEntity(super); sub_08084B1C(this); super->x.HALF.HI = gPlayerEntity.x.HALF.HI + this->unk78; super->y.HALF.HI = gPlayerEntity.y.HALF.HI + this->unk7a; diff --git a/src/object/pot.c b/src/object/pot.c index 239d0732..22ee8ce0 100644 --- a/src/object/pot.c +++ b/src/object/pot.c @@ -16,7 +16,7 @@ extern void (*const gUnk_0811F090[])(Entity*); extern void (*const gUnk_0811F0A8[])(Entity*); extern void (*const gUnk_0811F0C4[])(Entity*); -extern void sub_08078930(Entity*); +extern void RegisterCarryEntity(Entity*); extern void sub_08016A6C(Entity*); void Pot(Entity* this) { @@ -94,7 +94,7 @@ void sub_08082310(Entity* this) { DeleteThisEntity(); break; default: - if (sub_080B1AA8(this) == 13) { + if (GetTileUnderEntity(this) == 13) { CreateFx(this, FX_FALL_DOWN, 0); } else if (tileType == 0x4005) { gPlayerState.field_0xab = 4; @@ -104,7 +104,7 @@ void sub_08082310(Entity* this) { break; } } else { - sub_08078930(this); + RegisterCarryEntity(this); } break; } @@ -194,7 +194,7 @@ void sub_08082614(Entity* this) { break; default: SetTile(0x4000, COORD_TO_TILE(this), this->collisionLayer); - sub_08078930(this); + RegisterCarryEntity(this); break; } } diff --git a/src/object/pullableLever.c b/src/object/pullableLever.c index 35088834..98b62c82 100644 --- a/src/object/pullableLever.c +++ b/src/object/pullableLever.c @@ -92,7 +92,7 @@ void PullableLever_HandleInit(PullableLeverEntity* this) { } void PullableLever_HandleAction1(PullableLeverEntity* this) { - sub_08078930(super); + RegisterCarryEntity(super); if (this->pullLength != 0) { super->direction = super->type2 << 3; LinearMoveUpdate(super); diff --git a/src/object/pullableMushroom.c b/src/object/pullableMushroom.c index ff7bff42..0c0e5796 100644 --- a/src/object/pullableMushroom.c +++ b/src/object/pullableMushroom.c @@ -162,7 +162,7 @@ void sub_0808ACEC(PullableMushroomEntity* this) { default: super->field_0xf = 0; super->actionDelay = 0; - sub_08078930(super); + RegisterCarryEntity(super); break; } } @@ -171,7 +171,7 @@ void sub_0808ADA0(PullableMushroomEntity* this) { if ((sub_0808B1F0(this, super->child) < 8) || (super->child == NULL)) { super->subAction += 1; super->actionDelay = 2; - super->flags |= 0x80; + super->flags |= ENT_COLLIDE; super->animationState ^= 2; super->spritePriority.b0 = 4; } else { @@ -182,9 +182,9 @@ void sub_0808ADA0(PullableMushroomEntity* this) { void sub_0808ADF0(PullableMushroomEntity* this) { if (super->animationState + 0xd == super->animIndex) { - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { super->subAction = 0; - super->flags |= 0x80; + super->flags |= ENT_COLLIDE; } else { GetNextFrame(super); } @@ -199,7 +199,7 @@ void sub_0808ADF0(PullableMushroomEntity* this) { SoundReq(SFX_12E); } else { GetNextFrame(super); - if (((super->frame & 0x80) != 0) && (--super->actionDelay == 0xff)) { + if (((super->frame & ANIM_DONE) != 0) && (--super->actionDelay == 0xff)) { InitializeAnimation(super, super->animationState + 0xd); } } @@ -245,7 +245,7 @@ void sub_0808AEB0(PullableMushroomEntity* this) { } else { super->actionDelay = 1; this->unk_7c = 1; - super->animationState = gPlayerEntity.animationState >> 1 ^ 2; + super->animationState = AnimationStateFlip90(gPlayerEntity.animationState >> 1); super->direction = (super->animationState << 3); super->flags &= 0x7f; super->spriteSettings.flipX = gPlayerEntity.spriteSettings.flipX; @@ -264,7 +264,7 @@ void sub_0808AEB0(PullableMushroomEntity* this) { void sub_0808AFD4(PullableMushroomEntity* this) { super->action = 1; super->subAction = 1; - (super->child)->direction = super->direction ^ 0x10; + (super->child)->direction = DirectionTurnAround(super->direction); SoundReq(SFX_130); } @@ -278,9 +278,9 @@ void PullableMushroom_Action3(PullableMushroomEntity* this) { if ((((gPlayerState.field_0x1c & 0xf) != 1) || ((super->bitfield & 0x7f) != 0x13)) && (super->type == 1)) { (super->parent)->action = 1; (super->parent)->subAction = 1; - super->direction = super->parent->direction ^ 0x10; - super->parent->flags &= 0x7f; - super->flags &= 0x7f; + super->direction = DirectionTurnAround(super->parent->direction); + super->parent->flags &= ~ENT_COLLIDE; + super->flags &= ~ENT_COLLIDE; super->action = 1; SoundReq(SFX_130); } @@ -288,7 +288,7 @@ void PullableMushroom_Action3(PullableMushroomEntity* this) { void sub_0808B05C(PullableMushroomEntity* this) { if (super->type == 0) { - super->animationState = gPlayerEntity.animationState >> 1 ^ 2; + super->animationState = AnimationStateFlip90(gPlayerEntity.animationState >> 1); super->direction = super->animationState << 3; super->spriteSettings.flipX = gPlayerEntity.spriteSettings.flipX; super->flags &= 0x7f; @@ -346,7 +346,7 @@ void sub_0808B168(PullableMushroomEntity* this, u32 param_2) { Entity* pEVar6; if (param_2 != 0) { - iVar2 = (super->animationState ^ 2) * 2; + iVar2 = AnimationStateFlip90(super->animationState) * 2; pcVar5 = (gUnk_081211F4 + iVar2); pcVar3 = pcVar5 + 1; pEVar5 = super->parent; @@ -356,11 +356,11 @@ void sub_0808B168(PullableMushroomEntity* this, u32 param_2) { pEVar6 = &gPlayerEntity; pEVar5 = super->parent; pcVar5 = (gUnk_081211FC + super->animationState * 2); - pcVar3 = (gUnk_081211F4 + 1 + (super->animationState ^ 2) * 2); + pcVar3 = (gUnk_081211F4 + 1 + AnimationStateFlip90(super->animationState) * 2); } else { pEVar6 = super->parent; pEVar5 = &gPlayerEntity; - pcVar5 = (gUnk_081211F4 + (super->animationState ^ 2) * 2); + pcVar5 = (gUnk_081211F4 + AnimationStateFlip90(super->animationState) * 2); pcVar3 = (gUnk_081211FC + 1 + super->animationState * 2); } } diff --git a/src/object/pushableLever.c b/src/object/pushableLever.c index 503f75d2..c546d23e 100644 --- a/src/object/pushableLever.c +++ b/src/object/pushableLever.c @@ -69,7 +69,7 @@ void PushableLever_Idle(PushableLeverEntity* this) { void PushableLever_Pushing(PushableLeverEntity* this) { GetNextFrame(super); - if ((super->frame & 0x80) != 0) { + if ((super->frame & ANIM_DONE) != 0) { if (super->type2 == 0) { SetFlag(this->pushedFlag); } else { diff --git a/src/object/pushableRock.c b/src/object/pushableRock.c index 75a9733e..20c84f43 100644 --- a/src/object/pushableRock.c +++ b/src/object/pushableRock.c @@ -75,13 +75,13 @@ void PushableRock_Action2(PushableRockEntity* this) { super->speed = PushableRock_Speeds[super->frame & 0xf]; LinearMoveUpdate(super); GetNextFrame(super); - if (super->frame & 0x80) { + if (super->frame & ANIM_DONE) { super->action = 0; } } void PushableRock_Action3(PushableRockEntity* this) { - if ((super->frame & 0x80) == 0) { + if ((super->frame & ANIM_DONE) == 0) { GetNextFrame(super); } else { super->spritePriority.b0 = 7; diff --git a/src/object/pushableStatue.c b/src/object/pushableStatue.c index c47ebfba..fd8de005 100644 --- a/src/object/pushableStatue.c +++ b/src/object/pushableStatue.c @@ -83,7 +83,7 @@ void PushableStatue_Action1(PushableStatueEntity* this) { break; } } else { - sub_08078930(super); + RegisterCarryEntity(super); } } } diff --git a/src/object/smallIceBlock.c b/src/object/smallIceBlock.c index 3ffedb89..11994ed5 100644 --- a/src/object/smallIceBlock.c +++ b/src/object/smallIceBlock.c @@ -137,7 +137,7 @@ void SmallIceBlock_Action3(SmallIceBlockEntity* this) { } else { super->actionDelay++; } - sub_0805EC9C(super, 0x100, gUnk_08123748[super->actionDelay >> 5], 0); + SetAffineInfo(super, 0x100, gUnk_08123748[super->actionDelay >> 5], 0); if (super->type == 1) { CreateGroundItemWithFlags(super, ITEM_SMALL_KEY, 0, this->unk_86); SoundReq(SFX_SECRET); @@ -162,7 +162,7 @@ void SmallIceBlock_Action4(SmallIceBlockEntity* this) { if (super->actionDelay == 0x30) { SetTile(this->unk_6c, this->unk_70, super->collisionLayer); } - sub_0805EC9C(super, 0x100, (0x3c - super->actionDelay) * 0x20 + 0x100, 0); + SetAffineInfo(super, 0x100, (0x3c - super->actionDelay) * 0x20 + 0x100, 0); if ((super->actionDelay & 1) != 0) { obj = CreateObject(SPECIAL_FX, 0x11, 0x40); if (obj != NULL) { diff --git a/src/object/smoke.c b/src/object/smoke.c index 7fed0867..4ce9b8c4 100644 --- a/src/object/smoke.c +++ b/src/object/smoke.c @@ -44,7 +44,7 @@ void sub_0808A484(Entity* this) { void sub_0808A4D0(Entity* this) { GetNextFrame(this); LinearMoveUpdate(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { DeleteEntity(this); } } diff --git a/src/object/specialFx.c b/src/object/specialFx.c index dcd3a25a..c5262d9c 100644 --- a/src/object/specialFx.c +++ b/src/object/specialFx.c @@ -187,7 +187,7 @@ void sub_080845B8(SpecialFxObject* this) { void sub_080845DC(SpecialFxObject* this) { GetNextFrame(super); - if (super->frame & 0x80) { + if (super->frame & ANIM_DONE) { DeleteThisEntity(); } } @@ -202,7 +202,7 @@ void sub_080845F8(SpecialFxObject* this) { void sub_08084630(SpecialFxObject* this) { GetNextFrame(super); - if (super->frame & 0x80) { + if (super->frame & ANIM_DONE) { if ((super->type2 & 1) && (super->child != 0)) { ((GenericEntity*)super->child)->field_0x6a.HWORD--; if (this->unk_68 != 0) { @@ -254,7 +254,7 @@ void sub_080846B0(SpecialFxObject* this) { void sub_0808471C(SpecialFxObject* this) { static const s8 gUnk_0811FB08[] = { -8, -8, 8, -8, -8, 8, 8, 8 }; GetNextFrame(super); - if (super->frame & 0x80) { + if (super->frame & ANIM_DONE) { u32 i; for (i = 0; i < 4; i++) { Entity* fx = CreateFx(super, 0x24, 0); @@ -280,7 +280,7 @@ void sub_08084784(SpecialFxObject* this) { void sub_08084798(SpecialFxObject* this) { GetNextFrame(super); - if ((super->frame & 0x80) || !super->child->next) { + if ((super->frame & ANIM_DONE) || !super->child->next) { DeleteThisEntity(); } } diff --git a/src/player.c b/src/player.c index f209e891..60257988 100644 --- a/src/player.c +++ b/src/player.c @@ -653,12 +653,14 @@ static void PlayerFallInit(Entity* this) { static void PlayerFallUpdate(Entity* this) { UpdateAnimationSingleFrame(this); - if (this->frame & 0x80) { - if ((gSave.stats.health != 0) && (gPlayerState.flags & PL_FLAGS8000)) { + if (this->frame & ANIM_DONE) { + if ((gSave.stats.health != 0) && (gPlayerState.flags & PL_PIT_IS_EXIT)) { + // pit leads to another room gPlayerState.flags &= ~(PL_BUSY | PL_DROWNING); this->spriteSettings.draw = 0; } else { - gPlayerState.flags &= ~(PL_DROWNING | PL_FLAGS8000); + // stay in this room + gPlayerState.flags &= ~(PL_DROWNING | PL_PIT_IS_EXIT); RespawnPlayer(); gPlayerState.field_0xa = 0; this->iframes = 32; @@ -850,7 +852,7 @@ static void sub_08071038(Entity* this) { if (RunQueuedAction() || (gMessage.doTextBox & 0x7f)) return; - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->child = NULL; this->knockbackDuration = 0; this->iframes = 248; @@ -1016,7 +1018,7 @@ static void sub_080712F0(Entity* this) { if ((gPlayerState.flags & PL_MINISH) != 0) { if (--this->actionDelay == 0) temp = TRUE; - } else if ((this->frame & 0x80) != 0) { + } else if ((this->frame & ANIM_DONE) != 0) { if (this->animIndex != 0xce) gPlayerState.animation = 0x2ce; else @@ -1167,7 +1169,7 @@ static void PortalShrinkInit(Entity* this) { this->spriteRendering.b0 = 3; *(u32*)&this->field_0x80.HWORD = 0x100; *(u32*)&this->cutsceneBeh = 0x100; - sub_0805EC9C(this, 0x100, 0x100, 0); + SetAffineInfo(this, 0x100, 0x100, 0); gPlayerState.animation = 0x2c3; gPlayerState.flags |= PL_MINISH; SoundReq(SFX_PLY_SHRINKING); @@ -1244,7 +1246,7 @@ void PortalShrinkUpdate(Entity* this) { break; } - sub_0805EC9C(this, *(u32*)&this->field_0x80, *(u32*)&this->cutsceneBeh, 0); + SetAffineInfo(this, *(u32*)&this->field_0x80, *(u32*)&this->cutsceneBeh, 0); UpdateAnimationSingleFrame(this); } @@ -1352,7 +1354,7 @@ static void sub_0807193C(Entity* this) { Entity* child; UpdateAnimationSingleFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->subAction++; child = CreateObjectWithParent(this, EZLO_CAP, 0, 0); this->child = child; @@ -1407,7 +1409,7 @@ static void sub_08071990(Entity* this) { static void sub_08071A4C(Entity* this) { UpdateAnimationSingleFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { reset_priority(); sub_0807921C(); } @@ -1495,6 +1497,7 @@ static void sub_08071B60(Entity* this) { this->type = 0; this->knockbackDuration = 0; PlayerWaitForScroll(this); + // Final push? this->field_0xf = 6; if ((gPlayerState.flags & PL_MINISH) == 0) { gPlayerState.animation = 0x104; @@ -1559,7 +1562,7 @@ static void PlayerMinishDieInit(Entity* this) { static void sub_08071CAC(Entity* this) { UpdateAnimationSingleFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { u32 temp; if ((gPlayerState.flags & PL_MINISH) == 0) temp = (gPlayerState.flags & PL_NO_CAP) ? 0x45a : 0x2bd; @@ -1688,7 +1691,7 @@ static void PlayerEmptyBottleInit(Entity* this) { Entity* ent; ResetPlayer(); - ent = CreatePlayerBomb((ItemBehavior*)this, 0xe); + ent = CreatePlayerItemWithParent((ItemBehavior*)this, 0xe); if (ent != NULL) { ent->field_0x68.HALF.LO = gPlayerState.field_0x38; this->subAction++; @@ -1709,7 +1712,7 @@ static void PlayerEmptyBottleInit(Entity* this) { static void PlayerEmptyBottleUpdate(Entity* this) { UpdateAnimationSingleFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { gPlayerState.item = NULL; sub_0807921C(); } @@ -1796,7 +1799,7 @@ static void sub_08072098(Entity* this) { return; else ; - else if ((this->frame & 0x80) == 0) + else if ((this->frame & ANIM_DONE) == 0) return; if (this->health != 0) @@ -1869,7 +1872,7 @@ static void sub_08072214(Entity* this) { this->subAction = 1; this->speed = PULL_SPEED; this->actionDelay = gPlayerState.field_0x38; - this->direction = Direction8FromAnimationState(AnimationStateTurnAround(this->animationState)); + this->direction = Direction8FromAnimationState(AnimationStateFlip180(this->animationState)); if ((gPlayerState.flags & PL_NO_CAP) == 0) { gPlayerState.animation = 0x34c; } else { @@ -2006,7 +2009,7 @@ static void PlayerRoomTransition(Entity* this) { static void sub_080724DC(Entity* this) { this->knockbackDuration = 0; DeleteClones(); - if (sub_080B1AA8(this) != 0x29) { + if (GetTileUnderEntity(this) != 0x29) { if ((gPlayerState.field_0x82[7] == 0) && (gPlayerState.swim_state != 0)) { sub_0807AE20(this); } @@ -2164,10 +2167,10 @@ static void PlayerRollUpdate(Entity* this) { if (this->frame & 0x40) { sub_08077698(this); } - if ((this->frame & 0x80) || (gPlayerState.field_0x3[1] != 0)) { + if ((this->frame & ANIM_DONE) || (gPlayerState.field_0x3[1] != 0)) { ResetPlayerAnimationAndAction(); } - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { gPlayerState.flags &= ~(PL_MOLDWORM_RELEASED | PL_ROLLING); } UpdateAnimationSingleFrame(this); @@ -2232,7 +2235,7 @@ static void PlayerInHoleInit(Entity* this) { } static void PlayerInHoleUpdate(Entity* this) { - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { if (this->actionDelay == 1) { this->subAction = 3; this->actionDelay = 0x28; @@ -2648,7 +2651,7 @@ static void sub_080731D8(Entity* this) { static void sub_080732D0(Entity* this) { UpdateAnimationSingleFrame(this); - if (sub_080B1AA8(this) != 40) { + if (GetTileUnderEntity(this) != 40) { this->direction = DirectionNorth; LinearMoveUpdate(this); } else { @@ -3043,7 +3046,7 @@ static void sub_080739EC(Entity* this) { } void sub_08073A94(Entity* this) { - if ((this->frame & 0x80) || this->knockbackDuration != 0) { + if ((this->frame & ANIM_DONE) || this->knockbackDuration != 0) { sub_08073B60(this); } if (gPlayerEntity.z.WORD != 0) { @@ -3288,7 +3291,7 @@ static void sub_08074018(Entity* this) { *(u32*)&this->cutsceneBeh -= 32; else this->subAction++; - sub_0805EC9C(this, *(u32*)&this->field_0x80, *(u32*)&this->cutsceneBeh, 0); + SetAffineInfo(this, *(u32*)&this->field_0x80, *(u32*)&this->cutsceneBeh, 0); UpdateAnimationSingleFrame(this); } @@ -3976,7 +3979,7 @@ void sub_08074F8C(Entity* this) { this->frame = 0; gActiveScriptInfo.syncFlags |= 4; } - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->field_0x68.HALF.LO++; this->actionDelay = 8; this->animationState = IdleSouth; @@ -4064,7 +4067,7 @@ void sub_0807513C(Entity* this) { SoundReq(SFX_14B); SoundReq(SFX_PLY_VO6); } - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->field_0x68.HALF.LO++; this->actionDelay = 60; } @@ -4079,7 +4082,7 @@ void sub_0807518C(Entity* this) { void sub_080751B4(Entity* this) { UpdateAnimationSingleFrame(this); - if (this->frame & 0x80) { + if (this->frame & ANIM_DONE) { this->animationState = IdleSouth; this->subAction = 1; this->field_0x68.HALF.LO = 0; @@ -4130,7 +4133,7 @@ void sub_0807529C(Entity* this) { void sub_080752AC(Entity* this, ScriptExecutionContext* ctx) { LinearMoveUpdate(this); if (!ctx->unk_18) { - if (sub_080B1AA8(this) != 41) { + if (GetTileUnderEntity(this) != 41) { ctx->unk_18 = 1; ctx->unk_19 = 6; } diff --git a/src/playerItem/playerItem11.c b/src/playerItem/playerItem11.c index d8f3a3a7..72b5a702 100644 --- a/src/playerItem/playerItem11.c +++ b/src/playerItem/playerItem11.c @@ -55,7 +55,7 @@ void sub_08018CBC(Entity* this) { this->spriteIndex = 0xa6; this->palette.raw = 0x33; this->spriteVramOffset = 0; - this->type = gPlayerState.field_0x1d - 1; + this->type = gPlayerState.gustJarSpeed - 1; this->actionDelay = gUnk_080B3DE0[this->type * 2]; this->damage = gUnk_080B3DE0[this->type * 2 + 1]; this->hurtType = 0x1b; diff --git a/src/playerItem/playerItem12.c b/src/playerItem/playerItem12.c index 170c107e..cadb27f0 100644 --- a/src/playerItem/playerItem12.c +++ b/src/playerItem/playerItem12.c @@ -109,7 +109,7 @@ void sub_080701F8(Entity* this) { } if (sub_080B1BA4(COORD_TO_TILE(this), gPlayerEntity.collisionLayer, 0x80) == 0) { if (sub_080040D8(this, &gUnk_08003E44, this->x.HALF.HI, this->y.HALF.HI) == 0) { - if (sub_080B1AA8(this) == 0x19) { + if (GetTileUnderEntity(this) == 0x19) { this->action = 4; COLLISION_OFF(this); this->x.HALF.HI = (this->x.HALF.HI & 0xfff0) | 8; @@ -132,7 +132,7 @@ void sub_080701F8(Entity* this) { void sub_0807037C(Entity* this) { GetNextFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { DeleteThisEntity(); } } diff --git a/src/playerItem/playerItem3.c b/src/playerItem/playerItem3.c index 81f89bfc..a461e043 100644 --- a/src/playerItem/playerItem3.c +++ b/src/playerItem/playerItem3.c @@ -34,7 +34,7 @@ void PlayerItem3(Entity* this) { } else { this->field_0x86.HWORD -= 0x2000; } - sub_0805EC9C(this, 0x100, 0x100, this->field_0x86.HWORD); + SetAffineInfo(this, 0x100, 0x100, this->field_0x86.HWORD); } this->field_0xf--; diff --git a/src/playerItem/playerItemBomb.c b/src/playerItem/playerItemBomb.c index c7bdd7cb..93ae9547 100644 --- a/src/playerItem/playerItemBomb.c +++ b/src/playerItem/playerItemBomb.c @@ -24,7 +24,7 @@ void PlayerItemBomb(Entity* this) { this->field_0xf = 0x50; *(u32*)&this->field_0x68 = 0; this->spriteRendering.b0 = 3; - sub_0805EC9C(this, 0x100, 0x100, 0); + SetAffineInfo(this, 0x100, 0x100, 0); } } else { if (this->field_0xf != 0) { @@ -37,7 +37,7 @@ void PlayerItemBomb(Entity* this) { this->actionDelay = 0x0f; this->spriteSettings.draw = 0; sub_0805EC60(this); - sub_08078954(this); + FreeCarryEntity(this); CreateObjectWithParent(this, 0x20, 0, 0); sub_0801B418(this); } else { diff --git a/src/playerItem/playerItemBottle.c b/src/playerItem/playerItemBottle.c index 14ee8449..015b6119 100644 --- a/src/playerItem/playerItemBottle.c +++ b/src/playerItem/playerItemBottle.c @@ -14,7 +14,6 @@ void PlayerItemBottle_UseOther(Entity*); void PlayerItemBottle_Init(Entity*); extern u32 SetBottleContents(u32 itemID, u32 bottleIndex); -extern bool32 AllocMutableHitbox(Entity*); extern void sub_0801B9F0(Entity* this); void PlayerItemBottle(Entity* this) { @@ -37,7 +36,7 @@ void PlayerItemBottle_Init(Entity* this) { this->field_0x6e.HALF.HI = bottleType; switch (bottleType) { case ITEM_BOTTLE_EMPTY: - if (AllocMutableHitbox(this) == 0) { + if (AllocMutableHitbox(this) == NULL) { return; } COLLISION_ON(this); diff --git a/src/playerItem/playerItemGustJar.c b/src/playerItem/playerItemGustJar.c index f5d9e0f0..df29a22e 100644 --- a/src/playerItem/playerItemGustJar.c +++ b/src/playerItem/playerItemGustJar.c @@ -41,7 +41,7 @@ void PlayerItemGustJar_Init(Entity* this) { void PlayerItemGustJar_Action1(Entity* this) { sub_080ADC84(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->action = 2; sub_080ADCA0(this, 0); } else { @@ -78,7 +78,7 @@ void PlayerItemGustJar_Action2(Entity* this) { this->frameDuration = 0x7f; } - switch (gPlayerState.field_0x1d) { + switch (gPlayerState.gustJarSpeed) { case 3: sub_080ADCDC(this, 3); this->palette.b.b0 = 0; @@ -132,7 +132,7 @@ void PlayerItemGustJar_Action3(Entity* this) { } void PlayerItemGustJar_Action4(Entity* this) { - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->spriteSettings.draw = 0; } else { UpdateAnimationSingleFrame(this); diff --git a/src/playerItem/playerItemLantern.c b/src/playerItem/playerItemLantern.c index 00b2f9c6..077fa405 100644 --- a/src/playerItem/playerItemLantern.c +++ b/src/playerItem/playerItemLantern.c @@ -4,7 +4,6 @@ extern void (*const gUnk_080FEEA8[])(Entity*); -extern bool32 AllocMutableHitbox(Entity*); void sub_08054AC8(Entity*); void PlayerItemLantern(Entity* this) { @@ -22,7 +21,7 @@ void sub_08054A60(Entity* this) { this->field_0x3c = 7; this->flags2 = -0x80; this->animationState = gPlayerEntity.animationState & 0xe; - if (AllocMutableHitbox(this) == FALSE) { + if (AllocMutableHitbox(this) == NULL) { DeleteThisEntity(); } sub_0801766C(this); diff --git a/src/playerItem/playerItemPacciCane.c b/src/playerItem/playerItemPacciCane.c index dc36a6fd..3a1d7540 100644 --- a/src/playerItem/playerItemPacciCane.c +++ b/src/playerItem/playerItemPacciCane.c @@ -29,7 +29,7 @@ void PlayerItemPacciCane_Action1(Entity* this) { u32 playerFrame; u32 frameIndex; u32 flipX; - if (((gPlayerEntity.frame & 0x80) != 0) || (this != gPlayerState.item)) { + if (((gPlayerEntity.frame & ANIM_DONE) != 0) || (this != gPlayerState.item)) { if (this == gPlayerState.item) { gPlayerState.item = NULL; } diff --git a/src/playerUtils.c b/src/playerUtils.c index b68fef08..3d2cb0e8 100644 --- a/src/playerUtils.c +++ b/src/playerUtils.c @@ -17,7 +17,7 @@ extern void sub_080752E8(ItemBehavior* behavior, u32 arg1); // item.c extern void sub_0800857C(Entity*); -extern void sub_0805E374(Entity*); +extern void SetDefaultPriorityForKind(Entity*); extern void DoPlayerAction(Entity*); extern Entity* sub_0805E744(); extern void sub_0809D738(Entity*); @@ -44,7 +44,7 @@ bool32 sub_080778CC(); ItemBehavior* sub_0807794C(u32); u32 sub_080789A8(void); ItemBehavior* sub_080779EC(u32); -void sub_08077E78(ItemBehavior*, u32); +void DeletePlayerItem(ItemBehavior*, u32); void sub_08077AEC(void); bool32 sub_08079E90(u32); void sub_08079258(void); @@ -251,7 +251,7 @@ ItemBehavior* sub_08077A48(s32 param_1) { u32 tmp = gPlayerState.jump_status & 0x20; if ((((gPlayerState.jump_status & 0x20) == 0)) && (gUnk_0811BE48[param_1].unk0[1] >= gUnk_03000B80[0].field_0x5[4])) { - sub_08077E78(gUnk_03000B80, 0); + DeletePlayerItem(gUnk_03000B80, 0); gPlayerState.field_0x0[1] = tmp; gPlayerState.field_0x1c = tmp; gPlayerState.sword_state = tmp; @@ -288,7 +288,7 @@ ItemBehavior* sub_08077AC8(void) { void sub_08077AEC(void) { u32 slot; - sub_08077E78(gUnk_03000B80 + 3, 3); + DeletePlayerItem(gUnk_03000B80 + 3, 3); gPlayerState.flags &= ~PL_USE_LANTERN; slot = IsItemEquipped(ITEM_LANTERN_ON); if (slot != 2) { @@ -305,7 +305,7 @@ void ResetPlayer() { u32 index = 0; ItemBehavior* ptr = gUnk_03000B80; do { - sub_08077E78(ptr, index); + DeletePlayerItem(ptr, index); ptr++; index++; } while (index <= 2); @@ -355,7 +355,7 @@ Entity* sub_08077BD4(ItemBehavior* beh) { if (sub_08077C94(beh, gUnk_0811BE48[beh->behaviorID].unk0[3]) != 0) { return NULL; } else { - return CreatePlayerBomb(beh, gUnk_0811BE48[beh->behaviorID].unk0[3]); + return CreatePlayerItemWithParent(beh, gUnk_0811BE48[beh->behaviorID].unk0[3]); } } @@ -368,11 +368,11 @@ Entity* sub_08077C0C(ItemBehavior* beh, u32 arg1) { if (sub_08077C94(beh, bVar1) != 0) { return NULL; } else { - return CreatePlayerBomb(beh, bVar1); + return CreatePlayerItemWithParent(beh, bVar1); } } -Entity* CreatePlayerBomb(ItemBehavior* beh, u32 subtype) { +Entity* CreatePlayerItemWithParent(ItemBehavior* beh, u32 subtype) { Entity* pEVar1; pEVar1 = CreatePlayerItem(subtype, 0, 0, beh->behaviorID); @@ -512,7 +512,7 @@ void sub_08077E54(ItemBehavior* beh) { beh->field_0x5[9] = gPlayerEntity.frame; } -void sub_08077E78(ItemBehavior* arg0, u32 bits) { +void DeletePlayerItem(ItemBehavior* arg0, u32 bits) { u32 not ; if (bits == 0) { @@ -569,7 +569,7 @@ bool32 sub_08077F24(ItemBehavior* beh, u32 arg1) { void sub_08077F50(ItemBehavior* beh, u32 arg1) { sub_08079184(); - sub_08077E78(beh, arg1); + DeletePlayerItem(beh, arg1); } u32 sub_08077F64(ItemBehavior* arg0, u32 unk) { @@ -586,15 +586,17 @@ u32 sub_08077F64(ItemBehavior* arg0, u32 unk) { void sub_08077F84(void) { Entity* obj; - if (((gPlayerEntity.collisionLayer & 2) == 0) && - GetTileTypeByPos(gPlayerEntity.x.HALF.HI, gPlayerEntity.y.HALF.HI - 0xc, 2) - 0x343U < 4) { - sub_0807AA80(&gPlayerEntity); - gPlayerState.jump_status |= 8; - obj = CreateObject(OBJECT_44, 0, 0); - if (obj != NULL) { - obj->x = gPlayerEntity.x; - obj->y.HALF.HI = gPlayerEntity.y.HALF.HI - 0xc; - gPlayerEntity.y.HALF.HI -= 0xc; + if ((gPlayerEntity.collisionLayer & 2) == 0) { + u32 tile = GetTileTypeByPos(gPlayerEntity.x.HALF.HI, gPlayerEntity.y.HALF.HI - 12, 2); + if (tile == 0x343 || tile == 0x344 || tile == 0x345 || tile == 0x346) { + sub_0807AA80(&gPlayerEntity); + gPlayerState.jump_status |= 8; + obj = CreateObject(OBJECT_44, 0, 0); + if (obj != NULL) { + obj->x = gPlayerEntity.x; + obj->y.HALF.HI = gPlayerEntity.y.HALF.HI - 0xc; + gPlayerEntity.y.HALF.HI -= 0xc; + } } } } @@ -615,11 +617,11 @@ NONMATCH("asm/non_matching/playerUtils/sub_08078008.inc", bool32 sub_08078008(Ch } else { swordType = gSave.stats.itemButtons[0]; } - if (swordType - 1 < 2) { + if (swordType == 1 || swordType == 2) { swordType = 0; } if ((swordType != 0) && ((gPlayerState.sword_state & 0x20) != 0)) { - if (++state->preChargeTimer > 0x14) { + if (++state->preChargeTimer > 20) { state->preChargeTimer = 10; state->action = 3; state->swordType = swordType; @@ -634,7 +636,7 @@ END_NONMATCH bool32 sub_08078070(ChargeState* state) { if ((gPlayerState.sword_state & 0x20) != 0) { if ((gPlayerState.skills & SKILL_FAST_SPLIT) != SKILL_NONE) { - state->chargeTimer += 0xc; + state->chargeTimer += 12; } else { state->chargeTimer += 6; } @@ -643,7 +645,7 @@ bool32 sub_08078070(ChargeState* state) { state->action = 4; SoundReq(SFX_ITEM_SWORD_CHARGE_FINISH); } else { - if (Mod(state->chargeTimer, 0x14) == 0) { + if (Mod(state->chargeTimer, 20) == 0) { SoundReq(SFX_ITEM_SWORD_CHARGE); } } @@ -665,7 +667,8 @@ bool32 sub_080780E0(ChargeState* state) { } bool32 sub_08078108(ChargeState* state) { - if (--state->chargeTimer * 0x10000 < 0) { + state->chargeTimer -= 1; + if (state->chargeTimer < 0) { state->chargeTimer = 0; state->action = 2; } @@ -673,7 +676,8 @@ bool32 sub_08078108(ChargeState* state) { } bool32 sub_08078124(ChargeState* state) { - if ((state->chargeTimer -= 0x10) * 0x10000 < 0) { + state->chargeTimer -= 0x10; + if (state->chargeTimer < 0) { state->chargeTimer = 0; state->action = 2; } @@ -681,7 +685,8 @@ bool32 sub_08078124(ChargeState* state) { } bool32 sub_08078140(ChargeState* info) { - if (--info->preChargeTimer * 0x1000000 < 0) { + info->preChargeTimer -= 1; + if (info->preChargeTimer < 0) { info->preChargeTimer = 0; info->action = 0; return TRUE; @@ -819,9 +824,9 @@ s32 sub_08078904(Entity* entity) { return -1; } -ASM_FUNC("asm/non_matching/playerUtils/sub_08078930.inc", void sub_08078930(Entity* a)) +ASM_FUNC("asm/non_matching/playerUtils/RegisterCarryEntity.inc", void RegisterCarryEntity(Entity* a)) -ASM_FUNC("asm/non_matching/playerUtils/sub_08078954.inc", void sub_08078954(Entity* a)) +ASM_FUNC("asm/non_matching/playerUtils/FreeCarryEntity.inc", void FreeCarryEntity(Entity* a)) ASM_FUNC("asm/non_matching/playerUtils/sub_080789A8.inc", u32 sub_080789A8()) @@ -836,7 +841,7 @@ void CreateEzloHint(u32 hintId, u32 hintHeight) { gRoomTransition.hint_idx = hintId; #if defined(EU) || defined(JP) // TODO what fields of the room transition are switched in these variants? - gRoomTransition.field_0x2c[8] = hintHeight; + gRoomTransition.field_0x2c[7] = hintHeight; #else gRoomTransition.hint_height = hintHeight; #endif @@ -889,7 +894,7 @@ void sub_08078B48(void) { gPlayerState.field_0x82[8] = 2; } -void sub_08078C24(void) { +void ClearPlayerState(void) { gPlayerState.field_0x0[0] = 0; gPlayerState.field_0x0[1] = 0; gPlayerState.jump_status = 0; @@ -1080,7 +1085,7 @@ void sub_0807921C(void) { PL_MOLDWORM_RELEASED | PL_PARACHUTE); ResolvePlayerAnimation(); SetPlayerActionNormal(); - sub_0805E374(&gPlayerEntity); + SetDefaultPriorityForKind(&gPlayerEntity); } void sub_08079258(void) { @@ -1096,7 +1101,7 @@ void sub_08079258(void) { ~(PL_BUSY | PL_DROWNING | PL_DISABLE_ITEMS | PL_IN_HOLE | PL_MOLDWORM_RELEASED | PL_PARACHUTE); gPlayerState.swim_state = 0; gPlayerState.queued_action = 0; - sub_0805E374(&gPlayerEntity); + SetDefaultPriorityForKind(&gPlayerEntity); } void sub_080792BC(s32 speed, u32 direction, u32 field_0x38) { @@ -1187,7 +1192,7 @@ bool32 sub_08079D48(void) { return TRUE; } else { if (!sub_08008B22()) { - if (!sub_08007DD6((u16)sub_080B1AA8(&gPlayerEntity), gUnk_0811C268)) { + if (!sub_08007DD6((u16)GetTileUnderEntity(&gPlayerEntity), gUnk_0811C268)) { return TRUE; } } @@ -1256,7 +1261,7 @@ bool32 sub_08079F48(u32 param_1, u32 param_2) { bool32 sub_08079F8C(void) { if ((gPlayerState.flags & (PL_BUSY | PL_DROWNING | PL_CAPTURED | PL_USE_PORTAL | PL_HIDDEN | PL_FROZEN | PL_FALLING | PL_DISABLE_ITEMS | - PL_FLAGS8000 | PL_IN_MINECART | PL_MOLDWORM_CAPTURED | PL_IN_HOLE | PL_FLAGS2000000 | PL_CLIMBING)) != 0 || + PL_PIT_IS_EXIT | PL_IN_MINECART | PL_MOLDWORM_CAPTURED | PL_IN_HOLE | PL_FLAGS2000000 | PL_CLIMBING)) != 0 || gPlayerState.field_0x3c[0] != 0 || gPlayerEntity.action == 3 || gPlayerEntity.action == 0xb) { return FALSE; } else { @@ -2008,15 +2013,15 @@ void sub_0807C810(void) { } void CloneMapData(void) { - gRoomTransition.field_0x2c[1] = 1; + gRoomTransition.field_0x2c[0] = 1; MemCopy(&gMapBottom.mapData, &gMapBottom.mapDataClone, 0x2000); MemCopy(&gMapTop.mapData, &gMapTop.mapDataClone, 0x2000); } void sub_0807C898(void) { - gRoomTransition.field_0x2c[1] = 2; + gRoomTransition.field_0x2c[0] = 2; LoadRoomGfx(); - gRoomTransition.field_0x2c[1] = 0; + gRoomTransition.field_0x2c[0] = 0; } ASM_FUNC("asm/non_matching/playerUtils/sub_0807C8B0.inc", void sub_0807C8B0()) diff --git a/src/projectile/dekuSeedProjectile.c b/src/projectile/dekuSeedProjectile.c index 785504ed..94eb1e59 100644 --- a/src/projectile/dekuSeedProjectile.c +++ b/src/projectile/dekuSeedProjectile.c @@ -100,7 +100,7 @@ void DekuSeedProjectile_Action2(Entity* this) { void DekuSeedProjectile_Action3(Entity* this) { GetNextFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { DeleteThisEntity(); } } diff --git a/src/projectile/dirtBallProjectile.c b/src/projectile/dirtBallProjectile.c index 81970ad1..843bdafa 100644 --- a/src/projectile/dirtBallProjectile.c +++ b/src/projectile/dirtBallProjectile.c @@ -81,7 +81,7 @@ void DirtBallProjectile_Action1(Entity* this) { break; case 1: this->z.HALF.HI += Q_8_8(1.0 / 16.0 - 1.0 / 128.0); - sub_08078954(this->child); + FreeCarryEntity(this->child); CopyPosition(this, this->child); if ((0xf < (u8)(this->actionDelay++ + 1)) && (entity = this->child, entity->actionDelay == 0)) { if ((this->actionDelay & 2) != 0) { @@ -117,7 +117,7 @@ void DirtBallProjectile_Action2(Entity* this) { if (entity->next == NULL) { DeleteThisEntity(); } - sub_08078954(entity); + FreeCarryEntity(entity); CopyPosition(this, entity); } if (sub_080044EC(this, 0x2800) != 1) { @@ -159,7 +159,7 @@ void DirtBallProjectile_Action2(Entity* this) { void DirtBallProjectile_Action3(Entity* this) { GetNextFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { DeleteEntity(this); } } diff --git a/src/projectile/fireProjectile.c b/src/projectile/fireProjectile.c index 80fed65b..85c06766 100644 --- a/src/projectile/fireProjectile.c +++ b/src/projectile/fireProjectile.c @@ -63,7 +63,7 @@ void FireProjectile_Action2(Entity* this) { void FireProjectile_Action3(Entity* this) { GetNextFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { DeleteEntity(this); } } diff --git a/src/projectile/gleerokProjectile.c b/src/projectile/gleerokProjectile.c index 43cf8ae4..8346d260 100644 --- a/src/projectile/gleerokProjectile.c +++ b/src/projectile/gleerokProjectile.c @@ -120,7 +120,7 @@ void GleerokProjectile_Action2(Entity* this) { sub_080A90D8(this); } } else { - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->action = 3; COLLISION_OFF(this); InitializeAnimation(this, 0x53); @@ -130,7 +130,7 @@ void GleerokProjectile_Action2(Entity* this) { void GleerokProjectile_Action3(Entity* this) { GetNextFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { DeleteThisEntity(); } } diff --git a/src/projectile/gyorgMaleEnergyProjectile.c b/src/projectile/gyorgMaleEnergyProjectile.c index 6a98e185..69c0aa73 100644 --- a/src/projectile/gyorgMaleEnergyProjectile.c +++ b/src/projectile/gyorgMaleEnergyProjectile.c @@ -86,7 +86,7 @@ void GyorgMaleEnergyProjectile_Action2(Entity* this) { void GyorgMaleEnergyProjectile_Action3(Entity* this) { ProcessMovement3(this); GetNextFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { DeleteThisEntity(); } } diff --git a/src/projectile/iceProjectile.c b/src/projectile/iceProjectile.c index 0f845d8e..2b5b6b34 100644 --- a/src/projectile/iceProjectile.c +++ b/src/projectile/iceProjectile.c @@ -65,7 +65,7 @@ void IceProjectile_Action2(Entity* this) { void IceProjectile_Action3(Entity* this) { GetNextFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { DeleteEntity(this); } } diff --git a/src/projectile/lakituCloudProjectile.c b/src/projectile/lakituCloudProjectile.c index f66dd20e..a766f97b 100644 --- a/src/projectile/lakituCloudProjectile.c +++ b/src/projectile/lakituCloudProjectile.c @@ -24,7 +24,7 @@ void nullsub_539(Entity* this) { } void sub_080A9CF0(Entity* this) { - if (sub_0806F520() == 0) { + if (!sub_0806F520(this)) { CreateFx(this, FX_DEATH, 0); DeleteThisEntity(); } diff --git a/src/projectile/mandiblesProjectile.c b/src/projectile/mandiblesProjectile.c index f828070b..1bc2c36e 100644 --- a/src/projectile/mandiblesProjectile.c +++ b/src/projectile/mandiblesProjectile.c @@ -131,7 +131,7 @@ void MandiblesProjectile_Action3(Entity* this) { this->field_0xf -= 1; } else { UpdateAnimationSingleFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->action = 4; this->field_0x82.HALF.LO = 3; this->field_0xf = 0x40; diff --git a/src/projectile/mazaalEnergyBeam.c b/src/projectile/mazaalEnergyBeam.c index 6e284ccf..095f8e45 100644 --- a/src/projectile/mazaalEnergyBeam.c +++ b/src/projectile/mazaalEnergyBeam.c @@ -40,7 +40,7 @@ void MazaalEnergyBeam_Action1(Entity* this) { void MazaalEnergyBeam_Action2(Entity* this) { GetNextFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { DeleteEntity(this); } } diff --git a/src/projectile/moblinSpear.c b/src/projectile/moblinSpear.c index d2816076..9d84ccbf 100644 --- a/src/projectile/moblinSpear.c +++ b/src/projectile/moblinSpear.c @@ -1,7 +1,7 @@ #include "entity.h" #include "enemy.h" +#include "coord.h" -extern bool32 AllocMutableHitbox(Entity*); typedef struct { s8 offsetX; s8 offsetY; @@ -44,7 +44,7 @@ void sub_080A832C(Entity* this) { } void MoblinSpear_Init(Entity* this) { - if (AllocMutableHitbox(this) != 0) { + if (AllocMutableHitbox(this) != NULL) { this->action = 1; } } diff --git a/src/projectile/spiderWeb.c b/src/projectile/spiderWeb.c index 9d173880..8f24dae1 100644 --- a/src/projectile/spiderWeb.c +++ b/src/projectile/spiderWeb.c @@ -69,7 +69,7 @@ void sub_080AA78C(Entity* this) { animationState = (gPlayerEntity.animationState >> 1); if (animationState != this->type) { this->field_0x3a &= 0xfb; - if ((animationState ^ 2) != this->type) { + if (AnimationStateFlip90(animationState) != this->type) { return; } this->iframes = 0xe2; @@ -79,13 +79,13 @@ void sub_080AA78C(Entity* this) { this->subAction = 1; InitAnimationForceUpdate(this, animationState + 8); } - if (sub_0806F520(this) != 0) { + if (sub_0806F520(this)) { UpdateAnimationSingleFrame(this); if ((this->frame & 0x10) != 0) { this->frame &= 0xef; EnqueueSFX(SFX_100); } - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { sub_080AAAA8(this); } } else { @@ -111,7 +111,7 @@ void SpiderWeb_Init(Entity* this) { } void SpiderWeb_Action1(Entity* this) { - if ((this->frame & 0x80) == 0) { + if ((this->frame & ANIM_DONE) == 0) { UpdateAnimationSingleFrame(this); } sub_080AA9E0(this); @@ -145,7 +145,7 @@ void SpiderWeb_SubAction0(Entity* this) { InitAnimationForceUpdate(this, this->type + 4); } if ((entity->animationState >> 1 == this->type) && (gPlayerState.framestate == PL_STATE_PULL) && - ((gPlayerState.heldObject & 2) != 0) && ((gPlayerEntity.frame & 2) != 0) && ((this->frame & 0x80) == 0)) { + ((gPlayerState.heldObject & 2) != 0) && ((gPlayerEntity.frame & 2) != 0) && ((this->frame & ANIM_DONE) == 0)) { UpdateAnimationSingleFrame(this); if ((this->frame & 1) != 0) { entity->x.HALF.HI = gUnk_0812A06C[entity->animationState] + entity->x.HALF.HI; @@ -195,7 +195,7 @@ void sub_080AA9E0(Entity* this) { this->spritePriority.b0 = ptr->b0; this->direction = ptr->direction; if (ptr->b0 == 5) { - sub_08078930(this); + RegisterCarryEntity(this); } } diff --git a/src/projectile/stalfosProjectile.c b/src/projectile/stalfosProjectile.c index 841a68e3..3f8f679d 100644 --- a/src/projectile/stalfosProjectile.c +++ b/src/projectile/stalfosProjectile.c @@ -38,7 +38,7 @@ void sub_080A9A34(Entity* this) { } void sub_080A9A64(Entity* this) { - if ((this->subAction < 3) && (sub_0806F520(this) == 0)) { + if ((this->subAction < 3) && !sub_0806F520(this)) { sub_080A9BA8(this); } StalfosProjectile_SubActions[this->subAction](this); diff --git a/src/projectile/v1DarkMagicProjectile.c b/src/projectile/v1DarkMagicProjectile.c index aeca2aa3..8131c3d7 100644 --- a/src/projectile/v1DarkMagicProjectile.c +++ b/src/projectile/v1DarkMagicProjectile.c @@ -87,7 +87,7 @@ void sub_080AACE0(Entity* this) { } void sub_080AAD70(Entity* this) { - if (sub_0806F520() == 0) { + if (!sub_0806F520(this)) { this->health = 0; } V1DarkMagicProjectile_SubActions[this->subAction](this); diff --git a/src/projectile/v1EyeLaser.c b/src/projectile/v1EyeLaser.c index 2f746396..19966321 100644 --- a/src/projectile/v1EyeLaser.c +++ b/src/projectile/v1EyeLaser.c @@ -34,7 +34,7 @@ void V1EyeLaser_Init(Entity* this) { void V1EyeLaser_Action1(Entity* this) { GetNextFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->action = 2; InitializeAnimation(this, 1); sub_080AB758(this); diff --git a/src/projectile/v1FireProjectile.c b/src/projectile/v1FireProjectile.c index a441e225..8c2e0729 100644 --- a/src/projectile/v1FireProjectile.c +++ b/src/projectile/v1FireProjectile.c @@ -85,7 +85,7 @@ void V1FireProjectile_Action1(Entity* this) { void V1FireProjectile_Action2(Entity* this) { GetNextFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { this->action = 3; COLLISION_OFF(this); InitializeAnimation(this, 0x53); @@ -94,7 +94,7 @@ void V1FireProjectile_Action2(Entity* this) { void V1FireProjectile_Action3(Entity* this) { GetNextFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { DeleteThisEntity(); } } diff --git a/src/projectile/v2Projectile.c b/src/projectile/v2Projectile.c index e329945c..e2c86b53 100644 --- a/src/projectile/v2Projectile.c +++ b/src/projectile/v2Projectile.c @@ -62,7 +62,7 @@ void sub_080ABBF4(Entity* this) { } void sub_080ABC54(Entity* this) { - if (sub_0806F520() == 0) { + if (!sub_0806F520(this)) { CreateFx(this, FX_DEATH, 0); DeleteThisEntity(); } @@ -124,7 +124,7 @@ void sub_080ABD70(Entity* this) { SetTileType(0x6d, this->field_0x74.HWORD, 2); } } - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { DeleteThisEntity(); } } diff --git a/src/projectile/windProjectile.c b/src/projectile/windProjectile.c index 96211f1b..8232bf91 100644 --- a/src/projectile/windProjectile.c +++ b/src/projectile/windProjectile.c @@ -69,7 +69,7 @@ void WindProjectile_Action2(Entity* this) { void WindProjectile_Action3(Entity* this) { GetNextFrame(this); - if ((this->frame & 0x80) != 0) { + if ((this->frame & ANIM_DONE) != 0) { DeleteEntity(this); } } diff --git a/src/script.c b/src/script.c index f08b600e..8fb780b8 100644 --- a/src/script.c +++ b/src/script.c @@ -1634,8 +1634,8 @@ void EquipItem(Entity* entity, ScriptExecutionContext* context) { ForceEquipItem(item, slot); } -void sub_0807F29C(Entity* entity, ScriptExecutionContext* context) { - sub_0805ED14((void*)context->intVariable); +void SetInputMacro(Entity* entity, ScriptExecutionContext* context) { + InitPlayerMacro((void*)context->intVariable); } void sub_0807F2A8(Entity* entity, ScriptExecutionContext* context) { @@ -1646,8 +1646,8 @@ void sub_0807F2A8(Entity* entity, ScriptExecutionContext* context) { } } -void WaitForFrameHiBit(Entity* entity, ScriptExecutionContext* context) { - if ((entity->frame & 0x80) != 0) { +void WaitForAnimDone(Entity* entity, ScriptExecutionContext* context) { + if ((entity->frame & ANIM_DONE) != 0) { gActiveScriptInfo.flags |= 1; } else { gActiveScriptInfo.commandSize = 0; @@ -1655,7 +1655,7 @@ void WaitForFrameHiBit(Entity* entity, ScriptExecutionContext* context) { } void WaitForPlayerFrameHiBit(Entity* entity, ScriptExecutionContext* context) { - if ((gPlayerEntity.frame & 0x80) != 0) { + if ((gPlayerEntity.frame & ANIM_DONE) != 0) { gActiveScriptInfo.flags |= 1; } else { gActiveScriptInfo.commandSize = 0; @@ -1884,7 +1884,7 @@ void sub_0807F78C(Entity* entity, ScriptExecutionContext* context) { msg = GetSaleItemConfirmMessageID(item); price = GetItemPrice(item); MessageNoOverlap(msg, entity); - gMessage.field_0x10 = (u16)price; + gMessage.rupees = (u16)price; } void sub_0807F7C4(Entity* entity, ScriptExecutionContext* context) { @@ -1929,7 +1929,7 @@ void sub_0807F854(Entity* entity, ScriptExecutionContext* context) { switch (idx) { case 0: case 1: - gMessage.field_0x10 = value; + gMessage.rupees = value; break; case 2: gMessage.field_0x14 = value; diff --git a/src/scroll.c b/src/scroll.c index e751a412..e1f2050e 100644 --- a/src/scroll.c +++ b/src/scroll.c @@ -7,23 +7,58 @@ #include "asm.h" #include "common.h" #include "fileselect.h" +#include "screen.h" extern void sub_08080BC4(void); +extern void sub_080197D4(const void*); +extern void sub_0807C8B0(u8*, u32, u32); +extern void sub_0801AB08(u8*, u8*); +extern void sub_0807C810(); +extern void DeleteSleepingEntities(void); +extern void sub_0807BBE4(); +extern void sub_0807BC84(); +extern void sub_0805E248(); extern u8 gUpdateVisibleTiles; +extern u16 gUnk_0200B640; +extern u32** gUnk_08109194[]; +extern u8 gMapDataTop[]; +extern u8 gMapDataBottom[]; +extern u8 gUnk_02022830[]; +extern u8 gUnk_020246B0[]; -extern void (*const gUnk_0811E768[])(RoomControls*); - +void sub_0807FC64(RoomControls*); void sub_0807FC7C(RoomControls*); -void sub_080805F8(void); +void sub_0807FDB0(RoomControls*); +void sub_0807FEF0(RoomControls*); +void sub_0807FF54(RoomControls*); +void sub_0807FDC8(RoomControls*); +void sub_0807FDE4(RoomControls*); +void sub_0807FDF8(RoomControls*); +void sub_0807FEC8(RoomControls*); +void sub_0807FF08(RoomControls*); +void sub_0807FF1C(RoomControls*); -extern void (*const gUnk_0811E780[])(RoomControls*); - -extern void (*const gUnk_0811E794[])(RoomControls*); +void sub_0807FF6C(RoomControls*); +void sub_0807FFE4(RoomControls*); +void sub_08080040(RoomControls*); +void sub_08080108(RoomControls*); +void sub_08080198(RoomControls*); +void sub_080801BC(RoomControls*); +void UpdateIsDiggingCave(void); +u32 sub_080803D0(); +u32 sub_08080278(); +void sub_08080C80(u32*); +void sub_08080368(); +void sub_08080B60(u8*); extern u8 gMapDataTopSpecial[]; void UpdateScroll(void) { + static void (*const gUnk_0811E768[])(RoomControls*) = { + sub_0807FC64, sub_0807FC7C, sub_0807FDB0, NULL, sub_0807FEF0, sub_0807FF54, + }; + gRoomControls.scroll_flags &= 0xfb; gUnk_0811E768[gRoomControls.unk3](&gRoomControls); } @@ -33,12 +68,17 @@ void sub_0807FC64(RoomControls* controls) { controls->reload_flags = 0; controls->unk5 = 4; sub_0807FC7C(controls); - sub_080805F8(); + UpdateIsDiggingCave(); } ASM_FUNC("asm/non_matching/scroll/sub_0807FC7C.inc", void sub_0807FC7C(RoomControls* controls)) void sub_0807FDB0(RoomControls* controls) { + static void (*const gUnk_0811E780[])(RoomControls*) = { + sub_0807FDC8, + sub_0807FDE4, + sub_0807FDF8, + }; gUnk_0811E780[controls->unk4](controls); } @@ -55,17 +95,70 @@ void sub_0807FDE4(RoomControls* controls) { gUpdateVisibleTiles = 2; } -ASM_FUNC("asm/non_matching/scroll/sub_0807FDF8.inc", void sub_0807FDF8()) +void sub_0807FDF8(RoomControls* controls) { + u32 bVar1; + Entity* pEVar2; + int iVar3; + + gUpdateVisibleTiles = 2; + controls->filler2[0]++; + switch (controls->scroll_direction) { + case 0: + controls->scroll_y -= 4; + pEVar2 = controls->camera_target; + if (pEVar2 == &gPlayerEntity) { + pEVar2->y.WORD = gPlayerEntity.y.WORD - 0x6000; + } + if (controls->filler2[0] == 0x28) { + sub_0807FEC8(controls); + } + break; + case 1: + controls->scroll_x = controls->scroll_x + 4; + if (controls->camera_target == &gPlayerEntity) { + gPlayerEntity.x.WORD += 0x4000; + } + if (controls->filler2[0] == 0x3c) { + sub_0807FEC8(controls); + } + break; + case 2: + controls->scroll_y = controls->scroll_y + 4; + pEVar2 = controls->camera_target; + if (pEVar2 == &gPlayerEntity) { + pEVar2->y.WORD = gPlayerEntity.y.WORD + 0x6000; + } + if (controls->filler2[0] == 0x28) { + sub_0807FEC8(controls); + } + break; + case 3: + controls->scroll_x -= 4; + if (controls->camera_target == &gPlayerEntity) { + gPlayerEntity.x.WORD -= 0x4000; + } + if (controls->filler2[0] == 0x3c) { + sub_0807FEC8(controls); + } + break; + } + + controls->shake_duration = 0; + sub_08080BC4(); +} void sub_0807FEC8(RoomControls* this) { this->unk3 = 0; - MemFill32(0xffffffff, gPlayerState.path_memory, 0x40); + MemFill32(0xffffffff, gPlayerState.path_memory, sizeof(gPlayerState.path_memory)); gPlayerState.startPosX = this->camera_target->x.HALF.HI; gPlayerState.startPosY = this->camera_target->y.HALF.HI; } void sub_0807FEF0(RoomControls* controls) { - extern void (*const gUnk_0811E78C[])(RoomControls*); + static void (*const gUnk_0811E78C[])(RoomControls*) = { + sub_0807FF08, + sub_0807FF1C, + }; gUnk_0811E78C[controls->unk4](controls); } @@ -86,16 +179,95 @@ void sub_0807FF1C(RoomControls* controls) { } void sub_0807FF54(RoomControls* controls) { + static void (*const gUnk_0811E794[])(RoomControls*) = { + sub_0807FF6C, sub_0807FFE4, sub_08080040, sub_08080108, sub_08080198, sub_080801BC, + }; gUnk_0811E794[controls->unk4](controls); } -ASM_FUNC("asm/non_matching/scroll/sub_0807FF6C.inc", void sub_0807FF6C()) +void sub_0807FF6C(RoomControls* controls) { + controls->unk4 = 1; + gScreen.lcd.displayControl |= DISPCNT_WIN1_ON; + gScreen.controls.windowInsideControl = (u8)gScreen.controls.windowInsideControl | 0x1700; + gScreen.controls.windowOutsideControl = (gScreen.controls.windowOutsideControl & 0xff00) | 7; + gScreen.controls.window1HorizontalDimensions = 0xf0; + gScreen.controls.window1VerticalDimensions = 0xf0; + ResetPlayer(); + ResetPlayerAnimationAndAction(); + if (gUnk_03004030.isDiggingCave) { + gPlayerEntity.animationState = 4; + } else { + gPlayerEntity.animationState = 0; + } + sub_080809D4(); +} -ASM_FUNC("asm/non_matching/scroll/sub_0807FFE4.inc", void sub_0807FFE4()) +void sub_0807FFE4(RoomControls* controls) { + controls->unk4 = 2; + controls->filler2[0] = sub_080803D0() + 6; + gUnk_0200B640 = sub_08080278(); + sub_080197D4(*gUnk_08109194[gUnk_03004030.unk_00->unk_03]); + sub_0807C8B0(gMapDataTop, controls->width >> 4, controls->height >> 4); + sub_0801AB08(gMapDataTopSpecial, gMapDataTop - 4); +} -ASM_FUNC("asm/non_matching/scroll/sub_08080040.inc", void sub_08080040()) +void sub_08080040(RoomControls* controls) { + int iVar2; + int iVar3; + int uVar5; + int uVar6; + int iVar7; + int temp; -ASM_FUNC("asm/non_matching/scroll/sub_08080108.inc", void sub_08080108()) + controls->filler2[0] -= 6; + controls->filler2[1] = (controls->filler2[0] << 1) / 3; + if (0x2a < controls->filler2[0]) { + iVar2 = controls->camera_target->x.HALF.HI - controls->scroll_x; + uVar6 = (iVar2 - controls->filler2[0]) + 8; + if (uVar6 < 0) { + uVar6 = 0; + } + iVar7 = iVar2 + controls->filler2[0] - 8; + if (0xf0 < iVar7) { + iVar7 = 0xf0; + } + temp = controls->camera_target->y.HALF.HI - controls->scroll_y; + uVar5 = (temp - controls->filler2[1]) + 8; + if (uVar5 < 0) { + uVar5 = 0; + } + iVar3 = temp + controls->filler2[1] - 8; + if (0xa0 < iVar3) { + iVar3 = 0xa0; + } + gScreen.controls.window1HorizontalDimensions = ((uVar6 & 0xff) << 8) | (iVar7 & 0xff); + gScreen.controls.window1VerticalDimensions = ((uVar5 & 0xff) << 8) | (iVar3 & 0xff); + } + if (controls->filler2[0] == 0) { + controls->unk4 = 3; + DeleteSleepingEntities(); + sub_0807C810(); + sub_08080C80(*(gUnk_08109194[gUnk_03004030.unk_00->unk_03] + 1)); + } else { + gUpdateVisibleTiles = 4; + } +} + +void sub_08080108(RoomControls* controls) { + controls->unk4 = 4; + MemCopy(gMapDataBottom, gMapDataBottom + 0x3000, 0x2000); + MemCopy(gMapDataTop, gMapDataTop + 0x3000, 0x2000); + sub_08080368(); + gUnk_02034480.unk_00 = gUnk_0200B640; + MemCopy(gUnk_02022830, gUnk_020246B0, 0x1800); + sub_08080B60(gMapDataBottom - 4); + sub_08080B60(gMapDataTop - 4); + sub_0807BBE4(); + sub_0807BC84(); + sub_0805E248(); + sub_0801AB08((u8*)&gMapDataBottomSpecial, gMapDataBottom - 4); + sub_0801AB08(gMapDataTopSpecial, gMapDataTop - 4); +} void sub_08080198(RoomControls* controls) { controls->unk4 = 5; @@ -103,35 +275,79 @@ void sub_08080198(RoomControls* controls) { LoadRoom(); CallRoomProp5And7(); gUpdateVisibleTiles = 0; - sub_080805F8(); + UpdateIsDiggingCave(); } -ASM_FUNC("asm/non_matching/scroll/sub_080801BC.inc", void sub_080801BC()) +void sub_080801BC(RoomControls* controls) { + int iVar2; + int iVar3; + int uVar5; + int uVar6; + int iVar7; + int temp; -ASM_FUNC("asm/non_matching/scroll/sub_08080278.inc", void sub_08080278()) + controls->filler2[0] += 6; + controls->filler2[1] = (controls->filler2[0] << 1) / 3; + if (0x1e < controls->filler2[0]) { + iVar2 = controls->camera_target->x.HALF.HI - controls->scroll_x; + uVar6 = (iVar2 - controls->filler2[0]); + if (uVar6 < 0) { + uVar6 = 0; + } + iVar7 = iVar2 + controls->filler2[0]; + if (0xf0 < iVar7) { + iVar7 = 0xf0; + } + temp = controls->camera_target->y.HALF.HI - controls->scroll_y; + uVar5 = (temp - controls->filler2[1]); + if (uVar5 < 0) { + uVar5 = 0; + } + iVar3 = temp + controls->filler2[1]; + if (0xa0 < iVar3) { + iVar3 = 0xa0; + } + gScreen.controls.window1HorizontalDimensions = ((uVar6 & 0xff) << 8) | (iVar7 & 0xff); + gScreen.controls.window1VerticalDimensions = ((uVar5 & 0xff) << 8) | (iVar3 & 0xff); + } + if (controls->filler2[2] == 0) { + controls->unk3 = 0; + controls->reload_flags = 0; + ResetSystemPriority(); + gScreen.lcd.displayControl &= ~DISPCNT_WIN1_ON; + gScreen.controls.windowInsideControl &= 0xff; + gScreen.controls.windowOutsideControl &= 0xff00; + } else { + gUpdateVisibleTiles = 4; + controls->filler2[2] = 0; + } +} + +ASM_FUNC("asm/non_matching/scroll/sub_08080278.inc", u32 sub_08080278()) ASM_FUNC("asm/non_matching/scroll/sub_08080368.inc", void sub_08080368()) -ASM_FUNC("asm/non_matching/scroll/sub_080803D0.inc", void sub_080803D0()) +ASM_FUNC("asm/non_matching/scroll/sub_080803D0.inc", u32 sub_080803D0()) -void sub_080805F8(void) { +void UpdateIsDiggingCave(void) { switch (gRoomControls.area) { - case 0xc: - case 0x0f: - case 0x13: - case 0x14: - case 0x16: - case 0x17: - case 0x19: - gUnk_03004030.unk_08 = 1; + case AREA_LAKE_WOODS_CAVE: + case AREA_HYRULE_DIG_CAVES: + case AREA_DIG_CAVES_1: + case AREA_CRENEL_DIG_CAVE: + case AREA_VEIL_FALLS_DIG_CAVE: + case AREA_CASTOR_WILDS_DIG_CAVE: + case AREA_HYLIA_DIG_CAVES: + gUnk_03004030.isDiggingCave = 1; return; } - gUnk_03004030.unk_08 = 0; + gUnk_03004030.isDiggingCave = 0; } void ClearTilemaps(void) { + // Is gRoomControls 4 bytes bigger? MemClear(&gRoomControls, 0x38); - MemClear(&gUnk_03004030, 0xc); + MemClear(&gUnk_03004030, sizeof(gUnk_03004030)); gRoomControls.filler3 = 0xffff; gUnk_03004030.unk_0a = 0xff; gUnk_02034480.unk_00 = 0; @@ -265,10 +481,10 @@ void sub_080809D4(void) { ASM_FUNC("asm/non_matching/scroll/UpdateDoorTransition.inc", void UpdateDoorTransition()) -ASM_FUNC("asm/non_matching/scroll/sub_08080B60.inc", void sub_08080B60()) +ASM_FUNC("asm/non_matching/scroll/sub_08080B60.inc", void sub_08080B60(u8* param_1)) ASM_FUNC("asm/non_matching/scroll/sub_08080BC4.inc", void sub_08080BC4()) -ASM_FUNC("asm/non_matching/scroll/sub_08080C80.inc", void sub_08080C80()) +ASM_FUNC("asm/non_matching/scroll/sub_08080C80.inc", void sub_08080C80(u32* param_1)) ASM_FUNC("asm/non_matching/scroll/sub_08080CB4.inc", void sub_08080CB4(Entity* a)) diff --git a/src/staffroll.c b/src/staffroll.c new file mode 100644 index 00000000..2a9077b4 --- /dev/null +++ b/src/staffroll.c @@ -0,0 +1,326 @@ +#include "global.h" +#include "room.h" +#include "main.h" +#include "save.h" +#include "flags.h" +#include "fileselect.h" +#include "screen.h" +#include "common.h" +#include "menu.h" +#include "game.h" +#include "subtask.h" + +typedef struct { + /*0x00*/ Menu base; + s16 unk_10; + u16 unk_12; + u16 unk_14; + u8 unk_16; + u8 unk_17; + u8 unk_18; + u8 unk_19; + u8 bgmMusicStarted; + u8 unk_1b[0x14]; + u8 unk_2f; +} StaffrollMenu; +#define gStaffrollMenu (*(StaffrollMenu*)&gMenu) + +const Font gUnk_08127280 = { + (u16*)0x02021f72, (void*)0x0600c400, gTextGfxBuffer, 0, 61472, 240, 0, 0, 0, 0, 0, 5, 0, 1, 0 +}; +const Font gUnk_08127298 = { + (u16*)0x02021f90, (void*)0x0600c400, gTextGfxBuffer, 0, 61472, 240, 0, 0, 0, 0, 0, 5, 0, 1, 0 +}; +const Font gUnk_081272B0 = { + (u16*)0x0202204e, (void*)0x0600c400, gTextGfxBuffer, 0, 61472, 240, 1, 0, 0, 0, 0, 5, 0, 1, 0 +}; +const Font gUnk_081272C8 = { + (u16*)0x020222ce, (void*)0x0600c400, gTextGfxBuffer, 0, 61472, 240, 1, 0, 0, 0, 0, 5, 0, 1, 0 +}; + +const Font* const gUnk_081272E0[] = { + &gUnk_08127280, + &gUnk_08127298, + &gUnk_081272B0, + &gUnk_081272C8, +}; + +// TODO figure out structure of gStaffrollMenu.base.field_0xc +extern u8 gUnk_081272F0[]; +extern u8 gUnk_08127644[]; +extern u8 gUnk_08127998[]; +extern const u8 gUnk_08127CEC[]; +extern void (*const gUnk_08127D00[])(void); +extern void (*const gUnk_08127D10[])(void); + +void sub_080A3954(void); + +void StaffrollTask(void) { + gRoomTransition.frameCount += 1; + gUnk_08127D00[gMain.state](); +} + +void StaffrollTask_State0(void) { + gSave.unk6 = 1; + SetGlobalFlag(GAMECLEAR); + gMain.state = 1; + gStaffrollMenu.base.menuType = 0; + gStaffrollMenu.base.transitionTimer = 0xb4; + gStaffrollMenu.unk_16 = 5; + gStaffrollMenu.unk_17 = 4; + gStaffrollMenu.bgmMusicStarted = 0; + if (gSaveHeader->language >= 2) { + gStaffrollMenu.base.field_0xc = gUnk_08127998; + } else { + if (gSaveHeader->language == 1) { + gStaffrollMenu.base.field_0xc = gUnk_08127644; + } else { + gStaffrollMenu.base.field_0xc = gUnk_081272F0; + } + } + DispReset(0); + LoadPaletteGroup(0xb); + LoadPaletteGroup(0xc); + SetColor(0, 0); + gScreen.lcd.displayControl = 0x640; + gScreen.controls.layerFXControl = 0x2442; + gScreen.controls.alphaBlend = 0x1000; + gScreen.bg1.control = 0x1e4d; + gScreen.bg2.control = 0x1dc3; + InitSoundPlayingInfo(); + ResetSystemPriority(); + SetFade(5, 0x100); +} + +void StaffrollTask_State1(void) { + gUnk_08127D10[gMenu.menuType](); +} + +void StaffrollTask_State1MenuType0(void) { + gMenu.transitionTimer -= 1; + if (gMenu.transitionTimer == 0) { + sub_080A3954(); + } +} + +void StaffrollTask_State1MenuType1(void) { + if (gFadeControl.active == 0) { + const u8* ptr = &gUnk_08127CEC[gStaffrollMenu.unk_10 * 2]; + LoadPaletteGroup(ptr[0]); + LoadGfxGroup(ptr[1]); + MemClear(&gBG1Buffer, 0x800); + gScreen.bg1.updated = 1; + gScreen.bg2.xOffset = gStaffrollMenu.unk_12; + gScreen.controls.alphaBlend = 0x1000; + gStaffrollMenu.base.menuType = 0; + if (gStaffrollMenu.bgmMusicStarted == 0) { + gStaffrollMenu.bgmMusicStarted = 1; + SoundReq(BGM_CREDITS); + } + SetFade(4, 8); + } +} + +void StaffrollTask_State1MenuType2(void) { + u8 tmp; + switch (gStaffrollMenu.base.overlayType) { + case 0: + MemClear(&gBG1Buffer, 0x800); + sub_0805F46C(gStaffrollMenu.unk_10, (Font*)gUnk_081272E0[gStaffrollMenu.unk_19]); + gScreen.bg1.updated = 1; + gStaffrollMenu.base.overlayType++; + gStaffrollMenu.unk_18 = 0; + break; + case 1: + if (gFadeControl.active != 0) { + return; + } + if ((gRoomTransition.frameCount & 1) != 0) { + return; + } + tmp = ++gStaffrollMenu.unk_18; + gScreen.controls.alphaBlend = (0x10 - tmp) * 0x100 | tmp; + if (gStaffrollMenu.unk_18 >= 0x10) { + gStaffrollMenu.base.overlayType++; + } + break; + case 2: + gStaffrollMenu.base.transitionTimer--; + if (gStaffrollMenu.base.transitionTimer == 0) { + gStaffrollMenu.base.overlayType++; + } + break; + case 3: + if ((gRoomTransition.frameCount & 1) != 0) { + return; + } + tmp = --gStaffrollMenu.unk_18; + gScreen.controls.alphaBlend = (0x10 - tmp) * 0x100 | tmp; + if (gStaffrollMenu.unk_18 == 0) { + gStaffrollMenu.base.overlayType++; + } + break; + default: + if (gFadeControl.active == 0) { + gFadeControl.mask = 0xffffffff; + sub_080A3954(); + } + break; + } +} + +void StaffrollTask_State1MenuType3(void) { + gMenu.transitionTimer--; + if (gMenu.transitionTimer == 0) { + sub_080A3954(); + SetFade(5, 8); + } +} + +void StaffrollTask_State1MenuType4(void) { + gFadeControl.mask = 0xffff7fff; + SetFade(5, 4); + SetFadeProgress(gMenu.transitionTimer); + sub_080A3954(); +} + +void StaffrollTask_State1MenuType5(void) { + SetFade(4, 4); + SetFadeProgress(gMenu.transitionTimer); + sub_080A3954(); +} + +void StaffrollTask_State1MenuType6(void) { + if (gFadeControl.active == 0) { + MemClear(&gBG1Buffer, 0x800); + gScreen.bg1.updated = 1; + MemClear(&gBG2Buffer, 0x800); + gScreen.bg2.updated = 1; + gScreen.controls.alphaBlend = 0x1000; + gMenu.menuType = 0; + SetFade(4, 8); + } +} + +void StaffrollTask_State1MenuType7(void) { + if (gFadeControl.active == 0) { + SetFade(7, 8); + gMain.state = 2; + } +} + +void sub_080A3954(void) { + u16* puVar1; + u16* puVar2; + u16* puVar3; + u8* pbVar4; + + puVar1 = (u16*)(gStaffrollMenu.base.field_0xc + 6); + puVar2 = (u16*)(gStaffrollMenu.base.field_0xc + 8); + puVar3 = (u16*)(gStaffrollMenu.base.field_0xc + 10); + pbVar4 = gStaffrollMenu.base.field_0xc + 1; + gStaffrollMenu.base.menuType = *gStaffrollMenu.base.field_0xc; + gStaffrollMenu.base.overlayType = 0; + gStaffrollMenu.unk_10 = *puVar1; + gStaffrollMenu.base.transitionTimer = *(u16*)(gStaffrollMenu.base.field_0xc + 4); + gStaffrollMenu.unk_12 = *puVar2; + gStaffrollMenu.unk_14 = *puVar3; + gStaffrollMenu.unk_19 = *pbVar4; + gStaffrollMenu.base.field_0xc += 0xc; +} + +void StaffrollTask_State3(void) { + if (gFadeControl.active == 0) { + DoSoftReset(); + } +} + +void StaffrollTask_State2(void) { + SaveResult saveResult; + u32 choice; + u32 tmp; + switch (gStaffrollMenu.base.overlayType) { + case 0: + gStaffrollMenu.base.overlayType = 1; + gStaffrollMenu.base.transitionTimer = 0x1e; + gStaffrollMenu.base.field_0x3 = 0; + DispReset(1); + InitSoundPlayingInfo(); + sub_080A4D34(); + LoadPaletteGroup(10); + SetColor(0, 0); + LoadGfxGroup(4); + MemClear((void*)VRAM, 0x20); + SetPopupState(0, 0); + gScreen.lcd.displayControl |= 0x600; + gScreen.bg1.control = 0x1c01; + gScreen.bg2.control = 0x1d05; + gScreen.bg2.updated = 1; + SetFade(4, 8); + break; + case 1: + if (gFadeControl.active == 0) { + if (gStaffrollMenu.base.transitionTimer != 0) { + gStaffrollMenu.base.transitionTimer--; + } else { + choice = gStaffrollMenu.base.field_0x3; + switch (gInput.newKeys) { + case 0x40: + choice = 0; + break; + case 0x80: + choice = 1; + break; + case 1: + if (choice != 0) { + tmp = 4; + } else { + CreateDialogBox(8, 0); + tmp = 2; + } + gStaffrollMenu.base.overlayType = tmp; + gStaffrollMenu.base.transitionTimer = 0x3c; + SoundReq(SFX_TEXTBOX_SELECT); + break; + } + if (gStaffrollMenu.base.field_0x3 != choice) { + gStaffrollMenu.base.field_0x3 = choice; + SetPopupState(0, choice); + SoundReq(SFX_TEXTBOX_CHOICE); + } + } + } + break; + case 2: + saveResult = HandleSave(0); + gStaffrollMenu.base.field_0x0 = saveResult; + switch (saveResult) { + case SAVE_OK: + gStaffrollMenu.base.overlayType = 4; + break; + case SAVE_ERROR: + gStaffrollMenu.base.transitionTimer = 0x3c; + CreateDialogBox(9, 0); + gStaffrollMenu.base.overlayType = 3; + break; + } + break; + case 3: + if (gStaffrollMenu.base.transitionTimer != 0) { + gStaffrollMenu.base.transitionTimer--; + } else { + if ((gInput.newKeys & 0xb) != 0) { + gStaffrollMenu.base.overlayType = 1; + } + } + break; + case 4: + default: + gScreen.lcd.displayControl &= 0xfdff; + sub_08050384(); + SetFade(7, 8); + gMain.state = 3; + gStaffrollMenu.base.overlayType = 0; + break; + } +} diff --git a/src/subtask2.c b/src/subtask2.c index 2ac69033..f27faf5e 100644 --- a/src/subtask2.c +++ b/src/subtask2.c @@ -11,8 +11,6 @@ #include "main.h" #include "message.h" -extern void CreateDialogBox(u32, u32); - extern u8 gUnk_08128D38[]; extern u8 gUnk_08128D43[]; @@ -378,7 +376,7 @@ void Subtask_Init(void) { ResetPaletteTable(0); gGFXSlots.unk0 = 1; gUI.nextToLoad = 2; - gRoomTransition.field_0x2c[4] = 1; + gRoomTransition.field_0x2c[3] = 1; } } diff --git a/src/text.c b/src/text.c index 01f8ab2e..10b504f8 100644 --- a/src/text.c +++ b/src/text.c @@ -4,6 +4,8 @@ #include "functions.h" #include "asm.h" #include "enemy.h" +#include "message.h" +#include "fileselect.h" extern u16 gUnk_081092D4; extern u8 gUnk_081094CE; @@ -17,6 +19,8 @@ typedef struct { extern VStruct gUnk_0810942E[]; extern u32 gUnk_0810926C[]; +extern u32* Translations[]; +extern u32 gUnk_08109244; typedef struct { u8 unk0; @@ -24,6 +28,599 @@ typedef struct { } UStruct; void sub_0805F820(WStruct* r0, u32* r1); +bool32 sub_0805EF40(Token* tok, const u8*); +void sub_0805F440(Token*, u8*); +u32 sub_0805F6A4(Token*, WStruct*); +u32 GetCharacter(Token* tok); +u32 GetFontStrWith(Token*, u32); +int sub_0805F67C(short*, int, int); +void sub_0805F918(u32, u32, void*); +bool32 sub_0805F5CC(Font*, Token*, WStruct*); +void sub_0805EEB4(Token*, u32); +u32 sub_0805EF8C(Token*); +u32 sub_0805EFB4(Token*); +u32 sub_0805F9A0(u32); + +typedef struct { + u16 unk0; + s8 unk2; + s8 unk3; + u8 filler[0x4]; + u16 unk8[4]; + u16 unk10[4]; +} struct_gUnk_02034330; + +extern struct_gUnk_02034330 gUnk_02034330; +extern WStruct gUnk_02036540[4]; +extern u32* gUnk_08109248[]; +extern u8* gUnk_08109230[]; +extern u32* gTranslations[]; +extern u32 gUnk_08109244; + +void sub_0805EEB4(Token* token, u32 textIndex) { + u32 langIndex; + u32* puVar2; + u8* puVar5; + int iVar3; + u32 uVar4; + u32 uVar6; + u32 uVar7; + + token->textIndex = (u16)textIndex; + langIndex = gSaveHeader->language; + if (((1 < langIndex) && (textIndex >> 8 == 1)) && (textIndex < 0x119)) { + langIndex = 3; + } + puVar2 = gTranslations[langIndex]; + iVar3 = puVar2[(u8)(textIndex >> 8)]; + puVar2 = (u32*)((int)puVar2 + iVar3); + iVar3 = puVar2[(u8)textIndex]; + uVar6 = *(gTranslations[langIndex]) >> 2; + uVar7 = *puVar2 >> 2; + uVar4 = 0; + if (((token->textIndex >> 8) >= uVar6) || ((u8)token->textIndex >= uVar7)) { + uVar4 = 1; + } else { + if (*(char*)((int)puVar2 + iVar3) == 0) { + uVar4 = 2; + } + } + switch (uVar4) { + case 1: + case 2: + puVar2 = &gUnk_08109244; + iVar3 = 0; + break; + } + puVar2 = (u32*)((int)puVar2 + iVar3); + sub_0805EF40(token, (u8*)puVar2); +} + +bool32 sub_0805EF40(Token* token, const u8* param_2) { + if (token->unk00 != 0) { + if (6 < token->unk01) { + return 0; + } + token->unk01++; + } + token->buf[token->unk01] = param_2; + token->unk00 = 1; + return 1; +} + +u32 sub_0805EF8C(Token* token) { + if (token->unk00 == 0) { + return 0; + } + return (token->buf[token->unk01]++)[0]; +} + +u32 sub_0805EFB4(Token* token) { + u32 rv = token->unk01; + + if (token->unk01 != 0) { + token->unk01--; + } else { + token->unk00 = 0; + } + return rv; +} + +u32 GetCharacter(Token* token) { + u32 uVar3; + u32 code; + u32 uVar6; + u8** ppuVar7; + int iVar8; + + do { + code = sub_0805EF8C(token); + token->code = (u8)code; + iVar8 = 0; + switch (code) { + case 0: + iVar8 = sub_0805EFB4(token); + code = 0; + break; + case 1: + uVar6 = sub_0805EF8C(token); + token->param = (u16)uVar6; + code = 6; + if (uVar6 < 0xb) { + code = 5; + } + break; + case 2: + uVar3 = sub_0805EF8C(token); + token->param = uVar3; + code = 7; + break; + case 3: + uVar6 = sub_0805EF8C(token) << 8; + uVar6 += sub_0805EF8C(token); + token->param = uVar6; + code = 8; + break; + case 4: + uVar6 = sub_0805EF8C(token); + switch (uVar6) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 0xb: + case 0xc: + case 0xd: + case 0xe: + case 0xf: + code = 9; + break; + case 0x10: + uVar6 = sub_0805EF8C(token); + code = 10; + break; + case 0x11: + code = 2; + break; + case 0x12: + code = 3; + break; + case 0x13: + code = 4; + break; + case 0x14: + case 0x15: + code = 0xb; + // This is a comparison to 0 but couldn't make it do the bit trick + uVar6 = (-(uVar6 ^ 0x14) | (uVar6 ^ 0x14)) >> 0x1f; + } + token->param = (u16)uVar6; + break; + case 5: + uVar6 = sub_0805EF8C(token); + if (uVar6 == 0xff) { + uVar6 = 0; + } else { + uVar6 <<= 8; + uVar6 += sub_0805EF8C(token); + } + token->_6 = uVar6; + code = 0xc; + break; + case 6: + uVar6 = sub_0805EF8C(token); + switch (uVar6) { + case 0 ... 4: + ppuVar7 = (u8**)token->_c; + if (ppuVar7 == NULL) { + ppuVar7 = gUnk_08109230; + } + sub_0805EF40(token, ppuVar7[uVar6]); + break; + case 5: + uVar6 = sub_0805EF8C(token) << 8; + uVar6 += sub_0805EF8C(token); + sub_0805EEB4(token, uVar6); + break; + default: + break; + } + iVar8 = 1; + break; + case 7: + uVar6 = sub_0805EF8C(token) << 8; + uVar6 += sub_0805EF8C(token); + token->unk00 = 0; + token->unk01 = 0; + sub_0805EEB4(token, uVar6); + iVar8 = 1; + break; + case 8: + uVar3 = sub_0805EF8C(token); + token->param = uVar3; + code = 0xd; + break; + case 9: + uVar3 = sub_0805EF8C(token); + token->param = uVar3; + code = 0xe; + break; + case 10: + code = 1; + break; + case 0xb: + code = sub_0805EF8C(token); + code |= 0x400; + break; + case 0xc: + code = sub_0805EF8C(token); + code |= 0x700; + break; + case 0xd: + code = sub_0805EF8C(token); + code |= 0x500; + break; + case 0xe: + code = sub_0805EF8C(token); + code |= 0x600; + break; + case 0xf: + code = sub_0805EF8C(token); + code |= 0x300; + break; + default: + code += 0x100; + break; + } + } while (iVar8); + + if (code >> 8 != 0) { + switch (token->unk05) { + case 0: + break; + case 1: + code = sub_0805F9A0(code); + break; + } + token->extended = (u16)code; + } + return code; +} + +u32* sub_0805F25C(u32 param_1) { + u32 uVar1; + + uVar1 = param_1 >> 8 & 0xf; + param_1 = param_1 & 0xff; + switch (uVar1) { + case 0: + case 1: + if (0x7f < param_1 && gSaveHeader->language != 0) { + param_1 = param_1 - 0x80; + uVar1 = 2; + } + break; + case 2: + case 3: + case 4: + break; + case 5: + case 6: + case 7: + case 8: + param_1 = param_1 << 1; + break; + } + return gUnk_08109248[uVar1] + param_1 * 0x10; +} + +WStruct* sub_0805F2C8(void) { + u32 uVar2; + + for (uVar2 = 0; uVar2 < ARRAY_COUNT(gUnk_02036540); uVar2++) { + if ((gUnk_02036540[uVar2].unk00) == 0) { + MemClear(&gUnk_02036540[uVar2], sizeof(WStruct)); + gUnk_02036540[uVar2].unk00 = 1; + return &gUnk_02036540[uVar2]; + } + } + + return NULL; +} + +void sub_0805F300(WStruct* param_1) { + u32 uVar2; + + for (uVar2 = 0; uVar2 < ARRAY_COUNT(gUnk_02036540); uVar2++) { + if (&gUnk_02036540[uVar2] == param_1) { + MemClear(&gUnk_02036540[uVar2], sizeof(WStruct)); + return; + } + } +} + +u32 GetFontStrWith(Token* param_1, u32 param_2) { + u32 character; + u32* puVar2; + u32 uVar3; + u32 uVar4; + u16 uVar5; + u32 rv; + u32 r9; + Token token; + int local_28; + int local_24; + + MemCopy(param_1, &token, sizeof(Token)); + local_24 = 0; + local_28 = 0; + rv = 0; + uVar5 = 0; + do { + uVar4 = 0; + r9 = 1; + while (r9) { + character = GetCharacter(&token); + switch (character) { + case 0xc: + uVar4 += 8; + break; + case 0xb: + uVar5 = token.param; + break; + case 0: + case 1: + r9 = 0; + break; + case 2 ... 10: + case 0xd: + case 0xe: + break; + default: + if (uVar5 == 0) { + puVar2 = (u32*)sub_0805F25C(character); + if (4 < character >> 8) { + uVar3 = sub_0805F7A0(puVar2[0x10]); + uVar4 += (uVar3 >> 8); + } + uVar3 = sub_0805F7A0(*puVar2); + uVar4 += (uVar3 >> 8); + } else if (character >> 8 >= 5) { + uVar4 += 0x10; + } else { + uVar4 += 8; + } + if (token.unk05 == 1 && uVar4 > 1) { + uVar4--; + } + } + } + if (uVar4 > rv) { + rv = uVar4; + } + if (uVar4 != 0) { + local_28++; + } else { + local_24++; + } + } while ((param_2 != 0) && (character != 0)); + + if (param_2 != 0) { + return local_24 << 0x18 | local_28 << 0x10 | rv; + } + return rv; +} + +void sub_0805F440(Token* param_1, u8* param_2) { + MemClear(param_1, sizeof(Token)); + if ((u32)param_2 >= 0x10000) { + sub_0805EF40(param_1, param_2); + } else { + sub_0805EEB4(param_1, (u32)param_2); + } +} + +u32 sub_0805F46C(u32 param_1, Font* param_2) { + u32 uVar1; + WStruct* pWVar4; + u32 uVar5; + u16* puVar6; + u32 uVar7; + u32 uVar8; + u16* puVar9; + u32 iVar10; + Token token; + Font font; + u32 fontStr; + u32 temp2; + u32 temp3; + + pWVar4 = sub_0805F2C8(); + if (pWVar4 != NULL) { + MemCopy(param_2, &font, sizeof(Font)); + sub_0805F440(&token, (u8*)param_1); + token.unk05 = font.stylized & 3; + pWVar4->unk04 = font.stylized; + pWVar4->unk4 = font.width; + pWVar4->unk8 = font.buffer_loc; + pWVar4->charColor = font._15; + pWVar4->bgColor = font.fill_type; + if (font.draw_border) { + sub_0805F918(font.border_type, font.fill_type, font.gfx_dest); + font.gfx_dest = (void*)((int)font.gfx_dest + 0xe0); + fontStr = GetFontStrWith(&token, 1); + iVar10 = (fontStr >> 0x18) * (u32)font._16 + ((u8)((int)fontStr >> 0x10) << 1); + uVar8 = (u16)fontStr; + temp3 = uVar8; + if (font.width < (s32)temp3) { + temp3 = font.width; + } + uVar8 = (temp3 + 7); + temp2 = ~7; + uVar8 = font.sm_border ? uVar8 & temp2 : font.width; + + puVar9 = font.dest; + font.dest += 0x20; + + if (font.right_align) { + uVar8 = (uVar8 + 0xf) & ~0xf; + puVar9 -= (uVar8 >> 4) + 1; + } else { + font.dest += 1; + } + uVar8 = uVar8 >> 3; + param_1 = font.gfx_src; + DispMessageFrame(puVar9, uVar8, iVar10, param_1); + puVar9 = puVar9 + 1; + font.gfx_src = font.gfx_src + 7; + param_1 = font.gfx_src - 1; + while (iVar10-- > 0) { + puVar9 += 0x20; + puVar6 = puVar9; + for (uVar5 = uVar8; (int)uVar5-- > 0;) { + *puVar6++ = param_1; + } + } + } + MemClear(&gUnk_02034330, sizeof(gUnk_02034330)); + while ((s16)sub_0805F5CC(&font, &token, pWVar4) != 0) {} + sub_0805F300(pWVar4); + } + return 0; +} + +bool32 sub_0805F5CC(Font* param_1, Token* param_2, WStruct* param_3) { + u16 uVar2; + u32 uVar3; + int iVar4; + u16* puVar5; + u32 fontStr; + + uVar3 = sub_0805F8F8(param_1->fill_type); + MemFill32(uVar3, param_1->buffer_loc, ((param_1->width + 7) & 0x1f8) << 3); + fontStr = GetFontStrWith(param_2, 0); + param_3->unk6 = param_1->right_align ? ((8 - ((fontStr + 1) >> 1)) & 7) : 0; + + puVar5 = (u16*)sub_0805F6A4(param_2, param_3); + if (puVar5) { + iVar4 = (int)(param_3->unk6 + 7) / 8; + puVar5 = param_1->dest; + if (param_1->right_align) { + puVar5 -= (iVar4 + 1U) >> 1; + } + param_1->gfx_src = sub_0805F67C(puVar5, param_1->gfx_src, iVar4); + param_1->dest += 0x40; + iVar4 *= 0x40; + MemCopy(param_1->buffer_loc, param_1->gfx_dest, iVar4); + param_1->gfx_dest = (void*)((int)param_1->gfx_dest + iVar4); + } else { + if (param_2->code == 10) { + param_1->dest += param_1->_16 * 0x20; + } + } + return param_2->code > 0; +} + +int sub_0805F67C(short* param_1, int param_2, int param_3) { + for (param_3--; param_3 != -1; param_3--) { + param_1[0] = param_2++; + param_1[0x20] = param_2++; + param_1++; + } + return param_2; +} + +u32 sub_0805F6A4(Token* param_1, WStruct* param_2) { + u32 uVar1; + u32 uVar3; + int iVar4; + u32 r7; + + iVar4 = 0; + r7 = 1; + do { + uVar1 = GetCharacter(param_1); + r7 = 1; + switch (uVar1) { + case 7: + if (param_1->param < 0xe) { + param_2->charColor = param_1->param; + } + break; + case 0: + case 1: + r7 = 0; + break; + case 2: + case 3: + case 4: + case 5: + case 6: + case 8: + case 9: + case 10: + case 0xd: + case 0xe: + break; + + case 0xc: + uVar3 = gUnk_02034330.unk2; + if (uVar3 < 4) { + gUnk_02034330.unk2 = uVar3 + 1; + gUnk_02034330.unk10[uVar3] = param_1->_6; + gUnk_02034330.unk8[uVar3] = param_2->unk6; + } + param_2->unk6 += 8; + iVar4 += 8; + break; + case 0xb: + param_2->unk1 = param_1->param; + break; + default: + iVar4 += sub_0805F7DC(uVar1, param_2); + if ((param_1->unk05 == 1) && (1 < param_2->unk6)) { + iVar4--; + param_2->unk6 = param_2->unk6 - 1; + } + break; + } + } while (r7); + + return iVar4; +} + +u32 sub_0805F76C(u8* param_1, WStruct* param_2) { + u32 uVar1; + Token local_38; + + sub_0805F440(&local_38, param_1); + local_38.unk05 = param_2->unk04 & 3; + uVar1 = sub_0805F6A4(&local_38, param_2); + return uVar1; +} + +u32 sub_0805F7A0(u32 param_1) { + u32 uVar1; + u32 uVar2; + u32 uVar3; + + uVar1 = 0xf; + for (uVar2 = 0; uVar2 < 8; uVar2++) { + if (uVar1 != (param_1 & uVar1)) + break; + uVar1 <<= 4; + } + for (uVar3 = uVar2; (uVar2 < 8 && (uVar1 != (param_1 & uVar1))); uVar1 <<= 4, uVar2++) {} + uVar2 -= uVar3; + return (uVar2 << 8) | uVar3; +} u32 sub_0805F7DC(u32 r0, WStruct* r1) { u32 temp; @@ -59,6 +656,7 @@ void sub_0805F820(WStruct* r0, u32* r1) { u8* temp; void* temp2; VStruct* temp3; + u32 temp4; if (r0->unk4 - r0->unk6 > 0) { sub_08002724(r1, &gUnk_02036A58); @@ -81,11 +679,12 @@ void sub_0805F820(WStruct* r0, u32* r1) { puVar8 = &gUnk_02036A58 + uVar6; temp2 = r0->unk8; - temp = gUnk_0810942E[r0->unk3].filler0[r0->unk2 * 2]; + temp = gUnk_0810942E[r0->bgColor].filler0[r0->charColor * 2]; uVar7 = r0->unk6; r0->unk6 += uVar3; - if (r0->unk0 / 16 != 1) { + temp4 = r0->unk04; + if (temp4 != 1) { while (uVar3-- > 0) { sub_080026C4(puVar8, temp2, temp, uVar7); puVar8++;