summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortheo3 <arisstephenson2@gmail.com>2021-03-21 20:51:08 -0700
committertheo3 <arisstephenson2@gmail.com>2021-03-21 20:51:08 -0700
commitbd50d449de5fc85ecb6f08f27a6ba0a45bfed6ec (patch)
tree9ddee2cf4e5706768d91f8942efc4a65f6e6c72f
parent69edec1eb92ff6e8e3185030dd498579e8b0f382 (diff)
collapse TUs
-rw-r--r--asm/code_080011C4.s4
-rw-r--r--asm/code_0806ED78.s24
-rw-r--r--asm/code_080A29BC.s8
-rw-r--r--asm/evilSpirit.s16
-rw-r--r--asm/gleerok.s12
-rw-r--r--asm/kid.s4
-rw-r--r--asm/lilypadLarge.s16
-rw-r--r--asm/object87.s8
-rw-r--r--asm/object91.s8
-rw-r--r--asm/object97.s4
-rw-r--r--asm/octorokBoss.s40
-rw-r--r--asm/zeldaFollower.s4
-rw-r--r--include/coord.h (renamed from include/position.h)6
-rw-r--r--include/dma.h9
-rw-r--r--include/functions.h3
-rw-r--r--include/greatFairy.h1
-rw-r--r--include/readKeyInput.h9
-rw-r--r--include/trig.h7
-rw-r--r--include/utils.h19
-rw-r--r--linker.ld20
-rw-r--r--src/arm_proxy.c2
-rwxr-xr-xsrc/code_0801D714.c43
-rw-r--r--src/code_0801D79C.c96
-rw-r--r--src/code_080300AC.c2
-rw-r--r--src/code_0804AA84.c2
-rw-r--r--src/code_0805F9A0.c2
-rw-r--r--src/code_08077DF4.c2
-rw-r--r--src/coord.c (renamed from src/trig.c)69
-rw-r--r--src/createObject.c2
-rw-r--r--src/debugScreen.c (renamed from src/screenDebug.c)11
-rw-r--r--src/dma.c46
-rw-r--r--src/enemy/gyorgMale.c2
-rw-r--r--src/enemy/lakitu.c2
-rw-r--r--src/enemy/leever.c2
-rw-r--r--src/enemy/miniSlime.c4
-rw-r--r--src/enemy/slime.c4
-rw-r--r--src/enemy/smallPesto.c2
-rw-r--r--src/entity.c2
-rw-r--r--src/fade.c (renamed from src/sub_08050024.c)0
-rw-r--r--src/fileScreen.c3
-rw-r--r--src/game.c3
-rw-r--r--src/input.c27
-rw-r--r--src/intro.c3
-rw-r--r--src/loadRoom.c18
-rw-r--r--src/main.c9
-rw-r--r--src/manager/manager1A.c2
-rw-r--r--src/manager/manager39.c2
-rw-r--r--src/manager/managerB.c2
-rw-r--r--src/manager/managerC.c2
-rw-r--r--src/object/fileScreenObjects.c4
-rw-r--r--src/object/greatFairy.c144
-rw-r--r--src/object/object49.c2
-rw-r--r--src/object/object7E.c2
-rw-r--r--src/object/object86.c2
-rw-r--r--src/object/object9E.c2
-rw-r--r--src/object/objectAF.c2
-rw-r--r--src/player.c2
-rw-r--r--src/position.c50
-rw-r--r--src/script.c2
-rw-r--r--src/sub_0801D754.c17
-rw-r--r--src/sub_0804AFF4.c20
-rw-r--r--src/sub_08050008.c2
-rw-r--r--src/sub_0806F9EC.c11
-rw-r--r--src/sub_0806FA04.c14
-rw-r--r--src/sub_0807B7D8.c18
-rw-r--r--src/sub_0807B820.c41
-rw-r--r--src/sub_0807B8A8.c14
-rw-r--r--src/sub_0807B930.c14
-rw-r--r--src/sub_0807C998.c15
-rw-r--r--src/textbox.c16
-rw-r--r--src/utils.c204
71 files changed, 551 insertions, 635 deletions
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_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_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/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/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/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..c89575a1 100644
--- a/asm/lilypadLarge.s
+++ b/asm/lilypadLarge.s
@@ -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
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..74fca837 100644
--- a/asm/object97.s
+++ b/asm/object97.s
@@ -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/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/position.h b/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/functions.h b/include/functions.h
index 4711ec1e..049f3bd1 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);
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/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/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..1703c991
--- /dev/null
+++ b/include/utils.h
@@ -0,0 +1,19 @@
+typedef struct {
+ u16 heldKeys;
+ u16 newKeys;
+ u16 unk4;
+ u8 unk6;
+ u8 unk7;
+} Input;
+
+extern Input gInput;
+
+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);
+
+void ReadKeyInput(void);
+
+void LoadPalettes(const u8*, int, int);
+void LoadPaletteGroup(u32 group);
diff --git a/linker.ld b/linker.ld
index 01c96243..ba362d8e 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);
@@ -915,7 +905,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_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
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/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
index b0ce1fa6..c5fcd45f 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[])();
@@ -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..baa1e04e 100644
--- a/src/enemy/miniSlime.c
+++ b/src/enemy/miniSlime.c
@@ -6,7 +6,7 @@
void sub_08045374(Entity*);
-extern u32 sub_0806FA04(u32, u32);
+//extern u32 FixedDiv(u32, u32);
extern void sub_080452E4();
extern void ReplaceMonitoredEntity(Entity*, Entity*);
@@ -70,7 +70,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/slime.c b/src/enemy/slime.c
index cef52043..95112c2c 100644
--- a/src/enemy/slime.c
+++ b/src/enemy/slime.c
@@ -12,7 +12,7 @@ typedef struct {
void sub_08044FF8(Entity*);
void sub_08045178(Entity*, Entity*, int, int);
-extern u32 sub_0806FA04(u32, u32);
+//extern u32 FixedDiv(u32, u32);
extern void sub_0804A4E4(Entity*, Entity*);
extern u32 sub_080002CC(Entity*, s32, s32);
@@ -68,7 +68,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..82f6a058 100644
--- a/src/entity.c
+++ b/src/entity.c
@@ -1,6 +1,6 @@
#include "global.h"
#include "entity.h"
-#include "dma.h"
+#include "utils.h"
#include "script.h"
typedef struct OtherEntity {
diff --git a/src/sub_08050024.c b/src/fade.c
index fe77e3d0..fe77e3d0 100644
--- a/src/sub_08050024.c
+++ b/src/fade.c
diff --git a/src/fileScreen.c b/src/fileScreen.c
index 0e9eb13e..3f0bec26 100644
--- a/src/fileScreen.c
+++ b/src/fileScreen.c
@@ -1,10 +1,9 @@
#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"
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 d4aaf119..899122dc 100644
--- a/src/intro.c
+++ b/src/intro.c
@@ -1,9 +1,8 @@
#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"
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 1d13b23b..9e60f6f4 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1,11 +1,10 @@
#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"
@@ -187,9 +186,9 @@ NONMATCH("asm/non_matching/sub_080560B8.inc", static 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;
}
@@ -255,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/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/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..3a0157fc 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;
}
}
}
@@ -562,94 +540,80 @@ void sub_0808747C(Entity* this, ScriptExecutionContext* context) {
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/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..1e0d32ae 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"
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/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..f26e6974 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,28 @@ 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.
+*/