diff --git a/asm/bigGoron.s b/asm/bigGoron.s index f2926a00..8e59000e 100644 --- a/asm/bigGoron.s +++ b/asm/bigGoron.s @@ -120,7 +120,7 @@ sub_0806D0F8: @ 0x0806D0F8 movs r0, #7 movs r1, #0x4c movs r2, #7 - bl FindEntityInListBySubtype + bl FindEntityByID cmp r0, #0 beq _0806D10C bl sub_0806D0B0 @@ -928,7 +928,7 @@ sub_0806D6D0: @ 0x0806D6D0 movs r1, #0x4c movs r2, #7 movs r3, #2 - bl FindEntityInListByForm + bl FindEntity adds r1, r0, #0 cmp r1, #0 beq _0806D6EE @@ -940,7 +940,7 @@ _0806D6EE: movs r1, #0x4c movs r2, #7 movs r3, #1 - bl FindEntityInListByForm + bl FindEntity adds r1, r0, #0 cmp r1, #0 beq _0806D706 @@ -961,7 +961,7 @@ sub_0806D70C: @ 0x0806D70C movs r1, #0x4c movs r2, #7 movs r3, #2 - bl FindEntityInListByForm + bl FindEntity adds r2, r0, #0 cmp r2, #0 beq _0806D728 @@ -972,7 +972,7 @@ _0806D728: movs r1, #0x4c movs r2, #7 movs r3, #1 - bl FindEntityInListByForm + bl FindEntity adds r2, r0, #0 cmp r2, #0 beq _0806D746 @@ -996,7 +996,7 @@ sub_0806D74C: @ 0x0806D74C movs r1, #0x4c movs r2, #7 movs r3, #2 - bl FindEntityInListByForm + bl FindEntity adds r1, r0, #0 cmp r1, #0 beq _0806D76A @@ -1008,7 +1008,7 @@ _0806D76A: movs r1, #0x4c movs r2, #7 movs r3, #1 - bl FindEntityInListByForm + bl FindEntity adds r1, r0, #0 cmp r1, #0 beq _0806D782 @@ -1029,7 +1029,7 @@ sub_0806D788: @ 0x0806D788 movs r1, #0x4c movs r2, #7 movs r3, #2 - bl FindEntityInListByForm + bl FindEntity adds r1, r0, #0 cmp r1, #0 beq _0806D7A6 @@ -1041,7 +1041,7 @@ _0806D7A6: movs r1, #0x4c movs r2, #7 movs r3, #1 - bl FindEntityInListByForm + bl FindEntity adds r1, r0, #0 cmp r1, #0 beq _0806D7BE @@ -1070,7 +1070,7 @@ sub_0806D7C4: @ 0x0806D7C4 movs r1, #0x4c movs r2, #7 movs r3, #2 - bl FindEntityInListByForm + bl FindEntity cmp r0, #0 beq _0806D7FC movs r1, #0x2e @@ -1098,7 +1098,7 @@ sub_0806D804: @ 0x0806D804 movs r1, #0x4c movs r2, #7 movs r3, #2 - bl FindEntityInListByForm + bl FindEntity adds r1, r0, #0 cmp r1, #0 beq _0806D83A diff --git a/asm/bird.s b/asm/bird.s index fed030cc..a6c53b75 100644 --- a/asm/bird.s +++ b/asm/bird.s @@ -639,7 +639,7 @@ CreateBird: @ 0x0809D700 movs r1, #0x95 movs r2, #6 movs r3, #8 - bl FindEntityInListByForm + bl FindEntity adds r4, r0, #0 cmp r4, #0 bne _0809D732 diff --git a/asm/book.s b/asm/book.s index 325205d1..fe75a238 100644 --- a/asm/book.s +++ b/asm/book.s @@ -327,7 +327,7 @@ _0809B606: movs r0, #7 movs r1, #0x1a movs r2, #7 - bl FindEntityInListBySubtype + bl FindEntityByID adds r2, r0, #0 cmp r2, #0 beq _0809B682 diff --git a/asm/code_080011C4.s b/asm/code_080011C4.s index 94684d6e..b050d9e8 100644 --- a/asm/code_080011C4.s +++ b/asm/code_080011C4.s @@ -1238,7 +1238,7 @@ _08002812: cmp r0, #0 beq _08002834 adds r6, #1 - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #8 _08002834: adds r4, r0, #0 @@ -1256,7 +1256,7 @@ _0800283E: cmp r0, #0 beq _08002856 adds r6, #2 - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #8 _08002856: adds r4, r0, #0 diff --git a/asm/code_0801D79C.s b/asm/code_0801D79C.s index f1aab2ca..4cbc3a6f 100644 --- a/asm/code_0801D79C.s +++ b/asm/code_0801D79C.s @@ -217,8 +217,8 @@ _0801DA02: mov sl, r5 pop {r4, r5, r6, r7, pc} - thumb_func_start sub_0801DA0C -sub_0801DA0C: @ 0x0801DA0C + thumb_func_start zFree +zFree: @ 0x0801DA0C push {r4, r5, lr} ldr r3, _0801DA44 @ =gzHeap subs r1, r0, r3 @@ -287,8 +287,8 @@ zMallocInit: @ 0x0801DA7C .align 2, 0 _0801DA8C: .4byte gzHeap - thumb_func_start sub_0801DA90 -sub_0801DA90: @ 0x0801DA90 + thumb_func_start DispReset +DispReset: @ 0x0801DA90 push {r4, r5, lr} adds r4, r0, #0 ldr r1, _0801DAEC @ =gMain @@ -319,7 +319,7 @@ sub_0801DA90: @ 0x0801DA90 movs r0, #0x80 lsls r0, r0, #0x13 strh r3, [r0] - bl sub_0801DB10 + bl ClearOAM bl sub_0801DB34 ldr r0, _0801DB08 @ =0x0600C000 movs r1, #0x20 @@ -341,8 +341,8 @@ _0801DB04: .4byte 0x00007FFF _0801DB08: .4byte 0x0600C000 _0801DB0C: .4byte gBG0Buffer - thumb_func_start sub_0801DB10 -sub_0801DB10: @ 0x0801DB10 + thumb_func_start ClearOAM +ClearOAM: @ 0x0801DB10 push {r4, lr} ldr r3, _0801DB30 @ =gUnk_03000020 movs r1, #0xe0 diff --git a/asm/code_0804AA84.s b/asm/code_0804AA84.s index c6424780..3174946c 100644 --- a/asm/code_0804AA84.s +++ b/asm/code_0804AA84.s @@ -9,7 +9,7 @@ sub_0804AB70: @ 0x0804AB70 push {r4, r5, lr} movs r0, #0 - bl sub_0801DA90 + bl DispReset ldr r1, _0804ABF8 @ =gScreen movs r2, #0 movs r0, #0x92 diff --git a/asm/code_080526F8.s b/asm/code_080526F8.s index a6574bbf..150d4fea 100644 --- a/asm/code_080526F8.s +++ b/asm/code_080526F8.s @@ -2013,7 +2013,7 @@ sub_0805368C: @ 0x0805368C movs r0, #6 movs r1, #0x5d movs r2, #6 - bl FindEntityInListBySubtype + bl FindEntityByID cmp r0, #0 beq _080536A6 bl DeleteEntity @@ -2139,7 +2139,7 @@ sub_08053758: @ 0x08053758 strh r2, [r0, #0xa] bl sub_0801B170 movs r0, #0 - bl sub_0801DA90 + bl DispReset ldr r2, _080537F0 @ =gScreen movs r0, #0x99 lsls r0, r0, #6 @@ -2380,7 +2380,7 @@ sub_08053974: @ 0x08053974 bne _080539A8 bl sub_0804FFE4 movs r0, #1 - bl sub_0801DA90 + bl DispReset bl sub_080197AC bl sub_08051F78 ldr r0, _080539B0 @ =gUnk_080FCBC4 @@ -2437,7 +2437,7 @@ sub_080539F4: @ 0x080539F4 cmp r0, #0 bne _08053A10 movs r0, #1 - bl sub_0801DA90 + bl DispReset ldr r0, _08053A18 @ =gMenu ldrb r1, [r0, #6] adds r1, #1 @@ -2587,7 +2587,7 @@ sub_08053B10: @ 0x08053B10 adds r1, #1 strb r1, [r0, #5] movs r0, #1 - bl sub_0801DA90 + bl DispReset movs r1, #0x80 lsls r1, r1, #1 movs r0, #4 @@ -2673,7 +2673,7 @@ sub_08053BBC: @ 0x08053BBC adds r1, #1 strb r1, [r0, #5] movs r0, #1 - bl sub_0801DA90 + bl DispReset movs r1, #0x80 lsls r1, r1, #1 movs r0, #4 diff --git a/asm/code_0805436C.s b/asm/code_0805436C.s index 4ab2c097..6e6c053a 100644 --- a/asm/code_0805436C.s +++ b/asm/code_0805436C.s @@ -33,7 +33,7 @@ sub_0805488C: @ 0x0805488C lsls r0, r0, #1 strh r0, [r2, #8] movs r0, #0 - bl sub_0801DA90 + bl DispReset ldrb r0, [r4, #3] movs r1, #1 bl sub_08054974 @@ -2571,7 +2571,7 @@ _08055C6C: movs r1, #0x9e movs r2, #6 movs r3, #0 - bl FindEntityInListByForm + bl FindEntity adds r4, r0, #0 cmp r4, #0 beq _08055C8C diff --git a/asm/code_0806EC20.s b/asm/code_0806EC20.s index 293d4e87..ff7f71a1 100644 --- a/asm/code_0806EC20.s +++ b/asm/code_0806EC20.s @@ -27,7 +27,7 @@ sub_0806EC38: @ 0x0806EC38 movs r0, #7 movs r1, #0x58 movs r2, #7 - bl FindEntityInListBySubtype + bl FindEntityByID cmp r0, #0 beq _0806EC4C bl DeleteEntity diff --git a/asm/code_0806ED78.s b/asm/code_0806ED78.s index 17534c87..d6735892 100644 --- a/asm/code_0806ED78.s +++ b/asm/code_0806ED78.s @@ -1193,13 +1193,13 @@ sub_0806F5BC: @ 0x0806F5BC lsls r5, r1, #0x10 asrs r5, r5, #0x10 adds r1, r5, #0 - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 movs r6, #0x80 lsls r6, r6, #1 adds r1, r6, #0 - bl sub_0806FA04 + bl FixedDiv lsls r0, r0, #0x10 asrs r0, r0, #8 ldr r1, [r7, #0x2c] @@ -1211,11 +1211,11 @@ sub_0806F5BC: @ 0x0806F5BC movs r1, #0 ldrsh r0, [r4, r1] adds r1, r5, #0 - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 adds r1, r6, #0 - bl sub_0806FA04 + bl FixedDiv lsls r0, r0, #0x10 asrs r0, r0, #8 ldr r1, [r7, #0x30] @@ -1248,13 +1248,13 @@ sub_0806F62C: @ 0x0806F62C lsls r5, r5, #0x10 asrs r5, r5, #0x10 adds r1, r5, #0 - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 movs r1, #0x80 lsls r1, r1, #1 mov r8, r1 - bl sub_0806FA04 + bl FixedDiv lsls r0, r0, #0x10 asrs r0, r0, #8 ldr r1, [r6, #0x2c] @@ -1266,11 +1266,11 @@ sub_0806F62C: @ 0x0806F62C movs r1, #0 ldrsh r0, [r4, r1] adds r1, r5, #0 - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 mov r1, r8 - bl sub_0806FA04 + bl FixedDiv lsls r0, r0, #0x10 asrs r0, r0, #8 ldr r1, [r6, #0x30] @@ -1300,13 +1300,13 @@ sub_0806F69C: @ 0x0806F69C ldrsh r0, [r0, r1] movs r2, #0x24 ldrsh r1, [r6, r2] - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 movs r4, #0x80 lsls r4, r4, #1 adds r1, r4, #0 - bl sub_0806FA04 + bl FixedDiv lsls r0, r0, #0x10 asrs r0, r0, #8 ldr r1, [r6, #0x2c] @@ -1320,11 +1320,11 @@ sub_0806F69C: @ 0x0806F69C ldrsh r0, [r0, r1] movs r2, #0x24 ldrsh r1, [r6, r2] - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 adds r1, r4, #0 - bl sub_0806FA04 + bl FixedDiv lsls r0, r0, #0x10 asrs r0, r0, #8 ldr r1, [r6, #0x30] diff --git a/asm/code_0806FA6C.s b/asm/code_0806FA6C.s index 347c2fa1..f006651f 100644 --- a/asm/code_0806FA6C.s +++ b/asm/code_0806FA6C.s @@ -139,7 +139,7 @@ UnloadHitbox: @ 0x0806FBEC push {r4, lr} adds r4, r0, #0 ldr r0, [r4, #0x48] - bl sub_0801DA0C + bl zFree movs r0, #0 str r0, [r4, #0x48] pop {r4, pc} diff --git a/asm/code_080732D0.s b/asm/code_080732D0.s index ef443c26..f2e7f6fa 100644 --- a/asm/code_080732D0.s +++ b/asm/code_080732D0.s @@ -4592,7 +4592,7 @@ _080754F2: movs r0, #8 movs r1, #0xf movs r2, #2 - bl FindEntityInListBySubtype + bl FindEntityByID cmp r0, #0 bne _08075538 adds r0, r4, #0 @@ -6017,7 +6017,7 @@ sub_08075FF8: @ 0x08075FF8 movs r0, #8 movs r1, #2 movs r2, #2 - bl FindEntityInListBySubtype + bl FindEntityByID b _08076026 .align 2, 0 _08076018: .4byte gPlayerState @@ -6025,7 +6025,7 @@ _0807601C: adds r5, #1 adds r0, r4, #0 movs r1, #2 - bl FindNextEntityOfSameSubtype + bl FindNextDuplicateID _08076026: adds r4, r0, #0 cmp r4, #0 diff --git a/asm/code_08078778.s b/asm/code_08078778.s index fe9f34f1..323f2c4f 100644 --- a/asm/code_08078778.s +++ b/asm/code_08078778.s @@ -44,7 +44,7 @@ _080788BA: movs r0, #6 movs r1, #9 movs r2, #6 - bl FindEntityInListBySubtype + bl FindEntityByID cmp r0, #0 bne _080788D6 movs r0, #9 diff --git a/asm/code_0807F0D8.s b/asm/code_0807F0D8.s index 16552c65..22e915bf 100644 --- a/asm/code_0807F0D8.s +++ b/asm/code_0807F0D8.s @@ -1228,7 +1228,7 @@ sub_0807F950: @ 0x0807F950 movs r1, #0x56 movs r2, #6 movs r3, #0 - bl FindEntityInListByForm + bl FindEntity cmp r0, #0 beq _0807F96C bl DeleteEntity diff --git a/asm/code_080A29BC.s b/asm/code_080A29BC.s index 09c4ea72..c0b7228f 100644 --- a/asm/code_080A29BC.s +++ b/asm/code_080A29BC.s @@ -96,13 +96,13 @@ sub_080A2AF4: @ 0x080A2AF4 lsls r4, r4, #0x18 asrs r4, r4, #0x10 adds r1, r4, #0 - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 movs r5, #0x80 lsls r5, r5, #1 adds r1, r5, #0 - bl sub_0806FA04 + bl FixedDiv lsls r0, r0, #0x10 asrs r0, r0, #8 ldr r1, [r6, #0x2c] @@ -115,11 +115,11 @@ sub_080A2AF4: @ 0x080A2AF4 movs r1, #0 ldrsh r0, [r0, r1] adds r1, r4, #0 - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 adds r1, r5, #0 - bl sub_0806FA04 + bl FixedDiv lsls r0, r0, #0x10 asrs r0, r0, #8 ldr r1, [r6, #0x30] diff --git a/asm/code_080A3480.s b/asm/code_080A3480.s index a30dd9c2..879e0852 100644 --- a/asm/code_080A3480.s +++ b/asm/code_080A3480.s @@ -266,7 +266,7 @@ _080A365C: _080A365E: str r0, [r2, #0xc] movs r0, #0 - bl sub_0801DA90 + bl DispReset movs r0, #0xb bl LoadPaletteGroup movs r0, #0xc @@ -699,7 +699,7 @@ _080A39C8: strh r0, [r2, #8] strb r4, [r2, #3] movs r0, #1 - bl sub_0801DA90 + bl DispReset bl sub_080A3210 bl sub_080A4D34 movs r0, #0xa diff --git a/asm/code_080A5574.s b/asm/code_080A5574.s index 6a218289..05b47ec9 100644 --- a/asm/code_080A5574.s +++ b/asm/code_080A5574.s @@ -3782,7 +3782,7 @@ sub_080A7328: @ 0x080A7328 movs r0, #8 strb r0, [r4, #8] movs r0, #1 - bl sub_0801DA90 + bl DispReset bl MessageInitialize bl sub_080ADD30 movs r0, #0 diff --git a/asm/dust.s b/asm/dust.s index 2a5392c6..f010f3dc 100644 --- a/asm/dust.s +++ b/asm/dust.s @@ -160,7 +160,7 @@ _080441F2: cmp r2, #0 bne _08044248 ldr r0, [r4, #0x64] - bl sub_0801DA0C + bl zFree b _0804429A .align 2, 0 _08044244: .4byte 0x000001EB diff --git a/asm/evilSpirit.s b/asm/evilSpirit.s index 79a69521..1baea3de 100644 --- a/asm/evilSpirit.s +++ b/asm/evilSpirit.s @@ -341,13 +341,13 @@ _080864EE: ldrsh r0, [r0, r1] movs r1, #0x80 lsls r1, r1, #6 - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 movs r4, #0x80 lsls r4, r4, #1 adds r1, r4, #0 - bl sub_0806FA04 + bl FixedDiv adds r1, r6, #0 adds r1, #0x80 lsls r0, r0, #0x10 @@ -363,11 +363,11 @@ _080864EE: ldrsh r0, [r0, r3] movs r1, #0x80 lsls r1, r1, #5 - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 adds r1, r4, #0 - bl sub_0806FA04 + bl FixedDiv adds r1, r6, #0 adds r1, #0x84 lsls r0, r0, #0x10 @@ -520,13 +520,13 @@ _0808663A: ldrsh r0, [r0, r1] movs r1, #0x80 lsls r1, r1, #6 - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 movs r5, #0x80 lsls r5, r5, #1 adds r1, r5, #0 - bl sub_0806FA04 + bl FixedDiv adds r1, r7, #0 adds r1, #0x80 lsls r0, r0, #0x10 @@ -541,11 +541,11 @@ _0808663A: ldrsh r0, [r0, r1] movs r1, #0x80 lsls r1, r1, #5 - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 adds r1, r5, #0 - bl sub_0806FA04 + bl FixedDiv adds r1, r7, #0 adds r1, #0x84 lsls r0, r0, #0x10 diff --git a/asm/fileScreen.s b/asm/fileScreen.s index 287c9992..ba7813d0 100755 --- a/asm/fileScreen.s +++ b/asm/fileScreen.s @@ -33,7 +33,7 @@ sub_080519B0: @ 0x080519B0 cmp r5, #0 bne _08051A02 movs r0, #1 - bl sub_0801DA90 + bl DispReset bl sub_080A3210 bl zMallocInit bl sub_080A7124 @@ -69,7 +69,7 @@ _08051A10: .4byte gMain sub_08051A14: @ 0x08051A14 push {lr} movs r0, #1 - bl sub_0801DA90 + bl DispReset ldr r1, _08051A70 @ =gFadeControl movs r0, #1 rsbs r0, r0, #0 @@ -368,7 +368,7 @@ sub_08051CF0: @ 0x08051CF0 cmp r4, #0 bne _08051D1E movs r0, #1 - bl sub_0801DA90 + bl DispReset strb r6, [r5, #3] strb r4, [r5, #4] ldr r0, _08051D28 @ =gScreenTransition @@ -729,7 +729,7 @@ sub_08052010: @ 0x08052010 bl sub_080A3210 bl MessageInitialize movs r0, #1 - bl sub_0801DA90 + bl DispReset ldr r0, _0805207C @ =gBG1Buffer movs r4, #0x80 lsls r4, r4, #4 diff --git a/asm/fourElements.s b/asm/fourElements.s index 42e2badb..dd5ffa82 100644 --- a/asm/fourElements.s +++ b/asm/fourElements.s @@ -355,7 +355,7 @@ sub_080A0464: @ 0x080A0464 movs r0, #6 movs r1, #0xac movs r2, #6 - bl FindEntityInListBySubtype + bl FindEntityByID cmp r0, #0 beq _080A048A movs r1, #0x2e diff --git a/asm/gleerok.s b/asm/gleerok.s index d6272ec5..d8709272 100644 --- a/asm/gleerok.s +++ b/asm/gleerok.s @@ -2824,11 +2824,11 @@ _0802E580: ldrb r1, [r6] lsls r1, r1, #0x18 asrs r1, r1, #0x10 - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 adds r1, r7, #0 - bl sub_0806FA04 + bl FixedDiv adds r1, r0, #0 ldrb r0, [r4, #1] lsls r0, r0, #4 @@ -2838,11 +2838,11 @@ _0802E580: ldrsh r0, [r0, r2] lsls r1, r1, #0x10 asrs r1, r1, #0x10 - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 adds r1, r7, #0 - bl sub_0806FA04 + bl FixedDiv ldr r2, [r5] lsls r0, r0, #0x10 asrs r0, r0, #8 @@ -2859,11 +2859,11 @@ _0802E580: ldrb r1, [r6] lsls r1, r1, #0x18 asrs r1, r1, #0x10 - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 adds r1, r7, #0 - bl sub_0806FA04 + bl FixedDiv ldr r2, [r5] lsls r0, r0, #0x10 asrs r0, r0, #8 diff --git a/asm/guardWithSpear.s b/asm/guardWithSpear.s index 14da7633..4d328260 100644 --- a/asm/guardWithSpear.s +++ b/asm/guardWithSpear.s @@ -153,7 +153,7 @@ sub_08064180: @ 0x08064180 movs r0, #7 movs r1, #0x15 movs r2, #7 - bl FindEntityInListBySubtype + bl FindEntityByID cmp r0, #0 beq _08064194 bl DeleteEntity diff --git a/asm/kid.s b/asm/kid.s index ccc90dd2..59d6b6e7 100644 --- a/asm/kid.s +++ b/asm/kid.s @@ -656,7 +656,7 @@ sub_0806252C: @ 0x0806252C lsls r0, r1, #0x10 asrs r0, r0, #0x10 movs r1, #0x14 - bl sub_0806FA04 + bl FixedDiv lsls r0, r0, #0x10 asrs r0, r0, #0x10 mov sl, r0 @@ -664,7 +664,7 @@ sub_0806252C: @ 0x0806252C lsls r0, r2, #0x10 asrs r0, r0, #0x10 movs r1, #0x14 - bl sub_0806FA04 + bl FixedDiv lsls r0, r0, #0x10 asrs r0, r0, #0x10 mov r8, r0 diff --git a/asm/lilypadLarge.s b/asm/lilypadLarge.s index 5202438a..4d2e643d 100644 --- a/asm/lilypadLarge.s +++ b/asm/lilypadLarge.s @@ -73,7 +73,7 @@ _08085566: b _0808557A _0808556C: adds r0, r4, #0 - bl DoesSimilarEntityExist + bl EntityHasDuplicateID cmp r0, #0 beq _0808557A bl DeleteThisEntity @@ -349,13 +349,13 @@ _08085774: lsls r4, r4, #0x10 asrs r4, r4, #0x18 adds r1, r4, #0 - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 movs r5, #0x80 lsls r5, r5, #1 adds r1, r5, #0 - bl sub_0806FA04 + bl FixedDiv lsls r0, r0, #0x10 asrs r0, r0, #8 ldr r1, [r7, #0x6c] @@ -368,11 +368,11 @@ _08085774: movs r2, #0 ldrsh r0, [r0, r2] adds r1, r4, #0 - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 adds r1, r5, #0 - bl sub_0806FA04 + bl FixedDiv lsls r0, r0, #0x10 asrs r0, r0, #8 ldr r1, [r7, #0x70] @@ -441,7 +441,7 @@ _0808581A: movs r4, #0x80 lsls r4, r4, #1 adds r1, r4, #0 - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 ldr r5, _080858A8 @ =gSineTable @@ -450,13 +450,13 @@ _0808581A: adds r1, r1, r5 movs r2, #0 ldrsh r1, [r1, r2] - bl sub_0806FA04 + bl FixedDiv strh r0, [r7, #0x24] ldr r0, [r7, #0x70] lsls r0, r0, #8 asrs r0, r0, #0x10 adds r1, r4, #0 - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 ldrb r1, [r7, #0x15] @@ -465,7 +465,7 @@ _0808581A: adds r1, r1, r5 movs r2, #0 ldrsh r1, [r1, r2] - bl sub_0806FA04 + bl FixedDiv lsls r0, r0, #0x10 asrs r0, r0, #0x10 rsbs r4, r0, #0 @@ -1072,7 +1072,7 @@ _08085D0C: sub_08085D10: @ 0x08085D10 push {r4, lr} adds r4, r0, #0 - bl DoesSimilarEntityExist + bl EntityHasDuplicateID cmp r0, #0 beq _08085D26 ldrb r0, [r4, #0xb] diff --git a/asm/loadRoomEntity.s b/asm/loadRoomEntity.s index 81a81688..50933176 100644 --- a/asm/loadRoomEntity.s +++ b/asm/loadRoomEntity.s @@ -19,14 +19,14 @@ LoadRoomEntity: @ 0x0804ADF8 bne _0804AE1C ldrb r1, [r4, #2] adds r0, r6, #0 - bl FindEntityBySubtype + bl DeepFindEntityByID cmp r0, #0 beq _0804AE1C movs r0, #0 b _0804AEAC _0804AE1C: adds r0, r6, #0 - bl GetEmptyEntityByType + bl GetEmptyEntityByKind adds r5, r0, #0 cmp r5, #0 beq _0804AEAA diff --git a/asm/macroBook.s b/asm/macroBook.s index 7836e99b..654f182a 100644 --- a/asm/macroBook.s +++ b/asm/macroBook.s @@ -360,7 +360,7 @@ sub_0809AA00: @ 0x0809AA00 movs r0, #7 movs r1, #0x38 movs r2, #7 - bl FindEntityInListBySubtype + bl FindEntityByID adds r4, r0, #0 adds r7, r5, #0 adds r7, #0x78 @@ -380,7 +380,7 @@ _0809AA30: _0809AA3A: adds r0, r4, #0 movs r1, #7 - bl FindNextEntityOfSameSubtype + bl FindNextDuplicateID adds r4, r0, #0 cmp r4, #0 bne _0809AA30 diff --git a/asm/manager14.s b/asm/manager14.s index cfdf3e17..cae54bf4 100644 --- a/asm/manager14.s +++ b/asm/manager14.s @@ -30,7 +30,7 @@ _08059E7C: .4byte gUnk_081085A4 sub_08059E80: @ 0x08059E80 push {r4, r5, lr} adds r4, r0, #0 - bl DoesSimilarEntityExist + bl EntityHasDuplicateID cmp r0, #0 beq _08059E90 bl DeleteThisEntity diff --git a/asm/manager1B.s b/asm/manager1B.s index c591eaa4..31e610bc 100644 --- a/asm/manager1B.s +++ b/asm/manager1B.s @@ -10,7 +10,7 @@ sub_0805B3B4: @ 0x0805B3B4 push {r4, r5, lr} adds r4, r0, #0 - bl DoesSimilarEntityExist + bl EntityHasDuplicateID cmp r0, #0 beq _0805B3C4 bl DeleteThisEntity diff --git a/asm/manager22.s b/asm/manager22.s index 4159a42b..aae066dc 100644 --- a/asm/manager22.s +++ b/asm/manager22.s @@ -342,7 +342,7 @@ _0805BB82: strh r1, [r2, #0xc] movs r0, #9 movs r1, #0x22 - bl FindEntityBySubtype + bl DeepFindEntityByID cmp r0, #0 beq _0805BBAE bl sub_0805B8EC diff --git a/asm/manager36.s b/asm/manager36.s index 5245d37b..e4fae5aa 100644 --- a/asm/manager36.s +++ b/asm/manager36.s @@ -72,7 +72,7 @@ sub_0805DE18: @ 0x0805DE18 movs r0, #9 movs r1, #0x36 movs r2, #6 - bl FindEntityInListByForm + bl FindEntity cmp r0, #0 beq _0805DE34 bl DeleteEntityAny diff --git a/asm/managerF.s b/asm/managerF.s index b9d9444a..1e268250 100644 --- a/asm/managerF.s +++ b/asm/managerF.s @@ -492,7 +492,7 @@ sub_08059278: @ 0x08059278 movs r0, #9 movs r1, #0xf movs r2, #6 - bl FindEntityInListBySubtype + bl FindEntityByID cmp r0, #0 beq _0805928C bl sub_08058ECC diff --git a/asm/minishSizedEntrance.s b/asm/minishSizedEntrance.s deleted file mode 100644 index aa4edc0d..00000000 --- a/asm/minishSizedEntrance.s +++ /dev/null @@ -1,62 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_08090F00 -sub_08090F00: @ 0x08090F00 - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0xa] - cmp r1, #1 - bne _08090F1C - ldr r0, [r4, #0x50] - ldrb r2, [r4, #0xf] - lsls r1, r2 - ldr r0, [r0, #0x20] - ands r0, r1 - cmp r0, #0 - bne _08090F1C - bl DeleteThisEntity -_08090F1C: - ldr r6, _08090F64 @ =gPlayerState - ldr r0, [r6, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08090F62 - ldr r5, _08090F68 @ =gPlayerEntity - adds r0, r4, #0 - adds r1, r5, #0 - movs r2, #4 - movs r3, #4 - bl sub_080041A0 - cmp r0, #0 - beq _08090F62 - movs r1, #0x36 - ldrsh r0, [r5, r1] - cmp r0, #0 - bne _08090F62 - adds r2, r6, #0 - adds r2, #0x90 - ldr r1, _08090F6C @ =gUnk_0812225C - ldrb r0, [r4, #0xb] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r1, [r2] - ldrh r0, [r0] - ands r0, r1 - cmp r0, #0 - beq _08090F62 - ldrb r0, [r4, #0xe] - bl GetCurrentRoomProperty - bl DoExitTransition -_08090F62: - pop {r4, r5, r6, pc} - .align 2, 0 -_08090F64: .4byte gPlayerState -_08090F68: .4byte gPlayerEntity -_08090F6C: .4byte gUnk_0812225C diff --git a/asm/object3E.s b/asm/object3E.s index 786ee7ba..ee4b5d42 100644 --- a/asm/object3E.s +++ b/asm/object3E.s @@ -247,7 +247,7 @@ sub_0808D280: @ 0x0808D280 movs r1, #0x3e movs r2, #6 movs r3, #9 - bl FindEntityInListByForm + bl FindEntity adds r2, r0, #0 cmp r2, #0 beq _0808D2C4 @@ -287,7 +287,7 @@ sub_0808D2CC: @ 0x0808D2CC movs r1, #0x3e movs r2, #6 movs r3, #1 - bl FindEntityInListByForm + bl FindEntity adds r1, r0, #0 cmp r1, #0 beq _0808D2F2 diff --git a/asm/object6A.s b/asm/object6A.s index 761e95e4..fb464dcb 100644 --- a/asm/object6A.s +++ b/asm/object6A.s @@ -235,7 +235,7 @@ sub_08094BE0: @ 0x08094BE0 movs r1, #0x6a movs r2, #6 movs r3, #0x22 - bl FindEntityInListByForm + bl FindEntity adds r4, r0, #0 cmp r4, #0 beq _08094C22 @@ -390,7 +390,7 @@ sub_08094D10: @ 0x08094D10 movs r1, #0x6a movs r2, #6 movs r3, #3 - bl FindEntityInListByForm + bl FindEntity adds r1, r0, #0 cmp r1, #0 beq _08094D2E @@ -442,7 +442,7 @@ sub_08094D70: @ 0x08094D70 movs r1, #0x6a movs r2, #6 movs r3, #0x15 - bl FindEntityInListByForm + bl FindEntity adds r1, r0, #0 cmp r1, #0 beq _08094D8E @@ -527,7 +527,7 @@ sub_08094E0C: @ 0x08094E0C movs r1, #0x6a movs r2, #6 movs r3, #4 - bl FindEntityInListByForm + bl FindEntity adds r1, r0, #0 cmp r1, #0 beq _08094E2A @@ -951,7 +951,7 @@ sub_08095164: @ 0x08095164 movs r1, #0x6a movs r2, #6 movs r3, #8 - bl FindEntityInListByForm + bl FindEntity cmp r0, #0 beq _08095182 movs r1, #3 @@ -2103,7 +2103,7 @@ sub_08095A68: @ 0x08095A68 movs r1, #0x6a movs r2, #6 movs r3, #0x16 - bl FindEntityInListByForm + bl FindEntity adds r1, r0, #0 cmp r1, #0 beq _08095A86 diff --git a/asm/object87.s b/asm/object87.s index f4bf6ed0..2af555eb 100644 --- a/asm/object87.s +++ b/asm/object87.s @@ -968,13 +968,13 @@ sub_0809A648: @ 0x0809A648 lsls r5, r5, #8 asrs r5, r5, #0x10 adds r1, r5, #0 - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 movs r4, #0x80 lsls r4, r4, #1 adds r1, r4, #0 - bl sub_0806FA04 + bl FixedDiv ldr r1, [r7, #0x50] lsls r0, r0, #0x10 asrs r0, r0, #8 @@ -989,11 +989,11 @@ sub_0809A648: @ 0x0809A648 movs r2, #0 ldrsh r0, [r0, r2] adds r1, r5, #0 - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 adds r1, r4, #0 - bl sub_0806FA04 + bl FixedDiv ldr r1, [r7, #0x50] lsls r0, r0, #0x10 asrs r0, r0, #8 diff --git a/asm/object91.s b/asm/object91.s index 80fbd82d..35eb581d 100644 --- a/asm/object91.s +++ b/asm/object91.s @@ -1024,13 +1024,13 @@ sub_0809CB70: @ 0x0809CB70 lsls r5, r5, #0x10 asrs r5, r5, #0x10 adds r1, r5, #0 - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 movs r1, #0x80 lsls r1, r1, #1 mov r8, r1 - bl sub_0806FA04 + bl FixedDiv ldr r1, [r6, #0x50] lsls r0, r0, #0x10 asrs r0, r0, #8 @@ -1043,11 +1043,11 @@ sub_0809CB70: @ 0x0809CB70 movs r1, #0 ldrsh r0, [r4, r1] adds r1, r5, #0 - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 mov r1, r8 - bl sub_0806FA04 + bl FixedDiv ldr r2, [r6, #0x50] lsls r0, r0, #0x10 asrs r0, r0, #8 diff --git a/asm/object97.s b/asm/object97.s index 0da8dbe7..380c921b 100644 --- a/asm/object97.s +++ b/asm/object97.s @@ -62,7 +62,7 @@ sub_0809D9D8: @ 0x0809D9D8 bl InitAnimationForceUpdate adds r0, r4, #0 movs r1, #6 - bl FindNextEntityOfSameSubtype + bl FindNextDuplicateID cmp r0, #0 beq _0809DA1E str r4, [r0, #0x50] @@ -436,7 +436,7 @@ sub_0809DC80: @ 0x0809DC80 bl InitAnimationForceUpdate adds r0, r4, #0 movs r1, #6 - bl FindNextEntityOfSameSubtype + bl FindNextDuplicateID cmp r0, #0 beq _0809DD00 str r4, [r0, #0x50] @@ -1141,7 +1141,7 @@ sub_0809E238: @ 0x0809E238 adds r5, #0x6c movs r2, #0 ldrsh r1, [r5, r2] - bl sub_0806F9EC + bl FixedMul adds r4, r0, #0 lsls r4, r4, #0x10 asrs r4, r4, #0x10 @@ -1154,7 +1154,7 @@ sub_0809E238: @ 0x0809E238 ldrsh r0, [r0, r2] movs r2, #0 ldrsh r1, [r5, r2] - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 adds r1, r7, #0 diff --git a/asm/octorokBoss.s b/asm/octorokBoss.s index 419c15ac..e9a21351 100644 --- a/asm/octorokBoss.s +++ b/asm/octorokBoss.s @@ -597,13 +597,13 @@ _08035616: adds r1, r4, #0 ands r1, r2 lsls r1, r1, #8 - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 movs r5, #0x80 lsls r5, r5, #1 adds r1, r5, #0 - bl sub_0806FA04 + bl FixedDiv lsrs r0, r0, #8 adds r1, r7, #0 adds r1, #0x62 @@ -619,11 +619,11 @@ _08035616: ands r4, r1 lsls r4, r4, #8 adds r1, r4, #0 - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 adds r1, r5, #0 - bl sub_0806FA04 + bl FixedDiv lsls r0, r0, #0x10 asrs r0, r0, #8 rsbs r0, r0, #0 @@ -3086,13 +3086,13 @@ sub_08036914: @ 0x08036914 lsls r6, r6, #0x10 asrs r6, r6, #0x10 adds r1, r6, #0 - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 movs r1, #0x80 lsls r1, r1, #1 mov r8, r1 - bl sub_0806FA04 + bl FixedDiv ldr r1, [r5, #0x50] lsls r0, r0, #0x10 asrs r0, r0, #8 @@ -3105,11 +3105,11 @@ sub_08036914: @ 0x08036914 movs r1, #0 ldrsh r0, [r4, r1] adds r1, r6, #0 - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 mov r1, r8 - bl sub_0806FA04 + bl FixedDiv ldr r2, [r5, #0x50] lsls r0, r0, #0x10 asrs r0, r0, #8 @@ -3270,11 +3270,11 @@ _08036A78: movs r1, #0 ldrsh r0, [r0, r1] adds r1, r6, #0 - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 adds r1, r7, #0 - bl sub_0806FA04 + bl FixedDiv ldr r2, [r5] ldr r1, [r5, #4] lsls r0, r0, #0x10 @@ -3293,11 +3293,11 @@ _08036A78: movs r1, #0 ldrsh r0, [r0, r1] adds r1, r6, #0 - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 adds r1, r7, #0 - bl sub_0806FA04 + bl FixedDiv ldr r2, [r5] ldr r1, [r5, #4] lsls r0, r0, #0x10 @@ -3386,12 +3386,12 @@ _08036B48: movs r3, #0 ldrsh r0, [r0, r3] mov r1, sl - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 movs r1, #0x80 lsls r1, r1, #1 - bl sub_0806FA04 + bl FixedDiv ldr r2, [r5] ldr r1, [r6] lsls r0, r0, #0x10 @@ -3409,12 +3409,12 @@ _08036B48: movs r2, #0 ldrsh r0, [r0, r2] mov r1, sl - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 movs r1, #0x80 lsls r1, r1, #1 - bl sub_0806FA04 + bl FixedDiv ldr r2, [r5] ldr r1, [r6] b _08036C6E @@ -3475,12 +3475,12 @@ _08036C0E: movs r2, #0 ldrsh r0, [r0, r2] mov r1, sl - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 movs r1, #0x80 lsls r1, r1, #1 - bl sub_0806FA04 + bl FixedDiv ldr r2, [r4] adds r5, r6, r7 ldr r1, [r5] @@ -3499,12 +3499,12 @@ _08036C0E: movs r1, #0 ldrsh r0, [r0, r1] mov r1, sl - bl sub_0806F9EC + bl FixedMul lsls r0, r0, #0x10 asrs r0, r0, #0x10 movs r1, #0x80 lsls r1, r1, #1 - bl sub_0806FA04 + bl FixedDiv ldr r2, [r4] ldr r1, [r5] _08036C6E: diff --git a/asm/pina.s b/asm/pina.s index 39aeaf15..c92b8889 100644 --- a/asm/pina.s +++ b/asm/pina.s @@ -235,7 +235,7 @@ sub_08063C14: @ 0x08063C14 push {lr} movs r0, #7 movs r1, #0x14 - bl FindEntityBySubtype + bl DeepFindEntityByID cmp r0, #0 beq _08063C28 movs r1, #8 @@ -249,7 +249,7 @@ sub_08063C2C: @ 0x08063C2C push {lr} movs r0, #7 movs r1, #0x14 - bl FindEntityBySubtype + bl DeepFindEntityByID cmp r0, #0 beq _08063C40 movs r1, #4 @@ -263,7 +263,7 @@ sub_08063C44: @ 0x08063C44 push {lr} movs r0, #7 movs r1, #0x14 - bl FindEntityBySubtype + bl DeepFindEntityByID cmp r0, #0 beq _08063C58 movs r1, #0 @@ -277,7 +277,7 @@ sub_08063C5C: @ 0x08063C5C push {lr} movs r0, #7 movs r1, #0x14 - bl FindEntityBySubtype + bl DeepFindEntityByID cmp r0, #0 beq _08063C70 movs r1, #9 @@ -291,7 +291,7 @@ sub_08063C74: @ 0x08063C74 push {lr} movs r0, #7 movs r1, #0x14 - bl FindEntityBySubtype + bl DeepFindEntityByID cmp r0, #0 beq _08063C8C movs r2, #0x18 diff --git a/asm/rem.s b/asm/rem.s index a4906475..4f86ff07 100644 --- a/asm/rem.s +++ b/asm/rem.s @@ -938,7 +938,7 @@ _0806AAEE: adds r0, #0xac ldr r0, [r0] movs r1, #7 - bl FindNextEntityOfSameSubtype + bl FindNextDuplicateID adds r1, r0, #0 adds r0, r4, #0 adds r0, #0xb0 @@ -948,7 +948,7 @@ _0806AB02: adds r0, #0xb0 ldr r0, [r0] movs r1, #7 - bl FindNextEntityOfSameSubtype + bl FindNextDuplicateID adds r1, r0, #0 mov r0, r8 adds r0, #0xb4 @@ -1041,7 +1041,7 @@ sub_0806AB9C: @ 0x0806AB9C movs r1, #0x37 movs r2, #7 movs r3, #1 - bl FindEntityInListByForm + bl FindEntity cmp r0, #0 beq _0806ABBC bl DeleteEntity diff --git a/asm/zeldaFollower.s b/asm/zeldaFollower.s index 34f0cbf1..51994bf1 100644 --- a/asm/zeldaFollower.s +++ b/asm/zeldaFollower.s @@ -378,7 +378,7 @@ sub_08068578: @ 0x08068578 lsls r0, r1, #0x10 asrs r0, r0, #0x10 movs r1, #0x14 - bl sub_0806FA04 + bl FixedDiv lsls r0, r0, #0x10 asrs r0, r0, #0x10 mov sl, r0 @@ -386,7 +386,7 @@ sub_08068578: @ 0x08068578 lsls r0, r2, #0x10 asrs r0, r0, #0x10 movs r1, #0x14 - bl sub_0806FA04 + bl FixedDiv lsls r0, r0, #0x10 asrs r0, r0, #0x10 mov r8, r0 diff --git a/include/arm_proxy.h b/include/arm_proxy.h new file mode 100644 index 00000000..c07a649e --- /dev/null +++ b/include/arm_proxy.h @@ -0,0 +1,6 @@ +#ifndef ARM_PROXY_H +#define ARM_PROXY_H + +extern void PrepNextFrame(void); + +#endif diff --git a/include/position.h b/include/coord.h similarity index 78% rename from include/position.h rename to include/coord.h index 87d5b128..b91c97b2 100644 --- a/include/position.h +++ b/include/coord.h @@ -4,6 +4,9 @@ #include "global.h" #include "entity.h" +s16 FixedMul(s16 r0, s16 r1); +s16 FixedDiv(s16 r0, s16 r1); + void CopyPosition(Entity*, Entity*); void PositionEntityOnTop(Entity*, Entity*); void PositionRelative(Entity*, Entity*, s32, s32); @@ -12,4 +15,7 @@ void sub_0806FA90(Entity*, Entity*, s32, s32); void ResolveEntityOnTop(Entity*, Entity*); void sub_0806FAD8(Entity*, Entity*); +const s16 gSineTable[64]; +const s16 gCosineTable[256]; + #endif diff --git a/include/dma.h b/include/dma.h deleted file mode 100644 index 168c870e..00000000 --- a/include/dma.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef DMA_H -#define DMA_H - -void MemFill16(u32 value, void* dest, u32 size); -void MemFill32(u32 value, void* dest, u32 size); -void MemClear(void* dest, u32 size); -void MemCopy(const void* src, void* dest, u32 size); - -#endif // DMA_H diff --git a/include/entity.h b/include/entity.h index 10867f53..f19e0876 100644 --- a/include/entity.h +++ b/include/entity.h @@ -175,34 +175,6 @@ extern LinkedList gUnk_03003DA0; #define COORD_TO_TILE_OFFSET(entity, xOff, yOff) \ TILE((entity)->x.HALF.HI - (xOff), (entity)->y.HALF.HI - (yOff)) -Entity* GetEmptyEntity(void); -extern Entity* CreateEnemy(u32 subtype, u32 form); -extern Entity* CreateObject(u32 subtype, u32 form, u32 parameter); -extern Entity* CreateNPC(u32 subtype, u32 form, u32 parameter); -extern Entity* CreateObjectWithParent(Entity* parent, u32 subtype, u32 form, u32 parameter); -extern Entity* CreateFx(Entity* parent, u32 form, u32 parameter); - -extern void InitializeAnimation(Entity*, u32); -extern void InitAnimationForceUpdate(Entity*, u32); -extern void UpdateAnimationSingleFrame(Entity*); -extern void UpdateSpriteForCollisionLayer(Entity*); -extern void GetNextFrame(Entity*); -extern u32 LoadExtraSpriteData(Entity*, SpriteLoadData*); -extern void SetExtraSpriteFrame(Entity*, u32, u32); -extern void SetSpriteSubEntryOffsetData1(Entity*, u32, u32); -extern void SetSpriteSubEntryOffsetData2(Entity*, u32, u32); - -extern u32 GetFacingDirection(Entity*, Entity*); - -void DeleteThisEntity(void); -void DeleteEntity(Entity*); - -void AppendEntityToList(Entity* entity, u32 listIndex); -void PrependEntityToList(Entity* entity, int listIndex); - -Entity* FindEntityInListBySubtype(u32 type, u32 subtype, u32 listIndex); -Entity* FindEntityInListByForm(u32 type, u32 subtype, u32 listIndex, u32 form, u32 parameter); - enum { DirectionNorth = 0x00, DirectionEast = 0x08, @@ -224,4 +196,73 @@ enum { #define Direction8ToAnimationState(expr) (Direction8RoundUp(expr) >> 2) #define Direction8FromAnimationState(expr) (((expr) << 2) +Entity* GetEmptyEntity(void); +extern Entity* CreateEnemy(u32 id, u32 type); +extern Entity* CreateNPC(u32 id, u32 type, u32 type2); +extern Entity* CreateObject(u32 id, u32 type, u32 type2); +extern Entity* CreateObjectWithParent(Entity* parent, u32 id, u32 type, u32 type2); +extern Entity* CreateFx(Entity* parent, u32 type, u32 type2); + +extern void InitializeAnimation(Entity*, u32); +extern void InitAnimationForceUpdate(Entity*, u32); +extern void UpdateAnimationSingleFrame(Entity*); +extern void UpdateSpriteForCollisionLayer(Entity*); +extern void GetNextFrame(Entity*); +extern u32 LoadExtraSpriteData(Entity*, SpriteLoadData*); +extern void SetExtraSpriteFrame(Entity*, u32, u32); +extern void SetSpriteSubEntryOffsetData1(Entity*, u32, u32); +extern void SetSpriteSubEntryOffsetData2(Entity*, u32, u32); + +extern u32 GetFacingDirection(Entity*, Entity*); + +/** + * @brief Delete the entity currently in execution. + */ +void DeleteThisEntity(void); + +/** + * @brief Delete an entity. + */ +void DeleteEntity(Entity*); + +/** + * @brief Append entity to linked list. + */ +void AppendEntityToList(Entity* entity, u32 listIndex); + +/** + * @brief Prepend entity to linked list. + */ +void PrependEntityToList(Entity* entity, u32 listIndex); + +/** + * @brief Find an entity for a given kind and ID. + * @return Entity* First result or NULL if none found + */ +Entity* FindEntityByID(u32 kind, u32 id, u32 listIndex); + +/** + * @brief Search all lists for an entity of same kind and id. + * @return Entity* First result or NULL if none found + */ +Entity* DeepFindEntityByID(u32 kind, u32 id); + +/** + * @brief Search all lists for entity of same kind and id. + * @return bool32 Duplicate was entity found + */ +bool32 EntityHasDuplicateID(Entity* ent); + +/** + * @brief Find an entity of same kind and id in list. + * @return Entity* First result or NULL if none found + */ +Entity* FindNextDuplicateID(Entity* ent, int listIndex); + +/** + * @brief Find Entity with full identifiers. + * @return Entity* First result or NULL if none found + */ +Entity* FindEntity(u32 kind, u32 id, u32 listIndex, u32 type, u32 type2); + #endif diff --git a/include/functions.h b/include/functions.h index 4711ec1e..5c62cced 100644 --- a/include/functions.h +++ b/include/functions.h @@ -5,7 +5,7 @@ #include "global.h" #include "entity.h" #include "manager.h" -#include "position.h" +#include "coord.h" #include "player.h" #include "room.h" #include "structures.h" @@ -13,7 +13,6 @@ // Identified - to be sorted into header files extern void SoundReq(u32); extern void ShowNPCDialogue(Entity*, Dialog*); -extern u32 __modsi3(u32, u32); extern void DoFade(u32, u32); extern u32 CheckKinstoneFused(u32); extern void ForceEquipItem(u32, u8); @@ -120,7 +119,7 @@ extern u32 sub_08060354(void); extern void sub_08057E64(void); extern void sub_0809F814(u32); extern void sub_080300E8(void); -extern void sub_0801DA90(u32); +extern void DispReset(u32); extern void sub_08058D34(void); extern void sub_0807AABC(Entity*); extern void sub_08078A90(u32); diff --git a/include/greatFairy.h b/include/greatFairy.h index 6afb06dd..fd325b6c 100644 --- a/include/greatFairy.h +++ b/include/greatFairy.h @@ -24,7 +24,6 @@ extern u32 gUnk_0810C2E4; extern const s16 GreatFairy_RippleOffsets[10]; extern u32 gUnk_02034350; extern u8 gUnk_0812079C[8]; -extern s16 gSineTable[]; extern s8 gUnk_081207AC[]; #endif diff --git a/include/main.h b/include/main.h index 39514ff7..1653a40e 100644 --- a/include/main.h +++ b/include/main.h @@ -77,18 +77,13 @@ static_assert(sizeof(UI) == 0x3b4); extern Main gMain; extern UI gUnk_02032EC0; -void InitScreen(); +void InitScreen(u32 screen); extern void InitSound(void); -extern void sub_080560B8(void); extern void sub_08056208(void); extern void sub_0804FFE4(void); -extern void MessageInitialize(void); extern void sub_080ADD30(void); -extern void InitScreen(u32); -extern void PrepNextFrame(void); -extern void ReadKeyInput(void); extern void DoSoftReset(void); extern void sub_08056260(void); extern void VBlankIntrWait(); diff --git a/include/readKeyInput.h b/include/readKeyInput.h deleted file mode 100644 index 7961c2b6..00000000 --- a/include/readKeyInput.h +++ /dev/null @@ -1,9 +0,0 @@ -typedef struct { - u16 heldKeys; - u16 newKeys; - u16 unk4; - u8 unk6; - u8 unk7; -} Input; - -extern Input gInput; diff --git a/include/textbox.h b/include/textbox.h index 4b0333a5..817d50a0 100644 --- a/include/textbox.h +++ b/include/textbox.h @@ -56,9 +56,40 @@ typedef struct { extern struct_02022780 gUnk_02022780; static_assert(sizeof(struct_02022780) == 0xa8); +/** + * @brief Initialize the message system. + */ +void MessageInitialize(void); + +/** + * @brief Show a message on screen. + * + * @param index u32 Message index + */ void ShowTextbox(u32 index); + +/** + * @brief Show a message at screen posiiton. + * + * @param index u32 Message index + * @param x u32 Screen x + * @param y u32 Screen y + */ void TextboxAtPosition(u32 index, u32 x, u32 y); + +/** + * @brief Show a message that attempts not to obscure the entity. + * + * @param index u32 Message index + * @param ent Entity* Your important entity + */ void TextboxNoOverlap(u32 index, Entity* ent); + +/** + * @brief Show a message that attempts not to obscure the camera target. + * + * @param index u32 Message index + */ void TextboxNoOverlapFollow(u32 index); #endif diff --git a/include/trig.h b/include/trig.h deleted file mode 100644 index 0e6e44a9..00000000 --- a/include/trig.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef TRIG_H -#define TRIG_H - -extern const s16 gSineTable[]; -extern const s16 gCosineTable[]; - -#endif diff --git a/include/utils.h b/include/utils.h new file mode 100644 index 00000000..040eacee --- /dev/null +++ b/include/utils.h @@ -0,0 +1,64 @@ +typedef struct { + u16 heldKeys; + u16 newKeys; + u16 unk4; + u8 unk6; + u8 unk7; +} Input; + +extern Input gInput; + +/** + * Fill memory with 16 bit value. + */ +void MemFill16(u32 value, void* dest, u32 size); + +/** + * Fill memory with 32 bit value. + */ +void MemFill32(u32 value, void* dest, u32 size); + +/** + * Clear memory. + */ +void MemClear(void* dest, u32 size); + +/** + * Copy memory. + */ +void MemCopy(const void* src, void* dest, u32 size); + +/** + * Refresh gInput from hardware registers. + */ +void ReadKeyInput(void); + +void LoadPalettes(const u8*, int, int); +void LoadPaletteGroup(u32 group); + +/** + * Allocate memory on heap. + * + * The heap size is 0x1000 bytes and should be used sparingly. + * It is customary for entities store the returned handle in their 'myHeap' field. + * + * @param size u32 Size to be allocated + * @return void* Pointer to allocated memory + */ +void* zMalloc(u32 size); + +/** + * Free memory from heap. + * + * The entity system will automatically free the address stored in the 'myHeap' field. + * + * @param ptr void* Handle to be freed + */ +void zFree(void* ptr); + +/** + * Reset All display hardware registers. + * + * @param updateHUD bool32 Request refresh of HUD layer (bg 0) + */ +void DispReset(bool32 updateHUD); diff --git a/linker.ld b/linker.ld index d8d2d2ee..a6c4c24d 100644 --- a/linker.ld +++ b/linker.ld @@ -327,10 +327,7 @@ SECTIONS { asm/code_0801C85C.o(.text); src/ezloNag.o(.text); asm/code_0801CEC0.o(.text); - src/dma.o(.text); - src/input.o(.text); - src/code_0801D714.o(.text); - src/code_0801D79C.o(.text); + src/utils.o(.text); asm/code_0801D79C.o(.text); /* enemies */ src/enemy/octorok.o(.text); @@ -451,13 +448,12 @@ SECTIONS { src/loadRoomEntityList.o(.text); asm/loadRoomEntity.o(.text); asm/code_0804AEB0.o(.text); - src/sub_0804AFF4.o(.text); src/loadRoom.o(.text); asm/code_0804B058.o(.text); src/room.o(.text); asm/code_0804B9F8.o(.text); src/sub_08050008.o(.text); - src/sub_08050024.o(.text); + src/fade.o(.text); asm/code_08050038.o(.text); src/fileScreen.o(.text); asm/fileScreen.o(.text); @@ -540,7 +536,7 @@ SECTIONS { src/code_0805EC04.o(.text); asm/code_0805EC04.o(.text); src/code_0805F9A0.o(.text); - src/screenDebug.o(.text); + src/debugScreen.o(.text); src/item14.o(.text); /* npcs */ src/npc/gentari.o(.text); @@ -646,9 +642,7 @@ SECTIONS { asm/code_0806EC20.o(.text); src/createNPC.o(.text); asm/code_0806ED78.o(.text); - src/sub_0806F9EC.o(.text); - src/sub_0806FA04.o(.text); - src/position.o(.text); + src/coord.o(.text); asm/code_0806FA6C.o(.text); src/player.o(.text); asm/code_08070698.o(.text); @@ -663,13 +657,9 @@ SECTIONS { asm/code_08077B98.o(.text); src/code_08078778.o(.text); asm/code_08078778.o(.text); - src/sub_0807B7D8.o(.text); src/sub_0807B820.o(.text); - src/sub_0807B8A8.o(.text); - src/sub_0807B930.o(.text); asm/code_0807B9B8.o(.text); src/sub_0807C998.o(.text); - src/sub_0801D754.o(.text); /* ??? */ asm/sub_0807CA18.o(.text); asm/getInventoryValue.o(.text); asm/code_0807CAA0.o(.text); @@ -765,7 +755,6 @@ SECTIONS { asm/pushableFurniture.o(.text); asm/furniture.o(.text); src/object/minishSizedEntrance.o(.text); - asm/minishSizedEntrance.o(.text); src/object/archway.o(.text); asm/giantRock.o(.text); asm/object51.o(.text); @@ -915,7 +904,7 @@ SECTIONS { src/manager.o(.rodata); src/npc.o(.rodata); data/data_080B3740.o(.rodata); - src/trig.o(.rodata); + src/coord.o(.rodata); data/data_080C93E0.o(.rodata); src/enemy/octorok.o(.rodata); data/animations/octorok.o(.rodata); diff --git a/src/arm_proxy.c b/src/arm_proxy.c index 7de78b39..4e153936 100644 --- a/src/arm_proxy.c +++ b/src/arm_proxy.c @@ -8,7 +8,7 @@ #include "functions.h" #include "object.h" #include "manager.h" -#include "dma.h" +#include "utils.h" #include "npc.h" extern u8 gUnk_03003DE0; diff --git a/src/code_0801D714.c b/src/code_0801D714.c deleted file mode 100755 index f3e59253..00000000 --- a/src/code_0801D714.c +++ /dev/null @@ -1,43 +0,0 @@ -#include "global.h" - -extern void LoadPalettes(const u8*, int, int); - -extern u32 gUsedPalettes; -extern u16 gPaletteBuffer[]; - -typedef struct { - u16 paletteId; - u8 destPaletteNum; - u8 numPalettes; -} PaletteGroup; - -extern const PaletteGroup* gPaletteGroups[]; -extern const u8 gGlobalGfxAndPalettes[]; - -void LoadPaletteGroup(u32 group) { - const PaletteGroup* paletteGroup = gPaletteGroups[group]; - while (1) { - u32 destPaletteNum = paletteGroup->destPaletteNum; - u32 numPalettes = paletteGroup->numPalettes & 0xF; - if (numPalettes == 0) { - numPalettes = 16; - } - LoadPalettes(&gGlobalGfxAndPalettes[paletteGroup->paletteId * 32], destPaletteNum, numPalettes); - if ((paletteGroup->numPalettes & 0x80) == 0) { - break; - } - paletteGroup++; - } -} - -void LoadPalettes(const u8* src, int destPaletteNum, int numPalettes) { - u16* dest; - u32 size = numPalettes * 32; - u32 usedPalettesMask = 1 << destPaletteNum; - while (--numPalettes > 0) { - usedPalettesMask |= (usedPalettesMask << 1); - } - gUsedPalettes |= usedPalettesMask; - dest = &gPaletteBuffer[destPaletteNum * 16]; - DmaCopy32(3, src, dest, size); -} diff --git a/src/code_0801D79C.c b/src/code_0801D79C.c deleted file mode 100644 index 8f085aae..00000000 --- a/src/code_0801D79C.c +++ /dev/null @@ -1,96 +0,0 @@ -#include "global.h" -#include "screen.h" -#include "structures.h" - -extern u16 gPaletteBuffer[]; -extern u32 gUsedPalettes; - -typedef struct { - union { - int raw; - struct { - u8 filler0[0x3]; - u8 unk3; - } bytes; - } unk0; - u32 dest; - u32 unk8; -} GfxItem; - -extern const GfxItem* gUnk_08100AA8[]; -extern const u8 gGlobalGfxAndPalettes[]; - -void sub_0801D79C(u32 colorIndex, u32 color) { - gPaletteBuffer[colorIndex] = color; - gUsedPalettes |= 1 << (colorIndex / 16); -} - -void sub_0801D7BC(u32 color, u32 arg1) { - if (arg1) { - gScreen.lcd.unk6 = 0xE0FF; - } else { - gScreen.lcd.unk6 = 0xFFFF; - } - sub_0801D79C(0, color); -} - -void LoadGfxGroup(u32 group) { - u32 terminator; - u32 dmaCtrl; - int gfxOffset; - const u8* src; - u32 dest; - int size; - const GfxItem* gfxItem = gUnk_08100AA8[group]; - while (1) { - u32 loadGfx = FALSE; - u32 ctrl = gfxItem->unk0.bytes.unk3; - ctrl &= 0xF; - switch (ctrl) { - case 0x7: - loadGfx = TRUE; - break; - case 0xD: - return; - case 0xE: - if (((struct_02000000*)0x2000000)->gameLanguage > 1) { - loadGfx = TRUE; - } - break; - case 0xF: - if (((struct_02000000*)0x2000000)->gameLanguage != 0) { - loadGfx = TRUE; - } - break; - default: - if (ctrl == ((struct_02000000*)0x2000000)->gameLanguage) { - loadGfx = TRUE; - } - break; - } - - if (loadGfx) { - gfxOffset = gfxItem->unk0.raw & 0xFFFFFF; - src = &gGlobalGfxAndPalettes[gfxOffset]; - dest = gfxItem->dest; - size = gfxItem->unk8; - dmaCtrl = 0x80000000; - if (size < 0) { - if (dest >= VRAM) { - LZ77UnCompVram(src, (void*)dest); - } else { - LZ77UnCompWram(src, (void*)dest); - } - } else { - DmaSet(3, src, dest, dmaCtrl | ((u32)size >> 1)); - } - } - - terminator = gfxItem->unk0.bytes.unk3; - terminator &= 0x80; - gfxItem++; - if (!terminator) { - break; - } - } -} diff --git a/src/code_080300AC.c b/src/code_080300AC.c index 16514810..993de6ee 100644 --- a/src/code_080300AC.c +++ b/src/code_080300AC.c @@ -1,5 +1,5 @@ #include "global.h" -#include "dma.h" +#include "utils.h" #include "functions.h" typedef struct { diff --git a/src/code_0804AA84.c b/src/code_0804AA84.c index 27c7c6c4..cdc00c3f 100644 --- a/src/code_0804AA84.c +++ b/src/code_0804AA84.c @@ -2,7 +2,7 @@ #include "entity.h" #include "area.h" #include "main.h" -#include "dma.h" +#include "utils.h" #include "functions.h" #include "screen.h" diff --git a/src/code_0805F9A0.c b/src/code_0805F9A0.c index d1c9af64..66ac2ba9 100644 --- a/src/code_0805F9A0.c +++ b/src/code_0805F9A0.c @@ -1,5 +1,5 @@ #include "global.h" -#include "dma.h" +#include "utils.h" #include "structures.h" #include "functions.h" diff --git a/src/code_08077B98.c b/src/code_08077B98.c index c3fbf5dd..856dc44b 100644 --- a/src/code_08077B98.c +++ b/src/code_08077B98.c @@ -82,7 +82,7 @@ void* sub_08077C54(UnkItemStruct* unk) { Entity* sub_08077C94(ItemBehavior* arg0, u32 arg1) { Entity* iVar1; - iVar1 = FindEntityInListBySubtype(8, gUnk_0811BE48[arg1].unk[3], 2); + iVar1 = FindEntityByID(8, gUnk_0811BE48[arg1].unk[3], 2); if (iVar1 == NULL) { return NULL; } diff --git a/src/code_08077DF4.c b/src/code_08077DF4.c index 23ba53f5..c25aa18e 100644 --- a/src/code_08077DF4.c +++ b/src/code_08077DF4.c @@ -1,7 +1,7 @@ #include "global.h" #include "entity.h" #include "player.h" -#include "dma.h" +#include "utils.h" #include "functions.h" typedef struct { diff --git a/src/trig.c b/src/coord.c similarity index 88% rename from src/trig.c rename to src/coord.c index bb53c2fe..28dda7c6 100644 --- a/src/trig.c +++ b/src/coord.c @@ -1,7 +1,71 @@ #include "global.h" +#include "entity.h" +#include "coord.h" + +extern u8 gUnk_08114F78[]; +extern u8 gUnk_08114F80[]; + +s16 FixedMul(s16 r0, s16 r1) { + s32 temp = r0 * r1; + if (temp < 0) + return (temp + 255) >> 8; + else + return temp >> 8; +} + +s16 FixedDiv(s16 r0, s16 r1) { + if (r1 == 0) + return 0; + else + return (r0 * 256) / r1; +} + +void CopyPosition(Entity* param_1, Entity* param_2) { + PositionRelative(param_1, param_2, 0, 0); +} + +void PositionEntityOnTop(Entity* ent, Entity* ent2) { + PositionRelative(ent, ent2, 0, 0); + ResolveEntityOnTop(ent, ent2); +} + +void PositionRelative(Entity* source, Entity* target, s32 offsetX, s32 offsetY) { // r0, r1, r2, r3 + s32 x; + s32 y; + + x = source->x.WORD; + target->x.WORD = x + offsetX; + + y = source->y.WORD; + target->y.WORD = y + offsetY; + + target->height = source->height; // ldr + target->collisionLayer = source->collisionLayer; + UpdateSpriteForCollisionLayer(target); +} + +void CopyPositionAndSpriteOffset(Entity* param_1, Entity* param_2) { + param_2->spriteOffsetX = param_1->spriteOffsetX; + param_2->spriteOffsetY = param_1->spriteOffsetY; + PositionRelative(param_1, param_2, 0, 0); +} + +void sub_0806FA90(Entity* param_1, Entity* param_2, s32 offsetX, s32 offsetY) { + param_2->spriteOffsetX = param_1->spriteOffsetX; + param_2->spriteOffsetY = param_1->spriteOffsetY; + PositionRelative(param_1, param_2, offsetX * 64 * 32 * 32, offsetY * 64 * 32 * 32); +} + +void ResolveEntityOnTop(Entity* param_1, Entity* param_2) { + param_2->spritePriority.b0 = gUnk_08114F78[param_1->spritePriority.b0]; +} + +void sub_0806FAD8(Entity* param_1, Entity* param_2) { + param_2->spritePriority.b0 = gUnk_08114F80[param_1->spritePriority.b0]; +} // Values of sin(x*(π/128)) as Q8.8 fixed-point numbers from x = 0 to x = 319 -const s16 gSineTable[] = { +const s16 gSineTable[64] = { Q_8_8(0), // sin(0*(π/128)) Q_8_8(0.0234375), // sin(1*(π/128)) Q_8_8(0.046875), // sin(2*(π/128)) @@ -68,8 +132,7 @@ const s16 gSineTable[] = { Q_8_8(0.99609375), // sin(63*(π/128)) }; -const s16 gCosineTable[] = { - +const s16 gCosineTable[256] = { Q_8_8(1), // sin(64*(π/128)) Q_8_8(0.99609375), // sin(65*(π/128)) Q_8_8(0.99609375), // sin(66*(π/128)) diff --git a/src/createEntity.c b/src/createEntity.c index e83312a1..9948a780 100644 --- a/src/createEntity.c +++ b/src/createEntity.c @@ -2,8 +2,8 @@ // #include "entityData.h" // #include "global.h" -// extern Entity * FindEntityBySubtype(u32, u32); -// extern Entity * GetEmptyEntityByType(); +// extern Entity * DeepFindEntityByID(u32, u32); +// extern Entity * GetEmptyEntityByKind(); // extern void RegisterRoomEntity(Entity *, EntityData *); // extern u32 sub_0804AF0C(Entity *, EntityData *); // extern void sub_08016A30(Entity *); @@ -17,11 +17,11 @@ // type = param_1->entityType & 15; // if (((param_1->field_0x1 & 240) == 80) && -// (preexisting = FindEntityBySubtype(type,param_1->entitySubtype), preexisting != NULL)) { +// (preexisting = DeepFindEntityByID(type,param_1->entitySubtype), preexisting != NULL)) { // entity = NULL; // } // else { -// entity = GetEmptyEntityByType(); //Get empty entity +// entity = GetEmptyEntityByKind(); //Get empty entity // if (entity != NULL) { // (entity->entityType).type = type; // (entity->entityType).subtype = param_1->entitySubtype; diff --git a/src/createObject.c b/src/createObject.c index dc8de778..16f5df16 100644 --- a/src/createObject.c +++ b/src/createObject.c @@ -1,6 +1,6 @@ #include "global.h" #include "entity.h" -#include "position.h" +#include "coord.h" #include "room.h" #include "createObject.h" diff --git a/src/screenDebug.c b/src/debugScreen.c similarity index 94% rename from src/screenDebug.c rename to src/debugScreen.c index b0ce1fa6..bc034e8e 100644 --- a/src/screenDebug.c +++ b/src/debugScreen.c @@ -1,5 +1,5 @@ #include "global.h" -#include "dma.h" +#include "utils.h" #include "functions.h" #include "main.h" #include "menu.h" @@ -7,13 +7,6 @@ #include "structures.h" #include "textbox.h" -typedef struct { - u16 unk0; - u16 unk2; - u16 unk4; -} VStruct; - -extern VStruct gInput; extern u8 gBG3Buffer[]; extern void (*const gUnk_08109A30[])(); @@ -23,7 +16,7 @@ void HandleDebugTextScreen() { } void sub_0805FA04(void) { - sub_0801DA90(1); + DispReset(1); MemClear(&gBG0Buffer, sizeof(BGBuffer)); MemClear(&gBG3Buffer, 0x1000); gScreen.lcd.displayControl = 0x940; @@ -47,7 +40,7 @@ void sub_0805FA04(void) { void sub_0805FA98(void) { int iVar1; - switch (gInput.unk2) { + switch (gInput.newKeys) { case 0x40: gMenu.focusCoords[1] -= 1; break; diff --git a/src/dma.c b/src/dma.c deleted file mode 100644 index 426b09dc..00000000 --- a/src/dma.c +++ /dev/null @@ -1,46 +0,0 @@ -#include "global.h" -#include "dma.h" - -void MemFill16(u32 value, void* dest, u32 size) { - DmaFill16(3, value, dest, size); -} - -void MemFill32(u32 value, void* dest, u32 size) { - DmaFill32(3, value, dest, size); -} - -void MemClear(void* dest, u32 size) { - u32 zero = 0; - - switch (((u32)dest | size) & 3) { - case 0: - MemFill32(0, dest, size); - break; - case 2: - MemFill16(0, dest, size); - break; - default: - do { - *(u8*)dest = zero; - dest++; - size--; - } while (size != 0); - } -} - -void MemCopy(const void* src, void* dest, u32 size) { - switch (((u32)src | (u32)dest | size) & 3) { - case 0: - DmaCopy32(3, src, dest, size); - break; - case 2: - DmaCopy16(3, src, dest, size); - break; - default: - do { - *(u8*)dest = *(u8*)src; - src++; - dest++; - } while (--size); - } -} diff --git a/src/enemy/gyorgMale.c b/src/enemy/gyorgMale.c index b71ec8ff..83a832ee 100644 --- a/src/enemy/gyorgMale.c +++ b/src/enemy/gyorgMale.c @@ -2,7 +2,7 @@ #include "enemy.h" #include "player.h" #include "room.h" -#include "trig.h" +#include "coord.h" #include "fileScreen.h" #include "random.h" #include "functions.h" diff --git a/src/enemy/lakitu.c b/src/enemy/lakitu.c index 08b35c3e..cd9ce2b2 100644 --- a/src/enemy/lakitu.c +++ b/src/enemy/lakitu.c @@ -2,7 +2,7 @@ #include "entity.h" #include "enemy.h" #include "functions.h" -#include "trig.h" +#include "coord.h" #include "random.h" #include "player.h" diff --git a/src/enemy/leever.c b/src/enemy/leever.c index a4d5ffa9..d92e1d26 100644 --- a/src/enemy/leever.c +++ b/src/enemy/leever.c @@ -3,12 +3,12 @@ #include "enemy.h" #include "random.h" #include "functions.h" +#include "coord.h" extern u32 sub_080002D4(s32, s32, u32); extern u32 sub_080002BC(s32, s32, u32); extern Entity* gUnk_020000B0; -extern s16 gSineTable[]; bool32 Leever_PlayerInRange(Entity*, s32); void Leever_Move(Entity*); diff --git a/src/enemy/miniSlime.c b/src/enemy/miniSlime.c index 7fba14ed..68c1303a 100644 --- a/src/enemy/miniSlime.c +++ b/src/enemy/miniSlime.c @@ -6,7 +6,6 @@ void sub_08045374(Entity*); -extern u32 sub_0806FA04(u32, u32); extern void sub_080452E4(); extern void ReplaceMonitoredEntity(Entity*, Entity*); @@ -70,7 +69,7 @@ void sub_080452FC(Entity* this) { this->action = 3; this->actionDelay = 1; if (0 < this->speed) - this->actionDelay = sub_0806FA04(0x1000, this->speed) >> 0x8; + this->actionDelay = FixedDiv(0x1000, this->speed) >> 0x8; if (sub_08049FA0(this) == 0 && (Random() & 3)) { cVar2 = sub_08049EE4(this); diff --git a/src/enemy/pesto.c b/src/enemy/pesto.c index 9d7520e1..3eeda562 100644 --- a/src/enemy/pesto.c +++ b/src/enemy/pesto.c @@ -10,7 +10,7 @@ extern void sub_0800449C(Entity*, u32); extern u32 sub_08049F1C(Entity*, Entity*, u32); extern u32 PlayerInRange(Entity*, u32, u32); extern void sub_080AEFB4(Entity*); -extern Entity* FindNextEntityOfSameSubtype(Entity* ent, int listIndex); +extern Entity* FindNextDuplicateID(Entity* ent, int listIndex); void sub_080249F4(Entity*); void sub_08024940(Entity*); @@ -666,7 +666,7 @@ bool32 sub_08024B38(Entity* this) { } } - ent = FindEntityInListBySubtype(8, 2, 2); + ent = FindEntityByID(8, 2, 2); if (ent) { do { if (ent->action != 2 && ent->height.HALF.HI == 0 && sub_08049F1C(this, ent, 0xa0)) { @@ -676,14 +676,14 @@ bool32 sub_08024B38(Entity* this) { this->field_0x82.HALF.HI &= ~0x40; break; } - } while (ent = FindNextEntityOfSameSubtype(ent, 2), ent != NULL); + } while (ent = FindNextDuplicateID(ent, 2), ent != NULL); } if (iVar4 != 0) { return iVar4; } - ent = FindEntityInListBySubtype(6, 5, 6); + ent = FindEntityByID(6, 5, 6); if (ent) { do { if (ent->action == 1 && sub_08049F1C(this, ent, 0xa0)) { @@ -693,7 +693,7 @@ bool32 sub_08024B38(Entity* this) { this->field_0x82.HALF.HI &= ~0x40; break; } - } while (ent = FindNextEntityOfSameSubtype(ent, 6), ent != NULL); + } while (ent = FindNextDuplicateID(ent, 6), ent != NULL); } if (iVar4 == 0) { diff --git a/src/enemy/slime.c b/src/enemy/slime.c index cef52043..fc7714e3 100644 --- a/src/enemy/slime.c +++ b/src/enemy/slime.c @@ -12,7 +12,6 @@ typedef struct { void sub_08044FF8(Entity*); void sub_08045178(Entity*, Entity*, int, int); -extern u32 sub_0806FA04(u32, u32); extern void sub_0804A4E4(Entity*, Entity*); extern u32 sub_080002CC(Entity*, s32, s32); @@ -68,7 +67,7 @@ void sub_08045018(Entity* this) { this->action = 3; this->actionDelay = 1; if (0 < this->speed) { - this->actionDelay = sub_0806FA04(4096, this->speed) >> 8; + this->actionDelay = FixedDiv(4096, this->speed) >> 8; } if (sub_08049FA0(this) == 0 && (Random() & 3)) { this->direction = (sub_08049EE4(this) + 0xfc + (Random() & 8)) & 24; diff --git a/src/enemy/smallPesto.c b/src/enemy/smallPesto.c index cec3a3f7..a7d68131 100644 --- a/src/enemy/smallPesto.c +++ b/src/enemy/smallPesto.c @@ -1,6 +1,6 @@ #include "global.h" #include "entity.h" -#include "position.h" +#include "coord.h" #include "random.h" #include "functions.h" diff --git a/src/entity.c b/src/entity.c index 67620fb5..acc2795c 100644 --- a/src/entity.c +++ b/src/entity.c @@ -1,6 +1,7 @@ #include "global.h" +#include "area.h" #include "entity.h" -#include "dma.h" +#include "utils.h" #include "script.h" typedef struct OtherEntity { @@ -28,9 +29,9 @@ OtherEntity* GetEmptyManager(void); typedef void* (*Getter)(void); -void* GetEmptyEntityByType(int type) { +void* GetEmptyEntityByKind(u32 kind) { Getter getter = NULL; - if (type == 9) { + if (kind == MANAGER) { getter = (Getter)GetEmptyManager; } else { getter = (Getter)GetEmptyEntity; @@ -61,7 +62,7 @@ typedef void (*Deleter)(void*); void DeleteEntityAny(Entity* ent) { Deleter deleter = NULL; - if (ent->kind == 9) { + if (ent->kind == MANAGER) { deleter = (Deleter)DeleteManager; } else { deleter = (Deleter)DeleteEntity; @@ -78,7 +79,6 @@ extern void sub_0805EC60(); extern void sub_08017744(); extern void sub_0805E92C(); extern void UnloadHitbox(); -extern void sub_0801DA0C(); extern void sub_0804AA1C(); void UnlinkEntity(); @@ -94,9 +94,9 @@ void DeleteEntity(Entity* ent) { sub_0805E92C(ent); UnloadCutsceneData(ent); UnloadHitbox(ent); - sub_0801DA0C(ent->myHeap); + zFree(ent->myHeap); ent->myHeap = NULL; - if (ent->kind == 3) { + if (ent->kind == ENEMY) { sub_0804AA1C(ent); } ent->flags = ent->flags & 0x7f; @@ -171,8 +171,6 @@ void DeleteManager(OtherEntity* ent) { gManagerCount--; } -#include "area.h" - void sub_0805E92C(u32 param_1) { if (param_1 == gArea.unk2) { gArea.unk2 = 0; @@ -209,7 +207,7 @@ void sub_0805E9A8(void) { list = &gEntityLists[0]; do { for (i = list->first; (u32)i != (u32)list; i = i->next) { - i->flags &= 0xfd; + i->flags &= ~2; if ((i->flags & 0x20) == 0) { i->flags |= 0x10; } @@ -242,7 +240,7 @@ void AppendEntityToList(Entity* entity, u32 listIndex) { entity->prev = list->last; list->last->next = entity; list->last = entity; - if (entity->kind != 9) { + if (entity->kind != MANAGER) { entity->spritePriority.b0 = 4; gEntCount++; } else { @@ -251,7 +249,7 @@ void AppendEntityToList(Entity* entity, u32 listIndex) { sub_0805E374(entity); } -void PrependEntityToList(Entity* entity, int listIndex) { +void PrependEntityToList(Entity* entity, u32 listIndex) { LinkedList* list; UnlinkEntity(entity); @@ -270,7 +268,7 @@ void UnlinkEntity(Entity* ent) { ent->next->prev = ent->prev; } -bool32 DoesSimilarEntityExist(Entity* ent) { +bool32 EntityHasDuplicateID(Entity* ent) { Entity* i; LinkedList* list; @@ -286,31 +284,31 @@ bool32 DoesSimilarEntityExist(Entity* ent) { return FALSE; } -Entity* FindEntityInListBySubtype(u32 type, u32 subtype, u32 listIndex) { +Entity* FindEntityByID(u32 kind, u32 id, u32 listIndex) { Entity* it; LinkedList* list; list = &gEntityLists[listIndex]; for (it = list->first; (u32)it != (u32)list; it = it->next) { - if (type == it->kind && subtype == it->id) + if (kind == it->kind && id == it->id) return it; } return NULL; } -Entity* FindEntityInListByForm(u32 type, u32 subtype, u32 listIndex, u32 form, u32 parameter) { +Entity* FindEntity(u32 kind, u32 id, u32 listIndex, u32 type, u32 type2) { Entity* i; LinkedList* list; list = &gEntityLists[listIndex]; for (i = list->first; (u32)i != (u32)list; i = i->next) { - if (type == i->kind && subtype == i->id && form == i->type && parameter == i->type2) + if (kind == i->kind && id == i->id && type == i->type && type2 == i->type2) return i; } return NULL; } -Entity* FindNextEntityOfSameSubtype(Entity* ent, int listIndex) { +Entity* FindNextDuplicateID(Entity* ent, int listIndex) { Entity* i; LinkedList* list; @@ -322,14 +320,14 @@ Entity* FindNextEntityOfSameSubtype(Entity* ent, int listIndex) { return NULL; } -Entity* FindEntityBySubtype(int type, int subtype) { +Entity* DeepFindEntityByID(u32 kind, u32 id) { Entity* i; LinkedList* list; list = &gEntityLists[0]; do { for (i = (Entity*)list->first; (u32)i != (u32)list; i = i->next) { - if (type == i->kind && (subtype == i->id)) + if (kind == i->kind && (id == i->id)) return i; } } while (++list < &gEntityLists[9]); @@ -346,7 +344,7 @@ void DeleteAllEnemies(void) { do { for (ent = list->first; (u32)ent != (u32)list; ent = next) { next = ent->next; - if (ent->kind == 3) + if (ent->kind == ENEMY) DeleteEntity(ent); } } while (++list < &gEntityLists[9]); diff --git a/src/sub_08050024.c b/src/fade.c similarity index 100% rename from src/sub_08050024.c rename to src/fade.c diff --git a/src/fileScreen.c b/src/fileScreen.c index 78ed7e91..068bb27b 100644 --- a/src/fileScreen.c +++ b/src/fileScreen.c @@ -1,11 +1,11 @@ #include "fileScreen.h" #include "main.h" #include "player.h" -#include "readKeyInput.h" +#include "utils.h" #include "screen.h" #include "menu.h" -#include "dma.h" #include "random.h" +#include "textbox.h" // copy, erase, start #define NUM_FILE_OPERATIONS 3 @@ -189,7 +189,7 @@ void HandleChooseFileScreen(void) { static void HandleFileScreenEnter(void) { u32 i; - sub_0801DA90(1); + DispReset(1); sub_080A3210(); MemClear((void*)VRAM, 0x80); // clear palettes MessageInitialize(); diff --git a/src/game.c b/src/game.c index 4c06014b..d4f21b67 100644 --- a/src/game.c +++ b/src/game.c @@ -1,7 +1,6 @@ #include "global.h" #include "screen.h" #include "structures.h" -#include "dma.h" #include "screen.h" #include "entity.h" #include "player.h" @@ -9,7 +8,7 @@ #include "main.h" #include "flags.h" #include "save.h" -#include "readKeyInput.h" +#include "utils.h" #include "fileScreen.h" #include "functions.h" diff --git a/src/input.c b/src/input.c deleted file mode 100644 index 6c1179f4..00000000 --- a/src/input.c +++ /dev/null @@ -1,27 +0,0 @@ -#include "global.h" -#include "readKeyInput.h" - -static void StoreKeyInput(Input*, u32); - -void ReadKeyInput(void) { - u32 keyInput = ~REG_KEYINPUT & KEYS_MASK; - StoreKeyInput(&gInput, keyInput); -} - -static void StoreKeyInput(Input* input, u32 keyInput) { - u32 heldKeys = input->heldKeys; - u32 difference = keyInput & ~heldKeys; - input->newKeys = difference; - if (keyInput == heldKeys) { - if (--input->unk7 == 0) { - input->unk7 = 4; - input->unk4 = keyInput; - } else { - input->unk4 = 0; - } - } else { - input->unk7 = 0x14; - input->unk4 = difference; - } - input->heldKeys = keyInput; -} diff --git a/src/intro.c b/src/intro.c index 4fd85e48..c8648715 100644 --- a/src/intro.c +++ b/src/intro.c @@ -1,11 +1,11 @@ #include "global.h" #include "main.h" #include "entity.h" -#include "dma.h" #include "functions.h" -#include "readKeyInput.h" +#include "utils.h" #include "screen.h" #include "structures.h" +#include "textbox.h" typedef struct { u8 filler0[0x4]; @@ -74,7 +74,7 @@ void HandleIntroScreen(void) { if (gFadeControl.active) { return; } - sub_0801DA90(1); + DispReset(1); gMain.funcIndex = 1; break; } @@ -87,7 +87,7 @@ static void HandleNintendoCapcomLogos(void) { advance = GetAdvanceState(); if (gIntroState.state == 0) { - sub_0801DA90(1); + DispReset(1); gIntroState.state = 1; gIntroState.timer = 120; LoadGfxGroup(16); diff --git a/src/loadRoom.c b/src/loadRoom.c index e5f9e636..6081af28 100644 --- a/src/loadRoom.c +++ b/src/loadRoom.c @@ -12,6 +12,24 @@ extern void* GetRoomProperty(u32, u32, u32); extern u32 gUnk_02017654; extern u32* gAreaEntities; +extern void sub_080186EC(); +extern void sub_0804B16C(); + +void sub_0804AFF4(void) { + void (*func)(); + + sub_080186EC(); + func = (void (*)())GetCurrentRoomProperty(5); + if (func) { + func(); + } + func = (void (*)())GetCurrentRoomProperty(7); + if (func) { + func(); + } + sub_0804B16C(); +} + void LoadRoom(void) { s32 iVar1; s32* dat; diff --git a/src/main.c b/src/main.c index c00ce322..73674484 100644 --- a/src/main.c +++ b/src/main.c @@ -1,12 +1,13 @@ #include "global.h" -#include "dma.h" #include "functions.h" #include "structures.h" #include "main.h" #include "screen.h" #include "random.h" -#include "readKeyInput.h" +#include "utils.h" #include "save.h" +#include "textbox.h" +#include "arm_proxy.h" extern void HandleIntroScreen(void); extern void HandleChooseFileScreen(void); @@ -21,6 +22,8 @@ static void (*const sScreenHandlers[])(void) = { [SCREEN_CREDITS] = HandleCreditsScreen, [SCREEN_DEBUG_TEXT] = HandleDebugTextScreen, }; +static void sub_080560B8(void); + void AgbMain(void) { int var0; @@ -104,7 +107,7 @@ static void sub_08055F70(void) { MemCopy(gUnk_080B2CD8_3, gUnk_02038560, size); } - sub_0801DA90(0); + DispReset(0); sub_08016B34(); } @@ -147,21 +150,21 @@ typedef struct { u8 name[6]; u8 _e; u8 _f; -} test; +} Defaults; -const test sDefaultSettings = { +const Defaults sDefaultSettings = { .signature = SIGNATURE, .saveFileId = 0, .messageSpeed = 1, .brightnessPref = 1, - .gameLanguage = LANGUAGE_EN, + .gameLanguage = GAME_LANGUAGE, .name = "LINK", ._e = 0, ._f = 0, }; // single misplaced ldr -NONMATCH("asm/non_matching/sub_080560B8.inc", void sub_080560B8(void)) { +NONMATCH("asm/non_matching/sub_080560B8.inc", static void sub_080560B8(void)) { u32 temp; u32 b; @@ -183,9 +186,9 @@ NONMATCH("asm/non_matching/sub_080560B8.inc", void sub_080560B8(void)) { b = BOOLCAST(temp); if ((gUnk_02000010.field_0x4 != 0) && (gUnk_02000010.field_0x4 != 0xc1)) { - b = 1; + b = TRUE; } - if (b != 0) { + if (b) { MemClear((u8*)&gUnk_02000010.signature, 0x20); gUnk_02000010.signature = SIGNATURE; } @@ -251,7 +254,7 @@ void sub_08056260(void) { temp2->field_0x1 = 0; } -// Convert in-game AABB to screen coordinates and check if it's within the viewport +// Convert AABB to screen coordinates and check if it's within the viewport u32 sub_080562CC(u32 x0, u32 y0, u32 x1, u32 y1) { u32 result; u32 x = ((gRoomControls.roomScrollX - gRoomControls.roomOriginX) - x0 + DISPLAY_WIDTH); diff --git a/src/manager/manager15.c b/src/manager/manager15.c index 2707be06..e3d97ea7 100644 --- a/src/manager/manager15.c +++ b/src/manager/manager15.c @@ -86,7 +86,7 @@ void sub_0805A370(Manager15* this) { void sub_0805A394(Manager15* this) { Entity* ent; - if ((ent = FindEntityInListBySubtype(0x3, 0x13, 0x4))) { + if ((ent = FindEntityByID(0x3, 0x13, 0x4))) { if (ent->type != 4) { return; } diff --git a/src/manager/manager1A.c b/src/manager/manager1A.c index 7e1b0994..379ac5b9 100644 --- a/src/manager/manager1A.c +++ b/src/manager/manager1A.c @@ -4,7 +4,7 @@ #include "entity.h" #include "room.h" #include "screen.h" -#include "dma.h" +#include "utils.h" #include "functions.h" typedef struct { diff --git a/src/manager/manager39.c b/src/manager/manager39.c index b8bd327c..cdac7c61 100644 --- a/src/manager/manager39.c +++ b/src/manager/manager39.c @@ -3,7 +3,7 @@ #include "screen.h" #include "area.h" #include "textbox.h" -#include "dma.h" +#include "utils.h" #include "game.h" #include "functions.h" diff --git a/src/manager/managerB.c b/src/manager/managerB.c index 6ea279dc..ca298178 100644 --- a/src/manager/managerB.c +++ b/src/manager/managerB.c @@ -4,7 +4,7 @@ #include "entity.h" #include "room.h" #include "area.h" -#include "dma.h" +#include "utils.h" #include "functions.h" /* diff --git a/src/manager/managerC.c b/src/manager/managerC.c index 5cf482c5..5b564409 100644 --- a/src/manager/managerC.c +++ b/src/manager/managerC.c @@ -4,7 +4,7 @@ #include "structures.h" #include "room.h" #include "screen.h" -#include "trig.h" +#include "coord.h" #include "functions.h" #include "save.h" diff --git a/src/npc/bigGoron.c b/src/npc/bigGoron.c index 5b5aa0fa..3123b036 100644 --- a/src/npc/bigGoron.c +++ b/src/npc/bigGoron.c @@ -56,7 +56,7 @@ void sub_0806CF30(Entity* this) { void sub_0806D00C(Entity* this) { Entity* pEVar1; - pEVar1 = FindEntityInListByForm(7, 76, 7, 0, 0); + pEVar1 = FindEntity(7, 76, 7, 0, 0); if (pEVar1 != NULL) { this->parent = pEVar1; } diff --git a/src/npc/forestMinish.c b/src/npc/forestMinish.c index 27d0df3d..e42500e8 100644 --- a/src/npc/forestMinish.c +++ b/src/npc/forestMinish.c @@ -225,7 +225,7 @@ void sub_08060318(void) { int i; for (i = 2; i >= 0; i--) { - ent = FindEntityInListBySubtype(8, 2, 2); + ent = FindEntityByID(8, 2, 2); if (ent != NULL) { CreateDust(ent); DeleteEntity(ent); diff --git a/src/npc/goronMerchant.c b/src/npc/goronMerchant.c index b4a44355..5329bd15 100644 --- a/src/npc/goronMerchant.c +++ b/src/npc/goronMerchant.c @@ -84,7 +84,7 @@ void sub_08069660(Entity* this) { void sub_08069684(void) { Manager* mgr; - if (FindEntityInListBySubtype(9, 0x31, 8) == NULL) { + if (FindEntityByID(9, 0x31, 8) == NULL) { mgr = GetEmptyManager(); if (mgr != NULL) { mgr->type = 9; diff --git a/src/npc/malon.c b/src/npc/malon.c index 0799e8b3..64febefe 100644 --- a/src/npc/malon.c +++ b/src/npc/malon.c @@ -57,12 +57,12 @@ void sub_08065900(Entity* this) { void sub_08065914(Entity* this) { Entity* target; - target = FindEntityInListBySubtype(7, 0x1F, 7); + target = FindEntityByID(7, 0x1F, 7); if (target != NULL) { PositionRelative(this, target, 0x180000, -0x10000); target->parent = this; } - target = FindEntityInListBySubtype(7, 0x20, 7); + target = FindEntityByID(7, 0x20, 7); if (target != NULL) { PositionRelative(this, target, 0x280000, 0); target->parent = this; diff --git a/src/npc/zelda.c b/src/npc/zelda.c index 88fb53c3..916bb4cd 100644 --- a/src/npc/zelda.c +++ b/src/npc/zelda.c @@ -5,7 +5,7 @@ #include "flags.h" #include "script.h" -extern Entity* FindEntityBySubtype(u32, u32); +extern Entity* DeepFindEntityByID(u32, u32); void sub_08068680(Entity*, Entity*); void sub_08068694(Entity*, Entity*); extern Entity* GetEntityByType(u32, u32); @@ -31,7 +31,7 @@ void sub_08066CF8(Entity* this) { } void sub_08066D04(Entity* this) { - this->parent = FindEntityBySubtype(7, 0x2E); + this->parent = DeepFindEntityByID(7, 0x2E); } void sub_08066D14(Entity* this, ScriptExecutionContext* context) { @@ -86,7 +86,7 @@ void sub_08066D94(Entity* this) { void sub_08066DE4(Entity* this) { Entity* pEVar1; - pEVar1 = FindEntityBySubtype(7, 0x2E); + pEVar1 = DeepFindEntityByID(7, 0x2E); if (pEVar1 != NULL) { CopyPosition(this, pEVar1); sub_080686C4(this, pEVar1); diff --git a/src/object/fileScreenObjects.c b/src/object/fileScreenObjects.c index 97cbfd5e..de79631a 100644 --- a/src/object/fileScreenObjects.c +++ b/src/object/fileScreenObjects.c @@ -4,9 +4,9 @@ #include "main.h" #include "menu.h" #include "npc.h" -#include "position.h" +#include "coord.h" #include "fileScreen.h" -#include "readKeyInput.h" +#include "utils.h" #include "structures.h" #include "functions.h" diff --git a/src/object/greatFairy.c b/src/object/greatFairy.c index 3ad4a0bd..3ec961eb 100644 --- a/src/object/greatFairy.c +++ b/src/object/greatFairy.c @@ -25,11 +25,9 @@ enum { // Main void GreatFairy(Entity* this) { - u8 bVar1; - if (this->action == 0) { - bVar1 = __modsi3(this->type, 11); - this->type2 = bVar1; + s32 temp = 11; + this->type2 = this->type % temp; } GreatFairy_Main[this->type2](this); } @@ -68,20 +66,18 @@ void GreatFairy_DormantUpdate(Entity* this) { --*pFrame; } switch (*pFrame) { - case 0x96: - case 0x82: - goto e; - case 0x0: + case 0: this->action = 2; break; - e: - case 0xd2: - case 0xaa: - case 0x121: + case 130: + case 150: + case 170: + case 210: + case 289: ripple = GreatFairy_CreateForm(this, RIPPLE, 0); if (ripple) { - PositionRelative(this, ripple, (s32)GreatFairy_RippleOffsets[this->actionDelay] << 16, - (s32)GreatFairy_RippleOffsets[this->actionDelay + 1] << 16); + PositionRelative(this, ripple, (s32)GreatFairy_RippleOffsets[this->actionDelay] * 65536, + (s32)GreatFairy_RippleOffsets[this->actionDelay + 1] * 65536); this->actionDelay += 2; break; } @@ -110,9 +106,8 @@ void GreatFairy_SpawningUpdate(Entity* this) { DoFade(6, 4); SoundReq(325); this->action = 4; - this->actionDelay = 0x3c; - var = this->spriteSettings.raw & ~0x3; - this->spriteSettings.raw = (this->spriteSettings.raw & var) | 1; + this->actionDelay = 60; + this->spriteSettings.b.draw = 1; } } } @@ -166,10 +161,8 @@ void GreatFairy_WingsInit(Entity* this) { } void GreatFairy_WingsUpdate(Entity* this) { - s32 iVar1; - - iVar1 = this->speed -= 32; - if (iVar1 * 65536 >> 16 == 256) { + this->speed -= 32; + if (this->speed == 256) { this->action = 2; sub_0805EC60(this); gRoomVars.greatFairyState |= 32; @@ -237,7 +230,7 @@ void GreatFairy_MiniRisingUpdate(Entity* this) { void GreatFairy_MiniRemoveMe(Entity* this) { GetNextFrame(this); sub_080873D0(this); - if ((gRoomVars.greatFairyState & 1) != 0) { + if (gRoomVars.greatFairyState & 1) { DeleteEntity(this); } } @@ -270,15 +263,13 @@ void GreatFairy_MiniAffineInit2(Entity* this) { // Mini great fairy stretch void GreatFairy_MiniAffineUpdate(Entity* this) { - s32 iVar2; - if (--this->actionDelay == 0) { gRoomVars.greatFairyState |= 1; this->action = 3; sub_0805EC60(this); } else { - iVar2 = this->speed -= 24; - sub_0805EC9C(this, 256, iVar2 * 0x10000 >> 20, 0); + this->speed -= 24; + sub_0805EC9C(this, 256, this->speed >> 4, 0); } } @@ -297,7 +288,7 @@ void GreatFairy_DropletInit(Entity* this) { void GreatFairy_DropletUpdate(Entity* this) { GetNextFrame(this); - if (this->frames.b.f3) { + if (this->frames.all & 0x80) { DeleteEntity(this); } } @@ -314,7 +305,7 @@ void GreatFairy_RippleInit(Entity* this) { } void GreatFairy_RippleUpdate(Entity* this) { - if ((gRoomVars.greatFairyState & 2) != 0) { + if (gRoomVars.greatFairyState & 2) { DeleteEntity(this); } else { GetNextFrame(this); @@ -363,7 +354,7 @@ void GreatFairy_EnergyInit(Entity* this) { void GreatFairy_EnergyUpdate(Entity* this) { GetNextFrame(this); - if (this->frames.b.f3) { + if (this->frames.all & 0x80) { DeleteEntity(this); } } @@ -377,35 +368,25 @@ void sub_08087114(Entity* this) { } } -#ifdef NON_MATCHING -extern u8 gUnk_0812079C; - -void sub_08087150(Entity* this) { +NONMATCH("asm/greatFairy/sub_08087150.inc", void sub_08087150(Entity* this)) { u32 temp; - GreatFairy_InitializeAnimation(); + GreatFairy_InitializeAnimation(this); this->spriteSettings.b.draw = TRUE; this->spriteOrientation.flipY = 0; this->spriteRendering.b0 = 0; this->spritePriority.b0 = 3; - this->speed = 0x80; + this->speed = 128; this->direction = 0x10; - temp = gUnk_0812079C; + temp = gUnk_0812079C[0]; this->palette.raw = ((temp & 0xf) << 4) | 0xf; } -#else -NAKED -void sub_08087150(Entity* this) { - asm(".include \"asm/greatFairy/sub_08087150.inc\""); -} -#endif +END_NONMATCH void nullsub_516(Entity* this) { } void sub_080871A8(Entity* this) { - u32 bVar1; - if (--this->actionDelay == 0) { this->action = 3; this->actionDelay = 60; @@ -414,7 +395,6 @@ void sub_080871A8(Entity* this) { } void sub_080871D0(Entity* this) { - if (--this->actionDelay == 0) { gRoomVars.greatFairyState |= 8; DeleteEntity(this); @@ -424,16 +404,16 @@ void sub_080871D0(Entity* this) { void sub_080871F8(Entity* this) { Entity* temp = this->attachedEntity; - if ((temp->x.HALF.HI == this->x.HALF.HI) && (temp->y.HALF.HI - 0x20 == this->y.HALF.HI)) { + if ((temp->x.HALF.HI == this->x.HALF.HI) && (temp->y.HALF.HI - 32 == this->y.HALF.HI)) { this->action = 2; } else { - this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, temp->x.HALF.HI, temp->y.HALF.HI - 0x20); + this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, temp->x.HALF.HI, temp->y.HALF.HI - 32); sub_0806F69C(this); } } void sub_08087240(Entity* this) { - if ((gRoomVars.greatFairyState & 4) != 0) { + if (gRoomVars.greatFairyState & 4) { this->action = 3; this->actionDelay = 20; this->direction = 16; @@ -448,7 +428,6 @@ void sub_08087264(Entity* this) { } void sub_0808727C(Entity* this) { - if (--this->actionDelay == 0) { DeleteEntity(this); } @@ -479,17 +458,16 @@ void sub_080872F8(Entity* this) { sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, (s16)this->field_0x68.HWORD, (s16)this->field_0x6a.HWORD); this->direction = (this->direction + gUnk_081207AC[Random() & 3]) & 0x1f; } - temp = gSineTable[this->actionDelay + 0x40]; + temp = gSineTable[this->actionDelay + 64]; this->height.HALF.HI = (temp >> 6) - 8; this->actionDelay++; } void GreatFairy_InitializeAnimation(Entity* this) { - s32 temp; + s32 temp = 11; this->action = 1; - temp = this->type; - this->type2 = temp % 11; + this->type2 = this->type % temp; this->collisionLayer = 2; InitializeAnimation(this, this->type2); sub_0805E3A0(this, 2); @@ -515,7 +493,7 @@ void sub_080873D0(Entity* this) { ent = GreatFairy_CreateForm(this, 8, 0); if (ent != NULL) { CopyPosition(this, ent); - this->actionDelay = 0x30; + this->actionDelay = 48; } } } @@ -526,7 +504,7 @@ void sub_080873FC(void) { SoundReq(0xf7); gRoomControls.cameraTarget = NULL; - while (ent = FindEntityInListBySubtype(0x6, 0x1b, 0x6), ent != NULL) { + while (ent = FindEntityByID(0x6, 0x1b, 0x6), ent != NULL) { DeleteEntity(ent); } } @@ -555,101 +533,87 @@ void sub_08087424(Entity* this, ScriptExecutionContext* context) { void sub_0808747C(Entity* this, ScriptExecutionContext* context) { u32 iVar1 = 0; - iVar1 = (u32)FindEntityInListByForm(0x6, 0xf, 0x6, 0xb, 0x0); + iVar1 = (u32)FindEntity(0x6, 0xf, 0x6, 0xb, 0x0); if (iVar1 != 0) { iVar1 = 1; } context->condition = iVar1; } -// clang-format off void (*const GreatFairy_Main[])(Entity*) = { - GreatFairy_CallBehavior, + GreatFairy_CallBehavior, GreatFairy_WingsCallBehavior, GreatFairy_WakeCallBehavior, GreatFairy_MiniCallBehavior, - GreatFairy_MiniAffineCallBehavior, - GreatFairy_DropletCallBehavior, - GreatFairy_RippleCallBehavior, + GreatFairy_MiniAffineCallBehavior, + GreatFairy_DropletCallBehavior, + GreatFairy_RippleCallBehavior, GreatFairy_BigRippleCallBehavior, - GreatFairy_EnergyCallBehavior, - sub_08087114, - sub_08087294 + GreatFairy_EnergyCallBehavior, + sub_08087114, + sub_08087294, }; void (*const GreatFairy_Behaviors[])(Entity*) = { - GreatFairy_Init, - GreatFairy_DormantUpdate, - GreatFairy_CreateBigRipple, - GreatFairy_SpawningUpdate, - GreatFairy_MiniUpdate, - GreatFairy_FinalUpdate + GreatFairy_Init, GreatFairy_DormantUpdate, GreatFairy_CreateBigRipple, + GreatFairy_SpawningUpdate, GreatFairy_MiniUpdate, GreatFairy_FinalUpdate, }; const s16 GreatFairy_RippleOffsets[10] = { - 0, 0, - -32, -8, - 16, 20, - 24, -12, - -16, 24 + 0, 0, -32, -8, 16, 20, 24, -12, -16, 24, }; - -void (*const GreatFairy_WingsBehaviors[])(Entity*) = { +void (*const GreatFairy_WingsBehaviors[])(Entity*) = { GreatFairy_WingsInit, GreatFairy_WingsUpdate, - nullsub_116 + nullsub_116, }; void (*const GreatFairy_WakeBehaviors[])(Entity*) = { GreatFairy_WakeInit, - GreatFairy_WakeUpdate + GreatFairy_WakeUpdate, }; void (*const GreatFairy_MiniBehaviors[])(Entity*) = { GreatFairy_MiniInit, GreatFairy_MiniRisingUpdate, - GreatFairy_MiniRemoveMe + GreatFairy_MiniRemoveMe, }; void (*const GreatFairy_MiniAffineBehaviors[])(Entity*) = { GreatFairy_MiniAffineInit, GreatFairy_MiniAffineInit2, GreatFairy_MiniAffineUpdate, - DeleteEntity + DeleteEntity, }; void (*const GreatFairy_DropletBehaviors[])(Entity*) = { GreatFairy_DropletInit, - GreatFairy_DropletUpdate + GreatFairy_DropletUpdate, }; void (*const GreatFairy_RippleBehaviors[])(Entity*) = { GreatFairy_RippleInit, - GreatFairy_RippleUpdate + GreatFairy_RippleUpdate, }; void (*const GreatFairy_BigRippleBehaviors[])(Entity*) = { GreatFairy_BigRippleInit, - GreatFairy_BigRippleUpdate + GreatFairy_BigRippleUpdate, }; void (*const GreatFairy_EnergyBehaviors[])(Entity*) = { GreatFairy_EnergyInit, - GreatFairy_EnergyUpdate + GreatFairy_EnergyUpdate, }; + void (*const GreatFairy_Form1Behaviors[])(Entity*) = { sub_08087150, nullsub_516, sub_080871A8, - sub_080871D0 + sub_080871D0, }; void (*const GreatFairy_Form2Behaviors[])(Entity*) = { - sub_08087150, - sub_080871F8, - sub_08087240, - sub_08087264, - sub_0808727C + sub_08087150, sub_080871F8, sub_08087240, sub_08087264, sub_0808727C, }; -// clang-format on diff --git a/src/object/minishSizedEntrance.c b/src/object/minishSizedEntrance.c index 2f08f996..03467f41 100644 --- a/src/object/minishSizedEntrance.c +++ b/src/object/minishSizedEntrance.c @@ -1,9 +1,13 @@ #include "global.h" #include "entity.h" #include "game.h" +#include "player.h" #include "functions.h" +extern void DoExitTransition(void*); + extern void (*const gUnk_08122254[])(Entity*); +extern u16 gUnk_0812225C[]; void MinishSizedEntrance(Entity* this) { gUnk_08122254[this->action](this); @@ -20,3 +24,17 @@ void sub_08090EC0(Entity* this) { LoadFixedGFX(this, 0x184); } } + +void sub_08090F00(Entity* this) { + if (this->type == 1) { + Entity* parent = this->parent; + u32 mask = 1 << this->field_0xf; + if (!(parent->field_0x20 & mask)) { + DeleteThisEntity(); + } + } + if ((gPlayerState.flags.all & 0x80) && sub_080041A0(this, &gPlayerEntity, 4, 4) && + (gPlayerEntity.height.HALF.HI == 0) && (((u16)gPlayerState.field_0x90.HALF.LO) & gUnk_0812225C[this->type2])) { + DoExitTransition((Entity*)GetCurrentRoomProperty(this->actionDelay)); + } +} diff --git a/src/object/object49.c b/src/object/object49.c index 92e90b5c..b483e25a 100644 --- a/src/object/object49.c +++ b/src/object/object49.c @@ -1,7 +1,7 @@ #include "global.h" #include "entity.h" #include "functions.h" -#include "position.h" +#include "coord.h" #include "random.h" #include "structures.h" diff --git a/src/object/object7E.c b/src/object/object7E.c index 4a128e63..c456a841 100644 --- a/src/object/object7E.c +++ b/src/object/object7E.c @@ -1,6 +1,6 @@ #include "global.h" #include "entity.h" -#include "position.h" +#include "coord.h" void Object7E(Entity* this) { diff --git a/src/object/object86.c b/src/object/object86.c index dd6d5a41..02e0b480 100644 --- a/src/object/object86.c +++ b/src/object/object86.c @@ -1,6 +1,6 @@ #include "global.h" #include "entity.h" -#include "position.h" +#include "coord.h" #include "player.h" #include "flags.h" #include "functions.h" diff --git a/src/object/object9E.c b/src/object/object9E.c index 321945b2..f8e89b4e 100644 --- a/src/object/object9E.c +++ b/src/object/object9E.c @@ -1,6 +1,6 @@ #include "global.h" #include "entity.h" -#include "position.h" +#include "coord.h" #include "room.h" #include "functions.h" diff --git a/src/object/objectAF.c b/src/object/objectAF.c index ad13952e..b678d81b 100644 --- a/src/object/objectAF.c +++ b/src/object/objectAF.c @@ -1,6 +1,6 @@ #include "global.h" #include "entity.h" -#include "position.h" +#include "coord.h" extern void sub_080A0640(Entity*); diff --git a/src/player.c b/src/player.c index b9b5f765..d34024b2 100644 --- a/src/player.c +++ b/src/player.c @@ -2,7 +2,7 @@ #include "entity.h" #include "player.h" #include "textbox.h" -#include "readKeyInput.h" +#include "utils.h" #include "area.h" #include "save.h" #include "game.h" @@ -92,7 +92,7 @@ void PlayerInit(Entity* this) { sub_08079938(); gPlayerState.field_0xa8 = 7; sub_0807ACCC(this); - ent = FindEntityInListByForm(0x6, 0xf, 0x6, 0xb, 0x0); + ent = FindEntity(0x6, 0xf, 0x6, 0xb, 0x0); if (ent != NULL) { DeleteEntity(ent); } diff --git a/src/position.c b/src/position.c deleted file mode 100644 index b5f83468..00000000 --- a/src/position.c +++ /dev/null @@ -1,50 +0,0 @@ -#include "global.h" -#include "entity.h" -#include "position.h" - -extern u8 gUnk_08114F78[]; -extern u8 gUnk_08114F80[]; - -void CopyPosition(Entity* param_1, Entity* param_2) { - PositionRelative(param_1, param_2, 0, 0); -} - -void PositionEntityOnTop(Entity* ent, Entity* ent2) { - PositionRelative(ent, ent2, 0, 0); - ResolveEntityOnTop(ent, ent2); -} - -void PositionRelative(Entity* source, Entity* target, s32 offsetX, s32 offsetY) { // r0, r1, r2, r3 - s32 x; - s32 y; - - x = source->x.WORD; - target->x.WORD = x + offsetX; - - y = source->y.WORD; - target->y.WORD = y + offsetY; - - target->height = source->height; // ldr - target->collisionLayer = source->collisionLayer; - UpdateSpriteForCollisionLayer(target); -} - -void CopyPositionAndSpriteOffset(Entity* param_1, Entity* param_2) { - param_2->spriteOffsetX = param_1->spriteOffsetX; - param_2->spriteOffsetY = param_1->spriteOffsetY; - PositionRelative(param_1, param_2, 0, 0); -} - -void sub_0806FA90(Entity* param_1, Entity* param_2, s32 offsetX, s32 offsetY) { - param_2->spriteOffsetX = param_1->spriteOffsetX; - param_2->spriteOffsetY = param_1->spriteOffsetY; - PositionRelative(param_1, param_2, offsetX * 64 * 32 * 32, offsetY * 64 * 32 * 32); -} - -void ResolveEntityOnTop(Entity* param_1, Entity* param_2) { - param_2->spritePriority.b0 = gUnk_08114F78[param_1->spritePriority.b0]; -} - -void sub_0806FAD8(Entity* param_1, Entity* param_2) { - param_2->spritePriority.b0 = gUnk_08114F80[param_1->spritePriority.b0]; -} diff --git a/src/room.c b/src/room.c index 9c94aa9f..e196f379 100644 --- a/src/room.c +++ b/src/room.c @@ -2235,7 +2235,7 @@ void sub_0804CD48(void) { gFadeControl.active = 0; gUsedPalettes = 0; *(u16*)0x5000000 = 0x7fff; - sub_0801DA90(1); + DispReset(1); } if (CheckGlobalFlag(LV1_CLEAR)) { LoadRoomEntityList(&gUnk_080DF94C); diff --git a/src/script.c b/src/script.c index a6b59b23..3f19bf23 100644 --- a/src/script.c +++ b/src/script.c @@ -5,7 +5,7 @@ #include "script.h" #include "structures.h" #include "textbox.h" -#include "dma.h" +#include "utils.h" #include "save.h" #include "random.h" #include "functions.h" diff --git a/src/sub_0801D754.c b/src/sub_0801D754.c deleted file mode 100644 index 8b1b2b20..00000000 --- a/src/sub_0801D754.c +++ /dev/null @@ -1,17 +0,0 @@ -#include "global.h" - -extern const u8 gUnk_020176E0[]; - -extern void sub_0807C960(); -extern void LoadPalettes(const u8*, int, int); - -void sub_0807C9D8(u32* a1) { - u32* v1; // r5@1 - - v1 = a1; - sub_0807C960(0x6004000, *a1); - sub_0807C960(0x6000000, v1[1]); - sub_0807C960(0x6008000, v1[2]); - sub_0807C960(gUnk_020176E0, v1[3]); - LoadPalettes(gUnk_020176E0, 2, 13); -} diff --git a/src/sub_0804AFF4.c b/src/sub_0804AFF4.c deleted file mode 100644 index b2555120..00000000 --- a/src/sub_0804AFF4.c +++ /dev/null @@ -1,20 +0,0 @@ -#include "global.h" - -extern void sub_080186EC(); -extern u32* GetCurrentRoomProperty(u8); -extern void sub_0804B16C(); - -void sub_0804AFF4(void) { - void (*func)(); - - sub_080186EC(); - func = (void (*)())GetCurrentRoomProperty(5); - if (func) { - func(); - } - func = (void (*)())GetCurrentRoomProperty(7); - if (func) { - func(); - } - sub_0804B16C(); -} diff --git a/src/sub_08050008.c b/src/sub_08050008.c index 59ace866..df79883a 100644 --- a/src/sub_08050008.c +++ b/src/sub_08050008.c @@ -1,5 +1,5 @@ #include "global.h" -#include "dma.h" +#include "utils.h" #include "structures.h" extern u32 gUnk_020354C0; diff --git a/src/sub_0806F9EC.c b/src/sub_0806F9EC.c deleted file mode 100644 index 8c3f17fb..00000000 --- a/src/sub_0806F9EC.c +++ /dev/null @@ -1,11 +0,0 @@ -#include "global.h" - -s32 sub_0806F9EC(s16 unk_1, s16 unk_2) { - int temp; - - temp = (s32)unk_1 * (s32)unk_2; - if (temp < 0) { - temp = temp + 255; - } - return (temp << 8) >> 16; -} diff --git a/src/sub_0806FA04.c b/src/sub_0806FA04.c deleted file mode 100644 index 75d421be..00000000 --- a/src/sub_0806FA04.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "global.h" - -s16 sub_0806FA04(s16 param_1, s16 param_2) { - s16 sVar1; - s32 iVar2; - - if (param_2 != 0) { - sVar1 = ((param_1 << 16) >> 8) / param_2; - iVar2 = sVar1; - } else { - iVar2 = 0; - } - return iVar2; -} diff --git a/src/sub_0807B7D8.c b/src/sub_0807B7D8.c deleted file mode 100644 index 7a8a68fc..00000000 --- a/src/sub_0807B7D8.c +++ /dev/null @@ -1,18 +0,0 @@ -#include "global.h" -#include "functions.h" - -extern void sub_08000152(u32); -extern void sub_0807B778(u32, u32); - -void sub_0807B7D8(u32 param_1, u32 param_2, u32 param_3) { - if (param_1 == 53) { - sub_08000152(53); - sub_0807B778(param_2, param_3); - sub_0807B778(param_2 + 1, param_3); - sub_0807B778(param_2 + -1, param_3); - sub_0807B778(param_2 + 64, param_3); - sub_0807B778(param_2 + -64, param_3); - } else { - SetTileType(param_1, param_2, param_3); - } -} diff --git a/src/sub_0807B820.c b/src/sub_0807B820.c index 54b94849..fabdc8d9 100644 --- a/src/sub_0807B820.c +++ b/src/sub_0807B820.c @@ -1,6 +1,22 @@ #include "global.h" #include "functions.h" +extern void sub_08000152(u32); +extern void sub_0807B778(u32, u32); + +void sub_0807B7D8(u32 param_1, u32 param_2, u32 param_3) { + if (param_1 == 53) { + sub_08000152(53); + sub_0807B778(param_2, param_3); + sub_0807B778(param_2 + 1, param_3); + sub_0807B778(param_2 + -1, param_3); + sub_0807B778(param_2 + 64, param_3); + sub_0807B778(param_2 + -64, param_3); + } else { + SetTileType(param_1, param_2, param_3); + } +} + void sub_0807B820(u32 param_1) { SetTileType(620, param_1 + -65, 1); SetTileType(627, param_1 + -65, 2); @@ -12,3 +28,27 @@ void sub_0807B820(u32 param_1) { SetTileType(624, param_1, 1); SetTileType(626, param_1 + 1, 1); } + +void sub_0807B8A8(u32 param_1) { + SetTileType(636, param_1 + -65, 1); + SetTileType(643, param_1 + -65, 2); + SetTileType(637, param_1 + -64, 1); + SetTileType(644, param_1 + -64, 2); + SetTileType(638, param_1 + -63, 1); + SetTileType(645, param_1 + -63, 2); + SetTileType(639, param_1 + -1, 1); + SetTileType(640, param_1, 1); + SetTileType(642, param_1 + 1, 1); +} + +void sub_0807B930(int param_1) { + SetTileType(652, param_1 + -65, 1); + SetTileType(659, param_1 + -65, 2); + SetTileType(653, param_1 + -64, 1); + SetTileType(660, param_1 + -64, 2); + SetTileType(654, param_1 + -63, 1); + SetTileType(661, param_1 + -63, 2); + SetTileType(655, param_1 + -1, 1); + SetTileType(656, param_1, 1); + SetTileType(658, param_1 + 1, 1); +} diff --git a/src/sub_0807B8A8.c b/src/sub_0807B8A8.c deleted file mode 100644 index f0524685..00000000 --- a/src/sub_0807B8A8.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "global.h" -#include "functions.h" - -void sub_0807B8A8(u32 param_1) { - SetTileType(636, param_1 + -65, 1); - SetTileType(643, param_1 + -65, 2); - SetTileType(637, param_1 + -64, 1); - SetTileType(644, param_1 + -64, 2); - SetTileType(638, param_1 + -63, 1); - SetTileType(645, param_1 + -63, 2); - SetTileType(639, param_1 + -1, 1); - SetTileType(640, param_1, 1); - SetTileType(642, param_1 + 1, 1); -} diff --git a/src/sub_0807B930.c b/src/sub_0807B930.c deleted file mode 100644 index 6ad13448..00000000 --- a/src/sub_0807B930.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "global.h" -#include "functions.h" - -void sub_0807B930(int param_1) { - SetTileType(652, param_1 + -65, 1); - SetTileType(659, param_1 + -65, 2); - SetTileType(653, param_1 + -64, 1); - SetTileType(660, param_1 + -64, 2); - SetTileType(654, param_1 + -63, 1); - SetTileType(661, param_1 + -63, 2); - SetTileType(655, param_1 + -1, 1); - SetTileType(656, param_1, 1); - SetTileType(658, param_1 + 1, 1); -} diff --git a/src/sub_0807C998.c b/src/sub_0807C998.c index 608f7680..7f3a05c9 100644 --- a/src/sub_0807C998.c +++ b/src/sub_0807C998.c @@ -1,10 +1,14 @@ #include "global.h" extern void sub_0807C960(); +extern void LoadPalettes(const u8*, s32, s32); + extern u16 gMetatilesBottom[]; extern u16 gMetatilesTop[]; extern u8 gUnk_08324AE4; +extern const u8 gUnk_020176E0[]; + void sub_0807C960(void* dest, u32 offset) { void* src; @@ -24,3 +28,14 @@ void sub_0807C998(u32* a1) { sub_0807C960(gMetatilesTop, a1[2]); sub_0807C960(gMetatilesTop - 0x1000, a1[3]); } + +void sub_0807C9D8(u32* a1) { + u32* v1; // r5@1 + + v1 = a1; + sub_0807C960((u8*)0x6004000, *a1); + sub_0807C960((u8*)0x6000000, v1[1]); + sub_0807C960((u8*)0x6008000, v1[2]); + sub_0807C960((u8*)gUnk_020176E0, v1[3]); + LoadPalettes(gUnk_020176E0, 2, 13); +} diff --git a/src/textbox.c b/src/textbox.c index 262560c4..3510e095 100644 --- a/src/textbox.c +++ b/src/textbox.c @@ -1,7 +1,7 @@ #include "global.h" #include "room.h" #include "entity.h" -#include "dma.h" +#include "utils.h" #include "functions.h" #include "textbox.h" #include "structures.h" @@ -14,11 +14,14 @@ u32 sub_080565B4(void); u32 sub_080565F8(void); u32 sub_08056640(void); -u32 (*const gUnk_08107BC8[])(void) = { sub_080564DC, sub_080564EC, sub_08056654, - sub_080565B4, sub_080565F8, sub_08056640 }; +u32 (*const gUnk_08107BC8[])(void) = { + sub_080564DC, sub_080564EC, sub_08056654, sub_080565B4, sub_080565F8, sub_08056640, +}; extern u8 gUnk_020227DC, gUnk_020227E8, gUnk_020227F0, gUnk_020227F8, gUnk_02022800; -u8* const gUnk_08107BE0[] = { &gUnk_020227DC, &gUnk_020227E8, &gUnk_020227F0, &gUnk_020227F8, &gUnk_02022800 }; +u8* const gUnk_08107BE0[] = { + &gUnk_020227DC, &gUnk_020227E8, &gUnk_020227F0, &gUnk_020227F8, &gUnk_02022800, +}; void sub_08056684(struct_02022780*); void sub_080566B8(struct_02022780*); @@ -27,8 +30,9 @@ void sub_08056B1C(struct_02022780*); void sub_08056B7C(struct_02022780*); void sub_080569D4(struct_02022780*); -void (*const gUnk_08107BF4[])(struct_02022780*) = { sub_08056684, sub_080566B8, sub_08056BA0, - sub_08056B1C, sub_08056B7C, sub_080569D4 }; +void (*const gUnk_08107BF4[])(struct_02022780*) = { + sub_08056684, sub_080566B8, sub_08056BA0, sub_08056B1C, sub_08056B7C, sub_080569D4, +}; extern u32 gUnk_02036A40; extern u32 gUnk_02036A38; diff --git a/src/utils.c b/src/utils.c new file mode 100644 index 00000000..b88fb9cd --- /dev/null +++ b/src/utils.c @@ -0,0 +1,204 @@ +#include "global.h" +#include "utils.h" +#include "structures.h" +#include "screen.h" + +static void StoreKeyInput(Input* input, u32 keyInput); + +typedef struct { + u16 paletteId; + u8 destPaletteNum; + u8 numPalettes; +} PaletteGroup; + +typedef struct { + union { + int raw; + struct { + u8 filler0[0x3]; + u8 unk3; + } bytes; + } unk0; + u32 dest; + u32 unk8; +} GfxItem; + +extern const PaletteGroup* gPaletteGroups[]; +extern const u8 gGlobalGfxAndPalettes[]; +extern u32 gUsedPalettes; +extern u16 gPaletteBuffer[]; +extern const GfxItem* gUnk_08100AA8[]; + +void MemFill16(u32 value, void* dest, u32 size) { + DmaFill16(3, value, dest, size); +} + +void MemFill32(u32 value, void* dest, u32 size) { + DmaFill32(3, value, dest, size); +} + +void MemClear(void* dest, u32 size) { + u32 zero = 0; + + switch (((u32)dest | size) & 3) { + case 0: + MemFill32(0, dest, size); + break; + case 2: + MemFill16(0, dest, size); + break; + default: + do { + *(u8*)dest = zero; + dest++; + size--; + } while (size != 0); + } +} + +void MemCopy(const void* src, void* dest, u32 size) { + switch (((u32)src | (u32)dest | size) & 3) { + case 0: + DmaCopy32(3, src, dest, size); + break; + case 2: + DmaCopy16(3, src, dest, size); + break; + default: + do { + *(u8*)dest = *(u8*)src; + src++; + dest++; + } while (--size); + } +} + +void ReadKeyInput(void) { + u32 keyInput = ~REG_KEYINPUT & KEYS_MASK; + StoreKeyInput(&gInput, keyInput); +} + +static void StoreKeyInput(Input* input, u32 keyInput) { + u32 heldKeys = input->heldKeys; + u32 difference = keyInput & ~heldKeys; + input->newKeys = difference; + if (keyInput == heldKeys) { + if (--input->unk7 == 0) { + input->unk7 = 4; + input->unk4 = keyInput; + } else { + input->unk4 = 0; + } + } else { + input->unk7 = 0x14; + input->unk4 = difference; + } + input->heldKeys = keyInput; +} + +void LoadPaletteGroup(u32 group) { + const PaletteGroup* paletteGroup = gPaletteGroups[group]; + while (1) { + u32 destPaletteNum = paletteGroup->destPaletteNum; + u32 numPalettes = paletteGroup->numPalettes & 0xF; + if (numPalettes == 0) { + numPalettes = 16; + } + LoadPalettes(&gGlobalGfxAndPalettes[paletteGroup->paletteId * 32], destPaletteNum, numPalettes); + if ((paletteGroup->numPalettes & 0x80) == 0) { + break; + } + paletteGroup++; + } +} + +void LoadPalettes(const u8* src, int destPaletteNum, int numPalettes) { + u16* dest; + u32 size = numPalettes * 32; + u32 usedPalettesMask = 1 << destPaletteNum; + while (--numPalettes > 0) { + usedPalettesMask |= (usedPalettesMask << 1); + } + gUsedPalettes |= usedPalettesMask; + dest = &gPaletteBuffer[destPaletteNum * 16]; + DmaCopy32(3, src, dest, size); +} + +void sub_0801D79C(u32 colorIndex, u32 color) { + gPaletteBuffer[colorIndex] = color; + gUsedPalettes |= 1 << (colorIndex / 16); +} + +void sub_0801D7BC(u32 color, u32 arg1) { + if (arg1) { + gScreen.lcd.unk6 = 0xE0FF; + } else { + gScreen.lcd.unk6 = 0xFFFF; + } + sub_0801D79C(0, color); +} + +void LoadGfxGroup(u32 group) { + u32 terminator; + u32 dmaCtrl; + int gfxOffset; + const u8* src; + u32 dest; + int size; + const GfxItem* gfxItem = gUnk_08100AA8[group]; + while (1) { + u32 loadGfx = FALSE; + u32 ctrl = gfxItem->unk0.bytes.unk3; + ctrl &= 0xF; + switch (ctrl) { + case 0x7: + loadGfx = TRUE; + break; + case 0xD: + return; + case 0xE: + if (gUnk_02000000->gameLanguage != 0 && gUnk_02000000->gameLanguage != 1) { + loadGfx = TRUE; + } + break; + case 0xF: + if (gUnk_02000000->gameLanguage != 0) { + loadGfx = TRUE; + } + break; + default: + if (ctrl == gUnk_02000000->gameLanguage) { + loadGfx = TRUE; + } + break; + } + + if (loadGfx) { + gfxOffset = gfxItem->unk0.raw & 0xFFFFFF; + src = &gGlobalGfxAndPalettes[gfxOffset]; + dest = gfxItem->dest; + size = gfxItem->unk8; + dmaCtrl = 0x80000000; + if (size < 0) { + if (dest >= VRAM) { + LZ77UnCompVram(src, (void*)dest); + } else { + LZ77UnCompWram(src, (void*)dest); + } + } else { + DmaSet(3, src, dest, dmaCtrl | ((u32)size >> 1)); + } + } + + terminator = gfxItem->unk0.bytes.unk3; + terminator &= 0x80; + gfxItem++; + if (!terminator) { + break; + } + } +} + +/* TODO: + clear OAM, zMalloc, etc. +*/