summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAetias <144526980+AetiasHax@users.noreply.github.com>2025-05-29 08:58:56 +0200
committerGitHub <noreply@github.com>2025-05-29 08:58:56 +0200
commita65e5547da4894b8d9aceaee2a81dbebd671ae3e (patch)
tree39fd662766c4eae30755694bdd8dc9c376ca3de4
parent59a5cc5da29bd84680ceeaf2c2eeabe9effb6b6d (diff)
parent2c27f6cb3d98b3a8fe94d631c47767dea4daeda8 (diff)
Merge pull request #96 from AetiasHax/delink-ActorRefill
Decomp `ActorRefill`
-rw-r--r--config/eur/arm9/overlays/ov000/symbols.txt4
-rw-r--r--config/eur/arm9/overlays/ov014/delinks.txt8
-rw-r--r--config/eur/arm9/overlays/ov014/relocs.txt12
-rw-r--r--config/eur/arm9/overlays/ov014/symbols.txt123
-rw-r--r--config/usa/arm9/overlays/ov000/symbols.txt4
-rw-r--r--config/usa/arm9/overlays/ov014/delinks.txt8
-rw-r--r--config/usa/arm9/overlays/ov014/relocs.txt12
-rw-r--r--config/usa/arm9/overlays/ov014/symbols.txt123
-rw-r--r--docs/actors.md15
-rw-r--r--include/Actor/Actor.hpp10
-rw-r--r--include/Actor/ActorType.hpp9
-rw-r--r--include/Actor/Player/ActorRefill.hpp113
-rw-r--r--include/Item/ItemManager.hpp2
-rw-r--r--include/System/Random.hpp2
-rw-r--r--src/00_Core/Item/ItemManager.cpp2
-rw-r--r--src/14_Land/Actor/ActorRupee.cpp11
-rw-r--r--src/14_Land/Actor/Player/ActorRefill.cpp340
17 files changed, 643 insertions, 155 deletions
diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt
index 4758d647..7748f1a0 100644
--- a/config/eur/arm9/overlays/ov000/symbols.txt
+++ b/config/eur/arm9/overlays/ov000/symbols.txt
@@ -146,7 +146,7 @@ func_ov000_0207a038 kind:function(thumb,size=0x102) addr:0x207a038
_ZN19Actor_UnkStruct_012C1Ev kind:function(arm,size=0x4c) addr:0x207a13c
_ZN19Actor_UnkStruct_0a4C1Eiiii kind:function(thumb,size=0x1c) addr:0x207a188
func_ov000_0207a1a4 kind:function(arm,size=0x24) addr:0x207a1a4
-func_ov000_0207a1c8 kind:function(arm,size=0xcc) addr:0x207a1c8
+_ZN19Actor_UnkStruct_0a419func_ov000_0207a1c8EiP5Vec3p kind:function(arm,size=0xcc) addr:0x207a1c8
func_ov000_0207a294 kind:function(thumb,size=0x44) addr:0x207a294
func_ov000_0207a2d8 kind:function(arm,size=0x10) addr:0x207a2d8
func_ov000_0207a2e8 kind:function(thumb,size=0x14) addr:0x207a2e8
@@ -2119,7 +2119,7 @@ _ZN11ItemManager17EquipCollidesWithEP8Cylinderi kind:function(arm,size=0x80) add
_ZN11ItemManager18EquipItem_vfunc_2cEi kind:function(arm,size=0x1c) addr:0x20ad6f8
_ZN11ItemManager12GetEquipItemEi kind:function(arm,size=0x18) addr:0x20ad714
_ZNK11ItemManager7GetAmmoEi kind:function(arm,size=0x10) addr:0x20ad72c
-_ZN11ItemManager8GiveAmmoEit kind:function(arm,size=0x54) addr:0x20ad73c
+_ZN11ItemManager8GiveAmmoEij kind:function(arm,size=0x54) addr:0x20ad73c
_ZN11ItemManager18func_ov00_020ad790Ei kind:function(arm,size=0x150) addr:0x20ad790
_ZNK11ItemManager19GetEquippedShipPartEj kind:function(thumb,size=0x8) addr:0x20ad8e0
_ZN11ItemManager13EquipShipPartEjj kind:function(thumb,size=0x8) addr:0x20ad8e8
diff --git a/config/eur/arm9/overlays/ov014/delinks.txt b/config/eur/arm9/overlays/ov014/delinks.txt
index 60aa7fc6..df6a203b 100644
--- a/config/eur/arm9/overlays/ov014/delinks.txt
+++ b/config/eur/arm9/overlays/ov014/delinks.txt
@@ -12,3 +12,11 @@ src/14_Land/Actor/ActorRupee.cpp:
.ctor start:0x0215591c end:0x02155920
.data start:0x02158994 end:0x02158a94
.bss start:0x0215b1f4 end:0x0215b214
+
+src/14_Land/Actor/Player/ActorRefill.cpp:
+ complete
+ .text start:0x02134e24 end:0x02135940
+ .init start:0x02154c14 end:0x02154d24
+ .ctor start:0x021558ec end:0x021558f0
+ .data start:0x021578b0 end:0x02157d70
+ .bss start:0x0215af94 end:0x0215b034
diff --git a/config/eur/arm9/overlays/ov014/relocs.txt b/config/eur/arm9/overlays/ov014/relocs.txt
index 422bdbad..32eaed4d 100644
--- a/config/eur/arm9/overlays/ov014/relocs.txt
+++ b/config/eur/arm9/overlays/ov014/relocs.txt
@@ -2474,7 +2474,7 @@ from:0x02134efc kind:arm_call to:0x0202e9dc module:main
from:0x02134f08 kind:arm_call to:0x021357bc module:overlay(14)
from:0x02134f10 kind:load to:0x027e0fe0 module:dtcm
from:0x02134f20 kind:arm_call to:0x020c1554 module:overlay(0)
-from:0x02134f50 kind:load to:0x02157cb8 module:overlay(14)
+from:0x02134f50 kind:load to:0x02157cb0 add:8 module:overlay(14)
from:0x02134f5c kind:arm_call to:0x020c1730 module:overlay(0)
from:0x02134f70 kind:arm_call to:0x020c1730 module:overlay(0)
from:0x02134f78 kind:arm_call to:0x0202ea0c module:main
@@ -2527,29 +2527,29 @@ from:0x021354b4 kind:arm_call to:0x0207c1b0 module:overlay(0)
from:0x021354d8 kind:arm_call to:0x0207c1b0 module:overlay(0)
from:0x021354ec kind:load to:0x027e0e58 module:dtcm
from:0x02135504 kind:arm_call to:0x02134f14 module:overlay(14)
-from:0x02135528 kind:load to:0x02157bf8 module:overlay(14)
+from:0x02135528 kind:load to:0x02157bf0 add:8 module:overlay(14)
from:0x02135534 kind:arm_call to:0x02134f84 module:overlay(14)
from:0x02135548 kind:arm_call to:0x02134f84 module:overlay(14)
from:0x02135550 kind:arm_call to:0x0202ea0c module:main
from:0x02135570 kind:arm_call to:0x02134f14 module:overlay(14)
-from:0x02135594 kind:load to:0x02157b38 module:overlay(14)
+from:0x02135594 kind:load to:0x02157b30 add:8 module:overlay(14)
from:0x021355a0 kind:arm_call to:0x02134f84 module:overlay(14)
from:0x021355b4 kind:arm_call to:0x02134f84 module:overlay(14)
from:0x021355bc kind:arm_call to:0x0202ea0c module:main
from:0x021355dc kind:arm_call to:0x02134f14 module:overlay(14)
-from:0x02135600 kind:load to:0x02157a78 module:overlay(14)
+from:0x02135600 kind:load to:0x02157a70 add:8 module:overlay(14)
from:0x0213560c kind:arm_call to:0x02134f84 module:overlay(14)
from:0x02135620 kind:arm_call to:0x02134f84 module:overlay(14)
from:0x02135628 kind:arm_call to:0x0202ea0c module:main
from:0x02135648 kind:arm_call to:0x02134f14 module:overlay(14)
-from:0x0213566c kind:load to:0x021579b8 module:overlay(14)
+from:0x0213566c kind:load to:0x021579b0 add:8 module:overlay(14)
from:0x02135678 kind:arm_call to:0x02134f84 module:overlay(14)
from:0x0213568c kind:arm_call to:0x02134f84 module:overlay(14)
from:0x02135694 kind:arm_call to:0x0202ea0c module:main
from:0x021356a8 kind:arm_call to:0x02134f98 module:overlay(14)
from:0x021357b0 kind:load to:0x027e0764 module:dtcm
from:0x021357c8 kind:arm_call to:0x02134f14 module:overlay(14)
-from:0x021357ec kind:load to:0x021578f8 module:overlay(14)
+from:0x021357ec kind:load to:0x021578f0 add:8 module:overlay(14)
from:0x021357f8 kind:arm_call to:0x02134f84 module:overlay(14)
from:0x0213580c kind:arm_call to:0x02134f84 module:overlay(14)
from:0x02135814 kind:arm_call to:0x0202ea0c module:main
diff --git a/config/eur/arm9/overlays/ov014/symbols.txt b/config/eur/arm9/overlays/ov014/symbols.txt
index 57a2177c..af3f2ed6 100644
--- a/config/eur/arm9/overlays/ov014/symbols.txt
+++ b/config/eur/arm9/overlays/ov014/symbols.txt
@@ -586,42 +586,42 @@ func_ov014_02134c04 kind:function(arm,size=0x8) addr:0x2134c04
func_ov014_02134c0c kind:function(arm,size=0x8) addr:0x2134c0c
func_ov014_02134c14 kind:function(arm,size=0x200) addr:0x2134c14
func_ov014_02134e14 kind:function(arm,size=0x10) addr:0x2134e14
-func_ov014_02134e24 kind:function(arm,size=0x30) addr:0x2134e24
-func_ov014_02134e54 kind:function(arm,size=0x30) addr:0x2134e54
-func_ov014_02134e84 kind:function(arm,size=0x30) addr:0x2134e84
-func_ov014_02134eb4 kind:function(arm,size=0x30) addr:0x2134eb4
-func_ov014_02134ee4 kind:function(arm,size=0x30) addr:0x2134ee4
-func_ov014_02134f14 kind:function(arm,size=0x40) addr:0x2134f14
-func_ov014_02134f54 kind:function(arm,size=0x14) addr:0x2134f54
-func_ov014_02134f68 kind:function(arm,size=0x1c) addr:0x2134f68
-func_ov014_02134f84 kind:function(arm,size=0x14) addr:0x2134f84
-func_ov014_02134f98 kind:function(arm,size=0xf4) addr:0x2134f98
-func_ov014_0213508c kind:function(arm,size=0x2d8) addr:0x213508c
-func_ov014_02135364 kind:function(arm,size=0x54) addr:0x2135364
-func_ov014_021353b8 kind:function(arm,size=0xbc) addr:0x21353b8
-func_ov014_02135474 kind:function(arm,size=0x84) addr:0x2135474
-func_ov014_021354f8 kind:function(arm,size=0x34) addr:0x21354f8
-func_ov014_0213552c kind:function(arm,size=0x14) addr:0x213552c
-func_ov014_02135540 kind:function(arm,size=0x1c) addr:0x2135540
-func_ov014_0213555c kind:function(arm,size=0x8) addr:0x213555c
-func_ov014_02135564 kind:function(arm,size=0x34) addr:0x2135564
-func_ov014_02135598 kind:function(arm,size=0x14) addr:0x2135598
-func_ov014_021355ac kind:function(arm,size=0x1c) addr:0x21355ac
-func_ov014_021355c8 kind:function(arm,size=0x8) addr:0x21355c8
-func_ov014_021355d0 kind:function(arm,size=0x34) addr:0x21355d0
-func_ov014_02135604 kind:function(arm,size=0x14) addr:0x2135604
-func_ov014_02135618 kind:function(arm,size=0x1c) addr:0x2135618
-func_ov014_02135634 kind:function(arm,size=0x8) addr:0x2135634
-func_ov014_0213563c kind:function(arm,size=0x34) addr:0x213563c
-func_ov014_02135670 kind:function(arm,size=0x14) addr:0x2135670
-func_ov014_02135684 kind:function(arm,size=0x1c) addr:0x2135684
-func_ov014_021356a0 kind:function(arm,size=0x114) addr:0x21356a0
-func_ov014_021357b4 kind:function(arm,size=0x8) addr:0x21357b4
-func_ov014_021357bc kind:function(arm,size=0x34) addr:0x21357bc
-func_ov014_021357f0 kind:function(arm,size=0x14) addr:0x21357f0
-func_ov014_02135804 kind:function(arm,size=0x1c) addr:0x2135804
-func_ov014_02135820 kind:function(arm,size=0x118) addr:0x2135820
-func_ov014_02135938 kind:function(arm,size=0x8) addr:0x2135938
+_ZN16ActorRefillBombs6CreateEv kind:function(arm,size=0x30) addr:0x2134e24
+_ZN19ActorRefillBombchus6CreateEv kind:function(arm,size=0x30) addr:0x2134e54
+_ZN17ActorRefillArrows6CreateEv kind:function(arm,size=0x30) addr:0x2134e84
+_ZN15ActorRefillTime6CreateEv kind:function(arm,size=0x30) addr:0x2134eb4
+_ZN9ActorLSTM6CreateEv kind:function(arm,size=0x30) addr:0x2134ee4
+_ZN11ActorRefillC2Ei kind:function(arm,size=0x40) addr:0x2134f14
+_ZN11ActorRefillD1Ev kind:function(arm,size=0x14) addr:0x2134f54
+_ZN11ActorRefillD0Ev kind:function(arm,size=0x1c) addr:0x2134f68
+_ZN11ActorRefillD2Ev kind:function(arm,size=0x14) addr:0x2134f84
+_ZN11ActorRefill8vfunc_08Ev kind:function(arm,size=0xf4) addr:0x2134f98
+_ZN11ActorRefill8vfunc_14Ej kind:function(arm,size=0x2d8) addr:0x213508c
+_ZN11ActorRefill19func_ov014_02135364Ei kind:function(arm,size=0x54) addr:0x2135364
+_ZN11ActorRefill8vfunc_20Eb kind:function(arm,size=0xbc) addr:0x21353b8
+_ZN11ActorRefill19func_ov014_02135474Ev kind:function(arm,size=0x84) addr:0x2135474
+_ZN16ActorRefillBombsC1Ev kind:function(arm,size=0x34) addr:0x21354f8
+_ZN16ActorRefillBombsD1Ev kind:function(arm,size=0x14) addr:0x213552c
+_ZN16ActorRefillBombsD0Ev kind:function(arm,size=0x1c) addr:0x2135540
+_ZN16ActorRefillBombs8vfunc_b4Ev kind:function(arm,size=0x8) addr:0x213555c
+_ZN19ActorRefillBombchusC1Ev kind:function(arm,size=0x34) addr:0x2135564
+_ZN19ActorRefillBombchusD1Ev kind:function(arm,size=0x14) addr:0x2135598
+_ZN19ActorRefillBombchusD0Ev kind:function(arm,size=0x1c) addr:0x21355ac
+_ZN19ActorRefillBombchus8vfunc_b4Ev kind:function(arm,size=0x8) addr:0x21355c8
+_ZN17ActorRefillArrowsC1Ev kind:function(arm,size=0x34) addr:0x21355d0
+_ZN17ActorRefillArrowsD1Ev kind:function(arm,size=0x14) addr:0x2135604
+_ZN17ActorRefillArrowsD0Ev kind:function(arm,size=0x1c) addr:0x2135618
+_ZN17ActorRefillArrows8vfunc_b4Ev kind:function(arm,size=0x8) addr:0x2135634
+_ZN15ActorRefillTimeC1Ev kind:function(arm,size=0x34) addr:0x213563c
+_ZN15ActorRefillTimeD1Ev kind:function(arm,size=0x14) addr:0x2135670
+_ZN15ActorRefillTimeD0Ev kind:function(arm,size=0x1c) addr:0x2135684
+_ZN15ActorRefillTime8vfunc_08Ev kind:function(arm,size=0x114) addr:0x21356a0
+_ZN15ActorRefillTime8vfunc_b4Ev kind:function(arm,size=0x8) addr:0x21357b4
+_ZN9ActorLSTMC1Ev kind:function(arm,size=0x34) addr:0x21357bc
+_ZN9ActorLSTMD1Ev kind:function(arm,size=0x14) addr:0x21357f0
+_ZN9ActorLSTMD0Ev kind:function(arm,size=0x1c) addr:0x2135804
+_ZN9ActorLSTM8vfunc_08Ev kind:function(arm,size=0x118) addr:0x2135820
+_ZN9ActorLSTM8vfunc_b4Ev kind:function(arm,size=0x8) addr:0x2135938
func_ov014_02135940 kind:function(arm,size=0x34) addr:0x2135940
func_ov014_02135974 kind:function(arm,size=0xc4) addr:0x2135974
func_ov014_02135a38 kind:function(arm,size=0xc4) addr:0x2135a38
@@ -1672,7 +1672,7 @@ __sinit_ov014_02154b34 kind:function(arm,size=0x38) addr:0x2154b34
__sinit_ov014_02154b6c kind:function(arm,size=0x38) addr:0x2154b6c
__sinit_ov014_02154ba4 kind:function(arm,size=0x38) addr:0x2154ba4
__sinit_ov014_02154bdc kind:function(arm,size=0x38) addr:0x2154bdc
-__sinit_ov014_02154c14 kind:function(arm,size=0x110) addr:0x2154c14
+__sinit_ActorRefill.cpp kind:function(arm,size=0x110) addr:0x2154c14 local
__sinit_ov014_02154d24 kind:function(arm,size=0x1d8) addr:0x2154d24
__sinit_ov014_02154efc kind:function(arm,size=0x40) addr:0x2154efc
__sinit_ov014_02154f3c kind:function(arm,size=0x40) addr:0x2154f3c
@@ -1846,20 +1846,21 @@ data_ov014_02157768 kind:data(any) addr:0x2157768
data_ov014_0215777c kind:data(any) addr:0x215777c
data_ov014_02157790 kind:data(any) addr:0x2157790
data_ov014_02157824 kind:data(any) addr:0x2157824
-data_ov014_021578b0 kind:data(any) addr:0x21578b0
-data_ov014_021578b4 kind:data(any) addr:0x21578b4
-data_ov014_021578b8 kind:data(any) addr:0x21578b8
-data_ov014_021578bc kind:data(any) addr:0x21578bc
-data_ov014_021578c0 kind:data(any) addr:0x21578c0
-data_ov014_021578c4 kind:data(any) addr:0x21578c4
-data_ov014_021578c8 kind:data(any) addr:0x21578c8
-data_ov014_021578cc kind:data(any) addr:0x21578cc
-data_ov014_021578f8 kind:data(any) addr:0x21578f8
-data_ov014_021579b8 kind:data(any) addr:0x21579b8
-data_ov014_02157a78 kind:data(any) addr:0x2157a78
-data_ov014_02157b38 kind:data(any) addr:0x2157b38
-data_ov014_02157bf8 kind:data(any) addr:0x2157bf8
-data_ov014_02157cb8 kind:data(any) addr:0x2157cb8
+@570 kind:data(any) addr:0x21578b0 local
+@569 kind:data(any) addr:0x21578b4 local
+@568 kind:data(any) addr:0x21578b8 local
+@567 kind:data(any) addr:0x21578bc local
+@566 kind:data(any) addr:0x21578c0 local
+@565 kind:data(any) addr:0x21578c4 local
+@564 kind:data(any) addr:0x21578c8 local
+@563 kind:data(any) addr:0x21578cc local
+sShipTypes kind:data(any) addr:0x21578d0 local
+_ZTV9ActorLSTM kind:data(any) addr:0x21578f0
+_ZTV15ActorRefillTime kind:data(any) addr:0x21579b0
+_ZTV17ActorRefillArrows kind:data(any) addr:0x2157a70
+_ZTV19ActorRefillBombchus kind:data(any) addr:0x2157b30
+_ZTV16ActorRefillBombs kind:data(any) addr:0x2157bf0
+_ZTV11ActorRefill kind:data(any) addr:0x2157cb0
data_ov014_02157d70 kind:data(any) addr:0x2157d70
data_ov014_02157d7c kind:data(any) addr:0x2157d7c
data_ov014_02157d88 kind:data(any) addr:0x2157d88
@@ -2195,16 +2196,16 @@ data_ov014_0215af6c kind:bss addr:0x215af6c
data_ov014_0215af74 kind:bss addr:0x215af74
data_ov014_0215af80 kind:bss addr:0x215af80
data_ov014_0215af88 kind:bss addr:0x215af88
-data_ov014_0215af94 kind:bss addr:0x215af94
-data_ov014_0215afa0 kind:bss addr:0x215afa0
-data_ov014_0215afb4 kind:bss addr:0x215afb4
-data_ov014_0215afc0 kind:bss addr:0x215afc0
-data_ov014_0215afd4 kind:bss addr:0x215afd4
-data_ov014_0215afe0 kind:bss addr:0x215afe0
-data_ov014_0215aff4 kind:bss addr:0x215aff4
-data_ov014_0215b000 kind:bss addr:0x215b000
-data_ov014_0215b014 kind:bss addr:0x215b014
-data_ov014_0215b020 kind:bss addr:0x215b020
+@363 kind:bss addr:0x215af94 local
+_ZN16ActorRefillBombs5gTypeE kind:bss addr:0x215afa0
+@361 kind:bss addr:0x215afb4 local
+_ZN19ActorRefillBombchus5gTypeE kind:bss addr:0x215afc0
+@364 kind:bss addr:0x215afd4 local
+_ZN17ActorRefillArrows5gTypeE kind:bss addr:0x215afe0
+@360 kind:bss addr:0x215aff4 local
+_ZN15ActorRefillTime5gTypeE kind:bss addr:0x215b000
+@362 kind:bss addr:0x215b014 local
+_ZN9ActorLSTM5gTypeE kind:bss addr:0x215b020
data_ov014_0215b034 kind:bss addr:0x215b034
data_ov014_0215b040 kind:bss addr:0x215b040
data_ov014_0215b054 kind:bss addr:0x215b054
diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt
index a656d213..d8d0c8c9 100644
--- a/config/usa/arm9/overlays/ov000/symbols.txt
+++ b/config/usa/arm9/overlays/ov000/symbols.txt
@@ -146,7 +146,7 @@ func_ov000_0207a038 kind:function(thumb,size=0x102) addr:0x2079fd8
_ZN19Actor_UnkStruct_012C1Ev kind:function(arm,size=0x4c) addr:0x207a0dc
_ZN19Actor_UnkStruct_0a4C1Eiiii kind:function(thumb,size=0x1c) addr:0x207a128
func_ov000_0207a1a4 kind:function(arm,size=0x24) addr:0x207a144
-func_ov000_0207a1c8 kind:function(arm,size=0xcc) addr:0x207a168
+_ZN19Actor_UnkStruct_0a419func_ov000_0207a1c8EiP5Vec3p kind:function(arm,size=0xcc) addr:0x207a168
func_ov000_0207a294 kind:function(thumb,size=0x44) addr:0x207a234
func_ov000_0207a2d8 kind:function(arm,size=0x10) addr:0x207a278
func_ov000_0207a2e8 kind:function(thumb,size=0x14) addr:0x207a288
@@ -2119,7 +2119,7 @@ _ZN11ItemManager17EquipCollidesWithEP8Cylinderi kind:function(arm,size=0x80) add
_ZN11ItemManager18EquipItem_vfunc_2cEi kind:function(arm,size=0x1c) addr:0x20ad698
_ZN11ItemManager12GetEquipItemEi kind:function(arm,size=0x18) addr:0x20ad6b4
_ZNK11ItemManager7GetAmmoEi kind:function(arm,size=0x10) addr:0x20ad6cc
-_ZN11ItemManager8GiveAmmoEit kind:function(arm,size=0x54) addr:0x20ad6dc
+_ZN11ItemManager8GiveAmmoEij kind:function(arm,size=0x54) addr:0x20ad6dc
_ZN11ItemManager18func_ov00_020ad790Ei kind:function(arm,size=0x150) addr:0x20ad730
_ZNK11ItemManager19GetEquippedShipPartEj kind:function(thumb,size=0x8) addr:0x20ad880
_ZN11ItemManager13EquipShipPartEjj kind:function(thumb,size=0x8) addr:0x20ad888
diff --git a/config/usa/arm9/overlays/ov014/delinks.txt b/config/usa/arm9/overlays/ov014/delinks.txt
index c0472e4a..dcd2d705 100644
--- a/config/usa/arm9/overlays/ov014/delinks.txt
+++ b/config/usa/arm9/overlays/ov014/delinks.txt
@@ -12,3 +12,11 @@ src/14_Land/Actor/ActorRupee.cpp:
.ctor start:0x02155878 end:0x0215587c
.data start:0x021588f4 end:0x021589f8
.bss start:0x0215b154 end:0x0215b174
+
+src/14_Land/Actor/Player/ActorRefill.cpp:
+ complete
+ .text start:0x02134d80 end:0x0213589c
+ .init start:0x02154b70 end:0x02154c80
+ .ctor start:0x02155848 end:0x0215584c
+ .data start:0x02157810 end:0x02157cd0
+ .bss start:0x0215aef4 end:0x0215af94
diff --git a/config/usa/arm9/overlays/ov014/relocs.txt b/config/usa/arm9/overlays/ov014/relocs.txt
index 180807df..46843a25 100644
--- a/config/usa/arm9/overlays/ov014/relocs.txt
+++ b/config/usa/arm9/overlays/ov014/relocs.txt
@@ -2474,7 +2474,7 @@ from:0x02134e58 kind:arm_call to:0x0202e9d8 module:main
from:0x02134e64 kind:arm_call to:0x02135718 module:overlay(14)
from:0x02134e6c kind:load to:0x027e0fe0 module:dtcm
from:0x02134e7c kind:arm_call to:0x020c14f4 module:overlay(0)
-from:0x02134eac kind:load to:0x02157c18 module:overlay(14)
+from:0x02134eac kind:load to:0x02157c10 add:8 module:overlay(14)
from:0x02134eb8 kind:arm_call to:0x020c16d0 module:overlay(0)
from:0x02134ecc kind:arm_call to:0x020c16d0 module:overlay(0)
from:0x02134ed4 kind:arm_call to:0x0202ea08 module:main
@@ -2527,29 +2527,29 @@ from:0x02135410 kind:arm_call to:0x0207c150 module:overlay(0)
from:0x02135434 kind:arm_call to:0x0207c150 module:overlay(0)
from:0x02135448 kind:load to:0x027e0e58 module:dtcm
from:0x02135460 kind:arm_call to:0x02134e70 module:overlay(14)
-from:0x02135484 kind:load to:0x02157b58 module:overlay(14)
+from:0x02135484 kind:load to:0x02157b50 add:8 module:overlay(14)
from:0x02135490 kind:arm_call to:0x02134ee0 module:overlay(14)
from:0x021354a4 kind:arm_call to:0x02134ee0 module:overlay(14)
from:0x021354ac kind:arm_call to:0x0202ea08 module:main
from:0x021354cc kind:arm_call to:0x02134e70 module:overlay(14)
-from:0x021354f0 kind:load to:0x02157a98 module:overlay(14)
+from:0x021354f0 kind:load to:0x02157a90 add:8 module:overlay(14)
from:0x021354fc kind:arm_call to:0x02134ee0 module:overlay(14)
from:0x02135510 kind:arm_call to:0x02134ee0 module:overlay(14)
from:0x02135518 kind:arm_call to:0x0202ea08 module:main
from:0x02135538 kind:arm_call to:0x02134e70 module:overlay(14)
-from:0x0213555c kind:load to:0x021579d8 module:overlay(14)
+from:0x0213555c kind:load to:0x021579d0 add:8 module:overlay(14)
from:0x02135568 kind:arm_call to:0x02134ee0 module:overlay(14)
from:0x0213557c kind:arm_call to:0x02134ee0 module:overlay(14)
from:0x02135584 kind:arm_call to:0x0202ea08 module:main
from:0x021355a4 kind:arm_call to:0x02134e70 module:overlay(14)
-from:0x021355c8 kind:load to:0x02157918 module:overlay(14)
+from:0x021355c8 kind:load to:0x02157910 add:8 module:overlay(14)
from:0x021355d4 kind:arm_call to:0x02134ee0 module:overlay(14)
from:0x021355e8 kind:arm_call to:0x02134ee0 module:overlay(14)
from:0x021355f0 kind:arm_call to:0x0202ea08 module:main
from:0x02135604 kind:arm_call to:0x02134ef4 module:overlay(14)
from:0x0213570c kind:load to:0x027e0764 module:dtcm
from:0x02135724 kind:arm_call to:0x02134e70 module:overlay(14)
-from:0x02135748 kind:load to:0x02157858 module:overlay(14)
+from:0x02135748 kind:load to:0x02157850 add:8 module:overlay(14)
from:0x02135754 kind:arm_call to:0x02134ee0 module:overlay(14)
from:0x02135768 kind:arm_call to:0x02134ee0 module:overlay(14)
from:0x02135770 kind:arm_call to:0x0202ea08 module:main
diff --git a/config/usa/arm9/overlays/ov014/symbols.txt b/config/usa/arm9/overlays/ov014/symbols.txt
index 1fb08698..ce1b6513 100644
--- a/config/usa/arm9/overlays/ov014/symbols.txt
+++ b/config/usa/arm9/overlays/ov014/symbols.txt
@@ -586,42 +586,42 @@ func_ov014_02134c04 kind:function(arm,size=0x8) addr:0x2134b60
func_ov014_02134c0c kind:function(arm,size=0x8) addr:0x2134b68
func_ov014_02134c14 kind:function(arm,size=0x200) addr:0x2134b70
func_ov014_02134e14 kind:function(arm,size=0x10) addr:0x2134d70
-func_ov014_02134e24 kind:function(arm,size=0x30) addr:0x2134d80
-func_ov014_02134e54 kind:function(arm,size=0x30) addr:0x2134db0
-func_ov014_02134e84 kind:function(arm,size=0x30) addr:0x2134de0
-func_ov014_02134eb4 kind:function(arm,size=0x30) addr:0x2134e10
-func_ov014_02134ee4 kind:function(arm,size=0x30) addr:0x2134e40
-func_ov014_02134f14 kind:function(arm,size=0x40) addr:0x2134e70
-func_ov014_02134f54 kind:function(arm,size=0x14) addr:0x2134eb0
-func_ov014_02134f68 kind:function(arm,size=0x1c) addr:0x2134ec4
-func_ov014_02134f84 kind:function(arm,size=0x14) addr:0x2134ee0
-func_ov014_02134f98 kind:function(arm,size=0xf4) addr:0x2134ef4
-func_ov014_0213508c kind:function(arm,size=0x2d8) addr:0x2134fe8
-func_ov014_02135364 kind:function(arm,size=0x54) addr:0x21352c0
-func_ov014_021353b8 kind:function(arm,size=0xbc) addr:0x2135314
-func_ov014_02135474 kind:function(arm,size=0x84) addr:0x21353d0
-func_ov014_021354f8 kind:function(arm,size=0x34) addr:0x2135454
-func_ov014_0213552c kind:function(arm,size=0x14) addr:0x2135488
-func_ov014_02135540 kind:function(arm,size=0x1c) addr:0x213549c
-func_ov014_0213555c kind:function(arm,size=0x8) addr:0x21354b8
-func_ov014_02135564 kind:function(arm,size=0x34) addr:0x21354c0
-func_ov014_02135598 kind:function(arm,size=0x14) addr:0x21354f4
-func_ov014_021355ac kind:function(arm,size=0x1c) addr:0x2135508
-func_ov014_021355c8 kind:function(arm,size=0x8) addr:0x2135524
-func_ov014_021355d0 kind:function(arm,size=0x34) addr:0x213552c
-func_ov014_02135604 kind:function(arm,size=0x14) addr:0x2135560
-func_ov014_02135618 kind:function(arm,size=0x1c) addr:0x2135574
-func_ov014_02135634 kind:function(arm,size=0x8) addr:0x2135590
-func_ov014_0213563c kind:function(arm,size=0x34) addr:0x2135598
-func_ov014_02135670 kind:function(arm,size=0x14) addr:0x21355cc
-func_ov014_02135684 kind:function(arm,size=0x1c) addr:0x21355e0
-func_ov014_021356a0 kind:function(arm,size=0x114) addr:0x21355fc
-func_ov014_021357b4 kind:function(arm,size=0x8) addr:0x2135710
-func_ov014_021357bc kind:function(arm,size=0x34) addr:0x2135718
-func_ov014_021357f0 kind:function(arm,size=0x14) addr:0x213574c
-func_ov014_02135804 kind:function(arm,size=0x1c) addr:0x2135760
-func_ov014_02135820 kind:function(arm,size=0x118) addr:0x213577c
-func_ov014_02135938 kind:function(arm,size=0x8) addr:0x2135894
+_ZN16ActorRefillBombs6CreateEv kind:function(arm,size=0x30) addr:0x2134d80
+_ZN19ActorRefillBombchus6CreateEv kind:function(arm,size=0x30) addr:0x2134db0
+_ZN17ActorRefillArrows6CreateEv kind:function(arm,size=0x30) addr:0x2134de0
+_ZN15ActorRefillTime6CreateEv kind:function(arm,size=0x30) addr:0x2134e10
+_ZN9ActorLSTM6CreateEv kind:function(arm,size=0x30) addr:0x2134e40
+_ZN11ActorRefillC2Ei kind:function(arm,size=0x40) addr:0x2134e70
+_ZN11ActorRefillD1Ev kind:function(arm,size=0x14) addr:0x2134eb0
+_ZN11ActorRefillD0Ev kind:function(arm,size=0x1c) addr:0x2134ec4
+_ZN11ActorRefillD2Ev kind:function(arm,size=0x14) addr:0x2134ee0
+_ZN11ActorRefill8vfunc_08Ev kind:function(arm,size=0xf4) addr:0x2134ef4
+_ZN11ActorRefill8vfunc_14Ej kind:function(arm,size=0x2d8) addr:0x2134fe8
+_ZN11ActorRefill19func_ov014_02135364Ei kind:function(arm,size=0x54) addr:0x21352c0
+_ZN11ActorRefill8vfunc_20Eb kind:function(arm,size=0xbc) addr:0x2135314
+_ZN11ActorRefill19func_ov014_02135474Ev kind:function(arm,size=0x84) addr:0x21353d0
+_ZN16ActorRefillBombsC1Ev kind:function(arm,size=0x34) addr:0x2135454
+_ZN16ActorRefillBombsD1Ev kind:function(arm,size=0x14) addr:0x2135488
+_ZN16ActorRefillBombsD0Ev kind:function(arm,size=0x1c) addr:0x213549c
+_ZN16ActorRefillBombs8vfunc_b4Ev kind:function(arm,size=0x8) addr:0x21354b8
+_ZN19ActorRefillBombchusC1Ev kind:function(arm,size=0x34) addr:0x21354c0
+_ZN19ActorRefillBombchusD1Ev kind:function(arm,size=0x14) addr:0x21354f4
+_ZN19ActorRefillBombchusD0Ev kind:function(arm,size=0x1c) addr:0x2135508
+_ZN19ActorRefillBombchus8vfunc_b4Ev kind:function(arm,size=0x8) addr:0x2135524
+_ZN17ActorRefillArrowsC1Ev kind:function(arm,size=0x34) addr:0x213552c
+_ZN17ActorRefillArrowsD1Ev kind:function(arm,size=0x14) addr:0x2135560
+_ZN17ActorRefillArrowsD0Ev kind:function(arm,size=0x1c) addr:0x2135574
+_ZN17ActorRefillArrows8vfunc_b4Ev kind:function(arm,size=0x8) addr:0x2135590
+_ZN15ActorRefillTimeC1Ev kind:function(arm,size=0x34) addr:0x2135598
+_ZN15ActorRefillTimeD1Ev kind:function(arm,size=0x14) addr:0x21355cc
+_ZN15ActorRefillTimeD0Ev kind:function(arm,size=0x1c) addr:0x21355e0
+_ZN15ActorRefillTime8vfunc_08Ev kind:function(arm,size=0x114) addr:0x21355fc
+_ZN15ActorRefillTime8vfunc_b4Ev kind:function(arm,size=0x8) addr:0x2135710
+_ZN9ActorLSTMC1Ev kind:function(arm,size=0x34) addr:0x2135718
+_ZN9ActorLSTMD1Ev kind:function(arm,size=0x14) addr:0x213574c
+_ZN9ActorLSTMD0Ev kind:function(arm,size=0x1c) addr:0x2135760
+_ZN9ActorLSTM8vfunc_08Ev kind:function(arm,size=0x118) addr:0x213577c
+_ZN9ActorLSTM8vfunc_b4Ev kind:function(arm,size=0x8) addr:0x2135894
func_ov014_02135940 kind:function(arm,size=0x34) addr:0x213589c
func_ov014_02135974 kind:function(arm,size=0xc4) addr:0x21358d0
func_ov014_02135a38 kind:function(arm,size=0xc4) addr:0x2135994
@@ -1672,7 +1672,7 @@ __sinit_ov014_02154b34 kind:function(arm,size=0x38) addr:0x2154a90
__sinit_ov014_02154b6c kind:function(arm,size=0x38) addr:0x2154ac8
__sinit_ov014_02154ba4 kind:function(arm,size=0x38) addr:0x2154b00
__sinit_ov014_02154bdc kind:function(arm,size=0x38) addr:0x2154b38
-__sinit_ov014_02154c14 kind:function(arm,size=0x110) addr:0x2154b70
+__sinit_ActorRefill.cpp kind:function(arm,size=0x110) addr:0x2154b70 local
__sinit_ov014_02154d24 kind:function(arm,size=0x1d8) addr:0x2154c80
__sinit_ov014_02154efc kind:function(arm,size=0x40) addr:0x2154e58
__sinit_ov014_02154f3c kind:function(arm,size=0x40) addr:0x2154e98
@@ -1846,20 +1846,21 @@ data_ov014_02157768 kind:data(any) addr:0x21576c8
data_ov014_0215777c kind:data(any) addr:0x21576dc
data_ov014_02157790 kind:data(any) addr:0x21576f0
data_ov014_02157824 kind:data(any) addr:0x2157784
-data_ov014_021578b0 kind:data(any) addr:0x2157810
-data_ov014_021578b4 kind:data(any) addr:0x2157814
-data_ov014_021578b8 kind:data(any) addr:0x2157818
-data_ov014_021578bc kind:data(any) addr:0x215781c
-data_ov014_021578c0 kind:data(any) addr:0x2157820
-data_ov014_021578c4 kind:data(any) addr:0x2157824
-data_ov014_021578c8 kind:data(any) addr:0x2157828
-data_ov014_021578cc kind:data(any) addr:0x215782c
-data_ov014_021578f8 kind:data(any) addr:0x2157858
-data_ov014_021579b8 kind:data(any) addr:0x2157918
-data_ov014_02157a78 kind:data(any) addr:0x21579d8
-data_ov014_02157b38 kind:data(any) addr:0x2157a98
-data_ov014_02157bf8 kind:data(any) addr:0x2157b58
-data_ov014_02157cb8 kind:data(any) addr:0x2157c18
+@570 kind:data(any) addr:0x2157810 local
+@569 kind:data(any) addr:0x2157814 local
+@568 kind:data(any) addr:0x2157818 local
+@567 kind:data(any) addr:0x215781c local
+@566 kind:data(any) addr:0x2157820 local
+@565 kind:data(any) addr:0x2157824 local
+@564 kind:data(any) addr:0x2157828 local
+@563 kind:data(any) addr:0x215782c local
+sShipTypes kind:data(any) addr:0x2157830 local
+_ZTV9ActorLSTM kind:data(any) addr:0x2157850
+_ZTV15ActorRefillTime kind:data(any) addr:0x2157910
+_ZTV17ActorRefillArrows kind:data(any) addr:0x21579d0
+_ZTV19ActorRefillBombchus kind:data(any) addr:0x2157a90
+_ZTV16ActorRefillBombs kind:data(any) addr:0x2157b50
+_ZTV11ActorRefill kind:data(any) addr:0x2157c10
data_ov014_02157d70 kind:data(any) addr:0x2157cd0
data_ov014_02157d7c kind:data(any) addr:0x2157cdc
data_ov014_02157d88 kind:data(any) addr:0x2157ce8
@@ -2195,16 +2196,16 @@ data_ov014_0215af6c kind:bss addr:0x215aecc
data_ov014_0215af74 kind:bss addr:0x215aed4
data_ov014_0215af80 kind:bss addr:0x215aee0
data_ov014_0215af88 kind:bss addr:0x215aee8
-data_ov014_0215af94 kind:bss addr:0x215aef4
-data_ov014_0215afa0 kind:bss addr:0x215af00
-data_ov014_0215afb4 kind:bss addr:0x215af14
-data_ov014_0215afc0 kind:bss addr:0x215af20
-data_ov014_0215afd4 kind:bss addr:0x215af34
-data_ov014_0215afe0 kind:bss addr:0x215af40
-data_ov014_0215aff4 kind:bss addr:0x215af54
-data_ov014_0215b000 kind:bss addr:0x215af60
-data_ov014_0215b014 kind:bss addr:0x215af74
-data_ov014_0215b020 kind:bss addr:0x215af80
+@363 kind:bss addr:0x215aef4 local
+_ZN16ActorRefillBombs5gTypeE kind:bss addr:0x215af00
+@361 kind:bss addr:0x215af14 local
+_ZN19ActorRefillBombchus5gTypeE kind:bss addr:0x215af20
+@364 kind:bss addr:0x215af34 local
+_ZN17ActorRefillArrows5gTypeE kind:bss addr:0x215af40
+@360 kind:bss addr:0x215af54 local
+_ZN15ActorRefillTime5gTypeE kind:bss addr:0x215af60
+@362 kind:bss addr:0x215af74 local
+_ZN9ActorLSTM5gTypeE kind:bss addr:0x215af80
data_ov014_0215b034 kind:bss addr:0x215af94
data_ov014_0215b040 kind:bss addr:0x215afa0
data_ov014_0215b054 kind:bss addr:0x215afb4
diff --git a/docs/actors.md b/docs/actors.md
index 49300936..1787be41 100644
--- a/docs/actors.md
+++ b/docs/actors.md
@@ -80,6 +80,8 @@ translations. Feel free to contribute to this list!
`PSBA` | Pushable Armos | Armos statue
`PSBL` | Push Block
`RFLR` | Repeating? Floor | Moves repetetively along a set path
+`RLST` | Rolling Stone
+`RLSG` | Rolling Stone Generator
`SPRL` | Spike Roller
`WBLK` | Wind Block | The blocks in the Wind Temple that blow air
`WPHL` | Warp Hole | Blue warp
@@ -101,7 +103,7 @@ translations. Feel free to contribute to this list!
`CHUC` | ChuChu
`CROW` | Crow | Bird that steals rupees
`EGST` | Escape Ghost | Poe
-`FLTB` | Floating ??? | Flying pot
+`FLTB` | Flying Tsubo (つぼ) | Flying pot
`FSHB` | Fish Bullet | Geozard bullet
`FSHM` | Fishman | Geozard
`GELL` | Gel
@@ -116,7 +118,7 @@ translations. Feel free to contribute to this list!
`OCSH` | Octa Shell | Octorok bullet
`OCTA` | Octarock | Octorok
`PBLN` | Petit Blin | Miniblin
-`PB ` | | Eye Slug
+`PBZK` | | Eye Slug
`PLSV` | Pols Voice
`POON` | Pōn (ポーン) | Hardhat beetle
`RAT0` | Rat
@@ -124,11 +126,15 @@ translations. Feel free to contribute to this list!
`RAT1`
`SNAK` | Snake | Rope, the purple snake enemy
`SPDR` | Spider | Skulltula
+`STLB` | Stalfos bone | Projectile thrown by Stalfos
`STLF` | Stalfos
+`STLH` | Stalfos head
+`STLP` | Stalfos | Stationary, throws bones constantly
`STLW` | Stalfos Warrior
`TAIL` | Tail | Moldorm head
`TALB` | Tail Body | One of Moldorm's 3 body parts
`TEKT` | Tektite
+`UBLN` | Umi (うみ) Blin | Pirate miniblin
`WTCR` | Watcher | Phantom eye
`YETI` | Yook
@@ -167,6 +173,7 @@ translations. Feel free to contribute to this list!
`CMNC` | Character Man C | Doudo, man in blue of Mercay Island
`COMA` | Character Old A | Tuzi, woman in brown of Mercay Island
`COBS` | Character Old B/Shared | Maltza, man at the bar of Mercay Island
+`CPSK` | Carpenter Spirit Knight? | Cobble spirit (Brant, Bremeur, Doylan, Max)
`CRPS` | Corpse | Non-moving skeleton with a blue spirit
`CSTM` | Character Standard Man | Adult Male NPC
`CWIF` | Character Wife | Maronie, woman in purple of Molida Island
@@ -220,7 +227,10 @@ translations. Feel free to contribute to this list!
`FSRL` | Fish Reel | Roaming fish
`GFIS` | Golden Frog ???
`GSIP` | Ghost Ship
+`GYRG` | Gyorg
+`GYMG` | Gyorg monster generator
`HRCN` | Hurricane | Stops you from going to other seas
+`KMGA` | Kamome (カモメ) Generator | Seagull generator
`KMME` | Kamome (カモメ) | Seagull
`LOND` | | Explosive barrel
`PLSP` | Pirate Lady Ship | Jolene's ship
@@ -231,6 +241,7 @@ translations. Feel free to contribute to this list!
`SLTR` | Salvage ??? | Salvage arm
`SLOC` | Salvage Octorok
`SLRC` | Salvage Rupee ???
+`SNGA` | Sea NPC Generator | Spawns sea monsters
`SNAV` | Sea Navi | Shows proximity to the Ghost Ship
`SPKN` | Sea Plant ??? | Eye Plant
`SROP` | Sea Rope | Sea Trap rope, jump over to avoid damage
diff --git a/include/Actor/Actor.hpp b/include/Actor/Actor.hpp
index c22f086e..f82d34ab 100644
--- a/include/Actor/Actor.hpp
+++ b/include/Actor/Actor.hpp
@@ -64,6 +64,7 @@ struct Actor_UnkStruct_0a4 {
/* 14 */
Actor_UnkStruct_0a4(q20 x, q20 y, q20 z, s32 unk_10);
+ void func_ov000_0207a1c8(unk32 param1, Vec3p *param2);
};
class KillPickupsFilter : FilterActorReturn, public FilterActorBase {
@@ -83,7 +84,8 @@ enum PlayerCollide_ {
PlayerCollide_Gongoron = 0x8,
PlayerCollide_Hammer = 0x10,
- PlayerCollide_PickupFlags = PlayerCollide_Hammer | PlayerCollide_Gongoron | PlayerCollide_Sword | PlayerCollide_Player,
+ /* 0x1b */ PlayerCollide_PickupFlags =
+ PlayerCollide_Hammer | PlayerCollide_Gongoron | PlayerCollide_Sword | PlayerCollide_Player,
};
struct Knockback {
@@ -136,10 +138,10 @@ public:
/* 108 */ unk8 mUnk_108;
/* 109 */ unk8 mUnk_109;
/* 10a */ unk8 mUnk_10a[0x6];
- /* 110 */ unk8 mUnk_110;
+ /* 110 */ bool mUnk_110;
/* 111 */ bool mUnk_111;
- /* 112 */ unk8 mUnk_112;
- /* 113 */ unk8 mUnk_113;
+ /* 112 */ bool mUnk_112;
+ /* 113 */ bool mUnk_113;
/* 114 */ unk8 mUnk_114;
/* 115 */ unk8 mUnk_115;
/* 116 */ unk8 mUnk_116;
diff --git a/include/Actor/ActorType.hpp b/include/Actor/ActorType.hpp
index f71c533b..1d7d5723 100644
--- a/include/Actor/ActorType.hpp
+++ b/include/Actor/ActorType.hpp
@@ -25,8 +25,13 @@ enum ActorTypeId_ {
ActorTypeId_ShopItemShield = 'ITSL',
ActorTypeId_ShopItemSoldOut = 'ITSO',
- ActorTypeId_Heart = 'HART',
- ActorTypeId_Rupee = 'RUPY',
+ ActorTypeId_RefillArrows = 'FLAL',
+ ActorTypeId_RefillBombs = 'FLBM',
+ ActorTypeId_RefillBombchus = 'FLBT',
+ ActorTypeId_RefillTime = 'FLTM',
+ ActorTypeId_Heart = 'HART',
+ ActorTypeId_LSTM = 'LSTM',
+ ActorTypeId_Rupee = 'RUPY',
ActorTypeId_Arrow = 'ARRW',
ActorTypeId_Blast = 'BLST',
diff --git a/include/Actor/Player/ActorRefill.hpp b/include/Actor/Player/ActorRefill.hpp
new file mode 100644
index 00000000..bdd334ff
--- /dev/null
+++ b/include/Actor/Player/ActorRefill.hpp
@@ -0,0 +1,113 @@
+#pragma once
+
+#include "global.h"
+#include "types.h"
+
+#include "Actor/Actor.hpp"
+#include "Actor/ActorType.hpp"
+
+class ActorRefill : public Actor {
+public:
+ /* 000 (base) */
+ /* 158 */ unk32 mUnk_158;
+ /* 15c */ unk32 mUnk_15c;
+ /* 160 */ unk32 mUnk_160;
+ /* 164 */ u8 mUnk_164;
+ /* 165 */ unk8 mUnk_165[0x3];
+ /* 168 */
+
+public:
+ ActorRefill(unk32 param1);
+
+ /* 00 */ virtual ~ActorRefill() override;
+ /* 08 */ virtual bool vfunc_08() override;
+ /* 14 */ virtual void vfunc_14(u32 param1) override;
+ /* 20 */ virtual void vfunc_20(bool param1) override;
+ /* b4 */ virtual ItemFlag vfunc_b4() = 0;
+ /* b8 */
+
+ bool func_ov014_02135364(unk32 param1);
+ void func_ov014_02135474();
+};
+
+class ActorRefillBombs : public ActorRefill {
+public:
+ static ActorType gType;
+
+ /* 000 (base) */
+ /* 168 */
+
+public:
+ ActorRefillBombs();
+ static ActorRefillBombs *Create();
+
+ /* 00 */ virtual ~ActorRefillBombs() override;
+ /* b4 */ virtual ItemFlag vfunc_b4() override;
+ /* b8 */
+};
+
+class ActorRefillBombchus : public ActorRefill {
+public:
+ static ActorType gType;
+
+ /* 000 (base) */
+ /* 168 */
+
+public:
+ ActorRefillBombchus();
+ static ActorRefillBombchus *Create();
+
+ /* 00 */ virtual ~ActorRefillBombchus() override;
+ /* b4 */ virtual ItemFlag vfunc_b4() override;
+ /* b8 */
+};
+
+class ActorRefillArrows : public ActorRefill {
+public:
+ static ActorType gType;
+
+ /* 000 (base) */
+ /* 168 */
+
+public:
+ ActorRefillArrows();
+ static ActorRefillArrows *Create();
+
+ /* 00 */ virtual ~ActorRefillArrows() override;
+ /* b4 */ virtual ItemFlag vfunc_b4() override;
+ /* b8 */
+};
+
+class ActorRefillTime : public ActorRefill {
+public:
+ static ActorType gType;
+
+ /* 000 (base) */
+ /* 168 */
+
+public:
+ ActorRefillTime();
+ static ActorRefillTime *Create();
+
+ /* 00 */ virtual ~ActorRefillTime() override;
+ /* 08 */ virtual bool vfunc_08() override;
+ /* b4 */ virtual ItemFlag vfunc_b4() override;
+ /* b8 */
+};
+
+class ActorLSTM : public ActorRefill {
+public:
+ static ActorType gType;
+
+ /* 000 (base) */
+ /* 168 */
+
+public:
+ ActorLSTM();
+ static ActorLSTM *Create();
+
+ /* 00 */ virtual ~ActorLSTM() override;
+ /* 08 */ virtual bool vfunc_08() override;
+ /* b4 */ virtual ItemFlag vfunc_b4() override;
+ /* b8 */
+};
diff --git a/include/Item/ItemManager.hpp b/include/Item/ItemManager.hpp
index 37f22457..34d5a636 100644
--- a/include/Item/ItemManager.hpp
+++ b/include/Item/ItemManager.hpp
@@ -134,7 +134,7 @@ public:
// Ammo
u16 GetAmmo(ItemFlag equipId) const;
- void GiveAmmo(ItemFlag equipId, u16 amount);
+ void GiveAmmo(ItemFlag equipId, u32 amount);
u16 GetMaxAmmo(ItemFlag equipId) const;
void UpgradeQuiver();
void UpgradeBombBag();
diff --git a/include/System/Random.hpp b/include/System/Random.hpp
index 4506466d..cc1f2a12 100644
--- a/include/System/Random.hpp
+++ b/include/System/Random.hpp
@@ -19,4 +19,4 @@ struct Random {
}
};
-extern Random *gRandom;
+extern Random gRandom;
diff --git a/src/00_Core/Item/ItemManager.cpp b/src/00_Core/Item/ItemManager.cpp
index d85fc6ab..4b2e7b44 100644
--- a/src/00_Core/Item/ItemManager.cpp
+++ b/src/00_Core/Item/ItemManager.cpp
@@ -231,7 +231,7 @@ ARM u16 ItemManager::GetAmmo(ItemFlag equipId) const {
return (*mAmmo)[equipId];
}
-ARM void ItemManager::GiveAmmo(ItemFlag equipId, u16 amount) {
+ARM void ItemManager::GiveAmmo(ItemFlag equipId, u32 amount) {
(*mAmmo)[equipId] += amount;
if ((*mAmmo)[equipId] <= this->GetMaxAmmo(equipId)) return;
(*mAmmo)[equipId] = this->GetMaxAmmo(equipId);
diff --git a/src/14_Land/Actor/ActorRupee.cpp b/src/14_Land/Actor/ActorRupee.cpp
index 80857246..32a95333 100644
--- a/src/14_Land/Actor/ActorRupee.cpp
+++ b/src/14_Land/Actor/ActorRupee.cpp
@@ -5,7 +5,6 @@
#include "System/Random.hpp"
extern "C" {
-void func_ov000_0207a1c8(bool *param_1, unk32 param_2, Vec3p *param_3);
void func_0202bc38(unk32 param_1, Vec3p *param_2, u32 param_3, Actor_UnkStruct_012 *param_4, bool);
void func_ov005_02102c2c(u32 *param_1, int param_2, Vec3p *param_3, int param_4, int param_5, u32 param_6, int param_7,
char param_8, char param_9, char param_10);
@@ -71,9 +70,9 @@ bool ActorRupee::vfunc_08() {
func_ov14_0213b204(0);
break;
case 1:
- q20 x = gRandom->Next(FLOAT_TO_Q20(0.1335));
- q20 y = gRandom->Next(FLOAT_TO_Q20(0.2));
- q20 z = gRandom->Next(FLOAT_TO_Q20(0.1335));
+ q20 x = gRandom.Next(FLOAT_TO_Q20(0.1335));
+ q20 y = gRandom.Next(FLOAT_TO_Q20(0.2));
+ q20 z = gRandom.Next(FLOAT_TO_Q20(0.1335));
mVel.x = x - FLOAT_TO_Q20(0.0666);
mVel.y = y + FLOAT_TO_Q20(0.3333);
@@ -263,14 +262,14 @@ void ActorRupee::vfunc_14(u32 param1) {
if (func_ov00_020c313c(param1)) {
Update(false);
}
- func_ov000_0207a1c8(&mUnk_0a4.mUnk_00, param1, &mPos);
+ mUnk_0a4.func_ov000_0207a1c8(param1, &mPos);
}
void ActorRupee::vfunc_18(u32 param1) {
if (func_ov00_020c313c(param1)) {
Update(true);
}
- func_ov000_0207a1c8(&mUnk_0a4.mUnk_00, param1, &mPos);
+ mUnk_0a4.func_ov000_0207a1c8(param1, &mPos);
}
#define VFUNC20_COND (param1 ? mUnk_0a4.mUnk_01 : mUnk_0a4.mUnk_00)
diff --git a/src/14_Land/Actor/Player/ActorRefill.cpp b/src/14_Land/Actor/Player/ActorRefill.cpp
new file mode 100644
index 00000000..0e6a9edf
--- /dev/null
+++ b/src/14_Land/Actor/Player/ActorRefill.cpp
@@ -0,0 +1,340 @@
+#include "Actor/Player/ActorRefill.hpp"
+#include "DTCM/UnkStruct_027e0d38.hpp"
+#include "DTCM/UnkStruct_027e103c.hpp"
+#include "Item/ItemManager.hpp"
+#include "System/Random.hpp"
+
+static char *sShipTypes[8] = {"anc", "bow", "hul", "can", "dco", "pdl", "fnl", "brg"};
+
+extern u32 **data_027e0fe0[];
+ARM ActorRefillBombs *ActorRefillBombs::Create() {
+ return new(*data_027e0fe0[0], 4) ActorRefillBombs();
+}
+ActorType ActorRefillBombs::gType = ActorType(ActorTypeId_RefillBombs, (ActorCreateFunc) ActorRefillBombs::Create, NULL);
+
+ARM ActorRefillBombchus *ActorRefillBombchus::Create() {
+ return new(*data_027e0fe0[0], 4) ActorRefillBombchus();
+}
+ActorType ActorRefillBombchus::gType =
+ ActorType(ActorTypeId_RefillBombchus, (ActorCreateFunc) ActorRefillBombchus::Create, NULL);
+
+ARM ActorRefillArrows *ActorRefillArrows::Create() {
+ return new(*data_027e0fe0[0], 4) ActorRefillArrows();
+}
+ActorType ActorRefillArrows::gType = ActorType(ActorTypeId_RefillArrows, (ActorCreateFunc) ActorRefillArrows::Create, NULL);
+
+ARM ActorRefillTime *ActorRefillTime::Create() {
+ return new(*data_027e0fe0[0], 4) ActorRefillTime();
+}
+ActorType ActorRefillTime::gType = ActorType(ActorTypeId_RefillTime, (ActorCreateFunc) ActorRefillTime::Create, NULL);
+
+ARM ActorLSTM *ActorLSTM::Create() {
+ return new(*data_027e0fe0[0], 4) ActorLSTM();
+}
+ActorType ActorLSTM::gType = ActorType(ActorTypeId_LSTM, (ActorCreateFunc) ActorLSTM::Create, NULL);
+
+ARM ActorRefill::ActorRefill(unk32 param1) :
+ mUnk_158(0),
+ mUnk_15c(0x56),
+ mUnk_160(param1),
+ mUnk_164(0x1f) {}
+
+ARM ActorRefill::~ActorRefill() {}
+
+ARM bool ActorRefill::vfunc_08() {
+ ItemManager *itemManager;
+
+ if (this->vfunc_b4() == ItemFlag_None) {
+ if (data_027e0d38->func_ov000_02078b40() != 3) {
+ return false;
+ }
+ } else {
+ ItemManager *itemManager = gItemManager;
+ ItemFlag item = this->vfunc_b4();
+ if (!itemManager->HasItem(item)) {
+ return false;
+ }
+ }
+ mHitbox.pos.x = 0;
+ mHitbox.pos.y = FLOAT_TO_Q20(0.3);
+ mHitbox.pos.z = 0;
+ mHitbox.size = FLOAT_TO_Q20(0.3);
+ mUnk_08c.pos.x = mHitbox.pos.x;
+ mUnk_08c.pos.y = mHitbox.pos.y;
+ mUnk_08c.pos.z = mHitbox.pos.z;
+ mUnk_08c.size = mHitbox.size;
+ mUnk_0a4.mUnk_04.x = 0;
+ mUnk_0a4.mUnk_04.y = FLOAT_TO_Q20(0.3);
+ mUnk_0a4.mUnk_04.z = 0;
+ mUnk_0a4.mUnk_10 = FLOAT_TO_Q20(1.3);
+ mUnk_09c.mUnk_0 &= ~0xa4;
+ mUnk_09c.mUnk_3 = 1;
+ mMaxFall = mUnk_08c.size + -1;
+ this->func_ov014_02135364(0);
+ return true;
+}
+
+extern unk32 data_ov000_020eec9c;
+extern "C" void func_ov000_020d7ad4(unk32 *param1, unk32 param2);
+ARM void ActorRefill::vfunc_14(u32 param1) {
+ s32 temp_r0_4;
+ s32 temp_r6;
+ s8 var_r0;
+ u32 temp_r0;
+ u32 temp_r0_3;
+ u32 temp_r1;
+ Vec3p *temp_r0_2;
+
+ if (this->func_ov00_020c313c(param1) != 0) {
+ this->IncreaseActiveFrames();
+ temp_r0 = mUnk_130;
+ switch (temp_r0) {
+ case 0:
+ this->ApplyGravity();
+ temp_r0_2 = &mPos;
+ Vec3p_Add(temp_r0_2, &mVel, temp_r0_2);
+ this->func_01fffd04(0);
+ if (mUnk_110 || mUnk_112 || mUnk_113) {
+ mVel.x = 0;
+ mVel.z = 0;
+ }
+ if (mUnk_111) {
+ this->func_ov014_02135364(1);
+ } else if (this->func_ov00_020c2c0c()) {
+ this->func_ov014_02135364(4);
+ } else if (this->func_ov00_020c2d54()) {
+ this->func_ov014_02135364(5);
+ }
+ break;
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ if (this->CollidesWithPlayer(PlayerCollide_PickupFlags) != 0) {
+ if (this->vfunc_b4() == -1) {
+ data_027e103c->func_ov000_020cfbf0(mUnk_158 * 60, 1, 0);
+ } else {
+ ItemManager *itemManager = gItemManager;
+ itemManager->GiveAmmo(this->vfunc_b4(), mUnk_158);
+ }
+ func_ov000_020d7ad4(&data_ov000_020eec9c, 0x100);
+ this->func_ov014_02135364(3);
+ } else {
+ temp_r0_3 = mUnk_130;
+ switch (temp_r0_3) {
+ case 0:
+ case 3: break;
+ case 1:
+ if (this->func_ov00_020c2c0c()) {
+ this->func_ov014_02135364(4);
+ } else if (this->func_ov00_020c2d54()) {
+ this->func_ov014_02135364(5);
+ } else if (mActiveFrames >= 180) {
+ this->func_ov014_02135364(2);
+ }
+ break;
+ case 2:
+ if (mActiveFrames % 8 < 4) {
+ mUnk_164 = 0;
+ } else {
+ mUnk_164 = 31;
+ }
+ if (this->func_ov00_020c2c0c()) {
+ this->func_ov014_02135364(4);
+ } else if (this->func_ov00_020c2d54()) {
+ this->func_ov014_02135364(5);
+ } else if (mActiveFrames >= 60) {
+ this->func_ov014_02135364(3);
+ }
+ break;
+ case 4:
+ if (!this->func_ov00_020c2c70()) {
+ this->func_ov014_02135364(1);
+ }
+ break;
+ case 5:
+ if (!this->func_ov00_020c2de4()) {
+ this->func_ov014_02135364(1);
+ }
+ break;
+ }
+ }
+ break;
+ }
+ this->KillInBounds();
+ }
+ mUnk_0a4.func_ov000_0207a1c8(param1, &mPos);
+}
+
+ARM bool ActorRefill::func_ov014_02135364(unk32 param1) {
+ mUnk_130 = param1;
+ mUnk_164 = 31;
+ mActiveFrames = 0;
+ switch (mUnk_130) {
+ case 0:
+ case 2: break;
+ case 1:
+ mVel.x = 0;
+ mVel.y = 0;
+ mVel.z = 0;
+ break;
+ case 3: this->Kill(); break;
+ }
+ return true;
+}
+
+extern "C" void func_0202bc38(bool param1, Vec3p *pos, unk32 param2, Actor_UnkStruct_012 *param3, unk32 param4);
+extern u32 data_ov000_020e9370[];
+extern "C" void func_ov005_02102c2c(u32 *param_1, int param_2, Vec3p *param_3, int param_4, int param_5, u32 param_6,
+ int param_7, char param_8, char param_9, char param_10);
+ARM void ActorRefill::vfunc_20(bool param1) {
+ bool var_r0;
+
+ if (param1) {
+ var_r0 = mUnk_0a4.mUnk_01;
+ } else {
+ var_r0 = mUnk_0a4.mUnk_00;
+ }
+ if (var_r0 && mUnk_164 != 0) {
+ Actor_UnkStruct_012 sp18;
+ sp18.mUnk_04 = 5;
+ sp18.mUnk_08 = 2;
+ sp18.mUnk_0c = 2;
+ sp18.mUnk_14 = 0x800;
+ sp18.mUnk_18 = 0x1000;
+ sp18.mUnk_02 = mUnk_164;
+ func_0202bc38(param1, &mPos, mUnk_15c, &sp18, 0);
+ func_ov005_02102c2c(&data_ov000_020e9370[0], 0, &mPos, 0x400, 0x400, 0, mUnk_164, 0, 0, 1);
+ }
+}
+
+extern unk32 *data_027e0e58;
+extern "C" void func_ov000_0207c1b0(unk32 *param1, unk32 param2, Vec3p *param3, unk32 param4, unk32 param5, unk32 param6);
+ARM void ActorRefill::func_ov014_02135474() {
+ s32 iVar1 = mUnk_130;
+ if (iVar1 != 4 && iVar1 != 5) {
+ func_ov000_0207c1b0(data_027e0e58, 0x241, &mPos, 2, 0, 0);
+ func_ov000_0207c1b0(data_027e0e58, 0x242, &mPos, 2, 0, 0);
+ mAlive = false;
+ }
+}
+
+ARM ActorRefillBombs::ActorRefillBombs() :
+ ActorRefill(0) {
+ mUnk_158 = 3;
+ mUnk_15c = 0x2e;
+}
+
+ARM ActorRefillBombs::~ActorRefillBombs() {}
+
+ARM ItemFlag ActorRefillBombs::vfunc_b4() {
+ return ItemFlag_BombBag;
+}
+
+ARM ActorRefillBombchus::ActorRefillBombchus() :
+ ActorRefill(1) {
+ mUnk_158 = 3;
+ mUnk_15c = 0x2f;
+}
+
+ARM ActorRefillBombchus::~ActorRefillBombchus() {}
+
+ARM ItemFlag ActorRefillBombchus::vfunc_b4() {
+ return ItemFlag_BombchuBag;
+}
+
+ARM ActorRefillArrows::ActorRefillArrows() :
+ ActorRefill(2) {
+ mUnk_158 = 5;
+ mUnk_15c = 0x2d;
+}
+
+ARM ActorRefillArrows::~ActorRefillArrows() {}
+
+ARM ItemFlag ActorRefillArrows::vfunc_b4() {
+ return ItemFlag_Bow;
+}
+
+ARM ActorRefillTime::ActorRefillTime() :
+ ActorRefill(3) {
+ mUnk_158 = 5;
+ mUnk_15c = 0x44;
+}
+
+ARM ActorRefillTime::~ActorRefillTime() {}
+
+ARM bool ActorRefillTime::vfunc_08() {
+ if (!ActorRefill::vfunc_08()) {
+ return false;
+ }
+ switch (mUnk_020.mUnk_00[0]) {
+ case 2: mUnk_158 = 5; break;
+ case 4: mUnk_158 = 15; break;
+ case 5: mUnk_158 = 30; break;
+ default:
+ case 0:
+ case 1:
+ case 3:
+ s32 temp_ip = gRandom.Next(10);
+ if (temp_ip >= 9) {
+ mUnk_158 = 30;
+ } else if (temp_ip >= 6) {
+ mUnk_158 = 15;
+ } else {
+ mUnk_158 = 5;
+ }
+ break;
+ }
+ switch (mUnk_158) {
+ case 15: mUnk_15c = 0x45; break;
+ case 30: mUnk_15c = 0x46; break;
+ default: mUnk_15c = 0x44; break;
+ }
+ return true;
+}
+
+ARM ItemFlag ActorRefillTime::vfunc_b4() {
+ return ItemFlag_None;
+}
+
+ARM ActorLSTM::ActorLSTM() :
+ ActorRefill(3) {
+ mUnk_158 = -5;
+ mUnk_15c = 0x47;
+}
+
+ARM ActorLSTM::~ActorLSTM() {}
+
+ARM bool ActorLSTM::vfunc_08() {
+ if (!ActorRefill::vfunc_08()) {
+ return false;
+ }
+ switch (mUnk_020.mUnk_00[0]) {
+ case 2: mUnk_158 = -5; break;
+ case 4: mUnk_158 = -15; break;
+ case 5: mUnk_158 = -30; break;
+ default:
+ case 0:
+ case 1:
+ case 3:
+ s32 temp_ip = gRandom.Next(10);
+ if (temp_ip >= 9) {
+ mUnk_158 = -30;
+ } else if (temp_ip >= 6) {
+ mUnk_158 = -15;
+ } else {
+ mUnk_158 = -5;
+ }
+ break;
+ }
+ switch (mUnk_158) {
+ case -15: mUnk_15c = 0x48; break;
+ case -30: mUnk_15c = 0x49; break;
+ default: mUnk_15c = 0x47; break;
+ }
+ return true;
+}
+
+ARM ItemFlag ActorLSTM::vfunc_b4() {
+ return ItemFlag_None;
+}