summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHenny022p <info@henny022.de>2021-03-22 10:18:20 +0100
committerHenny022p <info@henny022.de>2021-03-22 10:18:20 +0100
commit5cebf089fd0b34e017aeb36d540bfce051a4969c (patch)
treeb896213a6d2ead9a54518209d7a7e0a1ab855cbe
parent61b284265f37dda398a561f1f8a3ccdd8d1b39da (diff)
parent8e3bebad007d5ba082ffb14aafbb2be94dfd8fcd (diff)
Merge branch 'master' into m4a
-rw-r--r--CONTRIBUTING.md4
-rw-r--r--README.md2
-rw-r--r--asm/bigBarrel.s4
-rw-r--r--asm/bigGoron.s28
-rw-r--r--asm/bird.s2
-rw-r--r--asm/book.s2
-rw-r--r--asm/code_08000108.s12
-rw-r--r--asm/code_080011C4.s4
-rw-r--r--asm/code_0800857C.s2
-rw-r--r--asm/code_08016B30.s4
-rw-r--r--asm/code_08018500.s2
-rw-r--r--asm/code_0801C370.s6
-rw-r--r--asm/code_0801CEC0.s2
-rw-r--r--asm/code_0801D79C.s38
-rw-r--r--asm/code_0804AA84.s2
-rw-r--r--asm/code_0804B9F8.s4
-rw-r--r--asm/code_080526F8.s28
-rw-r--r--asm/code_0805436C.s4
-rw-r--r--asm/code_08056418.s6
-rw-r--r--asm/code_0805E3B0.s6
-rw-r--r--asm/code_0805EC04.s8
-rw-r--r--asm/code_0806EC20.s2
-rw-r--r--asm/code_0806ED78.s26
-rw-r--r--asm/code_0806FA6C.s12
-rw-r--r--asm/code_08070698.s1349
-rw-r--r--asm/code_080732D0.s18
-rw-r--r--asm/code_08077B98.s2
-rw-r--r--asm/code_08078778.s20
-rw-r--r--asm/code_0807B9B8.s26
-rw-r--r--asm/code_0807F0D8.s10
-rw-r--r--asm/code_080A29BC.s10
-rw-r--r--asm/code_080A3480.s14
-rw-r--r--asm/code_080A3BD0.s26
-rw-r--r--asm/code_080A5574.s26
-rw-r--r--asm/code_080AD90C.s8
-rw-r--r--asm/crt0.s33
-rw-r--r--asm/dust.s2
-rw-r--r--asm/evilSpirit.s16
-rwxr-xr-xasm/fileScreen.s22
-rw-r--r--asm/fourElements.s2
-rw-r--r--asm/gleerok.s12
-rw-r--r--asm/guardWithSpear.s2
-rw-r--r--asm/gyorgFemale.s10
-rw-r--r--asm/intr.s17
-rw-r--r--asm/jarPortal.s2
-rw-r--r--asm/kid.s4
-rw-r--r--asm/lilypadLarge.s20
-rw-r--r--asm/loadRoomEntity.s4
-rw-r--r--asm/macroBook.s4
-rw-r--r--asm/manager10.s2
-rw-r--r--asm/manager14.s2
-rw-r--r--asm/manager1B.s2
-rw-r--r--asm/manager22.s2
-rw-r--r--asm/manager2C.s2
-rw-r--r--asm/manager36.s2
-rw-r--r--asm/managerF.s2
-rw-r--r--asm/minishSizedEntrance.s62
-rw-r--r--asm/non_matching/arm_proxy/ItemInit.inc2
-rw-r--r--asm/non_matching/arm_proxy/sub_08017530.inc2
-rw-r--r--asm/non_matching/arm_proxy/sub_0801766C.inc2
-rw-r--r--asm/non_matching/arm_proxy/sub_080176E4.inc2
-rw-r--r--asm/non_matching/arm_proxy/sub_08017744.inc2
-rw-r--r--asm/non_matching/arm_proxy/sub_080177A0.inc2
-rw-r--r--asm/non_matching/fileScreen/sub_08050EF4.inc2
-rw-r--r--asm/non_matching/fileScreen/sub_08051738.inc2
-rw-r--r--asm/non_matching/fileScreen/sub_080517B4.inc2
-rw-r--r--asm/non_matching/fileScreen/sub_080610B8.inc2
-rw-r--r--asm/non_matching/game/sub_08052418.inc4
-rw-r--r--asm/non_matching/gibdo/sub_080376D0.inc2
-rw-r--r--asm/non_matching/gibdo/sub_08037810.inc2
-rw-r--r--asm/non_matching/gibdo/sub_0803797C.inc2
-rw-r--r--asm/non_matching/player/sub_08071634.s172
-rw-r--r--asm/non_matching/save/sub_08050B3C.inc2
-rw-r--r--asm/non_matching/sub_080560B8.inc2
-rw-r--r--asm/non_matching/textbox/sub_080564EC.inc8
-rw-r--r--asm/object3D.s2
-rw-r--r--asm/object3E.s4
-rw-r--r--asm/object6A.s12
-rw-r--r--asm/object87.s8
-rw-r--r--asm/object91.s8
-rw-r--r--asm/object97.s8
-rw-r--r--asm/objectB.s2
-rw-r--r--asm/octorokBoss.s40
-rw-r--r--asm/pina.s10
-rw-r--r--asm/rem.s6
-rw-r--r--asm/zeldaFollower.s4
-rw-r--r--data/data_08114208.s138
-rw-r--r--data/data_0811B9E0.s140
-rw-r--r--include/area.h13
-rw-r--r--include/arm_proxy.h6
-rw-r--r--include/audio.h22
-rw-r--r--include/coord.h (renamed from include/position.h)7
-rw-r--r--include/createObject.h8
-rw-r--r--include/enemy.h2
-rw-r--r--include/entity.h108
-rw-r--r--include/fileScreen.h7
-rw-r--r--include/flags.h2
-rw-r--r--include/functions.h43
-rw-r--r--include/game.h6
-rw-r--r--include/gba/macro.h20
-rw-r--r--include/global.h22
-rw-r--r--include/greatFairy.h26
-rw-r--r--include/item.h17
-rw-r--r--include/main.h7
-rw-r--r--include/npc.h4
-rw-r--r--include/player.h41
-rw-r--r--include/readKeyInput.h9
-rw-r--r--include/room.h8
-rw-r--r--include/structures.h19
-rw-r--r--include/textbox.h31
-rw-r--r--include/trig.h7
-rw-r--r--include/utils.h64
-rw-r--r--linker.ld25
-rw-r--r--src/arm_proxy.c38
-rw-r--r--src/code_08018C58.c1
-rwxr-xr-xsrc/code_0801D714.c43
-rw-r--r--src/code_0801D79C.c96
-rw-r--r--src/code_080300AC.c8
-rw-r--r--src/code_0804AA84.c13
-rw-r--r--src/code_0805436C.c3
-rw-r--r--src/code_0805F9A0.c3
-rw-r--r--src/code_08077B98.c2
-rw-r--r--src/code_08077DF4.c5
-rw-r--r--src/code_0808091C.c3
-rw-r--r--src/coord.c (renamed from src/trig.c)69
-rw-r--r--src/createEnemy.c5
-rw-r--r--src/createEntity.c8
-rw-r--r--src/createNPC.c21
-rw-r--r--src/createObject.c25
-rw-r--r--src/debugScreen.c (renamed from src/screenDebug.c)20
-rw-r--r--src/dma.c49
-rw-r--r--src/enemy/acroBandits.c11
-rw-r--r--src/enemy/beetle.c16
-rw-r--r--src/enemy/bladeTrap.c3
-rw-r--r--src/enemy/bobomb.c17
-rw-r--r--src/enemy/bombPeahat.c24
-rw-r--r--src/enemy/bowMoblin.c8
-rw-r--r--src/enemy/businessScrub.c34
-rw-r--r--src/enemy/chuchu.c1
-rw-r--r--src/enemy/chuchuBoss.c4
-rw-r--r--src/enemy/cuccoChickAggr.c1
-rw-r--r--src/enemy/darkNut.c4
-rw-r--r--src/enemy/doorMimic.c4
-rw-r--r--src/enemy/fallingBoulder.c1
-rw-r--r--src/enemy/fireballGuy.c4
-rw-r--r--src/enemy/gibdo.c13
-rw-r--r--src/enemy/gyorgMale.c211
-rw-r--r--src/enemy/hangingSeed.c1
-rw-r--r--src/enemy/helmasaur.c15
-rw-r--r--src/enemy/keaton.c10
-rw-r--r--src/enemy/keese.c12
-rw-r--r--src/enemy/lakitu.c55
-rw-r--r--src/enemy/lakituCloud.c16
-rw-r--r--src/enemy/leever.c9
-rw-r--r--src/enemy/likeLike.c11
-rw-r--r--src/enemy/madderpillar.c5
-rw-r--r--src/enemy/miniFireballGuy.c6
-rw-r--r--src/enemy/miniSlime.c9
-rw-r--r--src/enemy/moldorm.c7
-rw-r--r--src/enemy/moldworm.c17
-rw-r--r--src/enemy/octorok.c16
-rw-r--r--src/enemy/peahat.c14
-rw-r--r--src/enemy/pesto.c29
-rw-r--r--src/enemy/puffstool.c10
-rw-r--r--src/enemy/rockChuchu.c5
-rw-r--r--src/enemy/rollobite.c12
-rw-r--r--src/enemy/rope.c14
-rw-r--r--src/enemy/rupeeLike.c10
-rw-r--r--src/enemy/slime.c17
-rw-r--r--src/enemy/sluggula.c1
-rw-r--r--src/enemy/smallPesto.c21
-rw-r--r--src/enemy/spark.c2
-rw-r--r--src/enemy/spearMoblin.c6
-rw-r--r--src/enemy/spikedBeetle.c3
-rw-r--r--src/enemy/spinyChuchu.c7
-rw-r--r--src/enemy/tektite.c15
-rw-r--r--src/enemy/tektiteGolden.c13
-rw-r--r--src/enemy/vaatiBall.c5
-rw-r--r--src/enemy/wallMaster.c3
-rw-r--r--src/enemy/wallMaster2.c4
-rw-r--r--src/enemy/waterDrop.c3
-rw-r--r--src/enemy/wisp.c11
-rw-r--r--src/entity.c77
-rw-r--r--src/ezloNag.c6
-rw-r--r--src/fade.c (renamed from src/sub_08050024.c)3
-rw-r--r--src/fileScreen.c89
-rw-r--r--src/flags.c1
-rw-r--r--src/game.c22
-rw-r--r--src/input.c28
-rw-r--r--src/intro.c25
-rw-r--r--src/item.c5
-rw-r--r--src/item11.c7
-rw-r--r--src/item14.c5
-rw-r--r--src/loadRoom.c23
-rw-r--r--src/main.c35
-rw-r--r--src/manager/manager1.c3
-rw-r--r--src/manager/manager15.c15
-rw-r--r--src/manager/manager1A.c10
-rw-r--r--src/manager/manager1E.c2
-rw-r--r--src/manager/manager2.c2
-rw-r--r--src/manager/manager20.c5
-rw-r--r--src/manager/manager27.c6
-rw-r--r--src/manager/manager28.c9
-rw-r--r--src/manager/manager3.c19
-rw-r--r--src/manager/manager30.c9
-rw-r--r--src/manager/manager39.c8
-rw-r--r--src/manager/manager4.c5
-rw-r--r--src/manager/manager5.c11
-rw-r--r--src/manager/manager6.c7
-rw-r--r--src/manager/manager7.c3
-rw-r--r--src/manager/manager8.c2
-rw-r--r--src/manager/manager9.c1
-rw-r--r--src/manager/managerA.c9
-rw-r--r--src/manager/managerB.c5
-rw-r--r--src/manager/managerC.c15
-rw-r--r--src/manager/managerE.c8
-rw-r--r--src/npc.c1
-rw-r--r--src/npc/anju.c13
-rw-r--r--src/npc/beedle.c2
-rw-r--r--src/npc/bigGoron.c13
-rw-r--r--src/npc/bladeBrothers.c5
-rw-r--r--src/npc/carlov.c8
-rw-r--r--src/npc/carpenter.c11
-rw-r--r--src/npc/cow.c43
-rw-r--r--src/npc/dampe.c10
-rw-r--r--src/npc/emma.c2
-rw-r--r--src/npc/epona.c6
-rw-r--r--src/npc/ezloCap.c1
-rw-r--r--src/npc/festari.c3
-rw-r--r--src/npc/forestMinish.c16
-rw-r--r--src/npc/gentari.c7
-rw-r--r--src/npc/goronMerchant.c4
-rw-r--r--src/npc/guard.c17
-rw-r--r--src/npc/mailbox.c2
-rw-r--r--src/npc/malon.c9
-rw-r--r--src/npc/mayorHagen.c9
-rw-r--r--src/npc/melari.c12
-rw-r--r--src/npc/milkCart.c3
-rw-r--r--src/npc/moblinLady.c5
-rw-r--r--src/npc/mutoh.c8
-rw-r--r--src/npc/npc9.c6
-rw-r--r--src/npc/percy.c1
-rw-r--r--src/npc/postman.c11
-rw-r--r--src/npc/rem.c1
-rw-r--r--src/npc/simon.c6
-rw-r--r--src/npc/smith.c14
-rw-r--r--src/npc/stamp.c4
-rw-r--r--src/npc/syrup.c9
-rw-r--r--src/npc/talon.c6
-rw-r--r--src/npc/teachers.c9
-rw-r--r--src/npc/townMinish.c5
-rw-r--r--src/npc/townsperson.c14
-rw-r--r--src/npc/wheaton.c3
-rw-r--r--src/npc/windTribespeople.c8
-rw-r--r--src/npc/zelda.c18
-rw-r--r--src/object/archway.c3
-rw-r--r--src/object/backgroundCloud.c11
-rw-r--r--src/object/bakerOven.c4
-rw-r--r--src/object/bell.c2
-rw-r--r--src/object/bird.c10
-rw-r--r--src/object/button.c9
-rw-r--r--src/object/chestSpawner.c1
-rw-r--r--src/object/cloud.c21
-rw-r--r--src/object/fileScreenObjects.c10
-rw-r--r--src/object/floatingBlock.c1
-rw-r--r--src/object/giantLeaf.c3
-rw-r--r--src/object/greatFairy.c163
-rw-r--r--src/object/heartContainer.c6
-rw-r--r--src/object/houseDoorExterior.c6
-rw-r--r--src/object/itemOnGround.c7
-rw-r--r--src/object/jailBars.c2
-rw-r--r--src/object/lightableSwitch.c3
-rw-r--r--src/object/lilypadSmall.c3
-rw-r--r--src/object/mask.c23
-rw-r--r--src/object/metalDoor.c5
-rw-r--r--src/object/minecart.c8
-rw-r--r--src/object/minishSizedArchway.c3
-rw-r--r--src/object/minishSizedEntrance.c22
-rw-r--r--src/object/object1A.c1
-rw-r--r--src/object/object1C.c1
-rw-r--r--src/object/object1D.c2
-rw-r--r--src/object/object2A.c2
-rw-r--r--src/object/object49.c10
-rw-r--r--src/object/object7E.c2
-rw-r--r--src/object/object86.c11
-rw-r--r--src/object/object9E.c4
-rw-r--r--src/object/objectA.c1
-rw-r--r--src/object/objectA2.c1
-rw-r--r--src/object/objectA8.c8
-rw-r--r--src/object/objectAF.c1
-rw-r--r--src/object/objectB2.c2
-rw-r--r--src/object/pinwheel.c5
-rw-r--r--src/object/pot.c14
-rw-r--r--src/object/railtrack.c3
-rw-r--r--src/object/smoke.c3
-rw-r--r--src/object/thoughtBubble.c6
-rw-r--r--src/object/treeHidingPortal.c11
-rw-r--r--src/object/well.c6
-rw-r--r--src/object/windTribeFlag.c2
-rw-r--r--src/object/windcrest.c5
-rw-r--r--src/player.c715
-rw-r--r--src/playerItem.c4
-rw-r--r--src/position.c51
-rw-r--r--src/room.c46
-rw-r--r--src/script.c25
-rw-r--r--src/sub_0801D754.c17
-rw-r--r--src/sub_0804AFF4.c42
-rw-r--r--src/sub_08050008.c14
-rw-r--r--src/sub_08055E08.c1
-rw-r--r--src/sub_0805E374.c6
-rw-r--r--src/sub_0806F9EC.c13
-rw-r--r--src/sub_0806FA04.c18
-rw-r--r--src/sub_0806FA24.c10
-rw-r--r--src/sub_0807B7D8.c18
-rw-r--r--src/sub_0807B820.c41
-rw-r--r--src/sub_0807B8A8.c15
-rw-r--r--src/sub_0807B930.c15
-rw-r--r--src/sub_0807C998.c16
-rw-r--r--src/textbox.c40
-rw-r--r--src/utils.c204
320 files changed, 2900 insertions, 3870 deletions
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 0a438e7d..8b9e3fe5 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -182,7 +182,7 @@ typedef struct Entity
u32 * field_0x4;
EntityType entityType;
u8 action;
- u8 previousActionFlag;
+ u8 subAction;
u8 actionDelay;
u8 field_0xf;
u8 flags;
@@ -199,7 +199,7 @@ What's the 12th byte in this struct?
u32 * field_0x4; //4-7
EntityType entityType; //8-11
u8 action; //12
- u8 previousActionFlag; //13
+ u8 subAction; //13
```
---
diff --git a/README.md b/README.md
index fe1c53c2..02008aaa 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# The Legend of Zelda: The Minish Cap
-**Progress:** [⬛⬛⬛⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜] 25%
+**Progress:** [⬛⬛⬛⬛⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜] 30%
```diff
- WARNING! -
diff --git a/asm/bigBarrel.s b/asm/bigBarrel.s
index e7390c31..f721b772 100644
--- a/asm/bigBarrel.s
+++ b/asm/bigBarrel.s
@@ -176,7 +176,7 @@ _08088B82:
subs r1, #0x50
movs r2, #0xa0
movs r3, #0x30
- bl sub_0806FBFC
+ bl CheckPlayerProximity
cmp r0, #0
beq _08088BBA
ldrb r0, [r5]
@@ -194,7 +194,7 @@ _08088BBA:
adds r1, #0x30
movs r2, #0xa0
movs r3, #0x30
- bl sub_0806FBFC
+ bl CheckPlayerProximity
cmp r0, #0
beq _08088BDE
ldrb r0, [r5]
diff --git a/asm/bigGoron.s b/asm/bigGoron.s
index 439e2cd7..8e59000e 100644
--- a/asm/bigGoron.s
+++ b/asm/bigGoron.s
@@ -95,7 +95,7 @@ sub_0806D0B0: @ 0x0806D0B0
movs r1, #0x80
lsls r1, r1, #6
adds r0, r5, #0
- bl MemClear32
+ bl MemClear
cmp r4, #0
beq _0806D0DA
adds r0, r4, #0
@@ -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
@@ -583,7 +583,7 @@ _0806D46C:
ldrsh r1, [r4, r2]
movs r2, #0x40
movs r3, #0x40
- bl sub_0806FBFC
+ bl CheckPlayerProximity
cmp r0, #0
beq _0806D4AC
adds r2, r4, #0
@@ -724,7 +724,7 @@ _0806D540:
ldrsh r1, [r4, r2]
movs r2, #0x18
movs r3, #0x40
- bl sub_0806FBFC
+ bl CheckPlayerProximity
cmp r0, #0
beq _0806D5B4
_0806D590:
@@ -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_08000108.s b/asm/code_08000108.s
index 7fb9b84d..b54a3d0a 100644
--- a/asm/code_08000108.s
+++ b/asm/code_08000108.s
@@ -33,7 +33,7 @@ _08000136:
pop {r4, pc}
_08000138:
_08000138: .4byte gUnk_030056F1
-_0800013C: .4byte sub_0807D280
+_0800013C: .4byte sub_0807D280 @ layer 1, 2, 3?
_08000140: .4byte sub_0807D46C
_08000144: .4byte sub_0807D6D8
@@ -55,8 +55,8 @@ sub_08000152: @ 0x08000152
lsrs r2, r2, #2
non_word_aligned_thumb_func_start SetTile
-SetTile: @ 0x0800015E
- push {r4, r5, r6, r7, lr}
+SetTile: @ r0 = tile type, r1, = tile position, r2 = layer
+ push {r4-r7, lr}
lsls r3, r2, #3
ldr r4, _08000208 @ =gUnk_08000228
ldr r5, [r4, r3]
@@ -75,7 +75,7 @@ SetTile: @ 0x0800015E
ldrb r0, [r3, r4]
lsrs r2, r2, #2
bl sub_08000148
- pop {r0, r1}
+ pop {r0, r1} @ tilepos, layer
push {r0, r1}
bl DeleteLoadedTileEntity
adds r0, r7, #0
@@ -170,8 +170,8 @@ gUnk_08000278::
@ call 0x80B19CC
@ ========
@ Unused? Doesn't seem to be called by anything in Ghidra.
- thumb_func_start sub_08000288
-sub_08000288: @ 0x08000288
+ thumb_func_start GetTileAtEntityPos
+GetTileAtEntityPos: @ 0x08000288
ldr r3, _080002F4 @ =gUnk_03005740
bx r3
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_0800857C.s b/asm/code_0800857C.s
index 3522fc17..c4a611b9 100644
--- a/asm/code_0800857C.s
+++ b/asm/code_0800857C.s
@@ -719,7 +719,7 @@ sub_08008AC6: @ 0x08008AC6
movs r3, #0xe2
movs r2, #0x3d
strb r3, [r0, r2]
- bl sub_08079458
+ bl RespawnPlayer
_08008AEC:
pop {r0, pc}
diff --git a/asm/code_08016B30.s b/asm/code_08016B30.s
index 4b1079c9..059e1c4c 100644
--- a/asm/code_08016B30.s
+++ b/asm/code_08016B30.s
@@ -13,7 +13,7 @@ sub_08016B30: @ 0x08016B30
thumb_func_start sub_08016B34
sub_08016B34: @ 0x08016B34
ldr r1, _08016B54 @ =0x03007FFC
- ldr r0, _08016B58 @ =gUnk_03005D90
+ ldr r0, _08016B58 @ =IntrMain
str r0, [r1]
ldr r1, _08016B5C @ =0x04000004
ldr r2, _08016B60 @ =0x00005028
@@ -29,7 +29,7 @@ sub_08016B34: @ 0x08016B34
bx lr
.align 2, 0
_08016B54: .4byte 0x03007FFC
-_08016B58: .4byte gUnk_03005D90
+_08016B58: .4byte IntrMain
_08016B5C: .4byte 0x04000004
_08016B60: .4byte 0x00005028
_08016B64: .4byte 0x04000200
diff --git a/asm/code_08018500.s b/asm/code_08018500.s
index 182c60f8..bec8ac59 100644
--- a/asm/code_08018500.s
+++ b/asm/code_08018500.s
@@ -58,7 +58,7 @@ sub_0801855C: @ 0x0801855C
ldr r4, _08018570 @ =gUnk_02033AB8
adds r0, r4, #0
movs r1, #0x14
- bl MemClear32
+ bl MemClear
adds r5, r4, #0
ldr r4, _08018574 @ =gUnk_080B3D20
movs r6, #0
diff --git a/asm/code_0801C370.s b/asm/code_0801C370.s
index 8ca381af..88b5614f 100644
--- a/asm/code_0801C370.s
+++ b/asm/code_0801C370.s
@@ -32,7 +32,7 @@ _0801C398:
movs r1, #0xcd
lsls r1, r1, #2
adds r0, r5, #0
- bl MemClear32
+ bl MemClear
strb r6, [r5, #3]
strh r4, [r5, #0xe]
ldr r0, _0801C474 @ =gSave
@@ -48,7 +48,7 @@ _0801C398:
movs r1, #0x80
lsls r1, r1, #4
adds r0, r4, #0
- bl MemClear32
+ bl MemClear
ldr r1, _0801C47C @ =gScreen
str r4, [r1, #0x10]
ldr r0, _0801C480 @ =0x00001F0C
@@ -93,7 +93,7 @@ _0801C398:
adds r0, #0x34
movs r1, #0xc0
lsls r1, r1, #2
- bl MemClear32
+ bl MemClear
movs r0, #5
movs r1, #9
bl sub_0801CA6C
diff --git a/asm/code_0801CEC0.s b/asm/code_0801CEC0.s
index 95184820..bfdab8a3 100644
--- a/asm/code_0801CEC0.s
+++ b/asm/code_0801CEC0.s
@@ -12,7 +12,7 @@ sub_0801CFA8: @ 0x0801CFA8
adds r5, r0, #0
ldr r0, _0801CFCC @ =gUnk_02001A00
movs r1, #0x40
- bl MemClear32
+ bl MemClear
movs r4, #0
_0801CFB6:
adds r0, r4, #0
diff --git a/asm/code_0801D79C.s b/asm/code_0801D79C.s
index 6ac7a011..4cbc3a6f 100644
--- a/asm/code_0801D79C.s
+++ b/asm/code_0801D79C.s
@@ -203,7 +203,7 @@ _0801D9D8:
strh r0, [r3]
adds r0, r4, #0
mov r1, ip
- bl MemClear32
+ bl MemClear
adds r0, r4, #0
b _0801DA02
.align 2, 0
@@ -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
@@ -282,13 +282,13 @@ zMallocInit: @ 0x0801DA7C
ldr r0, _0801DA8C @ =gzHeap
movs r1, #0x80
lsls r1, r1, #5
- bl MemClear32
+ bl MemClear
pop {pc}
.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,15 +319,15 @@ 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
- bl MemClear32
+ bl MemClear
ldr r0, _0801DB0C @ =gBG0Buffer
movs r1, #0x80
lsls r1, r1, #4
- bl MemClear32
+ bl MemClear
strh r4, [r5, #0xe]
pop {r4, r5, pc}
.align 2, 0
@@ -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
@@ -369,7 +369,7 @@ sub_0801DB34: @ 0x0801DB34
ldr r4, _0801DB6C @ =gScreen
adds r0, r4, #0
movs r1, #0x7c
- bl MemClear32
+ bl MemClear
ldr r0, _0801DB70 @ =gBG0Buffer
str r0, [r4, #0x10]
ldr r0, _0801DB74 @ =0x00001F0C
@@ -424,7 +424,7 @@ sub_0801DBA0: @ 0x0801DBA0
adds r5, r1, #0
adds r1, r2, #0
adds r0, r5, #0
- bl MemClear32
+ bl MemClear
movs r0, #1
strb r0, [r5]
ldr r2, _0801DBE4 @ =gScreenTransition
@@ -699,7 +699,7 @@ _0801DDB8:
ldr r0, _0801DDE0 @ =gUnk_02019EE0
movs r1, #0x80
lsls r1, r1, #8
- bl MemClear32
+ bl MemClear
b _0801DEE2
.align 2, 0
_0801DDD8: .4byte gUnk_080C9C50
@@ -968,7 +968,7 @@ sub_0801DFB4: @ 0x0801DFB4
ldr r7, _0801E004 @ =gUnk_02022740
adds r0, r7, #0
movs r1, #0x10
- bl MemClear32
+ bl MemClear
strh r4, [r7, #6]
strh r5, [r7, #8]
strh r6, [r7, #0xa]
@@ -1209,7 +1209,7 @@ sub_0801E160: @ 0x0801E160
adds r0, r0, r4
movs r1, #0xa0
lsls r1, r1, #4
- bl MemClear32
+ bl MemClear
adds r0, r6, #0
mov r1, r8
mov r2, sb
@@ -1279,7 +1279,7 @@ sub_0801E1EC: @ 0x0801E1EC
adds r0, r0, r5
movs r1, #0xa0
lsls r1, r1, #4
- bl MemClear32
+ bl MemClear
adds r0, r4, #0
movs r1, #0
bl sub_0801E24C
@@ -1443,7 +1443,7 @@ sub_0801E31C: @ 0x0801E31C
adds r0, r0, r1
movs r1, #0xa0
lsls r1, r1, #4
- bl MemClear32
+ bl MemClear
cmp sl, sb
bge _0801E3DC
movs r6, #0
@@ -1738,7 +1738,7 @@ sub_0801E49C: @ 0x0801E49C
adds r0, r0, r6
movs r1, #0xa0
lsls r1, r1, #4
- bl MemClear32
+ bl MemClear
ldr r2, _0801E5E8 @ =gUnk_02018EE0
ldrb r1, [r5]
lsls r0, r1, #2
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_0804B9F8.s b/asm/code_0804B9F8.s
index 6ee254e6..a564376f 100644
--- a/asm/code_0804B9F8.s
+++ b/asm/code_0804B9F8.s
@@ -50,10 +50,10 @@ sub_0804FFE4: @ 0x0804FFE4
ldr r4, _08050000 @ =gFadeControl
adds r0, r4, #0
movs r1, #0x1c
- bl MemClear32
+ bl MemClear
ldr r0, _08050004 @ =gUnk_020354C0
movs r1, #0x80
- bl MemClear32
+ bl MemClear
movs r0, #1
rsbs r0, r0, #0
str r0, [r4, #4]
diff --git a/asm/code_080526F8.s b/asm/code_080526F8.s
index 2b0f3061..150d4fea 100644
--- a/asm/code_080526F8.s
+++ b/asm/code_080526F8.s
@@ -791,7 +791,7 @@ sub_08052CFC: @ 0x08052CFC
ldr r4, _08052D44 @ =gArea
ldr r1, _08052D48 @ =0x00000894
adds r0, r4, #0
- bl MemClear32
+ bl MemClear
ldr r0, _08052D4C @ =gRoomControls
ldrb r1, [r0, #4]
lsls r1, r1, #2
@@ -996,7 +996,7 @@ sub_08052EA0: @ 0x08052EA0
ldr r4, _08052EE4 @ =gRoomVars
adds r0, r4, #0
movs r1, #0xcc
- bl MemClear32
+ bl MemClear
movs r0, #0xff
strb r0, [r4, #0x10]
strb r0, [r4, #0x11]
@@ -1178,7 +1178,7 @@ sub_08052FF4: @ 0x08052FF4
ldr r5, _08053074 @ =gUnk_020342CC
adds r0, r5, #0
movs r1, #0x20
- bl MemClear32
+ bl MemClear
str r5, [r5, #0x20]
ldr r0, _08053078 @ =gAreaRoomHeaders
lsls r6, r6, #2
@@ -1570,17 +1570,17 @@ sub_08053320: @ 0x08053320
movs r4, #0x80
lsls r4, r4, #4
adds r1, r4, #0
- bl MemClear32
+ bl MemClear
ldr r0, _08053380 @ =gBG1Buffer
adds r1, r4, #0
- bl MemClear32
+ bl MemClear
ldr r0, _08053384 @ =gBG2Buffer
adds r1, r4, #0
- bl MemClear32
+ bl MemClear
ldr r0, _08053388 @ =gBG3Buffer
movs r1, #0x80
lsls r1, r1, #5
- bl MemClear32
+ bl MemClear
movs r0, #0x10
bl LoadGfxGroup
movs r0, #0x17
@@ -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
@@ -2222,7 +2222,7 @@ sub_08053800: @ 0x08053800
ldr r0, _08053888 @ =gBG1Buffer
movs r1, #0x80
lsls r1, r1, #4
- bl MemClear32
+ bl MemClear
ldr r0, _0805388C @ =0x00000F01
adds r5, r5, r0
ldr r1, [r4]
@@ -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_08056418.s b/asm/code_08056418.s
index 97457697..144005f4 100644
--- a/asm/code_08056418.s
+++ b/asm/code_08056418.s
@@ -267,11 +267,11 @@ _080568B2:
beq _080568D2
adds r0, r6, #0
movs r1, #4
- bl MemClear32
+ bl MemClear
ldr r4, _08056910 @ =gUnk_02024030
adds r0, r4, #0
movs r1, #0x18
- bl MemClear32
+ bl MemClear
movs r0, #1
strb r0, [r4]
strb r0, [r6]
@@ -472,7 +472,7 @@ _08056A30:
movs r1, #3
strb r1, [r2]
movs r1, #0x18
- bl MemClear32
+ bl MemClear
movs r0, #0x6a
bl SoundReq
adds r1, r6, #0
diff --git a/asm/code_0805E3B0.s b/asm/code_0805E3B0.s
index ba150ef6..5a0336df 100644
--- a/asm/code_0805E3B0.s
+++ b/asm/code_0805E3B0.s
@@ -360,15 +360,15 @@ EraseAllEntities: @ 0x0805E60C
bl DeleteAllEntities
ldr r0, _0805E654 @ =gUnk_03003DC0
movs r1, #0xc
- bl MemClear32
+ bl MemClear
ldr r0, _0805E658 @ =gPlayerEntity
movs r1, #0xaa
lsls r1, r1, #6
- bl MemClear32
+ bl MemClear
ldr r0, _0805E65C @ =gUnk_02033290
movs r1, #0x80
lsls r1, r1, #4
- bl MemClear32
+ bl MemClear
bl sub_0805E98C
ldr r0, _0805E660 @ =gEntCount
movs r1, #0
diff --git a/asm/code_0805EC04.s b/asm/code_0805EC04.s
index 45cad29a..6c8dc59f 100644
--- a/asm/code_0805EC04.s
+++ b/asm/code_0805EC04.s
@@ -751,7 +751,7 @@ _0805F2D0:
bne _0805F2F0
adds r0, r5, #0
movs r1, #0xc
- bl MemClear32
+ bl MemClear
ldrb r0, [r4]
movs r1, #1
orrs r0, r1
@@ -781,7 +781,7 @@ _0805F308:
cmp r0, r2
bne _0805F318
movs r1, #0xc
- bl MemClear32
+ bl MemClear
b _0805F320
.align 2, 0
_0805F314: .4byte gUnk_02036540
@@ -944,7 +944,7 @@ sub_0805F440: @ 0x0805F440
adds r4, r0, #0
adds r5, r1, #0
movs r1, #0x30
- bl MemClear32
+ bl MemClear
ldr r0, _0805F45C @ =0x0000FFFF
cmp r5, r0
bls _0805F460
@@ -1122,7 +1122,7 @@ _0805F596:
_0805F59E:
ldr r0, _0805F5C8 @ =gUnk_02034330
movs r1, #0x18
- bl MemClear32
+ bl MemClear
_0805F5A6:
mov r0, sb
mov r1, sp
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 264756c7..d6735892 100644
--- a/asm/code_0806ED78.s
+++ b/asm/code_0806ED78.s
@@ -842,7 +842,7 @@ sub_0806F364: @ 0x0806F364
adds r1, r2, r3
adds r0, r0, r1
movs r1, #0x10
- bl MemClear32
+ bl MemClear
pop {pc}
.align 2, 0
_0806F384: .4byte gArea
@@ -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 81ff4789..f006651f 100644
--- a/asm/code_0806FA6C.s
+++ b/asm/code_0806FA6C.s
@@ -139,13 +139,13 @@ 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}
- thumb_func_start sub_0806FBFC
-sub_0806FBFC: @ 0x0806FBFC
+ thumb_func_start CheckPlayerProximity
+CheckPlayerProximity: @ 0x0806FBFC
push {r4, r5, r6, lr}
adds r5, r3, #0
ldr r4, _0806FC20 @ =gPlayerEntity
@@ -385,7 +385,7 @@ sub_0806FD8C: @ 0x0806FD8C
ldr r0, _0806FD9C @ =gUnk_020000C0
movs r1, #0xc0
lsls r1, r1, #4
- bl MemClear32
+ bl MemClear
pop {pc}
.align 2, 0
_0806FD9C: .4byte gUnk_020000C0
@@ -534,7 +534,7 @@ _0806FE9E:
bls _0806FE9E
adds r0, r6, #0
movs r1, #0x40
- bl MemClear32
+ bl MemClear
_0806FEB4:
pop {r4, r5, r6, pc}
.align 2, 0
@@ -1454,7 +1454,7 @@ sub_0807059C: @ 0x0807059C
push {lr}
ldr r0, _080705A8 @ =gUnk_02034490
movs r1, #0x18
- bl MemClear32
+ bl MemClear
pop {pc}
.align 2, 0
_080705A8: .4byte gUnk_02034490
diff --git a/asm/code_08070698.s b/asm/code_08070698.s
index 10b20c3e..69452e1c 100644
--- a/asm/code_08070698.s
+++ b/asm/code_08070698.s
@@ -6,1322 +6,9 @@
.text
- thumb_func_start sub_080714A8
-sub_080714A8: @ 0x080714A8
- push {r4, lr}
- adds r4, r0, #0
- ldr r0, _08071524 @ =gArea
- ldrb r0, [r0, #0x17]
- cmp r0, #5
- bgt _080714BE
- cmp r0, #4
- blt _080714BE
- ldr r0, _08071528 @ =gPlayerEntity
- bl sub_0806F948
-_080714BE:
- ldr r3, _0807152C @ =gPlayerState
- ldrb r1, [r3, #0xd]
- movs r0, #0x84
- ands r0, r1
- cmp r0, #0
- bne _0807153E
- ldrb r0, [r4, #0x15]
- cmp r0, r1
- beq _080714D4
- movs r0, #8
- strb r0, [r4, #0xe]
-_080714D4:
- ldrb r0, [r4, #0xe]
- subs r0, #1
- strb r0, [r4, #0xe]
- lsls r0, r0, #0x18
- lsrs r0, r0, #0x18
- cmp r0, #0xff
- bne _08071538
- ldrb r0, [r3, #0xd]
- strb r0, [r4, #0x15]
- lsls r0, r0, #0x18
- lsrs r0, r0, #0x1a
- strb r0, [r4, #0x14]
- movs r0, #0x80
- lsls r0, r0, #0xa
- str r0, [r4, #0x20]
- movs r1, #0
- movs r0, #0x80
- lsls r0, r0, #1
- strh r0, [r4, #0x24]
- movs r0, #9
- strb r0, [r4, #0xc]
- movs r0, #7
- strb r0, [r4, #0xd]
- strb r1, [r4, #0xf]
- ldr r1, [r3, #0x30]
- movs r0, #8
- ands r0, r1
- ldr r4, _08071530 @ =0x0000080C
- adds r2, r4, #0
- cmp r0, #0
- beq _08071516
- ldr r0, _08071534 @ =0x0000041C
- adds r2, r0, #0
-_08071516:
- strh r2, [r3, #8]
- movs r0, #0x21
- rsbs r0, r0, #0
- ands r1, r0
- str r1, [r3, #0x30]
- b _0807156A
- .align 2, 0
-_08071524: .4byte gArea
-_08071528: .4byte gPlayerEntity
-_0807152C: .4byte gPlayerState
-_08071530: .4byte 0x0000080C
-_08071534: .4byte 0x0000041C
-_08071538:
- ldrb r0, [r3, #0xd]
- strb r0, [r4, #0x15]
- b _08071542
-_0807153E:
- movs r0, #8
- strb r0, [r4, #0xe]
-_08071542:
- ldr r0, _0807155C @ =gArea
- ldrb r0, [r0, #0x17]
- cmp r0, #4
- bne _08071560
- adds r0, r4, #0
- adds r0, #0x5a
- ldrb r0, [r0]
- cmp r0, #0
- bne _08071566
- adds r0, r4, #0
- bl UpdateAnimationSingleFrame
- b _0807156A
- .align 2, 0
-_0807155C: .4byte gArea
-_08071560:
- adds r0, r4, #0
- bl sub_08077698
-_08071566:
- bl sub_08079938
-_0807156A:
- pop {r4, pc}
-
- thumb_func_start sub_0807156C
-sub_0807156C: @ 0x0807156C
- push {lr}
- ldr r2, _080715A0 @ =gRoomControls
- movs r1, #0
- str r1, [r2, #0x30]
- ldr r2, _080715A4 @ =gUnk_02034490
- movs r1, #1
- strb r1, [r2]
- movs r1, #3
- strb r1, [r0, #0xd]
- movs r1, #0x1e
- strb r1, [r0, #0xf]
- ldr r2, _080715A8 @ =gPlayerState
- movs r1, #0xe7
- lsls r1, r1, #3
- strh r1, [r2, #8]
- movs r1, #6
- movs r2, #1
- movs r3, #0
- bl CreateObjectWithParent
- bl sub_08077B20
- bl sub_0805E544
- pop {pc}
- .align 2, 0
-_080715A0: .4byte gRoomControls
-_080715A4: .4byte gUnk_02034490
-_080715A8: .4byte gPlayerState
-
- thumb_func_start sub_080715AC
-sub_080715AC: @ 0x080715AC
- push {r4, lr}
- adds r4, r0, #0
- ldrb r0, [r4, #0xf]
- cmp r0, #0
- bne _080715CC
- adds r0, r4, #0
- bl UpdateAnimationSingleFrame
- ldr r0, _080715D0 @ =gPlayerState
- ldr r0, [r0, #0x30]
- movs r1, #0x80
- ands r0, r1
- cmp r0, #0
- beq _080715CC
- movs r0, #4
- strb r0, [r4, #0xd]
-_080715CC:
- pop {r4, pc}
- .align 2, 0
-_080715D0: .4byte gPlayerState
-
- thumb_func_start sub_080715D4
-sub_080715D4: @ 0x080715D4
- push {lr}
- adds r3, r0, #0
- movs r2, #0
- movs r0, #5
- strb r0, [r3, #0xd]
- movs r0, #0x29
- adds r0, r0, r3
- mov ip, r0
- ldrb r1, [r0]
- movs r0, #0x39
- rsbs r0, r0, #0
- ands r0, r1
- mov r1, ip
- strb r0, [r1]
- strb r2, [r3, #0xf]
- ldrb r0, [r3, #0x19]
- movs r1, #3
- orrs r0, r1
- strb r0, [r3, #0x19]
- adds r0, r3, #0
- adds r0, #0x80
- movs r2, #0x80
- lsls r2, r2, #1
- str r2, [r0]
- adds r0, #4
- str r2, [r0]
- adds r0, r3, #0
- adds r1, r2, #0
- movs r3, #0
- bl sub_0805EC9C
- ldr r2, _08071628 @ =gPlayerState
- ldr r0, _0807162C @ =0x000002C3
- strh r0, [r2, #8]
- ldr r0, [r2, #0x30]
- movs r1, #0x80
- orrs r0, r1
- str r0, [r2, #0x30]
- ldr r0, _08071630 @ =0x0000016F
- bl SoundReq
- pop {pc}
- .align 2, 0
-_08071628: .4byte gPlayerState
-_0807162C: .4byte 0x000002C3
-_08071630: .4byte 0x0000016F
-
- thumb_func_start sub_08071634
-sub_08071634: @ 0x08071634
- push {r4, r5, r6, r7, lr}
- mov r7, r8
- push {r7}
- adds r5, r0, #0
- adds r0, #0x81
- ldrb r0, [r0]
- cmp r0, #0
- beq _08071654
- adds r1, r5, #0
- adds r1, #0x80
- ldr r0, [r1]
- adds r0, #0x80
- lsls r0, r0, #0x14
- lsrs r7, r0, #0x17
- adds r4, r1, #0
- b _0807166A
-_08071654:
- adds r4, r5, #0
- adds r4, #0x80
- ldrb r1, [r4]
- lsrs r1, r1, #6
- movs r0, #3
- eors r1, r0
- adds r1, #1
- movs r0, #0x10
- bl __divsi3
- asrs r7, r0, #1
-_0807166A:
- adds r0, r5, #0
- adds r0, #0x84
- ldr r3, [r0]
- movs r1, #0x80
- lsls r1, r1, #1
- adds r2, r0, #0
- cmp r3, r1
- bls _08071684
- adds r0, r3, #0
- adds r0, #0x80
- lsls r0, r0, #0x14
- lsrs r3, r0, #0x17
- b _08071694
-_08071684:
- cmp r3, r1
- bne _0807168C
- movs r3, #0x10
- b _08071694
-_0807168C:
- ldr r1, _080716B0 @ =gUnk_0811BABC
- lsrs r0, r3, #5
- adds r0, r0, r1
- ldrb r3, [r0]
-_08071694:
- movs r0, #0x80
- lsls r0, r0, #9
- mov r8, r0
- adds r0, r5, #0
- adds r0, #0x5a
- ldrb r0, [r0]
- cmp r0, #2
- beq _080716EA
- cmp r0, #2
- bgt _080716B4
- cmp r0, #1
- beq _080716BA
- b _08071754
- .align 2, 0
-_080716B0: .4byte gUnk_0811BABC
-_080716B4:
- cmp r0, #3
- beq _0807171E
- b _08071754
-_080716BA:
- movs r1, #0x29
- adds r1, r1, r5
- mov ip, r1
- ldrb r1, [r1]
- movs r0, #0x39
- rsbs r0, r0, #0
- ands r0, r1
- mov r1, ip
- strb r0, [r1]
- ldr r0, [r4]
- cmp r0, #0x80
- bls _080716D6
- subs r0, r0, r7
- str r0, [r4]
-_080716D6:
- lsls r1, r3, #1
- ldr r0, [r2]
- adds r0, r0, r1
- str r0, [r2]
- mov r0, r8
- lsls r1, r0, #1
- ldr r0, [r5, #0x30]
- adds r0, r0, r1
- str r0, [r5, #0x30]
- b _08071754
-_080716EA:
- ldr r0, [r4]
- adds r0, r0, r7
- str r0, [r4]
- ldr r1, [r2]
- movs r6, #0x80
- lsls r6, r6, #1
- cmp r1, r6
- bls _08071710
- ldr r0, _0807170C @ =0x0000017F
- cmp r1, r0
- bhi _08071702
- lsrs r3, r3, #1
-_08071702:
- subs r0, r1, r3
- cmp r0, #0xff
- bhi _08071716
- str r6, [r2]
- b _08071718
- .align 2, 0
-_0807170C: .4byte 0x0000017F
-_08071710:
- cmp r1, #0x80
- bls _08071718
- subs r0, r1, r3
-_08071716:
- str r0, [r2]
-_08071718:
- ldr r0, [r5, #0x34]
- mov r1, r8
- b _08071750
-_0807171E:
- ldr r0, [r4]
- ldr r6, _08071740 @ =0x0000033F
- cmp r0, r6
- bhi _0807172A
- adds r0, r0, r7
- str r0, [r4]
-_0807172A:
- ldr r1, [r2]
- cmp r1, r6
- bls _08071744
- movs r0, #8
- strb r0, [r5, #0xe]
- movs r0, #0x1e
- strb r0, [r5, #0xf]
- movs r0, #6
- strb r0, [r5, #0xd]
- b _0807174A
- .align 2, 0
-_08071740: .4byte 0x0000033F
-_08071744:
- lsls r0, r3, #1
- adds r0, r1, r0
- str r0, [r2]
-_0807174A:
- mov r0, r8
- lsls r1, r0, #1
- ldr r0, [r5, #0x34]
-_08071750:
- subs r0, r0, r1
- str r0, [r5, #0x34]
-_08071754:
- ldr r1, [r4]
- ldr r2, [r2]
- adds r0, r5, #0
- movs r3, #0
- bl sub_0805EC9C
- adds r0, r5, #0
- bl UpdateAnimationSingleFrame
- pop {r3}
- mov r8, r3
- pop {r4, r5, r6, r7, pc}
-
- thumb_func_start sub_0807176C
-sub_0807176C: @ 0x0807176C
- push {r4, lr}
- adds r4, r0, #0
- ldrb r0, [r4, #0xe]
- cmp r0, #0
- bne _080717C6
- movs r1, #0x80
- lsls r1, r1, #6
- adds r0, r4, #0
- bl sub_08003FC4
- cmp r0, #0
- bne _080717CA
- ldrb r1, [r4, #0x18]
- movs r0, #4
- rsbs r0, r0, #0
- ands r0, r1
- strb r0, [r4, #0x18]
- ldr r1, _080717AC @ =gArea
- ldrb r0, [r1, #0x17]
- cmp r0, #3
- bne _080717B0
- ldrb r0, [r4, #0xf]
- subs r0, #1
- strb r0, [r4, #0xf]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _080717CA
- adds r0, r4, #0
- bl sub_080717F8
- b _080717CA
- .align 2, 0
-_080717AC: .4byte gArea
-_080717B0:
- cmp r0, #6
- bne _080717C0
- ldr r0, _080717BC @ =gUnk_0813AB58
- bl DoExitTransition
- b _080717CA
- .align 2, 0
-_080717BC: .4byte gUnk_0813AB58
-_080717C0:
- movs r0, #1
- strb r0, [r1, #0x19]
- b _080717CA
-_080717C6:
- subs r0, #1
- strb r0, [r4, #0xe]
-_080717CA:
- pop {r4, pc}
-
- thumb_func_start sub_080717CC
-sub_080717CC: @ 0x080717CC
- push {lr}
- adds r1, r0, #0
- ldr r0, _080717E4 @ =gFadeControl
- ldrb r0, [r0]
- cmp r0, #0
- bne _080717F4
- ldrb r0, [r1, #0xe]
- cmp r0, #0
- beq _080717E8
- subs r0, #1
- strb r0, [r1, #0xe]
- b _080717F4
- .align 2, 0
-_080717E4: .4byte gFadeControl
-_080717E8:
- adds r0, r1, #0
- bl sub_080717F8
- movs r0, #0x10
- bl sub_080500F4
-_080717F4:
- pop {pc}
- .align 2, 0
-
- thumb_func_start sub_080717F8
-sub_080717F8: @ 0x080717F8
- push {r4, lr}
- ldr r2, _08071850 @ =gArea
- ldrb r1, [r2, #0x16]
- lsls r1, r1, #1
- strb r1, [r0, #0x14]
- ldr r3, _08071854 @ =gUnk_0811BAC4
- ldrb r1, [r2, #0x16]
- lsls r1, r1, #2
- adds r1, r1, r3
- ldrh r1, [r1]
- ldrh r4, [r2, #0x12]
- adds r1, r1, r4
- movs r4, #0
- strh r1, [r0, #0x2e]
- ldrb r1, [r2, #0x16]
- lsls r1, r1, #1
- adds r1, #1
- lsls r1, r1, #1
- adds r1, r1, r3
- ldrh r1, [r1]
- ldrh r3, [r2, #0x14]
- adds r1, r1, r3
- strh r1, [r0, #0x32]
- movs r1, #0xb4
- strb r1, [r2, #0x1a]
- ldr r1, _08071858 @ =gUnk_02034490
- strb r4, [r1]
- movs r1, #9
- strb r1, [r0, #0xc]
- strb r4, [r0, #0xd]
- ldr r3, _0807185C @ =gPlayerState
- ldr r1, [r3, #0x30]
- movs r2, #0x21
- rsbs r2, r2, #0
- ands r1, r2
- movs r2, #0x80
- orrs r1, r2
- str r1, [r3, #0x30]
- bl sub_0805EC60
- bl UnfreezeTime
- pop {r4, pc}
- .align 2, 0
-_08071850: .4byte gArea
-_08071854: .4byte gUnk_0811BAC4
-_08071858: .4byte gUnk_02034490
-_0807185C: .4byte gPlayerState
-
- thumb_func_start sub_08071860
-sub_08071860: @ 0x08071860
- push {r4, lr}
- adds r4, r0, #0
- bl sub_08078EFC
- cmp r0, #0
- beq _08071876
- bl sub_08056360
- bl sub_08071A6C
- b _08071896
-_08071876:
- ldr r0, _08071898 @ =gPlayerState
- adds r0, #0xa8
- movs r1, #0x13
- strb r1, [r0]
- ldrb r1, [r4, #0x10]
- movs r0, #0x7f
- ands r0, r1
- strb r0, [r4, #0x10]
- ldr r1, _0807189C @ =gUnk_0811BAD4
- ldrb r0, [r4, #0xd]
- lsls r0, r0, #2
- adds r0, r0, r1
- ldr r1, [r0]
- adds r0, r4, #0
- bl _call_via_r1
-_08071896:
- pop {r4, pc}
- .align 2, 0
-_08071898: .4byte gPlayerState
-_0807189C: .4byte gUnk_0811BAD4
-
- thumb_func_start sub_080718A0
-sub_080718A0: @ 0x080718A0
- push {r4, r5, lr}
- adds r4, r0, #0
- bl ResetPlayer
- ldr r0, _080718EC @ =gUnk_03000B80
- adds r0, #0x63
- movs r1, #0
- strb r1, [r0]
- adds r0, r4, #0
- adds r0, #0x3d
- strb r1, [r0]
- ldr r1, _080718F0 @ =gUnk_03003DC0
- movs r2, #6
- movs r0, #6
- strb r0, [r1]
- ldrb r1, [r4, #0x11]
- subs r0, #0x16
- ands r0, r1
- orrs r0, r2
- strb r0, [r4, #0x11]
- ldr r5, _080718F4 @ =gPlayerState
- ldr r0, [r5, #0x30]
- movs r1, #0x80
- ands r0, r1
- cmp r0, #0
- beq _080718F8
- movs r0, #2
- strb r0, [r4, #0xd]
- adds r2, r4, #0
- adds r2, #0x29
- ldrb r1, [r2]
- subs r0, #0x3b
- ands r0, r1
- strb r0, [r2]
- bl sub_08052BB8
- b _08071938
- .align 2, 0
-_080718EC: .4byte gUnk_03000B80
-_080718F0: .4byte gUnk_03003DC0
-_080718F4: .4byte gPlayerState
-_080718F8:
- ldrb r0, [r5, #2]
- cmp r0, #0
- bne _08071928
- ldrb r0, [r4, #0xd]
- adds r0, #1
- strb r0, [r4, #0xd]
- ldrb r0, [r4, #0x14]
- cmp r0, #2
- bne _08071914
- ldr r0, _08071910 @ =0x000003CA
- b _08071916
- .align 2, 0
-_08071910: .4byte 0x000003CA
-_08071914:
- ldr r0, _08071924 @ =0x000003C6
-_08071916:
- strh r0, [r5, #8]
- ldrb r1, [r4, #0x18]
- movs r0, #0x41
- rsbs r0, r0, #0
- ands r0, r1
- strb r0, [r4, #0x18]
- b _08071938
- .align 2, 0
-_08071924: .4byte 0x000003C6
-_08071928:
- movs r1, #0x80
- lsls r1, r1, #6
- adds r0, r4, #0
- bl sub_08003FC4
- cmp r0, #0
- bne _08071938
- strb r0, [r5, #2]
-_08071938:
- pop {r4, r5, pc}
- .align 2, 0
-
- thumb_func_start sub_0807193C
-sub_0807193C: @ 0x0807193C
- push {r4, lr}
- adds r4, r0, #0
- bl UpdateAnimationSingleFrame
- adds r0, r4, #0
- adds r0, #0x5a
- ldrb r1, [r0]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- beq _08071986
- ldrb r0, [r4, #0xd]
- adds r0, #1
- strb r0, [r4, #0xd]
- adds r0, r4, #0
- movs r1, #6
- movs r2, #0
- movs r3, #0
- bl CreateObjectWithParent
- str r0, [r4, #0x54]
- cmp r0, #0
- beq _08071986
- ldrb r0, [r4, #0x14]
- cmp r0, #2
- bne _0807197C
- ldr r1, _08071978 @ =gPlayerState
- movs r0, #0xf3
- lsls r0, r0, #2
- b _08071980
- .align 2, 0
-_08071978: .4byte gPlayerState
-_0807197C:
- ldr r1, _08071988 @ =gPlayerState
- ldr r0, _0807198C @ =0x000003C7
-_08071980:
- strh r0, [r1, #8]
- bl sub_08052BB8
-_08071986:
- pop {r4, pc}
- .align 2, 0
-_08071988: .4byte gPlayerState
-_0807198C: .4byte 0x000003C7
-
- thumb_func_start sub_08071990
-sub_08071990: @ 0x08071990
- push {r4, lr}
- adds r2, r0, #0
- ldr r0, _080719C0 @ =gTextBox
- ldrb r1, [r0]
- movs r0, #0x7f
- ands r0, r1
- cmp r0, #0
- bne _080719E2
- ldrb r0, [r2, #0xd]
- adds r0, #1
- strb r0, [r2, #0xd]
- ldr r3, _080719C4 @ =gPlayerState
- ldr r0, [r3, #0x30]
- movs r1, #0x80
- ands r0, r1
- cmp r0, #0
- bne _080719D8
- ldrb r0, [r2, #0x14]
- cmp r0, #2
- bne _080719CC
- ldr r0, _080719C8 @ =0x000003CD
- strh r0, [r3, #8]
- b _08071A4A
- .align 2, 0
-_080719C0: .4byte gTextBox
-_080719C4: .4byte gPlayerState
-_080719C8: .4byte 0x000003CD
-_080719CC:
- ldr r0, _080719D4 @ =0x000003C9
- strh r0, [r3, #8]
- b _08071A4A
- .align 2, 0
-_080719D4: .4byte 0x000003C9
-_080719D8:
- bl sub_08071A6C
- bl sub_08079258
- b _08071A4A
-_080719E2:
- ldr r4, _08071A20 @ =gPlayerState
- ldr r0, [r4, #0x30]
- movs r1, #0x80
- ands r0, r1
- cmp r0, #0
- bne _08071A4A
- ldrb r0, [r2, #0x14]
- movs r3, #0
- cmp r0, #2
- bne _080719F8
- movs r3, #4
-_080719F8:
- ldr r0, [r2, #0x54]
- ldrb r0, [r0, #0xe]
- cmp r0, #0
- beq _08071A24
- adds r0, r3, #0
- adds r0, #0xc8
- adds r1, r2, #0
- adds r1, #0x58
- lsls r0, r0, #0x18
- lsrs r0, r0, #0x18
- ldrb r1, [r1]
- cmp r0, r1
- beq _08071A44
- movs r1, #0xf2
- lsls r1, r1, #2
- adds r0, r1, #0
- adds r0, r3, r0
- strh r0, [r4, #8]
- b _08071A4A
- .align 2, 0
-_08071A20: .4byte gPlayerState
-_08071A24:
- adds r0, r3, #0
- adds r0, #0xc7
- adds r1, r2, #0
- adds r1, #0x58
- lsls r0, r0, #0x18
- lsrs r0, r0, #0x18
- ldrb r1, [r1]
- cmp r0, r1
- beq _08071A44
- ldr r1, _08071A40 @ =0x000003C7
- adds r0, r3, r1
- strh r0, [r4, #8]
- b _08071A4A
- .align 2, 0
-_08071A40: .4byte 0x000003C7
-_08071A44:
- adds r0, r2, #0
- bl UpdateAnimationSingleFrame
-_08071A4A:
- pop {r4, pc}
-
- thumb_func_start sub_08071A4C
-sub_08071A4C: @ 0x08071A4C
- push {r4, lr}
- adds r4, r0, #0
- bl UpdateAnimationSingleFrame
- adds r4, #0x5a
- ldrb r1, [r4]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- beq _08071A68
- bl sub_08071A6C
- bl sub_0807921C
-_08071A68:
- pop {r4, pc}
- .align 2, 0
-
- thumb_func_start sub_08071A6C
-sub_08071A6C: @ 0x08071A6C
- ldr r1, _08071A84 @ =gUnk_03003DC0
- movs r0, #0
- strb r0, [r1]
- ldr r3, _08071A88 @ =gPlayerEntity
- ldrb r1, [r3, #0x11]
- lsrs r2, r1, #4
- subs r0, #0x10
- ands r0, r1
- orrs r0, r2
- strb r0, [r3, #0x11]
- bx lr
- .align 2, 0
-_08071A84: .4byte gUnk_03003DC0
-_08071A88: .4byte gPlayerEntity
-
- thumb_func_start sub_08071A8C
-sub_08071A8C: @ 0x08071A8C
- push {lr}
- ldr r1, _08071AA8 @ =gPlayerState
- adds r1, #0xa8
- movs r2, #0x19
- strb r2, [r1]
- ldr r2, _08071AAC @ =gUnk_0811BAE4
- ldrb r1, [r0, #0xd]
- lsls r1, r1, #2
- adds r1, r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- pop {pc}
- .align 2, 0
-_08071AA8: .4byte gPlayerState
-_08071AAC: .4byte gUnk_0811BAE4
-
- thumb_func_start sub_08071AB0
-sub_08071AB0: @ 0x08071AB0
- push {r4, lr}
- adds r3, r0, #0
- ldrb r0, [r3, #0xd]
- adds r0, #1
- strb r0, [r3, #0xd]
- ldr r1, _08071AD8 @ =gPlayerState
- ldr r2, [r1, #0x30]
- movs r0, #1
- orrs r2, r0
- str r2, [r1, #0x30]
- ldrb r4, [r3, #0xa]
- cmp r4, #1
- bne _08071ADC
- movs r1, #0
- movs r0, #0
- strh r0, [r3, #0x24]
- strb r1, [r3, #0xe]
- strb r4, [r3, #0xf]
- b _08071AE8
- .align 2, 0
-_08071AD8: .4byte gPlayerState
-_08071ADC:
- movs r0, #0x80
- ands r2, r0
- cmp r2, #0
- beq _08071AE6
- movs r0, #0x40
-_08071AE6:
- strh r0, [r3, #0x24]
-_08071AE8:
- adds r0, r3, #0
- bl sub_08071AF0
- pop {r4, pc}
-
- thumb_func_start sub_08071AF0
-sub_08071AF0: @ 0x08071AF0
- push {r4, r5, lr}
- adds r4, r0, #0
- ldr r5, _08071B34 @ =gPlayerState
- adds r0, r5, #0
- adds r0, #0x80
- movs r1, #0
- strh r1, [r0]
- adds r0, r4, #0
- bl UpdateAnimationSingleFrame
- ldrb r0, [r4, #0xa]
- cmp r0, #1
- bne _08071B44
- ldrb r0, [r4, #0xf]
- subs r0, #1
- strb r0, [r4, #0xf]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _08071B58
- ldr r0, _08071B38 @ =gUnk_0811BAF0
- ldrb r1, [r4, #0xe]
- lsls r1, r1, #2
- adds r1, r1, r0
- ldrb r2, [r1]
- adds r0, r2, #0
- cmp r0, #0xff
- beq _08071B3C
- strb r2, [r4, #0xf]
- ldrh r0, [r1, #2]
- strh r0, [r4, #0x24]
- ldrb r0, [r4, #0xe]
- adds r0, #1
- strb r0, [r4, #0xe]
- b _08071B58
- .align 2, 0
-_08071B34: .4byte gPlayerState
-_08071B38: .4byte gUnk_0811BAF0
-_08071B3C:
- ldrb r0, [r4, #0xd]
- adds r0, #1
- strb r0, [r4, #0xd]
- b _08071B5C
-_08071B44:
- ldrb r0, [r5, #6]
- subs r0, #1
- strb r0, [r5, #6]
- movs r1, #0x7f
- ands r0, r1
- cmp r0, #0
- bne _08071B58
- ldrb r0, [r4, #0xd]
- adds r0, #1
- strb r0, [r4, #0xd]
-_08071B58:
- bl sub_08079E08
-_08071B5C:
- pop {r4, r5, pc}
- .align 2, 0
-
- thumb_func_start sub_08071B60
-sub_08071B60: @ 0x08071B60
- push {r4, r5, lr}
- adds r4, r0, #0
- ldr r5, _08071BAC @ =gPlayerState
- movs r2, #0
- movs r0, #2
- strb r0, [r5, #6]
- ldr r0, [r5, #0x30]
- movs r1, #2
- rsbs r1, r1, #0
- ands r0, r1
- str r0, [r5, #0x30]
- strb r2, [r4, #0xa]
- adds r0, r4, #0
- adds r0, #0x42
- strb r2, [r0]
- adds r0, r4, #0
- bl sub_080728AC
- movs r0, #6
- strb r0, [r4, #0xf]
- ldr r0, [r5, #0x30]
- movs r1, #0x80
- ands r0, r1
- cmp r0, #0
- bne _08071BA8
- movs r0, #0x82
- lsls r0, r0, #1
- strh r0, [r5, #8]
- movs r0, #3
- strh r0, [r4, #0x12]
- ldrb r1, [r4, #0x14]
- lsrs r1, r1, #1
- adds r1, #0x3c
- adds r0, r4, #0
- bl InitAnimationForceUpdate
-_08071BA8:
- pop {r4, r5, pc}
- .align 2, 0
-_08071BAC: .4byte gPlayerState
-
- thumb_func_start sub_08071BB0
-sub_08071BB0: @ 0x08071BB0
- push {lr}
- ldrb r2, [r0, #0x10]
- movs r1, #0x7f
- ands r1, r2
- strb r1, [r0, #0x10]
- ldr r2, _08071BD4 @ =gUnk_0811BB2C
- ldrb r1, [r0, #0xd]
- lsls r1, r1, #2
- adds r1, r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- ldr r0, _08071BD8 @ =gPlayerState
- adds r0, #0xa8
- movs r1, #0x12
- strb r1, [r0]
- pop {pc}
- .align 2, 0
-_08071BD4: .4byte gUnk_0811BB2C
-_08071BD8: .4byte gPlayerState
-
- thumb_func_start sub_08071BDC
-sub_08071BDC: @ 0x08071BDC
- push {r4, r5, lr}
- adds r4, r0, #0
- ldr r5, _08071C10 @ =gPlayerState
- ldr r0, [r5, #0x30]
- movs r1, #0x88
- lsls r1, r1, #1
- ands r0, r1
- cmp r0, #0
- bne _08071C9C
- movs r1, #0x80
- lsls r1, r1, #6
- adds r0, r4, #0
- bl sub_08003FC4
- cmp r0, #0
- beq _08071C1C
- ldr r0, [r5, #0x30]
- movs r1, #8
- ands r0, r1
- cmp r0, #0
- beq _08071C14
- movs r0, #0x84
- lsls r0, r0, #3
- strh r0, [r5, #8]
- b _08071C9C
- .align 2, 0
-_08071C10: .4byte gPlayerState
-_08071C14:
- movs r0, #0x81
- lsls r0, r0, #4
- strh r0, [r5, #8]
- b _08071C9C
-_08071C1C:
- strb r0, [r5, #0xc]
- ldr r1, [r5, #0x30]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- beq _08071C4C
- ldrb r0, [r5, #0x12]
- subs r0, #8
- lsls r0, r0, #0x18
- lsrs r0, r0, #0x18
- cmp r0, #2
- bhi _08071C42
- adds r0, r4, #0
- bl sub_0807A298
- bl sub_08079458
- movs r0, #0xa
- strb r0, [r4, #0xc]
-_08071C42:
- ldr r0, _08071C48 @ =0x00000C1A
- b _08071C5A
- .align 2, 0
-_08071C48: .4byte 0x00000C1A
-_08071C4C:
- movs r0, #8
- ands r1, r0
- movs r0, #0xde
- lsls r0, r0, #1
- cmp r1, #0
- beq _08071C5A
- ldr r0, _08071CA0 @ =0x00000459
-_08071C5A:
- ldr r2, _08071CA4 @ =gPlayerState
- movs r3, #0
- strh r0, [r2, #8]
- ldr r0, [r2, #0x30]
- ldr r1, _08071CA8 @ =0xFEDBF2FE
- ands r0, r1
- str r0, [r2, #0x30]
- movs r0, #1
- strb r0, [r4, #0xd]
- movs r0, #4
- strb r0, [r4, #0x14]
- adds r5, r4, #0
- adds r5, #0x29
- ldrb r1, [r5]
- subs r0, #0x3d
- ands r0, r1
- movs r1, #8
- orrs r0, r1
- strb r0, [r5]
- ldrb r0, [r4, #0x18]
- movs r1, #3
- orrs r0, r1
- strb r0, [r4, #0x18]
- strb r3, [r2, #2]
- strb r3, [r2, #6]
- adds r0, r4, #0
- bl sub_0800451C
- bl ResetPlayer
- movs r0, #0x87
- bl SoundReq
-_08071C9C:
- pop {r4, r5, pc}
- .align 2, 0
-_08071CA0: .4byte 0x00000459
-_08071CA4: .4byte gPlayerState
-_08071CA8: .4byte 0xFEDBF2FE
-
- thumb_func_start sub_08071CAC
-sub_08071CAC: @ 0x08071CAC
- push {r4, lr}
- adds r4, r0, #0
- bl UpdateAnimationSingleFrame
- adds r0, r4, #0
- adds r0, #0x5a
- ldrb r1, [r0]
- movs r3, #0x80
- adds r0, r3, #0
- ands r0, r1
- cmp r0, #0
- beq _08071CFE
- ldr r1, _08071CE0 @ =gPlayerState
- ldr r2, [r1, #0x30]
- adds r0, r2, #0
- ands r0, r3
- cmp r0, #0
- bne _08071CEC
- movs r0, #8
- ands r2, r0
- ldr r0, _08071CE4 @ =0x000002BD
- cmp r2, #0
- beq _08071CEE
- ldr r0, _08071CE8 @ =0x0000045A
- b _08071CEE
- .align 2, 0
-_08071CE0: .4byte gPlayerState
-_08071CE4: .4byte 0x000002BD
-_08071CE8: .4byte 0x0000045A
-_08071CEC:
- ldr r0, _08071D00 @ =0x00000C1B
-_08071CEE:
- strh r0, [r1, #8]
- movs r0, #2
- strb r0, [r4, #0xd]
- movs r0, #0xf0
- strb r0, [r4, #0xe]
- movs r0, #0x7b
- bl SoundReq
-_08071CFE:
- pop {r4, pc}
- .align 2, 0
-_08071D00: .4byte 0x00000C1B
-
- thumb_func_start sub_08071D04
-sub_08071D04: @ 0x08071D04
- push {r4, r5, lr}
- adds r5, r0, #0
- bl UpdateAnimationSingleFrame
- adds r0, r5, #0
- adds r0, #0x5a
- ldrb r0, [r0]
- cmp r0, #0
- beq _08071D7A
- movs r4, #0
- movs r0, #0x28
- bl sub_080544DC
- adds r1, r0, #0
- cmp r1, #0
- beq _08071D3A
- ldr r0, _08071D6C @ =gSave
- adds r0, r0, r1
- adds r0, #0xb5
- movs r1, #0x20
- strb r1, [r0]
- movs r0, #0x40
- movs r1, #0x60
- movs r2, #2
- bl CreateObject
- movs r4, #0x20
-_08071D3A:
- cmp r4, #0
- beq _08071D74
- adds r0, r4, #0
- bl ModHealth
- movs r2, #0
- movs r0, #3
- strb r0, [r5, #0xd]
- ldr r1, _08071D70 @ =gPlayerState
- adds r0, r1, #0
- adds r0, #0x3c
- strb r2, [r0]
- movs r0, #0xff
- strb r0, [r5, #0x15]
- movs r3, #0
- strh r2, [r5, #0x24]
- movs r0, #0xc0
- lsls r0, r0, #9
- str r0, [r5, #0x20]
- movs r0, #1
- strb r0, [r1, #2]
- adds r1, #0x26
- strb r3, [r1]
- b _08071D7A
- .align 2, 0
-_08071D6C: .4byte gSave
-_08071D70: .4byte gPlayerState
-_08071D74:
- ldr r1, _08071D7C @ =gScreenTransition
- movs r0, #1
- strb r0, [r1, #5]
-_08071D7A:
- pop {r4, r5, pc}
- .align 2, 0
-_08071D7C: .4byte gScreenTransition
-
- thumb_func_start sub_08071D80
-sub_08071D80: @ 0x08071D80
- push {r4, r5, lr}
- adds r4, r0, #0
- bl UpdateAnimationSingleFrame
- ldr r5, _08071DB4 @ =gPlayerState
- movs r0, #1
- strb r0, [r5, #0x14]
- adds r0, r4, #0
- bl sub_08073904
- ldrb r1, [r5, #2]
- movs r0, #7
- ands r0, r1
- cmp r0, #3
- bne _08071DB2
- movs r0, #0
- strb r0, [r5, #2]
- adds r1, r4, #0
- adds r1, #0x3d
- movs r0, #0xe2
- strb r0, [r1]
- bl UnfreezeTime
- bl sub_080791D0
-_08071DB2:
- pop {r4, r5, pc}
- .align 2, 0
-_08071DB4: .4byte gPlayerState
-
- thumb_func_start sub_08071DB8
-sub_08071DB8: @ 0x08071DB8
- push {lr}
- ldr r2, _08071DCC @ =gUnk_0811BB3C
- ldrb r1, [r0, #0xd]
- lsls r1, r1, #2
- adds r1, r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- pop {pc}
- .align 2, 0
-_08071DCC: .4byte gUnk_0811BB3C
-
- thumb_func_start sub_08071DD0
-sub_08071DD0: @ 0x08071DD0
- push {lr}
- adds r2, r0, #0
- ldr r1, _08071DF4 @ =gPlayerState
- adds r0, r1, #0
- adds r0, #0x38
- ldrb r0, [r0]
- strb r0, [r2, #0xe]
- adds r3, r1, #0
- adds r3, #0x39
- ldrb r0, [r3]
- cmp r0, #0
- beq _08071DF8
- movs r0, #0
- strb r0, [r3]
- movs r0, #2
- strb r0, [r2, #0xd]
- adds r0, #0xfe
- b _08071E00
- .align 2, 0
-_08071DF4: .4byte gPlayerState
-_08071DF8:
- movs r0, #1
- strb r0, [r2, #0xd]
- movs r0, #0x8a
- lsls r0, r0, #1
-_08071E00:
- strh r0, [r1, #8]
- pop {pc}
-
- thumb_func_start sub_08071E04
-sub_08071E04: @ 0x08071E04
- push {r4, r5, lr}
- adds r4, r0, #0
- ldr r0, [r4, #0x34]
- cmp r0, #0
- beq _08071E38
- ldr r5, _08071E34 @ =gPlayerState
- ldrb r0, [r5, #0x14]
- cmp r0, #0
- bne _08071E38
- bl sub_0807A1B8
- ldrb r0, [r5, #0x12]
- cmp r0, #1
- bne _08071E38
- movs r0, #7
- strb r0, [r5, #0x11]
- ldr r0, [r5, #0x30]
- movs r1, #0x80
- lsls r1, r1, #2
- orrs r0, r1
- str r0, [r5, #0x30]
- bl sub_080791BC
- b _08071E72
- .align 2, 0
-_08071E34: .4byte gPlayerState
-_08071E38:
- adds r0, r4, #0
- bl UpdateAnimationSingleFrame
- bl sub_08079B24
- cmp r0, #0
- bne _08071E4E
- adds r0, r4, #0
- bl sub_08079708
- b _08071E72
-_08071E4E:
- bl sub_080792D8
- bl sub_0807953C
- cmp r0, #0
- beq _08071E60
- ldrb r0, [r4, #0xe]
- subs r0, #2
- b _08071E64
-_08071E60:
- ldrb r0, [r4, #0xe]
- subs r0, #1
-_08071E64:
- strb r0, [r4, #0xe]
- movs r0, #0xe
- ldrsb r0, [r4, r0]
- cmp r0, #0
- bgt _08071E72
- bl sub_080791BC
-_08071E72:
- pop {r4, r5, pc}
-
- thumb_func_start sub_08071E74
-sub_08071E74: @ 0x08071E74
- push {r4, lr}
- adds r4, r0, #0
- movs r1, #0x80
- lsls r1, r1, #6
- bl sub_08003FC4
- bl sub_08079E08
- ldrb r0, [r4, #0xe]
- adds r1, r0, #0
- adds r1, #0xff
- strb r1, [r4, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _08071E96
- bl sub_080791BC
-_08071E96:
- pop {r4, pc}
- thumb_func_start sub_08071E98
-sub_08071E98: @ 0x08071E98
+ thumb_func_start PlayerEmptyBottle
+PlayerEmptyBottle: @ 0x08071E98
push {lr}
ldr r2, _08071EAC @ =gUnk_0811BB48
ldrb r1, [r0, #0xd]
@@ -1403,8 +90,8 @@ _08071F32:
.align 2, 0
_08071F34: .4byte gPlayerState
- thumb_func_start sub_08071F38
-sub_08071F38: @ 0x08071F38
+ thumb_func_start PlayerFrozen
+PlayerFrozen: @ 0x08071F38
push {lr}
ldr r2, _08071F4C @ =gUnk_0811BB50
ldrb r1, [r0, #0xd]
@@ -1754,8 +441,8 @@ _080721DE:
.align 2, 0
_080721E0: .4byte gPlayerState
- thumb_func_start sub_080721E4
-sub_080721E4: @ 0x080721E4
+ thumb_func_start PlayerPull
+PlayerPull: @ 0x080721E4
push {lr}
ldr r1, _08072208 @ =gPlayerState
adds r1, #0xa8
@@ -1865,8 +552,8 @@ _080722B0:
.align 2, 0
_080722B4: .4byte 0x00000944
- thumb_func_start sub_080722B8
-sub_080722B8: @ 0x080722B8
+ thumb_func_start PlayerLava
+PlayerLava: @ 0x080722B8
push {lr}
ldr r1, _080722D4 @ =gPlayerState
adds r1, #0xa8
@@ -2026,7 +713,7 @@ sub_080723D0: @ 0x080723D0
strb r0, [r1]
subs r0, #0x16
bl ModHealth
- bl sub_08079458
+ bl RespawnPlayer
_0807240A:
pop {r4, pc}
@@ -2059,7 +746,7 @@ sub_0807240C: @ 0x0807240C
movs r0, #2
rsbs r0, r0, #0
bl ModHealth
- bl sub_08079458
+ bl RespawnPlayer
_08072448:
pop {pc}
.align 2, 0
@@ -2125,8 +812,8 @@ _080724AE:
_080724C2:
pop {pc}
- thumb_func_start sub_080724C4
-sub_080724C4: @ 0x080724C4
+ thumb_func_start PlayerRoomTransition
+PlayerRoomTransition: @ 0x080724C4
push {lr}
ldr r2, _080724D8 @ =gUnk_0811BB88
ldrb r1, [r0, #0xd]
@@ -2303,8 +990,8 @@ _08072620:
_08072624: .4byte gPlayerState
_08072628: .4byte gPlayerEntity
- thumb_func_start sub_0807262C
-sub_0807262C: @ 0x0807262C
+ thumb_func_start PlayerRoll
+PlayerRoll: @ 0x0807262C
push {lr}
ldr r1, _08072648 @ =gPlayerState
adds r1, #0xa8
@@ -2714,8 +1401,8 @@ _08072940: .4byte gPlayerState
_08072944: .4byte gPlayerEntity
_08072948: .4byte gRoomControls
- thumb_func_start sub_0807294C
-sub_0807294C: @ 0x0807294C
+ thumb_func_start PlayerInHole
+PlayerInHole: @ 0x0807294C
push {lr}
ldr r1, _08072968 @ =gPlayerState
adds r1, #0xa8
@@ -3776,8 +2463,8 @@ _080731A4:
pop {r4, pc}
.align 2, 0
- thumb_func_start sub_080731A8
-sub_080731A8: @ 0x080731A8
+ thumb_func_start PlayerUseEntrance
+PlayerUseEntrance: @ 0x080731A8
push {r4, lr}
adds r4, r0, #0
ldr r0, _080731D0 @ =gPlayerState
diff --git a/asm/code_080732D0.s b/asm/code_080732D0.s
index 45299238..f2e7f6fa 100644
--- a/asm/code_080732D0.s
+++ b/asm/code_080732D0.s
@@ -175,8 +175,8 @@ _08073418:
.align 2, 0
_0807341C: .4byte gRoomControls
- thumb_func_start sub_08073420
-sub_08073420: @ 0x08073420
+ thumb_func_start PlayerParachute
+PlayerParachute: @ 0x08073420
push {r4, lr}
adds r4, r0, #0
bl sub_08078EFC
@@ -1280,8 +1280,8 @@ _08073C58:
_08073C66:
pop {pc}
- thumb_func_start sub_08073C68
-sub_08073C68: @ 0x08073C68
+ thumb_func_start PlayerMinish
+PlayerMinish: @ 0x08073C68
push {lr}
ldr r2, _08073C7C @ =gUnk_0811BC60
ldrb r1, [r0, #0xd]
@@ -2760,7 +2760,7 @@ _0807476C:
strb r0, [r1]
subs r0, #0x24
bl ModHealth
- bl sub_08079458
+ bl RespawnPlayer
_08074792:
pop {r4, pc}
.align 2, 0
@@ -4198,7 +4198,7 @@ sub_080751E8: @ 0x080751E8
ldr r4, _08075230 @ =gPlayerScriptExecutionContext
adds r0, r4, #0
movs r1, #0x24
- bl MemClear32
+ bl MemClear
str r6, [r4]
ldr r0, _08075234 @ =gPlayerEntity
adds r0, #0x84
@@ -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_08077B98.s b/asm/code_08077B98.s
index b6c78cf4..75eb2a4b 100644
--- a/asm/code_08077B98.s
+++ b/asm/code_08077B98.s
@@ -642,7 +642,7 @@ sub_080784C8: @ 0x080784C8
movs r1, #0xc4
lsls r1, r1, #1
adds r0, r4, #0
- bl MemClear32
+ bl MemClear
ldr r0, _080784E0 @ =gUnk_0811C000
str r0, [r4, #4]
pop {r4, pc}
diff --git a/asm/code_08078778.s b/asm/code_08078778.s
index e1ddb07e..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
@@ -70,7 +70,7 @@ sub_080788E0: @ 0x080788E0
ldr r1, _08078900 @ =gUnk_03003DF8
adds r0, r0, r1
movs r1, #0xc
- bl MemClear32
+ bl MemClear
_080788FC:
pop {pc}
.align 2, 0
@@ -542,7 +542,7 @@ sub_08078C24: @ 0x08078C24
ldr r0, _08078CB0 @ =gUnk_03003DF0
movs r1, #0xc4
lsls r1, r1, #1
- bl MemClear32
+ bl MemClear
pop {pc}
.align 2, 0
_08078CAC: .4byte gPlayerState
@@ -866,7 +866,7 @@ sub_08078EFC: @ 0x08078EFC
strb r2, [r0, #0xc]
strb r1, [r0, #0xd]
strb r1, [r3, #0xc]
- bl sub_08070680
+ bl DoPlayerAction
movs r0, #1
b _08078F22
.align 2, 0
@@ -1583,8 +1583,8 @@ _08079454:
_08079456:
pop {r4, r5, pc}
- thumb_func_start sub_08079458
-sub_08079458: @ 0x08079458
+ thumb_func_start RespawnPlayer
+RespawnPlayer: @ 0x08079458
push {r4, r5, lr}
ldr r4, _08079498 @ =gPlayerEntity
movs r1, #0
@@ -1915,7 +1915,7 @@ _080796C8:
strb r1, [r0, #0x10]
movs r1, #0x81
strb r1, [r4, #2]
- bl sub_08070680
+ bl DoPlayerAction
movs r0, #1
b _080796FE
.align 2, 0
@@ -2537,7 +2537,7 @@ sub_08079B24: @ 0x08079B24
ldrb r0, [r0]
cmp r0, #0
beq _08079B6C
- bl sub_08079458
+ bl RespawnPlayer
b _08079BC0
.align 2, 0
_08079B60: .4byte gPlayerEntity
@@ -5401,8 +5401,8 @@ sub_0807B0C8: @ 0x0807B0C8
.align 2, 0
_0807B0F8: .4byte gPlayerEntity
- thumb_func_start sub_0807B0FC
-sub_0807B0FC: @ 0x0807B0FC
+ thumb_func_start PlayerWarp
+PlayerWarp: @ 0x0807B0FC
push {lr}
ldr r2, _0807B110 @ =gUnk_0811C27C
ldrb r1, [r0, #0xd]
diff --git a/asm/code_0807B9B8.s b/asm/code_0807B9B8.s
index 393c255c..59896509 100644
--- a/asm/code_0807B9B8.s
+++ b/asm/code_0807B9B8.s
@@ -948,19 +948,19 @@ sub_0807C0DC: @ 0x0807C0DC
lsls r6, r6, #6
adds r0, r5, #0
adds r1, r6, #0
- bl MemClear32
+ bl MemClear
adds r0, r5, r6
movs r1, #0x80
lsls r1, r1, #5
- bl MemClear32
+ bl MemClear
ldr r0, _0807C160 @ =gUnk_02019EE0
movs r4, #0x80
lsls r4, r4, #8
adds r1, r4, #0
- bl MemClear32
+ bl MemClear
ldr r0, _0807C164 @ =gMapDataTopSpecial
adds r1, r4, #0
- bl MemClear32
+ bl MemClear
ldr r0, _0807C168 @ =gArea
ldr r1, _0807C16C @ =0x0000085C
adds r0, r0, r1
@@ -999,7 +999,7 @@ _0807C174: .4byte 0x0000FFFF
_0807C178:
adds r0, r2, #4
adds r1, r6, #0
- bl MemClear32
+ bl MemClear
movs r3, #1
mov sb, r3
_0807C184:
@@ -1167,7 +1167,7 @@ _0807C2E4:
bl sub_0807C5F4
adds r0, r5, #0
adds r1, r6, #0
- bl MemClear32
+ bl MemClear
ldr r4, _0807C350 @ =gMapDataTopSpecial
adds r5, r4, r6
adds r0, r4, #0
@@ -1179,7 +1179,7 @@ _0807C2E4:
bl sub_0807C5F4
adds r0, r5, #0
adds r1, r6, #0
- bl MemClear32
+ bl MemClear
_0807C326:
mov r1, sb
cmp r1, #0
@@ -1406,10 +1406,10 @@ sub_0807C4F8: @ 0x0807C4F8
movs r4, #0x80
lsls r4, r4, #8
adds r1, r4, #0
- bl MemClear32
+ bl MemClear
ldr r0, _0807C59C @ =gMapDataTopSpecial
adds r1, r4, #0
- bl MemClear32
+ bl MemClear
ldr r5, _0807C5A0 @ =gUnk_02022830
ldr r0, _0807C5A4 @ =gArea
ldr r1, _0807C5A8 @ =0x0000085C
@@ -1455,7 +1455,7 @@ _0807C54A:
bl sub_0807C5F4
adds r0, r5, #0
adds r1, r6, #0
- bl MemClear32
+ bl MemClear
ldr r4, _0807C59C @ =gMapDataTopSpecial
adds r5, r4, r6
adds r0, r4, #0
@@ -1467,7 +1467,7 @@ _0807C54A:
bl sub_0807C5F4
adds r0, r5, #0
adds r1, r6, #0
- bl MemClear32
+ bl MemClear
_0807C592:
pop {r4, r5, r6, pc}
.align 2, 0
@@ -1694,7 +1694,7 @@ _0807C710:
_0807C726:
adds r0, r4, #0
movs r1, #0x40
- bl MemClear32
+ bl MemClear
adds r4, #0x40
adds r5, #1
cmp r5, r7
@@ -1984,7 +1984,7 @@ _0807C92E:
_0807C946:
adds r0, r4, #0
movs r1, #0x80
- bl MemClear32
+ bl MemClear
adds r4, #0x80
adds r5, #1
cmp r5, r6
diff --git a/asm/code_0807F0D8.s b/asm/code_0807F0D8.s
index e525b5a6..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
@@ -2934,11 +2934,11 @@ sub_08080668: @ 0x08080668
ldr r5, _080806A4 @ =gRoomControls
adds r0, r5, #0
movs r1, #0x38
- bl MemClear32
+ bl MemClear
ldr r4, _080806A8 @ =gUnk_03004030
adds r0, r4, #0
movs r1, #0xc
- bl MemClear32
+ bl MemClear
ldr r0, _080806AC @ =0x0000FFFF
strh r0, [r5, #0x22]
movs r0, #0xff
@@ -2950,10 +2950,10 @@ sub_08080668: @ 0x08080668
movs r4, #0x80
lsls r4, r4, #8
adds r1, r4, #0
- bl MemClear32
+ bl MemClear
ldr r0, _080806B8 @ =gMapDataTopSpecial
adds r1, r4, #0
- bl MemClear32
+ bl MemClear
pop {r4, r5, pc}
.align 2, 0
_080806A4: .4byte gRoomControls
diff --git a/asm/code_080A29BC.s b/asm/code_080A29BC.s
index e5f4bf59..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]
@@ -995,7 +995,7 @@ sub_080A3210: @ 0x080A3210
ldr r4, _080A3230 @ =gUnk_02021EE0
adds r0, r4, #0
movs r1, #0x18
- bl MemClear32
+ bl MemClear
bl sub_080A35C8
movs r0, #0x80
lsls r0, r0, #1
diff --git a/asm/code_080A3480.s b/asm/code_080A3480.s
index 4a4030d9..2ade5735 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
@@ -354,7 +354,7 @@ sub_080A36F8: @ 0x080A36F8
ldr r0, _080A3760 @ =gBG1Buffer
movs r1, #0x80
lsls r1, r1, #4
- bl MemClear32
+ bl MemClear
ldr r1, _080A3764 @ =gScreen
movs r2, #0
movs r0, #1
@@ -410,7 +410,7 @@ _080A378A:
ldr r0, _080A37B8 @ =gBG1Buffer
movs r1, #0x80
lsls r1, r1, #4
- bl MemClear32
+ bl MemClear
movs r1, #0x10
ldrsh r0, [r4, r1]
ldr r2, _080A37BC @ =gUnk_081272E0
@@ -580,7 +580,7 @@ sub_080A38D0: @ 0x080A38D0
movs r6, #0x80
lsls r6, r6, #4
adds r1, r6, #0
- bl MemClear32
+ bl MemClear
ldr r4, _080A3924 @ =gScreen
movs r0, #0
mov r8, r0
@@ -588,7 +588,7 @@ sub_080A38D0: @ 0x080A38D0
strh r5, [r4, #0x1a]
ldr r0, _080A3928 @ =gBG2Buffer
adds r1, r6, #0
- bl MemClear32
+ bl MemClear
strh r5, [r4, #0x26]
adds r4, #0x68
movs r0, #0x80
@@ -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
@@ -712,7 +712,7 @@ _080A39C8:
movs r0, #0xc0
lsls r0, r0, #0x13
movs r1, #0x20
- bl MemClear32
+ bl MemClear
movs r0, #0
movs r1, #0
bl sub_08052418
diff --git a/asm/code_080A3BD0.s b/asm/code_080A3BD0.s
index 18beb360..08159cb0 100644
--- a/asm/code_080A3BD0.s
+++ b/asm/code_080A3BD0.s
@@ -935,7 +935,7 @@ sub_080A4398: @ 0x080A4398
push {lr}
ldr r0, _080A43A4 @ =gUnk_02019EE0
movs r1, #0x40
- bl MemClear32
+ bl MemClear
pop {pc}
.align 2, 0
_080A43A4: .4byte gUnk_02019EE0
@@ -1119,7 +1119,7 @@ sub_080A44E0: @ 0x080A44E0
mov r8, r0
ldr r0, [r4, #8]
mov r1, r8
- bl MemClear32
+ bl MemClear
adds r0, r6, #0
adds r1, r4, #0
bl sub_0805F76C
@@ -1269,11 +1269,11 @@ sub_080A4608: @ 0x080A4608
ldr r0, _080A46A4 @ =gBG0Buffer
movs r1, #0x80
lsls r1, r1, #4
- bl MemClear32
+ bl MemClear
ldr r0, _080A46A8 @ =gBG3Buffer
movs r1, #0x80
lsls r1, r1, #5
- bl MemClear32
+ bl MemClear
ldr r2, _080A46AC @ =gScreen
adds r1, r2, #0
adds r1, #0x58
@@ -1976,7 +1976,7 @@ sub_080A4BA0: @ 0x080A4BA0
adds r6, r1, #0
add r0, sp, #0x18
movs r1, #0x30
- bl MemClear32
+ bl MemClear
ldr r0, _080A4C08 @ =gUnk_0812816C
mov r1, sp
movs r2, #0x18
@@ -2123,7 +2123,7 @@ sub_080A4CBC: @ 0x080A4CBC
lsls r5, r5, #4
adds r0, r4, #0
adds r1, r5, #0
- bl MemClear32
+ bl MemClear
ldr r1, _080A4D14 @ =0x0600E000
adds r0, r4, #0
adds r2, r5, #0
@@ -2217,7 +2217,7 @@ sub_080A4D88: @ 0x080A4D88
push {lr}
ldr r0, _080A4DA4 @ =gUnk_020344A0
movs r1, #8
- bl MemClear32
+ bl MemClear
movs r0, #1
movs r1, #0
bl MenuFadeIn
@@ -2245,21 +2245,21 @@ sub_080A4DB8: @ 0x080A4DB8
movs r4, #0x80
lsls r4, r4, #4
adds r1, r4, #0
- bl MemClear32
+ bl MemClear
ldr r0, _080A4E5C @ =gBG1Buffer
adds r1, r4, #0
- bl MemClear32
+ bl MemClear
ldr r0, _080A4E60 @ =gBG2Buffer
adds r1, r4, #0
- bl MemClear32
+ bl MemClear
ldr r0, _080A4E64 @ =gUnk_0200AF34
movs r1, #0xc0
lsls r1, r1, #2
- bl MemClear32
+ bl MemClear
ldr r4, _080A4E68 @ =gMenu
adds r0, r4, #0
movs r1, #0x30
- bl MemClear32
+ bl MemClear
ldr r0, _080A4E6C @ =0x0000FFFF
strh r0, [r4, #0x2e]
ldr r0, _080A4E70 @ =gUnk_02034490
@@ -2580,7 +2580,7 @@ _080A5080:
ldr r0, _080A5098 @ =gBG0Buffer
movs r1, #0x80
lsls r1, r1, #4
- bl MemClear32
+ bl MemClear
ldr r1, _080A509C @ =gScreen
movs r0, #1
strh r0, [r1, #0xe]
diff --git a/asm/code_080A5574.s b/asm/code_080A5574.s
index 1bd8ec85..05b47ec9 100644
--- a/asm/code_080A5574.s
+++ b/asm/code_080A5574.s
@@ -2442,7 +2442,7 @@ _080A6886:
ldr r0, _080A68D0 @ =gUnk_02019EE0
movs r1, #0x80
lsls r1, r1, #3
- bl MemClear32
+ bl MemClear
pop {r4, r5, r6, r7, pc}
.align 2, 0
_080A68AC: .4byte gUnk_02032EC0
@@ -3307,7 +3307,7 @@ sub_080A6F6C: @ 0x080A6F6C
ldr r0, _080A6FA8 @ =gUnk_020350F0
movs r1, #0x80
lsls r1, r1, #1
- bl MemClear32
+ bl MemClear
movs r0, #0xff
ands r0, r4
cmp r0, #0
@@ -3376,7 +3376,7 @@ _080A6FFA:
ldr r0, _080A7038 @ =gUnk_020350F0
movs r1, #0x80
lsls r1, r1, #1
- bl MemClear32
+ bl MemClear
movs r0, #0xff
ands r0, r4
cmp r0, #0
@@ -3413,7 +3413,7 @@ sub_080A7040: @ 0x080A7040
movs r1, #0xc0
lsls r1, r1, #2
adds r0, r4, #0
- bl MemClear32
+ bl MemClear
ldr r0, _080A7098 @ =0xFFFFFE00
adds r4, r4, r0
ldr r1, _080A709C @ =0x0600E000
@@ -3456,7 +3456,7 @@ sub_080A70AC: @ 0x080A70AC
movs r1, #0xc0
lsls r1, r1, #2
adds r0, r4, #0
- bl MemClear32
+ bl MemClear
adds r2, r4, #0
subs r2, #0x34
movs r0, #0x7f
@@ -3519,7 +3519,7 @@ sub_080A7124: @ 0x080A7124
ldr r0, _080A7134 @ =gUnk_02032EC0
movs r1, #0xed
lsls r1, r1, #2
- bl MemClear32
+ bl MemClear
pop {pc}
.align 2, 0
_080A7134: .4byte gUnk_02032EC0
@@ -3536,7 +3536,7 @@ MenuFadeIn: @ 0x080A7138
movs r1, #0xed
lsls r1, r1, #2
adds r0, r4, #0
- bl MemClear32
+ bl MemClear
strb r5, [r4, #2]
strb r6, [r4, #3]
ldr r0, _080A7160 @ =gMain
@@ -3767,22 +3767,22 @@ sub_080A7328: @ 0x080A7328
bl DeleteAllEntities
ldr r0, _080A738C @ =gMenu
movs r1, #0x30
- bl MemClear32
+ bl MemClear
ldr r0, _080A7390 @ =gRoomControls
movs r1, #0x38
- bl MemClear32
+ bl MemClear
ldr r0, _080A7394 @ =gUnk_03000420
movs r1, #0x80
lsls r1, r1, #1
- bl MemClear32
+ bl MemClear
ldr r4, _080A7398 @ =gActiveScriptInfo
adds r0, r4, #0
movs r1, #0xc
- bl MemClear32
+ bl MemClear
movs r0, #8
strb r0, [r4, #8]
movs r0, #1
- bl sub_0801DA90
+ bl DispReset
bl MessageInitialize
bl sub_080ADD30
movs r0, #0
@@ -4943,7 +4943,7 @@ sub_080A7C7C: @ 0x080A7C7C
push {lr}
ldr r0, _080A7C88 @ =gUnk_02017660
movs r1, #0x40
- bl MemClear32
+ bl MemClear
pop {pc}
.align 2, 0
_080A7C88: .4byte gUnk_02017660
diff --git a/asm/code_080AD90C.s b/asm/code_080AD90C.s
index d08c7ef4..54509736 100644
--- a/asm/code_080AD90C.s
+++ b/asm/code_080AD90C.s
@@ -567,7 +567,7 @@ sub_080ADD30: @ 0x080ADD30
movs r1, #0x85
lsls r1, r1, #2
adds r0, r4, #0
- bl MemClear32
+ bl MemClear
movs r5, #0
adds r4, #4
movs r0, #0x10
@@ -718,7 +718,7 @@ _080ADE54: .4byte gUnk_02024494
_080ADE58:
adds r0, r1, #0
movs r1, #0xc
- bl MemClear32
+ bl MemClear
_080ADE60:
adds r5, #0xc
adds r4, #1
@@ -1084,7 +1084,7 @@ sub_080AE104: @ 0x080AE104
adds r1, r1, r5
lsls r1, r1, #2
adds r0, r4, #0
- bl MemClear32
+ bl MemClear
strb r5, [r4, #1]
strh r6, [r4, #4]
adds r0, r4, #0
@@ -1396,7 +1396,7 @@ _080AE350:
stm r0!, {r2, r3, r7}
adds r0, r6, #0
movs r1, #0xc
- bl MemClear32
+ bl MemClear
adds r6, #0xc
adds r5, #0xc
movs r0, #0xc
diff --git a/asm/crt0.s b/asm/crt0.s
index aa94b6fd..73578ef5 100644
--- a/asm/crt0.s
+++ b/asm/crt0.s
@@ -1,32 +1,31 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
-
.syntax unified
-
.text
arm_func_start __start
-__start: @ 0x08000000
- b _080000C0
-_08000004:
+__start:
+ b start_vector
+
+header:
.include "asm/rom_header.inc"
-_080000C0:
+
+start_vector:
mov r0, #0x12
msr cpsr_fc, r0
- ldr sp, _080000F4 @ =gUnk_03007FA0
+ ldr sp, sp_irq
mov r0, #0x1f
msr cpsr_fc, r0
- ldr sp, _080000F8 @ =gUnk_03007F00
- ldr r1, _080000FC @ =0x03007FFC
- ldr r0, _08000100 @ =gUnk_03005D90
+ ldr sp, sp_usr
+ ldr r1, INTR_VECTOR_BUF
+ ldr r0, intr_main
str r0, [r1]
- ldr r1, _08000104 @ =MainLoop
+ ldr r1, =AgbMain
mov lr, pc
bx r1
_080000F0:
- b _080000C0
-_080000F4: .4byte gUnk_03007FA0
-_080000F8: .4byte gUnk_03007F00
-_080000FC: .4byte 0x03007FFC
-_08000100: .4byte gUnk_03005D90
-_08000104: .4byte MainLoop
+ b start_vector
+sp_irq: .4byte gUnk_03007FA0
+sp_usr: .4byte gUnk_03007F00
+INTR_VECTOR_BUF: .4byte 0x03007FFC
+intr_main: .4byte IntrMain
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 341bfde7..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
@@ -41,7 +41,7 @@ sub_080519B0: @ 0x080519B0
ldr r4, _08051A08 @ =gScreenTransition
adds r0, r4, #0
movs r1, #0xb0
- bl MemClear32
+ bl MemClear
bl sub_08049CD4
bl sub_080300AC
bl sub_0807CA18
@@ -69,18 +69,18 @@ _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
str r0, [r1, #4]
ldr r0, _08051A74 @ =gUnk_03000000
ldr r1, _08051A78 @ =0x00000B74
- bl MemClear32
+ bl MemClear
ldr r0, _08051A7C @ =gUnk_02032EC0
movs r1, #0xed
lsls r1, r1, #2
- bl MemClear32
+ bl MemClear
bl EraseAllEntities
bl sub_080197AC
bl sub_08080668
@@ -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,15 +729,15 @@ 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
adds r1, r4, #0
- bl MemClear32
+ bl MemClear
ldr r0, _08052080 @ =gBG2Buffer
adds r1, r4, #0
- bl MemClear32
+ bl MemClear
bl sub_080A4D34
movs r0, #0xa
bl LoadPaletteGroup
@@ -749,10 +749,10 @@ sub_08052010: @ 0x08052010
movs r0, #0xc0
lsls r0, r0, #0x13
movs r1, #0x20
- bl MemClear32
+ bl MemClear
ldr r0, _08052084 @ =gMenu
movs r1, #0x30
- bl MemClear32
+ bl MemClear
ldr r1, _08052088 @ =gScreen
ldrh r2, [r1]
movs r3, #0x80
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/gyorgFemale.s b/asm/gyorgFemale.s
index 14d08573..daba4aa9 100644
--- a/asm/gyorgFemale.s
+++ b/asm/gyorgFemale.s
@@ -112,10 +112,10 @@ sub_0804614C: @ 0x0804614C
movs r4, #0x80
lsls r4, r4, #8
adds r1, r4, #0
- bl MemClear32
+ bl MemClear
ldr r0, _08046250 @ =gMapDataTopSpecial
adds r1, r4, #0
- bl MemClear32
+ bl MemClear
adds r0, r6, #0
movs r1, #0
bl sub_0804660C
@@ -445,10 +445,10 @@ sub_08046498: @ 0x08046498
movs r4, #0x80
lsls r4, r4, #8
adds r1, r4, #0
- bl MemClear32
+ bl MemClear
ldr r0, _080464BC @ =gMapDataTopSpecial
adds r1, r4, #0
- bl MemClear32
+ bl MemClear
adds r0, r5, #0
bl sub_080464C0
pop {r4, r5, pc}
@@ -486,7 +486,7 @@ _080464DE:
ldr r0, _0804650C @ =gUnk_02019EE0
movs r1, #0x80
lsls r1, r1, #4
- bl MemClear32
+ bl MemClear
ldr r1, _08046514 @ =gUnk_02000070
movs r0, #1
strb r0, [r1]
diff --git a/asm/intr.s b/asm/intr.s
index 388274a3..3332c380 100644
--- a/asm/intr.s
+++ b/asm/intr.s
@@ -49,16 +49,17 @@ _080B19C0: .4byte gRoomControls
_080B19C4: .4byte 0x80000020
_080B19C8: .4byte 0x040000D4
- arm_func_start sub_080B19CC
-sub_080B19CC: @ 0x080B19CC
- ldrb r2, [r0, #0x38]
- ldrh r1, [r0, #0x32]
- ldrh r0, [r0, #0x2e]
+@ r0 = entity*
+ arm_func_start _GetTileAtEntityPos
+_GetTileAtEntityPos: @ 0x080B19CC
+ ldrb r2, [r0, #0x38] @ obj layer
+ ldrh r1, [r0, #0x32] @ obj y
+ ldrh r0, [r0, #0x2e] @ obj x
ldr ip, _080B1C10 @ =gRoomControls
ldrh r3, [ip, #6]
- sub r0, r0, r3
+ sub r0, r0, r3 @ obj x - room x
ldrh r3, [ip, #8]
- sub r1, r1, r3
+ sub r1, r1, r3 @ obj y - room y
lsl r0, r0, #0x16
lsr r0, r0, #0x1a
lsl r1, r1, #0x16
@@ -102,7 +103,7 @@ _080B1A64:
ldr r1, [r2]
lsl r0, r0, #1
ldrh r0, [r1, r0]
- cmp r0, #0x4000
+ cmp r0, #0x4000 @ return tile index is OOB
bxhs lr
ldr r1, [r2, #4]
lsl r0, r0, #1
diff --git a/asm/jarPortal.s b/asm/jarPortal.s
index 09c48e54..8b057fc8 100644
--- a/asm/jarPortal.s
+++ b/asm/jarPortal.s
@@ -230,7 +230,7 @@ sub_0808C01C: @ 0x0808C01C
subs r1, #0x18
movs r2, #0x30
movs r3, #0x30
- bl sub_0806FBFC
+ bl CheckPlayerProximity
cmp r0, #0
beq _0808C0A6
ldr r2, _0808C06C @ =gArea
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/manager10.s b/asm/manager10.s
index 2826845f..f0d19df0 100644
--- a/asm/manager10.s
+++ b/asm/manager10.s
@@ -338,7 +338,7 @@ _08059800:
lsls r5, r5, #4
adds r0, r4, #0
adds r1, r5, #0
- bl MemClear32
+ bl MemClear
ldr r1, _08059820 @ =0x0600E800
adds r0, r4, #0
adds r2, r5, #0
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/manager2C.s b/asm/manager2C.s
index 4da87eb7..123784c0 100644
--- a/asm/manager2C.s
+++ b/asm/manager2C.s
@@ -44,7 +44,7 @@ _0805D184:
ldr r4, _0805D1F8 @ =gUnk_030010AC
adds r0, r4, #0
movs r1, #0x20
- bl MemClear32
+ bl MemClear
subs r4, #0xc
movs r1, #0
movs r0, #1
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/non_matching/arm_proxy/ItemInit.inc b/asm/non_matching/arm_proxy/ItemInit.inc
index e48870ae..efdae83e 100644
--- a/asm/non_matching/arm_proxy/ItemInit.inc
+++ b/asm/non_matching/arm_proxy/ItemInit.inc
@@ -127,4 +127,4 @@ _08017438:
.align 2, 0
_0801749C: .4byte 0x000003FF
_080174A0: .4byte gPlayerEntity
- .syntax divided \ No newline at end of file
+ .syntax divided
diff --git a/asm/non_matching/arm_proxy/sub_08017530.inc b/asm/non_matching/arm_proxy/sub_08017530.inc
index 4c2b9134..278daa48 100644
--- a/asm/non_matching/arm_proxy/sub_08017530.inc
+++ b/asm/non_matching/arm_proxy/sub_08017530.inc
@@ -87,4 +87,4 @@ _080175D8: .4byte gUnk_020342F8
_080175DC: .4byte gNPCFunctions
_080175E0: .4byte gUnk_02031EC0
_080175E4: .4byte gRoomControls
- .syntax divided \ No newline at end of file
+ .syntax divided
diff --git a/asm/non_matching/arm_proxy/sub_0801766C.inc b/asm/non_matching/arm_proxy/sub_0801766C.inc
index 6ef38554..239a6506 100644
--- a/asm/non_matching/arm_proxy/sub_0801766C.inc
+++ b/asm/non_matching/arm_proxy/sub_0801766C.inc
@@ -65,4 +65,4 @@ _080176DE:
pop {r4}
pop {r1}
bx r1
- .syntax divided \ No newline at end of file
+ .syntax divided
diff --git a/asm/non_matching/arm_proxy/sub_080176E4.inc b/asm/non_matching/arm_proxy/sub_080176E4.inc
index 5000774e..e8a48278 100644
--- a/asm/non_matching/arm_proxy/sub_080176E4.inc
+++ b/asm/non_matching/arm_proxy/sub_080176E4.inc
@@ -51,4 +51,4 @@ _0801773A:
bx r1
.align 2, 0
_08017740: .4byte gUnk_03003C70
- .syntax divided \ No newline at end of file
+ .syntax divided
diff --git a/asm/non_matching/arm_proxy/sub_08017744.inc b/asm/non_matching/arm_proxy/sub_08017744.inc
index 2d47df2c..e5e245ec 100644
--- a/asm/non_matching/arm_proxy/sub_08017744.inc
+++ b/asm/non_matching/arm_proxy/sub_08017744.inc
@@ -47,4 +47,4 @@ _0801779A:
pop {r4, r5, r6, r7}
pop {r0}
bx r0
- .syntax divided \ No newline at end of file
+ .syntax divided
diff --git a/asm/non_matching/arm_proxy/sub_080177A0.inc b/asm/non_matching/arm_proxy/sub_080177A0.inc
index 99962e08..da64049f 100644
--- a/asm/non_matching/arm_proxy/sub_080177A0.inc
+++ b/asm/non_matching/arm_proxy/sub_080177A0.inc
@@ -92,4 +92,4 @@ _0801784A:
pop {r4, r5, r6}
pop {r1}
bx r1
- .syntax divided \ No newline at end of file
+ .syntax divided
diff --git a/asm/non_matching/fileScreen/sub_08050EF4.inc b/asm/non_matching/fileScreen/sub_08050EF4.inc
index 1ef73ae0..dbad9f1e 100644
--- a/asm/non_matching/fileScreen/sub_08050EF4.inc
+++ b/asm/non_matching/fileScreen/sub_08050EF4.inc
@@ -135,4 +135,4 @@ _08050FF4:
mov r8, r3
pop {r4, r5, r6, r7, pc}
.align 2, 0
- .syntax divided \ No newline at end of file
+ .syntax divided
diff --git a/asm/non_matching/fileScreen/sub_08051738.inc b/asm/non_matching/fileScreen/sub_08051738.inc
index bde5ca42..16ca61e3 100644
--- a/asm/non_matching/fileScreen/sub_08051738.inc
+++ b/asm/non_matching/fileScreen/sub_08051738.inc
@@ -62,4 +62,4 @@ _080517A2:
pop {r4, r5, r6, r7, pc}
.align 2, 0
_080517B0: .4byte gMenu
- .syntax divided \ No newline at end of file
+ .syntax divided
diff --git a/asm/non_matching/fileScreen/sub_080517B4.inc b/asm/non_matching/fileScreen/sub_080517B4.inc
index 45bc25e3..f9bef9e7 100644
--- a/asm/non_matching/fileScreen/sub_080517B4.inc
+++ b/asm/non_matching/fileScreen/sub_080517B4.inc
@@ -29,4 +29,4 @@ _080517DE:
.align 2, 0
_080517E4: .4byte gUnk_02019EE0
_080517E8: .4byte gUnk_02000090
- .syntax divided \ No newline at end of file
+ .syntax divided
diff --git a/asm/non_matching/fileScreen/sub_080610B8.inc b/asm/non_matching/fileScreen/sub_080610B8.inc
index f7b6721c..037a8765 100644
--- a/asm/non_matching/fileScreen/sub_080610B8.inc
+++ b/asm/non_matching/fileScreen/sub_080610B8.inc
@@ -345,4 +345,4 @@ _0805134C:
.align 2, 0
_08051350: .4byte gSave
_08051354: .4byte gMenu
- .syntax divided \ No newline at end of file
+ .syntax divided
diff --git a/asm/non_matching/game/sub_08052418.inc b/asm/non_matching/game/sub_08052418.inc
index 179cce1d..bd30db21 100644
--- a/asm/non_matching/game/sub_08052418.inc
+++ b/asm/non_matching/game/sub_08052418.inc
@@ -6,7 +6,7 @@
ldr r0, _08052494 @ =gBG1Buffer
movs r1, #0x80
lsls r1, r1, #4
- bl MemClear32
+ bl MemClear
ldr r0, _08052498 @ =gUnk_020227E8
movs r1, #0xf
str r1, [r0]
@@ -63,4 +63,4 @@ _08052498: .4byte gUnk_020227E8
_0805249C: .4byte gUnk_080FCA8C
_080524A0: .4byte gUnk_080FCAA4
_080524A4: .4byte gScreen
- .syntax divided \ No newline at end of file
+ .syntax divided
diff --git a/asm/non_matching/gibdo/sub_080376D0.inc b/asm/non_matching/gibdo/sub_080376D0.inc
index c6c76bd6..8c07e3dc 100644
--- a/asm/non_matching/gibdo/sub_080376D0.inc
+++ b/asm/non_matching/gibdo/sub_080376D0.inc
@@ -54,4 +54,4 @@ _0803772C:
_0803773A:
pop {r4, pc}
- .syntax divided \ No newline at end of file
+ .syntax divided
diff --git a/asm/non_matching/gibdo/sub_08037810.inc b/asm/non_matching/gibdo/sub_08037810.inc
index 42f4ed8c..b4ce2803 100644
--- a/asm/non_matching/gibdo/sub_08037810.inc
+++ b/asm/non_matching/gibdo/sub_08037810.inc
@@ -83,4 +83,4 @@ _080378AC:
_080378AE:
pop {r4, r5, r6, pc}
- .syntax divided \ No newline at end of file
+ .syntax divided
diff --git a/asm/non_matching/gibdo/sub_0803797C.inc b/asm/non_matching/gibdo/sub_0803797C.inc
index 47da634a..4e0ecf7a 100644
--- a/asm/non_matching/gibdo/sub_0803797C.inc
+++ b/asm/non_matching/gibdo/sub_0803797C.inc
@@ -36,4 +36,4 @@
_080379BA:
pop {r4, r5, pc}
- .syntax divided \ No newline at end of file
+ .syntax divided
diff --git a/asm/non_matching/player/sub_08071634.s b/asm/non_matching/player/sub_08071634.s
new file mode 100644
index 00000000..3c377521
--- /dev/null
+++ b/asm/non_matching/player/sub_08071634.s
@@ -0,0 +1,172 @@
+ .syntax unified
+ push {r4, r5, r6, r7, lr}
+ mov r7, r8
+ push {r7}
+ adds r5, r0, #0
+ adds r0, #0x81
+ ldrb r0, [r0]
+ cmp r0, #0
+ beq _08071654
+ adds r1, r5, #0
+ adds r1, #0x80
+ ldr r0, [r1]
+ adds r0, #0x80
+ lsls r0, r0, #0x14
+ lsrs r7, r0, #0x17
+ adds r4, r1, #0
+ b _0807166A
+_08071654:
+ adds r4, r5, #0
+ adds r4, #0x80
+ ldrb r1, [r4]
+ lsrs r1, r1, #6
+ movs r0, #3
+ eors r1, r0
+ adds r1, #1
+ movs r0, #0x10
+ bl __divsi3
+ asrs r7, r0, #1
+_0807166A:
+ adds r0, r5, #0
+ adds r0, #0x84
+ ldr r3, [r0]
+ movs r1, #0x80
+ lsls r1, r1, #1
+ adds r2, r0, #0
+ cmp r3, r1
+ bls _08071684
+ adds r0, r3, #0
+ adds r0, #0x80
+ lsls r0, r0, #0x14
+ lsrs r3, r0, #0x17
+ b _08071694
+_08071684:
+ cmp r3, r1
+ bne _0807168C
+ movs r3, #0x10
+ b _08071694
+_0807168C:
+ ldr r1, _080716B0 @ =gUnk_0811BABC
+ lsrs r0, r3, #5
+ adds r0, r0, r1
+ ldrb r3, [r0]
+_08071694:
+ movs r0, #0x80
+ lsls r0, r0, #9
+ mov r8, r0
+ adds r0, r5, #0
+ adds r0, #0x5a
+ ldrb r0, [r0]
+ cmp r0, #2
+ beq _080716EA
+ cmp r0, #2
+ bgt _080716B4
+ cmp r0, #1
+ beq _080716BA
+ b _08071754
+ .align 2, 0
+_080716B0: .4byte gUnk_0811BABC
+_080716B4:
+ cmp r0, #3
+ beq _0807171E
+ b _08071754
+_080716BA:
+ movs r1, #0x29
+ adds r1, r1, r5
+ mov ip, r1
+ ldrb r1, [r1]
+ movs r0, #0x39
+ rsbs r0, r0, #0
+ ands r0, r1
+ mov r1, ip
+ strb r0, [r1]
+ ldr r0, [r4]
+ cmp r0, #0x80
+ bls _080716D6
+ subs r0, r0, r7
+ str r0, [r4]
+_080716D6:
+ lsls r1, r3, #1
+ ldr r0, [r2]
+ adds r0, r0, r1
+ str r0, [r2]
+ mov r0, r8
+ lsls r1, r0, #1
+ ldr r0, [r5, #0x30]
+ adds r0, r0, r1
+ str r0, [r5, #0x30]
+ b _08071754
+_080716EA:
+ ldr r0, [r4]
+ adds r0, r0, r7
+ str r0, [r4]
+ ldr r1, [r2]
+ movs r6, #0x80
+ lsls r6, r6, #1
+ cmp r1, r6
+ bls _08071710
+ ldr r0, _0807170C @ =0x0000017F
+ cmp r1, r0
+ bhi _08071702
+ lsrs r3, r3, #1
+_08071702:
+ subs r0, r1, r3
+ cmp r0, #0xff
+ bhi _08071716
+ str r6, [r2]
+ b _08071718
+ .align 2, 0
+_0807170C: .4byte 0x0000017F
+_08071710:
+ cmp r1, #0x80
+ bls _08071718
+ subs r0, r1, r3
+_08071716:
+ str r0, [r2]
+_08071718:
+ ldr r0, [r5, #0x34]
+ mov r1, r8
+ b _08071750
+_0807171E:
+ ldr r0, [r4]
+ ldr r6, _08071740 @ =0x0000033F
+ cmp r0, r6
+ bhi _0807172A
+ adds r0, r0, r7
+ str r0, [r4]
+_0807172A:
+ ldr r1, [r2]
+ cmp r1, r6
+ bls _08071744
+ movs r0, #8
+ strb r0, [r5, #0xe]
+ movs r0, #0x1e
+ strb r0, [r5, #0xf]
+ movs r0, #6
+ strb r0, [r5, #0xd]
+ b _0807174A
+ .align 2, 0
+_08071740: .4byte 0x0000033F
+_08071744:
+ lsls r0, r3, #1
+ adds r0, r1, r0
+ str r0, [r2]
+_0807174A:
+ mov r0, r8
+ lsls r1, r0, #1
+ ldr r0, [r5, #0x34]
+_08071750:
+ subs r0, r0, r1
+ str r0, [r5, #0x34]
+_08071754:
+ ldr r1, [r4]
+ ldr r2, [r2]
+ adds r0, r5, #0
+ movs r3, #0
+ bl sub_0805EC9C
+ adds r0, r5, #0
+ bl UpdateAnimationSingleFrame
+ pop {r3}
+ mov r8, r3
+ pop {r4, r5, r6, r7, pc}
+ .syntax divided
diff --git a/asm/non_matching/save/sub_08050B3C.inc b/asm/non_matching/save/sub_08050B3C.inc
index a3b5b6b3..356b8a6c 100644
--- a/asm/non_matching/save/sub_08050B3C.inc
+++ b/asm/non_matching/save/sub_08050B3C.inc
@@ -122,4 +122,4 @@ _08050C1C: .4byte 0x0000F24C
_08050C20: .4byte 0x040000D4
_08050C24: .4byte gUnk_080FC914
_08050C28: .4byte 0xFFFFF24D
- .syntax divided \ No newline at end of file
+ .syntax divided
diff --git a/asm/non_matching/sub_080560B8.inc b/asm/non_matching/sub_080560B8.inc
index 29ca150f..73872d2a 100644
--- a/asm/non_matching/sub_080560B8.inc
+++ b/asm/non_matching/sub_080560B8.inc
@@ -54,7 +54,7 @@ _08056112:
ldr r4, _0805612C @ =gUnk_02000010
adds r0, r4, #0
movs r1, #0x20
- bl MemClear32
+ bl MemClear
ldr r0, _08056130 @ =0x4D435A33
str r0, [r4]
_08056124:
diff --git a/asm/non_matching/textbox/sub_080564EC.inc b/asm/non_matching/textbox/sub_080564EC.inc
index 4c3fdf84..e76e5fa6 100644
--- a/asm/non_matching/textbox/sub_080564EC.inc
+++ b/asm/non_matching/textbox/sub_080564EC.inc
@@ -2,14 +2,14 @@
push {r4, lr}
ldr r0, _08056598 @ =gUnk_02036A40
movs r1, #8
- bl MemClear32
+ bl MemClear
ldr r0, _0805659C @ =gUnk_02024030
movs r1, #0x18
- bl MemClear32
+ bl MemClear
ldr r4, _080565A0 @ =gUnk_02022780
adds r0, r4, #0
movs r1, #0xa8
- bl MemClear32
+ bl MemClear
ldr r0, _080565A4 @ =gTextBox
adds r1, r4, #0
movs r2, #0x20
@@ -87,4 +87,4 @@ _080565A4: .4byte gTextBox
_080565A8: .4byte gSave
_080565AC: .4byte gUnk_08107BE0
_080565B0: .4byte gUnk_02000D00
- .syntax divided \ No newline at end of file
+ .syntax divided
diff --git a/asm/object3D.s b/asm/object3D.s
index a6dbf01d..07297cfa 100644
--- a/asm/object3D.s
+++ b/asm/object3D.s
@@ -170,7 +170,7 @@ sub_0808D030: @ 0x0808D030
adds r0, r4, #0
subs r0, #0x20
ldr r1, _0808D05C @ =0x00000B74
- bl MemClear32
+ bl MemClear
movs r1, #0xa8
lsls r1, r1, #2
adds r0, r1, #0
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/objectB.s b/asm/objectB.s
index e7f17d89..cfb07492 100644
--- a/asm/objectB.s
+++ b/asm/objectB.s
@@ -281,7 +281,7 @@ _08083DA0:
_08083DA8: .4byte gSave
_08083DAC:
ldrb r0, [r4, #0xa]
- bl sub_080544DC
+ bl GetBottleContaining
adds r1, r0, #0
cmp r1, #0
beq _08083DC8
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/data/data_08114208.s b/data/data_08114208.s
index 18307d1d..fc5876e7 100644
--- a/data/data_08114208.s
+++ b/data/data_08114208.s
@@ -708,141 +708,3 @@ gUnk_0811B9D0:: @ 0811B9D0
gUnk_0811B9D8:: @ 0811B9D8
.incbin "baserom.gba", 0x11B9D8, 0x0000008
-
-gUnk_0811B9E0:: @ 0811B9E0
- .incbin "baserom.gba", 0x11B9E0, 0x0000080
-
-gUnk_0811BA60:: @ 0811BA60
- .incbin "baserom.gba", 0x11BA60, 0x0000008
-
-gUnk_0811BA68:: @ 0811BA68
- .incbin "baserom.gba", 0x11BA68, 0x000000C
-
-gUnk_0811BA74:: @ 0811BA74
- .incbin "baserom.gba", 0x11BA74, 0x0000008
-
-gUnk_0811BA7C:: @ 0811BA7C
- .incbin "baserom.gba", 0x11BA7C, 0x000000C
-
-gUnk_0811BA88:: @ 0811BA88
- .incbin "baserom.gba", 0x11BA88, 0x000000C
-
-gUnk_0811BA94:: @ 0811BA94
- .incbin "baserom.gba", 0x11BA94, 0x0000008
-
-gUnk_0811BA9C:: @ 0811BA9C
- .incbin "baserom.gba", 0x11BA9C, 0x0000020
-
-gUnk_0811BABC:: @ 0811BABC
- .incbin "baserom.gba", 0x11BABC, 0x0000008
-
-gUnk_0811BAC4:: @ 0811BAC4
- .incbin "baserom.gba", 0x11BAC4, 0x0000010
-
-gUnk_0811BAD4:: @ 0811BAD4
- .incbin "baserom.gba", 0x11BAD4, 0x0000010
-
-gUnk_0811BAE4:: @ 0811BAE4
- .incbin "baserom.gba", 0x11BAE4, 0x000000C
-
-gUnk_0811BAF0:: @ 0811BAF0
- .incbin "baserom.gba", 0x11BAF0, 0x000003C
-
-gUnk_0811BB2C:: @ 0811BB2C
- .incbin "baserom.gba", 0x11BB2C, 0x000000C
-
-gUnk_0811BB38:: @ 0811BB38
- .incbin "baserom.gba", 0x11BB38, 0x0000004
-
-gUnk_0811BB3C:: @ 0811BB3C
- .incbin "baserom.gba", 0x11BB3C, 0x000000C
-
-gUnk_0811BB48:: @ 0811BB48
- .incbin "baserom.gba", 0x11BB48, 0x0000008
-
-gUnk_0811BB50:: @ 0811BB50
- .incbin "baserom.gba", 0x11BB50, 0x0000008
-
-gUnk_0811BB58:: @ 0811BB58
- .incbin "baserom.gba", 0x11BB58, 0x0000008
-
-gUnk_0811BB60:: @ 0811BB60
- .incbin "baserom.gba", 0x11BB60, 0x0000008
-
-gUnk_0811BB68:: @ 0811BB68
- .incbin "baserom.gba", 0x11BB68, 0x0000008
-
-gUnk_0811BB70:: @ 0811BB70
- .incbin "baserom.gba", 0x11BB70, 0x0000010
-
-gUnk_0811BB80:: @ 0811BB80
- .incbin "baserom.gba", 0x11BB80, 0x0000008
-
-gUnk_0811BB88:: @ 0811BB88
- .incbin "baserom.gba", 0x11BB88, 0x0000008
-
-gUnk_0811BB90:: @ 0811BB90
- .incbin "baserom.gba", 0x11BB90, 0x0000008
-
-gUnk_0811BB98:: @ 0811BB98
- .incbin "baserom.gba", 0x11BB98, 0x0000014
-
-gUnk_0811BBAC:: @ 0811BBAC
- .incbin "baserom.gba", 0x11BBAC, 0x0000010
-
-gUnk_0811BBBC:: @ 0811BBBC
- .incbin "baserom.gba", 0x11BBBC, 0x0000006
-
-gUnk_0811BBC2:: @ 0811BBC2
- .incbin "baserom.gba", 0x11BBC2, 0x0000006
-
-gUnk_0811BBC8:: @ 0811BBC8
- .incbin "baserom.gba", 0x11BBC8, 0x0000006
-
-gUnk_0811BBCE:: @ 0811BBCE
- .incbin "baserom.gba", 0x11BBCE, 0x0000006
-
-gUnk_0811BBD4:: @ 0811BBD4
- .incbin "baserom.gba", 0x11BBD4, 0x0000010
-
-gUnk_0811BBE4:: @ 0811BBE4
- .incbin "baserom.gba", 0x11BBE4, 0x0000008
-
-gUnk_0811BBEC:: @ 0811BBEC
- .incbin "baserom.gba", 0x11BBEC, 0x000000C
-
-gUnk_0811BBF8:: @ 0811BBF8
- .incbin "baserom.gba", 0x11BBF8, 0x0000010
-
-gUnk_0811BC08:: @ 0811BC08
- .incbin "baserom.gba", 0x11BC08, 0x0000020
-
-gUnk_0811BC28:: @ 0811BC28
- .incbin "baserom.gba", 0x11BC28, 0x0000008
-
-gUnk_0811BC30:: @ 0811BC30
- .incbin "baserom.gba", 0x11BC30, 0x0000008
-
-gUnk_0811BC38:: @ 0811BC38
- .incbin "baserom.gba", 0x11BC38, 0x0000008
-
-gUnk_0811BC40:: @ 0811BC40
- .incbin "baserom.gba", 0x11BC40, 0x0000008
-
-gUnk_0811BC48:: @ 0811BC48
- .incbin "baserom.gba", 0x11BC48, 0x0000018
-
-gUnk_0811BC60:: @ 0811BC60
- .incbin "baserom.gba", 0x11BC60, 0x0000020
-
-gUnk_0811BC80:: @ 0811BC80
- .incbin "baserom.gba", 0x11BC80, 0x0000008
-
-gUnk_0811BC88:: @ 0811BC88
- .incbin "baserom.gba", 0x11BC88, 0x0000010
-
-gUnk_0811BC98:: @ 0811BC98
- .incbin "baserom.gba", 0x11BC98, 0x000001C
-
-gUnk_0811BCB4:: @ 0811BCB4
- .incbin "baserom.gba", 0x11BCB4, 0x0000010
diff --git a/data/data_0811B9E0.s b/data/data_0811B9E0.s
new file mode 100644
index 00000000..62216140
--- /dev/null
+++ b/data/data_0811B9E0.s
@@ -0,0 +1,140 @@
+ .include "asm/macros.inc"
+ .include "constants/constants.inc"
+
+ .section .rodata
+ .align 2
+
+gUnk_0811BA60:: @ 0811BA60
+ .incbin "baserom.gba", 0x11BA60, 0x0000008
+
+gUnk_0811BA68:: @ 0811BA68
+ .incbin "baserom.gba", 0x11BA68, 0x000000C
+
+gUnk_0811BA74:: @ 0811BA74
+ .incbin "baserom.gba", 0x11BA74, 0x0000008
+
+gUnk_0811BA7C:: @ 0811BA7C
+ .incbin "baserom.gba", 0x11BA7C, 0x000000C
+
+gUnk_0811BA88:: @ 0811BA88
+ .incbin "baserom.gba", 0x11BA88, 0x000000C
+
+gUnk_0811BA94:: @ 0811BA94
+ .incbin "baserom.gba", 0x11BA94, 0x0000008
+
+gUnk_0811BA9C:: @ 0811BA9C
+ .incbin "baserom.gba", 0x11BA9C, 0x0000020
+
+gUnk_0811BABC:: @ 0811BABC
+ .incbin "baserom.gba", 0x11BABC, 0x0000008
+
+gUnk_0811BAC4:: @ 0811BAC4
+ .incbin "baserom.gba", 0x11BAC4, 0x0000010
+
+gUnk_0811BAD4:: @ 0811BAD4
+ .incbin "baserom.gba", 0x11BAD4, 0x0000010
+
+gUnk_0811BAE4:: @ 0811BAE4
+ .incbin "baserom.gba", 0x11BAE4, 0x000000C
+
+gUnk_0811BAF0:: @ 0811BAF0
+ .incbin "baserom.gba", 0x11BAF0, 0x000003C
+
+gUnk_0811BB2C:: @ 0811BB2C
+ .incbin "baserom.gba", 0x11BB2C, 0x000000C
+
+gUnk_0811BB38:: @ 0811BB38
+ .incbin "baserom.gba", 0x11BB38, 0x0000004
+
+gUnk_0811BB3C:: @ 0811BB3C
+ .incbin "baserom.gba", 0x11BB3C, 0x000000C
+
+gUnk_0811BB48:: @ 0811BB48
+ .incbin "baserom.gba", 0x11BB48, 0x0000008
+
+gUnk_0811BB50:: @ 0811BB50
+ .incbin "baserom.gba", 0x11BB50, 0x0000008
+
+gUnk_0811BB58:: @ 0811BB58
+ .incbin "baserom.gba", 0x11BB58, 0x0000008
+
+gUnk_0811BB60:: @ 0811BB60
+ .incbin "baserom.gba", 0x11BB60, 0x0000008
+
+gUnk_0811BB68:: @ 0811BB68
+ .incbin "baserom.gba", 0x11BB68, 0x0000008
+
+gUnk_0811BB70:: @ 0811BB70
+ .incbin "baserom.gba", 0x11BB70, 0x0000010
+
+gUnk_0811BB80:: @ 0811BB80
+ .incbin "baserom.gba", 0x11BB80, 0x0000008
+
+gUnk_0811BB88:: @ 0811BB88
+ .incbin "baserom.gba", 0x11BB88, 0x0000008
+
+gUnk_0811BB90:: @ 0811BB90
+ .incbin "baserom.gba", 0x11BB90, 0x0000008
+
+gUnk_0811BB98:: @ 0811BB98
+ .incbin "baserom.gba", 0x11BB98, 0x0000014
+
+gUnk_0811BBAC:: @ 0811BBAC
+ .incbin "baserom.gba", 0x11BBAC, 0x0000010
+
+gUnk_0811BBBC:: @ 0811BBBC
+ .incbin "baserom.gba", 0x11BBBC, 0x0000006
+
+gUnk_0811BBC2:: @ 0811BBC2
+ .incbin "baserom.gba", 0x11BBC2, 0x0000006
+
+gUnk_0811BBC8:: @ 0811BBC8
+ .incbin "baserom.gba", 0x11BBC8, 0x0000006
+
+gUnk_0811BBCE:: @ 0811BBCE
+ .incbin "baserom.gba", 0x11BBCE, 0x0000006
+
+gUnk_0811BBD4:: @ 0811BBD4
+ .incbin "baserom.gba", 0x11BBD4, 0x0000010
+
+gUnk_0811BBE4:: @ 0811BBE4
+ .incbin "baserom.gba", 0x11BBE4, 0x0000008
+
+gUnk_0811BBEC:: @ 0811BBEC
+ .incbin "baserom.gba", 0x11BBEC, 0x000000C
+
+gUnk_0811BBF8:: @ 0811BBF8
+ .incbin "baserom.gba", 0x11BBF8, 0x0000010
+
+gUnk_0811BC08:: @ 0811BC08
+ .incbin "baserom.gba", 0x11BC08, 0x0000020
+
+gUnk_0811BC28:: @ 0811BC28
+ .incbin "baserom.gba", 0x11BC28, 0x0000008
+
+gUnk_0811BC30:: @ 0811BC30
+ .incbin "baserom.gba", 0x11BC30, 0x0000008
+
+gUnk_0811BC38:: @ 0811BC38
+ .incbin "baserom.gba", 0x11BC38, 0x0000008
+
+gUnk_0811BC40:: @ 0811BC40
+ .incbin "baserom.gba", 0x11BC40, 0x0000008
+
+gUnk_0811BC48:: @ 0811BC48
+ .incbin "baserom.gba", 0x11BC48, 0x0000018
+
+gUnk_0811BC60:: @ 0811BC60
+ .incbin "baserom.gba", 0x11BC60, 0x0000020
+
+gUnk_0811BC80:: @ 0811BC80
+ .incbin "baserom.gba", 0x11BC80, 0x0000008
+
+gUnk_0811BC88:: @ 0811BC88
+ .incbin "baserom.gba", 0x11BC88, 0x0000010
+
+gUnk_0811BC98:: @ 0811BC98
+ .incbin "baserom.gba", 0x11BC98, 0x000001C
+
+gUnk_0811BCB4:: @ 0811BCB4
+ .incbin "baserom.gba", 0x11BCB4, 0x0000010
diff --git a/include/area.h b/include/area.h
index 4d363a31..1c2ef424 100644
--- a/include/area.h
+++ b/include/area.h
@@ -11,14 +11,15 @@ typedef struct {
u16 localFlagOffset;
u8 filler[10];
u16 field_0x10;
- u16 field_0x12;
- u16 field_0x14;
- u8 field_0x16;
- u8 field_0x17;
+ u16 curPortalX;
+ u16 curPortalY;
+ u8 curPortalExitDirection;
+ u8 curPortalType;
u8 field_0x18;
// u8 filler3[7];
- u8 fadeOut;
- u8 filler2[14];
+ bool8 playShrinkSeq;
+ u8 unk1A;
+ u8 filler2[13];
u8 filler4[0x835];
u32 musicIndex;
u32 pMusicIndex;
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/audio.h b/include/audio.h
index 0f1a1b40..ad600283 100644
--- a/include/audio.h
+++ b/include/audio.h
@@ -1,6 +1,8 @@
+#ifndef AUDIO_H
+#define AUDIO_H
typedef enum {
- NONE,
+ SFX_NONE,
BGM_CASTLE_TOURNAMENT,
BGM_VAATI_MOTIF,
BGM_TITLE_SCREEN,
@@ -210,6 +212,8 @@ typedef enum {
SFX_PLY_SHRINKING = 0x16F,
SFX_PLY_GROW,
+ SFX_EZLO_UI = 0x173,
+
SFX_LAVA_TILE_STEP = 0x17B,
SFX_LAVA_TILE_WOBBLE,
SFX_LAVA_TILE_SINK,
@@ -240,4 +244,18 @@ typedef enum {
SFX_VO_CUCCO3,
SFX_VO_CUCCO4,
SFX_VO_CUCCO5,
-} Sound; \ No newline at end of file
+
+ SND_STOP_ALL = 0x80010000,
+ SONG_VOL_ZERO = 0x80020000,
+ SND_VOL_RESET_ALL = 0x80030000,
+ SND_VSYNC_OFF = 0x80040000,
+ SONG_STOP = 0x80050000,
+ SND_VSYNC_ON = 0x80060000,
+ SONG_VOL_FADE_OUT = 0x80080000,
+ SONG_VOL_RESET = 0x800B0000,
+ SONG_VOL_CHAN1_SILENT = 0x800D0000,
+ SONG_VOL_CHAN1_RESET = 0x800E0000,
+ SONG_RESET_UNK = 0x80100000,
+} Sound;
+
+#endif // AUDIO_H
diff --git a/include/position.h b/include/coord.h
index 4635a097..b91c97b2 100644
--- a/include/position.h
+++ b/include/coord.h
@@ -4,11 +4,18 @@
#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);
+void CopyPositionAndSpriteOffset(Entity* param_1, Entity* param_2);
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/createObject.h b/include/createObject.h
new file mode 100644
index 00000000..03f3632e
--- /dev/null
+++ b/include/createObject.h
@@ -0,0 +1,8 @@
+#ifndef CREATEOBJECT_H
+#define CREATEOBJECT_H
+
+// maybe a dedicated (create)Effect.h/c
+void CreateDust(Entity* parent);
+void CreateDustSmall(Entity* parent);
+
+#endif // CREATEOBJECT_H
diff --git a/include/enemy.h b/include/enemy.h
index b12a54e8..0b3e8ecb 100644
--- a/include/enemy.h
+++ b/include/enemy.h
@@ -89,7 +89,6 @@ extern void VaatiWrath(Entity*);
extern void VaatiArm(Entity*);
extern void Dust(Entity*);
extern void VaatiBall(Entity*);
-extern void Octorok(Entity*);
extern void Slime(Entity*);
extern void MiniSlime(Entity*);
extern void FireballGuy(Entity*);
@@ -110,6 +109,5 @@ extern void Enemy66(Entity*);
extern u32 GetNextFunction(Entity*);
extern void EnemyFunctionHandler(Entity*, void (*const func[])(Entity*));
-extern void sub_0804AA30(Entity*, void (*const func[])(Entity*));
extern void sub_08001324(Entity*);
#endif
diff --git a/include/entity.h b/include/entity.h
index f3a76a68..f19e0876 100644
--- a/include/entity.h
+++ b/include/entity.h
@@ -47,7 +47,7 @@ typedef struct Entity {
/*0x0a*/ u8 type; // was: form
/*0x0b*/ u8 type2; // was: parameter
/*0x0c*/ u8 action;
- /*0x0d*/ u8 previousActionFlag;
+ /*0x0d*/ u8 subAction;
/*0x0e*/ u8 actionDelay;
/*0x0f*/ u8 field_0xf;
/*0x10*/ u8 flags;
@@ -108,7 +108,7 @@ typedef struct Entity {
/*0x3a*/ u8 field_0x3a;
/*0x3b*/ u8 flags2;
/*0x3c*/ u8 field_0x3c;
- /*0x3d*/ s8 hurtBlinkTime;
+ /*0x3d*/ s8 iframes;
/*0x3e*/ u8 field_0x3e;
/*0x3f*/ u8 damageType;
/*0x40*/ u8 field_0x40;
@@ -166,37 +166,14 @@ extern LinkedList gUnk_03003D90;
extern LinkedList gUnk_03003DA0;
#define TILE(x, y) \
- ((((x - gRoomControls.roomOriginX) >> 4) & 0x3fU) | \
- (((y - gRoomControls.roomOriginY) >> 4) & 0x3fU) << 6)
+ (((((x) - gRoomControls.roomOriginX) >> 4) & 0x3fU) | \
+ ((((y) - gRoomControls.roomOriginY) >> 4) & 0x3fU) << 6)
#define COORD_TO_TILE(entity) \
- TILE(entity->x.HALF.HI, entity->y.HALF.HI)
+ TILE((entity)->x.HALF.HI, (entity)->y.HALF.HI)
#define COORD_TO_TILE_OFFSET(entity, xOff, yOff) \
- TILE(entity->x.HALF.HI - xOff, entity->y.HALF.HI - yOff)
-
-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*);
-
-extern void DeleteThisEntity(void);
-extern void CopyPosition(Entity*, Entity*);
-extern void DeleteEntity(Entity*);
-extern void PositionRelative(Entity*, Entity*, s32, s32);
+ TILE((entity)->x.HALF.HI - (xOff), (entity)->y.HALF.HI - (yOff))
enum {
DirectionNorth = 0x00,
@@ -211,12 +188,81 @@ enum {
#define DirectionIsVertical(expr) ((expr) & 0x10)
#define DirectionTurnAround(expr) (DirectionRoundUp(expr) ^ 0x10)
#define DirectionToAnimationState(expr) (DirectionRoundUp(expr) >> 3)
-#define DirectionFromAnimationState(expr) (expr << 3)
+#define DirectionFromAnimationState(expr) ((expr) << 3)
#define Direction8Round(expr) ((expr) & 0x1c)
#define Direction8RoundUp(expr) Direction8Round((expr) + 2)
#define Direction8TurnAround(expr) (Direction8RoundUp(expr) ^ 0x10)
#define Direction8ToAnimationState(expr) (Direction8RoundUp(expr) >> 2)
-#define Direction8FromAnimationState(expr) (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/fileScreen.h b/include/fileScreen.h
index b5782093..3ec9b15b 100644
--- a/include/fileScreen.h
+++ b/include/fileScreen.h
@@ -1,13 +1,8 @@
#ifndef FILESELECT_H
#define FILESELECT_H
+#include "audio.h"
#include "global.h"
-#include "functions.h"
-#include "main.h"
-#include "player.h"
-#include "readKeyInput.h"
-#include "screen.h"
-#include "menu.h"
#include "save.h"
typedef struct {
diff --git a/include/flags.h b/include/flags.h
index 85e6937e..c68be93e 100644
--- a/include/flags.h
+++ b/include/flags.h
@@ -29,7 +29,7 @@ extern u32 gGlobalFlags;
extern u32 gRoomFlags;
enum {
- NONE,
+ FLAG_NONE,
/*0x01*/ LV0_CLEAR, /* */
/*0x02*/ LV1_CLEAR, /* */
/*0x03*/ LV2_CLEAR, /* */
diff --git a/include/functions.h b/include/functions.h
index d6ce6fb3..5c62cced 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -5,72 +5,50 @@
#include "global.h"
#include "entity.h"
#include "manager.h"
-#include "position.h"
+#include "coord.h"
#include "player.h"
-#include "structures.h"
#include "room.h"
+#include "structures.h"
// Identified - to be sorted into header files
-extern u32 Random(void);
extern void SoundReq(u32);
extern void ShowNPCDialogue(Entity*, Dialog*);
-extern u32 UpdateFuseInteraction();
-extern void DeleteEntity(Entity*);
-extern u32 __modsi3(u32, u32);
extern void DoFade(u32, u32);
-extern u32 GetInventoryValue(u32);
extern u32 CheckKinstoneFused(u32);
extern void ForceEquipItem(u32, u8);
-extern void LoadRoomEntityList();
-void CopyPosition(Entity*, Entity*);
-extern void ResolveEntityOnTop(Entity*, Entity*);
-extern void EnemyFunctionHandler(Entity*, void (*const funcs[])(Entity*));
+extern void LoadRoomEntityList(EntityData* listPtr);
extern u32 GetAnimationState(Entity*);
extern void SetChildOffset(Entity*, s32, s32, s32);
-extern u32 GetFacingDirection(Entity*, Entity*);
extern Entity* CreatePlayerItem(u32, u32, u32, u32);
-extern Entity* GetEmptyEntity(void);
extern u32 GetTileTypeByPos(s32 x, s32 y, u32 layer);
extern u32 GetTileType(u32 pos, u32 layer);
-extern void MemClear32(void* src, u32 count);
extern void EraseAllEntities(void);
extern void SetTile(u32, u32, u32);
extern void SetDirtTile(u32);
extern void LoadRoomTileEntities(); // tba
extern Entity* CreateDeathFx(Entity*, u32, u32);
extern void UpdateAnimationVariableFrames(Entity*, u32);
-extern void CopyPositionAndSpriteOffset(Entity*, Entity*);
extern u8* GetSpriteSubEntryOffsetDataPointer(u32, u32);
extern u32 LoadFixedGFX(Entity*, u32);
-extern void MemFill32(u32, void*, u32);
extern Entity* CreateItemEntity(u32, u32, u32);
-void MemCopy(const void* src, void* dst, u32 size);
extern u32 ProcessMovement(Entity*);
-extern Entity* FindEntityInListBySubtype(u32, u32, u32);
-extern Entity* FindEntityInListByForm(u32, u32, u32, u32, u32);
-extern void MemClear32(void*, u32);
extern void MenuFadeIn(u32, u32);
extern void LoadResourceAsync(const void*, u32, u32);
extern void LoadPaletteGroup(u32);
extern void TryLoadPrologueHyruleTown(void);
extern Manager* GetEmptyManager(void);
-extern void AppendEntityToList(void*, u32);
extern void LoadGfxGroup(u32);
extern void EnqueueSFX(u32);
extern void ResetPlayer(void);
-extern void CreateDust(Entity*);
extern u32 IsItemEquipped(u32);
extern void DeleteManager(Manager*);
extern bool32 CheckPlayerInRegion(u32 centerX, u32 centerY, u32 radiusX, u32 radiusY);
-extern u32 CheckIsDungeon(void);
extern u32 GetTileTypeByEntity(Entity*);
// Unidentified
extern u32 sub_0806ED78(Entity*);
-extern void sub_0806920C(Entity*);
extern u32 sub_0805ACC0(Entity*);
extern u32 sub_0801E99C(Entity*);
-extern void sub_0806924C(Entity*);
extern Entity* sub_080873AC(Entity*, u32, u32);
extern void sub_08078778(Entity*);
extern void sub_080787A8(Entity*, u32);
@@ -78,7 +56,6 @@ extern void sub_0806F118(Entity*);
extern void sub_080791D0();
extern void sub_0805EC9C();
extern void sub_0805EC60();
-extern void sub_080873D0();
extern u32 sub_080045D4(s16, s16, u32, u32);
extern void sub_0806F69C(Entity*);
extern void sub_0805E3A0(void*, u32);
@@ -91,16 +68,11 @@ extern void sub_0807000C(Entity*);
extern void sub_0805E47C(Entity*);
extern void sub_0805E584(Entity*);
extern void sub_08068BEC(Entity*, u32);
-extern void sub_08078778(Entity*);
-extern s32 sub_0806ED9C(Entity*, u32, u32);
extern s32 sub_0806F078(Entity*, s32);
extern void sub_0801D2B4(Entity*, u32);
extern void sub_0806FD3C(Entity*);
-extern u32 sub_0801E99C(Entity*);
-extern void sub_0806F118(Entity*);
extern void sub_0805ED14(u32*);
extern void sub_080A7C18(u32, u32, u32);
-extern void sub_08068BEC(Entity*, u32);
extern void sub_0804AA30(Entity*, void (*const funcs[])(Entity*));
extern Entity* sub_0804A9FC(Entity*, u32);
extern void sub_0804A720(Entity*);
@@ -110,7 +82,7 @@ extern u32 sub_08049FDC(Entity*, u32);
extern u32 sub_080041A0(Entity*, Entity*, u32, u32);
extern u32 sub_08049EE4(Entity*);
extern Entity* sub_0804A98C(Entity*, u8, u8);
-extern u32 sub_080544DC(u32);
+extern u32 GetBottleContaining(u32);
extern void sub_08077E54(Entity*);
extern void sub_080042BA(Entity*, u32);
extern void sub_08077F24(ItemBehavior*, u32);
@@ -147,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);
@@ -155,8 +127,6 @@ extern void sub_080530C8(void);
extern void sub_0805B4D0(u32);
extern void sub_0804D0B4(void);
extern void sub_0805308C(u32);
-extern void sub_0805AF60();
-extern void sub_0805D3C8(u32);
extern void sub_080534AC();
extern void sub_0807BA8C(u32, u32);
extern void sub_0804D9B0();
@@ -170,7 +140,6 @@ extern void sub_08054564();
extern void sub_0801DD58(u32, u32);
extern void sub_0804ED18();
extern void sub_080AF2E4(void);
-extern void sub_0805ADD8(u32);
extern void sub_0804F578(void);
extern void sub_08059994(void);
extern s32 sub_0801CFA8(u32);
@@ -262,7 +231,6 @@ u32 sub_0806FCB8(Entity*, u32, u32, u32);
extern Entity* sub_080A7EE0(u32);
extern void sub_080A1D70(Entity*, u32);
extern void sub_0806F62C(Entity*, u32, u32);
-extern u32 sub_08079F8C(void);
extern void sub_080A1ED0(u32, u32, u32);
extern u32 sub_0806F5B0(u32);
extern void sub_0801DFB4(Entity*, u32, u32, u32);
@@ -288,7 +256,6 @@ extern void sub_080791BC9();
extern void sub_080791BC();
extern void sub_08056360();
extern u32 sub_080542AC(u32);
-extern void sub_0807A108();
extern u32 sub_08079FC4(u32);
extern void sub_0800455E(Entity*);
extern void sub_08008790(Entity*, u32);
diff --git a/include/game.h b/include/game.h
new file mode 100644
index 00000000..dec15e21
--- /dev/null
+++ b/include/game.h
@@ -0,0 +1,6 @@
+#ifndef GAME_H
+#define GAME_H
+
+u32 CheckIsDungeon(void);
+
+#endif // GAME_H
diff --git a/include/gba/macro.h b/include/gba/macro.h
index b08ed921..f142d5c0 100644
--- a/include/gba/macro.h
+++ b/include/gba/macro.h
@@ -1,16 +1,16 @@
#ifndef GUARD_GBA_MACRO_H
#define GUARD_GBA_MACRO_H
-#define CPU_FILL(value, dest, size, bit) \
- { \
- vu##bit tmp = (vu##bit)(value); \
- CpuSet((void*)&tmp, dest, CPU_SET_##bit##BIT | CPU_SET_SRC_FIXED | ((size) / (bit / 8) & 0x1FFFFF)); \
+#define CPU_FILL(value, dest, size, bit) \
+ { \
+ vu##bit tmp = (vu##bit)(value); \
+ CpuSet((void*)&tmp, dest, CPU_SET_##bit##BIT | CPU_SET_SRC_FIXED | ((size) / ((bit) / 8) & 0x1FFFFF)); \
}
#define CpuFill16(value, dest, size) CPU_FILL(value, dest, size, 16)
#define CpuFill32(value, dest, size) CPU_FILL(value, dest, size, 32)
-#define CPU_COPY(src, dest, size, bit) CpuSet(src, dest, CPU_SET_##bit##BIT | ((size) / (bit / 8) & 0x1FFFFF))
+#define CPU_COPY(src, dest, size, bit) CpuSet(src, dest, CPU_SET_##bit##BIT | ((size) / ((bit) / 8) & 0x1FFFFF))
#define CpuCopy16(src, dest, size) CPU_COPY(src, dest, size, 16)
#define CpuCopy32(src, dest, size) CPU_COPY(src, dest, size, 32)
@@ -42,7 +42,7 @@
vu##bit tmp = (vu##bit)(value); \
DmaSet(dmaNum, &tmp, dest, \
(DMA_ENABLE | DMA_START_NOW | DMA_##bit##BIT | DMA_SRC_FIXED | DMA_DEST_INC) << 16 | \
- ((size) / (bit / 8))); \
+ ((size) / ((bit) / 8))); \
}
#define DmaFill16(dmaNum, value, dest, size) DMA_FILL(dmaNum, value, dest, size, 16)
@@ -65,7 +65,7 @@
#define DMA_COPY(dmaNum, src, dest, size, bit) \
DmaSet(dmaNum, src, dest, \
- (DMA_ENABLE | DMA_START_NOW | DMA_##bit##BIT | DMA_SRC_INC | DMA_DEST_INC) << 16 | ((size) / (bit / 8)))
+ (DMA_ENABLE | DMA_START_NOW | DMA_##bit##BIT | DMA_SRC_INC | DMA_DEST_INC) << 16 | ((size) / ((bit) / 8)))
#define DmaCopy16(dmaNum, src, dest, size) DMA_COPY(dmaNum, src, dest, size, 16)
#define DmaCopy32(dmaNum, src, dest, size) DMA_COPY(dmaNum, src, dest, size, 32)
@@ -112,7 +112,7 @@
#define DmaFillLarge(dmaNum, value, dest, size, block, bit) \
{ \
- void* _dest = (void*)dest; \
+ void* _dest = (void*)(dest); \
u32 _size = size; \
while (1) { \
DmaFill##bit(dmaNum, value, _dest, (block)); \
@@ -149,7 +149,7 @@
#define DmaFillDefvars(dmaNum, value, dest, size, bit) \
{ \
- void* _dest = (void*)dest; \
+ void* _dest = (void*)(dest); \
u32 _size = size; \
DmaFill##bit(dmaNum, value, _dest, _size); \
}
@@ -180,7 +180,7 @@
\
imeTemp = REG_IME; \
REG_IME = 0; \
- REG_IE |= flags; \
+ REG_IE |= (flags); \
REG_IME = imeTemp; \
}
diff --git a/include/global.h b/include/global.h
index de47c6ac..489f276d 100644
--- a/include/global.h
+++ b/include/global.h
@@ -31,9 +31,9 @@
#define SWAP(a, b, temp) \
{ \
- temp = a; \
- a = b; \
- b = temp; \
+ (temp) = a; \
+ (a) = b; \
+ (b) = temp; \
}
// useful math macros
@@ -47,25 +47,25 @@
#define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) >= (b) ? (a) : (b))
-#define BOOLCAST(x) ((-x | x) >> 31)
+#define BOOLCAST(x) ((-(x) | (x)) >> 31)
#define static_assert(cond) extern char assertion[(cond) ? 1 : -1]
#if NON_MATCHING
-#define asmfunc(prologue, path)
+#define ASM_FUNC(path, decl)
#else
-#define asmfunc(prologue, path) \
- NAKED prologue { \
+#define ASM_FUNC(path, decl) \
+ NAKED decl { \
asm(".include " #path); \
}
#endif
#if NON_MATCHING
-#define NONMATCH(prologue, path) prologue
+#define NONMATCH(path, decl) decl
#define END_NONMATCH
#else
-#define NONMATCH(path, prologue) \
- NAKED prologue { \
- asm(".include " #path); \
+#define NONMATCH(path, decl) \
+ NAKED decl { \
+ asm(".include " #path); \
if (0)
#define END_NONMATCH }
#endif
diff --git a/include/greatFairy.h b/include/greatFairy.h
index d5e4906b..fd325b6c 100644
--- a/include/greatFairy.h
+++ b/include/greatFairy.h
@@ -3,23 +3,9 @@
#include "screen.h"
-extern u32 __modsi3(u32, u32);
-extern void InitializeAnimation(Entity*, u32);
-extern void GreatFairy_InitializeAnimation(Entity*);
-extern u32 CheckRoomFlag();
-extern Entity* GreatFairy_CreateForm(Entity*, u32, u32);
-extern void PositionRelative();
-extern void CopyPosition();
-extern void DoFade();
-extern void SoundReq();
-extern void GetNextFrame();
-extern void sub_0805EC9C();
-extern void sub_0805EC60();
-extern void sub_080873D0();
-extern void DeleteEntity();
-extern void sub_0806F69C();
-extern Entity* FindEntityInListBySubtype(u32, u32, u32);
-extern void sub_080791D0();
+void GreatFairy_InitializeAnimation(Entity*);
+Entity* GreatFairy_CreateForm(Entity*, u32, u32);
+void sub_080873D0();
extern void (*const GreatFairy_Main[])(Entity*);
extern void (*const GreatFairy_Behaviors[])(Entity*);
extern void (*const GreatFairy_WingsBehaviors[])(Entity*);
@@ -35,15 +21,9 @@ extern void (*const GreatFairy_Form2Behaviors[])(Entity*);
extern void (*const gUnk_081207A4[])(Entity*);
extern u32 gUnk_0810C2E4;
-extern RoomControls gRoomControls;
-extern Entity gPlayerEntity;
extern const s16 GreatFairy_RippleOffsets[10];
extern u32 gUnk_02034350;
-extern RoomVars gRoomVars;
-extern Screen gScreen;
-extern struct_02033280 gActiveScriptInfo;
extern u8 gUnk_0812079C[8];
-extern s16 gSineTable[];
extern s8 gUnk_081207AC[];
#endif
diff --git a/include/item.h b/include/item.h
index e0dc4bbb..0f9fd6f2 100644
--- a/include/item.h
+++ b/include/item.h
@@ -7,36 +7,19 @@
extern void DebugItem(ItemBehavior*, u32);
extern void Sword(ItemBehavior*, u32);
-extern void Sword(ItemBehavior*, u32);
-extern void Sword(ItemBehavior*, u32);
-extern void Sword(ItemBehavior*, u32);
-extern void Sword(ItemBehavior*, u32);
-extern void Sword(ItemBehavior*, u32);
extern void Bomb(ItemBehavior*, u32);
-extern void Bomb(ItemBehavior*, u32);
-extern void Bow(ItemBehavior*, u32);
extern void Bow(ItemBehavior*, u32);
extern void sub_08075D14(ItemBehavior*, u32);
-extern void sub_08075D14(ItemBehavior*, u32);
-extern void Shield(ItemBehavior*, u32);
extern void Shield(ItemBehavior*, u32);
extern void Lantern(ItemBehavior*, u32);
-extern void Lantern(ItemBehavior*, u32);
extern void GustJar(ItemBehavior*, u32);
extern void PacciCane(ItemBehavior*, u32);
extern void MoleMitts(ItemBehavior*, u32);
extern void RocsCape(ItemBehavior*, u32);
extern void sub_08076800(ItemBehavior*, u32);
-extern void DebugItem(ItemBehavior*, u32);
extern void Ocarina(ItemBehavior*, u32);
-extern void DebugItem(ItemBehavior*, u32);
-extern void DebugItem(ItemBehavior*, u32);
-extern void DebugItem(ItemBehavior*, u32);
extern void TryPickupObject(ItemBehavior*, u32);
extern void JarEmpty(ItemBehavior*, u32);
-extern void JarEmpty(ItemBehavior*, u32);
-extern void JarEmpty(ItemBehavior*, u32);
-extern void JarEmpty(ItemBehavior*, u32);
/* On hold until naming conflicts are resolved */
/*
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/npc.h b/include/npc.h
index b27a82f9..ec7fc861 100644
--- a/include/npc.h
+++ b/include/npc.h
@@ -42,10 +42,6 @@ extern void SittingPerson_Head(Entity*);
extern void SittingPerson_Fusion(Entity*);
extern void Pina(Entity*);
extern void Pina_Fusion(Entity*);
-extern void Guard(Entity*);
-extern void Guard_Head(Entity*);
-extern void Maid(Entity*);
-extern void Maid_Head(Entity*);
extern void Din(Entity*);
extern void Din_Fusion(Entity*);
extern void Nayru(Entity*);
diff --git a/include/player.h b/include/player.h
index e9d96665..da6f324b 100644
--- a/include/player.h
+++ b/include/player.h
@@ -6,6 +6,41 @@
#include "global.h"
#include "entity.h"
+enum {
+ PLAYER_INIT,
+ PLAYER_NORMAL,
+ PLAYER_DUMMY,
+ PLAYER_FALL,
+ PLAYER_JUMP,
+ PLAYER_PUSH,
+ PLAYER_BOUNCE,
+ PLAYER_08070E9C,
+ PLAYER_ITEMGET,
+ PLAYER_MINISH,
+ PLAYER_MINISHDIE,
+ PLAYER_08071DB8,
+ PLAYER_EMPTYBOTTLE,
+ PLAYER_FROZEN,
+ PLAYER_0807204C,
+ PLAYER_080720DC,
+ PLAYER_PULL,
+ PLAYER_LAVA,
+ PLAYER_WARP,
+ PLAYER_08072454,
+ PLAYER_DROWN,
+ PLAYER_USEPORTAL,
+ PLAYER_TALKEZLO,
+ PLAYER_ROOMTRANSITION,
+ PLAYER_ROLL,
+ PLAYER_080728AC,
+ PLAYER_INHOLE,
+ PLAYER_08072C9C,
+ PLAYER_08074C44,
+ PLAYER_08072F34,
+ PLAYER_USEENTRANCE,
+ PLAYER_PARACHUTE,
+};
+
typedef struct {
/*0x00*/ u8 field_0x0[2];
/*0x02*/ u8 jumpStatus;
@@ -17,12 +52,14 @@ typedef struct {
/*0x0a*/ u8 field_0xa;
/*0x0b*/ u8 keepFacing;
/*0x0c*/ u8 playerAction;
- /*0x0d*/ u8 field_0xd[2];
+ /*0x0d*/ u8 field_0xd;
+ /*0x0e*/ u8 field_0xe;
/*0x0f*/ u8 hurtBlinkSpeed;
/*0x10*/ u8 field_0x10[4];
/*0x11*/ u8 field_0x14;
/*0x11*/ u8 field_0x15;
- /*0x14*/ u16 field_0x16[2];
+ /*0x14*/ u16 startPosX;
+ /*0x16*/ u16 startPosY;
/*0x1a*/ u8 field_0x1a[2];
/*0x1c*/ u8 field_0x1c;
/*0x1d*/ u8 field_0x1d[5];
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/room.h b/include/room.h
index 35ed3137..f192c164 100644
--- a/include/room.h
+++ b/include/room.h
@@ -63,13 +63,13 @@ typedef struct {
// Packets used to store which entities to load in a room
typedef struct {
- u8 type : 4;
+ u8 kind : 4;
u8 layer : 4;
u8 flags : 4;
u8 unk : 4;
- u8 subtype;
- u8 form;
- u32 parameter;
+ u8 id;
+ u8 type;
+ u32 type2;
u16 xPos;
u16 yPos;
u32 spritePtr;
diff --git a/include/structures.h b/include/structures.h
index 42e9d3ab..d47ee7a1 100644
--- a/include/structures.h
+++ b/include/structures.h
@@ -39,8 +39,7 @@ typedef struct {
u8 field_0x4[0x4];
bool8 transitioningOut;
u8 transitionType; // transition when changing areas
- u8 field_0xa; // seems to be a tile type
- u8 field_0xb;
+ u16 field_0xa; // seems to be a tile type
u8 areaID;
u8 roomID;
u8 playerState;
@@ -167,6 +166,22 @@ extern BG3Buffer gBG3Buffer;
static_assert(sizeof(BG3Buffer) == 0x1000);
*/
+struct {
+ u8 filler[0x70];
+} extern gUnk_03000B80;
+static_assert(sizeof(gUnk_03000B80) == 0x70);
+
+typedef struct {
+ u8 unk0;
+ u8 unk1;
+ u8 unk2;
+ u8 unk3;
+ u8 freezeTime;
+ u8 unk9;
+} EntityHandler;
+
+extern EntityHandler gUnk_03003DC0;
+
extern u8 gUnk_02022740[];
extern u8 gUnk_02034490[];
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 b3ea342a..99012e2d 100644
--- a/linker.ld
+++ b/linker.ld
@@ -261,7 +261,7 @@ SECTIONS {
. = 0x00005D24; gUnk_03005D24 = .;
. = 0x00005D58; gUnk_03005D58 = .;
. = 0x00005D5C; gUnk_03005D5C = .;
- . = 0x00005D90; gUnk_03005D90 = .;
+ . = 0x00005D90; IntrMain = .;
. = 0x00005E60; gUnk_03005E60 = .;
. = 0x00005E98; gUnk_03005E98 = .;
. = 0x00005F24; _EntUpdate = .;
@@ -330,10 +330,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);
@@ -454,13 +451,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);
@@ -543,7 +539,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);
@@ -649,9 +645,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);
@@ -666,13 +660,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);
@@ -768,7 +758,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);
@@ -918,7 +907,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);
@@ -1022,6 +1011,8 @@ SECTIONS {
data/data_08108D30.o(.rodata);
src/npc/ezloCap.o(.rodata);
data/data_08114208.o(.rodata);
+ src/player.o(.rodata);
+ data/data_0811B9E0.o(.rodata);
src/item.o(.rodata);
data/data_0811BD44.o(.rodata);
data/room_headers.o(.rodata);
diff --git a/src/arm_proxy.c b/src/arm_proxy.c
index e18e4a1c..4e153936 100644
--- a/src/arm_proxy.c
+++ b/src/arm_proxy.c
@@ -8,6 +8,7 @@
#include "functions.h"
#include "object.h"
#include "manager.h"
+#include "utils.h"
#include "npc.h"
extern u8 gUnk_03003DE0;
@@ -30,7 +31,7 @@ extern void LoadResources();
extern void FadeMain();
extern u32 sub_0805E3B0();
extern void HandlePlayerLife();
-extern void sub_08070680();
+extern void DoPlayerAction();
extern void sub_080171F0();
extern void sub_08078FB0();
extern void DrawEntity();
@@ -69,17 +70,6 @@ typedef struct {
extern NPCStruct gUnk_02031EC0[100];
typedef struct {
- u8 unk0;
- u8 unk1;
- u8 unk2;
- u8 unk3;
- u8 freezeTime;
- u8 unk9;
-} EntityHandler;
-
-extern EntityHandler gUnk_03003DC0;
-
-typedef struct {
void* last;
void* first;
void* node;
@@ -156,7 +146,7 @@ void PlayerUpdate(Entity* this) {
}
}
HandlePlayerLife(this);
- sub_08070680(this);
+ DoPlayerAction(this);
if ((this->height.WORD == 0) && (this->action == 1 || this->action == 9))
sub_08008790(this, 8);
sub_080171F0();
@@ -174,7 +164,7 @@ void HandlePlayerLife(Entity* this) {
gUnk_0200AF00.filler25[8] = 0;
gUnk_0200AF00.filler25[9] = 0;
- if ((gPlayerEntity.bitfield & 0x80) && (gPlayerEntity.hurtBlinkTime > 0))
+ if ((gPlayerEntity.bitfield & 0x80) && (gPlayerEntity.iframes > 0))
SoundReq(SFX_86);
gPlayerState.flags.all &= ~(0x2000000 | 0x200);
@@ -263,7 +253,7 @@ void sub_080171F0(void) {
gPlayerState.field_0x1a[0] = 0;
gPlayerState.field_0x80 = 0;
gPlayerState.field_0xaa = 0;
- MemClear32(&gUnk_03003BE0, 0x8c);
+ MemClear(&gUnk_03003BE0, 0x8c);
gPlayerEntity.spriteOffsetY = gPlayerState.field_0x3f;
gPlayerState.field_0x3f = 0;
sub_0807B0C8();
@@ -278,7 +268,7 @@ void sub_080171F0(void) {
sub_0807A8D8(&gPlayerEntity);
if (gPlayerState.jumpStatus & 0xc0)
- gPlayerEntity.hurtBlinkTime = 0xfe;
+ gPlayerEntity.iframes = 0xfe;
if (gPlayerEntity.action != 0x17) {
sub_08077FEC(gPlayerEntity.action);
@@ -286,17 +276,17 @@ void sub_080171F0(void) {
}
void ItemUpdate(Entity* this) {
- if ((this->flags & 1) == 0 && this->action == 0 && this->previousActionFlag == 0)
+ if ((this->flags & 1) == 0 && this->action == 0 && this->subAction == 0)
ItemInit(this);
if (!sub_0805E3B0(this)) {
gPlayerItemFunctions[this->id](this);
this->bitfield &= ~0x80;
- if (this->hurtBlinkTime != 0) {
- if (this->hurtBlinkTime > 0)
- this->hurtBlinkTime--;
+ if (this->iframes != 0) {
+ if (this->iframes > 0)
+ this->iframes--;
else
- this->hurtBlinkTime++;
+ this->iframes++;
}
}
DrawEntity(this);
@@ -340,8 +330,8 @@ void ObjectUpdate(Entity* this) {
if (((this->flags & 1) == 0) && (this->action == 0))
sub_080A2838(this);
- if (this->hurtBlinkTime != 0)
- this->hurtBlinkTime++;
+ if (this->iframes != 0)
+ this->iframes++;
if (!sub_0805E3B0(this)) {
gObjectFunctions[this->id](this);
this->bitfield &= ~0x80;
@@ -403,7 +393,7 @@ void CollisionMain(void) {
}
void RegisterPlayerHitbox(void) {
- MemClear32(&gUnk_03003C70, sizeof(gUnk_03003C70));
+ MemClear(&gUnk_03003C70, sizeof(gUnk_03003C70));
gUnk_02018EA0 = (LinkedList2*)&gUnk_03003C70[0].last;
gUnk_03003C70[0].last = &gUnk_03003C70[0].last;
gUnk_03003C70[0].first = &gUnk_03003C70[0].last;
diff --git a/src/code_08018C58.c b/src/code_08018C58.c
index fd918e31..14caf9cd 100644
--- a/src/code_08018C58.c
+++ b/src/code_08018C58.c
@@ -1,5 +1,4 @@
#include "global.h"
-#include "entity.h"
extern u32 SetTileType(u32 tileID, u32 tilePos, u32 layerID);
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 12564596..993de6ee 100644
--- a/src/code_080300AC.c
+++ b/src/code_080300AC.c
@@ -1,9 +1,7 @@
#include "global.h"
-#include "entity.h"
+#include "utils.h"
#include "functions.h"
-// extern void DmaZero(void*, u32);
-
typedef struct {
u16 unk0;
u16 filler2[32];
@@ -13,13 +11,13 @@ typedef struct {
extern struct_0300110C gUnk_0300110C;
void sub_080300AC(void) {
- MemClear32(&gUnk_0300110C.unk0, 0x44);
+ MemClear(&gUnk_0300110C.unk0, 0x44);
gUnk_0300110C.unk66 = 0xff;
}
void sub_080300C4(void) {
if (gScreenTransition.field_0xae == 0xff) {
gScreenTransition.field_0xac = 0;
- MemClear32(&gScreenTransition.field_0x4c[32], 0x40);
+ MemClear(&gScreenTransition.field_0x4c[32], 0x40);
}
}
diff --git a/src/code_0804AA84.c b/src/code_0804AA84.c
index 59485d74..cdc00c3f 100644
--- a/src/code_0804AA84.c
+++ b/src/code_0804AA84.c
@@ -2,6 +2,7 @@
#include "entity.h"
#include "area.h"
#include "main.h"
+#include "utils.h"
#include "functions.h"
#include "screen.h"
@@ -10,15 +11,13 @@ typedef struct {
u32 unk;
} struct_02018EB0;
-extern void sub_0805E5A8();
-
extern void (*const gUnk_080D4120[])();
extern void (*const gUnk_080D412C[])();
extern struct_02018EB0 gUnk_02018EB0;
u32 sub_0804AA84(void) {
- if (gArea.fadeOut != 0) {
+ if (gArea.playShrinkSeq) {
gMain.transition = 4;
gArea.filler[8] = 0;
gArea.filler[9] = 0;
@@ -26,8 +25,8 @@ u32 sub_0804AA84(void) {
sub_0805E5A8();
return 1;
} else {
- gArea.filler[18] = gArea.fadeOut;
- *(vu8*)&gArea.fadeOut = gArea.fadeOut;
+ gArea.filler[18] = gArea.playShrinkSeq;
+ *(vu8*)&gArea.playShrinkSeq = gArea.playShrinkSeq;
return 0;
}
}
@@ -37,10 +36,10 @@ void sub_0804AAB8(void) {
}
void sub_0804AAD4(void) {
- MemClear32((void*)&gUnk_02018EB0, 0x28);
+ MemClear(&gUnk_02018EB0, 0x28);
gUnk_02018EB0.unk = 0;
EraseAllEntities();
- CreateObject(0x3d, gArea.field_0x17, 0);
+ CreateObject(0x3d, gArea.curPortalType, 0);
gArea.filler[8]++;
}
diff --git a/src/code_0805436C.c b/src/code_0805436C.c
index be879f99..2e12b6b0 100644
--- a/src/code_0805436C.c
+++ b/src/code_0805436C.c
@@ -1,5 +1,4 @@
#include "global.h"
-#include "entity.h"
#include "player.h"
#include "room.h"
#include "menu.h"
@@ -133,7 +132,7 @@ u32 sub_080544C8(u32 arg0) {
}
}
-u32 sub_080544DC(u32 arg0) {
+u32 GetBottleContaining(u32 arg0) {
if (arg0 == gSave.stats.bottles[0]) {
return 1;
} else if (arg0 == gSave.stats.bottles[1]) {
diff --git a/src/code_0805F9A0.c b/src/code_0805F9A0.c
index 33f037ad..66ac2ba9 100644
--- a/src/code_0805F9A0.c
+++ b/src/code_0805F9A0.c
@@ -1,6 +1,7 @@
#include "global.h"
-#include "functions.h"
+#include "utils.h"
#include "structures.h"
+#include "functions.h"
extern u16 gUnk_081092D4;
extern u8 gUnk_02036AD8;
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 1697ecb0..c25aa18e 100644
--- a/src/code_08077DF4.c
+++ b/src/code_08077DF4.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "entity.h"
#include "player.h"
+#include "utils.h"
#include "functions.h"
typedef struct {
@@ -35,7 +36,7 @@ void sub_08077E3C(Entity* ent, u32 idx) {
void sub_08077E54(Entity* ent) {
ent->action = gPlayerEntity.animIndex;
*(u8*)&ent->spriteIndex = gPlayerEntity.frameIndex;
- ent->previousActionFlag = gPlayerEntity.frameDuration;
+ ent->subAction = gPlayerEntity.frameDuration;
ent->actionDelay = gPlayerEntity.frames.all;
}
@@ -57,7 +58,7 @@ void sub_08077E78(void* arg0, u32 bits) {
not = ~not ;
gPlayerState.field_0xa &= not ;
gPlayerState.keepFacing &= not ;
- MemClear32(arg0, 0x1c);
+ MemClear(arg0, 0x1c);
}
u32 sub_08077EC8(Unk_struct* arg0) {
diff --git a/src/code_0808091C.c b/src/code_0808091C.c
index 1916869c..0ea3dbcf 100644
--- a/src/code_0808091C.c
+++ b/src/code_0808091C.c
@@ -4,16 +4,13 @@
#include "functions.h"
#include "room.h"
-extern void sub_0805E5A8();
extern void sub_08080BC4(void);
-extern RoomControls gRoomControls;
extern u32 gUnk_0200B650;
extern u32 gUnk_02025EB0;
extern u8 gUnk_02000070;
extern void DoExitTransition(ScreenTransitionData*);
-extern void sub_080809D4();
void sub_080808D8(void) {
gScreenTransition.transitionType = 0;
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/createEnemy.c b/src/createEnemy.c
index 5ce7af89..73eb5e5c 100644
--- a/src/createEnemy.c
+++ b/src/createEnemy.c
@@ -1,8 +1,5 @@
-#include "entity.h"
#include "global.h"
-
-extern Entity* GetEmptyEntity();
-extern void AppendEntityToList(Entity*, u8);
+#include "entity.h"
Entity* CreateEnemy(u32 subtype, u32 form) {
Entity* enemy;
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/createNPC.c b/src/createNPC.c
index b8a30fdf..7e57e92e 100644
--- a/src/createNPC.c
+++ b/src/createNPC.c
@@ -1,19 +1,16 @@
#include "global.h"
#include "entity.h"
-extern Entity* GetEmptyEntity();
-extern void AppendEntityToList(Entity*, u8);
-
Entity* CreateNPC(u32 subtype, u32 form, u32 parameter) {
- Entity* pEVar1;
+ Entity* entity;
- pEVar1 = GetEmptyEntity();
- if (pEVar1 != NULL) {
- pEVar1->kind = 7;
- pEVar1->id = subtype;
- pEVar1->type = form;
- pEVar1->type2 = parameter;
- AppendEntityToList(pEVar1, 7);
+ entity = GetEmptyEntity();
+ if (entity != NULL) {
+ entity->kind = 7;
+ entity->id = subtype;
+ entity->type = form;
+ entity->type2 = parameter;
+ AppendEntityToList(entity, 7);
}
- return pEVar1;
+ return entity;
}
diff --git a/src/createObject.c b/src/createObject.c
index 62c67062..16f5df16 100644
--- a/src/createObject.c
+++ b/src/createObject.c
@@ -1,22 +1,21 @@
#include "global.h"
#include "entity.h"
+#include "coord.h"
#include "room.h"
-
-extern Entity* GetEmptyEntity();
-extern void AppendEntityToList(Entity*, u8);
+#include "createObject.h"
Entity* CreateObject(u32 subtype, u32 form, u32 parameter) {
- Entity* ent;
-
- ent = GetEmptyEntity();
- if (ent != NULL) {
- ent->kind = 6;
- ent->id = subtype;
- ent->type = form;
- ent->type2 = parameter;
- AppendEntityToList(ent, 6);
+ Entity* entity;
+
+ entity = GetEmptyEntity();
+ if (entity != NULL) {
+ entity->kind = 6;
+ entity->id = subtype;
+ entity->type = form;
+ entity->type2 = parameter;
+ AppendEntityToList(entity, 6);
}
- return ent;
+ return entity;
}
Entity* CreateObjectWithParent(Entity* parentEnt, u32 subtype, u32 form, u32 parameter) {
diff --git a/src/screenDebug.c b/src/debugScreen.c
index 2271e2b7..bc034e8e 100644
--- a/src/screenDebug.c
+++ b/src/debugScreen.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "utils.h"
#include "functions.h"
#include "main.h"
#include "menu.h"
@@ -6,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[])();
@@ -22,9 +16,9 @@ void HandleDebugTextScreen() {
}
void sub_0805FA04(void) {
- sub_0801DA90(1);
- MemClear32((void*)&gBG0Buffer, sizeof(BGBuffer));
- MemClear32((void*)&gBG3Buffer, 0x1000);
+ DispReset(1);
+ MemClear(&gBG0Buffer, sizeof(BGBuffer));
+ MemClear(&gBG3Buffer, 0x1000);
gScreen.lcd.displayControl = 0x940;
gScreen.bg.bg0xOffset = 0;
gScreen.bg.bg0yOffset = 0;
@@ -33,8 +27,8 @@ void sub_0805FA04(void) {
gScreen.affine.bg3Control = 0x1e0f;
gScreen.affine.bg3Updated = 1;
MessageInitialize();
- MemClear32((void*)&gUnk_02032EC0, sizeof(UI));
- MemClear32((void*)&gMenu, sizeof(Menu));
+ MemClear((void*)&gUnk_02032EC0, sizeof(UI));
+ MemClear((void*)&gMenu, sizeof(Menu));
gMenu.unk16 = gUnk_02000000->gameLanguage;
sub_08053320();
sub_0801D79C(0, 0x1144);
@@ -46,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 4c79f72e..00000000
--- a/src/dma.c
+++ /dev/null
@@ -1,49 +0,0 @@
-#include "global.h"
-#include "entity.h"
-
-void MemFill32(u32, u8*, u32);
-void MemFill16(u32, u8*, u32);
-
-void MemFill16(u32 value, u8* dest, u32 size) {
- DmaFill16(3, value, dest, size);
-}
-
-void MemFill32(u32 value, u8* dest, u32 size) {
- DmaFill32(3, value, dest, size);
-}
-
-void MemClear32(u8* src, u32 size) {
- u32 zero = 0;
-
- switch (((u32)src | size) & 3) {
- case 0:
- MemFill32(0, src, size);
- break;
- case 2:
- MemFill16(0, src, size);
- break;
- default:
- do {
- *src = zero;
- src++;
- size--;
- } while (size != 0);
- }
-}
-
-void MemCopy(const u8* src, u8* dst, u32 size) {
- switch (((u32)src | (u32)dst | size) & 3) {
- case 0:
- DmaCopy32(3, src, dst, size);
- break;
- case 2:
- DmaCopy16(3, src, dst, size);
- break;
- default:
- do {
- *dst = *src;
- src++;
- dst++;
- } while (--size);
- }
-}
diff --git a/src/enemy/acroBandits.c b/src/enemy/acroBandits.c
index 2825aed5..8b3c977f 100644
--- a/src/enemy/acroBandits.c
+++ b/src/enemy/acroBandits.c
@@ -1,10 +1,10 @@
#include "global.h"
#include "entity.h"
+#include "random.h"
#include "functions.h"
extern u32 sub_080002D4(s32, s32, u32);
extern s32 sub_080012DC(Entity*);
-extern u32 sub_080044EC(Entity*, u32);
extern u32 sub_08031E04(Entity*);
extern void sub_08031E48(Entity*, Entity*);
extern void sub_08032290(Entity*);
@@ -12,10 +12,7 @@ extern u32 sub_080322A4(Entity*);
void sub_080322E8(Entity*);
extern void sub_08032338(Entity*);
extern Entity* sub_08049DF4(u32);
-extern void sub_0804AA30(Entity*, void (*const funcs[])(Entity*));
-extern u32 sub_0806FCB8(Entity*, u32, u32, u32);
extern u32 GetNextFunction(Entity*);
-extern void SetChildOffset(Entity*, s32, s32, s32);
extern Entity* gUnk_020000B0;
extern u8 gEntCount;
@@ -62,8 +59,8 @@ void sub_080318DC(Entity* this) {
do {
brother->action = 5;
brother->spritePriority.b1 = 1;
- if (brother->hurtBlinkTime == 0)
- brother->hurtBlinkTime = -12;
+ if (brother->iframes == 0)
+ brother->iframes = -12;
} while (brother = brother->attachedEntity, brother != NULL);
}
if (this->parent) {
@@ -113,7 +110,7 @@ void sub_080318DC(Entity* this) {
}
void sub_08031A60(Entity* this) {
- if (this->hurtBlinkTime > 0)
+ if (this->iframes > 0)
sub_08003FC4(this, 0x1800);
sub_08001324(this);
diff --git a/src/enemy/beetle.c b/src/enemy/beetle.c
index 5ba78755..8ce4858b 100644
--- a/src/enemy/beetle.c
+++ b/src/enemy/beetle.c
@@ -1,6 +1,8 @@
#include "entity.h"
-#include "functions.h"
+#include "enemy.h"
#include "player.h"
+#include "random.h"
+#include "functions.h"
extern u32 PlayerInRange(Entity*, u32, u32);
@@ -66,7 +68,7 @@ void sub_08021818(Entity* this) {
void sub_08021848(Entity* this) {
if (sub_0806F520(this)) {
- gUnk_080CB5C8[this->previousActionFlag](this);
+ gUnk_080CB5C8[this->subAction](this);
} else {
this->action = 3;
this->height.HALF.HI = 0;
@@ -75,7 +77,7 @@ void sub_08021848(Entity* this) {
}
void sub_0802187C(Entity* this) {
- this->previousActionFlag = 2;
+ this->subAction = 2;
}
void nullsub_130(Entity* this) {
@@ -98,8 +100,8 @@ void sub_080218B4(Entity* this) {
}
void sub_080218CC(Entity* this) {
- if (this->previousActionFlag == 0) {
- this->previousActionFlag = 1;
+ if (this->subAction == 0) {
+ this->subAction = 1;
this->spriteSettings.b.draw = 1;
this->direction = ((sub_08049F84(this, 1) ^ 0x10) + gUnk_080CB5DC[Random() & 7]) & 0x1f;
this->speed = 0x100;
@@ -124,8 +126,8 @@ void sub_080218CC(Entity* this) {
}
void sub_08021984(Entity* this) {
- if (this->previousActionFlag == 0) {
- this->previousActionFlag = 1;
+ if (this->subAction == 0) {
+ this->subAction = 1;
this->flags |= 0x80;
this->spriteSettings.b.draw = 3;
this->height.HALF.HI = -0x80;
diff --git a/src/enemy/bladeTrap.c b/src/enemy/bladeTrap.c
index 95d2d8d4..9f89f8f0 100644
--- a/src/enemy/bladeTrap.c
+++ b/src/enemy/bladeTrap.c
@@ -1,10 +1,9 @@
#include "global.h"
#include "entity.h"
#include "room.h"
+#include "functions.h"
extern void sub_080A2CC0();
-extern void sub_0806F69C();
-extern void EnqueueSFX();
void BladeTrap(Entity* this) {
if (this->action == 0) {
diff --git a/src/enemy/bobomb.c b/src/enemy/bobomb.c
index d9c1a2a8..0e465090 100644
--- a/src/enemy/bobomb.c
+++ b/src/enemy/bobomb.c
@@ -1,7 +1,8 @@
#include "enemy.h"
+#include "random.h"
+#include "createObject.h"
#include "functions.h"
-extern void CreateDustSmall(Entity*);
extern void sub_08078930(Entity*);
extern void sub_08078954(Entity*);
@@ -63,8 +64,8 @@ void sub_0802C688(Entity* this) {
}
void sub_0802C7AC(Entity* this) {
- if (this->previousActionFlag < 3 && !sub_0806F520(this)) {
- this->previousActionFlag = 0;
+ if (this->subAction < 3 && !sub_0806F520(this)) {
+ this->subAction = 0;
this->field_0xf = 1;
this->height.HALF.HI = 0;
if (this->field_0x82.HALF.LO != 2) {
@@ -75,7 +76,7 @@ void sub_0802C7AC(Entity* this) {
this->field_0x80.HALF.HI = 0;
} else {
this->height.HALF.HI = -1;
- gUnk_080CD600[this->previousActionFlag](this);
+ gUnk_080CD600[this->subAction](this);
if (this->actionDelay != 0) {
GetNextFrame(this);
}
@@ -83,7 +84,7 @@ void sub_0802C7AC(Entity* this) {
}
void sub_0802C820(Entity* this) {
- this->previousActionFlag = 1;
+ this->subAction = 1;
this->field_0x1d = 60;
}
@@ -180,11 +181,11 @@ void sub_0802C91C(Entity* this) {
}
void sub_0802C9B8(Entity* this) {
- gUnk_080CD618[this->previousActionFlag](this);
+ gUnk_080CD618[this->subAction](this);
}
void sub_0802C9D0(Entity* this) {
- this->previousActionFlag = 1;
+ this->subAction = 1;
this->flags &= ~0x80;
this->spritePriority.b1 = 0;
this->field_0x82.HALF.HI = 1;
@@ -255,7 +256,7 @@ void nullsub_150(Entity* this) {
void sub_0802CB68(Entity* this) {
this->action = 1;
- this->previousActionFlag = 0;
+ this->subAction = 0;
this->direction = Random() & 0x18;
this->direction |= 4;
this->flags |= 0x80;
diff --git a/src/enemy/bombPeahat.c b/src/enemy/bombPeahat.c
index 228855be..b57cfd81 100644
--- a/src/enemy/bombPeahat.c
+++ b/src/enemy/bombPeahat.c
@@ -1,17 +1,15 @@
#include "global.h"
#include "entity.h"
-#include "functions.h"
#include "player.h"
+#include "random.h"
+#include "functions.h"
extern void sub_08078954(Entity*);
-extern u32 sub_0800442E(Entity*);
extern void sub_08078930(Entity*);
extern s32 sub_080012DC(Entity*);
extern u32 GetNextFunction(Entity*);
-extern void sub_0806F4E8(Entity*);
extern Entity* sub_08049DF4(u32);
extern void sub_08079BD8(Entity*);
-extern u32 GetTileTypeByEntity(Entity*);
void sub_0802AD1C(Entity*, u32);
void sub_0802AD54(Entity*);
@@ -70,11 +68,11 @@ void sub_0802A8AC(Entity* this) {
}
void sub_0802A8C8(Entity* this) {
- gUnk_080CD140[this->previousActionFlag](this);
+ gUnk_080CD140[this->subAction](this);
}
void sub_0802A8E0(Entity* this) {
- this->previousActionFlag = 1;
+ this->subAction = 1;
this->field_0x1d = 60;
}
@@ -102,7 +100,7 @@ void sub_0802A91C(Entity* this) {
void sub_0802A924(Entity* this) {
this->action = 1;
- this->previousActionFlag = 0;
+ this->subAction = 0;
this->actionDelay = 0;
this->field_0xf = 0;
this->hitbox = (Hitbox*)&gUnk_080CD16C;
@@ -128,7 +126,7 @@ void sub_0802A9A8(Entity* this) {
if (this->actionDelay) {
if (--this->actionDelay == 0) {
this->action = 2;
- this->previousActionFlag = 0;
+ this->subAction = 0;
this->actionDelay = 0x40;
sub_0802ACDC(this, 8);
}
@@ -254,7 +252,7 @@ void sub_0802AB40(Entity* this) {
void sub_0802AC08(Entity* this) {
if (this->frames.all & 0x80) {
this->action = 2;
- this->previousActionFlag = 0;
+ this->subAction = 0;
this->actionDelay = 0x40;
this->speed = 0xc0;
sub_0802ACDC(this, 8);
@@ -386,7 +384,7 @@ void sub_0802AE68(Entity* this) {
}
void sub_0802AEBC(Entity* this) {
- gUnk_080CD158[this->previousActionFlag](this);
+ gUnk_080CD158[this->subAction](this);
}
void sub_0802AED4(Entity* this) {
@@ -407,7 +405,7 @@ void sub_0802AED4(Entity* this) {
}
void sub_0802AF28(Entity* this) {
- this->previousActionFlag = 1;
+ this->subAction = 1;
sub_08079BD8(this);
this->spritePriority.b1 = 2;
GetNextFrame(this);
@@ -424,7 +422,7 @@ void sub_0802AF58(Entity* this) {
void sub_0802AF74(Entity* this) {
this->action = 3;
- this->previousActionFlag = 0;
+ this->subAction = 0;
if (this->actionDelay > 60) {
this->actionDelay = 60;
}
@@ -510,7 +508,7 @@ void sub_0802B048(Entity* this) {
} else {
if (this->field_0xf) {
if (--this->field_0xf == 0) {
- if (action == 2 && this->previousActionFlag == 1) {
+ if (action == 2 && this->subAction == 1) {
gPlayerState.heldObject = 0;
}
sub_0805EC60(this);
diff --git a/src/enemy/bowMoblin.c b/src/enemy/bowMoblin.c
index e29d6177..893d7618 100644
--- a/src/enemy/bowMoblin.c
+++ b/src/enemy/bowMoblin.c
@@ -1,10 +1,8 @@
#include "global.h"
#include "entity.h"
+#include "enemy.h"
+#include "functions.h"
-extern void EnemyFunctionHandler(Entity*, void (*const funcs[])(Entity*));
-extern void SetChildOffset(Entity*, u32, u32, u32);
-extern void sub_0804A9FC(Entity*, u32);
-extern void sub_0804AA30(Entity*, void (*const funcs[][])(Entity*));
extern void sub_0803C5F0(Entity*);
extern void (*const gUnk_080CFF78[])(Entity*);
@@ -25,7 +23,7 @@ void sub_0803C198(Entity* this) {
if (this->field_0x43 != 0) {
sub_0804A9FC(this, 0x1c);
}
- sub_0804AA30(this, &gUnk_080CFF78);
+ sub_0804AA30(this, gUnk_080CFF78);
if ((this->bitfield & 0x80) != 0) {
sub_0803C5F0(this);
pEVar1 = this->attachedEntity;
diff --git a/src/enemy/businessScrub.c b/src/enemy/businessScrub.c
index 49ba9ea1..30f0000e 100644
--- a/src/enemy/businessScrub.c
+++ b/src/enemy/businessScrub.c
@@ -1,9 +1,11 @@
#include "enemy.h"
#include "entity.h"
#include "flags.h"
-#include "functions.h"
#include "textbox.h"
#include "save.h"
+#include "random.h"
+#include "npc.h"
+#include "functions.h"
extern void sub_0801D040(Entity*, u32);
extern Entity* sub_08049DF4(u32);
@@ -54,7 +56,7 @@ void sub_08028934(Entity* this) {
if (this->damageType == 1 && (this->bitfield & 0x7f) == 0x42) {
this->action = 3;
- this->previousActionFlag = 0;
+ this->subAction = 0;
this->actionDelay = 0x28;
this->flags &= ~0x80;
sub_080290E0(this, 4);
@@ -97,7 +99,7 @@ void sub_08028A48(Entity* this) {
this->actionDelay--;
} else if (sub_08028F98(this, 0)) {
sub_08029078(this);
- this->previousActionFlag = 0;
+ this->subAction = 0;
this->field_0xf = 1;
}
}
@@ -106,11 +108,11 @@ void sub_08028A74(Entity* this) {
u32 unk;
GetNextFrame(this);
- switch (this->previousActionFlag) {
+ switch (this->subAction) {
case 0:
unk = 1;
if (this->frames.all & 0x80) {
- this->previousActionFlag = 1;
+ this->subAction = 1;
this->actionDelay = 0x3c;
this->field_0xf = 0x10;
sub_08028FDC(this);
@@ -120,7 +122,7 @@ void sub_08028A74(Entity* this) {
case 1:
unk = 1;
if (--this->actionDelay == 0) {
- this->previousActionFlag = 2;
+ this->subAction = 2;
this->actionDelay = 0x20;
this->field_0xf = 0;
sub_08028FDC(this);
@@ -141,14 +143,14 @@ void sub_08028A74(Entity* this) {
ent->parent = this;
ent->direction = this->direction;
this->frames.all &= ~1;
- this->previousActionFlag = 3;
+ this->subAction = 3;
}
}
break;
case 3:
unk = 2;
if (this->frames.all & 0x80) {
- this->previousActionFlag = 4;
+ this->subAction = 4;
this->actionDelay = 0x50;
sub_080290E0(this, 1);
}
@@ -157,13 +159,13 @@ void sub_08028A74(Entity* this) {
unk = 2;
if (--this->actionDelay == 0) {
if (sub_08028F98(this, 0)) {
- this->previousActionFlag = 1;
+ this->subAction = 1;
this->actionDelay = 0x3c;
this->field_0xf = 0x10;
sub_08028FDC(this);
} else {
sub_08028FFC(this);
- this->previousActionFlag = 0;
+ this->subAction = 0;
this->actionDelay = 0x50;
this->field_0xf = 0;
}
@@ -174,7 +176,7 @@ void sub_08028A74(Entity* this) {
if (!sub_08028F98(this, unk)) {
sub_08028FFC(this);
- this->previousActionFlag = 0;
+ this->subAction = 0;
this->actionDelay = 0x50;
this->field_0xf = 0;
}
@@ -183,11 +185,11 @@ void sub_08028A74(Entity* this) {
void sub_08028BC4(Entity* this) {
Entity* iVar1;
- switch (this->previousActionFlag) {
+ switch (this->subAction) {
case 0:
if (this->actionDelay == 0) {
if (this->frames.all & 0x80) {
- this->previousActionFlag = 1;
+ this->subAction = 1;
sub_08028FDC(this);
sub_080290E0(this, 5);
this->spritePriority.b1 = 1;
@@ -199,7 +201,7 @@ void sub_08028BC4(Entity* this) {
case 1:
if (this->frames.all & 0x80) {
this->action = 4;
- this->previousActionFlag = 0;
+ this->subAction = 0;
this->actionDelay = 0x1e;
this->field_0xf = 5;
sub_080290E0(this, 0);
@@ -314,7 +316,7 @@ void sub_08028E40(Entity* this) {
struct SalesOffering* offer = (struct SalesOffering*)this->field_0x7c.WORD;
this->action = 4;
- this->previousActionFlag = gTextBox.doTextBox & 0x7f;
+ this->subAction = gTextBox.doTextBox & 0x7f;
this->actionDelay = 1;
if (CheckLocalFlag(offer->field_0xa) == 0) {
SetLocalFlag(offer->field_0xa);
@@ -326,7 +328,7 @@ void sub_08028E40(Entity* this) {
}
void sub_08028E84(Entity* this) {
- if (UpdateFuseInteraction()) {
+ if (UpdateFuseInteraction(this)) {
this->action = 4;
this->actionDelay = 1;
}
diff --git a/src/enemy/chuchu.c b/src/enemy/chuchu.c
index e8ee87d3..4f8d86d0 100644
--- a/src/enemy/chuchu.c
+++ b/src/enemy/chuchu.c
@@ -1,5 +1,6 @@
#include "enemy.h"
#include "entity.h"
+#include "random.h"
#include "functions.h"
extern s32 sub_080012DC(Entity*);
diff --git a/src/enemy/chuchuBoss.c b/src/enemy/chuchuBoss.c
index 674e8774..4127be53 100644
--- a/src/enemy/chuchuBoss.c
+++ b/src/enemy/chuchuBoss.c
@@ -2,8 +2,6 @@
#include "entity.h"
#include "functions.h"
-extern void sub_08078B48(void);
-
void sub_08027870(Entity*);
extern void (*const gUnk_080CC19C[])(Entity*);
@@ -36,13 +34,11 @@ void sub_08025CBC(Entity* this) {
void sub_08025DC0(Entity*);
void sub_08025CD4(Entity*);
-void sub_08001242(Entity*);
void sub_08025DD8(Entity*);
void sub_08026060(Entity*);
void sub_08026110(Entity*);
void sub_080272D4(Entity*);
void sub_0802720C(Entity*);
-void sub_0802720C(Entity*);
void sub_08026090(Entity*);
void sub_0802626C(Entity*);
void sub_08026580(Entity*);
diff --git a/src/enemy/cuccoChickAggr.c b/src/enemy/cuccoChickAggr.c
index e0f7a8f0..683ba4b8 100644
--- a/src/enemy/cuccoChickAggr.c
+++ b/src/enemy/cuccoChickAggr.c
@@ -1,5 +1,6 @@
#include "enemy.h"
#include "entity.h"
+#include "random.h"
#include "functions.h"
extern Entity* sub_08049DF4(u32);
diff --git a/src/enemy/darkNut.c b/src/enemy/darkNut.c
index 83fa7296..96585a58 100644
--- a/src/enemy/darkNut.c
+++ b/src/enemy/darkNut.c
@@ -1,4 +1,6 @@
#include "entity.h"
+#include "enemy.h"
+#include "random.h"
#include "functions.h"
typedef struct {
@@ -241,7 +243,7 @@ void sub_08020FAC(Entity* this) {
if (this->field_0x7a.HALF.LO) {
this->field_0x7a.HALF.LO--;
} else {
- this->hurtBlinkTime = -8;
+ this->iframes = -8;
sub_08021390(this);
}
} else {
diff --git a/src/enemy/doorMimic.c b/src/enemy/doorMimic.c
index 27357c08..2bfc1fc4 100644
--- a/src/enemy/doorMimic.c
+++ b/src/enemy/doorMimic.c
@@ -4,7 +4,7 @@
extern s16 sub_080001DA(u32, u32); // ?
extern void sub_08049CF4();
-extern u32 sub_0806FBFC(u32, u32, u32, u32);
+extern u32 CheckPlayerProximity(u32, u32, u32, u32);
void sub_080221C0();
typedef struct {
@@ -54,7 +54,7 @@ void sub_08022034(Entity* this) {
void sub_0802209C(Entity* this) {
if (this->actionDelay == 0) {
- if (sub_0806FBFC(this->field_0x78.HWORD, this->field_0x7a.HWORD, 0x10, 0x10)) {
+ if (CheckPlayerProximity(this->field_0x78.HWORD, this->field_0x7a.HWORD, 0x10, 0x10)) {
this->action = 2;
this->actionDelay = 0x12;
InitializeAnimation(this, this->type2 + 4);
diff --git a/src/enemy/fallingBoulder.c b/src/enemy/fallingBoulder.c
index 798f4939..29076b1c 100644
--- a/src/enemy/fallingBoulder.c
+++ b/src/enemy/fallingBoulder.c
@@ -1,4 +1,5 @@
#include "enemy.h"
+#include "random.h"
#include "functions.h"
void sub_0802C4B0(Entity*);
diff --git a/src/enemy/fireballGuy.c b/src/enemy/fireballGuy.c
index e2d8914d..d551c54d 100644
--- a/src/enemy/fireballGuy.c
+++ b/src/enemy/fireballGuy.c
@@ -1,5 +1,7 @@
#include "global.h"
#include "entity.h"
+#include "enemy.h"
+#include "random.h"
#include "functions.h"
typedef struct {
@@ -79,7 +81,7 @@ void sub_08045454(Entity* this) {
tmp = 0;
ent->type2 = 1;
ent->height.HALF.HI = tmp;
- ent->hurtBlinkTime = -0x10;
+ ent->iframes = -0x10;
/* Set MiniFireballGuy offset relative to killed slime. */
sub_08045178(this, ent, off->h, off->v);
diff --git a/src/enemy/gibdo.c b/src/enemy/gibdo.c
index f3228707..f9792c8a 100644
--- a/src/enemy/gibdo.c
+++ b/src/enemy/gibdo.c
@@ -1,8 +1,9 @@
#include "global.h"
#include "entity.h"
#include "sprite.h"
-#include "functions.h"
#include "enemy.h"
+#include "random.h"
+#include "functions.h"
// Gibudo
void sub_08037794();
void sub_08037B10();
@@ -337,12 +338,12 @@ NONMATCH("asm/non_matching/gibdo/sub_08037A58.inc", void sub_08037A58(Entity* th
sub_08037ACC(this);
this->action = 7;
this->spritePriority.b0 = (this->spritePriority.b0 & 0xf8) | 4;
- if (this->hurtBlinkTime == 0) {
- this->hurtBlinkTime = 0xec;
+ if (this->iframes == 0) {
+ this->iframes = 0xec;
}
this->damageType = 0x26;
this->flags2 |= 1;
- this->hurtBlinkTime = 0xf4;
+ this->iframes = 0xf4;
this->field_0x3e = (this->animationState << 3) ^ 0x10;
this->field_0x42 = 8;
this->field_0x46 = 0x180;
@@ -354,7 +355,7 @@ END_NONMATCH
void sub_08037ACC(Entity* this) {
gPlayerState.flags.all &= 0xFFFFFEFF;
gPlayerEntity.flags |= 0x80;
- gPlayerEntity.hurtBlinkTime = 0x1e;
+ gPlayerEntity.iframes = 0x1e;
gPlayerEntity.field_0x3e = DirectionFromAnimationState(this->animationState);
gPlayerEntity.field_0x42 = 4;
gPlayerEntity.field_0x46 = 0x180;
@@ -362,7 +363,7 @@ void sub_08037ACC(Entity* this) {
// Damage player maybe?
void sub_08037B10(Entity* this) {
u32 h;
- gPlayerEntity.hurtBlinkTime = 0xc;
+ gPlayerEntity.iframes = 0xc;
h = ModHealth(-8);
sub_0800449C(&gPlayerEntity, 0x7a);
if (h == 0) {
diff --git a/src/enemy/gyorgMale.c b/src/enemy/gyorgMale.c
index 1edbf4f9..4b73349a 100644
--- a/src/enemy/gyorgMale.c
+++ b/src/enemy/gyorgMale.c
@@ -2,10 +2,10 @@
#include "enemy.h"
#include "player.h"
#include "room.h"
-#include "trig.h"
-#include "structures.h"
-#include "functions.h"
+#include "coord.h"
#include "fileScreen.h"
+#include "random.h"
+#include "functions.h"
void (*const gUnk_080D1AFC[8])(Entity*);
void (*const gUnk_080D1B1C[7])(Entity*);
@@ -26,57 +26,56 @@ const u8 gUnk_080D1C44[0xC];
const u16 gUnk_080D1C50[8];
const u16 gUnk_080D1C60[8];
-void GyorgMale(Entity*);
void sub_08046898(Entity*); // action 0
void sub_08046910(Entity*); // action 1
-void sub_08046930(Entity*); // action 1 previousActionFlag 0
-void sub_0804696C(Entity*); // action 1 previousActionFlag 1
-void sub_080469CC(Entity*); // action 1 previousActionFlag 2
-void sub_080469F4(Entity*); // action 1 previousActionFlag 3
-void sub_08046A30(Entity*); // action 1 previousActionFlag 4
-void sub_08046A54(Entity*); // action 1 previousActionFlag 5
-void sub_08046A78(Entity*); // action 1 previousActionFlag 6
+void sub_08046930(Entity*); // action 1 subAction 0
+void sub_0804696C(Entity*); // action 1 subAction 1
+void sub_080469CC(Entity*); // action 1 subAction 2
+void sub_080469F4(Entity*); // action 1 subAction 3
+void sub_08046A30(Entity*); // action 1 subAction 4
+void sub_08046A54(Entity*); // action 1 subAction 5
+void sub_08046A78(Entity*); // action 1 subAction 6
void sub_08046A9C(Entity*); // action 2
-void sub_08046AE8(Entity*); // action 2 previousActionFlag 0
-void sub_08046B18(Entity*); // action 2 previousActionFlag 1
-void sub_08046B8C(Entity*); // action 2 previousActionFlag 2
-void sub_08046C04(Entity*); // action 2 previousActionFlag 3
-void sub_08046C88(Entity*); // action 2 previousActionFlag 4
+void sub_08046AE8(Entity*); // action 2 subAction 0
+void sub_08046B18(Entity*); // action 2 subAction 1
+void sub_08046B8C(Entity*); // action 2 subAction 2
+void sub_08046C04(Entity*); // action 2 subAction 3
+void sub_08046C88(Entity*); // action 2 subAction 4
void sub_08046CEC(Entity*); // action 3
-void sub_08046D44(Entity*); // action 3 previousActionFlag 0
-void sub_08046D98(Entity*); // action 3 previousActionFlag 1
-void sub_08046E0C(Entity*); // action 3 previousActionFlag 2
-void sub_08046E68(Entity*); // action 3 previousActionFlag 3
-void sub_08046EF4(Entity*); // action 3 previousActionFlag 4
+void sub_08046D44(Entity*); // action 3 subAction 0
+void sub_08046D98(Entity*); // action 3 subAction 1
+void sub_08046E0C(Entity*); // action 3 subAction 2
+void sub_08046E68(Entity*); // action 3 subAction 3
+void sub_08046EF4(Entity*); // action 3 subAction 4
void sub_08046F64(Entity*); // action 4
-void sub_08046FE8(Entity*); // action 4 previousActionFlag 0
-void sub_0804702C(Entity*); // action 4 previousActionFlag 1
-void sub_080470B4(Entity*); // action 4 previousActionFlag 2
-void sub_08047140(Entity*); // action 4 previousActionFlag 3
-void sub_0804717C(Entity*); // action 4 previousActionFlag 4
-void sub_080471C8(Entity*); // action 4 previousActionFlag 5
-void sub_0804723C(Entity*); // action 4 previousActionFlag 6
-void sub_08047284(Entity*); // action 4 previousActionFlag 7
-void sub_080472BC(Entity*); // action 4 previousActionFlag 8
-void sub_08047310(Entity*); // action 4 previousActionFlag 9
+void sub_08046FE8(Entity*); // action 4 subAction 0
+void sub_0804702C(Entity*); // action 4 subAction 1
+void sub_080470B4(Entity*); // action 4 subAction 2
+void sub_08047140(Entity*); // action 4 subAction 3
+void sub_0804717C(Entity*); // action 4 subAction 4
+void sub_080471C8(Entity*); // action 4 subAction 5
+void sub_0804723C(Entity*); // action 4 subAction 6
+void sub_08047284(Entity*); // action 4 subAction 7
+void sub_080472BC(Entity*); // action 4 subAction 8
+void sub_08047310(Entity*); // action 4 subAction 9
void sub_0804736C(Entity*); // action 5
-void sub_080473B8(Entity*); // action 5 previousActionFlag 0
-void sub_080473F0(Entity*); // action 5 previousActionFlag 1
-void sub_08047484(Entity*); // action 5 previousActionFlag 2
-void sub_08047508(Entity*); // action 5 previousActionFlag 3
-void sub_080475F4(Entity*); // action 5 previousActionFlag 4
-void sub_0804763C(Entity*); // action 5 previousActionFlag 5
-void sub_0804772C(Entity*); // action 5 previousActionFlag 6
+void sub_080473B8(Entity*); // action 5 subAction 0
+void sub_080473F0(Entity*); // action 5 subAction 1
+void sub_08047484(Entity*); // action 5 subAction 2
+void sub_08047508(Entity*); // action 5 subAction 3
+void sub_080475F4(Entity*); // action 5 subAction 4
+void sub_0804763C(Entity*); // action 5 subAction 5
+void sub_0804772C(Entity*); // action 5 subAction 6
void sub_08047778(Entity*); // action 6
-void sub_08047798(Entity*); // action 6 previousActionFlag 0
-void sub_080477F0(Entity*); // action 6 previousActionFlag 1
-void sub_08047914(Entity*); // action 6 previousActionFlag 2
-void sub_08047978(Entity*); // action 6 previousActionFlag 3
-void sub_08047B08(Entity*); // action 6 previousActionFlag 4
+void sub_08047798(Entity*); // action 6 subAction 0
+void sub_080477F0(Entity*); // action 6 subAction 1
+void sub_08047914(Entity*); // action 6 subAction 2
+void sub_08047978(Entity*); // action 6 subAction 3
+void sub_08047B08(Entity*); // action 6 subAction 4
void sub_08047B84(Entity*); // action 7
-void sub_08047BA4(Entity*); // action 7 previousActionFlag 0
-void sub_08047BF0(Entity*); // action 7 previousActionFlag 1, also called elsewhere
-void sub_08047D24(Entity*); // action 7 previousActionFlag 2
+void sub_08047BA4(Entity*); // action 7 subAction 0
+void sub_08047BF0(Entity*); // action 7 subAction 1, also called elsewhere
+void sub_08047D24(Entity*); // action 7 subAction 2
void sub_08047D88(Entity*); //
void sub_08047DF0(Entity*, u32);
void sub_08047E48(Entity*); //
@@ -118,7 +117,7 @@ void sub_08046898(Entity* this) {
tmp->parent = this;
this->attachedEntity = tmp;
this->action = 1;
- this->previousActionFlag = 0;
+ this->subAction = 0;
this->spriteRendering.b0 = 3;
this->spriteSettings.b.draw = 1;
this->spriteOrientation.flipY = 2;
@@ -136,20 +135,20 @@ void (*const gUnk_080D1B1C[7])(Entity*) = { sub_08046930, sub_0804696C, sub_0804
sub_08046A30, sub_08046A54, sub_08046A78 };
void sub_08046910(Entity* this) {
- gUnk_080D1B1C[this->previousActionFlag](this);
+ gUnk_080D1B1C[this->subAction](this);
UpdateAnimationSingleFrame(this);
}
void sub_08046930(Entity* this) {
if (this->type) {
- this->previousActionFlag = 5;
+ this->subAction = 5;
this->direction = 0x20;
this->speed = 0x280;
}
sub_08047D88(this);
if (this->field_0x7c.BYTES.byte0 == 0)
return;
- this->previousActionFlag = 1;
+ this->subAction = 1;
this->actionDelay = 1;
this->animationState = 0;
this->direction = 0;
@@ -159,17 +158,17 @@ void sub_08046930(Entity* this) {
void sub_0804696C(Entity* this) {
sub_08047E48(this);
if (gRoomControls.roomOriginY + 0x130 > this->y.HALF.HI) {
- this->previousActionFlag = 2;
+ this->subAction = 2;
this->direction = 0x80;
this->speed = 0x100;
this->spriteOrientation.flipY = 3;
this->spriteRendering.b3 = 3;
- SoundReq(0x2e);
+ SoundReq(BGM_BOSS_THEME);
}
if (this->actionDelay) {
if (gRoomControls.roomOriginY + 0x258 > this->y.HALF.HI) {
this->actionDelay = 0;
- SoundReq(0xf7);
+ SoundReq(SFX_APPARATE);
}
}
}
@@ -177,7 +176,7 @@ void sub_0804696C(Entity* this) {
void sub_080469CC(Entity* this) {
sub_08047E48(this);
if (gRoomControls.roomOriginY + 0x210 < this->y.HALF.HI) {
- this->previousActionFlag = 3;
+ this->subAction = 3;
this->direction = 0x90;
}
}
@@ -185,7 +184,7 @@ void sub_080469CC(Entity* this) {
void sub_080469F4(Entity* this) {
sub_08047E48(this);
if (gRoomControls.roomOriginY + 0x290 < this->y.HALF.HI) {
- this->previousActionFlag = 4;
+ this->subAction = 4;
this->spriteOrientation.flipY = 2;
this->spriteRendering.b3 = 2;
}
@@ -195,14 +194,14 @@ void sub_08046A30(Entity* this) {
sub_08047D88(this);
if (((Entity*)this->myHeap)->prev->field_0x6c.HWORD & 1) {
this->action = 2;
- this->previousActionFlag = 0;
+ this->subAction = 0;
}
}
void sub_08046A54(Entity* this) {
sub_08047E48(this);
if (gRoomControls.roomOriginX + 0x380 < this->x.HALF.HI) {
- this->previousActionFlag = 6;
+ this->subAction = 6;
}
}
@@ -210,7 +209,7 @@ void sub_08046A78(Entity* this) {
sub_08047D88(this);
if (((Entity*)this->myHeap)->prev->field_0x6c.HWORD & 0x10) {
this->action = 3;
- this->previousActionFlag = 0;
+ this->subAction = 0;
}
}
@@ -222,16 +221,16 @@ void sub_08046A9C(Entity* this) {
InitAnimationForceUpdate(this, 0);
}
}
- gUnk_080D1B38[this->previousActionFlag](this);
+ gUnk_080D1B38[this->subAction](this);
UpdateAnimationSingleFrame(this);
if (this->field_0x7c.BYTES.byte0) {
this->action = 6;
- this->previousActionFlag = 0;
+ this->subAction = 0;
}
}
void sub_08046AE8(Entity* this) {
- this->previousActionFlag = 1;
+ this->subAction = 1;
this->speed = 0x180;
sub_08048178(this, ((Entity*)this->myHeap)->next->animationState >> 5);
this->field_0x76.HWORD = this->direction << 8;
@@ -248,7 +247,7 @@ void sub_08046B18(Entity* this) {
}
this->direction = this->field_0x76.HWORD >> 8;
} else {
- this->previousActionFlag = 2;
+ this->subAction = 2;
}
sub_08047D88(this);
sub_08047EA4(this, ((0x100 - this->direction) & 0xFF) << 8);
@@ -256,7 +255,7 @@ void sub_08046B18(Entity* this) {
void sub_08046B8C(Entity* this) {
if (sub_0806FCB8(this, this->field_0x80.HWORD, this->field_0x82.HWORD, 4)) {
- this->previousActionFlag = 3;
+ this->subAction = 3;
this->field_0x76.HWORD = this->direction << 8;
this->field_0x80.HWORD = gRoomControls.roomOriginX + 0x200;
this->field_0x82.HWORD = gRoomControls.roomOriginY + 0x210;
@@ -278,7 +277,7 @@ void sub_08046C04(Entity* this) {
}
this->direction = this->field_0x76.HWORD >> 8;
} else {
- this->previousActionFlag = 4;
+ this->subAction = 4;
this->field_0x70.HALF.LO = ((tmp + 0x20) & 0xC0) >> 6;
}
sub_08047D88(this);
@@ -287,7 +286,7 @@ void sub_08046C04(Entity* this) {
void sub_08046C88(Entity* this) {
if (sub_0806FCB8(this, this->field_0x80.HWORD, this->field_0x82.HWORD, 4)) {
- this->previousActionFlag = 1;
+ this->subAction = 1;
sub_08048178(this, sub_08048158(this->field_0x70.HALF_U.LO));
sub_08047D88(this);
} else {
@@ -305,11 +304,11 @@ void sub_08046CEC(Entity* this) {
InitAnimationForceUpdate(this, 1);
}
}
- gUnk_080D1B4C[this->previousActionFlag](this);
+ gUnk_080D1B4C[this->subAction](this);
UpdateAnimationSingleFrame(this);
if (((Entity*)this->myHeap)->prev->field_0x6c.HWORD & 2) {
this->action = 2;
- this->previousActionFlag = 0;
+ this->subAction = 0;
this->animationState = this->speed;
}
}
@@ -318,7 +317,7 @@ const u16 gUnk_080D1B60[8] = { 0x200, 0x184, 0x28C, 0x210, 0x200, 0x29C, 0x174,
void sub_08046D44(Entity* this) {
const u16* tmp;
- this->previousActionFlag = 1;
+ this->subAction = 1;
this->speed = 0x200;
tmp = gUnk_080D1B60 + (((Entity*)this->myHeap)->next->animationState >> 5);
this->field_0x80.HWORD = tmp[0] + gRoomControls.roomOriginX;
@@ -337,7 +336,7 @@ void sub_08046D98(Entity* this) {
}
this->direction = this->field_0x76.HWORD >> 8;
} else {
- this->previousActionFlag = 2;
+ this->subAction = 2;
}
sub_08047D88(this);
sub_08047EA4(this, ((0x100 - this->direction) & 0xFF) << 8);
@@ -345,7 +344,7 @@ void sub_08046D98(Entity* this) {
void sub_08046E0C(Entity* this) {
if (sub_0806FCB8(this, this->field_0x80.HWORD, this->field_0x82.HWORD, 4)) {
- this->previousActionFlag = 3;
+ this->subAction = 3;
this->field_0x76.HWORD = this->direction << 8;
sub_08047D88(this);
} else {
@@ -369,7 +368,7 @@ void sub_08046E68(Entity* this) {
sub_08047D88(this);
sub_08047EA4(this, ((0x100 - this->direction) & 0xFF) << 8);
} else {
- this->previousActionFlag = 4;
+ this->subAction = 4;
this->actionDelay = 0x3F;
this->field_0xf = 1;
this->direction = (gUnk_080D1B70[Random() & 1] + tmp) & 0xC0;
@@ -408,7 +407,7 @@ void sub_08046F64(Entity* this) {
InitAnimationForceUpdate(this, 1);
}
}
- gUnk_080D1B94[this->previousActionFlag](this);
+ gUnk_080D1B94[this->subAction](this);
UpdateAnimationSingleFrame(this);
if (--this->field_0x7c.HALF.HI == 0) {
Entity* tmp;
@@ -422,12 +421,12 @@ void sub_08046F64(Entity* this) {
}
if (((Entity*)this->myHeap)->prev->field_0x6c.HWORD & 4) {
this->action = 5;
- this->previousActionFlag = 0;
+ this->subAction = 0;
}
}
void sub_08046FE8(Entity* this) {
- this->previousActionFlag = 1;
+ this->subAction = 1;
this->speed = 0x1c0;
this->field_0x7c.HALF.HI = 0x1e;
this->field_0x80.HWORD = gRoomControls.roomOriginX + 0x290;
@@ -446,7 +445,7 @@ void sub_0804702C(Entity* this) {
}
sub_08047DF0(this, ((0x100 - this->direction) & 0xFF) << 8);
if (sub_0806FCB8(this, this->field_0x80.HWORD, this->field_0x82.HWORD, (this->speed >> 0x10) + 0x10)) {
- this->previousActionFlag = 2;
+ this->subAction = 2;
this->field_0x76.HWORD = this->direction << 8;
this->speed = 0x280;
}
@@ -466,7 +465,7 @@ void sub_080470B4(Entity* this) {
sub_08047D88(this);
sub_08047EA4(this, ((0x100 - this->direction) & 0xFF) << 8);
} else {
- this->previousActionFlag = 3;
+ this->subAction = 3;
this->speed = 0x200;
this->field_0x76.HWORD = this->direction << 8;
this->field_0x74.HWORD = gUnk_080D1BBC[Random() & 1];
@@ -479,7 +478,7 @@ void sub_08047140(Entity* this) {
this->direction = this->field_0x76.HWORD >> 8;
if (this->direction > 0xbf) {
this->direction = 0xC0;
- this->previousActionFlag = 4;
+ this->subAction = 4;
}
sub_08047DF0(this, ((0x100 - this->direction) & 0xFF) << 8);
}
@@ -490,7 +489,7 @@ void sub_0804717C(Entity* this) {
}
sub_08047DF0(this, ((0x100 - this->direction) & 0xFF) << 8);
if (gRoomControls.roomOriginX + 0x200 > this->x.HALF.HI) {
- this->previousActionFlag = 5;
+ this->subAction = 5;
}
}
@@ -506,19 +505,19 @@ void sub_080471C8(Entity* this) {
return;
if (this->field_0x74.HWORD > 0x100) {
if (Random() & 1) {
- this->previousActionFlag = 6;
+ this->subAction = 6;
} else {
- this->previousActionFlag = 0;
+ this->subAction = 0;
}
} else {
- this->previousActionFlag = 0;
+ this->subAction = 0;
}
}
void sub_0804723C(Entity* this) {
this->direction -= 2;
if (this->direction < 0xc0) {
- this->previousActionFlag = 7;
+ this->subAction = 7;
this->speed = 0x200;
this->direction = 0xc0;
this->field_0x76.HWORD = 0xc000;
@@ -532,7 +531,7 @@ void sub_08047284(Entity* this) {
this->direction = this->field_0x76.HWORD >> 8;
if (this->direction < 0x40) {
this->direction = 0x40;
- this->previousActionFlag = 8;
+ this->subAction = 8;
}
sub_08047DF0(this, ((0x100 - this->direction) & 0xFF) << 8);
}
@@ -544,7 +543,7 @@ void sub_080472BC(Entity* this) {
sub_08047DF0(this, ((0x100 - this->direction) & 0xFF) << 8);
if (gRoomControls.roomOriginX + 0x2B0 >= this->x.HALF.HI)
return;
- this->previousActionFlag = 9;
+ this->subAction = 9;
this->field_0x76.HWORD = this->direction << 8;
}
@@ -556,7 +555,7 @@ void sub_08047310(Entity* this) {
this->direction = this->field_0x76.HWORD >> 8;
if ((u8)(this->direction + 0x7F) < 0x40) {
this->direction = 0xC0;
- this->previousActionFlag = 4;
+ this->subAction = 4;
}
sub_08047DF0(this, ((0x100 - this->direction) & 0xFF) << 8);
}
@@ -570,16 +569,16 @@ void sub_0804736C(Entity* this) {
InitAnimationForceUpdate(this, 0);
}
}
- gUnk_080D1BC0[this->previousActionFlag](this);
+ gUnk_080D1BC0[this->subAction](this);
UpdateAnimationSingleFrame(this);
if (this->currentHealth == 0) {
this->action = 7;
- this->previousActionFlag = 0;
+ this->subAction = 0;
}
}
void sub_080473B8(Entity* this) {
- this->previousActionFlag = 1;
+ this->subAction = 1;
this->speed = 0x120;
this->field_0x80.HWORD = gRoomControls.roomOriginX + 0x200;
this->field_0x82.HWORD = gRoomControls.roomOriginY + 0x1D0;
@@ -606,7 +605,7 @@ void sub_080473F0(Entity* this) {
}
sub_08047DF0(this, ((0x100 - this->direction) & 0xFF) << 8);
if (sub_0806FCB8(this, this->field_0x80.HWORD, this->field_0x82.HWORD, 8)) {
- this->previousActionFlag = 2;
+ this->subAction = 2;
this->field_0x76.HWORD = this->direction << 8;
this->speed = 0x180;
}
@@ -624,7 +623,7 @@ void sub_08047484(Entity* this) {
sub_08047D88(this);
sub_08047EA4(this, ((0x100 - this->direction) & 0xFF) << 8);
} else {
- this->previousActionFlag = 3;
+ this->subAction = 3;
this->speed = 0x200;
this->direction = 0x40;
this->field_0x76.HWORD = 0x4000;
@@ -664,7 +663,7 @@ void sub_08047508(Entity* this) {
}
sub_08047E48(this);
if (gRoomControls.roomOriginX + 0x280 < this->x.HALF.HI) {
- this->previousActionFlag = 4;
+ this->subAction = 4;
this->speed = 0x200;
this->animationState = this->direction;
this->field_0x76.HWORD = this->direction << 8;
@@ -682,7 +681,7 @@ void sub_080475F4(Entity* this) {
this->direction = this->field_0x76.HWORD >> 8;
if (this->direction >= 0xc0) {
this->direction = 0xc0;
- this->previousActionFlag = 5;
+ this->subAction = 5;
this->speed = 0x200;
this->field_0x7c.HALF.HI = 0x3c;
}
@@ -719,7 +718,7 @@ void sub_0804763C(Entity* this) {
}
sub_08047E48(this);
if (gRoomControls.roomOriginX + 0x180 > this->x.HALF.HI) {
- this->previousActionFlag = 6;
+ this->subAction = 6;
this->speed = 0x200;
this->animationState = this->direction;
this->field_0x76.HWORD = this->direction << 8;
@@ -737,7 +736,7 @@ void sub_0804772C(Entity* this) {
this->direction = this->field_0x76.HWORD >> 8;
if (this->direction <= 0x40) {
this->direction = 0x40;
- this->previousActionFlag = 3;
+ this->subAction = 3;
this->speed = 0x200;
this->field_0x7c.HALF.HI = 0x1e;
}
@@ -747,12 +746,12 @@ void sub_0804772C(Entity* this) {
void (*const gUnk_080D1BDC[5])(Entity*) = { sub_08047798, sub_080477F0, sub_08047914, sub_08047978, sub_08047B08 };
void sub_08047778(Entity* this) {
- gUnk_080D1BDC[this->previousActionFlag](this);
+ gUnk_080D1BDC[this->subAction](this);
UpdateAnimationSingleFrame(this);
}
void sub_08047798(Entity* this) {
- this->previousActionFlag = 1;
+ this->subAction = 1;
this->speed = 0x80;
if (this->x.HALF.HI - gRoomControls.roomOriginX < 0x1F8) {
this->field_0x80.HWORD = 0xa8;
@@ -774,7 +773,7 @@ void sub_080477F0(Entity* this) {
sub_08047E48(this);
if (!sub_0806FCB8(this, gPlayerEntity.x.HALF.HI, gPlayerEntity.y.HALF.HI, 0x80)) {
this->action = 2;
- this->previousActionFlag = 0;
+ this->subAction = 0;
this->spriteOrientation.flipY = 2;
this->spriteRendering.b3 = 2;
this->direction = this->animationState;
@@ -785,7 +784,7 @@ void sub_080477F0(Entity* this) {
this->spriteRendering.b3 = 3;
}
if (sub_0806FCB8(this, this->field_0x80.HWORD, this->field_0x82.HWORD, 4)) {
- this->previousActionFlag = 2;
+ this->subAction = 2;
this->field_0x76.HWORD = this->animationState << 8;
this->field_0x74.HWORD = gUnk_080D1BF0[Random() & 1];
if (((Entity*)this->myHeap)->prev->field_0x6c.HWORD & 1) {
@@ -804,7 +803,7 @@ void sub_08047914(Entity* this) {
this->animationState = this->field_0x76.HWORD >> 8;
sub_08047EA4(this, ((0x100 - this->animationState) & 0xFF) << 8);
} else {
- this->previousActionFlag = 3;
+ this->subAction = 3;
this->field_0x70.HALF.LO = 0x3C;
this->field_0x7c.HALF.HI = ((this->type * 0xF) << 2) + 0x78;
sub_080A1D70(((Entity*)this->myHeap)->prev, this->animationState);
@@ -839,7 +838,7 @@ void sub_08047978(Entity* this) {
}
if (!sub_0806FCB8(this, gPlayerEntity.x.HALF.HI, gPlayerEntity.y.HALF.HI, 0x80)) {
this->action = 2;
- this->previousActionFlag = 0;
+ this->subAction = 0;
this->spriteOrientation.flipY = 2;
this->spriteRendering.b3 = 2;
this->direction = this->animationState;
@@ -848,7 +847,7 @@ void sub_08047978(Entity* this) {
return;
if (this->attachedEntity->action != 1)
return;
- this->previousActionFlag = 4;
+ this->subAction = 4;
if (this->type == 0) {
if ((((Entity*)this->myHeap)->next->animationState >> 6) == 1) {
this->field_0x80.HWORD = gRoomControls.roomOriginX + 0x1C0;
@@ -882,11 +881,11 @@ void sub_08047B08(Entity* this) {
return;
if (this->type == 0) {
this->action = 7;
- this->previousActionFlag = 0;
+ this->subAction = 0;
this->direction ^= 0x80;
} else {
this->action = 4;
- this->previousActionFlag = 0;
+ this->subAction = 0;
this->spriteOrientation.flipY = 2;
this->spriteRendering.b3 = 2;
this->direction = this->animationState;
@@ -896,12 +895,12 @@ void sub_08047B08(Entity* this) {
void (*const gUnk_080D1BF4[3])(Entity*) = { sub_08047BA4, sub_08047BF0, sub_08047D24 };
void sub_08047B84(Entity* this) {
- gUnk_080D1BF4[this->previousActionFlag](this);
+ gUnk_080D1BF4[this->subAction](this);
UpdateAnimationSingleFrame(this);
}
void sub_08047BA4(Entity* this) {
- this->previousActionFlag = 1;
+ this->subAction = 1;
this->actionDelay = 0x78;
this->field_0xf = 0;
if (gRoomControls.roomOriginX + 0x200 < this->x.HALF.HI) {
@@ -937,7 +936,7 @@ void sub_08047BF0(Entity* this) {
this->speed = 0x140;
sub_08047E48(this);
if (this->y.HALF.HI > gRoomControls.roomOriginY + 0x270) {
- this->previousActionFlag = 2;
+ this->subAction = 2;
this->field_0x7c.HALF.HI = 0xAA;
SoundReq(0x12D);
InitAnimationForceUpdate(this, 1);
diff --git a/src/enemy/hangingSeed.c b/src/enemy/hangingSeed.c
index fc09db31..fe6fe0fc 100644
--- a/src/enemy/hangingSeed.c
+++ b/src/enemy/hangingSeed.c
@@ -1,4 +1,5 @@
#include "entity.h"
+#include "enemy.h"
#include "functions.h"
extern void (*const gHangingSeedFunctions[])(Entity*);
diff --git a/src/enemy/helmasaur.c b/src/enemy/helmasaur.c
index 723050a4..5d4302df 100644
--- a/src/enemy/helmasaur.c
+++ b/src/enemy/helmasaur.c
@@ -1,4 +1,5 @@
#include "enemy.h"
+#include "random.h"
#include "functions.h"
extern void sub_08008796(Entity*, u32, u32, u32);
@@ -62,16 +63,16 @@ void sub_0802BBC4(Entity* this) {
void sub_0802BC20(Entity* this) {
if (this->damageType != 0x19) {
if (sub_0806F520(this)) {
- gUnk_080CD42C[this->previousActionFlag](this);
+ gUnk_080CD42C[this->subAction](this);
}
- } else if (2 < this->previousActionFlag || sub_0806F520(this)) {
- gUnk_080CD438[this->previousActionFlag](this);
+ } else if (2 < this->subAction || sub_0806F520(this)) {
+ gUnk_080CD438[this->subAction](this);
}
}
void sub_0802BC74(Entity* this) {
sub_0802C1C0(this);
- this->previousActionFlag = 1;
+ this->subAction = 1;
this->field_0x1d = 60;
this->animationState = (gPlayerEntity.animationState >> 1) ^ 2;
InitializeAnimation(this, this->animationState);
@@ -101,7 +102,7 @@ void sub_0802BCA8(Entity* this) {
}
void sub_0802BCFC(Entity* this) {
- this->previousActionFlag = 1;
+ this->subAction = 1;
this->field_0x1d = 60;
}
@@ -259,7 +260,7 @@ void sub_0802BF78(Entity* this) {
void sub_0802BF98(Entity* this) {
if (sub_0806F520(this)) {
- gUnk_080CD450[this->previousActionFlag](this);
+ gUnk_080CD450[this->subAction](this);
} else {
this->action = 2;
this->actionDelay = 30;
@@ -268,7 +269,7 @@ void sub_0802BF98(Entity* this) {
}
void sub_0802BFD0(Entity* this) {
- this->previousActionFlag = 2;
+ this->subAction = 2;
}
void sub_0802BFD8(Entity* this) {
diff --git a/src/enemy/keaton.c b/src/enemy/keaton.c
index 453315d8..79e98065 100644
--- a/src/enemy/keaton.c
+++ b/src/enemy/keaton.c
@@ -1,5 +1,7 @@
#include "global.h"
#include "entity.h"
+#include "enemy.h"
+#include "random.h"
#include "functions.h"
extern Entity* gUnk_020000B0;
@@ -164,17 +166,17 @@ void sub_08032650(Entity* this) {
sub_0803269C(this, this->direction);
}
-void sub_0803269C(Entity* this, u32 param_2) {
+void sub_0803269C(Entity* this, u32 direction) {
u32 uVar1;
- if (((param_2 - 3) & 7) < 3) {
- uVar1 = DirectionToAnimationState(param_2);
+ if (((direction - 3) & 7) < 3) {
+ uVar1 = DirectionToAnimationState(direction);
if (((this->animationState - uVar1) & 3) > 1) {
this->animationState = uVar1;
InitAnimationForceUpdate(this, (this->animIndex & 0xFC) + uVar1);
}
} else {
- uVar1 = DirectionToAnimationState(param_2);
+ uVar1 = DirectionToAnimationState(direction);
if (uVar1 != this->animationState) {
this->animationState = uVar1;
InitAnimationForceUpdate(this, (this->animIndex & 0xFC) + uVar1);
diff --git a/src/enemy/keese.c b/src/enemy/keese.c
index 0462b254..26c1a938 100644
--- a/src/enemy/keese.c
+++ b/src/enemy/keese.c
@@ -2,19 +2,13 @@
#include "entity.h"
#include "enemy.h"
#include "player.h"
+#include "random.h"
#include "functions.h"
extern void sub_08001328(Entity*);
-extern u32 sub_0806F520(Entity*);
-extern void sub_0806F4E8(Entity*);
-extern u32 sub_0806F3E4(Entity*);
-extern void sub_0804A7D4(Entity*);
-extern void sub_0804A720(Entity*);
extern void Keese_StartFly(Entity*);
extern void sub_080AEFB4(Entity*);
extern void sub_08021F24(Entity*);
-extern u32 sub_08049FA0(Entity*);
-extern u32 sub_08049EE4(Entity*);
extern void (*const gKeeseFunctions[])(Entity*);
extern void (*const gKeeseActions[])(Entity*);
@@ -43,12 +37,12 @@ void sub_08021d98(Entity* this) {
void sub_08021DA8(Entity* this) {
if (sub_0806F520(this)) {
- gUnk_080CB6C4[this->previousActionFlag](this);
+ gUnk_080CB6C4[this->subAction](this);
}
}
void sub_08021DCC(Entity* this) {
- this->previousActionFlag = 2;
+ this->subAction = 2;
}
void sub_08021DD4(Entity* this) {
diff --git a/src/enemy/lakitu.c b/src/enemy/lakitu.c
index 163ec9e1..cd9ce2b2 100644
--- a/src/enemy/lakitu.c
+++ b/src/enemy/lakitu.c
@@ -1,57 +1,13 @@
#include "global.h"
#include "entity.h"
+#include "enemy.h"
#include "functions.h"
-#include "trig.h"
+#include "coord.h"
#include "random.h"
#include "player.h"
extern void (*const LakituActionFuncs[])(Entity*);
-// Lakitu
-extern void EnemyFunctionHandler(Entity*, void (*const funcs[])(Entity*));
-
-// sub_0803C784
-extern void sub_0804AA30(Entity*, void (*const funcs[])(Entity*));
-
-// sub_0803C820
-extern u32 sub_0806F520(Entity*);
-
-// sub_0803C850
-extern void sub_0806F4E8(Entity*);
-
-// Lakitu_Initialize
-extern void sub_0804A720(Entity*);
-
-// Lakitu_Cloudless
-extern u32 sub_08003FC4(Entity*, u32);
-
-// sub_0803CA4C
-extern u32 sub_080041A0(Entity*, Entity*, u32, u32);
-
-// sub_0803CAD0
-extern u32 sub_080AEFE0(Entity*);
-
-// Lakitu_SpawnLightning
-void PositionRelative(Entity*, Entity*, s32, s32);
-extern void EnqueueSFX(u32);
-
-// sub_0803CC08
-extern void DeleteEntity(Entity*);
-
-// Part of function tables
-extern void sub_08001324(Entity*);
-extern void sub_0804A7D4(Entity*);
-extern void sub_08001242(Entity*);
-
-// Used in multiple functions
-extern Entity* CreateFx(Entity*, u32, u32);
-extern Entity* sub_0804A98C(Entity* positionEntity, u8 subtype,
- u8 form); // Creates a projectile positioned at the given entity
-extern void UpdateAnimationSingleFrame(Entity*);
-extern void InitAnimationForceUpdate(Entity*, u32);
-extern u32 sub_0806FCB8(Entity*, u32, u32, u32);
-extern u32 GetFacingDirection(Entity*, Entity*);
-
// Forward references to functions in lakitu.c
extern void sub_0803CAD0(Entity*);
extern void sub_0803CBAC(Entity*);
@@ -78,9 +34,6 @@ typedef struct {
s8 y;
} PACKED OffsetCoords;
-// sub_0803CC08
-extern void DeleteEntity(Entity*);
-
// Variables
extern void (*const gUnk_080D0110[])(Entity*);
extern void (*const gUnk_080D0128[])(Entity*);
@@ -140,12 +93,12 @@ void sub_0803C784(Entity* this) {
void sub_0803C820(Entity* this) {
if (sub_0806F520(this)) {
- gUnk_080D0148[this->previousActionFlag](this);
+ gUnk_080D0148[this->subAction](this);
}
}
void sub_0803C844(Entity* this) {
- this->previousActionFlag = 1;
+ this->subAction = 1;
this->field_0x1d = 0x3c;
}
diff --git a/src/enemy/lakituCloud.c b/src/enemy/lakituCloud.c
index 80679029..5ce140c5 100644
--- a/src/enemy/lakituCloud.c
+++ b/src/enemy/lakituCloud.c
@@ -1,25 +1,17 @@
#include "global.h"
#include "entity.h"
#include "player.h"
+#include "functions.h"
extern u32 GetNextFunction(Entity*);
-extern void sub_0804A7D4(Entity*);
-extern void sub_08001242(Entity*);
-
extern void (*const gUnk_080D0418[6])(Entity*);
extern void (*const gUnk_080D0430[3])(Entity*);
extern void (*const gUnk_080D043C[3])(Entity*);
-extern bool32 sub_0806F3E4(Entity*);
-extern bool32 sub_0806F520(Entity*);
-
extern void sub_0800449C(Entity*, u32);
extern void sub_0803CE14(Entity*);
extern void sub_0803CE3C(Entity*);
-extern Entity* GetCurrentRoomProperty(u8);
-extern void sub_0806F4E8(Entity*);
-extern void sub_0806F69C(Entity*);
extern void sub_08079D84(void);
extern void sub_080A2CC0(Entity*, Entity**, u16*);
@@ -38,16 +30,16 @@ void sub_0803CCEC(Entity* this) {
void sub_0803CCFC(Entity* this) {
if (sub_0806F520(this) == 0) {
- if (this->previousActionFlag == 2) {
+ if (this->subAction == 2) {
sub_0803CE3C(this);
}
} else {
- gUnk_080D043C[this->previousActionFlag](this);
+ gUnk_080D043C[this->subAction](this);
}
}
void sub_0803CD2C(Entity* this) {
- this->previousActionFlag = 1;
+ this->subAction = 1;
this->field_0x1d = 0x3c;
}
diff --git a/src/enemy/leever.c b/src/enemy/leever.c
index b40c63ca..d92e1d26 100644
--- a/src/enemy/leever.c
+++ b/src/enemy/leever.c
@@ -1,19 +1,14 @@
#include "global.h"
#include "entity.h"
#include "enemy.h"
+#include "random.h"
#include "functions.h"
+#include "coord.h"
-extern void SetChildOffset(Entity*, s32, s32, s32);
-extern void sub_0804AA30(Entity*, void (*const func[])(Entity*));
-extern void sub_0804A7D4(Entity*);
-extern Entity* CreateDeathFx(Entity*, u32, u32);
-extern void sub_0804A720(Entity*);
extern u32 sub_080002D4(s32, s32, u32);
extern u32 sub_080002BC(s32, s32, u32);
-extern u32 sub_08049FDC(Entity*, u32);
extern Entity* gUnk_020000B0;
-extern s16 gSineTable[];
bool32 Leever_PlayerInRange(Entity*, s32);
void Leever_Move(Entity*);
diff --git a/src/enemy/likeLike.c b/src/enemy/likeLike.c
index 60a7b7b7..f04073d3 100644
--- a/src/enemy/likeLike.c
+++ b/src/enemy/likeLike.c
@@ -1,11 +1,12 @@
#include "enemy.h"
#include "entity.h"
-#include "functions.h"
#include "textbox.h"
#include "save.h"
+#include "random.h"
+#include "createObject.h"
+#include "functions.h"
extern bool32 sub_080544B4(u32);
-extern void sub_0807CAA0(u32, u32);
void sub_0802810C(Entity*);
void sub_080281A0(Entity*);
@@ -210,7 +211,7 @@ void sub_0802810C(Entity* this) {
gPlayerState.flags.all &= 0xffffffef;
gPlayerEntity.flags |= 0x80;
gPlayerEntity.field_0x20 = 0x18000;
- gPlayerEntity.hurtBlinkTime = -60;
+ gPlayerEntity.iframes = -60;
gPlayerEntity.direction = gPlayerEntity.animationState << 2;
gPlayerEntity.spritePriority.b1 = this->field_0x82.HALF.HI;
gPlayerEntity.height.HALF.HI = gPlayerEntity.spriteOffsetY;
@@ -219,8 +220,8 @@ void sub_0802810C(Entity* this) {
this->actionDelay = 0x50;
this->field_0xf = 0;
this->flags2 |= 2;
- if (this->hurtBlinkTime == 0) {
- this->hurtBlinkTime = -18;
+ if (this->iframes == 0) {
+ this->iframes = -18;
}
}
#else
diff --git a/src/enemy/madderpillar.c b/src/enemy/madderpillar.c
index 9c2d526f..0679a87d 100644
--- a/src/enemy/madderpillar.c
+++ b/src/enemy/madderpillar.c
@@ -1,5 +1,6 @@
#include "enemy.h"
#include "entity.h"
+#include "random.h"
#include "functions.h"
extern u8 gEntCount;
@@ -460,12 +461,12 @@ void sub_0802A098(Entity* this) {
void sub_0802A0F8(Entity* this) {
if (this->currentHealth != 0) {
- if ((this->bitfield & 0x80) && this->hurtBlinkTime != 0) {
+ if ((this->bitfield & 0x80) && this->iframes != 0) {
Entity* ent = this;
u32 i;
for (i = 0; i < 6; i++) {
ent = ent->attachedEntity;
- ent->hurtBlinkTime = this->hurtBlinkTime;
+ ent->iframes = this->iframes;
}
}
} else {
diff --git a/src/enemy/miniFireballGuy.c b/src/enemy/miniFireballGuy.c
index 24f7e210..3210aeeb 100644
--- a/src/enemy/miniFireballGuy.c
+++ b/src/enemy/miniFireballGuy.c
@@ -1,11 +1,9 @@
#include "global.h"
#include "entity.h"
+#include "enemy.h"
+#include "random.h"
#include "functions.h"
-extern void EnemyFunctionHandler(Entity*, void (*const func[])(Entity*));
-extern void sub_0804A7D4(Entity*);
-extern void sub_0804A720(Entity*);
-extern void sub_08045678(Entity*);
extern void sub_08045678(Entity*);
extern void (*const gUnk_080D1868[])(Entity*);
diff --git a/src/enemy/miniSlime.c b/src/enemy/miniSlime.c
index 96e7d615..68c1303a 100644
--- a/src/enemy/miniSlime.c
+++ b/src/enemy/miniSlime.c
@@ -1,16 +1,13 @@
#include "global.h"
#include "entity.h"
-#include "room.h"
+#include "enemy.h"
+#include "random.h"
#include "functions.h"
void sub_08045374(Entity*);
-extern u32 sub_0806FA04(u32, u32);
-extern void sub_0804A720();
extern void sub_080452E4();
-extern void sub_0804AA30();
extern void ReplaceMonitoredEntity(Entity*, Entity*);
-extern void sub_0804A7D4(Entity*);
extern void (*const gUnk_080D17C0[])(Entity*);
extern void (*const gUnk_080D17D8[])(Entity*);
@@ -72,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/moldorm.c b/src/enemy/moldorm.c
index 186bee30..f7ed8161 100644
--- a/src/enemy/moldorm.c
+++ b/src/enemy/moldorm.c
@@ -1,5 +1,6 @@
#include "enemy.h"
#include "entity.h"
+#include "random.h"
#include "functions.h"
void sub_08022EAC(Entity*);
@@ -40,9 +41,9 @@ void sub_08022BEC(Entity* this) {
this->animationState = ((this->direction + 2) & 0x1c) >> 2;
this->frameIndex = this->animationState;
- this->attachedEntity->hurtBlinkTime = this->hurtBlinkTime;
- (*(Entity**)&this->field_0x7c)->hurtBlinkTime = this->hurtBlinkTime;
- (*(Entity**)&this->field_0x80)->hurtBlinkTime = this->hurtBlinkTime;
+ this->attachedEntity->iframes = this->iframes;
+ (*(Entity**)&this->field_0x7c)->iframes = this->iframes;
+ (*(Entity**)&this->field_0x80)->iframes = this->iframes;
sub_0804AA30(this, gUnk_080CBBA0);
}
diff --git a/src/enemy/moldworm.c b/src/enemy/moldworm.c
index 3bf68715..11d5166e 100644
--- a/src/enemy/moldworm.c
+++ b/src/enemy/moldworm.c
@@ -1,5 +1,6 @@
#include "enemy.h"
#include "entity.h"
+#include "random.h"
#include "functions.h"
extern void sub_0800449C(Entity*, u32);
@@ -67,12 +68,12 @@ void sub_080230CC(Entity* this) {
}
void sub_080230E4(Entity* this) {
- if (this->previousActionFlag == 0xff) {
+ if (this->subAction == 0xff) {
this->action = 7;
this->actionDelay = 1;
- this->previousActionFlag = 0;
+ this->subAction = 0;
this->damageType = 0x85;
- this->hurtBlinkTime = -8;
+ this->iframes = -8;
this->field_0x7c.BYTES.byte3 = 0;
this->field_0x7a.HALF.HI = 0;
if (this->bitfield == 0x80 || this->bitfield == 0x9e) {
@@ -90,7 +91,7 @@ void sub_080230E4(Entity* this) {
gPlayerEntity.spriteSettings.b.draw = 1;
gPlayerEntity.field_0x20 = 0x18000;
gPlayerEntity.direction = 0xff;
- gPlayerEntity.hurtBlinkTime = -0x14;
+ gPlayerEntity.iframes = -0x14;
gPlayerState.jumpStatus = 0x41;
gPlayerState.flags.all &= 0xfff7ffff;
}
@@ -410,7 +411,7 @@ void sub_08023894(Entity* this) {
gPlayerEntity.y.HALF.HI = this->y.HALF.HI;
gPlayerEntity.direction = DirectionRoundUp(GetFacingDirection(*(Entity**)&this->field_0x74, this));
gPlayerEntity.animationState = gPlayerEntity.direction >> 2;
- gPlayerEntity.hurtBlinkTime = 12;
+ gPlayerEntity.iframes = 12;
ModHealth(-0x10);
sub_0800449C(&gPlayerEntity, 0x7a);
}
@@ -421,7 +422,7 @@ void sub_0802390C(Entity* this) {
if (this->bitfield & 0x80) {
Entity* ent = this->attachedEntity;
do {
- ent->hurtBlinkTime = this->hurtBlinkTime;
+ ent->iframes = this->iframes;
} while (ent = ent->attachedEntity, ent != NULL);
} else {
Entity* ent = this->attachedEntity;
@@ -431,7 +432,7 @@ void sub_0802390C(Entity* this) {
if (bVar2 != 0) {
u32 tmp;
ent->currentHealth = 0xff;
- tmp = (u8)ent->hurtBlinkTime;
+ tmp = (u8)ent->iframes;
if (this->currentHealth >= bVar2) {
this->currentHealth -= bVar2;
} else {
@@ -440,7 +441,7 @@ void sub_0802390C(Entity* this) {
ent = this;
do {
- ent->hurtBlinkTime = tmp;
+ ent->iframes = tmp;
} while (ent = ent->attachedEntity, ent != NULL);
break;
}
diff --git a/src/enemy/octorok.c b/src/enemy/octorok.c
index d89e4e65..565ed259 100644
--- a/src/enemy/octorok.c
+++ b/src/enemy/octorok.c
@@ -1,15 +1,9 @@
#include "global.h"
#include "entity.h"
+#include "enemy.h"
+#include "random.h"
#include "functions.h"
-extern void EnemyFunctionHandler();
-extern void SetChildOffset();
-extern void sub_0804AA30();
-extern void sub_0804A7D4();
-extern u32 sub_0806F520();
-extern void sub_0806F4E8();
-extern void UpdateAnimationVariableFrames();
-extern void sub_0804A720();
extern Entity* sub_08049DF4(u32);
void Octorok_Pause();
@@ -55,16 +49,16 @@ void sub_0801EB0C(Entity* this) {
}
void sub_0801EB2C(Entity* this) {
- if (this->previousActionFlag < 3 && !sub_0806F520(this)) {
+ if (this->subAction < 3 && !sub_0806F520(this)) {
Octorok_Pause(this);
InitializeAnimation(this, this->animationState);
} else {
- gUnk_080CA158[this->previousActionFlag](this);
+ gUnk_080CA158[this->subAction](this);
}
}
void sub_0801EB68(Entity* this) {
- this->previousActionFlag = 1;
+ this->subAction = 1;
this->field_0x1d = 60;
}
diff --git a/src/enemy/peahat.c b/src/enemy/peahat.c
index 07fd3f5a..5c134ed8 100644
--- a/src/enemy/peahat.c
+++ b/src/enemy/peahat.c
@@ -1,4 +1,6 @@
#include "entity.h"
+#include "enemy.h"
+#include "random.h"
#include "functions.h"
extern void (*const gPeahatFunctions[])(Entity*);
@@ -58,14 +60,14 @@ void sub_0801FFDC(Entity* this) {
this->animationState = PeahatAnimation_SlicedPropeller;
this->action = 5;
this->speed = 0x80;
- this->hurtBlinkTime = -30;
+ this->iframes = -30;
this->field_0x80.HALF.HI = 0;
InitializeAnimation(this, this->animationState);
} else if (this->bitfield == 0x9b) {
this->animationState = PeahatAnimation_BrokenPropeller;
this->action = 5;
this->speed = 0x80;
- this->hurtBlinkTime = -30;
+ this->iframes = -30;
this->field_0x80.HALF.HI = 0;
InitializeAnimation(this, this->animationState);
} else if (this->bitfield == 0x80) {
@@ -87,14 +89,14 @@ void sub_0801FFDC(Entity* this) {
}
void sub_08020088(Entity* this) {
- if (2 >= this->previousActionFlag && !sub_0806F520(this))
+ if (2 >= this->subAction && !sub_0806F520(this))
return;
- gUnk_080CA5BC[this->previousActionFlag](this);
+ gUnk_080CA5BC[this->subAction](this);
}
void sub_080200B4(Entity* this) {
- this->previousActionFlag = 1;
+ this->subAction = 1;
this->field_0x1d = 60;
if (this->animationState == PeahatAnimation_Flying) {
this->animationState = PeahatAnimation_BrokenPropeller;
@@ -150,7 +152,7 @@ void Peahat_Fly(Entity* this) {
if (sub_08049FDC(this, 1)) {
if (this->field_0x82.HALF.HI == 0 && (this->field_0xf & 0xf) == 0 && sub_08049F1C(this, gUnk_020000B0, 0x30)) {
this->action = 2;
- this->previousActionFlag = Random() & 3;
+ this->subAction = Random() & 3;
this->actionDelay = 60;
this->speed = 160;
}
diff --git a/src/enemy/pesto.c b/src/enemy/pesto.c
index a8d24fa2..3eeda562 100644
--- a/src/enemy/pesto.c
+++ b/src/enemy/pesto.c
@@ -1,15 +1,16 @@
#include "enemy.h"
#include "entity.h"
+#include "random.h"
+#include "createObject.h"
+#include "game.h"
#include "functions.h"
extern u32 sub_080002E0(u16, u32);
-extern u32 CheckIsDungeon(void);
extern void sub_0800449C(Entity*, u32);
extern u32 sub_08049F1C(Entity*, Entity*, u32);
-extern void sub_0804AA30(Entity*, void (*const funcs[])(Entity*));
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*);
@@ -78,20 +79,20 @@ void sub_08023FE0(Entity* this) {
}
void sub_08023FF0(Entity* this) {
- if (this->previousActionFlag < 3 && !sub_0806F520(this)) {
+ if (this->subAction < 3 && !sub_0806F520(this)) {
this->action = 1;
- this->previousActionFlag = 0;
+ this->subAction = 0;
this->flags |= 0x80;
this->damageType = 0x77;
this->actionDelay = 1;
this->speed = 0x40;
} else {
- gUnk_080CBEF8[this->previousActionFlag](this);
+ gUnk_080CBEF8[this->subAction](this);
}
}
void sub_08024038(Entity* this) {
- this->previousActionFlag = 1;
+ this->subAction = 1;
this->field_0x1d = 60;
GetNextFrame(this);
}
@@ -129,7 +130,7 @@ void sub_080240B8(Entity* this) {
u32 direction = (Random() & 0xc0) >> 3;
sub_0804A720(this);
this->action = 1;
- this->previousActionFlag = 0;
+ this->subAction = 0;
this->field_0x80.HALF.LO = 0;
if (direction & 8) {
this->y.HALF.HI += (direction & 0x10) ? -0x20 : 0x20;
@@ -665,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)) {
@@ -675,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)) {
@@ -692,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) {
@@ -829,7 +830,7 @@ void sub_08024E4C(Entity* this) {
player->spritePriority.b1 = 0;
if (this->field_0xf == 0) {
(this->field_0x86.HALF.HI++;
- player->hurtBlinkTime = 8;
+ player->iframes = 8;
ModHealth(-2);
sub_0800449C(player, 0x7a);
}
@@ -849,7 +850,7 @@ void sub_08024F50(Entity* this) {
CopyPosition(this, &gPlayerEntity);
gPlayerEntity.action = 1;
gPlayerEntity.flags |= 0x80;
- gPlayerEntity.hurtBlinkTime = -0x3c;
+ gPlayerEntity.iframes = -0x3c;
gPlayerEntity.direction = gPlayerEntity.animationState << 2;
gPlayerEntity.speed = 0;
gPlayerEntity.spritePriority.b1 = this->cutsceneBeh.HALF.HI;
diff --git a/src/enemy/puffstool.c b/src/enemy/puffstool.c
index 08908191..4a47b4b7 100644
--- a/src/enemy/puffstool.c
+++ b/src/enemy/puffstool.c
@@ -1,5 +1,6 @@
#include "enemy.h"
#include "entity.h"
+#include "random.h"
#include "functions.h"
extern u32 sub_080002E0(u32, u32);
@@ -8,7 +9,6 @@ extern u16 sub_080002A8(u32, u32, u32);
extern u16 sub_080002D4(u32, u32, u32);
extern void sub_0804AA1C(Entity*);
extern Entity* sub_08049DF4(u32);
-extern void sub_0807B7D8(u32, u32, u32);
extern u8 gUnk_080B37A0[];
extern u8 gUnk_080B3E80[];
@@ -74,7 +74,7 @@ void sub_08025020(Entity* this) {
if (0 < this->field_0x20) {
this->field_0x20 = 0;
}
- this->hurtBlinkTime = -0xc;
+ this->iframes = -0xc;
this->field_0x42 = 0;
if (this->field_0x80.HALF.LO == 0) {
this->animationState = (*(Entity**)&this->field_0x4c)->direction >> 3;
@@ -84,7 +84,7 @@ void sub_08025020(Entity* this) {
}
break;
default:
- if (this->damageType == 0x82 && this->hurtBlinkTime < 0) {
+ if (this->damageType == 0x82 && this->iframes < 0) {
Entity* ent = CreateObject(0x21, 2, 0);
if (ent != NULL) {
ent->spritePriority.b0 = 3;
@@ -108,14 +108,14 @@ void sub_0802511C(Entity* this) {
void sub_0802514C(Entity* this) {
sub_08003FC4(this, 0x2000);
if (sub_0806F520(this)) {
- gUnk_080CBFEC[this->previousActionFlag](this);
+ gUnk_080CBFEC[this->subAction](this);
} else {
sub_08025C2C(this);
}
}
void sub_08025180(Entity* this) {
- this->previousActionFlag = 1;
+ this->subAction = 1;
this->actionDelay = Random();
this->animationState = (((*(Entity**)&this->field_0x4c)->direction ^ 0x10) >> 3);
InitializeAnimation(this, this->animationState + 4);
diff --git a/src/enemy/rockChuchu.c b/src/enemy/rockChuchu.c
index 01a0c9c7..977257bd 100644
--- a/src/enemy/rockChuchu.c
+++ b/src/enemy/rockChuchu.c
@@ -1,5 +1,6 @@
#include "enemy.h"
#include "entity.h"
+#include "random.h"
#include "functions.h"
extern void sub_0804A4E4(Entity*, Entity*);
@@ -43,7 +44,7 @@ void sub_08022254(Entity* this) {
ent = CreateEnemy(1, 1);
if (ent) {
ent->type2 = 1;
- ent->hurtBlinkTime = -8;
+ ent->iframes = -8;
sub_0804A4E4(this, ent);
this->action = 2;
this->flags &= ~0x80;
@@ -96,7 +97,7 @@ void sub_080223E4(Entity* this) {
ent = this->attachedEntity;
if (ent) {
ent->bitfield = 0x94;
- ent->hurtBlinkTime = 0x10;
+ ent->iframes = 0x10;
ent->field_0x42 = 0xc;
ent->field_0x3e = this->direction;
}
diff --git a/src/enemy/rollobite.c b/src/enemy/rollobite.c
index 263b5625..0e6ee1bb 100644
--- a/src/enemy/rollobite.c
+++ b/src/enemy/rollobite.c
@@ -1,4 +1,6 @@
#include "entity.h"
+#include "enemy.h"
+#include "random.h"
#include "functions.h"
extern void (*const gRollobiteFunctions[])(Entity*);
@@ -63,18 +65,18 @@ void sub_080206E0(Entity* this) {
}
void sub_08020734(Entity* this) {
- if (this->previousActionFlag < 3 && !sub_0806F520(this)) {
+ if (this->subAction < 3 && !sub_0806F520(this)) {
this->action = 4;
this->flags |= 0x80;
this->direction = 0xff;
InitializeAnimation(this, this->animationState + 0x10);
} else {
- gUnk_080CA6A4[this->previousActionFlag](this);
+ gUnk_080CA6A4[this->subAction](this);
}
}
void sub_0802077C(Entity* this) {
- this->previousActionFlag = 1;
+ this->subAction = 1;
this->field_0x1d = 60;
}
@@ -132,11 +134,11 @@ void Rollobite_Walk(Entity* this) {
}
void sub_08020874(Entity* this) {
- gUnk_080CA6BC[this->previousActionFlag](this);
+ gUnk_080CA6BC[this->subAction](this);
}
void sub_0802088C(Entity* this) {
- this->previousActionFlag = 1;
+ this->subAction = 1;
this->flags &= ~0x80;
this->cutsceneBeh.HALF.HI = gPlayerEntity.animationState;
this->spritePriority.b1 = 0;
diff --git a/src/enemy/rope.c b/src/enemy/rope.c
index d1d73723..0859bae6 100644
--- a/src/enemy/rope.c
+++ b/src/enemy/rope.c
@@ -1,8 +1,8 @@
#include "global.h"
#include "entity.h"
-#include "sprite.h"
-#include "functions.h"
#include "enemy.h"
+#include "random.h"
+#include "functions.h"
extern void (*const gRope[6])(Entity*);
extern void (*const gUnk_080CE460[4])(Entity*);
@@ -36,12 +36,12 @@ void sub_080313AC(Entity* this) {
void sub_080313E8(Entity* this) {
if (sub_0806F520()) {
- gUnk_080CE470[this->previousActionFlag](this);
+ gUnk_080CE470[this->subAction](this);
}
}
void sub_0803140C(Entity* this) {
- this->previousActionFlag = 1;
+ this->subAction = 1;
this->field_0x1d = 0x3c;
}
@@ -65,7 +65,7 @@ void sub_08031434(Entity* this) {
sub_08031600(this);
} else {
this->action = 1;
- this->previousActionFlag = 0;
+ this->subAction = 0;
this->spriteSettings.b.draw = (this->spriteSettings.b.draw & 0xfc);
this->height.HALF.HI = -0x80;
this->frameIndex = 0xff;
@@ -73,13 +73,13 @@ void sub_08031434(Entity* this) {
}
void sub_08031480(Entity* this) {
- if (this->previousActionFlag == 0) {
+ if (this->subAction == 0) {
if (this->actionDelay != 0) {
this->actionDelay--;
} else {
sub_08031600(this);
this->action = 1;
- this->previousActionFlag = 1;
+ this->subAction = 1;
this->spriteSettings.b.draw = 3;
this->spriteRendering.b3 = 1;
this->spriteOrientation.flipY = 1;
diff --git a/src/enemy/rupeeLike.c b/src/enemy/rupeeLike.c
index 64584892..10984c27 100644
--- a/src/enemy/rupeeLike.c
+++ b/src/enemy/rupeeLike.c
@@ -1,11 +1,11 @@
#include "global.h"
#include "entity.h"
#include "enemy.h"
-#include "functions.h"
#include "npc.h"
-#include "structures.h"
#include "player.h"
#include "save.h"
+#include "createObject.h"
+#include "functions.h"
extern void sub_080293DC(Entity*);
extern void sub_080296D8(Entity*);
@@ -234,7 +234,7 @@ void sub_080296D8(Entity* this) {
gPlayerState.flags.all &= 0xffffffef;
gPlayerEntity.flags |= 0x80;
gPlayerEntity.field_0x20 = 0x18000;
- gPlayerEntity.hurtBlinkTime = 0xa6;
+ gPlayerEntity.iframes = 0xa6;
gPlayerEntity.height.HALF.HI = -2;
gPlayerEntity.direction = gPlayerEntity.animationState << 2;
gPlayerEntity.spritePriority.b1 = this->field_0x80.HALF.LO;
@@ -243,8 +243,8 @@ void sub_080296D8(Entity* this) {
this->action = 5;
this->field_0xf = 0x3c;
this->flags2 |= 3;
- if ((s8)this->hurtBlinkTime == 0) {
- this->hurtBlinkTime = 0xf4;
+ if ((s8)this->iframes == 0) {
+ this->iframes = 0xf4;
}
}
diff --git a/src/enemy/slime.c b/src/enemy/slime.c
index 9609232d..fc7714e3 100644
--- a/src/enemy/slime.c
+++ b/src/enemy/slime.c
@@ -1,25 +1,17 @@
#include "global.h"
#include "entity.h"
+#include "enemy.h"
#include "room.h"
+#include "random.h"
#include "functions.h"
typedef struct {
- void* field_0x0;
- void* entityCount;
- u8 freezeTime;
-} EntityHandler;
-
-typedef struct {
s8 h, v;
} PACKED PosOffset;
void sub_08044FF8(Entity*);
void sub_08045178(Entity*, Entity*, int, int);
-extern void sub_0804A720(Entity*);
-extern u32 sub_0806FA04(u32, u32);
-extern u32 sub_08049FA0(Entity*);
-extern u32 sub_08049EE4(Entity*);
extern void sub_0804A4E4(Entity*, Entity*);
extern u32 sub_080002CC(Entity*, s32, s32);
@@ -29,7 +21,6 @@ extern u8 gUnk_080D16D0[4]; // Entity count per form
extern PosOffset gUnk_080D16D4[4];
extern u8 gEntCount;
-extern EntityHandler gHitboxCount;
void Slime(Entity* this) {
EnemyFunctionHandler(this, gUnk_080D16A4);
@@ -76,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;
@@ -117,7 +108,7 @@ void sub_080450A8(Entity* this) {
ent->parent = entities[(i + count - 1) % count];
ent->type2 = 1;
ent->height.HALF.HI = 0;
- ent->hurtBlinkTime = -0x10;
+ ent->iframes = -0x10;
/* Set MiniSlime offset relative to killed slime. */
sub_08045178(this, ent, off->h, off->v);
diff --git a/src/enemy/sluggula.c b/src/enemy/sluggula.c
index 86b90864..436baf3c 100644
--- a/src/enemy/sluggula.c
+++ b/src/enemy/sluggula.c
@@ -1,5 +1,6 @@
#include "enemy.h"
#include "entity.h"
+#include "random.h"
#include "functions.h"
extern s32 sub_080012DC(Entity*);
diff --git a/src/enemy/smallPesto.c b/src/enemy/smallPesto.c
index 7b6dbbfd..a7d68131 100644
--- a/src/enemy/smallPesto.c
+++ b/src/enemy/smallPesto.c
@@ -1,17 +1,11 @@
#include "global.h"
#include "entity.h"
+#include "coord.h"
+#include "random.h"
+#include "functions.h"
extern u32 GetNextFunction(Entity*);
-extern u32 sub_0806F520(Entity*);
-extern void sub_0806F4E8(Entity*);
-extern u32 sub_0806F3E4();
-extern void sub_0804A7D4(Entity*);
-extern void sub_0804A720(Entity*);
extern void sub_080317F8(Entity*);
-extern u32 sub_08049FA0(Entity*);
-extern u32 Random();
-extern u32 sub_08049EE4(Entity*);
-extern void sub_0806F69C(Entity*);
extern void (*gUnk_080CE530[])(Entity*);
extern void (*gUnk_080CE548[])(Entity*);
@@ -19,7 +13,6 @@ extern void (*gUnk_080CE554[])(Entity*);
void sub_080317B4(Entity*);
void sub_080317E0(Entity*);
-void sub_080317F8(Entity*);
void sub_08031840(Entity*);
extern Hitbox gUnk_080CE560;
@@ -42,17 +35,17 @@ void sub_0803169C(Entity* this) {
iVar1 = sub_0806F520(this);
if (iVar1 == 0) {
this->action = 1;
- this->previousActionFlag = 0;
+ this->subAction = 0;
this->flags = this->flags | 0x80;
this->speed = 0x40;
this->field_0xf = 1;
} else {
- gUnk_080CE554[this->previousActionFlag](this);
+ gUnk_080CE554[this->subAction](this);
}
}
void sub_080316DC(Entity* this) {
- this->previousActionFlag = 1;
+ this->subAction = 1;
this->field_0x1d = 0x3c;
}
@@ -61,7 +54,7 @@ void sub_080316E8(Entity* this) {
}
void sub_080316F0(Entity* this) {
- if (sub_0806F3E4()) {
+ if (sub_0806F3E4(this)) {
sub_0804A7D4(this);
}
}
diff --git a/src/enemy/spark.c b/src/enemy/spark.c
index 210b8431..4a6541fa 100644
--- a/src/enemy/spark.c
+++ b/src/enemy/spark.c
@@ -19,7 +19,7 @@ void sub_0802B2E0(Entity* this) {
if (this->bitfield & 0x80) {
if ((this->bitfield & 0x7f) == 0x14) {
this->flags &= ~0x80;
- this->hurtBlinkTime = 0;
+ this->iframes = 0;
this->spriteSettings.b.draw = 0;
this->action = 2;
ent = CreateFx(this, 2, 0);
diff --git a/src/enemy/spearMoblin.c b/src/enemy/spearMoblin.c
index 68e0fef5..033c1ea7 100644
--- a/src/enemy/spearMoblin.c
+++ b/src/enemy/spearMoblin.c
@@ -1,9 +1,9 @@
#include "enemy.h"
#include "entity.h"
+#include "random.h"
#include "functions.h"
extern bool32 sub_0806FC80(Entity*, Entity*, u32);
-extern Entity* sub_080A7EE0(u32);
extern Entity* sub_08049DF4(u32);
void sub_08028604(Entity*);
@@ -56,7 +56,7 @@ void sub_08028284(Entity* this) {
}
}
- this->attachedEntity->hurtBlinkTime = this->hurtBlinkTime;
+ this->attachedEntity->iframes = this->iframes;
if (this->currentHealth == 0) {
this->speed = 0;
this->field_0x82.HALF.LO = 0;
@@ -386,7 +386,7 @@ void sub_080288C0(Entity* this) {
Entity* ent = this->attachedEntity;
if (ent && (ent->bitfield & 0x80)) {
this->field_0x3e = ent->field_0x3e;
- this->hurtBlinkTime = -ent->hurtBlinkTime;
+ this->iframes = -ent->iframes;
this->field_0x46 = ent->field_0x46;
this->field_0x42 = ent->field_0x42;
ent->field_0x42 = 0;
diff --git a/src/enemy/spikedBeetle.c b/src/enemy/spikedBeetle.c
index 503084e7..46c87653 100644
--- a/src/enemy/spikedBeetle.c
+++ b/src/enemy/spikedBeetle.c
@@ -1,5 +1,6 @@
#include "enemy.h"
#include "entity.h"
+#include "random.h"
#include "functions.h"
extern u32 sub_0804A024(Entity*, u32, u32);
@@ -52,7 +53,7 @@ void sub_0802B628(Entity* this) {
this->speed = 0xc0;
this->direction = this->field_0x3e;
this->field_0x42 = 0;
- this->hurtBlinkTime = -8;
+ this->iframes = -8;
this->damageType = 100;
InitializeAnimation(this, 9);
}
diff --git a/src/enemy/spinyChuchu.c b/src/enemy/spinyChuchu.c
index 7bf39713..21396115 100644
--- a/src/enemy/spinyChuchu.c
+++ b/src/enemy/spinyChuchu.c
@@ -1,5 +1,6 @@
#include "enemy.h"
#include "entity.h"
+#include "random.h"
#include "functions.h"
extern void sub_08001318(Entity*);
@@ -117,11 +118,11 @@ void sub_080225EC(Entity* this) {
}
void sub_08022654(Entity* this) {
- switch (this->previousActionFlag) {
+ switch (this->subAction) {
case 0:
if (--this->field_0xf)
return;
- this->previousActionFlag = 1;
+ this->subAction = 1;
SoundReq(0x12d);
InitializeAnimation(this, 0);
/* fallthrough */
@@ -129,7 +130,7 @@ void sub_08022654(Entity* this) {
if (sub_08003FC4(this, 0x1800))
return;
- this->previousActionFlag = 2;
+ this->subAction = 2;
this->spriteSettings.b.draw = 1;
InitializeAnimation(this, 5);
EnqueueSFX(0x7d);
diff --git a/src/enemy/tektite.c b/src/enemy/tektite.c
index 66d2ca82..ab5da752 100644
--- a/src/enemy/tektite.c
+++ b/src/enemy/tektite.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "entity.h"
#include "enemy.h"
+#include "random.h"
#include "functions.h"
extern void (*const gUnk_080CDED0[])(Entity*);
@@ -29,7 +30,7 @@ void sub_0802F150(Entity* this) {
switch (this->bitfield & 0x3f) {
case 0x14:
this->action = 1;
- this->previousActionFlag = 0;
+ this->subAction = 0;
if (this->type != 0) {
this->actionDelay = 0xc0;
} else {
@@ -62,15 +63,13 @@ void sub_0802F1F0(Entity* this) {
}
}
-extern u8 gUnk_080CDEF8[];
-
void sub_0802F210(Entity* this) {
u32 temp;
u32 temp2;
sub_0804A720(this);
this->action = 1;
- this->previousActionFlag = 0;
+ this->subAction = 0;
this->actionDelay = gUnk_080CDEF8[Random() & 3];
this->actionDelay = (Random() & 0x1f) + this->actionDelay;
this->field_0xf = 0;
@@ -106,8 +105,6 @@ void sub_0802F284(Entity* this) {
}
}
-extern u8 gUnk_080CDEF8[];
-
void sub_0802F300(Entity* this) {
s32 temp;
u32 rand;
@@ -119,7 +116,7 @@ void sub_0802F300(Entity* this) {
if (sub_080044EC(this, this->field_0x80.HWORD) == 1) {
this->action = 3;
- this->previousActionFlag = 0;
+ this->subAction = 0;
if (this->type != 0) {
rand = 0;
}
@@ -146,9 +143,9 @@ void sub_0802F300(Entity* this) {
}
}
- if ((this->previousActionFlag == 0) && (temp < this->height.HALF.HI)) {
+ if ((this->subAction == 0) && (temp < this->height.HALF.HI)) {
InitializeAnimation(this, 4);
- this->previousActionFlag = 1;
+ this->subAction = 1;
}
if (temp < -0xc) {
diff --git a/src/enemy/tektiteGolden.c b/src/enemy/tektiteGolden.c
index 3bf14e34..2567c463 100644
--- a/src/enemy/tektiteGolden.c
+++ b/src/enemy/tektiteGolden.c
@@ -1,8 +1,9 @@
#include "global.h"
#include "entity.h"
#include "enemy.h"
-#include "functions.h"
#include "flags.h"
+#include "random.h"
+#include "functions.h"
extern void sub_08038168(Entity*);
@@ -27,7 +28,7 @@ void sub_08037F00(Entity* this) {
sub_0804AA30(this, &gUnk_080CF4A0);
if (this->bitfield == 0x94) {
this->action = 1;
- this->previousActionFlag = 0;
+ this->subAction = 0;
this->actionDelay = 0x14;
this->field_0xf = 0;
this->field_0x80.HALF.LO = 0;
@@ -69,7 +70,7 @@ void sub_08037FA0(Entity* this) {
}
sub_0804A720(this);
this->action = 1;
- this->previousActionFlag = 0;
+ this->subAction = 0;
this->actionDelay = (Random() & 0x1f) + 0x20;
this->field_0xf = 0;
this->field_0x80.HALF.LO = 0;
@@ -106,7 +107,7 @@ void sub_08038048(Entity* this) {
if (sub_080044EC(this, 0x3000) == 1) {
this->action = 3;
- this->previousActionFlag = 0;
+ this->subAction = 0;
this->actionDelay = 0x14;
InitializeAnimation(this, 3);
return;
@@ -121,9 +122,9 @@ void sub_08038048(Entity* this) {
sub_08038168(this);
}
- if ((this->previousActionFlag == 0) && (temp < this->height.HALF.HI)) {
+ if ((this->subAction == 0) && (temp < this->height.HALF.HI)) {
InitializeAnimation(this, 4);
- this->previousActionFlag = 1;
+ this->subAction = 1;
}
if (temp < -0xc) {
diff --git a/src/enemy/vaatiBall.c b/src/enemy/vaatiBall.c
index bdccd10e..3907e270 100644
--- a/src/enemy/vaatiBall.c
+++ b/src/enemy/vaatiBall.c
@@ -1,7 +1,8 @@
#include "entity.h"
#include "player.h"
-#include "functions.h"
#include "screen.h"
+#include "createObject.h"
+#include "functions.h"
typedef struct {
s8 h, v;
@@ -136,8 +137,6 @@ void sub_080447E0(Entity* this) {
}
}
-extern u32 sub_080045B4();
-extern u32 sub_0806FCB8(Entity*, u32, u32, u32);
extern void sub_08044DEC();
void sub_08044868(Entity* this) {
diff --git a/src/enemy/wallMaster.c b/src/enemy/wallMaster.c
index 1ba24a96..394e8620 100644
--- a/src/enemy/wallMaster.c
+++ b/src/enemy/wallMaster.c
@@ -1,7 +1,8 @@
#include "enemy.h"
#include "entity.h"
-#include "functions.h"
#include "area.h"
+#include "random.h"
+#include "functions.h"
extern void sub_08001328(Entity*);
extern Entity* sub_08049DF4(u32);
diff --git a/src/enemy/wallMaster2.c b/src/enemy/wallMaster2.c
index d0e5b1a3..f6d32479 100644
--- a/src/enemy/wallMaster2.c
+++ b/src/enemy/wallMaster2.c
@@ -1,9 +1,9 @@
#include "enemy.h"
-#include "functions.h"
#include "area.h"
+#include "random.h"
+#include "functions.h"
extern void sub_08001328(Entity*);
-extern u32 sub_0806FCB8(Entity*, u32, u32, u32);
extern void DoExitTransition(u32*);
extern Entity* gUnk_020000B0;
diff --git a/src/enemy/waterDrop.c b/src/enemy/waterDrop.c
index 320fc03d..f994b564 100644
--- a/src/enemy/waterDrop.c
+++ b/src/enemy/waterDrop.c
@@ -1,7 +1,8 @@
#include "enemy.h"
#include "entity.h"
-#include "functions.h"
#include "screen.h"
+#include "random.h"
+#include "functions.h"
void sub_0802A39C(Entity*);
void sub_0802A334(Entity*);
diff --git a/src/enemy/wisp.c b/src/enemy/wisp.c
index 10463258..247cf0a0 100644
--- a/src/enemy/wisp.c
+++ b/src/enemy/wisp.c
@@ -1,10 +1,11 @@
#include "global.h"
#include "entity.h"
#include "enemy.h"
-#include "structures.h"
#include "player.h"
-#include "functions.h"
#include "save.h"
+#include "random.h"
+#include "createObject.h"
+#include "functions.h"
extern void (*const gUnk_080CEB74[])(Entity*);
extern void (*const gUnk_080CEB8C[])(Entity*);
@@ -49,7 +50,7 @@ void sub_08033564(Entity* this) {
break;
case 0x14:
this->flags &= 0x7f;
- this->hurtBlinkTime = 0;
+ this->iframes = 0;
this->spriteSettings.b.draw = FALSE;
ent = CreateFx(this, 2, 0);
if (ent != NULL) {
@@ -64,12 +65,12 @@ void sub_08033564(Entity* this) {
void sub_0803362C(Entity* this) {
if (sub_0806F520() != 0) {
- gUnk_080CEB98[this->previousActionFlag](this);
+ gUnk_080CEB98[this->subAction](this);
}
}
void sub_08033650(Entity* this) {
- this->previousActionFlag = 2;
+ this->subAction = 2;
}
void sub_08033658(Entity* this) {
diff --git a/src/entity.c b/src/entity.c
index d574f05c..acc2795c 100644
--- a/src/entity.c
+++ b/src/entity.c
@@ -1,5 +1,7 @@
#include "global.h"
+#include "area.h"
#include "entity.h"
+#include "utils.h"
#include "script.h"
typedef struct OtherEntity {
@@ -23,14 +25,13 @@ Entity* sub_0805E744(void) {
return NULL;
}
-extern Entity* GetEmptyEntity();
-OtherEntity* GetEmptyManager();
+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;
@@ -48,21 +49,20 @@ typedef struct {
extern struct_03003DD0 gUnk_03003DD0;
extern u32 _call_via_r0(u32*);
extern u32 _EntUpdate;
-extern void DeleteEntityAny(Entity*);
+void DeleteEntityAny(Entity*);
void DeleteThisEntity(void) {
DeleteEntityAny(gUnk_03003DD0.field_0x8);
_call_via_r0((u32*)&_EntUpdate);
}
-void DeleteEntity(Entity*);
void DeleteManager(OtherEntity*);
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;
@@ -79,9 +79,8 @@ extern void sub_0805EC60();
extern void sub_08017744();
extern void sub_0805E92C();
extern void UnloadHitbox();
-extern void sub_0801DA0C();
extern void sub_0804AA1C();
-extern void UnlinkEntity(); // Unlink
+void UnlinkEntity();
void DeleteEntity(Entity* ent) {
if (ent->next) {
@@ -95,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;
@@ -160,7 +159,6 @@ OtherEntity* GetEmptyManager(void) {
return NULL;
}
-extern void MemClear32(void*, u32);
extern u8 gManagerCount;
void DeleteManager(OtherEntity* ent) {
@@ -169,12 +167,10 @@ void DeleteManager(OtherEntity* ent) {
sub_0805E92C(ent);
UnlinkEntity(ent);
- MemClear32(ent, sizeof(OtherEntity));
+ MemClear(ent, sizeof(OtherEntity));
gManagerCount--;
}
-#include "area.h"
-
void sub_0805E92C(u32 param_1) {
if (param_1 == gArea.unk2) {
gArea.unk2 = 0;
@@ -184,8 +180,7 @@ void sub_0805E92C(u32 param_1) {
}
extern Entity gUnk_020369F0;
-extern void MemCopy(const void* src, void* dest, size_t size); // dma copy
-extern void sub_0805E98C(void);
+void sub_0805E98C(void);
void sub_0805E958(void) {
MemCopy(&gEntityLists, &gUnk_020369F0, 0x48);
@@ -212,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;
}
@@ -237,32 +232,32 @@ void sub_0805E9F4(void) {
extern void sub_0805E374(Entity*);
-void AppendEntityToList(Entity* ent, int listIndex) {
+void AppendEntityToList(Entity* entity, u32 listIndex) {
LinkedList* list;
list = &gEntityLists[listIndex];
- ent->next = (Entity*)list;
- ent->prev = list->last;
- list->last->next = ent;
- list->last = ent;
- if (ent->kind != 9) {
- ent->spritePriority.b0 = 4;
+ entity->next = (Entity*)list;
+ entity->prev = list->last;
+ list->last->next = entity;
+ list->last = entity;
+ if (entity->kind != MANAGER) {
+ entity->spritePriority.b0 = 4;
gEntCount++;
} else {
gManagerCount++;
}
- sub_0805E374(ent);
+ sub_0805E374(entity);
}
-void PrependEntityToList(Entity* ent, int listIndex) {
+void PrependEntityToList(Entity* entity, u32 listIndex) {
LinkedList* list;
- UnlinkEntity(ent);
+ UnlinkEntity(entity);
list = &gEntityLists[listIndex];
- ent->prev = (Entity*)list;
- ent->next = list->first;
- list->first->prev = ent;
- list->first = ent;
+ entity->prev = (Entity*)list;
+ entity->next = list->first;
+ list->first->prev = entity;
+ list->first = entity;
}
void UnlinkEntity(Entity* ent) {
@@ -273,7 +268,7 @@ void UnlinkEntity(Entity* ent) {
ent->next->prev = ent->prev;
}
-bool32 DoesSimilarEntityExist(Entity* ent) {
+bool32 EntityHasDuplicateID(Entity* ent) {
Entity* i;
LinkedList* list;
@@ -289,31 +284,31 @@ bool32 DoesSimilarEntityExist(Entity* ent) {
return FALSE;
}
-Entity* FindEntityInListBySubtype(int type, int subtype, int 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(int type, int subtype, int listIndex, int form, int 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;
@@ -325,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]);
@@ -349,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/ezloNag.c b/src/ezloNag.c
index 7d537a44..0ad98db7 100644
--- a/src/ezloNag.c
+++ b/src/ezloNag.c
@@ -1,5 +1,5 @@
+#include "audio.h"
#include "global.h"
-#include "entity.h"
#include "functions.h"
#include "textbox.h"
#include "structures.h"
@@ -24,8 +24,6 @@ typedef struct {
u8 unk13;
} Element;
-///////////////////////////////////////////////////////////////
-
extern void sub_0805ECEC(u32, u32, u32, u32);
extern void sub_0801CAD0(Element*);
@@ -99,7 +97,7 @@ void sub_0801CF18(Element* arg0) {
arg0->unk4 = 2;
arg0->unk1 = 8;
gUnk_0200AF00.ezloNagFuncIndex = 3;
- SoundReq(0x173);
+ SoundReq(SFX_EZLO_UI);
}
}
diff --git a/src/sub_08050024.c b/src/fade.c
index f3868b4b..fe77e3d0 100644
--- a/src/sub_08050024.c
+++ b/src/fade.c
@@ -12,9 +12,6 @@ extern struct_03000000 gUnk_03000000;
extern u32 gUsedPalettes;
-extern void sub_0801E104();
-extern void DoFade(u32, u32);
-
void sub_08050024() {
sub_0801E104();
DoFade(5, 0x80 << 1);
diff --git a/src/fileScreen.c b/src/fileScreen.c
index 58fe323f..b55977ca 100644
--- a/src/fileScreen.c
+++ b/src/fileScreen.c
@@ -1,4 +1,11 @@
#include "fileScreen.h"
+#include "main.h"
+#include "player.h"
+#include "utils.h"
+#include "screen.h"
+#include "menu.h"
+#include "random.h"
+#include "textbox.h"
// copy, erase, start
#define NUM_FILE_OPERATIONS 3
@@ -105,7 +112,7 @@ void CreateDialogBox(u32 arg0, u32 arg1) {
void sub_08050384(void) {
sub_0801C4A0(0, 0);
- MemClear32(&gBG0Buffer, sizeof(gBG0Buffer));
+ MemClear(&gBG0Buffer, sizeof(gBG0Buffer));
gScreen.bg.bg0Updated = 1;
}
@@ -117,8 +124,8 @@ void sub_080503A8(u32 gfxGroup) {
void SetFileSelectState(FileSelectState mode) {
gUnk_02032EC0.state = mode;
- MemClear32(&gBG0Buffer, sizeof(gBG0Buffer));
- MemClear32(&gBG1Buffer, sizeof(gBG1Buffer));
+ MemClear(&gBG0Buffer, sizeof(gBG0Buffer));
+ MemClear(&gBG1Buffer, sizeof(gBG1Buffer));
}
void LoadOptionsFromSave(u32 idx) {
@@ -159,7 +166,7 @@ void HandleChooseFileScreen(void) {
gScreen.bg.bg1yOffset = 0;
gScreen.affine.bg2xOffset = 0;
gScreen.affine.bg2yOffset = 0;
- MemClear32(&gChooseFileState, sizeof(gChooseFileState));
+ MemClear(&gChooseFileState, sizeof(gChooseFileState));
}
HideButtonR();
@@ -182,19 +189,19 @@ void HandleChooseFileScreen(void) {
static void HandleFileScreenEnter(void) {
u32 i;
- sub_0801DA90(1);
+ DispReset(1);
sub_080A3210();
- MemClear32((void*)VRAM, 0x80); // clear palettes
+ MemClear((void*)VRAM, 0x80); // clear palettes
MessageInitialize();
EraseAllEntities();
sub_08080668();
sub_080ADD30();
sub_0801CFA8(0);
- MemClear32(&gUnk_0200AF00, sizeof(gUnk_0200AF00));
- MemClear32(&gUnk_02019EE0, sizeof(gUnk_02019EE0));
+ MemClear(&gUnk_0200AF00, sizeof(gUnk_0200AF00));
+ MemClear(&gUnk_02019EE0, sizeof(gUnk_02019EE0));
gUnk_02019EE0.unk3 = 7;
gUnk_02019EE0.unk6 = gUnk_02000000->gameLanguage > LANGUAGE_EN ? 3 : 0;
- MemClear32(&gUnk_02032EC0, sizeof(gUnk_02032EC0));
+ MemClear(&gUnk_02032EC0, sizeof(gUnk_02032EC0));
gUnk_02032EC0.lastState = 8;
SetFileSelectState(STATE_NONE);
InitDMA();
@@ -216,7 +223,7 @@ static void HandleFileScreenEnter(void) {
gScreen.controls.alphaBlend = BLDALPHA_BLEND(15, 10);
gUnk_02024490.unk0 = 1;
gMain.funcIndex = 1;
- SoundReq(0x7);
+ SoundReq(BGM_FILE_SELECT);
DoFade(4, 8);
}
@@ -284,7 +291,7 @@ void sub_0805070C(void) {
var0->unk8 = gUnk_02000D00;
for (i = 0; i < NUM_SAVE_SLOTS; i++) {
var0->unk6 = 0;
- MemClear32(var0->unk8, 0x200);
+ MemClear(var0->unk8, 0x200);
playerName = &gUnk_02019EE0.saves[i].playerName[0];
for (j = 0; j < FILENAME_LENGTH; j++) {
sub_0805F7DC(playerName[j], var0);
@@ -438,14 +445,14 @@ void sub_08050940(void) {
if (gUnk_02032EC0.lastState != mode) {
SetFileSelectState(mode);
- SoundReq(0x6A);
+ SoundReq(SFX_TEXTBOX_SELECT);
}
row_idx = (row_idx + num_rows) % num_rows;
if (gUnk_02019EE0.unk6 != row_idx) {
gUnk_02019EE0.unk6 = row_idx;
sub_08050AFC(row_idx);
- SoundReq(0x69);
+ SoundReq(SFX_TEXTBOX_CHOICE);
}
if (gUnk_02019EE0.saveStatus[gUnk_02019EE0.unk6] == SAVE_VALID) {
@@ -489,7 +496,7 @@ void sub_08050B3C(u16*);
void sub_08050AFC(u32 idx) {
SetActiveSave(idx);
- MemClear32(&gBG1Buffer, sizeof(gBG1Buffer));
+ MemClear(&gBG1Buffer, sizeof(gBG1Buffer));
if (gUnk_02019EE0.saveStatus[idx] == SAVE_VALID) {
sub_08050B3C(&gBG1Buffer.unk29C);
}
@@ -589,14 +596,14 @@ void sub_08050C54(void) {
case A_BUTTON:
case START_BUTTON:
if (column_idx == 0) {
- SoundReq(0x80080000);
+ SoundReq(SONG_VOL_FADE_OUT);
}
gMenu.transitionTimer = 0xf;
sub_080A7114(1);
- SoundReq(0x6a);
+ SoundReq(SFX_TEXTBOX_SELECT);
break;
case B_BUTTON:
- SoundReq(0x6c);
+ SoundReq(SFX_MENU_CANCEL);
SetFileSelectState(STATE_NONE);
break;
case DPAD_LEFT:
@@ -614,7 +621,7 @@ void sub_08050C54(void) {
}
if (gMenu.column_idx != column_idx) {
gMenu.column_idx = column_idx;
- SoundReq(0x69);
+ SoundReq(SFX_TEXTBOX_CHOICE);
}
}
@@ -645,7 +652,7 @@ void HandleFileLanguageSelect(void) {
}
void sub_08050DB8(void) {
- MemClear32(&gBG2Buffer, sizeof(gBG2Buffer));
+ MemClear(&gBG2Buffer, sizeof(gBG2Buffer));
sub_080503A8(0xc);
gMenu.field_0x4 = gUnk_02000000->gameLanguage;
sub_080A7114(1);
@@ -667,7 +674,7 @@ void sub_08050DE4(void) {
break;
case A_BUTTON:
case START_BUTTON:
- SoundReq(0x6a);
+ SoundReq(SFX_TEXTBOX_SELECT);
if (gMenu.field_0x4 != row_idx) {
sub_080A7114(2);
CreateDialogBox(8, 0);
@@ -678,7 +685,7 @@ void sub_08050DE4(void) {
case B_BUTTON:
row_idx = gMenu.field_0x4;
gUnk_02000000->gameLanguage = gMenu.field_0x4;
- SoundReq(0x6c);
+ SoundReq(SFX_MENU_CANCEL);
SetFileSelectState(STATE_NONE);
break;
}
@@ -692,7 +699,7 @@ void sub_08050DE4(void) {
}
if (gUnk_02000000->gameLanguage != row_idx) {
gUnk_02000000->gameLanguage = row_idx;
- SoundReq(0x69);
+ SoundReq(SFX_TEXTBOX_CHOICE);
}
}
@@ -765,13 +772,13 @@ NONMATCH("asm/non_matching/fileScreen/sub_08050EF4.inc", void sub_08050EF4(void)
case 3:
gUnk_02019EE0.saves[gUnk_02019EE0.unk6].messageSpeed = gUnk_02019EE0.unk4;
gUnk_02019EE0.saves[gUnk_02019EE0.unk6].brightnessPref = gUnk_02019EE0.unk5;
- SoundReq(0x6c);
+ SoundReq(SFX_MENU_CANCEL);
sub_080A7114(mode);
SetActiveSave(gUnk_02019EE0.unk6);
break;
case 2:
CreateDialogBox(8, 0);
- SoundReq(0x6a);
+ SoundReq(SFX_TEXTBOX_SELECT);
default:
case 1:
sub_080A7114(mode);
@@ -780,11 +787,11 @@ NONMATCH("asm/non_matching/fileScreen/sub_08050EF4.inc", void sub_08050EF4(void)
case 0:
if (gMenu.column_idx != column_idx) {
gMenu.column_idx = column_idx;
- SoundReq(0x69);
+ SoundReq(SFX_TEXTBOX_CHOICE);
} else if (option != *p_option) {
*p_option = option;
LoadOptionsFromSave(gUnk_02019EE0.unk6);
- SoundReq(0x69);
+ SoundReq(SFX_TEXTBOX_CHOICE);
}
break;
}
@@ -842,7 +849,7 @@ void sub_08051358(void) {
if (gMenu.focusCoords[0] != 0x0b || gMenu.focusCoords[1] != 0x5) {
gMenu.focusCoords[1] = 0x5;
gMenu.focusCoords[0] = 0xb;
- SoundReq(0x67);
+ SoundReq(SFX_TEXTBOX_NEXT);
}
}
@@ -919,7 +926,7 @@ void sub_08051480(u32 c) {
gMenu.unk13 = idx + 1;
gSave.playerName[idx] = c;
- sub_08051574(0x6b);
+ sub_08051574(SFX_6B);
}
u32 sub_080514BC(u32 a1) {
@@ -939,9 +946,8 @@ u32 sub_080514BC(u32 a1) {
}
idx = gMenu.unk13;
- if (idx == 0) {
+ if (idx == 0)
return 0;
- }
c = gSave.playerName[idx - 1];
if (c - 0xa4 < 0x29) {
@@ -955,11 +961,10 @@ u32 sub_080514BC(u32 a1) {
case 0xE:
return c;
case 0xF:
- if (c < 0xc3) {
+ if (c < 0xc3)
return 0;
- } else {
+ else
return c + 10;
- }
default:
return c;
}
@@ -980,13 +985,11 @@ u32 sub_080514BC(u32 a1) {
switch (a1) {
default:
case 0x0:
- return c - 0x33;
case 0xe:
return c - 0x33;
case 0xf:
- if (c > 0xf5) {
+ if (c > 0xf5)
return c - 0x29;
- }
}
}
@@ -1025,10 +1028,10 @@ void sub_080515D4(void) {
if (column_idx == 1) {
CreateDialogBox(4, 0);
sub_080A7114(2);
- SoundReq(0x6a);
+ SoundReq(SFX_TEXTBOX_SELECT);
} else {
SetFileSelectState(0);
- SoundReq(0x6c);
+ SoundReq(SFX_MENU_CANCEL);
}
break;
case DPAD_LEFT:
@@ -1041,7 +1044,7 @@ void sub_080515D4(void) {
if (gMenu.column_idx != column_idx) {
gMenu.column_idx = column_idx;
- SoundReq(0x69);
+ SoundReq(SFX_TEXTBOX_CHOICE);
}
}
@@ -1122,20 +1125,20 @@ void sub_080517EC(void) {
if (gUnk_02019EE0.unk7 < 3) {
CreateDialogBox(2, 0);
sub_080A7114(2);
- SoundReq(0x6a);
+ SoundReq(SFX_TEXTBOX_SELECT);
break;
}
// fallthrough
case B_BUTTON:
gUnk_02019EE0.unk7 = 4;
- SoundReq(0x6c);
+ SoundReq(SFX_MENU_CANCEL);
SetFileSelectState(0);
break;
}
temp = sub_080517B4(delta);
if (temp != gUnk_02019EE0.unk7) {
gUnk_02019EE0.unk7 = temp;
- SoundReq(0x69);
+ SoundReq(SFX_TEXTBOX_CHOICE);
}
}
@@ -1186,7 +1189,7 @@ void sub_0805194C(u32 save_idx) {
gUnk_02019EE0.saveStatus[save_idx] = 0;
save = &gUnk_02019EE0.saves[save_idx];
- MemClear32(save, sizeof(*save));
+ MemClear(save, sizeof(*save));
save->messageSpeed = 1;
save->brightnessPref = 1;
save->stats.health = 24;
diff --git a/src/flags.c b/src/flags.c
index 6f1d5d56..2129ae01 100644
--- a/src/flags.c
+++ b/src/flags.c
@@ -2,7 +2,6 @@
#include "room.h"
#include "flags.h"
#include "area.h"
-#include "room.h"
extern u32 ReadBit(u32*, u32);
extern u32 CheckBits(u32*, u32, u32);
diff --git a/src/game.c b/src/game.c
index 08d0198a..91940328 100644
--- a/src/game.c
+++ b/src/game.c
@@ -1,7 +1,6 @@
#include "global.h"
#include "screen.h"
#include "structures.h"
-#include "functions.h"
#include "screen.h"
#include "entity.h"
#include "player.h"
@@ -9,11 +8,12 @@
#include "main.h"
#include "flags.h"
#include "save.h"
+#include "utils.h"
#include "fileScreen.h"
+#include "functions.h"
extern u8 gArea;
extern Entity gPlayerEntity;
-extern u32 gUnk_03000B80;
extern u32 gUnk_03003FC0;
extern u16 gWalletSizes[4];
@@ -105,13 +105,13 @@ void sub_080521A0(void) {
}
gMenu.transitionTimer = 0x3c;
sub_080A7114(temp2);
- SoundReq(0x6a);
+ SoundReq(SFX_TEXTBOX_SELECT);
break;
}
if (gMenu.field_0x3 != temp) {
gMenu.field_0x3 = temp;
sub_08052418(0, temp);
- SoundReq(0x69);
+ SoundReq(SFX_TEXTBOX_CHOICE);
}
break;
}
@@ -170,7 +170,7 @@ void sub_080522F4(void) {
break;
case 0x1:
sub_080A7114(2);
- SoundReq(0x6a);
+ SoundReq(SFX_TEXTBOX_SELECT);
if (temp == 0) {
DoFade(5, 8);
} else {
@@ -181,7 +181,7 @@ void sub_080522F4(void) {
if (gMenu.field_0x3 != temp) {
gMenu.field_0x3 = temp;
sub_08052418(1, temp);
- SoundReq(0x69);
+ SoundReq(SFX_TEXTBOX_CHOICE);
}
}
break;
@@ -219,7 +219,7 @@ NONMATCH("asm/non_matching/game/sub_08052418.inc", void sub_08052418(int param_1
int i;
struct_080FCA8C temp;
- MemClear32(&gBG1Buffer, 0x800);
+ MemClear(&gBG1Buffer, 0x800);
gUnk_020227E8._0[0].WORD = 0xf;
gUnk_020227E8._0[2].WORD = 0xf;
gUnk_020227E8._0[4].WORD = 0xf;
@@ -238,12 +238,12 @@ void InitializePlayer(void) {
Entity* pl;
sub_080784C8();
- MemClear32((void*)&gUnk_03000B80, 0x70);
- MemClear32((void*)&gPlayerState, 0xb0);
+ MemClear((void*)&gUnk_03000B80, sizeof(gUnk_03000B80));
+ MemClear((void*)&gPlayerState, 0xb0);
MemFill32(0xffffffff, &gPlayerState.field_0x40, 0x40);
pl = &gPlayerEntity;
- MemClear32((void*)pl, 0x88);
+ MemClear((void*)pl, 0x88);
gRoomControls.cameraTarget = pl;
gPlayerState.playerAction = gUnk_080FCAC8[gScreenTransition.field_0xf];
if (!CheckGlobalFlag(0x14)) {
@@ -299,7 +299,7 @@ u32 sub_08052654() {
return (gArea >> 7) & 1;
}
-u32 CheckIsDungeon() {
+u32 CheckIsDungeon(void) {
return (gArea >> 2) & 1;
}
diff --git a/src/input.c b/src/input.c
deleted file mode 100644
index c187d598..00000000
--- a/src/input.c
+++ /dev/null
@@ -1,28 +0,0 @@
-#include "global.h"
-#include "entity.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 891544d3..e3ee0f9d 100644
--- a/src/intro.c
+++ b/src/intro.c
@@ -1,11 +1,12 @@
+#include "audio.h"
#include "global.h"
-#include "menu.h"
#include "main.h"
#include "entity.h"
#include "functions.h"
-#include "readKeyInput.h"
+#include "utils.h"
#include "screen.h"
#include "structures.h"
+#include "textbox.h"
typedef struct {
u8 filler0[0x4];
@@ -55,7 +56,7 @@ static const u16 sLightRaysAlphaBlends[] = {
static u32 AdvanceIntroSequence(u32 transition) {
gUnk_02032EC0.lastState = transition;
gMain.funcIndex = 2;
- MemClear32(&gIntroState, sizeof(gIntroState));
+ MemClear(&gIntroState, sizeof(gIntroState));
DoFade(7, 8);
}
@@ -64,7 +65,7 @@ void HandleIntroScreen(void) {
switch (gMain.funcIndex) {
case 0:
MessageInitialize();
- MemClear32(&gUnk_02032EC0, sizeof(gUnk_02032EC0));
+ MemClear(&gUnk_02032EC0, sizeof(gUnk_02032EC0));
AdvanceIntroSequence(0);
break;
case 1:
@@ -74,7 +75,7 @@ void HandleIntroScreen(void) {
if (gFadeControl.active) {
return;
}
- sub_0801DA90(1);
+ DispReset(1);
gMain.funcIndex = 1;
break;
}
@@ -87,7 +88,7 @@ static void HandleNintendoCapcomLogos(void) {
advance = GetAdvanceState();
if (gIntroState.state == 0) {
- sub_0801DA90(1);
+ DispReset(1);
gIntroState.state = 1;
gIntroState.timer = 120;
LoadGfxGroup(16);
@@ -158,7 +159,7 @@ static void HandleTitlescreen(void) {
UpdateSwordBgAffineData();
}
sub_080A3210();
- SoundReq(3); // fanfare
+ SoundReq(BGM_TITLE_SCREEN);
DoFade(6, 8);
break;
case 1:
@@ -182,12 +183,12 @@ static void HandleTitlescreen(void) {
advance = GetAdvanceState();
if (advance != ADVANCE_NONE) {
if (advance == ADVANCE_KEY_PRESSED) {
- SoundReq(0x6a);
+ SoundReq(SFX_TEXTBOX_SELECT);
} else {
advance = ADVANCE_NONE;
}
AdvanceIntroSequence(advance);
- SoundReq(0x80080000);
+ SoundReq(SONG_VOL_FADE_OUT);
}
UpdatePressStartIcon();
if ((gIntroState.timer & 0x20) == 0) {
@@ -241,7 +242,7 @@ static void HandleJapaneseTitlescreenAnimationIntro(void) {
gScreen.bg.bg1Control = 0xc09;
gFadeControl.field_0x4 = 0x40;
DoFade(6, 0x10);
- SoundReq(0xf8);
+ SoundReq(SFX_F8);
}
}
break;
@@ -271,7 +272,7 @@ static void HandleTitlescreenAnimationIntro(void) {
if (!gFadeControl.active) {
gIntroState.subState = 1;
gScreen.lcd.displayControl |= DISPCNT_BG2_ON;
- SoundReq(0xF6);
+ SoundReq(SFX_EVAPORATE);
}
break;
case 1:
@@ -290,7 +291,7 @@ static void HandleTitlescreenAnimationIntro(void) {
gIntroState.subState++;
CreateObject(0xBD, 0, 0);
DoFade(6, 16);
- SoundReq(0xF8);
+ SoundReq(SFX_F8);
}
break;
default:
diff --git a/src/item.c b/src/item.c
index ad7a419b..fa23bd31 100644
--- a/src/item.c
+++ b/src/item.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "entity.h"
#include "item.h"
+#include "functions.h"
// TODO - How does this relate to PlayerItemFunctions? Is this just a lookup table?
void (*const gItemFunctions[])(ItemBehavior*, u32) = {
@@ -11,7 +12,6 @@ void (*const gItemFunctions[])(ItemBehavior*, u32) = {
};
extern void sub_08077E78(ItemBehavior*, u32);
-extern void SoundReq(u32);
extern void sub_08078F60(void);
extern void sub_08077D38(ItemBehavior*, u32);
extern void sub_0805E544(void);
@@ -28,7 +28,6 @@ extern void (*const gUnk_0811BDE0[])(ItemBehavior* beh, u32);
extern void (*const gUnk_0811BDE8[])(ItemBehavior* beh, u32);
extern void (*const gUnk_0811BDF4[])(ItemBehavior* beh, u32);
-extern u8 gUnk_02034490;
#if 0
void Ocarina(ItemBehavior* beh, u32 inputFlags) {
gOcarinaStates[beh->stateID](beh, inputFlags);
@@ -50,7 +49,7 @@ void OcarinaUse(ItemBehavior *beh, u32 arg1)
gPlayerEntity.field_0x7a = 2;
gPlayerState.flags.all |= 0x10000000;
gPlayerState.field_0x27[0] = 0xff;
- gUnk_02034490 = 1;
+ gUnk_02034490[0] = 1;
bVar1 = (8 >> arg1);
gPlayerState.field_0xa |= bVar1;
gPlayerState.keepFacing |= bVar1;
diff --git a/src/item11.c b/src/item11.c
index 984d02e0..f2ad2f16 100644
--- a/src/item11.c
+++ b/src/item11.c
@@ -1,11 +1,10 @@
#include "global.h"
#include "entity.h"
#include "player.h"
+#include "functions.h"
-extern void DeleteThisEntity();
extern void sub_08078CD0(Entity*);
extern void sub_08018FA0(Entity*);
-extern u32 sub_0801766C(Entity*);
extern void sub_08018F6C(Entity*);
extern void (*const gUnk_080B3DD0[])(Entity*);
@@ -16,7 +15,7 @@ extern Hitbox* gUnk_080B3DE8[];
void Item11(Entity* this) {
if (this->currentHealth) {
- this->hurtBlinkTime = 0;
+ this->iframes = 0;
gUnk_080B3DD0[this->action](this);
} else {
DeleteThisEntity();
@@ -82,7 +81,7 @@ void sub_08018DE8(Entity* this) {
sub_08018F6C(this);
break;
case 5:
- this->attachedEntity->previousActionFlag = 4;
+ this->attachedEntity->subAction = 4;
this->flags = this->flags | 0x80;
this->action = 2;
this->spritePriority.b0 = 2;
diff --git a/src/item14.c b/src/item14.c
index d9537b8b..5055a986 100644
--- a/src/item14.c
+++ b/src/item14.c
@@ -1,4 +1,5 @@
#include "entity.h"
+#include "audio.h"
#include "functions.h"
#include "player.h"
#include "room.h"
@@ -30,7 +31,7 @@ void sub_0805FBE8(Entity* this) {
sub_0801766C(this);
sub_0806F69C(this);
sub_0805FC74(this);
- SoundReq(0x13f);
+ SoundReq(SFX_ITEM_SWORD_BEAM);
}
void sub_0805FC74(Entity* this) {
@@ -39,7 +40,7 @@ void sub_0805FC74(Entity* this) {
if (--*(int*)&this->field_0x6c != -1) {
GetNextFrame(this);
sub_0806F69C(this);
- ++this->actionDelay;
+ this->actionDelay++;
if (this->type2 == 0) {
sub_0800451C(this);
}
diff --git a/src/loadRoom.c b/src/loadRoom.c
index 04b8e02c..0bd68f75 100644
--- a/src/loadRoom.c
+++ b/src/loadRoom.c
@@ -1,10 +1,9 @@
#include "global.h"
#include "room.h"
#include "flags.h"
+#include "functions.h"
-void LoadRoomEntityList(EntityData* dat);
extern void sub_0804B058(EntityData* dat);
-extern void LoadRoomTileEntities(EntityData* dat);
extern void sub_0801AC98();
extern u32 sub_08049D1C(u32);
extern Entity* LoadRoomEntity(EntityData*);
@@ -13,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;
@@ -34,7 +51,7 @@ void sub_0804B058(EntityData* dat) {
if ((dat != NULL) && *(u8*)dat != 0xff) {
uVar2 = 0;
do {
- if ((uVar2 < 0x20) && ((dat->type) == 3)) {
+ if ((uVar2 < 0x20) && ((dat->kind) == 3)) {
if (sub_08049D1C(uVar2) != 0) {
ent = LoadRoomEntity(dat);
if ((ent != NULL) && (ent->kind == 3)) {
diff --git a/src/main.c b/src/main.c
index 71c1347b..c17ba447 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1,11 +1,14 @@
+#include "audio.h"
#include "global.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);
@@ -20,7 +23,9 @@ static void (*const sScreenHandlers[])(void) = {
[SCREEN_CREDITS] = HandleCreditsScreen, [SCREEN_DEBUG_TEXT] = HandleDebugTextScreen,
};
-void MainLoop(void) {
+static void sub_080560B8(void);
+
+void AgbMain(void) {
int var0;
sub_08055F70();
@@ -36,7 +41,7 @@ void MainLoop(void) {
MessageInitialize();
sub_080ADD30();
gRand = 0x1234567;
- MemClear32(&gMain, sizeof(gMain));
+ MemClear(&gMain, sizeof(gMain));
InitScreen(SCREEN_INTRO);
while (1) {
ReadKeyInput();
@@ -92,7 +97,7 @@ static void sub_08055F70(void) {
*(vu16*)BG_PLTT = 0x7FFF;
REG_WAITCNT = WAITCNT_PREFETCH_ENABLE | WAITCNT_WS0_S_1 | WAITCNT_WS0_N_3;
size = 0x3FFD0;
- MemClear32(gUnk_02000030, size);
+ MemClear(gUnk_02000030, size);
size = (u32)gUnk_080B2CD8 - (u32)sub_080B197C;
if (size != 0) {
MemCopy(sub_080B197C, gUnk_030056F0, size);
@@ -103,7 +108,7 @@ static void sub_08055F70(void) {
MemCopy(gUnk_080B2CD8_3, gUnk_02038560, size);
}
- sub_0801DA90(0);
+ DispReset(0);
sub_08016B34();
}
@@ -146,21 +151,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;
@@ -182,10 +187,10 @@ 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) {
- MemClear32((u8*)&gUnk_02000010.signature, 0x20);
+ if (b) {
+ MemClear((u8*)&gUnk_02000010.signature, 0x20);
gUnk_02000010.signature = SIGNATURE;
}
}
@@ -201,7 +206,7 @@ u32 sub_08056134(void) {
}
void InitDMA() {
- SoundReq(0x80040000);
+ SoundReq(SND_VSYNC_OFF);
gScreen._6d = gScreen._6c;
gScreen._6c = 0;
@@ -214,7 +219,7 @@ void InitDMA() {
}
void sub_08056208() {
- SoundReq(0x80060000);
+ SoundReq(SND_VSYNC_ON);
gScreen._6c = gScreen._6d;
gScreen._6d = 0;
}
@@ -250,7 +255,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/manager1.c b/src/manager/manager1.c
index 2b06a48f..45e1b000 100644
--- a/src/manager/manager1.c
+++ b/src/manager/manager1.c
@@ -1,12 +1,11 @@
#include "global.h"
#include "entity.h"
#include "screen.h"
+#include "functions.h"
-extern void LoadGfxGroup(u32);
extern void sub_08056250(void);
extern void sub_080570B8(Entity*);
void sub_080570F8(void);
-extern void sub_08052D74(void*, void*, void*);
extern void (*const gUnk_08107C5C[])(Entity*);
extern void (*const gUnk_08107C48[])(Entity*);
diff --git a/src/manager/manager15.c b/src/manager/manager15.c
index 87135c56..295f14c7 100644
--- a/src/manager/manager15.c
+++ b/src/manager/manager15.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "audio.h"
#include "flags.h"
#include "screen.h"
#include "manager.h"
@@ -78,15 +79,15 @@ extern Entity gUnk_080E4C08;
void sub_0805A370(Manager15* this) {
if (this->manager.unk_0d) {
- LoadRoomEntityList(&gUnk_080E4C08);
+ LoadRoomEntityList((EntityData*)&gUnk_080E4C08);
this->manager.action = 3;
- SoundReq(0x80100000);
+ SoundReq(SONG_RESET_UNK);
}
}
void sub_0805A394(Manager15* this) {
Entity* ent;
- if ((ent = FindEntityInListBySubtype(0x3, 0x13, 0x4))) {
+ if ((ent = FindEntityByID(0x3, 0x13, 0x4))) {
if (ent->type != 4) {
return;
}
@@ -251,10 +252,10 @@ void sub_0805A664(Manager15* this) {
sub_0805A68C(this);
}
-extern u32 sub_0806FBFC(u32, u32, u32, u32);
+extern u32 CheckPlayerProximity(u32, u32, u32, u32);
void sub_0805A68C(Manager15* this) {
- if (sub_0806FBFC(this->unk_38 - 0x18, this->unk_3a - 0x18, 0x30, 0x30)) {
+ if (CheckPlayerProximity(this->unk_38 - 0x18, this->unk_3a - 0x18, 0x30, 0x30)) {
if (this->unk_2c <= 0x1007) {
gScreen.controls.alphaBlend = ++this->unk_2c;
this->unk_22 = 0;
@@ -285,7 +286,7 @@ void sub_0805A6E8(Manager15* this) {
}
u32 sub_0805A73C(Manager15* this) {
- return sub_0806FBFC(this->unk_38 - 0x6, this->unk_3a - 0x6, 0xC, 0xC);
+ return CheckPlayerProximity(this->unk_38 - 0x6, this->unk_3a - 0x6, 0xC, 0xC);
}
void sub_0805A758(Manager15* this) {
@@ -295,7 +296,6 @@ void sub_0805A758(Manager15* this) {
}
extern void sub_0805E4E0(Manager*, u32);
-extern void sub_08077B20(void);
void sub_0805A76C(Manager15* this) {
if ((gPlayerEntity.currentHealth != 0) && (gPlayerEntity.height.HALF.HI == 0) && (!gPlayerState.field_0x2c)) {
@@ -364,7 +364,6 @@ void sub_0805A804(Manager15* this) {
}
void sub_0805AAC8(Manager15*);
-extern void sub_08052D74(void*, void*, void*);
void sub_0805A89C(Manager15* this) {
sub_0805E3A0(this, 6);
diff --git a/src/manager/manager1A.c b/src/manager/manager1A.c
index 19a1dbca..379ac5b9 100644
--- a/src/manager/manager1A.c
+++ b/src/manager/manager1A.c
@@ -4,6 +4,7 @@
#include "entity.h"
#include "room.h"
#include "screen.h"
+#include "utils.h"
#include "functions.h"
typedef struct {
@@ -30,7 +31,7 @@ void sub_0805B030(Manager1A* this) {
}
extern void sub_08052D74(void*, void*, void*);
-extern u32 sub_0806FBFC(u32, u32, u32, u32);
+extern u32 CheckPlayerProximity(u32, u32, u32, u32);
typedef struct struct_08108764 {
u8 unk_00;
@@ -65,13 +66,12 @@ u32 sub_0805B1CC(Manager1A*);
void sub_0805B210(Manager1A*);
void sub_0805B2B0(Manager1A*);
void sub_0805B328(Manager1A*);
-void sub_0805BC4C(void);
void sub_0805B048(Manager1A* this) {
struct_08108764* tmp;
Entity* obj;
sub_0805E3A0(&this->manager, 6);
- MemClear32(&this->unk_20, 0x20);
+ MemClear(&this->unk_20, 0x20);
this->manager.action = 1;
this->unk_3f = gRoomControls.roomID;
tmp = &gUnk_08108764[this->manager.unk_0a];
@@ -138,7 +138,7 @@ void sub_0805B168(Manager1A* this) {
u32 sub_0805B1CC(Manager1A* this) {
u32 re = 0;
- if (sub_0806FBFC(this->unk_20, this->unk_22, this->unk_24, this->unk_26)) {
+ if (CheckPlayerProximity(this->unk_20, this->unk_22, this->unk_24, this->unk_26)) {
if ((gPlayerState.flags.all & 0x4) && (gPlayerState.flags.all & 0x1)) {
gPlayerState.flags.all |= 0x8000;
} else if (gPlayerState.flags.all & 0x8000) {
@@ -224,5 +224,5 @@ void sub_0805B390(u32 unk1) {
tmp->type = 0x9;
tmp->subtype = 0x1A;
tmp->unk_0a = unk1;
- AppendEntityToList(tmp, 6);
+ AppendEntityToList((Entity*)tmp, 6);
}
diff --git a/src/manager/manager1E.c b/src/manager/manager1E.c
index 363c3113..fad34ef4 100644
--- a/src/manager/manager1E.c
+++ b/src/manager/manager1E.c
@@ -1,7 +1,6 @@
#include "global.h"
#include "manager.h"
#include "flags.h"
-#include "player.h"
#include "functions.h"
typedef struct {
@@ -17,7 +16,6 @@ typedef struct {
enum Manager1E_State { Init, ObserveRegion };
-void Manager1E_Handler(Manager1E*);
void Manager1E_Init(Manager1E*);
void Manager1E_ObserveRegion(Manager1E*);
diff --git a/src/manager/manager2.c b/src/manager/manager2.c
index 56c81310..b6e0eef7 100644
--- a/src/manager/manager2.c
+++ b/src/manager/manager2.c
@@ -1,9 +1,9 @@
#include "global.h"
#include "entity.h"
#include "screen.h"
+#include "functions.h"
extern void sub_080576A0();
-extern void sub_08052D74();
extern void sub_0805754C(Entity*);
void Manager2(Entity* this) {
diff --git a/src/manager/manager20.c b/src/manager/manager20.c
index b8a20f5f..f7ca8a0b 100644
--- a/src/manager/manager20.c
+++ b/src/manager/manager20.c
@@ -3,6 +3,7 @@
#include "flags.h"
#include "entity.h"
#include "room.h"
+#include "functions.h"
typedef struct {
Manager manager;
@@ -17,8 +18,6 @@ typedef struct {
u16 unk_3e;
} Manager20;
-extern void DeleteManager(Manager20*);
-
void sub_0805B7A0(Manager20* this) {
Entity* tmp = CreateObject(this->manager.unk_0e, this->manager.unk_0a, this->manager.unk_0b);
if (!tmp)
@@ -35,5 +34,5 @@ void sub_0805B7A0(Manager20* this) {
}
tmp->x.HALF.HI += gRoomControls.roomOriginX;
tmp->y.HALF.HI += gRoomControls.roomOriginY;
- DeleteManager(this);
+ DeleteManager((Manager*)this);
}
diff --git a/src/manager/manager27.c b/src/manager/manager27.c
index b2e0e15a..6540c1ad 100644
--- a/src/manager/manager27.c
+++ b/src/manager/manager27.c
@@ -1,10 +1,10 @@
#include "global.h"
+#include "audio.h"
#include "entity.h"
#include "flags.h"
#include "functions.h"
extern u32 sub_0805C920(Entity*);
-extern void LoadPaletteGroup(u32);
void sub_0805C874(Entity*);
void sub_0805C894(Entity*);
@@ -42,7 +42,7 @@ void sub_0805C894(Entity* this) {
if (sub_0805C920(this)) {
this->action = 2;
this->actionDelay = 1;
- SoundReq(0x11a);
+ SoundReq(SFX_EM_ARMOS_ON);
}
}
@@ -58,7 +58,7 @@ void sub_0805C8B4(Entity* this) {
}
LoadPaletteGroup(gUnk_08108D20[this->field_0xf]);
if (this->field_0xf == 0) {
- SoundReq(0x11a);
+ SoundReq(SFX_EM_ARMOS_ON);
}
}
if (sub_0805C920(this) == 0) {
diff --git a/src/manager/manager28.c b/src/manager/manager28.c
index af59e09e..1e2eb829 100644
--- a/src/manager/manager28.c
+++ b/src/manager/manager28.c
@@ -11,7 +11,6 @@ typedef struct {
} d;
} Manager28;
-void Manager28_Entry(Manager28*);
void Manager28_Init(Manager28*);
void Manager28_Main(Manager28*);
u32 Manager28_FindMatchingEntities(Manager28*);
@@ -47,7 +46,7 @@ void Manager28_Init(Manager28* this) {
/* tmp3->enemies[tmp4] = this->enemies[tmp4]; */
/* } */
tmp3->d = this->d;
- AppendEntityToList(tmp3, 6);
+ AppendEntityToList((Entity*)tmp3, 6);
}
}
DeleteManager(&this->manager);
@@ -86,10 +85,10 @@ u32 Manager28_FindMatchingEntities(Manager28* this) {
EntityData* tmp = GetCurrentRoomProperty(this->manager.unk_0b);
if (!tmp)
return 0;
- for (; *((u8*)tmp) != 0xFF && !(tmp->type == 9 && tmp->subtype == 0x28); tmp++) {
+ for (; *((u8*)tmp) != 0xFF && !(tmp->kind == 9 && tmp->id == 0x28); tmp++) {
Entity* tmp2;
u32 i;
- if (tmp->type != 3)
+ if (tmp->kind != 3)
continue;
tmp2 = Manager28_FindMatchingEntity(tmp);
if (!tmp2)
@@ -115,7 +114,7 @@ Entity* Manager28_FindMatchingEntity(EntityData* unk1) {
y = unk1->yPos + gRoomControls.roomOriginY;
tmp = &gUnk_03003D90;
for (i = tmp->first; (u32)i != (u32)tmp; i = i->next) {
- if (x == i->x.HALF.HI && y == i->y.HALF.HI && unk1->subtype == i->id && 3 == i->kind && unk1->form == i->type) {
+ if (x == i->x.HALF.HI && y == i->y.HALF.HI && unk1->id == i->id && 3 == i->kind && unk1->type == i->type) {
return i;
}
}
diff --git a/src/manager/manager3.c b/src/manager/manager3.c
index 5234f149..acd83825 100644
--- a/src/manager/manager3.c
+++ b/src/manager/manager3.c
@@ -4,8 +4,11 @@
#include "area.h"
#include "room.h"
#include "player.h"
+#include "random.h"
#include "functions.h"
+// Facilitates the usage of minish portals.
+
typedef struct {
Manager manager;
u32 unk_20;
@@ -21,7 +24,7 @@ typedef struct {
} Manager3;
extern s8 gUnk_08107C6C[];
-extern u32 sub_0806FBFC(u32, u32, u32, u32);
+extern u32 CheckPlayerProximity(u32, u32, u32, u32);
extern u32 sub_08057810(void);
extern u32 sub_080002C0(u16, u16, u8);
extern void sub_080577AC(u32, u32, u32);
@@ -34,14 +37,14 @@ void sub_080576C0(Manager3* this) {
this->unk_24 = this->unk_3a + gRoomControls.roomOriginY - 0x20;
return;
}
- if (sub_0806FBFC(this->unk_20, this->unk_24, 0x40, 0x40)) {
- gArea.field_0x12 = this->unk_20 + 0x20;
- gArea.field_0x14 = this->unk_24 + 0x20 + gUnk_08107C6C[this->manager.unk_0a];
- gArea.field_0x16 = this->unk_34;
- gArea.field_0x17 = this->manager.unk_0a;
+ if (CheckPlayerProximity(this->unk_20, this->unk_24, 0x40, 0x40)) {
+ gArea.curPortalX = this->unk_20 + 0x20;
+ gArea.curPortalY = this->unk_24 + 0x20 + gUnk_08107C6C[this->manager.unk_0a];
+ gArea.curPortalExitDirection = this->unk_34;
+ gArea.curPortalType = this->manager.unk_0a;
if (!CheckGlobalFlag(EZERO_1ST)) {
gArea.field_0x18 = 1;
- gArea.field_0x17 = 5;
+ gArea.curPortalType = 5;
} else {
if ((gPlayerState.flags.all & 0x20) && gPlayerState.jumpStatus == 0) {
gArea.field_0x18 = 2;
@@ -90,7 +93,7 @@ void sub_080577AC(u32 baseX, u32 baseY, u32 layer) {
}
u32 sub_08057810(void) {
- if ((gPlayerState.flags.all & 0x80) && !gPlayerState.field_0xaa && (gArea.field_0x17 != 0x6) &&
+ if ((gPlayerState.flags.all & 0x80) && !gPlayerState.field_0xaa && (gArea.curPortalType != 0x6) &&
(gPlayerState.heldObject == 0)) {
switch (gPlayerState.field_0xa8) {
case 0:
diff --git a/src/manager/manager30.c b/src/manager/manager30.c
index 8cfde746..94f3be33 100644
--- a/src/manager/manager30.c
+++ b/src/manager/manager30.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "audio.h"
#include "manager.h"
#include "flags.h"
#include "functions.h"
@@ -19,8 +20,6 @@ typedef struct Manager30 {
u16 flag_reset;
} Manager30;
-extern void sub_0807B7D8(u32, u32, u32);
-
enum { INIT, IN_PROGRESS, FAILED, SUCCEEDED };
/*
@@ -48,13 +47,13 @@ void Manager30_Main(Manager30* this) {
case 0x317:
// stepped on a red tile again
this->manager.action = FAILED;
- SoundReq(0x6d);
+ SoundReq(SFX_MENU_ERROR);
break;
case 0x318:
// stepped on a blue tile
// turn the tile into a red tile
sub_0807B7D8(0x317, this->player_current_tile, this->manager.unk_0b);
- SoundReq(0x6b);
+ SoundReq(SFX_6B);
// decrease the number of remaining tiles and check if we're done
if (--this->manager.unk_0e == 0) {
this->manager.action = SUCCEEDED;
@@ -89,7 +88,7 @@ void Manager30_Main(Manager30* this) {
SetFlag(this->flag_succeeded);
}
} else {
- SoundReq(0x72);
+ SoundReq(SFX_SECRET);
}
}
}
diff --git a/src/manager/manager39.c b/src/manager/manager39.c
index 31cbda7e..cdac7c61 100644
--- a/src/manager/manager39.c
+++ b/src/manager/manager39.c
@@ -3,6 +3,8 @@
#include "screen.h"
#include "area.h"
#include "textbox.h"
+#include "utils.h"
+#include "game.h"
#include "functions.h"
typedef struct {
@@ -25,9 +27,7 @@ extern const u8 gUnk_08108E30[0x18];
extern const u8 gUnk_08108E48[0x18];
extern const u8 gUnk_08108E60[];
-extern void MemCopy(const void* src, void* dest, u32 size);
extern void sub_0805F46C(void*, const void*);
-extern u32 CheckIsDungeon(void);
extern void sub_0805E5B4(void);
void sub_0805E140(Manager39*);
@@ -68,7 +68,7 @@ void sub_0805E18C(Manager39* this) {
}
void sub_0805E1D8(Manager39* this) {
- MemClear32(&gUnk_02034DF0, 0x80);
+ MemClear(&gUnk_02034DF0, 0x80);
gScreen.bg.bg0Updated = 1;
DeleteThisEntity();
}
@@ -81,7 +81,7 @@ void sub_0805E1F8(u32 unk0, u32 unk1) {
u8 unk_06[3];
} PACKED tmp;
const u8* tmp2;
- MemClear32(&gUnk_02034DF0, 0x80);
+ MemClear(&gUnk_02034DF0, 0x80);
MemCopy(gUnk_08108E60, &tmp, sizeof(tmp));
tmp.unk_04 = unk0 >> 8;
tmp.unk_05 = unk0;
diff --git a/src/manager/manager4.c b/src/manager/manager4.c
index 2ebdf7d3..3d396682 100644
--- a/src/manager/manager4.c
+++ b/src/manager/manager4.c
@@ -3,6 +3,7 @@
#include "room.h"
#include "manager.h"
#include "structures.h"
+#include "functions.h"
extern void (*gUnk_08107C70[])(Manager*);
@@ -12,8 +13,6 @@ void sub_08057854(Manager* this) {
extern void sub_080805F8(void);
-extern void SetTile(u32, u32, u32);
-
extern DiggingCaveEntrance* sub_08057AA8(DiggingCaveEntrance*, int);
void sub_0805786C(Manager* this) {
@@ -101,8 +100,6 @@ u32 sub_0805795C(Manager* this, DiggingCaveEntrance* entr) {
}
#endif
-extern void sub_0805E5A8(void);
-extern void DeleteManager(Manager*);
extern void sub_08080930();
void sub_08057A18(Manager* this, DiggingCaveEntrance* entr) {
diff --git a/src/manager/manager5.c b/src/manager/manager5.c
index ec7ee400..fbb4da2e 100644
--- a/src/manager/manager5.c
+++ b/src/manager/manager5.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "audio.h"
#include "manager.h"
#include "flags.h"
#include "functions.h"
@@ -34,8 +35,6 @@ void sub_08057AD0(Manager5* this) {
void sub_08057CA4(Manager5*, u32, u32);
-extern void DeleteManager(Manager*);
-
void sub_08057AE8(Manager5* this) {
u32 tmp;
tmp = (this->manager.unk_0b & 0x3) << 1;
@@ -71,14 +70,14 @@ void sub_08057BA4(Manager5* this) {
sub_08057CA4(this, this->unk_28, this->unk_2a);
sub_0807B7D8(this->unk_30, this->unk_38 | (this->unk_3a << 6), this->unk_3c);
this->manager.unk_0f++;
- SoundReq(0x71);
+ SoundReq(SFX_HEART_GET);
} else {
if (!this->manager.unk_0f)
return;
sub_0807BA8C(this->unk_38 | (this->unk_3a << 6), this->unk_3c);
sub_08057CA4(this, this->unk_2c, this->unk_2e);
this->manager.unk_0f--;
- SoundReq(0x71);
+ SoundReq(SFX_HEART_GET);
}
}
@@ -95,10 +94,10 @@ void sub_08057C28(Manager5* this) {
sub_08057CA4(this, this->unk_28, this->unk_2a);
sub_0807B7D8(this->unk_30, this->unk_38 | (this->unk_3a << 6), this->unk_3c);
this->manager.unk_0f++;
- SoundReq(0x71);
+ SoundReq(SFX_HEART_GET);
} else {
if (this->unk_30 != 0x323) {
- SoundReq(0x72);
+ SoundReq(SFX_SECRET);
}
DeleteManager(&this->manager);
}
diff --git a/src/manager/manager6.c b/src/manager/manager6.c
index aa5cb48a..ff32b405 100644
--- a/src/manager/manager6.c
+++ b/src/manager/manager6.c
@@ -1,12 +1,9 @@
#include "global.h"
-#include "entity.h"
#include "player.h"
#include "manager.h"
+#include "functions.h"
-extern void* GetCurrentRoomProperty(u8);
-extern u32 CheckPlayerInRegion(u16, u16, u8, u8);
extern void DoExitTransition(void*);
-extern void DeleteManager(Entity*);
void sub_08057CB4(Manager6* this) {
u32 tmp;
@@ -15,7 +12,7 @@ void sub_08057CB4(Manager6* this) {
this->manager.action = 1;
this->warpList = GetCurrentRoomProperty(this->manager.unk_0a);
if (!this->warpList) {
- DeleteManager((Entity*)this);
+ DeleteManager(&this->manager);
return;
}
}
diff --git a/src/manager/manager7.c b/src/manager/manager7.c
index 3a2cbb1a..089dab1b 100644
--- a/src/manager/manager7.c
+++ b/src/manager/manager7.c
@@ -12,12 +12,9 @@ typedef struct {
void sub_08057E30();
u32 sub_08057E40();
-void sub_08057E64();
void sub_08057E7C(u32);
-extern void sub_08052D74();
extern u32 sub_08056300(const u16*);
-extern void sub_0805E3A0();
extern const u8 gGlobalGfxAndPalettes[];
diff --git a/src/manager/manager8.c b/src/manager/manager8.c
index c6cd5075..aa80b627 100644
--- a/src/manager/manager8.c
+++ b/src/manager/manager8.c
@@ -17,8 +17,6 @@ void sub_08057EFC();
void sub_08058034(void);
void sub_08058084(u16*, u16*);
-extern void sub_08052D74(void*, void*, void*);
-
extern u16 gMapDataTopSpecial[];
void sub_08057ED0(Manager8* this) {
diff --git a/src/manager/manager9.c b/src/manager/manager9.c
index 70d117fb..aebc9a96 100644
--- a/src/manager/manager9.c
+++ b/src/manager/manager9.c
@@ -15,7 +15,6 @@ void sub_08058210(Manager9*);
u32 sub_08058244(int);
void sub_080582A0(u32, u32*, u8*);
void sub_080582F8(u8*, u8*);
-void sub_08058324();
extern u32 gUnk_02006F00[];
extern u8 gBG3Buffer[];
diff --git a/src/manager/managerA.c b/src/manager/managerA.c
index 3033dd21..4b4a2ce4 100644
--- a/src/manager/managerA.c
+++ b/src/manager/managerA.c
@@ -4,6 +4,7 @@
#include "manager.h"
#include "flags.h"
#include "area.h"
+#include "functions.h"
void sub_08058398(ManagerA*);
void sub_080583EC(ManagerA*);
@@ -17,8 +18,6 @@ void sub_08058380(ManagerA* this) {
gUnk_081081F4[this->manager.action](this);
}
-extern void sub_0805E3A0(Manager*, u32);
-
void sub_08058398(ManagerA* this) {
if (CheckFlags(this->unk_3c) != 0) {
@@ -36,8 +35,6 @@ void sub_08058398(ManagerA* this) {
}
}
-void sub_08058408(ManagerA*);
-
void sub_080583EC(ManagerA* this) {
if (CheckFlags(this->unk_3e) != 0) {
this->manager.action = 2;
@@ -45,12 +42,8 @@ void sub_080583EC(ManagerA* this) {
}
}
-extern u32 CheckPlayerInRegion(u32, u32, u32, u32);
extern void sub_0805E544(void);
-extern void sub_08078A90(u32);
-extern void sub_08078AA8(u32, u32);
extern void sub_080186C0(u16);
-extern void sub_08078B48(void);
u32 sub_0805848C(ManagerA*);
void sub_080585DC(ManagerA*);
diff --git a/src/manager/managerB.c b/src/manager/managerB.c
index e6e43a12..ca298178 100644
--- a/src/manager/managerB.c
+++ b/src/manager/managerB.c
@@ -4,6 +4,7 @@
#include "entity.h"
#include "room.h"
#include "area.h"
+#include "utils.h"
#include "functions.h"
/*
@@ -128,8 +129,8 @@ ManagerBHelper* CreateHelper(Manager* this) {
extra->manager.unk_0a = 1;
extra->manager.parent = this;
this->unk_0e++;
- MemClear32(&extra->enemies, 0x20);
- AppendEntityToList(extra, 8);
+ MemClear(&extra->enemies, 0x20);
+ AppendEntityToList((Entity*)extra, 8);
}
return extra;
}
diff --git a/src/manager/managerC.c b/src/manager/managerC.c
index 72529c2f..83b35412 100644
--- a/src/manager/managerC.c
+++ b/src/manager/managerC.c
@@ -1,11 +1,11 @@
#include "global.h"
+#include "audio.h"
#include "manager.h"
#include "flags.h"
#include "structures.h"
#include "room.h"
-#include "area.h"
#include "screen.h"
-#include "trig.h"
+#include "coord.h"
#include "functions.h"
#include "save.h"
@@ -40,12 +40,9 @@ void sub_08058A04(ManagerC*);
void sub_080588F8(ManagerC*);
u32 sub_08058B08(ManagerC*, u32, u32, const struct_08108228*);
void sub_08058B5C(ManagerC*, u32);
-void sub_08058D34(void);
extern void sub_0805622C(struct BgAffineDstData*, u32, u32);
-extern void sub_08052D74(void*, void*, void*);
extern void sub_080044AE(Entity*, u32, u32);
-extern void MemCopy(const void* src, void* dest, u32 size);
extern u8 gUnk_03003DE4[0xC];
@@ -88,7 +85,7 @@ void sub_080588CC(ManagerC* this) {
void nullsub_108(ManagerC* this) {
}
-#define ABS_DIFF_GT(a, b, c) (signed)a - b >= 0 ? a - b > c : b - a > c
+#define ABS_DIFF_GT(a, b, c) ((signed)(a) - (b) >= 0 ? (a) - (b) > (c) : (b) - (a) > (c))
void sub_080588F8(ManagerC* this) {
if (this->manager.unk_0f == 0) {
@@ -100,7 +97,7 @@ void sub_080588F8(ManagerC* this) {
case 0xf0:
this->unk_28 = this->unk_24.HALF.HI;
this->manager.unk_0f = 0x2D;
- SoundReq(0x8c);
+ SoundReq(SFX_BARREL_ROLL_STOP);
}
}
} else {
@@ -123,7 +120,7 @@ void sub_080588F8(ManagerC* this) {
}
if (ABS_DIFF_GT(this->unk_2c, this->unk_24.WORD, 0x100000)) {
this->unk_2c = this->unk_24.WORD;
- SoundReq(0x8b);
+ SoundReq(SFX_BARREL_ROLL);
}
}
}
@@ -213,7 +210,7 @@ void sub_08058B5C(ManagerC* this, u32 unk1) {
gScreenTransition.playerStartPos.HALF.x = gUnk_081082E8[unk1 * 3];
gScreenTransition.playerStartPos.HALF.y = gUnk_081082E8[unk1 * 3 + 1];
gSave.unk7 = gUnk_081082E8[unk1 * 3 + 2];
- SoundReq(0x121);
+ SoundReq(SFX_STAIRS);
}
void sub_08058BC8(ManagerC* this) {
diff --git a/src/manager/managerE.c b/src/manager/managerE.c
index 0f5e9328..44bfb5a7 100644
--- a/src/manager/managerE.c
+++ b/src/manager/managerE.c
@@ -3,13 +3,7 @@
#include "manager.h"
#include "flags.h"
#include "room.h"
-
-extern void LoadRoomEntityList(Entity*);
-extern void DeleteThisEntity(void);
-extern void DeleteManager(Manager*);
-extern void sub_08078A90(u32);
-extern void sub_08078B48(void);
-extern void SoundReq(u32);
+#include "functions.h"
void sub_08058E60(ManagerE* this) {
if (!this->manager.action) {
diff --git a/src/npc.c b/src/npc.c
index d7f38b6a..4a94399b 100644
--- a/src/npc.c
+++ b/src/npc.c
@@ -1,5 +1,4 @@
#include "global.h"
-#include "functions.h"
#include "entity.h"
#include "npc.h"
diff --git a/src/npc/anju.c b/src/npc/anju.c
index d77c5356..e0fb08c8 100644
--- a/src/npc/anju.c
+++ b/src/npc/anju.c
@@ -1,18 +1,9 @@
#include "global.h"
#include "entity.h"
#include "player.h"
-#include "room.h"
-#include "flags.h"
-#include "sprite.h"
-#include "textbox.h"
#include "npc.h"
#include "script.h"
-
-extern void sub_0805E3A0(Entity*, u32);
-extern u32 sub_0806F5A4(u32);
-extern void sub_0806F118(Entity*);
-extern u32 sub_0801E99C(void);
-extern void sub_08078784(Entity*, u32);
+#include "functions.h"
void Anju(Entity* this) {
switch (this->action) {
@@ -41,7 +32,7 @@ void Anju(Entity* this) {
}
void sub_0806C354(Entity* this) {
- this->field_0x68.HALF.LO = sub_0801E99C();
+ this->field_0x68.HALF.LO = sub_0801E99C(this);
sub_08078784(this, this->field_0x68.HALF.LO);
}
diff --git a/src/npc/beedle.c b/src/npc/beedle.c
index 3e09302f..b4d25858 100644
--- a/src/npc/beedle.c
+++ b/src/npc/beedle.c
@@ -159,6 +159,6 @@ void sub_080634EC(Entity* this) {
void sub_08063504(Entity* this, ScriptExecutionContext* context) {
u32 uVar1;
- uVar1 = sub_080544DC(gUnk_0810C88C[this->type2]);
+ uVar1 = GetBottleContaining(gUnk_0810C88C[this->type2]);
context->condition = BOOLCAST(uVar1);
}
diff --git a/src/npc/bigGoron.c b/src/npc/bigGoron.c
index d4896ce9..3123b036 100644
--- a/src/npc/bigGoron.c
+++ b/src/npc/bigGoron.c
@@ -2,16 +2,13 @@
#include "entity.h"
#include "player.h"
#include "structures.h"
-#include "functions.h"
#include "script.h"
+#include "random.h"
+#include "functions.h"
extern void (*gUnk_081140D4[])(Entity*);
extern u16 gUnk_081140CC[];
-extern void sub_0806D0B0(Entity*);
-extern void SoundReq(u32);
-extern void sub_0806D02C(Entity*);
-extern Entity* FindEntityInListByForm(u32, u32, u32, u32, u32);
void BigGoron(Entity* this) {
gUnk_081140D4[this->type](this);
@@ -20,7 +17,7 @@ void BigGoron(Entity* this) {
void sub_0806CF30(Entity* this) {
if (this->action == 0) {
this->action = 1;
- this->previousActionFlag = 1;
+ this->subAction = 1;
this->field_0x68.HWORD = this->x.HALF.HI;
sub_0805E3A0(this, 2);
sub_0806D0B0(this);
@@ -30,7 +27,7 @@ void sub_0806CF30(Entity* this) {
HandleEntity0x82Actions(this);
}
- switch (this->previousActionFlag) {
+ switch (this->subAction) {
case 0:
case 1:
if (gScreenTransition.frameCount % 4 == 0) {
@@ -59,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/bladeBrothers.c b/src/npc/bladeBrothers.c
index b08f2e48..49a86dfc 100644
--- a/src/npc/bladeBrothers.c
+++ b/src/npc/bladeBrothers.c
@@ -1,12 +1,13 @@
#include "global.h"
#include "entity.h"
-#include "functions.h"
#include "flags.h"
#include "player.h"
#include "room.h"
#include "textbox.h"
#include "save.h"
#include "script.h"
+#include "npc.h"
+#include "functions.h"
extern void (*gUnk_081115C0[])(Entity*);
extern void (*gUnk_081115D0[])(Entity*);
@@ -132,7 +133,7 @@ void FUN_08068b2c(Entity* this) {
}
void sub_08068B70(Entity* this) {
- if (UpdateFuseInteraction()) {
+ if (UpdateFuseInteraction(this)) {
this->action = 1;
}
}
diff --git a/src/npc/carlov.c b/src/npc/carlov.c
index a091f54f..92d632ed 100644
--- a/src/npc/carlov.c
+++ b/src/npc/carlov.c
@@ -1,15 +1,9 @@
#include "global.h"
#include "entity.h"
-#include "player.h"
#include "room.h"
-#include "flags.h"
-#include "sprite.h"
-#include "textbox.h"
#include "npc.h"
-#include "structures.h"
#include "script.h"
-
-extern void EnqueueSFX(u32);
+#include "functions.h"
void Carlov(Entity* this) {
if (this->action == 0) {
diff --git a/src/npc/carpenter.c b/src/npc/carpenter.c
index 1d8209b1..21f8db14 100644
--- a/src/npc/carpenter.c
+++ b/src/npc/carpenter.c
@@ -2,18 +2,11 @@
#include "entity.h"
#include "sprite.h"
#include "player.h"
+#include "npc.h"
+#include "functions.h"
#include "script.h"
-extern void DeleteThisEntity();
-extern u32 LoadExtraSpriteData(Entity*, SpriteLoadData*);
extern SpriteLoadData gUnk_08110CA8[];
-extern void sub_0805E3A0(Entity*, u32);
-extern u32 GetFacingDirection(Entity*, Entity*);
-extern void sub_0806F118(Entity*);
-extern u32 UpdateFuseInteraction(Entity*);
-extern void SetSpriteSubEntryOffsetData2(Entity*, u32, u32);
-extern void sub_0807000C(Entity*);
-extern u32 sub_0806F5A4();
void Carpenter(Entity* this) {
if (*(u32*)&this->cutsceneBeh == 0) {
diff --git a/src/npc/cow.c b/src/npc/cow.c
index d5e7988d..411b139f 100644
--- a/src/npc/cow.c
+++ b/src/npc/cow.c
@@ -1,22 +1,17 @@
#include "global.h"
+#include "audio.h"
#include "entity.h"
#include "player.h"
+#include "random.h"
+#include "npc.h"
#include "functions.h"
-extern void sub_0806920C(Entity*);
-extern u32 sub_0805ACC0(Entity*);
-extern u32 sub_0801E99C(Entity*);
-extern void sub_0806924C(Entity*);
-extern void sub_08078778(Entity*);
-extern void sub_080787A8(Entity*, u32);
-extern void sub_0806F118(Entity*);
-extern void sub_080791D0();
+void sub_0806920C(Entity* ent);
+void sub_0806924C(Entity* ent);
+
extern void (*gUnk_08111914[])(Entity*);
extern void (*gUnk_08111928[])(Entity*);
extern Dialog gUnk_08111938[];
-extern void SoundReq(u32);
-extern u32 UpdateFuseInteraction(Entity*);
-extern PlayerState gPlayerState;
void Cow(Entity* ent) {
gUnk_08111914[ent->action](ent);
@@ -56,8 +51,8 @@ void sub_08068FC0(Entity* ent) {
void sub_08069018(Entity* ent) {
s32 var0;
- if (ent->previousActionFlag == 0) {
- ent->previousActionFlag++;
+ if (ent->subAction == 0) {
+ ent->subAction++;
ent->field_0xf = (Random() & 0x3F) + 0x3C;
InitAnimationForceUpdate(ent, ent->animationState);
}
@@ -70,7 +65,7 @@ void sub_08069018(Entity* ent) {
} else {
ent->action = 3;
}
- ent->previousActionFlag = var0;
+ ent->subAction = var0;
}
sub_0806924C(ent);
@@ -79,10 +74,10 @@ void sub_08069018(Entity* ent) {
void sub_08069068(Entity* ent) {
s32 var0;
- if (ent->previousActionFlag == 0) {
+ if (ent->subAction == 0) {
u32 anim;
- ent->previousActionFlag++;
+ ent->subAction++;
anim = (Random() & 2) - 1;
anim = (anim + ent->animationState) & 3;
@@ -126,7 +121,7 @@ void sub_08069068(Entity* ent) {
var0 = --ent->field_0xf;
if (var0 == 0) {
ent->action = 3;
- ent->previousActionFlag = var0;
+ ent->subAction = var0;
}
sub_0806924C(ent);
@@ -134,7 +129,7 @@ void sub_08069068(Entity* ent) {
void sub_08069124(Entity* ent) {
UpdateAnimationSingleFrame(ent);
- gUnk_08111928[ent->previousActionFlag](ent);
+ gUnk_08111928[ent->subAction](ent);
sub_0806924C(ent);
}
@@ -142,13 +137,13 @@ void sub_08069148(Entity* ent) {
u32 var0 = Random() & 3;
var0 += 3;
ent->field_0xf = var0;
- ent->previousActionFlag = 1;
+ ent->subAction = 1;
InitAnimationForceUpdate(ent, ent->animationState + 8);
}
void sub_08069168(Entity* ent) {
if ((s8)ent->frames.all < 0) {
- ent->previousActionFlag = 2;
+ ent->subAction = 2;
InitAnimationForceUpdate(ent, ent->animationState + 12);
}
}
@@ -160,14 +155,14 @@ void sub_08069188(Entity* ent) {
if (((s8)--ent->field_0xf) != 0)
return;
- ent->previousActionFlag = 3;
+ ent->subAction = 3;
InitAnimationForceUpdate(ent, ent->animationState + 16);
}
void sub_080691BC(Entity* ent) {
if ((s8)ent->frames.all < 0) {
ent->action = 1;
- ent->previousActionFlag = 0;
+ ent->subAction = 0;
InitAnimationForceUpdate(ent, ent->animationState + 4);
}
}
@@ -175,7 +170,7 @@ void sub_080691BC(Entity* ent) {
void sub_080691E0(Entity* ent) {
if (UpdateFuseInteraction(ent) != 0) {
ent->action = 1;
- ent->previousActionFlag = 0;
+ ent->subAction = 0;
}
}
@@ -216,7 +211,7 @@ void sub_0806924C(Entity* ent) {
Cow_ShowDialogue(ent);
sub_080791D0();
}
- SoundReq(212);
+ SoundReq(SFX_VO_COW);
ent->interactType = 0;
}
}
diff --git a/src/npc/dampe.c b/src/npc/dampe.c
index d55840f7..6293bcd7 100644
--- a/src/npc/dampe.c
+++ b/src/npc/dampe.c
@@ -3,17 +3,11 @@
#include "player.h"
#include "room.h"
#include "flags.h"
-#include "sprite.h"
#include "textbox.h"
#include "npc.h"
+#include "functions.h"
#include "script.h"
-extern void sub_0805E3A0(Entity*, u32);
-extern u32 sub_0806F5A4(u32);
-extern void sub_0806F118(Entity*);
-extern u32 sub_0801E99C(void);
-extern void sub_08078784(Entity*, u32);
-
extern u16 gUnk_08113344[];
extern u16 gUnk_0811334A[];
@@ -44,7 +38,7 @@ void Dampe(Entity* this) {
}
void sub_0806BE3C(Entity* this) {
- this->field_0x68.HALF.LO = sub_0801E99C();
+ this->field_0x68.HALF.LO = sub_0801E99C(this);
sub_08078784(this, this->field_0x68.HALF.LO);
}
diff --git a/src/npc/emma.c b/src/npc/emma.c
index 3867cb87..f7a8577a 100644
--- a/src/npc/emma.c
+++ b/src/npc/emma.c
@@ -1,12 +1,12 @@
#include "global.h"
#include "entity.h"
#include "script.h"
+#include "functions.h"
extern u32 gUnk_0813AD10;
extern u32 gUnk_0813AD24;
extern u32 gUnk_0813AD38;
-extern void sub_0805E3A0(Entity*, u32);
extern void DoExitTransition(u32*);
void Emma(Entity* this) {
diff --git a/src/npc/epona.c b/src/npc/epona.c
index a79ccd48..1846d4f9 100644
--- a/src/npc/epona.c
+++ b/src/npc/epona.c
@@ -1,7 +1,9 @@
#include "global.h"
+#include "audio.h"
#include "entity.h"
#include "textbox.h"
#include "player.h"
+#include "npc.h"
#include "functions.h"
void sub_08065A64(Entity* this);
@@ -43,7 +45,7 @@ void sub_08065A10(Entity* this) {
}
void sub_08065A34(Entity* this) {
- if (UpdateFuseInteraction() != 0) {
+ if (UpdateFuseInteraction(this) != 0) {
this->action = 1;
InitAnimationForceUpdate(this, this->animationState / 2);
}
@@ -83,7 +85,7 @@ void sub_08065AA4(Entity* this) {
sub_08065A50(this);
sub_080791D0();
}
- SoundReq(0xD3);
+ SoundReq(SFX_VO_EPONA);
this->interactType = 0;
}
}
diff --git a/src/npc/ezloCap.c b/src/npc/ezloCap.c
index d16c99f1..a7b5593e 100644
--- a/src/npc/ezloCap.c
+++ b/src/npc/ezloCap.c
@@ -325,7 +325,6 @@ extern ScreenTransitionData gUnk_0813ACAC;
extern ScreenTransitionData gUnk_0813ACC0;
extern ScreenTransitionData gUnk_0813ACD4;
extern ScreenTransitionData gUnk_0813ACE8;
-extern ScreenTransitionData gUnk_0813AC5C;
extern ScreenTransitionData gUnk_0813ACFC;
// Array of pointers to ScreenTransitionData
const ScreenTransitionData* const gUnk_081141A4[] = { &gUnk_0813AB6C, &gUnk_0813ABBC, &gUnk_0813ABE4, &gUnk_0813ABF8,
diff --git a/src/npc/festari.c b/src/npc/festari.c
index 53093ebf..e7bb336d 100644
--- a/src/npc/festari.c
+++ b/src/npc/festari.c
@@ -5,9 +5,6 @@
#include "player.h"
#include "script.h"
-extern u32 sub_0801E99C(Entity*);
-extern void sub_08078784(Entity*, u32);
-extern void sub_0806F118(Entity*);
extern void sub_0805FF2C(Entity*, void*);
extern void (*const gUnk_08109BBC[])(Entity*);
diff --git a/src/npc/forestMinish.c b/src/npc/forestMinish.c
index 7bcd03f3..e42500e8 100644
--- a/src/npc/forestMinish.c
+++ b/src/npc/forestMinish.c
@@ -4,22 +4,16 @@
#include "flags.h"
#include "textbox.h"
#include "player.h"
-#include "structures.h"
-#include "functions.h"
#include "save.h"
#include "script.h"
+#include "random.h"
+#include "createObject.h"
+#include "structures.h"
+#include "functions.h"
-extern void sub_0806F118(Entity*);
extern void sub_080600F0(Entity*);
extern s32 sub_0806EDD8(Entity*, u32, u32);
-extern u32 sub_0806F5B0(u32);
-extern u32 sub_0801E99C(Entity*);
-extern void sub_08078784(Entity*, u32);
-extern void sub_0807000C(Entity*);
extern void sub_08060158(Entity*);
-extern u32 CheckKinstoneFused(u32);
-extern Entity* FindEntityInListBySubtype(u32, u32, u32);
-extern void DeleteEntity(Entity*);
extern void ModBombs(s32);
extern SpriteLoadData gUnk_0810A348;
@@ -231,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/gentari.c b/src/npc/gentari.c
index c480de5a..cc086d8a 100644
--- a/src/npc/gentari.c
+++ b/src/npc/gentari.c
@@ -3,12 +3,7 @@
#include "npc.h"
#include "player.h"
#include "script.h"
-
-extern void sub_0805E3A0(Entity*, u32);
-extern u32 sub_0801E99C(Entity*);
-extern void sub_08078784(Entity*, u32);
-extern u32 sub_0806F5A4(u32);
-extern void sub_0806F118(Entity*);
+#include "functions.h"
void Gentari(Entity* this) {
switch (this->action) {
diff --git a/src/npc/goronMerchant.c b/src/npc/goronMerchant.c
index 9fd402c5..5329bd15 100644
--- a/src/npc/goronMerchant.c
+++ b/src/npc/goronMerchant.c
@@ -84,12 +84,12 @@ 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;
mgr->subtype = 0x31;
- AppendEntityToList(mgr, 8);
+ AppendEntityToList((Entity*)mgr, 8);
}
}
}
diff --git a/src/npc/guard.c b/src/npc/guard.c
index 081f9c10..d94827c4 100644
--- a/src/npc/guard.c
+++ b/src/npc/guard.c
@@ -5,6 +5,8 @@
#include "textbox.h"
#include "room.h"
#include "script.h"
+#include "structures.h"
+#include "functions.h"
typedef struct {
u32 unk;
@@ -12,21 +14,14 @@ typedef struct {
} struct_03003DB8;
typedef struct {
- u8 filler[8];
- u8 unk;
-} ScreenTransition;
+ u32 unk;
+ u32 unk2;
+} struct_08064050;
extern void sub_08063D24(Entity*);
-extern void sub_0806ED78(Entity*);
-extern u32 GetFacingDirection(Entity*, Entity*);
-extern u32 sub_0806F5A4(u32);
extern void sub_0806EE20(Entity*);
extern void sub_08064428(Entity*);
-extern u32 sub_0805ACC0(Entity*);
-extern void sub_0807000C(Entity*);
extern void sub_0806EE04(Entity*, void*, u32);
-extern Entity* sub_080A7EE0(int);
-extern void sub_08078778(Entity*);
void sub_08063DC8(Entity*);
void sub_08063F20(Entity*);
@@ -213,7 +208,7 @@ void sub_08064030(Entity* arg0, Entity* arg1) {
}
void sub_08064044(void) {
- gScreenTransition.unk = 1;
+ gScreenTransition.transitioningOut = 1;
}
void sub_08064050(Entity* this, ScriptExecutionContext* context) {
diff --git a/src/npc/mailbox.c b/src/npc/mailbox.c
index 6ccdd0a8..bab9a8ba 100644
--- a/src/npc/mailbox.c
+++ b/src/npc/mailbox.c
@@ -1,8 +1,8 @@
#include "global.h"
#include "entity.h"
#include "textbox.h"
+#include "functions.h"
-extern void sub_0806ED78(Entity*);
extern void sub_08063280();
extern void (*gMailboxBehaviors[4])(Entity*);
diff --git a/src/npc/malon.c b/src/npc/malon.c
index ca6d6eab..64febefe 100644
--- a/src/npc/malon.c
+++ b/src/npc/malon.c
@@ -1,9 +1,8 @@
#include "global.h"
-#include "functions.h"
#include "entity.h"
#include "script.h"
-
-extern Entity gPlayerEntity;
+#include "npc.h"
+#include "functions.h"
extern void (*gUnk_0810FF5C[])(Entity* this);
extern void (*gUnk_0810FF64[])(Entity* this);
@@ -58,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/mayorHagen.c b/src/npc/mayorHagen.c
index 38db736c..ae5f1e0e 100644
--- a/src/npc/mayorHagen.c
+++ b/src/npc/mayorHagen.c
@@ -1,25 +1,16 @@
#include "global.h"
#include "entity.h"
#include "player.h"
-#include "room.h"
#include "flags.h"
-#include "sprite.h"
-#include "textbox.h"
#include "npc.h"
#include "structures.h"
#include "functions.h"
#include "save.h"
#include "script.h"
-extern u32 sub_0806F5A4(u32);
-extern void sub_0806F118(Entity*);
-extern void sub_08078784(Entity*, u32);
extern void sub_08078850();
extern u32 gUnk_08113F44;
extern Dialog gUnk_08113F48[];
-extern u32 GetInventoryValue(u32);
-extern u32 CheckLocalFlag(u32);
-extern void SetLocalFlag();
void MayorHagen(Entity* this) {
u32 v;
diff --git a/src/npc/melari.c b/src/npc/melari.c
index 86679811..a62b837b 100644
--- a/src/npc/melari.c
+++ b/src/npc/melari.c
@@ -2,20 +2,12 @@
#include "entity.h"
#include "npc.h"
#include "textbox.h"
-#include "functions.h"
#include "script.h"
+#include "random.h"
+#include "functions.h"
extern void sub_08068780(Entity*);
-extern void sub_08078778(Entity*);
-extern void sub_0806F118(Entity*);
-extern u32 sub_080040A8(Entity*);
-extern void EnqueueSFX(u32);
-extern u32 sub_0801E99C(Entity*);
-extern void sub_08078784(Entity*, u32);
-extern void sub_0807000C(Entity*);
extern s32 sub_0806EDD8(Entity*, u32, u32);
-extern void sub_080A7C18(u32, u32, u32);
-extern void sub_0807CAA0(u32, u32);
extern void (*const gUnk_08111530[])(Entity*);
diff --git a/src/npc/milkCart.c b/src/npc/milkCart.c
index b423dca7..29481848 100644
--- a/src/npc/milkCart.c
+++ b/src/npc/milkCart.c
@@ -1,7 +1,6 @@
#include "global.h"
#include "entity.h"
-
-extern void sub_0806ED78();
+#include "functions.h"
extern void (*gMilkCartBehaviors[2])(Entity*);
diff --git a/src/npc/moblinLady.c b/src/npc/moblinLady.c
index c1ddbe6a..d63d4d87 100644
--- a/src/npc/moblinLady.c
+++ b/src/npc/moblinLady.c
@@ -1,10 +1,5 @@
#include "global.h"
#include "entity.h"
-#include "player.h"
-#include "room.h"
-#include "flags.h"
-#include "sprite.h"
-#include "textbox.h"
#include "npc.h"
#include "script.h"
diff --git a/src/npc/mutoh.c b/src/npc/mutoh.c
index 2eaeb91b..5391ac8d 100644
--- a/src/npc/mutoh.c
+++ b/src/npc/mutoh.c
@@ -9,14 +9,6 @@
#include "save.h"
#include "script.h"
-extern u32 GetFacingDirection(Entity*, Entity*);
-extern u32 sub_0806F5A4(u32);
-extern void sub_0806F118(Entity*);
-extern u32 UpdateFuseInteraction(Entity*);
-extern void sub_0807000C(Entity*);
-extern u32 sub_0801E99C(Entity*);
-extern void sub_08078784(Entity*, u32);
-
extern SpriteLoadData gUnk_08110C00;
extern u16 gUnk_08110C0C[];
extern Dialog gUnk_08110C10[];
diff --git a/src/npc/npc9.c b/src/npc/npc9.c
index 47cc501b..23a0bd3e 100644
--- a/src/npc/npc9.c
+++ b/src/npc/npc9.c
@@ -1,11 +1,7 @@
#include "global.h"
#include "entity.h"
#include "textbox.h"
-
-extern void sub_08078778(Entity*);
-extern void sub_0805E47C(Entity*);
-extern void sub_0806ED78(Entity*);
-extern void sub_0805E584(Entity*);
+#include "functions.h"
extern void (*const gUnk_0810C290[])(Entity*);
diff --git a/src/npc/percy.c b/src/npc/percy.c
index a2a8fcd8..3c5c8a01 100644
--- a/src/npc/percy.c
+++ b/src/npc/percy.c
@@ -10,7 +10,6 @@ extern void sub_0806B41C(Entity*);
extern void sub_0806B3CC(Entity*);
extern u32 sub_08002632(Entity*);
-extern void sub_0801DFB4(Entity*, u32, u32, u32);
extern u16* gUnk_08001A7C[40];
extern u16 gUnk_08112E54[4];
diff --git a/src/npc/postman.c b/src/npc/postman.c
index 0accf073..34694306 100644
--- a/src/npc/postman.c
+++ b/src/npc/postman.c
@@ -10,22 +10,11 @@
#include "script.h"
extern void sub_08060528(Entity*);
-extern void* GetCurrentRoomProperty(u32);
extern void sub_0806EE04(Entity*, void*, u32);
extern void sub_080604DC(Entity*);
-extern s32 sub_0806ED9C(Entity*, u32, u32);
extern void sub_0806EE20(Entity*);
-extern u32 sub_080040A8(Entity*);
-extern u32 sub_0801E99C(Entity*);
-extern void sub_0806F118(Entity*);
-extern u32 sub_0806F5A4(u32);
-extern u32 GetFacingDirection(Entity*, Entity*);
extern void sub_080606D8(Entity*);
-extern void sub_080788E0(Entity*);
-extern void EnqueueSFX(u32);
extern void sub_080606C0(Entity*);
-extern void sub_0800451C(Entity*);
-extern void sub_08078784(Entity*, u32);
typedef struct {
s16 x;
diff --git a/src/npc/rem.c b/src/npc/rem.c
index bb1d78ff..a6059865 100644
--- a/src/npc/rem.c
+++ b/src/npc/rem.c
@@ -3,7 +3,6 @@
#include "entity.h"
#include "script.h"
-extern void SoundReq(u32);
extern void sub_0806A8C8(Entity*);
extern void (*gUnk_08112260[])(Entity*);
diff --git a/src/npc/simon.c b/src/npc/simon.c
index aad57a9f..20cb40e5 100644
--- a/src/npc/simon.c
+++ b/src/npc/simon.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "audio.h"
#include "entity.h"
#include "functions.h"
#include "room.h"
@@ -11,9 +12,6 @@ typedef struct {
} struct_0806C2A0;
extern void DoExitTransition(void*);
-extern void SetTileType(u32, u32, u32);
-extern void DoExitTransition(void*);
-extern void DoFade(u32, u32);
extern void gUnk_0813AD60;
extern void gUnk_0813AD74;
@@ -35,7 +33,7 @@ void sub_0806C224(void) {
void Simon_CreateChest(Entity* this) {
CreateObjectWithParent(this, 0xf, 0x43, 0);
SetTileType(0x73, COORD_TO_TILE(this), this->collisionLayer);
- SoundReq(0x73);
+ SoundReq(SFX_SECRET_BIG);
}
void sub_0806C280(void) {
diff --git a/src/npc/smith.c b/src/npc/smith.c
index d365b222..6b55c1f7 100644
--- a/src/npc/smith.c
+++ b/src/npc/smith.c
@@ -1,21 +1,13 @@
#include "global.h"
#include "entity.h"
#include "textbox.h"
-#include "functions.h"
#include "save.h"
#include "script.h"
+#include "random.h"
+#include "npc.h"
+#include "functions.h"
-extern u32 GetFacingDirection(Entity*, Entity*);
-extern u32 sub_0806F5A4(u32);
-extern void sub_0806F118(Entity*);
-extern Entity* CreateFx(Entity*, u32, u32);
-extern void SoundReq(u32);
-extern void sub_0807000C(Entity*);
-extern u32 sub_0801E99C(Entity*);
-extern u32 UpdateFuseInteraction(Entity*);
-extern u32 GetAnimationState(Entity*);
extern void sub_08078850(Entity*, u32, u32, u32*);
-extern void sub_08078784(Entity*, u32);
extern void (*const gUnk_08110360[])(Entity*);
extern void (*const gUnk_0811036C[])(Entity*);
diff --git a/src/npc/stamp.c b/src/npc/stamp.c
index 52b100d6..51b209b3 100644
--- a/src/npc/stamp.c
+++ b/src/npc/stamp.c
@@ -4,11 +4,7 @@
#include "functions.h"
#include "script.h"
-extern void sub_08078778(Entity*);
-extern void sub_0805E47C(Entity*);
-extern void sub_0805E584();
extern void sub_08062CA4();
-extern u32 CheckKinstoneFused();
extern void (*gStampBehaviors1[4])(Entity*);
extern void (*gStampBehaviors2[2])(Entity*);
diff --git a/src/npc/syrup.c b/src/npc/syrup.c
index ff12fa4a..f3a1b5dc 100644
--- a/src/npc/syrup.c
+++ b/src/npc/syrup.c
@@ -2,17 +2,14 @@
#include "entity.h"
#include "npc.h"
#include "script.h"
-
-extern void sub_0806ED78(Entity*);
-extern void sub_0805E3A0(Entity*, u32);
+#include "functions.h"
extern void (*gUnk_081121D4[])(Entity*);
extern SpriteLoadData gUnk_081121C4;
extern SpriteLoadData gUnk_081121B4;
-extern u32 gScreenTransition;
+
extern void sub_0806A26C(Entity*);
-extern void sub_080042BA(Entity*, u32);
void Syrup(Entity* this) {
gUnk_081121D4[this->action](this);
@@ -37,7 +34,7 @@ void sub_0806A1F8(Entity* this) {
void sub_0806A234(Entity* this) {
sub_0807DD94(this, 0);
if ((this->field_0x82.HWORD & 4) != 0) {
- if ((gScreenTransition & 7) == 0) {
+ if ((gScreenTransition.frameCount & 7) == 0) {
sub_0806A26C(this);
}
sub_080042BA(this, 2);
diff --git a/src/npc/talon.c b/src/npc/talon.c
index c3a680a2..f9c7d66f 100644
--- a/src/npc/talon.c
+++ b/src/npc/talon.c
@@ -1,9 +1,11 @@
#include "global.h"
#include "entity.h"
#include "textbox.h"
-#include "functions.h"
#include "player.h"
#include "script.h"
+#include "npc.h"
+#include "random.h"
+#include "functions.h"
extern void (*gUnk_0810FEC4[])(Entity* this);
extern void (*gUnk_0810FEBC[])(Entity* this);
@@ -83,7 +85,7 @@ void sub_08065648(Entity* this) {
}
void sub_08065680(Entity* this) {
- if (UpdateFuseInteraction() != 0) {
+ if (UpdateFuseInteraction(this) != 0) {
this->action = this->field_0x68.HALF.HI;
InitAnimationForceUpdate(this, this->field_0x6a.HALF.LO);
}
diff --git a/src/npc/teachers.c b/src/npc/teachers.c
index d04d2ab6..bf7e6983 100644
--- a/src/npc/teachers.c
+++ b/src/npc/teachers.c
@@ -1,17 +1,12 @@
#include "global.h"
#include "entity.h"
#include "player.h"
-#include "functions.h"
#include "save.h"
#include "script.h"
+#include "npc.h"
+#include "functions.h"
extern SpriteLoadData gUnk_08113910[];
-extern u32 GetFacingDirection(Entity*, Entity*);
-extern u32 sub_0806F5A4(u32);
-extern void sub_0806F118(Entity*);
-extern void sub_08078784(Entity*, u32);
-extern u32 UpdateFuseInteraction(Entity*);
-extern void sub_0807000C(Entity*);
extern Dialog gUnk_08113930[];
diff --git a/src/npc/townMinish.c b/src/npc/townMinish.c
index e50ef501..df2d8fe3 100644
--- a/src/npc/townMinish.c
+++ b/src/npc/townMinish.c
@@ -7,17 +7,12 @@
#include "save.h"
#include "script.h"
-extern void InitializeAnimation(Entity*, u32);
-extern u32 LoadExtraSpriteData(Entity*, SpriteLoadData*);
-
extern u32 sub_080002C0();
extern void sub_0806ACC4(Entity*);
extern void sub_0806AEA8();
extern void sub_0806AEE4(Entity*);
extern void sub_0806AFE8(Entity*, ScriptExecutionContext*);
extern s32 sub_0806EDD8(Entity*, u32, u32);
-extern u32 sub_0806F5B0(u32);
-extern void sub_08078784(Entity*, u32);
extern void sub_08078850(Entity*, u32, u32, u32*);
extern u8 gUnk_081125F4[12];
diff --git a/src/npc/townsperson.c b/src/npc/townsperson.c
index d8b70298..fc99bac6 100644
--- a/src/npc/townsperson.c
+++ b/src/npc/townsperson.c
@@ -4,10 +4,11 @@
#include "player.h"
#include "textbox.h"
#include "flags.h"
-#include "structures.h"
-#include "functions.h"
#include "save.h"
#include "script.h"
+#include "random.h"
+#include "structures.h"
+#include "functions.h"
typedef struct {
u8 frame1;
@@ -19,17 +20,8 @@ typedef struct {
extern void (*const gUnk_0810B774[])(Entity*);
extern void (*const gUnk_0810B77C[])(Entity*);
extern void sub_08061CB4(Entity*, u32);
-extern u32 sub_0805ACC0(Entity*);
-extern u32 sub_0801E99C(Entity*);
extern void sub_08061D64(Entity*);
-extern void sub_0806F118(Entity*);
-extern u32 sub_0806F5A4(u32);
-extern u32 GetFacingDirection(Entity*, Entity*);
extern void sub_08062048(Entity*);
-extern void sub_08078784(Entity*, u32);
-extern void sub_08078778(Entity*);
-extern u32 sub_0806F5B0(u32);
-extern void ResolveEntityOnTop(Entity*, Entity*);
extern void sub_08078850(Entity*, u32, u8, u32*);
extern SpriteLoadData* gUnk_0810B6EC[];
diff --git a/src/npc/wheaton.c b/src/npc/wheaton.c
index 07697274..1d2170a8 100644
--- a/src/npc/wheaton.c
+++ b/src/npc/wheaton.c
@@ -1,9 +1,8 @@
#include "global.h"
#include "entity.h"
#include "script.h"
+#include "functions.h"
-extern void sub_0805E3A0(Entity*, u32);
-extern void ResolveEntityOnTop(Entity*, Entity*);
extern Hitbox gUnk_0810C3C0;
void Wheaton(Entity* this) {
diff --git a/src/npc/windTribespeople.c b/src/npc/windTribespeople.c
index ea09f484..65968f30 100644
--- a/src/npc/windTribespeople.c
+++ b/src/npc/windTribespeople.c
@@ -8,15 +8,7 @@
#include "save.h"
#include "script.h"
-extern u32 LoadExtraSpriteData(Entity*, SpriteLoadData*);
extern void sub_0806C7D4(Entity*);
-extern void sub_0806F118(Entity*);
-extern u32 sub_0801E99C();
-extern void sub_08078784(Entity*, u32);
-extern void SetExtraSpriteFrame(Entity*, u32, u32);
-extern void SetSpriteSubEntryOffsetData2(Entity*, u32, u32);
-extern void SetSpriteSubEntryOffsetData1(Entity*, u32, u32);
-extern void sub_0807000C(Entity*);
extern void (*const gUnk_08113A7C[])(Entity*);
extern void (*const gUnk_08113A8C[])(Entity*, ScriptExecutionContext*);
diff --git a/src/npc/zelda.c b/src/npc/zelda.c
index af6ec1c7..c9a50cfb 100644
--- a/src/npc/zelda.c
+++ b/src/npc/zelda.c
@@ -1,24 +1,16 @@
#include "global.h"
+#include "audio.h"
#include "entity.h"
#include "functions.h"
#include "room.h"
#include "flags.h"
#include "script.h"
-extern void PrependEntityToList(Entity*, u32);
-extern Entity* FindEntityBySubtype(u32, u32);
-void CopyPosition(Entity*, Entity*);
+extern Entity* DeepFindEntityByID(u32, u32);
void sub_08068680(Entity*, Entity*);
void sub_08068694(Entity*, Entity*);
-u32 GetAnimationState(Entity* ent);
-void DeleteThisEntity(void);
extern Entity* GetEntityByType(u32, u32);
extern void sub_080686C4(Entity*, Entity*);
-extern void SoundReq(u32);
-extern void SetTileType(u32, u32, u32);
-
-extern Entity gPlayerEntity;
-extern RoomControls gRoomControls;
extern void (*gUnk_08110BD8[])(Entity* ent);
extern u16 gUnk_08110BE0[];
@@ -40,7 +32,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) {
@@ -95,7 +87,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);
@@ -139,7 +131,7 @@ void sub_08066E80(Entity* this, ScriptExecutionContext* context) {
context->unk_18++;
this->field_0x20 = 0x20000;
this->frames.all &= 0xFE;
- SoundReq(0x7C);
+ SoundReq(SFX_PLY_JUMP);
}
break;
case 2:
diff --git a/src/object/archway.c b/src/object/archway.c
index aa26762f..49f3f497 100644
--- a/src/object/archway.c
+++ b/src/object/archway.c
@@ -1,7 +1,6 @@
#include "global.h"
#include "entity.h"
-#include "sprite.h"
-#include "functions.h"
+#include "game.h"
void Archway(Entity* this) {
if (this->action == 0) {
diff --git a/src/object/backgroundCloud.c b/src/object/backgroundCloud.c
index df2625a3..aaee8cf2 100644
--- a/src/object/backgroundCloud.c
+++ b/src/object/backgroundCloud.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "entity.h"
+#include "random.h"
#include "functions.h"
extern void (*const gUnk_08121EA4[])(Entity*);
@@ -24,7 +25,7 @@ void sub_0808F658(Entity* this) {
this->animationState = 0;
this->x.HALF.HI += (Random() & 0xf) << 4;
this->actionDelay = 0;
- this->previousActionFlag = 0;
+ this->subAction = 0;
}
void sub_0808F6E0(Entity* this) {
@@ -35,8 +36,8 @@ void sub_0808F6E0(Entity* this) {
}
void sub_0808F70C(Entity* this) {
- if (this->previousActionFlag == 0) {
- this->previousActionFlag = 1;
+ if (this->subAction == 0) {
+ this->subAction = 1;
this->actionDelay = ((Random() & 7) << 3) + 31;
if ((this->direction & 0x10)) {
@@ -49,10 +50,10 @@ void sub_0808F70C(Entity* this) {
this->y.HALF.HI = gUnk_08121EB3[this->type2 * 2 + (Random() & 1)];
}
- if (this->previousActionFlag == 1) {
+ if (this->subAction == 1) {
if (--this->actionDelay == 0) {
this->action = 1;
- this->previousActionFlag = 0;
+ this->subAction = 0;
}
}
}
diff --git a/src/object/bakerOven.c b/src/object/bakerOven.c
index a64217f1..12cbf897 100644
--- a/src/object/bakerOven.c
+++ b/src/object/bakerOven.c
@@ -59,12 +59,12 @@ void sub_0809CD0C(Entity* this) {
}
/* Damage minish link if he touches a steam cloud */
- if (this->field_0xf == 0 && gPlayerEntity.hurtBlinkTime == 0 && this->frameIndex &&
+ if (this->field_0xf == 0 && gPlayerEntity.iframes == 0 && this->frameIndex &&
sub_0806FC80(this, &gPlayerEntity, 4)) {
this->field_0xf++;
ModHealth(-2);
sub_0800449C(&gPlayerEntity, 0x7a);
- gPlayerEntity.hurtBlinkTime = 16;
+ gPlayerEntity.iframes = 16;
gPlayerEntity.field_0x3e = 16;
gPlayerEntity.field_0x42 = 12;
gPlayerEntity.field_0x46 = 16;
diff --git a/src/object/bell.c b/src/object/bell.c
index 072b0798..3a1e7d41 100644
--- a/src/object/bell.c
+++ b/src/object/bell.c
@@ -1,5 +1,5 @@
-#include "entity.h"
#include "global.h"
+#include "entity.h"
extern void (*gUnk_08123384[])(Entity*);
diff --git a/src/object/bird.c b/src/object/bird.c
index 6d126380..fcf03eab 100644
--- a/src/object/bird.c
+++ b/src/object/bird.c
@@ -1,8 +1,10 @@
#include "global.h"
+#include "audio.h"
#include "entity.h"
#include "flags.h"
-#include "functions.h"
#include "save.h"
+#include "random.h"
+#include "functions.h"
extern void (*const gUnk_08123EC0[])(Entity*);
extern void (*const gUnk_08123EEC[])(Entity*);
@@ -69,7 +71,7 @@ void sub_0809D048(Entity* this) {
}
void sub_0809D06C(Entity* this) {
- gUnk_08123EFC[this->previousActionFlag](this);
+ gUnk_08123EFC[this->subAction](this);
}
void sub_0809D084(Entity* this) {
@@ -80,7 +82,7 @@ void sub_0809D084(Entity* this) {
if (temp != 0) {
PositionRelative(this->parent, this, 0, 0x80000);
} else {
- this->previousActionFlag++;
+ this->subAction++;
this->field_0x20 = temp;
}
}
@@ -95,7 +97,7 @@ void sub_0809D0AC(Entity* this) {
this->height.WORD = 0;
this->collisionLayer = 1;
SetLocalFlag(0x45);
- SoundReq(0x72);
+ SoundReq(SFX_SECRET);
fx = CreateFx(this, 0x11, 0);
if (fx != NULL) {
sub_0806FAD8(this, fx);
diff --git a/src/object/button.c b/src/object/button.c
index 23a2ee8d..e545953c 100644
--- a/src/object/button.c
+++ b/src/object/button.c
@@ -47,7 +47,7 @@ void sub_08081FF8(Entity*);
void sub_08081BAC(Entity* this) {
if (sub_08081CB0(this)) {
- this->previousActionFlag = 0;
+ this->subAction = 0;
this->actionDelay = 0xA;
sub_0805E4E0(this, 0xA);
sub_08081FF8(this);
@@ -105,7 +105,6 @@ void sub_08081C98(Entity* this) {
}
Entity* sub_08081D74(Entity*);
-void sub_0807B7D8(u32, u32, u32);
u32 sub_080001DA(u32, u32);
u32 sub_08081CB0(Entity* this) {
@@ -142,8 +141,7 @@ u32 sub_08081D28(Entity* this) {
}
extern u32 sub_080002E0(u32, u32);
-extern Entity* gUnk_03004040[];
-extern u32 sub_080041A0(Entity*, Entity*, u32, u32);
+extern Entity* gUnk_03004040[3];
u32 sub_08081E0C(Entity*);
Entity* sub_08081D74(Entity* this) {
@@ -171,8 +169,6 @@ Entity* sub_08081D74(Entity* this) {
return ent;
}
-extern u32 sub_08079F8C();
-
u32 sub_08081E0C(Entity* this) {
Entity* tmp = &gPlayerEntity;
if (tmp->height.HALF.HI != 0 || !sub_08079F8C()) {
@@ -273,7 +269,6 @@ u32 sub_08081F7C(Entity* this, u32 r7) {
return 1;
}
-extern Entity* gUnk_03004040[3];
extern void sub_080044AE(Entity*, u32, u32);
void sub_08081FF8(Entity* this) {
diff --git a/src/object/chestSpawner.c b/src/object/chestSpawner.c
index 790d1251..3f7e6006 100644
--- a/src/object/chestSpawner.c
+++ b/src/object/chestSpawner.c
@@ -1,6 +1,5 @@
#include "global.h"
#include "entity.h"
-#include "flags.h"
extern void sub_080842D8(Entity*);
extern void sub_08078828(Entity*);
diff --git a/src/object/cloud.c b/src/object/cloud.c
index 6f10295a..56b55984 100644
--- a/src/object/cloud.c
+++ b/src/object/cloud.c
@@ -1,31 +1,20 @@
#include "global.h"
+#include "audio.h"
#include "entity.h"
#include "room.h"
#include "player.h"
#include "flags.h"
+#include "random.h"
#include "functions.h"
#include "structures.h"
extern void sub_0809F7BC(Entity*);
-extern void SoundReq(u32);
-extern void sub_0809F814(u32);
extern void sub_0809F7F4(Entity*);
-extern void LoadRoomEntityList();
-extern void DeleteThisEntity();
-extern u32 CheckRoomFlag(u32);
-extern void sub_08078A90(u32);
-extern void sub_08078B48(void);
-extern void sub_0806F69C(Entity*);
extern void (*gUnk_08124798[])(Entity*);
extern void (*gUnk_081247A0[])(Entity*);
extern void (*gUnk_081247AC[])(Entity*);
-extern Entity* CreateObject(u32, u32, u32);
-extern void PositionEntityOnTop(Entity*, Entity*);
-extern void sub_0807BB68(u32*, u32, u32);
extern void* gUnk_080DD750;
-extern Entity gPlayerEntity;
-extern PlayerState gPlayerState;
extern u8 gUnk_081247C0[];
extern u16 gUnk_081247C8[];
extern u32 gUnk_081247D0;
@@ -70,9 +59,9 @@ void sub_0809F548(Entity* this) {
void sub_0809F5B0(Entity* this) {
if (--this->actionDelay == 0) {
- SoundReq(115);
+ SoundReq(SFX_SECRET_BIG);
SetGlobalFlag(KUMOTATSUMAKI);
- LoadRoomEntityList(&gUnk_080DD750);
+ LoadRoomEntityList((EntityData*)&gUnk_080DD750);
DeleteThisEntity();
}
}
@@ -123,7 +112,7 @@ void sub_0809F69C(Entity* this) {
this->actionDelay = 30;
this->action = 4;
gRoomControls.cameraTarget = &gPlayerEntity;
- SoundReq(115);
+ SoundReq(SFX_SECRET_BIG);
}
}
diff --git a/src/object/fileScreenObjects.c b/src/object/fileScreenObjects.c
index 2b4914e1..de79631a 100644
--- a/src/object/fileScreenObjects.c
+++ b/src/object/fileScreenObjects.c
@@ -1,18 +1,17 @@
#include "global.h"
#include "entity.h"
#include "flags.h"
-#include "functions.h"
#include "main.h"
#include "menu.h"
#include "npc.h"
-#include "position.h"
-#include "structures.h"
+#include "coord.h"
#include "fileScreen.h"
+#include "utils.h"
+#include "structures.h"
+#include "functions.h"
extern int sub_0807A094(int);
-extern void LoadPalettes(const u8*, int, int);
extern u32 sub_080041EC(int, int);
-extern u32 sub_080045DA(int, int);
static bool32 sub_0808E950(void);
static void sub_0808EABC(Entity*);
@@ -39,7 +38,6 @@ typedef struct {
extern void (*const gUnk_08121C64[])(Entity*);
extern void (*const gUnk_08121CCC[])(Entity*);
extern const int gUnk_08133368[];
-extern const u8 gGlobalGfxAndPalettes[];
extern const struct_08121CD4 gUnk_08121CD4[][4];
extern const u8 gUnk_08121D10[];
extern const u8 gUnk_08121D38[][8];
diff --git a/src/object/floatingBlock.c b/src/object/floatingBlock.c
index 661cec72..7e1ad599 100644
--- a/src/object/floatingBlock.c
+++ b/src/object/floatingBlock.c
@@ -1,6 +1,5 @@
#include "global.h"
#include "entity.h"
-#include "functions.h"
void FloatingBlock(Entity* this) {
if (this->action == 0) {
diff --git a/src/object/giantLeaf.c b/src/object/giantLeaf.c
index cf2fb1df..9badc65b 100644
--- a/src/object/giantLeaf.c
+++ b/src/object/giantLeaf.c
@@ -1,11 +1,10 @@
#include "global.h"
#include "entity.h"
#include "room.h"
+#include "functions.h"
-void SetTile(u32 tileIndex, s32 tilePosition, s32 layerIndex);
void sub_0808D618(Entity* ent);
-extern RoomControls gRoomControls;
extern s16 gUnk_08121750[];
extern s16 gUnk_0812176A[];
diff --git a/src/object/greatFairy.c b/src/object/greatFairy.c
index 3d511b25..87afa483 100644
--- a/src/object/greatFairy.c
+++ b/src/object/greatFairy.c
@@ -1,12 +1,15 @@
#include "global.h"
+#include "audio.h"
#include "entity.h"
#include "room.h"
#include "screen.h"
-#include "structures.h"
#include "greatFairy.h"
-#include "functions.h"
+#include "flags.h"
#include "save.h"
+#include "random.h"
#include "script.h"
+#include "structures.h"
+#include "functions.h"
enum {
BEHAVIORS,
@@ -23,11 +26,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);
}
@@ -66,20 +67,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;
}
@@ -108,9 +107,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;
}
}
}
@@ -164,10 +162,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;
@@ -221,7 +217,7 @@ void GreatFairy_MiniRisingUpdate(Entity* this) {
this->height.WORD -= 0x8000;
if (this->height.HALF.HI == -20) {
this->action = 2;
- SoundReq(321);
+ SoundReq(SFX_HEART_CONTAINER_SPAWN);
} else {
if (((this->height.HALF.HI == -10) && (this->field_0xf == 0)) &&
(target = GreatFairy_CreateForm(this, DROPLET, 0), target != NULL)) {
@@ -235,7 +231,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);
}
}
@@ -268,15 +264,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);
}
}
@@ -290,12 +284,12 @@ void GreatFairy_DropletInit(Entity* this) {
this->spriteSettings.b.draw = 1;
this->height.HALF.HI = 0;
this->spritePriority.b0 = 5;
- SoundReq(320);
+ SoundReq(SFX_140);
}
void GreatFairy_DropletUpdate(Entity* this) {
GetNextFrame(this);
- if (this->frames.b.f3) {
+ if (this->frames.all & 0x80) {
DeleteEntity(this);
}
}
@@ -312,7 +306,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);
@@ -329,7 +323,7 @@ void GreatFairy_BigRippleInit(Entity* this) {
this->actionDelay = 120;
this->spriteSettings.b.draw = 1;
this->spritePriority.b0 = 5;
- SoundReq(249);
+ SoundReq(SFX_TELEPORTER);
}
void GreatFairy_BigRippleUpdate(Entity* this) {
@@ -361,7 +355,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);
}
}
@@ -375,35 +369,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;
@@ -412,7 +396,6 @@ void sub_080871A8(Entity* this) {
}
void sub_080871D0(Entity* this) {
-
if (--this->actionDelay == 0) {
gRoomVars.greatFairyState |= 8;
DeleteEntity(this);
@@ -422,16 +405,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;
@@ -446,7 +429,6 @@ void sub_08087264(Entity* this) {
}
void sub_0808727C(Entity* this) {
-
if (--this->actionDelay == 0) {
DeleteEntity(this);
}
@@ -477,17 +459,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);
@@ -513,7 +494,7 @@ void sub_080873D0(Entity* this) {
ent = GreatFairy_CreateForm(this, 8, 0);
if (ent != NULL) {
CopyPosition(this, ent);
- this->actionDelay = 0x30;
+ this->actionDelay = 48;
}
}
}
@@ -521,10 +502,10 @@ void sub_080873D0(Entity* this) {
void sub_080873FC(void) {
Entity* ent;
- SoundReq(0xf7);
+ SoundReq(SFX_APPARATE);
gRoomControls.cameraTarget = NULL;
- while (ent = FindEntityInListBySubtype(0x6, 0x1b, 0x6), ent != NULL) {
+ while (ent = FindEntityByID(0x6, 0x1b, 0x6), ent != NULL) {
DeleteEntity(ent);
}
}
@@ -553,101 +534,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/heartContainer.c b/src/object/heartContainer.c
index f6858b50..046eb0aa 100644
--- a/src/object/heartContainer.c
+++ b/src/object/heartContainer.c
@@ -1,11 +1,9 @@
#include "global.h"
+#include "audio.h"
#include "entity.h"
#include "flags.h"
#include "functions.h"
-extern void DeleteThisEntity();
-extern void sub_08080CB4(Entity*);
-extern u32 sub_08017850(Entity*);
static void sub_0808E6A0(Entity*);
static void sub_0808E6E4(Entity*);
static void sub_0808E714(Entity*);
@@ -54,7 +52,7 @@ static void sub_0808E714(Entity* this) {
this->action = 3;
this->field_0x3c |= 0x10;
sub_0805EC60(this);
- SoundReq(0x141);
+ SoundReq(SFX_HEART_CONTAINER_SPAWN);
}
sub_08080CB4(this);
}
diff --git a/src/object/houseDoorExterior.c b/src/object/houseDoorExterior.c
index 0d9b6e81..2b6edaae 100644
--- a/src/object/houseDoorExterior.c
+++ b/src/object/houseDoorExterior.c
@@ -61,7 +61,7 @@ void sub_080866D8(Entity* this) {
entity->field_0x68.HWORD = prop->unk0;
entity->field_0x6a.HWORD = prop->unk2;
entity->collisionLayer = prop->unk4;
- entity->previousActionFlag = prop->unk5;
+ entity->subAction = prop->unk5;
UpdateSpriteForCollisionLayer(entity);
*((u32*)(&this->field_0x68)) |= mask;
if (prop->unk8) {
@@ -98,7 +98,7 @@ static void sub_0808681C(Entity* this) {
this->spriteSettings.b.draw = 1;
this->frameIndex = 0;
this->hitbox = &gUnk_081206AC;
- if (this->previousActionFlag == 1) {
+ if (this->subAction == 1) {
this->action = 2;
this->frameIndex = 1;
}
@@ -158,7 +158,7 @@ void sub_0808692C(Entity* this) {
this->flags &= 0xFD;
this->type2 = 2;
this->action = this->frameIndex == 0 ? 1 : 2;
- this->previousActionFlag = 0;
+ this->subAction = 0;
this->actionDelay = 8;
}
diff --git a/src/object/itemOnGround.c b/src/object/itemOnGround.c
index b794b546..351b21bd 100644
--- a/src/object/itemOnGround.c
+++ b/src/object/itemOnGround.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "audio.h"
#include "entity.h"
#include "flags.h"
#include "functions.h"
@@ -162,7 +163,7 @@ static void sub_080810FC(Entity* this) {
sub_08081598(this);
} else {
this->action = 2;
- this->previousActionFlag = 0;
+ this->subAction = 0;
this->flags |= 0x80;
this->flags2 = 0x11;
CopyPosition(&gPlayerEntity, this);
@@ -304,11 +305,11 @@ void sub_0808136C(Entity* this) {
}
static void sub_080813BC(Entity* this) {
- gUnk_0811E840[this->previousActionFlag](this);
+ gUnk_0811E840[this->subAction](this);
}
void sub_080813D4(Entity* this) {
- this->previousActionFlag = 1;
+ this->subAction = 1;
this->field_0x1d = 1;
this->spriteSettings.b.draw = 1;
}
diff --git a/src/object/jailBars.c b/src/object/jailBars.c
index d046c822..505ca8e2 100644
--- a/src/object/jailBars.c
+++ b/src/object/jailBars.c
@@ -2,9 +2,9 @@
#include "entity.h"
#include "flags.h"
#include "room.h"
+#include "functions.h"
extern void sub_080A0960(Entity*, u32);
-extern void SoundReq(u32);
extern void sub_0801AF18(u8*, u32, u32);
extern void (*const gUnk_08124950[])(Entity*);
diff --git a/src/object/lightableSwitch.c b/src/object/lightableSwitch.c
index cfbf0ba5..cbeafdd7 100644
--- a/src/object/lightableSwitch.c
+++ b/src/object/lightableSwitch.c
@@ -7,10 +7,7 @@
extern void sub_0809EB30(Entity*);
extern void sub_0809EAD8(Entity*);
extern void sub_0809EABC(Entity*);
-extern void EnqueueSFX(u32);
extern void sub_080A2CC0(Entity*, Entity**, u16*);
-extern void SetTile(u32, u32, u32);
-extern void sub_0806F69C(Entity*);
extern void (*const gUnk_081243B4[])(Entity*);
extern void (*const gUnk_081243BC[])(Entity*);
diff --git a/src/object/lilypadSmall.c b/src/object/lilypadSmall.c
index a96c49ad..ce0d8c08 100644
--- a/src/object/lilypadSmall.c
+++ b/src/object/lilypadSmall.c
@@ -1,7 +1,8 @@
#include "global.h"
#include "entity.h"
-#include "functions.h"
#include "player.h"
+#include "random.h"
+#include "functions.h"
extern void sub_080A2CC0(Entity*, Entity**, u16*);
diff --git a/src/object/mask.c b/src/object/mask.c
index e405df5f..b6d06206 100644
--- a/src/object/mask.c
+++ b/src/object/mask.c
@@ -2,26 +2,17 @@
#include "entity.h"
#include "room.h"
#include "random.h"
-
-extern Entity gPlayerEntity;
-extern u16 gScreenTransition[];
+#include "structures.h"
+#include "player.h"
+#include "flags.h"
+#include "functions.h"
extern void (*MaskActionFuncs[])(Entity*);
-extern void DeleteThisEntity();
-
-extern bool32 CheckFlags(u16);
-extern void SetFlag(u16);
-extern void ClearFlag(u16);
-
-extern void SetTile(u32, u16, u32);
-
extern void sub_08000148(u16, u16, u32);
extern s16 sub_080001DA(u16, u32);
extern u16 sub_080002E0(u16, u32);
-extern void EnqueueSFX(u32);
-extern void sub_080044EC(Entity*, u16);
extern void sub_0805457C(Entity*, s32);
void Mask(Entity* this) {
@@ -35,7 +26,7 @@ void sub_080929A4(Entity* this) {
switch (this->type2 & 0xC0) {
case 0x40:
- field_0x0a = gScreenTransition[0x5];
+ field_0x0a = gScreenTransition.field_0xa;
switch (field_0x0a) {
case 0x44D ... 0x44F:
@@ -69,7 +60,7 @@ void sub_080929A4(Entity* this) {
this->field_0x7a.HWORD = sub_080002E0(this->field_0x7c.HALF.HI, 1);
- SetTile(0x4022, this->field_0x7c.HALF.HI, 1);
+ SetTile(0x4022, this->field_0x7c.HALF_U.HI, 1);
}
// Probably related to knocking it down
@@ -94,7 +85,7 @@ void sub_08092A94(Entity* this) {
}
// Presumably, make the mask fall
- SetTile((u16)this->field_0x7c.HALF.LO, this->field_0x7c.HALF.HI, 1);
+ SetTile(this->field_0x7c.HALF_U.LO, this->field_0x7c.HALF_U.HI, 1);
sub_08000148(this->field_0x7a.HWORD, this->field_0x7c.HALF.HI, 1);
diff --git a/src/object/metalDoor.c b/src/object/metalDoor.c
index 88ab3308..a2a18bff 100644
--- a/src/object/metalDoor.c
+++ b/src/object/metalDoor.c
@@ -2,15 +2,12 @@
#include "entity.h"
#include "room.h"
#include "flags.h"
+#include "functions.h"
extern u32 sub_08083734(Entity*, u32);
extern void sub_080A080C(Entity*);
-extern void sub_0806F69C(Entity*);
-extern void EnqueueSFX(u32);
extern void sub_080A0870(Entity*);
-extern void SoundReq(u32);
extern u32 sub_080001DA(u32, u32);
-extern void SetTile(u32, u32, u32);
extern void (*const gUnk_0812493C[])(Entity*);
diff --git a/src/object/minecart.c b/src/object/minecart.c
index 1e239be3..af74c357 100644
--- a/src/object/minecart.c
+++ b/src/object/minecart.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "audio.h"
#include "entity.h"
#include "functions.h"
#include "room.h"
@@ -7,7 +8,6 @@ extern u32 sub_08091DDC(Entity*);
extern u32 sub_080002B4(Entity*, u32, u32);
extern u32 sub_08007DD6(u32, u32);
extern void sub_08017744(Entity*);
-extern u32 sub_080002B8(Entity*);
extern void sub_08091C0C(Entity*);
typedef struct {
@@ -85,7 +85,7 @@ void sub_080917DC(Entity* this) {
gPlayerEntity.flags &= 0x7f;
ResetPlayer();
sub_0807A108();
- SoundReq(0x7c);
+ SoundReq(SFX_PLY_JUMP);
}
} else {
this->actionDelay = 0;
@@ -153,7 +153,7 @@ void sub_080919AC(Entity* this) {
}
if (--this->field_0xf == 0xff) {
- SoundReq(0x7b);
+ SoundReq(SFX_PLY_VO7);
this->field_0xf = 0x3c;
}
@@ -182,7 +182,7 @@ void sub_080919AC(Entity* this) {
gPlayerEntity.flags |= 0x80;
sub_08004168(this);
InitAnimationForceUpdate(this, this->animationState + 0xc);
- SoundReq(0x78);
+ SoundReq(SFX_PLY_VO4);
SoundReq(0x139);
return;
case 0x67:
diff --git a/src/object/minishSizedArchway.c b/src/object/minishSizedArchway.c
index cc1b63d3..240fdf95 100644
--- a/src/object/minishSizedArchway.c
+++ b/src/object/minishSizedArchway.c
@@ -1,7 +1,6 @@
#include "global.h"
#include "entity.h"
-#include "sprite.h"
-#include "functions.h"
+#include "game.h"
void MinishSizedArchway(Entity* this) {
if (this->action == 0) {
diff --git a/src/object/minishSizedEntrance.c b/src/object/minishSizedEntrance.c
index 78410c6c..03467f41 100644
--- a/src/object/minishSizedEntrance.c
+++ b/src/object/minishSizedEntrance.c
@@ -1,11 +1,13 @@
#include "global.h"
#include "entity.h"
+#include "game.h"
+#include "player.h"
+#include "functions.h"
-extern bool32 CheckIsDungeon();
-extern void sub_080AE068(Entity*);
-extern void LoadFixedGFX(Entity*, u32);
+extern void DoExitTransition(void*);
extern void (*const gUnk_08122254[])(Entity*);
+extern u16 gUnk_0812225C[];
void MinishSizedEntrance(Entity* this) {
gUnk_08122254[this->action](this);
@@ -22,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/object1A.c b/src/object/object1A.c
index 837884a9..f028481d 100644
--- a/src/object/object1A.c
+++ b/src/object/object1A.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "entity.h"
+#include "random.h"
#include "functions.h"
extern void sub_08086A6C();
diff --git a/src/object/object1C.c b/src/object/object1C.c
index c12a6c1d..0c80735a 100644
--- a/src/object/object1C.c
+++ b/src/object/object1C.c
@@ -2,7 +2,6 @@
#include "entity.h"
extern u32 CheckRectOnScreen(s16, s16, u32, u32);
-extern void DeleteThisEntity();
void Object1C(Entity* this) {
s32 iVar1;
diff --git a/src/object/object1D.c b/src/object/object1D.c
index 8442b227..f7343fbe 100644
--- a/src/object/object1D.c
+++ b/src/object/object1D.c
@@ -1,8 +1,6 @@
#include "global.h"
#include "entity.h"
-void DeleteThisEntity();
-
extern void (*gUnk_081208A0[])(Entity*);
void Object1D(Entity* this) {
diff --git a/src/object/object2A.c b/src/object/object2A.c
index ffd00460..dca66978 100644
--- a/src/object/object2A.c
+++ b/src/object/object2A.c
@@ -31,7 +31,7 @@ void sub_08089B18(Entity* this) {
case 4:
if (!CheckFlags(this->field_0x86.HWORD)) {
this->spriteSettings.b.draw = FALSE;
- this->previousActionFlag = 1;
+ this->subAction = 1;
return;
}
}
diff --git a/src/object/object49.c b/src/object/object49.c
index 16bf7bb9..82d39bd6 100644
--- a/src/object/object49.c
+++ b/src/object/object49.c
@@ -1,7 +1,8 @@
#include "global.h"
+#include "audio.h"
#include "entity.h"
#include "functions.h"
-#include "position.h"
+#include "coord.h"
#include "random.h"
#include "structures.h"
@@ -11,7 +12,6 @@ static void sub_0808F244(Entity*);
extern void sub_0806FCF4(Entity*, u32, u32, u32);
extern void sub_0808F5EC(Entity*);
-extern bool32 sub_0806F3E4(Entity*);
extern void (*const gUnk_08121E5C[])(Entity*);
extern void (*const gUnk_08121E88[])(Entity*);
@@ -59,7 +59,7 @@ static void sub_0808F14C(Entity* this) {
sub_0808F2B0(this);
if (sub_08003FC4(this, 0x2000) == 0) {
this->action++;
- SoundReq(0x84);
+ SoundReq(SFX_WATER_SPLASH);
}
}
@@ -150,13 +150,13 @@ void sub_0808F2C0(Entity* this) {
void sub_0808F370(Entity* this) {
if (this->action == 0) {
- if (this->parent->previousActionFlag == 1) {
+ if (this->parent->subAction == 1) {
this->action = 1;
this->field_0x70.WORD = 0;
sub_0808F5EC(this);
}
} else {
- u8 flag = this->parent->previousActionFlag - 1;
+ u8 flag = this->parent->subAction - 1;
if (flag < 5) {
if (this->field_0x70.WORD == 0) {
if (--(*(u32*)&this->field_0x74) == -1) {
diff --git a/src/object/object7E.c b/src/object/object7E.c
index 6c89947e..c456a841 100644
--- a/src/object/object7E.c
+++ b/src/object/object7E.c
@@ -1,6 +1,6 @@
#include "global.h"
#include "entity.h"
-#include "functions.h"
+#include "coord.h"
void Object7E(Entity* this) {
diff --git a/src/object/object86.c b/src/object/object86.c
index 9706e040..02e0b480 100644
--- a/src/object/object86.c
+++ b/src/object/object86.c
@@ -1,9 +1,10 @@
#include "global.h"
#include "entity.h"
+#include "coord.h"
#include "player.h"
#include "flags.h"
+#include "functions.h"
-extern u32 sub_080041A0(Entity*, Entity*, u32, u32);
void sub_08099ECC(Entity*);
extern void sub_0805E4E0(Entity*, u32);
extern void sub_0805B390(u32);
@@ -18,7 +19,7 @@ void sub_08099DD0(Entity* this) {
this->collisionLayer = 1;
this->spriteRendering.b3 = 3;
this->spritePriority.b0 = 7;
- this->previousActionFlag = 0;
+ this->subAction = 0;
if (GetInventoryValue(0x46)) {
this->action = 4;
this->frameIndex = 0;
@@ -31,7 +32,7 @@ void sub_08099DD0(Entity* this) {
void sub_08099E10(Entity* this) {
if (CheckLocalFlag(0x74)) {
GetNextFrame(this);
- if ((this->frames.all == 1) && (this->previousActionFlag == 0)) {
+ if ((this->frames.all == 1) && (this->subAction == 0)) {
this->frames.all = 0;
sub_08099ECC(this);
}
@@ -56,7 +57,7 @@ void sub_08099E58(Entity* this) {
void sub_08099E8C(Entity* this) {
if (sub_080041A0(this, &gPlayerEntity, 0xc, 0xc)) {
- if (this->previousActionFlag == 0) {
+ if (this->subAction == 0) {
sub_08099ECC(this);
sub_0805E4E0(this, 0x1e);
}
@@ -70,7 +71,7 @@ void nullsub_534(Entity* this) {
}
void sub_08099ECC(Entity* this) {
- this->previousActionFlag = 1;
+ this->subAction = 1;
CopyPosition(this, &gPlayerEntity);
gPlayerState.playerAction = 3;
gPlayerState.field_0x34[4] = 0;
diff --git a/src/object/object9E.c b/src/object/object9E.c
index 858ee01b..f8e89b4e 100644
--- a/src/object/object9E.c
+++ b/src/object/object9E.c
@@ -1,11 +1,11 @@
#include "global.h"
#include "entity.h"
+#include "coord.h"
#include "room.h"
+#include "functions.h"
extern Hitbox gUnk_080FD168;
-extern void SetTile(u32, u32, u32);
-
void Object9E(Entity* this) {
Entity* ent;
u32 tilePos;
diff --git a/src/object/objectA.c b/src/object/objectA.c
index 3679e4bb..0e63b26f 100644
--- a/src/object/objectA.c
+++ b/src/object/objectA.c
@@ -2,6 +2,7 @@
#include "entity.h"
#include "room.h"
#include "flags.h"
+#include "createObject.h"
#include "functions.h"
extern Hitbox gUnk_080FD170;
diff --git a/src/object/objectA2.c b/src/object/objectA2.c
index e79c07f8..0c3307d3 100644
--- a/src/object/objectA2.c
+++ b/src/object/objectA2.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "object.h"
#include "menu.h"
+#include "random.h"
#include "structures.h"
#include "functions.h"
diff --git a/src/object/objectA8.c b/src/object/objectA8.c
index 4cca37f2..c1a5193a 100644
--- a/src/object/objectA8.c
+++ b/src/object/objectA8.c
@@ -1,14 +1,10 @@
#include "global.h"
#include "entity.h"
-
-extern Entity* CreateItemEntity(u32, u32, u32);
-extern void DeleteThisEntity();
-extern void sub_08080CB4(Entity*);
+#include "player.h"
+#include "functions.h"
extern void (*gUnk_08124824[])(Entity*);
-extern Entity gPlayerEntity;
-
void ObjectA8(Entity* this) {
if ((this->bitfield & 0x80) != 0) {
switch (this->bitfield & 0x7f) {
diff --git a/src/object/objectAF.c b/src/object/objectAF.c
index c1d32b60..b678d81b 100644
--- a/src/object/objectAF.c
+++ b/src/object/objectAF.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "entity.h"
+#include "coord.h"
extern void sub_080A0640(Entity*);
diff --git a/src/object/objectB2.c b/src/object/objectB2.c
index c3eff1eb..0888ed38 100644
--- a/src/object/objectB2.c
+++ b/src/object/objectB2.c
@@ -1,7 +1,7 @@
#include "global.h"
#include "entity.h"
+#include "functions.h"
-extern void sub_0806F69C(Entity*);
extern u32 sub_080AE4CC(Entity*, u32, u32, u32);
extern void* gUnk_02027EB4;
diff --git a/src/object/pinwheel.c b/src/object/pinwheel.c
index d6a24471..7de61338 100644
--- a/src/object/pinwheel.c
+++ b/src/object/pinwheel.c
@@ -1,10 +1,9 @@
#include "global.h"
#include "entity.h"
-#include "functions.h"
+#include "flags.h"
+#include "createObject.h"
extern u32 ReadBit(u32*, u32);
-extern void DeleteThisEntity();
-extern u32 CheckLocalFlag(u32);
extern u32 gUnk_020342F8;
extern u16 gUnk_08125050[];
diff --git a/src/object/pot.c b/src/object/pot.c
index f28fb9ee..d589662d 100644
--- a/src/object/pot.c
+++ b/src/object/pot.c
@@ -16,10 +16,8 @@ extern void (*const gUnk_0811F0C4[])(Entity*);
extern Hitbox gUnk_080FD338; // TODO: should be const
extern Hitbox gUnk_080FD340; // TODO: should be const
-extern u32 sub_08016A30(Entity*);
extern u32 sub_080001DA(u32, u32);
extern void sub_08078930(Entity*);
-extern u32 sub_080002B8(Entity*);
extern void sub_08016A6C(Entity*);
void Pot(Entity* this) {
@@ -62,7 +60,7 @@ void sub_08082310(Entity* this) {
switch (var0) {
case 0x13:
this->action = 3;
- this->previousActionFlag = 0;
+ this->subAction = 0;
break;
case 0x1D:
SetTile((u16)this->field_0x70.HALF.LO, COORD_TO_TILE(this), this->collisionLayer);
@@ -114,7 +112,7 @@ void sub_08082310(Entity* this) {
}
void sub_080824F8(Entity* this) {
- gUnk_0811F0A8[this->previousActionFlag](this);
+ gUnk_0811F0A8[this->subAction](this);
}
void sub_08082510(Entity* this) {
@@ -125,7 +123,7 @@ void sub_08082510(Entity* this) {
this->flags2 = gPlayerEntity.flags2;
this->spriteOffsetY = 0;
SetTile((u16)this->field_0x70.HALF.LO, COORD_TO_TILE(this), this->collisionLayer);
- this->previousActionFlag++;
+ this->subAction++;
}
void nullsub_511(Entity* this) {
@@ -166,7 +164,7 @@ void sub_080825F0(Entity* this) {
static void sub_08082608(Entity* this) {
this->action = 1;
- this->previousActionFlag = 0;
+ this->subAction = 0;
}
void sub_08082614(Entity* this) {
@@ -203,11 +201,11 @@ void sub_08082614(Entity* this) {
}
void sub_080826E4(Entity* this) {
- gUnk_0811F0C4[this->previousActionFlag](this);
+ gUnk_0811F0C4[this->subAction](this);
}
void sub_080826FC(Entity* this) {
- this->previousActionFlag = 1;
+ this->subAction = 1;
this->field_0x1d = 48;
this->actionDelay = 0;
}
diff --git a/src/object/railtrack.c b/src/object/railtrack.c
index 2e3a3d66..52a74bc3 100644
--- a/src/object/railtrack.c
+++ b/src/object/railtrack.c
@@ -2,13 +2,12 @@
#include "entity.h"
#include "room.h"
#include "flags.h"
+#include "functions.h"
extern u32* GetLayerByIndex(u32);
extern void sub_08085394(Entity*);
extern void sub_0808543C(Entity*);
-extern void EnqueueSFX(u32);
extern u32 sub_080854A8(Entity*);
-extern void SetTile(u32, u32, u32);
extern void (*const gUnk_081205D0[])(Entity*);
diff --git a/src/object/smoke.c b/src/object/smoke.c
index ade9d2cd..86c75efc 100644
--- a/src/object/smoke.c
+++ b/src/object/smoke.c
@@ -1,9 +1,8 @@
#include "global.h"
#include "entity.h"
+#include "random.h"
#include "functions.h"
-extern void sub_0806F69C(Entity*);
-
extern void (*const gUnk_08121060[])(Entity*);
extern void (*const gUnk_08121070[])(Entity*);
diff --git a/src/object/thoughtBubble.c b/src/object/thoughtBubble.c
index 596cb382..5e77d9e1 100644
--- a/src/object/thoughtBubble.c
+++ b/src/object/thoughtBubble.c
@@ -1,10 +1,6 @@
#include "global.h"
#include "entity.h"
-
-extern void InitializeAnimation(Entity*, u32);
-extern void SoundReq(u32);
-extern void DeleteThisEntity();
-extern void GetNextFrame(Entity*);
+#include "functions.h"
extern void (*const ThoughtBubble_Behaviors[])(Entity*);
diff --git a/src/object/treeHidingPortal.c b/src/object/treeHidingPortal.c
index 912003b9..53f593bb 100644
--- a/src/object/treeHidingPortal.c
+++ b/src/object/treeHidingPortal.c
@@ -1,21 +1,20 @@
#include "global.h"
+#include "audio.h"
#include "entity.h"
#include "flags.h"
#include "player.h"
#include "room.h"
+#include "structures.h"
+#include "functions.h"
extern void sub_0809E96C(Entity*);
-extern u32 sub_0800419C(Entity*, Entity*, u32, u32);
extern void CreateSparkle(Entity*);
extern u32 sub_0809E9A0(void);
-extern void sub_08078A90(u32);
extern void sub_0809E918(Entity*);
-extern void SoundReq(u32);
extern void CreateMinishEntrance(u32 tile);
extern void (*const gUnk_08124354[])(Entity*);
-extern u32 gScreenTransition;
extern s16 gUnk_08124364[];
void TreeHidingPortal(Entity* this) {
@@ -36,7 +35,7 @@ void sub_0809E86C(Entity* this) {
if (sub_0800419C(this, &gPlayerEntity, 0x30, 0x30)) {
if (CheckGlobalFlag(EZERO_1ST)) {
- if (((gScreenTransition & 3) == 0)) {
+ if (((gScreenTransition.frameCount & 3) == 0)) {
CreateSparkle(this);
}
}
@@ -62,7 +61,7 @@ void sub_0809E8EC(Entity* this) {
if (--this->actionDelay == 0) {
SetFlag(this->field_0x86.HWORD);
sub_08078A90(0);
- SoundReq(0x73);
+ SoundReq(SFX_SECRET_BIG);
DeleteThisEntity();
}
}
diff --git a/src/object/well.c b/src/object/well.c
index fda35fed..86710ac6 100644
--- a/src/object/well.c
+++ b/src/object/well.c
@@ -2,11 +2,7 @@
#include "entity.h"
#include "room.h"
#include "player.h"
-
-void SetTile(u32 tileIndex, s32 tilePosition, s32 layerIndex);
-s32 GetTileType(s32 tilePosition, s32 layerIndex);
-void sub_08078B48();
-void DeleteThisEntity();
+#include "functions.h"
extern void (*gUnk_08124C08[])(Entity*);
diff --git a/src/object/windTribeFlag.c b/src/object/windTribeFlag.c
index 9c769808..bc9d0fa3 100644
--- a/src/object/windTribeFlag.c
+++ b/src/object/windTribeFlag.c
@@ -1,6 +1,6 @@
#include "global.h"
#include "entity.h"
-#include "functions.h"
+#include "random.h"
void WindTribeFlag(Entity* this) {
if (this->action == 0) {
diff --git a/src/object/windcrest.c b/src/object/windcrest.c
index b4b7893a..b21c5ee0 100644
--- a/src/object/windcrest.c
+++ b/src/object/windcrest.c
@@ -1,11 +1,10 @@
#include "global.h"
+#include "audio.h"
#include "entity.h"
#include "save.h"
#include "script.h"
extern void sub_08078850(Entity*, u32, u32, u8*);
-extern void SoundReq(u32);
-extern Entity* CreateFx(Entity*, u32, u32);
extern u8 gUnk_08125010;
@@ -24,7 +23,7 @@ void sub_080A2124(Entity* this) {
}
void Windcrest_Unlock(Entity* this) {
- SoundReq(0x72);
+ SoundReq(SFX_SECRET);
gSave.windcrests = gSave.windcrests | 1 << (this->type2 + 0x18);
CreateFx(this, 0x46, 0);
}
diff --git a/src/player.c b/src/player.c
index 7dfcbb93..c542c062 100644
--- a/src/player.c
+++ b/src/player.c
@@ -1,40 +1,68 @@
#include "global.h"
+#include "audio.h"
#include "entity.h"
#include "player.h"
#include "textbox.h"
-#include "functions.h"
-#include "readKeyInput.h"
+#include "utils.h"
#include "area.h"
#include "save.h"
+#include "game.h"
+#include "functions.h"
-extern const void (*const gUnk_0811B9E0[])(Entity*);
-extern const void (*const gUnk_0811BA60[])(Entity*);
-extern const void (*const gUnk_0811BA68[])(Entity*);
-extern const void (*const gUnk_0811BA74[])(Entity*);
-extern const void (*const gUnk_0811BA7C[])(Entity*);
-extern const void (*const gUnk_0811BA88[])(Entity*);
-extern const void (*const gUnk_0811BA94[])(Entity*);
-extern const void (*const gUnk_0811BA9C[])(Entity*);
-
-extern void sub_08079458();
+static void (*const sPlayerActions[])(Entity*);
+extern void (*const gUnk_0811BA60[])(Entity*);
+extern void (*const gUnk_0811BA68[])(Entity*);
+extern void (*const gUnk_0811BA74[])(Entity*);
+extern void (*const gUnk_0811BA7C[])(Entity*);
+extern void (*const gUnk_0811BA88[])(Entity*);
+extern void (*const gUnk_0811BA94[])(Entity*);
+extern void (*const gUnk_0811BA9C[])(Entity*);
+extern void (*const gUnk_0811BAD4[])(Entity*);
+extern void (*const gUnk_0811BAE4[])(Entity*);
+extern void (*const gUnk_0811BB3C[])(Entity*);
+
+extern void RespawnPlayer();
extern void sub_080797EC();
extern void sub_08079E08();
extern void sub_08078F60();
+extern void sub_0806F948();
+extern void sub_08077698();
+extern void sub_0805E544();
+extern void sub_080717F8();
+extern void DoExitTransition();
+extern void UnfreezeTime();
+extern void sub_08071A6C();
+extern void sub_08052BB8();
+extern void sub_08079258();
+extern void sub_08071AF0();
+extern void sub_080728AC();
+extern void sub_0807A298();
+extern u32 sub_08079B24();
+extern void sub_08079708();
+extern void sub_080792D8();
+
+typedef struct {
+ u8 frame;
+ u8 dummy;
+ u16 speed;
+} PushFrames;
+
+extern PushFrames gUnk_0811BAF0[];
extern Hitbox gUnk_08114F88;
+extern ScreenTransitionData gUnk_0813AB58;
-// inject
-void sub_08070680(Entity* this) {
- gUnk_0811B9E0[this->action](this);
+void DoPlayerAction(Entity* this) {
+ sPlayerActions[this->action](this);
}
-void sub_08070698(Entity* this) {
+void PlayerInit(Entity* this) {
Entity* ent;
gPlayerState.field_0x0[0] = 0xff;
- gPlayerState.field_0x16[0] = gPlayerEntity.x.HALF.HI;
- gPlayerState.field_0x16[1] = gPlayerEntity.y.HALF.HI;
- this->flags = this->flags | 0x80;
+ gPlayerState.startPosX = gPlayerEntity.x.HALF.HI;
+ gPlayerState.startPosY = gPlayerEntity.y.HALF.HI;
+ this->flags |= 0x80;
this->spritePriority.b0 = 0xc;
this->spritePriority.b1 = 1;
this->spriteSettings.b.shadow = 1;
@@ -65,7 +93,7 @@ void sub_08070698(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);
}
@@ -74,9 +102,7 @@ void sub_08070698(Entity* this) {
}
// PlayerState.flags need to be 100% before this one can reasonably be done
-NONMATCH("asm/non_matching/player/sub_08070794.s", void sub_08070794(Entity* this)) {
-}
-END_NONMATCH
+ASM_FUNC("asm/non_matching/player/sub_08070794.s", void PlayerNormal(Entity* this))
void sub_08070BEC(Entity* this, u32 r0) {
if (r0 & 1)
@@ -88,12 +114,12 @@ void sub_08070BEC(Entity* this, u32 r0) {
sub_08079E08();
}
-void sub_08070C10(Entity* this) {
- gPlayerState.field_0xd[0] = 0xFF;
+void PlayerFall(Entity* this) {
+ gPlayerState.field_0xd = 0xFF;
gPlayerState.pushedObject = 0x80;
gPlayerState.field_0xa8 = 10;
- gUnk_0811BA60[this->previousActionFlag](this);
+ gUnk_0811BA60[this->subAction](this);
}
void sub_08070C3C(Entity* this) {
@@ -111,13 +137,13 @@ void sub_08070C3C(Entity* this) {
else
gPlayerState.field_0x8 = 0x1b8;
- this->previousActionFlag++;
+ this->subAction++;
this->flags &= ~0x80;
this->spritePriority.b1 = 0;
ResetPlayer();
sub_0807A108();
- SoundReq(0x7b);
- SoundReq(0x85);
+ SoundReq(SFX_PLY_VO7);
+ SoundReq(SFX_FALL_HOLE);
}
void sub_08070CB4(Entity* this) {
@@ -128,16 +154,16 @@ void sub_08070CB4(Entity* this) {
this->spriteSettings.b.draw = 0;
} else {
gPlayerState.flags.all &= ~(0x4 | 0x8000);
- sub_08079458();
+ RespawnPlayer();
gPlayerState.field_0xa = 0;
- this->hurtBlinkTime = 0x20;
+ this->iframes = 32;
ModHealth(-2);
}
}
}
-void sub_08070D20(Entity* this) {
- gUnk_0811BA68[this->previousActionFlag](this);
+void PlayerBounce(Entity* this) {
+ gUnk_0811BA68[this->subAction](this);
}
void sub_08070D38(Entity* this) {
@@ -145,7 +171,7 @@ void sub_08070D38(Entity* this) {
this->direction = ((this->animationState & 0xe) << 2) ^ 0x10;
this->speed = 0x100;
this->field_0x42 = 0;
- this->previousActionFlag++;
+ this->subAction++;
this->actionDelay = gPlayerState.field_0x38;
this->spriteIndex = 1;
@@ -201,7 +227,7 @@ NONMATCH("asm/non_matching/player/sub_08070DC4.s", void sub_08070DC4(Entity* thi
this->spriteIndex = 1;
this->actionDelay = 8;
- this->previousActionFlag++;
+ this->subAction++;
if ((gPlayerState.flags.all & 0x80) == 0)
gPlayerState.field_0x8 = 0x100;
@@ -224,7 +250,7 @@ void sub_08070E9C(Entity* this) {
gPlayerState.field_0x27[0] = 4;
gPlayerState.field_0xa8 = 0x13;
sub_0807A1B8();
- gUnk_0811BA74[this->previousActionFlag](this);
+ gUnk_0811BA74[this->subAction](this);
}
}
@@ -232,7 +258,7 @@ void sub_08070EDC(Entity* this) {
this->scriptedScene = 2;
if ((gTextBox.doTextBox & 0x7f) != 0)
- this->previousActionFlag = 1;
+ this->subAction = 1;
if ((gPlayerState.flags.all & 0x80) == 0)
sub_08079938();
@@ -248,13 +274,13 @@ void sub_08070f24(Entity* this) {
}
}
-void sub_08070F50(Entity* this) {
+void PlayerItemGet(Entity* this) {
Entity* child;
u8* temp; // todo: retype
gPlayerState.field_0xa8 = 0x15;
this->flags &= ~(0x80);
- gUnk_0811BA7C[this->previousActionFlag](this);
+ gUnk_0811BA7C[this->subAction](this);
child = this->attachedEntity;
if (child != NULL) {
@@ -275,7 +301,7 @@ void sub_08070FA4(Entity* this) {
gPlayerState.jumpStatus = 0;
if ((gPlayerState.flags.all & 0x80) == 0) {
- if ((gPlayerState.flags.all & 0x8) != 0) {
+ if (gPlayerState.flags.all & 0x8) {
if (sub_080542AC(gPlayerState.field_0x38)) {
temp = 0x45e;
} else {
@@ -291,16 +317,15 @@ void sub_08070FA4(Entity* this) {
gPlayerState.field_0x8 = temp;
}
- this->previousActionFlag = 1;
+ this->subAction = 1;
ResetPlayer();
sub_08078F60();
}
void sub_08071020(Entity* this) {
UpdateAnimationSingleFrame(this);
- if (this->frames.all != 0) {
- this->previousActionFlag = 2;
- }
+ if (this->frames.all != 0)
+ this->subAction = 2;
}
void sub_08071038(Entity* this) {
@@ -310,24 +335,24 @@ void sub_08071038(Entity* this) {
if (sub_08078EFC() || (gTextBox.doTextBox & 0x7f))
return;
- if ((this->frames.all & 0x80) != 0) {
+ if (this->frames.all & 0x80) {
this->attachedEntity = 0;
this->field_0x42 = 0;
- this->hurtBlinkTime = 0xf8;
+ this->iframes = 248;
gPlayerState.jumpStatus = 0;
sub_080791D0();
}
}
-void sub_08071084(Entity* this) {
+void PlayerJump(Entity* this) {
gPlayerState.field_0xa8 = 0xb;
- gUnk_0811BA88[this->previousActionFlag](this);
+ gUnk_0811BA88[this->subAction](this);
}
void sub_080710A8(Entity* this) {
u32 temp;
- this->previousActionFlag++;
+ this->subAction++;
gPlayerState.flags.all |= 1;
gPlayerState.flags.all &= ~(0x400 | 0x800);
@@ -353,10 +378,10 @@ void sub_080710A8(Entity* this) {
asm("lsl r0, r0, #0x4");
this->field_0x20 = (temp - 4) * 64 * 64;
- this->speed = 0x100;
+ this->speed = 256;
sub_0807A108();
- SoundReq(0x7c);
- SoundReq(0x78);
+ SoundReq(SFX_PLY_JUMP);
+ SoundReq(SFX_PLY_VO4);
}
void sub_08071130(Entity* this) {
@@ -367,7 +392,7 @@ void sub_08071130(Entity* this) {
if (gPlayerState.field_0x1a[1] == 0) {
UpdateAnimationSingleFrame(this);
- if ((this->frames.all & 1))
+ if (this->frames.all & 1)
return;
}
@@ -401,7 +426,7 @@ void sub_08071130(Entity* this) {
this->actionDelay = 6;
if (((gPlayerState.heldObject | gPlayerState.keepFacing) == 0) && ((gPlayerState.flags.all & 0x80) == 0)) {
- if ((gPlayerState.flags.all & 0x8) != 0) {
+ if (gPlayerState.flags.all & 0x8) {
gPlayerState.field_0x8 = 0x424;
} else {
gPlayerState.field_0x8 = 0x820;
@@ -409,10 +434,10 @@ void sub_08071130(Entity* this) {
this->animIndex = 0xff;
}
- this->previousActionFlag++;
+ this->subAction++;
sub_08078F60();
this->field_0x42 = 0;
- SoundReq(0x7d);
+ SoundReq(SFX_PLY_LAND);
}
void sub_08071208(Entity* this) {
@@ -428,33 +453,31 @@ void sub_08071208(Entity* this) {
}
}
-void sub_08071248(Entity* this) {
+void PlayerDrown(Entity* this) {
gPlayerState.field_0xa8 = 0x16;
gPlayerState.flags.all |= 4;
this->flags &= ~0x80;
- gUnk_0811BA94[this->previousActionFlag](this);
+ gUnk_0811BA94[this->subAction](this);
}
void sub_0807127C(Entity* this) {
- this->previousActionFlag = 1;
+ this->subAction = 1;
this->spritePriority.b1 = 0;
- if ((gPlayerState.flags.all & 0x80) != 0) {
+ if (gPlayerState.flags.all & 0x80) {
this->actionDelay = 0x3c;
gPlayerState.field_0x8 = 0xc19;
SoundReq(0x84);
} else {
- if ((gPlayerState.flags.all & 0x10000) == 0) {
+ if ((gPlayerState.flags.all & 0x10000) == 0)
sub_08004168(this);
- }
CreateFx(this, 11, 0);
- if ((gPlayerState.flags.all & 8) == 0) {
+ if ((gPlayerState.flags.all & 8) == 0)
gPlayerState.field_0x8 = 0x72c;
- } else {
+ else
gPlayerState.field_0x8 = 0x44c;
- }
}
ResetPlayer();
}
@@ -480,28 +503,29 @@ void sub_080712F0(Entity* this) {
return;
this->field_0x42 = 0;
- this->hurtBlinkTime = 0x20;
+ this->iframes = 32;
this->spritePriority.b1 = 1;
this->spriteSettings.b.draw = FALSE;
- gPlayerState.flags.all &= ~(0x4);
- sub_08079458();
+ gPlayerState.flags.all &= ~0x4;
+ RespawnPlayer();
}
-void sub_08071380(Entity* this) {
+static void PlayerUsePortal(Entity* this) {
gPlayerState.field_0xa8 = 0xe;
- gUnk_0811BA9C[this->previousActionFlag](this);
+ gUnk_0811BA9C[this->subAction](this);
- if ((this->previousActionFlag == 7) || (this->previousActionFlag < 3))
+ // probably a switch
+ if ((this->subAction == 7) || (this->subAction < 3))
return;
if ((gPlayerState.flags.all & 0x20) == 0)
return;
- if ((gInput.newKeys & 0x102) == 0)
+ if ((gInput.newKeys & (0x100 | 0x2)) == 0)
return;
- if (CheckIsDungeon() || gArea.field_0x17 == 3) {
- this->previousActionFlag = 7;
+ if (CheckIsDungeon() || gArea.curPortalType == 3) {
+ this->subAction = 7;
this->actionDelay = 30;
DoFade(7, 16);
SoundReq(0xf8);
@@ -510,19 +534,19 @@ void sub_08071380(Entity* this) {
}
}
-void sub_08071400(Entity* this) {
+static void PortalJumpOnUpdate(Entity* this) {
u16 x;
u16 y;
- this->flags &= ~(0x80);
+ this->flags &= ~0x80;
this->field_0x42 = 0;
- x = gArea.field_0x12;
- y = gArea.field_0x14;
+ x = gArea.curPortalX;
+ y = gArea.curPortalY;
if ((this->x.HALF.HI != x) || (this->y.HALF.HI != y)) {
- this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, gArea.field_0x12, gArea.field_0x14);
- this->speed = 0x100;
+ this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, gArea.curPortalX, gArea.curPortalY);
+ this->speed = 256;
sub_08079E08();
}
@@ -531,17 +555,542 @@ void sub_08071400(Entity* this) {
if (gPlayerState.jumpStatus == 0) {
gPlayerState.flags.all |= 0x20;
- this->previousActionFlag = 1;
+ this->subAction = 1;
this->animationState = 4;
this->spriteSettings.b.flipX = FALSE;
- if (gArea.field_0x17 == 4) {
+ if (gArea.curPortalType == 4) {
gPlayerState.field_0x8 = 0x52c;
}
}
this->actionDelay = 8;
- if (gArea.field_0x17 != 3) {
+ if (gArea.curPortalType != 3) {
this->spritePriority.b0 = 3;
}
}
+
+static void PortalStandUpdate(Entity* this) {
+ switch (gArea.curPortalType) {
+ case 4:
+ case 5:
+ sub_0806F948(&gPlayerEntity);
+ break;
+ }
+
+ if ((gPlayerState.field_0xd & 0x84) == 0) {
+ if (this->direction != gPlayerState.field_0xd) {
+ this->actionDelay = 8;
+ }
+ if (--this->actionDelay == 0xff) {
+ this->direction = gPlayerState.field_0xd;
+ this->animationState = this->direction >> 2;
+ this->field_0x20 = 0x20000;
+ this->speed = 256;
+ this->action = 9;
+ this->subAction = 7;
+ this->field_0xf = 0;
+ gPlayerState.field_0x8 = (gPlayerState.flags.all & 8) ? 0x41C : 0x80C;
+ gPlayerState.flags.all &= ~0x20;
+ return;
+ }
+ this->direction = gPlayerState.field_0xd;
+ } else {
+ this->actionDelay = 8;
+ }
+
+ if (gArea.curPortalType == 4) {
+ if (this->frames.all == 0) {
+ UpdateAnimationSingleFrame(this);
+ return;
+ }
+ } else {
+ sub_08077698(this);
+ }
+ sub_08079938();
+}
+
+static void PortalActivateInit(Entity* this) {
+ gRoomControls.cameraTarget = NULL;
+ gUnk_02034490[0] = 1;
+ this->subAction = 3;
+ this->field_0xf = 0x1e;
+ gPlayerState.field_0x8 = 0x738;
+ CreateObjectWithParent(this, 6, 1, 0);
+ sub_08077B20();
+ sub_0805E544();
+}
+
+static void PortalActivateUpdate(Entity* this) {
+ if (this->field_0xf)
+ return;
+
+ UpdateAnimationSingleFrame(this);
+
+ if (gPlayerState.flags.all & 0x80)
+ this->subAction = 4;
+}
+
+static void PortalShrinkInit(Entity* this) {
+ this->subAction = 5;
+ this->spritePriority.b1 = 0;
+ this->field_0xf = 0;
+ this->spriteRendering.b0 = 3;
+ *(u32*)&this->field_0x80.HWORD = 0x100;
+ *(u32*)&this->cutsceneBeh = 0x100;
+ sub_0805EC9C(this, 0x100, 0x100, 0);
+ gPlayerState.field_0x8 = 0x2c3;
+ gPlayerState.flags.all |= 0x80;
+ SoundReq(0x16f);
+}
+
+// horrible
+ASM_FUNC("asm/non_matching/player/sub_08071634.s", static void PortalShrinkUpdate(Entity* this))
+
+static void PortalEnterUpdate(Entity* this) {
+ if (this->actionDelay == 0) {
+ if (sub_08003FC4(this, 0x2000))
+ return;
+
+ this->spriteSettings.b.draw = FALSE;
+
+ if (gArea.curPortalType == 3) {
+ if (--this->field_0xf == 0)
+ sub_080717F8(this);
+ return;
+ }
+ if (gArea.curPortalType == 6)
+ DoExitTransition(&gUnk_0813AB58);
+ else
+ gArea.playShrinkSeq = 1;
+
+ return;
+ }
+ this->actionDelay--;
+}
+
+static void PortalUnknownUpdate(Entity* this) {
+ if (gFadeControl.active)
+ return;
+
+ if (this->actionDelay != 0) {
+ this->actionDelay--;
+ return;
+ }
+
+ sub_080717F8(this);
+ sub_080500F4(0x10);
+}
+
+extern s16 gUnk_0811BAC4[];
+
+void sub_080717F8(Entity* this) {
+ u32 x;
+ u32 y;
+ this->animationState = gArea.curPortalExitDirection << 1;
+ this->x.HALF.HI = gArea.curPortalX + gUnk_0811BAC4[gArea.curPortalExitDirection * 2];
+ this->y.HALF.HI = gArea.curPortalY + gUnk_0811BAC4[gArea.curPortalExitDirection * 2 + 1];
+ gArea.unk1A = 0xb4;
+ gUnk_02034490[0] = 0;
+ this->action = 9;
+ this->subAction = 0;
+ gPlayerState.flags.all = (gPlayerState.flags.all & ~0x20) | 0x80;
+ sub_0805EC60(this);
+ UnfreezeTime();
+}
+
+void PlayerTalkEzlo(Entity* this) {
+ if (sub_08078EFC()) {
+ sub_08056360();
+ sub_08071A6C();
+ } else {
+ gPlayerState.field_0xa8 = 0x13;
+ this->flags &= ~0x80;
+ gUnk_0811BAD4[this->subAction](this);
+ }
+}
+
+void sub_080718A0(Entity* this) {
+ ResetPlayer();
+ gUnk_03000B80.filler[0x63] = 0;
+ this->iframes = 0;
+ gUnk_03003DC0.unk0 = 6;
+ this->scriptedScene = 6;
+
+ if (gPlayerState.flags.all & 0x80) {
+ this->subAction = 2;
+ this->spritePriority.b1 = 0;
+ sub_08052BB8();
+ return;
+ }
+
+ if (gPlayerState.jumpStatus == 0) {
+ this->subAction++;
+
+ if (this->animationState == 2)
+ gPlayerState.field_0x8 = 0x3ca;
+ else
+ gPlayerState.field_0x8 = 0x3c6;
+
+ this->spriteSettings.b.flipX = 0;
+ return;
+ }
+
+ if (!sub_08003FC4(this, 0x2000))
+ gPlayerState.jumpStatus = 0;
+}
+
+void sub_0807193C(Entity* this) {
+ Entity* child;
+
+ UpdateAnimationSingleFrame(this);
+ if (this->frames.all & 0x80) {
+ this->subAction++;
+ child = CreateObjectWithParent(this, 6, 0, 0);
+ this->attachedEntity = child;
+ if (child != NULL) {
+ if (this->animationState == 2)
+ gPlayerState.field_0x8 = 0x3cc;
+ else
+ gPlayerState.field_0x8 = 0x3c7;
+ sub_08052BB8();
+ }
+ }
+}
+
+void sub_08071990(Entity* this) {
+ u32 temp;
+
+ if ((gTextBox.doTextBox & 0x7f) == 0) {
+ this->subAction++;
+
+ if ((gPlayerState.flags.all & 0x80) == 0) {
+ if (this->animationState == 2)
+ gPlayerState.field_0x8 = 0x3cd;
+ else
+ gPlayerState.field_0x8 = 0x3c9;
+ } else {
+ sub_08071A6C();
+ sub_08079258();
+ }
+ return;
+ }
+
+ if (gPlayerState.flags.all & 0x80)
+ return;
+
+ if (this->animationState == 2)
+ temp = 4;
+ else
+ temp = 0;
+
+ if (this->attachedEntity->actionDelay != 0) {
+ if ((u8)(temp + 200) != this->animIndex) {
+ gPlayerState.field_0x8 = temp + 0x3c8;
+ return;
+ }
+ } else {
+ if ((u8)(temp + 199) != this->animIndex) {
+ gPlayerState.field_0x8 = temp + 0x3c7;
+ return;
+ }
+ }
+ UpdateAnimationSingleFrame(this);
+}
+
+void sub_08071A4C(Entity* this) {
+ UpdateAnimationSingleFrame(this);
+ if (this->frames.all & 0x80) {
+ sub_08071A6C();
+ sub_0807921C();
+ }
+}
+
+void sub_08071A6C(void) {
+ gUnk_03003DC0.unk0 = 0;
+ gPlayerEntity.scriptedScene = gPlayerEntity.scriptedScene2;
+}
+
+void PlayerPush(Entity* this) {
+ gPlayerState.field_0xa8 = 0x19;
+ gUnk_0811BAE4[this->subAction](this);
+}
+
+void sub_08071AB0(Entity* this) {
+ u32 speed;
+
+ this->subAction++;
+ gPlayerState.flags.all |= 1;
+ if (this->type == 1) {
+ this->speed = 0;
+ this->actionDelay = 0;
+ this->field_0xf = 1;
+ } else {
+ this->speed = (gPlayerState.flags.all & 0x80) ? 64 : 128;
+ }
+ sub_08071AF0(this);
+}
+
+void sub_08071AF0(Entity* this) {
+ gPlayerState.field_0x80 = 0;
+ UpdateAnimationSingleFrame(this);
+ if (this->type == 1) {
+ if (--this->field_0xf == 0) {
+ if (gUnk_0811BAF0[this->actionDelay].frame != 0xff) {
+ this->field_0xf = gUnk_0811BAF0[this->actionDelay].frame;
+ this->speed = gUnk_0811BAF0[this->actionDelay].speed;
+ this->actionDelay++;
+ } else {
+ this->subAction++;
+ return;
+ }
+ }
+ } else {
+ gPlayerState.pushedObject--;
+ if ((gPlayerState.pushedObject & 0x7f) == 0) {
+ this->subAction++;
+ }
+ }
+ sub_08079E08();
+}
+
+void sub_08071B60(Entity* this) {
+ gPlayerState.pushedObject = 2;
+ gPlayerState.flags.all &= ~0x1;
+ this->type = 0;
+ this->field_0x42 = 0;
+ sub_080728AC(this);
+ this->field_0xf = 6;
+ if ((gPlayerState.flags.all & 0x80) == 0) {
+ gPlayerState.field_0x8 = 0x104;
+ this->spriteIndex = 3;
+ InitAnimationForceUpdate(this, (this->animationState >> 1) + 0x3c);
+ }
+}
+
+extern void (*const gUnk_0811BB2C[])(Entity*);
+
+void PlayerMinishDie(Entity* this) {
+ this->flags &= ~0x80;
+ gUnk_0811BB2C[this->subAction](this);
+ gPlayerState.field_0xa8 = 0x12;
+}
+
+void sub_08071BDC(Entity* this) {
+ u32 temp;
+
+ if (gPlayerState.flags.all & (0x10 | 0x100))
+ return;
+
+ if (sub_08003FC4(this, 0x2000)) {
+ if ((gPlayerState.flags.all & 8) != 0)
+ gPlayerState.field_0x8 = 0x420;
+ else
+ gPlayerState.field_0x8 = 0x810;
+ return;
+ }
+
+ gPlayerState.playerAction = 0;
+ if (gPlayerState.flags.all & 0x80) {
+ if ((u8)(gPlayerState.field_0x10[2] - 8) < 3) {
+ sub_0807A298(this);
+ RespawnPlayer();
+ this->action = 10;
+ }
+ temp = 0xc1a;
+ } else {
+ temp = (gPlayerState.flags.all & 8) ? 0x459 : 0x1bc;
+ }
+ gPlayerState.field_0x8 = temp;
+
+ gPlayerState.flags.all &= ~(0x1000000 | 0x200000 | 0x40000 | 0x800 | 0x400 | 0x100 | 0x1);
+ this->subAction = 1;
+ this->animationState = 4;
+ this->spritePriority.b1 = 1;
+ this->spriteSettings.b.draw = 3;
+ gPlayerState.jumpStatus = 0;
+ gPlayerState.pushedObject = 0;
+ sub_0800451C(this);
+ ResetPlayer();
+ SoundReq(0x87);
+}
+
+void sub_08071CAC(Entity* this) {
+ UpdateAnimationSingleFrame(this);
+ if (this->frames.all & 0x80) {
+ u32 temp;
+ if ((gPlayerState.flags.all & 0x80) == 0)
+ temp = (gPlayerState.flags.all & 8) ? 0x45a : 0x2bd;
+ else
+ temp = 0xc1b;
+ gPlayerState.field_0x8 = temp;
+
+ this->subAction = 2;
+ this->actionDelay = 0xf0;
+ SoundReq(0x7b);
+ }
+}
+
+void sub_08071D04(Entity* this) {
+ int idx;
+ int deltaHealth;
+
+ UpdateAnimationSingleFrame(this);
+ if (this->frames.all == 0)
+ return;
+
+ deltaHealth = 0;
+ idx = GetBottleContaining(0x28);
+ if (idx != 0) {
+ gSave.stats.bottles[idx - 1] = 0x20;
+ CreateObject(0x40, 0x60, 2);
+ deltaHealth = 32;
+ }
+
+ if (deltaHealth != 0) {
+ ModHealth(deltaHealth);
+ this->subAction = 3;
+ gPlayerState.field_0x3c[0] = 0;
+ this->direction = 0xff;
+ this->speed = 0;
+ this->field_0x20 = 0x18000;
+ gPlayerState.jumpStatus = 1;
+ gPlayerState.swimState = 0;
+ return;
+ }
+
+ gScreenTransition.field_0x4[1] = 1;
+}
+
+void sub_08071D80(Entity* this) {
+ UpdateAnimationSingleFrame(this);
+ gPlayerState.field_0x14 = 1;
+ sub_08073904(this);
+ if ((gPlayerState.jumpStatus & 7) == 3) {
+ gPlayerState.jumpStatus = 0;
+ this->iframes = 226;
+ UnfreezeTime();
+ sub_080791D0();
+ }
+}
+
+void sub_08071DB8(Entity* this) {
+ gUnk_0811BB3C[this->subAction](this);
+}
+
+void sub_08071DD0(Entity* this) {
+ this->actionDelay = gPlayerState.field_0x38;
+ if (gPlayerState.field_0x39 != 0) {
+ gPlayerState.field_0x39 = 0;
+ this->subAction = 2;
+ gPlayerState.field_0x8 = 0x100;
+ } else {
+ this->subAction = 1;
+ gPlayerState.field_0x8 = 0x114;
+ }
+}
+
+void sub_08071E04(Entity* this) {
+ if ((this->height.WORD != 0) && (gPlayerState.field_0x14 == '\0')) {
+ sub_0807A1B8();
+ if (gPlayerState.field_0x10[2] == 1) {
+ gPlayerState.field_0x10[1] = 7;
+ gPlayerState.flags.all |= 0x200;
+ sub_080791BC();
+ return;
+ }
+ }
+
+ UpdateAnimationSingleFrame(this);
+ if (sub_08079B24() == 0) {
+ sub_08079708(this);
+ return;
+ }
+
+ sub_080792D8();
+ if (sub_0807953C())
+ this->actionDelay -= 2;
+ else
+ this->actionDelay -= 1;
+
+ if ((s8)this->actionDelay < 1)
+ sub_080791BC();
+}
+
+void sub_08071E74(Entity* this) {
+ u32 temp;
+
+ sub_08003FC4(this, 0x2000);
+ sub_08079E08();
+ temp = this->actionDelay--;
+ if (temp == 0)
+ sub_080791BC();
+}
+
+void PlayerInit(Entity*);
+void PlayerNormal(Entity*);
+void PlayerInit(Entity*);
+void PlayerFall(Entity*);
+void PlayerJump(Entity*);
+void PlayerPush(Entity*);
+void PlayerBounce(Entity*);
+void sub_08070E9C(Entity*);
+void PlayerItemGet(Entity*);
+void PlayerMinish(Entity*);
+void PlayerMinishDie(Entity*);
+void sub_08071DB8(Entity*);
+void PlayerEmptyBottle(Entity*);
+void PlayerFrozen(Entity*);
+void sub_0807204C(Entity*);
+void sub_080720DC(Entity*);
+void PlayerPull(Entity*);
+void PlayerLava(Entity*);
+void PlayerWarp(Entity*);
+void sub_08072454(Entity*);
+void PlayerDrown(Entity*);
+void PlayerUsePortal(Entity*);
+void PlayerTalkEzlo(Entity*);
+void PlayerRoomTransition(Entity*);
+void PlayerRoll(Entity*);
+void sub_080728AC(Entity*);
+void PlayerInHole(Entity*);
+void sub_08072C9C(Entity*);
+void sub_08074C44(Entity*);
+void sub_08072F34(Entity*);
+void PlayerUseEntrance(Entity*);
+void PlayerParachute(Entity*);
+
+static void (*const sPlayerActions[])(Entity*) = {
+ [PLAYER_INIT] = PlayerInit,
+ [PLAYER_NORMAL] = PlayerNormal,
+ [PLAYER_DUMMY] = PlayerInit,
+ [PLAYER_FALL] = PlayerFall,
+ [PLAYER_JUMP] = PlayerJump,
+ [PLAYER_PUSH] = PlayerPush,
+ [PLAYER_BOUNCE] = PlayerBounce,
+ [PLAYER_08070E9C] = sub_08070E9C,
+ [PLAYER_ITEMGET] = PlayerItemGet,
+ [PLAYER_MINISH] = PlayerMinish,
+ [PLAYER_MINISHDIE] = PlayerMinishDie,
+ [PLAYER_08071DB8] = sub_08071DB8,
+ [PLAYER_EMPTYBOTTLE] = PlayerEmptyBottle,
+ [PLAYER_FROZEN] = PlayerFrozen,
+ [PLAYER_0807204C] = sub_0807204C,
+ [PLAYER_080720DC] = sub_080720DC,
+ [PLAYER_PULL] = PlayerPull,
+ [PLAYER_LAVA] = PlayerLava,
+ [PLAYER_WARP] = PlayerWarp,
+ [PLAYER_08072454] = sub_08072454,
+ [PLAYER_DROWN] = PlayerDrown,
+ [PLAYER_USEPORTAL] = PlayerUsePortal,
+ [PLAYER_TALKEZLO] = PlayerTalkEzlo,
+ [PLAYER_ROOMTRANSITION] = PlayerRoomTransition,
+ [PLAYER_ROLL] = PlayerRoll,
+ [PLAYER_080728AC] = sub_080728AC,
+ [PLAYER_INHOLE] = PlayerInHole,
+ [PLAYER_08072C9C] = sub_08072C9C,
+ [PLAYER_08074C44] = sub_08074C44,
+ [PLAYER_08072F34] = sub_08072F34,
+ [PLAYER_USEENTRANCE] = PlayerUseEntrance,
+ [PLAYER_PARACHUTE] = PlayerParachute,
+};
diff --git a/src/playerItem.c b/src/playerItem.c
index 364502d0..7eca5211 100644
--- a/src/playerItem.c
+++ b/src/playerItem.c
@@ -1,4 +1,6 @@
-extern void DeleteEntity();
+#include "global.h"
+#include "functions.h"
+
extern void sub_080A7544();
extern void sub_0801B188();
extern void sub_0801B45C();
diff --git a/src/position.c b/src/position.c
deleted file mode 100644
index 628042c3..00000000
--- a/src/position.c
+++ /dev/null
@@ -1,51 +0,0 @@
-#include "global.h"
-#include "entity.h"
-#include "position.h"
-#include "functions.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 bd520be3..0797da1d 100644
--- a/src/room.c
+++ b/src/room.c
@@ -1,8 +1,8 @@
#include "global.h"
+#include "audio.h"
#include "entity.h"
#include "area.h"
#include "room.h"
-#include "functions.h"
#include "flags.h"
#include "npc.h"
#include "player.h"
@@ -11,6 +11,8 @@
#include "structures.h"
#include "save.h"
#include "script.h"
+#include "random.h"
+#include "functions.h"
void sub_0804B3C4(void* arg0) {
sub_0804B29C(arg0);
@@ -441,8 +443,6 @@ u32 sub_0804B8B0(void) {
return 1;
}
-extern void* script_08010A5C[];
-
void sub_0804B8F0(void) {
if (CheckLocalFlag(0x91)) {
ClearLocalFlag(0x91);
@@ -2236,12 +2236,12 @@ void sub_0804CD48(void) {
gFadeControl.active = 0;
gUsedPalettes = 0;
*(u16*)0x5000000 = 0x7fff;
- sub_0801DA90(1);
+ DispReset(1);
}
if (CheckGlobalFlag(LV1_CLEAR)) {
LoadRoomEntityList(&gUnk_080DF94C);
} else {
- SoundReq(0x80100000);
+ SoundReq(SONG_RESET_UNK);
gArea.musicIndex = gArea.pMusicIndex;
}
}
@@ -2429,7 +2429,7 @@ void sub_0804CED8(void) {
sub_0807AABC(&gPlayerEntity);
LoadRoomEntityList(&gUnk_080E1814);
} else {
- SoundReq(0x80100000);
+ SoundReq(SONG_RESET_UNK);
gArea.musicIndex = gArea.pMusicIndex;
}
}
@@ -2523,10 +2523,10 @@ void sub_0804CFB0(void) {
if (!CheckFlags(0x31)) {
if (gScreenTransition.field_0x38 == 0) {
- SoundReq(0x80100000);
+ SoundReq(SONG_RESET_UNK);
} else {
if (gScreenTransition.field_0x39 == 0) {
- SoundReq(0x80050000);
+ SoundReq(SONG_STOP);
sub_08078A90(3);
}
}
@@ -2757,12 +2757,11 @@ u32 sub_0804D13C() {
extern EntityData gUnk_080E49F4;
void sub_0804D140(void) {
-
sub_0805308C(0x100);
if (CheckGlobalFlag(LV4_CLEAR)) {
LoadRoomEntityList(&gUnk_080E49F4);
} else {
- SoundReq(0x80100000);
+ SoundReq(SONG_RESET_UNK);
gArea.musicIndex = gArea.pMusicIndex;
}
}
@@ -3091,7 +3090,7 @@ void sub_0804D384(void) {
sub_08078A90(3);
LoadRoomEntityList(&gUnk_080E72E4);
gArea.musicIndex = gArea.pMusicIndex;
- SoundReq(0x80100000);
+ SoundReq(SONG_RESET_UNK);
}
}
}
@@ -3499,7 +3498,7 @@ u32 sub_0804D6C4() {
}
void sub_0804D6C8(void) {
- SoundReq(0x80100000);
+ SoundReq(SONG_RESET_UNK);
gArea.musicIndex = gArea.pMusicIndex;
}
@@ -4308,8 +4307,6 @@ void LoadHyruleTown(void) {
}
}
-extern EntityData gUnk_080EEBAC;
-
void sub_0804E130(void) {
if ((gSave.windcrests & 0x8000000) == 0) {
LoadRoomEntityList(&gUnk_080EEBAC);
@@ -4500,7 +4497,7 @@ void sub_0804E3C4() {
}
r = Random();
index = gUnk_080F0D58[index][r & 0x1f];
- LoadRoomEntityList(gUnk_080F0CB8[index & 0xF]);
+ LoadRoomEntityList((EntityData*)gUnk_080F0CB8[index & 0xF]);
index >>= 4;
r >>= 8;
index = gUnk_080F0E08[index][r & 0x1F];
@@ -4509,7 +4506,7 @@ void sub_0804E3C4() {
index = 0xE;
}
sub_0804B3C4(&gUnk_080F0E1C[index]);
- SoundReq(0x80100000);
+ SoundReq(SONG_RESET_UNK);
}
u32 sub_0804E45C() {
@@ -4717,7 +4714,7 @@ extern EntityData gUnk_080F2E2C;
void sub_0804E6E8(void) {
if (!CheckGlobalFlag(OUTDOOR)) {
gArea.musicIndex = gArea.pMusicIndex;
- SoundReq(0x800b0036);
+ SoundReq(SONG_VOL_RESET | BGM_MINISH_CAP);
}
if (!CheckGlobalFlag(START)) {
LoadRoomEntityList(&gUnk_080F2E2C);
@@ -4734,7 +4731,7 @@ extern EntityData gUnk_080F2EC4;
void sub_0804E72C(void) {
if (!CheckGlobalFlag(OUTDOOR)) {
gArea.musicIndex = gArea.pMusicIndex;
- SoundReq(0x800b0036);
+ SoundReq(SONG_VOL_RESET | BGM_MINISH_CAP);
}
if (!CheckGlobalFlag(START)) {
LoadRoomEntityList(&gUnk_080F2E94);
@@ -4774,7 +4771,6 @@ u32 sub_0804E7D8() {
}
extern EntityData gUnk_080F31D8;
-extern u8 gUnk_02000070;
extern u32 script_08009B30;
void sub_0804E7DC(void) {
@@ -4787,7 +4783,7 @@ void sub_0804E7DC(void) {
}
if (!CheckGlobalFlag(OUTDOOR)) {
gArea.musicIndex = gArea.pMusicIndex;
- SoundReq(0x800b0036);
+ SoundReq(SONG_VOL_RESET | BGM_MINISH_CAP);
}
if ((gPlayerState.flags.all & 8) == 0) {
LoadRoomEntityList(&gUnk_080F31D8);
@@ -5073,8 +5069,6 @@ void sub_0804EC00(void) {
}
}
-extern EntityData gUnk_080F4E10;
-
void sub_0804EC98(void) {
if ((s32)gSave.windcrests > -1) {
LoadRoomEntityList(&gUnk_080F4E10);
@@ -5208,8 +5202,6 @@ extern EntityData gUnk_080F5828;
extern EntityData gUnk_080F5848;
extern EntityData gUnk_080F5788;
-extern u8 gBombBagSizes[];
-
void sub_0804EEBC(void) {
LoadRoomEntityList(&gUnk_080F5758);
if (!GetInventoryValue(0x36) && CheckLocalFlagByOffset(0x200, 0x8f)) {
@@ -5517,8 +5509,6 @@ void sub_0804F25C(void) {
}
}
-extern EntityData gUnk_080F70D8;
-
void sub_0804F2C8(void) {
if ((gSave.windcrests & 0x40000000) == 0) {
LoadRoomEntityList(&gUnk_080F70D8);
@@ -6032,8 +6022,6 @@ void sub_0804FBBC(void) {
}
}
-extern EntityData gUnk_080F9304;
-
void sub_0804FBDC(void) {
if ((gSave.windcrests & 0x2000000) == 0) {
LoadRoomEntityList(&gUnk_080F9304);
@@ -6450,8 +6438,6 @@ void sub_0804FE58(void) {
}
}
-extern EntityData gUnk_080FB004;
-
void sub_0804FEAC(void) {
if ((gSave.windcrests & 0x1000000) == 0) {
LoadRoomEntityList(&gUnk_080FB004);
diff --git a/src/script.c b/src/script.c
index 6e4d577a..0710080c 100644
--- a/src/script.c
+++ b/src/script.c
@@ -1,12 +1,15 @@
#include "global.h"
+#include "audio.h"
#include "flags.h"
#include "entity.h"
#include "area.h"
#include "script.h"
#include "structures.h"
#include "textbox.h"
-#include "functions.h"
+#include "utils.h"
#include "save.h"
+#include "random.h"
+#include "functions.h"
void InitScriptForEntity(Entity*, ScriptExecutionContext*, u16*);
void InitScriptExecutionContext(ScriptExecutionContext* context, u16* script);
@@ -304,9 +307,9 @@ extern ScriptExecutionContext gPlayerScriptExecutionContext;
extern ScriptExecutionContext gScriptExecutionContextArray[0x20];
void InitScriptData(void) {
- MemClear32(&gActiveScriptInfo, sizeof(gActiveScriptInfo));
- MemClear32(&gScriptExecutionContextArray, sizeof(gScriptExecutionContextArray));
- MemClear32(&gPlayerScriptExecutionContext, sizeof(gPlayerScriptExecutionContext));
+ MemClear(&gActiveScriptInfo, sizeof(gActiveScriptInfo));
+ MemClear(&gScriptExecutionContextArray, sizeof(gScriptExecutionContextArray));
+ MemClear(&gPlayerScriptExecutionContext, sizeof(gPlayerScriptExecutionContext));
gActiveScriptInfo.unk_08 = 8;
}
@@ -324,7 +327,7 @@ ScriptExecutionContext* CreateScriptExecutionContext(void) {
}
void DestroyScriptExecutionContext(ScriptExecutionContext* context) {
- MemClear32(context, sizeof(ScriptExecutionContext));
+ MemClear(context, sizeof(ScriptExecutionContext));
}
ScriptExecutionContext* StartCutscene(Entity* entity, u16* script) {
@@ -354,7 +357,7 @@ void UnloadCutsceneData(Entity* entity) {
void StartPlayerScript(u16* script) {
Entity* player;
- MemClear32(&gPlayerScriptExecutionContext, sizeof(gPlayerScriptExecutionContext));
+ MemClear(&gPlayerScriptExecutionContext, sizeof(gPlayerScriptExecutionContext));
gPlayerScriptExecutionContext.scriptInstructionPointer = script;
player = &gPlayerEntity;
*(ScriptExecutionContext**)&player->cutsceneBeh = &gPlayerScriptExecutionContext;
@@ -377,7 +380,7 @@ ScriptExecutionContext* StartCutscene2(Entity* entity, u16* script) {
}
void InitScriptExecutionContext(ScriptExecutionContext* context, u16* script) {
- MemClear32(context, sizeof(ScriptExecutionContext));
+ MemClear(context, sizeof(ScriptExecutionContext));
context->scriptInstructionPointer = script;
}
@@ -701,7 +704,7 @@ void ScriptCommand_CallWithArg(Entity* entity, ScriptExecutionContext* context)
}
void ScriptCommand_LoadRoomEntityList(Entity* entity, ScriptExecutionContext* context) {
- LoadRoomEntityList(GetNextScriptCommandWordAfterCommandMetadata(context->scriptInstructionPointer));
+ LoadRoomEntityList((EntityData*)GetNextScriptCommandWordAfterCommandMetadata(context->scriptInstructionPointer));
}
void ScriptCommand_TestBit(Entity* entity, ScriptExecutionContext* context) {
@@ -853,7 +856,7 @@ void ScriptCommand_BuyItem(Entity* entity, ScriptExecutionContext* context) {
}
void ScriptCommand_0807E48C(Entity* entity, ScriptExecutionContext* context) {
- context->condition = sub_080544DC(context->scriptInstructionPointer[1]);
+ context->condition = GetBottleContaining(context->scriptInstructionPointer[1]);
gActiveScriptInfo.flags |= 1;
}
@@ -1085,7 +1088,7 @@ void ScriptCommand_0807E8E4(Entity* entity, ScriptExecutionContext* context) {
void ScriptCommand_0807E908(Entity* entity, ScriptExecutionContext* context) {
entity->action = context->scriptInstructionPointer[1];
- entity->previousActionFlag = 0;
+ entity->subAction = 0;
}
void ScriptCommand_SetIntVariable(Entity* entity, ScriptExecutionContext* context) {
@@ -1464,7 +1467,7 @@ void ScriptCommand_SoundReq3(Entity* entity, ScriptExecutionContext* context) {
}
void ScriptCommand_SoundReq0x80100000(Entity* entity, ScriptExecutionContext* context) {
- SoundReq(0x80100000);
+ SoundReq(SONG_RESET_UNK);
}
void ScriptCommand_ModRupees(Entity* entity, ScriptExecutionContext* context) {
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 0d14ee1e..00000000
--- a/src/sub_0804AFF4.c
+++ /dev/null
@@ -1,42 +0,0 @@
-#include "global.h"
-
-extern void sub_080186EC();
-extern u32* GetCurrentRoomProperty(u8);
-extern u32 _call_via_r0(u32*);
-extern void sub_0804B16C();
-
-void sub_0804AFF4(void) {
- u32* func;
-
- sub_080186EC();
- func = GetCurrentRoomProperty(5);
- if (func != NULL) {
- _call_via_r0(func);
- }
- func = GetCurrentRoomProperty(7);
- if (func != NULL) {
- _call_via_r0(func);
- }
- sub_0804B16C();
-}
-
-/*
- thumb_func_start sub_0804AFF4
-sub_0804AFF4: @ 0x0804AFF4
- push {lr}
- bl sub_080186EC
- movs r0, #5
- bl GetCurrentRoomProperty
- cmp r0, #0
- beq _0804B008
- bl _call_via_r0
-_0804B008:
- movs r0, #7
- bl GetCurrentRoomProperty
- cmp r0, #0
- beq _0804B016
- bl _call_via_r0
-_0804B016:
- bl sub_0804B16C
- pop {pc}
- */
diff --git a/src/sub_08050008.c b/src/sub_08050008.c
index 6d8e5103..df79883a 100644
--- a/src/sub_08050008.c
+++ b/src/sub_08050008.c
@@ -1,14 +1,10 @@
#include "global.h"
+#include "utils.h"
+#include "structures.h"
extern u32 gUnk_020354C0;
-extern s32 gFadeControl;
-extern void MemClear32(u32, u32, u32);
-void sub_08050008(u32 param_1, u32 param_2, u32 param_3) {
- s32* unk;
-
- MemClear32((u32)&gUnk_020354C0, 128, param_3);
-
- unk = &gFadeControl;
- *(unk + 1) = -1;
+void sub_08050008() {
+ MemClear(&gUnk_020354C0, 128);
+ gFadeControl.field_0x4 = -1;
}
diff --git a/src/sub_08055E08.c b/src/sub_08055E08.c
index 40c1f812..1b97f26f 100644
--- a/src/sub_08055E08.c
+++ b/src/sub_08055E08.c
@@ -3,7 +3,6 @@
#include "room.h"
#include "functions.h"
-extern u32* _call_via_r0(u32* func);
extern void (*const gUnk_080FF420[])();
extern void sub_0804B0B0(u32, u32);
extern void sub_08055B70(u32, u32, u32, u32);
diff --git a/src/sub_0805E374.c b/src/sub_0805E374.c
index 5767e6da..e035ce07 100644
--- a/src/sub_0805E374.c
+++ b/src/sub_0805E374.c
@@ -1,10 +1,12 @@
#include "entity.h"
+#include "structures.h"
+
extern Entity* sub_0805E3A0(Entity*, u32);
-extern u8 gScreenTransition[];
extern u8 gUnk_081091F8[];
extern u8 gUnk_081091EE[];
+
Entity* sub_0805E374(Entity* param_1) {
- u8 r3 = gScreenTransition[0x2C];
+ u8 r3 = gScreenTransition.field_0x24[8];
u8* array = gUnk_081091F8;
if (r3 != '\x02') {
diff --git a/src/sub_0806F9EC.c b/src/sub_0806F9EC.c
deleted file mode 100644
index 9f029530..00000000
--- a/src/sub_0806F9EC.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "global.h"
-
-s32 sub_0806F9EC(s16 param_1, s16 param_2)
-
-{
- int iVar1;
-
- iVar1 = (s32)param_1 * (s32)param_2;
- if (iVar1 < 0) {
- iVar1 = iVar1 + 255;
- }
- return (iVar1 << 8) >> 16;
-}
diff --git a/src/sub_0806FA04.c b/src/sub_0806FA04.c
deleted file mode 100644
index a7eb191a..00000000
--- a/src/sub_0806FA04.c
+++ /dev/null
@@ -1,18 +0,0 @@
-#include "global.h"
-
-extern s32 __divsi3(s32, s32);
-
-s16 sub_0806FA04(s16 param_1, s16 param_2)
-
-{
- s16 sVar1;
- s32 iVar2;
-
- if (param_2 != 0) {
- sVar1 = __divsi3((param_1 << 16) >> 8, param_2);
- iVar2 = sVar1;
- } else {
- iVar2 = 0;
- }
- return iVar2;
-}
diff --git a/src/sub_0806FA24.c b/src/sub_0806FA24.c
deleted file mode 100644
index de614717..00000000
--- a/src/sub_0806FA24.c
+++ /dev/null
@@ -1,10 +0,0 @@
-
-#include "global.h"
-#include "entity.h"
-void PositionRelative(Entity*, Entity*, s32, s32);
-
-void CopyPosition(Entity* param_1, Entity* param_2)
-
-{
- PositionRelative(param_1, param_2, 0, 0);
-}
diff --git a/src/sub_0807B7D8.c b/src/sub_0807B7D8.c
deleted file mode 100644
index 79892047..00000000
--- a/src/sub_0807B7D8.c
+++ /dev/null
@@ -1,18 +0,0 @@
-#include "global.h"
-
-extern void sub_08000152(u32);
-extern void sub_0807B778(u32, u32);
-extern void SetTileType(u32, 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 0e8bde35..fabdc8d9 100644
--- a/src/sub_0807B820.c
+++ b/src/sub_0807B820.c
@@ -1,6 +1,21 @@
#include "global.h"
+#include "functions.h"
-extern void SetTileType(u32, u32, u32);
+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);
@@ -13,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 c29c35d7..00000000
--- a/src/sub_0807B8A8.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include "global.h"
-
-extern void SetTileType(u32, u32, u32);
-
-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 fe373eff..00000000
--- a/src/sub_0807B930.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include "global.h"
-
-extern void SetTileType(u32, u32, u32);
-
-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 7c2afd37..7f3a05c9 100644
--- a/src/sub_0807C998.c
+++ b/src/sub_0807C998.c
@@ -1,11 +1,14 @@
#include "global.h"
-#include "entity.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;
@@ -25,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 8e962960..6a9cf031 100644
--- a/src/textbox.c
+++ b/src/textbox.c
@@ -1,6 +1,8 @@
#include "global.h"
+#include "audio.h"
#include "room.h"
#include "entity.h"
+#include "utils.h"
#include "functions.h"
#include "textbox.h"
#include "structures.h"
@@ -13,11 +15,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*);
@@ -26,8 +31,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;
@@ -83,7 +89,7 @@ void TextboxAtPosition(u32 index, u32 x, u32 y) {
}
void ShowTextbox(u32 index) {
- MemClear32(&gTextBox, 32);
+ MemClear(&gTextBox, 32);
gTextBox.textIndex = index;
gTextBox.textSpeed = 99;
gTextBox.textWindowWidth = 26;
@@ -94,18 +100,18 @@ void ShowTextbox(u32 index) {
}
void MessageInitialize(void) {
- MemClear32(&gTextBox, 32);
- MemClear32(&gUnk_02022780, 168);
- MemClear32(&gUnk_02036A40, 8);
- MemClear32(&gUnk_02036A38, 8);
- MemClear32(&gUnk_02000040, 4);
+ MemClear(&gTextBox, 32);
+ MemClear(&gUnk_02022780, 168);
+ MemClear(&gUnk_02036A40, 8);
+ MemClear(&gUnk_02036A38, 8);
+ MemClear(&gUnk_02000040, 4);
}
void MessageUpdate(void) {
int iVar1;
if (gTextBox.doTextBox == 1) {
- MemClear32((u32*)&gUnk_02022780, sizeof(gUnk_02022780));
+ MemClear((u32*)&gUnk_02022780, sizeof(gUnk_02022780));
sub_080564C8(1);
}
@@ -141,9 +147,9 @@ NONMATCH("asm/non_matching/textbox/sub_080564EC.inc", u32 sub_080564EC(void)) {
u32 i;
char c;
- MemClear32((void*)&gUnk_02036A40, 8);
- MemClear32((void*)&gUnk_02024030, 0x18);
- MemClear32((void*)&gUnk_02022780, 0xa8);
+ MemClear((void*)&gUnk_02036A40, 8);
+ MemClear((void*)&gUnk_02024030, 0x18);
+ MemClear((void*)&gUnk_02022780, 0xa8);
MemCopy(&gTextBox, &gUnk_02022780, 32);
if (gUnk_02022780._2 == 0x63) {
gUnk_02022780._2 = gUnk_02000000->messageSpeed;
@@ -180,7 +186,7 @@ u32 sub_080565B4(void) {
gUnk_02022780._89 = 1;
gUnk_02022780._99 = 1;
sub_08056F88(gUnk_02022780._3[0], gUnk_02022780._53);
- SoundReq(0x65);
+ SoundReq(SFX_TEXTBOX_OPEN);
}
if (sub_08056CC0(1)) {
@@ -195,7 +201,7 @@ u32 sub_080565F8(void) {
gUnk_02022780._89 = 1;
gUnk_02022780._99 = 3;
sub_08056BDC(0);
- SoundReq(0x66);
+ SoundReq(SFX_TEXTBOX_CLOSE);
}
if (sub_08056CC0(-1)) {
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.
+*/