Link ElecHibaState.cpp + assorted State progress (#86)

* Match + link ElecHibaState

* BabyState progress

just StateMove::exec left non-matching

* QueenState progress

* Progress on StateRolling::exec

* Update progress.csv
This commit is contained in:
HeartPiece 2022-10-03 08:44:10 +11:00 committed by GitHub
parent ff2d3e70c6
commit d57047b96e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 868 additions and 3369 deletions

View File

@ -179,6 +179,7 @@ pikmin2.usa.dol: `sha1: 90d328bf8f190c90472e8c19e7e53c6ad0fe0d1a`
- <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectNishimuraU/DoorNode.cpp">plugProjectNishimuraU/DoorNode.cpp</a>
- <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectNishimuraU/ElecBugAnimator.cpp">plugProjectNishimuraU/ElecBugAnimator.cpp</a>
- <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectNishimuraU/ElecHibaAnimator.cpp">plugProjectNishimuraU/ElecHibaAnimator.cpp</a>
- <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectNishimuraU/ElecHibaState.cpp">plugProjectNishimuraU/ElecHibaState.cpp</a>
- <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectNishimuraU/ElecOtakara.cpp">plugProjectNishimuraU/ElecOtakara.cpp</a>
- <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectNishimuraU/EnemyUnit.cpp">plugProjectNishimuraU/EnemyUnit.cpp</a>
- <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectNishimuraU/FireOtakara.cpp">plugProjectNishimuraU/FireOtakara.cpp</a>

View File

@ -1,774 +0,0 @@
.include "macros.inc"
.section .data, "wa" # 0x8049E220 - 0x804EFC20
.balign 8
.global __vt__Q34Game8ElecHiba11StateAttack
__vt__Q34Game8ElecHiba11StateAttack:
.4byte 0
.4byte 0
.4byte init__Q34Game8ElecHiba11StateAttackFPQ24Game9EnemyBasePQ24Game8StateArg
.4byte exec__Q34Game8ElecHiba11StateAttackFPQ24Game9EnemyBase
.4byte cleanup__Q34Game8ElecHiba11StateAttackFPQ24Game9EnemyBase
.4byte resume__Q24Game13EnemyFSMStateFPQ24Game9EnemyBase
.4byte restart__Q24Game13EnemyFSMStateFPQ24Game9EnemyBase
.4byte transit__Q24Game13EnemyFSMStateFPQ24Game9EnemyBaseiPQ24Game8StateArg
.4byte doDirectDraw__Q24Game13EnemyFSMStateFPQ24Game9EnemyBaseR8Graphics
.global __vt__Q34Game8ElecHiba9StateSign
__vt__Q34Game8ElecHiba9StateSign:
.4byte 0
.4byte 0
.4byte init__Q34Game8ElecHiba9StateSignFPQ24Game9EnemyBasePQ24Game8StateArg
.4byte exec__Q34Game8ElecHiba9StateSignFPQ24Game9EnemyBase
.4byte cleanup__Q34Game8ElecHiba9StateSignFPQ24Game9EnemyBase
.4byte resume__Q24Game13EnemyFSMStateFPQ24Game9EnemyBase
.4byte restart__Q24Game13EnemyFSMStateFPQ24Game9EnemyBase
.4byte transit__Q24Game13EnemyFSMStateFPQ24Game9EnemyBaseiPQ24Game8StateArg
.4byte doDirectDraw__Q24Game13EnemyFSMStateFPQ24Game9EnemyBaseR8Graphics
.global __vt__Q34Game8ElecHiba9StateWait
__vt__Q34Game8ElecHiba9StateWait:
.4byte 0
.4byte 0
.4byte init__Q34Game8ElecHiba9StateWaitFPQ24Game9EnemyBasePQ24Game8StateArg
.4byte exec__Q34Game8ElecHiba9StateWaitFPQ24Game9EnemyBase
.4byte cleanup__Q34Game8ElecHiba9StateWaitFPQ24Game9EnemyBase
.4byte resume__Q24Game13EnemyFSMStateFPQ24Game9EnemyBase
.4byte restart__Q24Game13EnemyFSMStateFPQ24Game9EnemyBase
.4byte transit__Q24Game13EnemyFSMStateFPQ24Game9EnemyBaseiPQ24Game8StateArg
.4byte doDirectDraw__Q24Game13EnemyFSMStateFPQ24Game9EnemyBaseR8Graphics
.global __vt__Q34Game8ElecHiba9StateDead
__vt__Q34Game8ElecHiba9StateDead:
.4byte 0
.4byte 0
.4byte init__Q34Game8ElecHiba9StateDeadFPQ24Game9EnemyBasePQ24Game8StateArg
.4byte exec__Q34Game8ElecHiba9StateDeadFPQ24Game9EnemyBase
.4byte cleanup__Q34Game8ElecHiba9StateDeadFPQ24Game9EnemyBase
.4byte resume__Q24Game13EnemyFSMStateFPQ24Game9EnemyBase
.4byte restart__Q24Game13EnemyFSMStateFPQ24Game9EnemyBase
.4byte transit__Q24Game13EnemyFSMStateFPQ24Game9EnemyBaseiPQ24Game8StateArg
.4byte doDirectDraw__Q24Game13EnemyFSMStateFPQ24Game9EnemyBaseR8Graphics
.global __vt__Q34Game8ElecHiba5State
__vt__Q34Game8ElecHiba5State:
.4byte 0
.4byte 0
.4byte init__Q24Game13EnemyFSMStateFPQ24Game9EnemyBasePQ24Game8StateArg
.4byte exec__Q24Game13EnemyFSMStateFPQ24Game9EnemyBase
.4byte cleanup__Q24Game13EnemyFSMStateFPQ24Game9EnemyBase
.4byte resume__Q24Game13EnemyFSMStateFPQ24Game9EnemyBase
.4byte restart__Q24Game13EnemyFSMStateFPQ24Game9EnemyBase
.4byte transit__Q24Game13EnemyFSMStateFPQ24Game9EnemyBaseiPQ24Game8StateArg
.4byte doDirectDraw__Q24Game13EnemyFSMStateFPQ24Game9EnemyBaseR8Graphics
.global __vt__Q34Game8ElecHiba3FSM
__vt__Q34Game8ElecHiba3FSM:
.4byte 0
.4byte 0
.4byte init__Q34Game8ElecHiba3FSMFPQ24Game9EnemyBase
.4byte start__Q24Game17EnemyStateMachineFPQ24Game9EnemyBaseiPQ24Game8StateArg
.4byte exec__Q24Game17EnemyStateMachineFPQ24Game9EnemyBase
.4byte transit__Q24Game17EnemyStateMachineFPQ24Game9EnemyBaseiPQ24Game8StateArg
.4byte doDirectDraw__Q24Game17EnemyStateMachineFPQ24Game9EnemyBaseR8Graphics
.4byte getCurrState__Q24Game17EnemyStateMachineFPQ24Game9EnemyBase
.4byte setCurrState__Q24Game17EnemyStateMachineFPQ24Game9EnemyBasePQ24Game13EnemyFSMState
.section .sdata2, "a" # 0x80516360 - 0x80520E40
.balign 8
lbl_8051B098:
.asciz "dead"
.balign 4
lbl_8051B0A0:
.asciz "wait"
.balign 4
lbl_8051B0A8:
.asciz "sign"
.balign 4
lbl_8051B0B0:
.asciz "attack"
.balign 4
lbl_8051B0B8:
.float 0.0
.section .text, "ax" # 0x800056C0 - 0x80472F00
.global init__Q34Game8ElecHiba3FSMFPQ24Game9EnemyBase
init__Q34Game8ElecHiba3FSMFPQ24Game9EnemyBase:
/* 8026DFD8 0026AF18 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 8026DFDC 0026AF1C 7C 08 02 A6 */ mflr r0
/* 8026DFE0 0026AF20 38 80 00 04 */ li r4, 4
/* 8026DFE4 0026AF24 90 01 00 14 */ stw r0, 0x14(r1)
/* 8026DFE8 0026AF28 93 E1 00 0C */ stw r31, 0xc(r1)
/* 8026DFEC 0026AF2C 7C 7F 1B 78 */ mr r31, r3
/* 8026DFF0 0026AF30 4B EC 28 75 */ bl create__Q24Game17EnemyStateMachineFi
/* 8026DFF4 0026AF34 38 60 00 10 */ li r3, 0x10
/* 8026DFF8 0026AF38 4B DB 5E AD */ bl __nw__FUl
/* 8026DFFC 0026AF3C 7C 64 1B 79 */ or. r4, r3, r3
/* 8026E000 0026AF40 41 82 00 3C */ beq lbl_8026E03C
/* 8026E004 0026AF44 3C 60 80 4B */ lis r3, __vt__Q24Game13EnemyFSMState@ha
/* 8026E008 0026AF48 3C A0 80 4C */ lis r5, __vt__Q34Game8ElecHiba5State@ha
/* 8026E00C 0026AF4C 38 03 F9 A4 */ addi r0, r3, __vt__Q24Game13EnemyFSMState@l
/* 8026E010 0026AF50 3C 60 80 4C */ lis r3, __vt__Q34Game8ElecHiba9StateDead@ha
/* 8026E014 0026AF54 90 04 00 00 */ stw r0, 0(r4)
/* 8026E018 0026AF58 38 E0 00 00 */ li r7, 0
/* 8026E01C 0026AF5C 38 C5 5D 98 */ addi r6, r5, __vt__Q34Game8ElecHiba5State@l
/* 8026E020 0026AF60 38 A2 CD 38 */ addi r5, r2, lbl_8051B098@sda21
/* 8026E024 0026AF64 90 E4 00 04 */ stw r7, 4(r4)
/* 8026E028 0026AF68 38 03 5D 74 */ addi r0, r3, __vt__Q34Game8ElecHiba9StateDead@l
/* 8026E02C 0026AF6C 90 E4 00 08 */ stw r7, 8(r4)
/* 8026E030 0026AF70 90 C4 00 00 */ stw r6, 0(r4)
/* 8026E034 0026AF74 90 A4 00 0C */ stw r5, 0xc(r4)
/* 8026E038 0026AF78 90 04 00 00 */ stw r0, 0(r4)
lbl_8026E03C:
/* 8026E03C 0026AF7C 7F E3 FB 78 */ mr r3, r31
/* 8026E040 0026AF80 4B EC 28 C9 */ bl registerState__Q24Game17EnemyStateMachineFPQ24Game13EnemyFSMState
/* 8026E044 0026AF84 38 60 00 10 */ li r3, 0x10
/* 8026E048 0026AF88 4B DB 5E 5D */ bl __nw__FUl
/* 8026E04C 0026AF8C 7C 64 1B 79 */ or. r4, r3, r3
/* 8026E050 0026AF90 41 82 00 40 */ beq lbl_8026E090
/* 8026E054 0026AF94 3C 60 80 4B */ lis r3, __vt__Q24Game13EnemyFSMState@ha
/* 8026E058 0026AF98 3C A0 80 4C */ lis r5, __vt__Q34Game8ElecHiba5State@ha
/* 8026E05C 0026AF9C 38 03 F9 A4 */ addi r0, r3, __vt__Q24Game13EnemyFSMState@l
/* 8026E060 0026AFA0 3C 60 80 4C */ lis r3, __vt__Q34Game8ElecHiba9StateWait@ha
/* 8026E064 0026AFA4 90 04 00 00 */ stw r0, 0(r4)
/* 8026E068 0026AFA8 38 00 00 01 */ li r0, 1
/* 8026E06C 0026AFAC 38 E0 00 00 */ li r7, 0
/* 8026E070 0026AFB0 38 C5 5D 98 */ addi r6, r5, __vt__Q34Game8ElecHiba5State@l
/* 8026E074 0026AFB4 90 04 00 04 */ stw r0, 4(r4)
/* 8026E078 0026AFB8 38 A2 CD 40 */ addi r5, r2, lbl_8051B0A0@sda21
/* 8026E07C 0026AFBC 38 03 5D 50 */ addi r0, r3, __vt__Q34Game8ElecHiba9StateWait@l
/* 8026E080 0026AFC0 90 E4 00 08 */ stw r7, 8(r4)
/* 8026E084 0026AFC4 90 C4 00 00 */ stw r6, 0(r4)
/* 8026E088 0026AFC8 90 A4 00 0C */ stw r5, 0xc(r4)
/* 8026E08C 0026AFCC 90 04 00 00 */ stw r0, 0(r4)
lbl_8026E090:
/* 8026E090 0026AFD0 7F E3 FB 78 */ mr r3, r31
/* 8026E094 0026AFD4 4B EC 28 75 */ bl registerState__Q24Game17EnemyStateMachineFPQ24Game13EnemyFSMState
/* 8026E098 0026AFD8 38 60 00 10 */ li r3, 0x10
/* 8026E09C 0026AFDC 4B DB 5E 09 */ bl __nw__FUl
/* 8026E0A0 0026AFE0 7C 64 1B 79 */ or. r4, r3, r3
/* 8026E0A4 0026AFE4 41 82 00 40 */ beq lbl_8026E0E4
/* 8026E0A8 0026AFE8 3C 60 80 4B */ lis r3, __vt__Q24Game13EnemyFSMState@ha
/* 8026E0AC 0026AFEC 3C A0 80 4C */ lis r5, __vt__Q34Game8ElecHiba5State@ha
/* 8026E0B0 0026AFF0 38 03 F9 A4 */ addi r0, r3, __vt__Q24Game13EnemyFSMState@l
/* 8026E0B4 0026AFF4 3C 60 80 4C */ lis r3, __vt__Q34Game8ElecHiba9StateSign@ha
/* 8026E0B8 0026AFF8 90 04 00 00 */ stw r0, 0(r4)
/* 8026E0BC 0026AFFC 38 00 00 02 */ li r0, 2
/* 8026E0C0 0026B000 38 E0 00 00 */ li r7, 0
/* 8026E0C4 0026B004 38 C5 5D 98 */ addi r6, r5, __vt__Q34Game8ElecHiba5State@l
/* 8026E0C8 0026B008 90 04 00 04 */ stw r0, 4(r4)
/* 8026E0CC 0026B00C 38 A2 CD 48 */ addi r5, r2, lbl_8051B0A8@sda21
/* 8026E0D0 0026B010 38 03 5D 2C */ addi r0, r3, __vt__Q34Game8ElecHiba9StateSign@l
/* 8026E0D4 0026B014 90 E4 00 08 */ stw r7, 8(r4)
/* 8026E0D8 0026B018 90 C4 00 00 */ stw r6, 0(r4)
/* 8026E0DC 0026B01C 90 A4 00 0C */ stw r5, 0xc(r4)
/* 8026E0E0 0026B020 90 04 00 00 */ stw r0, 0(r4)
lbl_8026E0E4:
/* 8026E0E4 0026B024 7F E3 FB 78 */ mr r3, r31
/* 8026E0E8 0026B028 4B EC 28 21 */ bl registerState__Q24Game17EnemyStateMachineFPQ24Game13EnemyFSMState
/* 8026E0EC 0026B02C 38 60 00 10 */ li r3, 0x10
/* 8026E0F0 0026B030 4B DB 5D B5 */ bl __nw__FUl
/* 8026E0F4 0026B034 7C 64 1B 79 */ or. r4, r3, r3
/* 8026E0F8 0026B038 41 82 00 40 */ beq lbl_8026E138
/* 8026E0FC 0026B03C 3C 60 80 4B */ lis r3, __vt__Q24Game13EnemyFSMState@ha
/* 8026E100 0026B040 3C A0 80 4C */ lis r5, __vt__Q34Game8ElecHiba5State@ha
/* 8026E104 0026B044 38 03 F9 A4 */ addi r0, r3, __vt__Q24Game13EnemyFSMState@l
/* 8026E108 0026B048 3C 60 80 4C */ lis r3, __vt__Q34Game8ElecHiba11StateAttack@ha
/* 8026E10C 0026B04C 90 04 00 00 */ stw r0, 0(r4)
/* 8026E110 0026B050 38 00 00 03 */ li r0, 3
/* 8026E114 0026B054 38 E0 00 00 */ li r7, 0
/* 8026E118 0026B058 38 C5 5D 98 */ addi r6, r5, __vt__Q34Game8ElecHiba5State@l
/* 8026E11C 0026B05C 90 04 00 04 */ stw r0, 4(r4)
/* 8026E120 0026B060 38 A2 CD 50 */ addi r5, r2, lbl_8051B0B0@sda21
/* 8026E124 0026B064 38 03 5D 08 */ addi r0, r3, __vt__Q34Game8ElecHiba11StateAttack@l
/* 8026E128 0026B068 90 E4 00 08 */ stw r7, 8(r4)
/* 8026E12C 0026B06C 90 C4 00 00 */ stw r6, 0(r4)
/* 8026E130 0026B070 90 A4 00 0C */ stw r5, 0xc(r4)
/* 8026E134 0026B074 90 04 00 00 */ stw r0, 0(r4)
lbl_8026E138:
/* 8026E138 0026B078 7F E3 FB 78 */ mr r3, r31
/* 8026E13C 0026B07C 4B EC 27 CD */ bl registerState__Q24Game17EnemyStateMachineFPQ24Game13EnemyFSMState
/* 8026E140 0026B080 80 01 00 14 */ lwz r0, 0x14(r1)
/* 8026E144 0026B084 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 8026E148 0026B088 7C 08 03 A6 */ mtlr r0
/* 8026E14C 0026B08C 38 21 00 10 */ addi r1, r1, 0x10
/* 8026E150 0026B090 4E 80 00 20 */ blr
.global init__Q34Game8ElecHiba9StateDeadFPQ24Game9EnemyBasePQ24Game8StateArg
init__Q34Game8ElecHiba9StateDeadFPQ24Game9EnemyBasePQ24Game8StateArg:
/* 8026E154 0026B094 94 21 FF 60 */ stwu r1, -0xa0(r1)
/* 8026E158 0026B098 7C 08 02 A6 */ mflr r0
/* 8026E15C 0026B09C 90 01 00 A4 */ stw r0, 0xa4(r1)
/* 8026E160 0026B0A0 DB E1 00 90 */ stfd f31, 0x90(r1)
/* 8026E164 0026B0A4 F3 E1 00 98 */ psq_st f31, 152(r1), 0, qr0
/* 8026E168 0026B0A8 93 E1 00 8C */ stw r31, 0x8c(r1)
/* 8026E16C 0026B0AC 7C 9F 23 78 */ mr r31, r4
/* 8026E170 0026B0B0 80 84 01 E0 */ lwz r4, 0x1e0(r4)
/* 8026E174 0026B0B4 38 00 00 00 */ li r0, 0
/* 8026E178 0026B0B8 60 84 00 04 */ ori r4, r4, 4
/* 8026E17C 0026B0BC 7F E3 FB 78 */ mr r3, r31
/* 8026E180 0026B0C0 90 9F 01 E0 */ stw r4, 0x1e0(r31)
/* 8026E184 0026B0C4 80 9F 01 E0 */ lwz r4, 0x1e0(r31)
/* 8026E188 0026B0C8 54 84 05 66 */ rlwinm r4, r4, 0, 0x15, 0x13
/* 8026E18C 0026B0CC 90 9F 01 E0 */ stw r4, 0x1e0(r31)
/* 8026E190 0026B0D0 80 9F 01 E0 */ lwz r4, 0x1e0(r31)
/* 8026E194 0026B0D4 60 84 00 01 */ ori r4, r4, 1
/* 8026E198 0026B0D8 90 9F 01 E0 */ stw r4, 0x1e0(r31)
/* 8026E19C 0026B0DC 80 9F 01 E0 */ lwz r4, 0x1e0(r31)
/* 8026E1A0 0026B0E0 54 84 07 76 */ rlwinm r4, r4, 0, 0x1d, 0x1b
/* 8026E1A4 0026B0E4 90 9F 01 E0 */ stw r4, 0x1e0(r31)
/* 8026E1A8 0026B0E8 98 1F 02 C0 */ stb r0, 0x2c0(r31)
/* 8026E1AC 0026B0EC 48 00 24 5D */ bl generatorKill__Q34Game8ElecHiba3ObjFv
/* 8026E1B0 0026B0F0 7F E3 FB 78 */ mr r3, r31
/* 8026E1B4 0026B0F4 38 80 00 00 */ li r4, 0
/* 8026E1B8 0026B0F8 38 A0 00 00 */ li r5, 0
/* 8026E1BC 0026B0FC 4B E9 6E 49 */ bl startMotion__Q24Game9EnemyBaseFiPQ28SysShape14MotionListener
/* 8026E1C0 0026B100 7F E3 FB 78 */ mr r3, r31
/* 8026E1C4 0026B104 81 9F 00 00 */ lwz r12, 0(r31)
/* 8026E1C8 0026B108 81 8C 00 F4 */ lwz r12, 0xf4(r12)
/* 8026E1CC 0026B10C 7D 89 03 A6 */ mtctr r12
/* 8026E1D0 0026B110 4E 80 04 21 */ bctrl
/* 8026E1D4 0026B114 81 83 00 00 */ lwz r12, 0(r3)
/* 8026E1D8 0026B118 38 80 58 0C */ li r4, 0x580c
/* 8026E1DC 0026B11C 38 A0 00 00 */ li r5, 0
/* 8026E1E0 0026B120 81 8C 00 0C */ lwz r12, 0xc(r12)
/* 8026E1E4 0026B124 7D 89 03 A6 */ mtctr r12
/* 8026E1E8 0026B128 4E 80 04 21 */ bctrl
/* 8026E1EC 0026B12C C0 22 CD 58 */ lfs f1, lbl_8051B0B8@sda21(r2)
/* 8026E1F0 0026B130 7F E3 FB 78 */ mr r3, r31
/* 8026E1F4 0026B134 48 20 02 21 */ bl PSStartEnemyFatalHitSE__FPQ24Game9EnemyBasef
/* 8026E1F8 0026B138 7F E4 FB 78 */ mr r4, r31
/* 8026E1FC 0026B13C 38 61 00 34 */ addi r3, r1, 0x34
/* 8026E200 0026B140 81 9F 00 00 */ lwz r12, 0(r31)
/* 8026E204 0026B144 81 8C 00 08 */ lwz r12, 8(r12)
/* 8026E208 0026B148 7D 89 03 A6 */ mtctr r12
/* 8026E20C 0026B14C 4E 80 04 21 */ bctrl
/* 8026E210 0026B150 7F E3 FB 78 */ mr r3, r31
/* 8026E214 0026B154 C0 41 00 34 */ lfs f2, 0x34(r1)
/* 8026E218 0026B158 81 9F 00 00 */ lwz r12, 0(r31)
/* 8026E21C 0026B15C C0 21 00 38 */ lfs f1, 0x38(r1)
/* 8026E220 0026B160 C0 01 00 3C */ lfs f0, 0x3c(r1)
/* 8026E224 0026B164 81 8C 02 58 */ lwz r12, 0x258(r12)
/* 8026E228 0026B168 D0 41 00 4C */ stfs f2, 0x4c(r1)
/* 8026E22C 0026B16C C3 FF 01 F8 */ lfs f31, 0x1f8(r31)
/* 8026E230 0026B170 D0 21 00 50 */ stfs f1, 0x50(r1)
/* 8026E234 0026B174 D0 01 00 54 */ stfs f0, 0x54(r1)
/* 8026E238 0026B178 7D 89 03 A6 */ mtctr r12
/* 8026E23C 0026B17C 4E 80 04 21 */ bctrl
/* 8026E240 0026B180 80 C1 00 4C */ lwz r6, 0x4c(r1)
/* 8026E244 0026B184 3C A0 80 4B */ lis r5, __vt__Q23efx3Arg@ha
/* 8026E248 0026B188 80 01 00 50 */ lwz r0, 0x50(r1)
/* 8026E24C 0026B18C 3C 80 80 4B */ lis r4, __vt__Q23efx5TBase@ha
/* 8026E250 0026B190 81 01 00 54 */ lwz r8, 0x54(r1)
/* 8026E254 0026B194 38 E5 A7 EC */ addi r7, r5, __vt__Q23efx3Arg@l
/* 8026E258 0026B198 90 C1 00 28 */ stw r6, 0x28(r1)
/* 8026E25C 0026B19C 38 A4 A7 F8 */ addi r5, r4, __vt__Q23efx5TBase@l
/* 8026E260 0026B1A0 3C C0 80 4B */ lis r6, __vt__Q23efx12ArgEnemyType@ha
/* 8026E264 0026B1A4 3C 80 80 4F */ lis r4, __vt__Q23efx10TEnemyBomb@ha
/* 8026E268 0026B1A8 90 01 00 2C */ stw r0, 0x2c(r1)
/* 8026E26C 0026B1AC 38 C6 A7 E0 */ addi r6, r6, __vt__Q23efx12ArgEnemyType@l
/* 8026E270 0026B1B0 C0 41 00 28 */ lfs f2, 0x28(r1)
/* 8026E274 0026B1B4 38 04 85 D4 */ addi r0, r4, __vt__Q23efx10TEnemyBomb@l
/* 8026E278 0026B1B8 91 01 00 30 */ stw r8, 0x30(r1)
/* 8026E27C 0026B1BC 38 81 00 70 */ addi r4, r1, 0x70
/* 8026E280 0026B1C0 C0 21 00 2C */ lfs f1, 0x2c(r1)
/* 8026E284 0026B1C4 90 E1 00 70 */ stw r7, 0x70(r1)
/* 8026E288 0026B1C8 C0 01 00 30 */ lfs f0, 0x30(r1)
/* 8026E28C 0026B1CC 90 A1 00 0C */ stw r5, 0xc(r1)
/* 8026E290 0026B1D0 90 61 00 80 */ stw r3, 0x80(r1)
/* 8026E294 0026B1D4 38 61 00 0C */ addi r3, r1, 0xc
/* 8026E298 0026B1D8 D0 41 00 74 */ stfs f2, 0x74(r1)
/* 8026E29C 0026B1DC D0 21 00 78 */ stfs f1, 0x78(r1)
/* 8026E2A0 0026B1E0 D0 01 00 7C */ stfs f0, 0x7c(r1)
/* 8026E2A4 0026B1E4 90 C1 00 70 */ stw r6, 0x70(r1)
/* 8026E2A8 0026B1E8 D3 E1 00 84 */ stfs f31, 0x84(r1)
/* 8026E2AC 0026B1EC 90 01 00 0C */ stw r0, 0xc(r1)
/* 8026E2B0 0026B1F0 48 15 AA D5 */ bl create__Q23efx10TEnemyBombFPQ23efx3Arg
/* 8026E2B4 0026B1F4 7F E3 FB 78 */ mr r3, r31
/* 8026E2B8 0026B1F8 48 00 16 81 */ bl getChildObjPtr__Q34Game8ElecHiba3ObjFv
/* 8026E2BC 0026B1FC 7C 7F 1B 79 */ or. r31, r3, r3
/* 8026E2C0 0026B200 41 82 01 44 */ beq lbl_8026E404
/* 8026E2C4 0026B204 80 9F 01 E0 */ lwz r4, 0x1e0(r31)
/* 8026E2C8 0026B208 38 00 00 00 */ li r0, 0
/* 8026E2CC 0026B20C 60 84 00 04 */ ori r4, r4, 4
/* 8026E2D0 0026B210 90 9F 01 E0 */ stw r4, 0x1e0(r31)
/* 8026E2D4 0026B214 80 9F 01 E0 */ lwz r4, 0x1e0(r31)
/* 8026E2D8 0026B218 54 84 05 66 */ rlwinm r4, r4, 0, 0x15, 0x13
/* 8026E2DC 0026B21C 90 9F 01 E0 */ stw r4, 0x1e0(r31)
/* 8026E2E0 0026B220 80 9F 01 E0 */ lwz r4, 0x1e0(r31)
/* 8026E2E4 0026B224 60 84 00 01 */ ori r4, r4, 1
/* 8026E2E8 0026B228 90 9F 01 E0 */ stw r4, 0x1e0(r31)
/* 8026E2EC 0026B22C 80 9F 01 E0 */ lwz r4, 0x1e0(r31)
/* 8026E2F0 0026B230 54 84 07 76 */ rlwinm r4, r4, 0, 0x1d, 0x1b
/* 8026E2F4 0026B234 90 9F 01 E0 */ stw r4, 0x1e0(r31)
/* 8026E2F8 0026B238 98 1F 02 C0 */ stb r0, 0x2c0(r31)
/* 8026E2FC 0026B23C 48 00 23 0D */ bl generatorKill__Q34Game8ElecHiba3ObjFv
/* 8026E300 0026B240 7F E3 FB 78 */ mr r3, r31
/* 8026E304 0026B244 38 80 00 00 */ li r4, 0
/* 8026E308 0026B248 38 A0 00 00 */ li r5, 0
/* 8026E30C 0026B24C 4B E9 6C F9 */ bl startMotion__Q24Game9EnemyBaseFiPQ28SysShape14MotionListener
/* 8026E310 0026B250 7F E3 FB 78 */ mr r3, r31
/* 8026E314 0026B254 81 9F 00 00 */ lwz r12, 0(r31)
/* 8026E318 0026B258 81 8C 00 F4 */ lwz r12, 0xf4(r12)
/* 8026E31C 0026B25C 7D 89 03 A6 */ mtctr r12
/* 8026E320 0026B260 4E 80 04 21 */ bctrl
/* 8026E324 0026B264 81 83 00 00 */ lwz r12, 0(r3)
/* 8026E328 0026B268 38 80 58 0C */ li r4, 0x580c
/* 8026E32C 0026B26C 38 A0 00 00 */ li r5, 0
/* 8026E330 0026B270 81 8C 00 0C */ lwz r12, 0xc(r12)
/* 8026E334 0026B274 7D 89 03 A6 */ mtctr r12
/* 8026E338 0026B278 4E 80 04 21 */ bctrl
/* 8026E33C 0026B27C C0 22 CD 58 */ lfs f1, lbl_8051B0B8@sda21(r2)
/* 8026E340 0026B280 7F E3 FB 78 */ mr r3, r31
/* 8026E344 0026B284 48 20 00 D1 */ bl PSStartEnemyFatalHitSE__FPQ24Game9EnemyBasef
/* 8026E348 0026B288 7F E4 FB 78 */ mr r4, r31
/* 8026E34C 0026B28C 38 61 00 1C */ addi r3, r1, 0x1c
/* 8026E350 0026B290 81 9F 00 00 */ lwz r12, 0(r31)
/* 8026E354 0026B294 81 8C 00 08 */ lwz r12, 8(r12)
/* 8026E358 0026B298 7D 89 03 A6 */ mtctr r12
/* 8026E35C 0026B29C 4E 80 04 21 */ bctrl
/* 8026E360 0026B2A0 7F E3 FB 78 */ mr r3, r31
/* 8026E364 0026B2A4 C0 41 00 1C */ lfs f2, 0x1c(r1)
/* 8026E368 0026B2A8 81 9F 00 00 */ lwz r12, 0(r31)
/* 8026E36C 0026B2AC C0 21 00 20 */ lfs f1, 0x20(r1)
/* 8026E370 0026B2B0 C0 01 00 24 */ lfs f0, 0x24(r1)
/* 8026E374 0026B2B4 81 8C 02 58 */ lwz r12, 0x258(r12)
/* 8026E378 0026B2B8 D0 41 00 40 */ stfs f2, 0x40(r1)
/* 8026E37C 0026B2BC C3 FF 01 F8 */ lfs f31, 0x1f8(r31)
/* 8026E380 0026B2C0 D0 21 00 44 */ stfs f1, 0x44(r1)
/* 8026E384 0026B2C4 D0 01 00 48 */ stfs f0, 0x48(r1)
/* 8026E388 0026B2C8 7D 89 03 A6 */ mtctr r12
/* 8026E38C 0026B2CC 4E 80 04 21 */ bctrl
/* 8026E390 0026B2D0 80 C1 00 40 */ lwz r6, 0x40(r1)
/* 8026E394 0026B2D4 3C A0 80 4B */ lis r5, __vt__Q23efx3Arg@ha
/* 8026E398 0026B2D8 80 01 00 44 */ lwz r0, 0x44(r1)
/* 8026E39C 0026B2DC 3C 80 80 4B */ lis r4, __vt__Q23efx5TBase@ha
/* 8026E3A0 0026B2E0 81 01 00 48 */ lwz r8, 0x48(r1)
/* 8026E3A4 0026B2E4 38 E5 A7 EC */ addi r7, r5, __vt__Q23efx3Arg@l
/* 8026E3A8 0026B2E8 90 C1 00 10 */ stw r6, 0x10(r1)
/* 8026E3AC 0026B2EC 38 A4 A7 F8 */ addi r5, r4, __vt__Q23efx5TBase@l
/* 8026E3B0 0026B2F0 3C C0 80 4B */ lis r6, __vt__Q23efx12ArgEnemyType@ha
/* 8026E3B4 0026B2F4 3C 80 80 4F */ lis r4, __vt__Q23efx10TEnemyBomb@ha
/* 8026E3B8 0026B2F8 90 01 00 14 */ stw r0, 0x14(r1)
/* 8026E3BC 0026B2FC 38 C6 A7 E0 */ addi r6, r6, __vt__Q23efx12ArgEnemyType@l
/* 8026E3C0 0026B300 C0 41 00 10 */ lfs f2, 0x10(r1)
/* 8026E3C4 0026B304 38 04 85 D4 */ addi r0, r4, __vt__Q23efx10TEnemyBomb@l
/* 8026E3C8 0026B308 91 01 00 18 */ stw r8, 0x18(r1)
/* 8026E3CC 0026B30C 38 81 00 58 */ addi r4, r1, 0x58
/* 8026E3D0 0026B310 C0 21 00 14 */ lfs f1, 0x14(r1)
/* 8026E3D4 0026B314 90 E1 00 58 */ stw r7, 0x58(r1)
/* 8026E3D8 0026B318 C0 01 00 18 */ lfs f0, 0x18(r1)
/* 8026E3DC 0026B31C 90 A1 00 08 */ stw r5, 8(r1)
/* 8026E3E0 0026B320 90 61 00 68 */ stw r3, 0x68(r1)
/* 8026E3E4 0026B324 38 61 00 08 */ addi r3, r1, 8
/* 8026E3E8 0026B328 D0 41 00 5C */ stfs f2, 0x5c(r1)
/* 8026E3EC 0026B32C D0 21 00 60 */ stfs f1, 0x60(r1)
/* 8026E3F0 0026B330 D0 01 00 64 */ stfs f0, 0x64(r1)
/* 8026E3F4 0026B334 90 C1 00 58 */ stw r6, 0x58(r1)
/* 8026E3F8 0026B338 D3 E1 00 6C */ stfs f31, 0x6c(r1)
/* 8026E3FC 0026B33C 90 01 00 08 */ stw r0, 8(r1)
/* 8026E400 0026B340 48 15 A9 85 */ bl create__Q23efx10TEnemyBombFPQ23efx3Arg
lbl_8026E404:
/* 8026E404 0026B344 E3 E1 00 98 */ psq_l f31, 152(r1), 0, qr0
/* 8026E408 0026B348 80 01 00 A4 */ lwz r0, 0xa4(r1)
/* 8026E40C 0026B34C CB E1 00 90 */ lfd f31, 0x90(r1)
/* 8026E410 0026B350 83 E1 00 8C */ lwz r31, 0x8c(r1)
/* 8026E414 0026B354 7C 08 03 A6 */ mtlr r0
/* 8026E418 0026B358 38 21 00 A0 */ addi r1, r1, 0xa0
/* 8026E41C 0026B35C 4E 80 00 20 */ blr
.global getEnemyTypeID__Q34Game8ElecHiba3ObjFv
getEnemyTypeID__Q34Game8ElecHiba3ObjFv:
/* 8026E420 0026B360 38 60 00 16 */ li r3, 0x16
/* 8026E424 0026B364 4E 80 00 20 */ blr
.global exec__Q34Game8ElecHiba9StateDeadFPQ24Game9EnemyBase
exec__Q34Game8ElecHiba9StateDeadFPQ24Game9EnemyBase:
/* 8026E428 0026B368 4E 80 00 20 */ blr
.global cleanup__Q34Game8ElecHiba9StateDeadFPQ24Game9EnemyBase
cleanup__Q34Game8ElecHiba9StateDeadFPQ24Game9EnemyBase:
/* 8026E42C 0026B36C 4E 80 00 20 */ blr
.global init__Q34Game8ElecHiba9StateWaitFPQ24Game9EnemyBasePQ24Game8StateArg
init__Q34Game8ElecHiba9StateWaitFPQ24Game9EnemyBasePQ24Game8StateArg:
/* 8026E430 0026B370 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 8026E434 0026B374 7C 08 02 A6 */ mflr r0
/* 8026E438 0026B378 28 05 00 00 */ cmplwi r5, 0
/* 8026E43C 0026B37C 90 01 00 14 */ stw r0, 0x14(r1)
/* 8026E440 0026B380 93 E1 00 0C */ stw r31, 0xc(r1)
/* 8026E444 0026B384 7C 9F 23 78 */ mr r31, r4
/* 8026E448 0026B388 41 82 00 10 */ beq lbl_8026E458
/* 8026E44C 0026B38C C0 05 00 00 */ lfs f0, 0(r5)
/* 8026E450 0026B390 D0 1F 02 C4 */ stfs f0, 0x2c4(r31)
/* 8026E454 0026B394 48 00 00 0C */ b lbl_8026E460
lbl_8026E458:
/* 8026E458 0026B398 C0 02 CD 58 */ lfs f0, lbl_8051B0B8@sda21(r2)
/* 8026E45C 0026B39C D0 1F 02 C4 */ stfs f0, 0x2c4(r31)
lbl_8026E460:
/* 8026E460 0026B3A0 7F E3 FB 78 */ mr r3, r31
/* 8026E464 0026B3A4 38 80 00 00 */ li r4, 0
/* 8026E468 0026B3A8 38 A0 00 00 */ li r5, 0
/* 8026E46C 0026B3AC 4B E9 6B 99 */ bl startMotion__Q24Game9EnemyBaseFiPQ28SysShape14MotionListener
/* 8026E470 0026B3B0 7F E3 FB 78 */ mr r3, r31
/* 8026E474 0026B3B4 48 00 14 C5 */ bl getChildObjPtr__Q34Game8ElecHiba3ObjFv
/* 8026E478 0026B3B8 28 03 00 00 */ cmplwi r3, 0
/* 8026E47C 0026B3BC 41 82 00 10 */ beq lbl_8026E48C
/* 8026E480 0026B3C0 38 80 00 00 */ li r4, 0
/* 8026E484 0026B3C4 38 A0 00 00 */ li r5, 0
/* 8026E488 0026B3C8 4B E9 6B 7D */ bl startMotion__Q24Game9EnemyBaseFiPQ28SysShape14MotionListener
lbl_8026E48C:
/* 8026E48C 0026B3CC 80 01 00 14 */ lwz r0, 0x14(r1)
/* 8026E490 0026B3D0 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 8026E494 0026B3D4 7C 08 03 A6 */ mtlr r0
/* 8026E498 0026B3D8 38 21 00 10 */ addi r1, r1, 0x10
/* 8026E49C 0026B3DC 4E 80 00 20 */ blr
.global exec__Q34Game8ElecHiba9StateWaitFPQ24Game9EnemyBase
exec__Q34Game8ElecHiba9StateWaitFPQ24Game9EnemyBase:
/* 8026E4A0 0026B3E0 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 8026E4A4 0026B3E4 7C 08 02 A6 */ mflr r0
/* 8026E4A8 0026B3E8 90 01 00 14 */ stw r0, 0x14(r1)
/* 8026E4AC 0026B3EC 93 E1 00 0C */ stw r31, 0xc(r1)
/* 8026E4B0 0026B3F0 7C 9F 23 78 */ mr r31, r4
/* 8026E4B4 0026B3F4 93 C1 00 08 */ stw r30, 8(r1)
/* 8026E4B8 0026B3F8 7C 7E 1B 78 */ mr r30, r3
/* 8026E4BC 0026B3FC 80 AD 9A EC */ lwz r5, sys@sda21(r13)
/* 8026E4C0 0026B400 C0 24 02 C4 */ lfs f1, 0x2c4(r4)
/* 8026E4C4 0026B404 C0 05 00 54 */ lfs f0, 0x54(r5)
/* 8026E4C8 0026B408 EC 01 00 2A */ fadds f0, f1, f0
/* 8026E4CC 0026B40C D0 04 02 C4 */ stfs f0, 0x2c4(r4)
/* 8026E4D0 0026B410 88 04 02 F4 */ lbz r0, 0x2f4(r4)
/* 8026E4D4 0026B414 28 00 00 00 */ cmplwi r0, 0
/* 8026E4D8 0026B418 41 82 00 38 */ beq lbl_8026E510
/* 8026E4DC 0026B41C 7F E3 FB 78 */ mr r3, r31
/* 8026E4E0 0026B420 48 00 22 85 */ bl isWaitFinish__Q34Game8ElecHiba3ObjFv
/* 8026E4E4 0026B424 54 60 06 3F */ clrlwi. r0, r3, 0x18
/* 8026E4E8 0026B428 41 82 00 84 */ beq lbl_8026E56C
/* 8026E4EC 0026B42C 7F C3 F3 78 */ mr r3, r30
/* 8026E4F0 0026B430 7F E4 FB 78 */ mr r4, r31
/* 8026E4F4 0026B434 81 9E 00 00 */ lwz r12, 0(r30)
/* 8026E4F8 0026B438 38 A0 00 02 */ li r5, 2
/* 8026E4FC 0026B43C 38 C0 00 00 */ li r6, 0
/* 8026E500 0026B440 81 8C 00 1C */ lwz r12, 0x1c(r12)
/* 8026E504 0026B444 7D 89 03 A6 */ mtctr r12
/* 8026E508 0026B448 4E 80 04 21 */ bctrl
/* 8026E50C 0026B44C 48 00 00 60 */ b lbl_8026E56C
lbl_8026E510:
/* 8026E510 0026B450 C0 3F 02 00 */ lfs f1, 0x200(r31)
/* 8026E514 0026B454 C0 02 CD 58 */ lfs f0, lbl_8051B0B8@sda21(r2)
/* 8026E518 0026B458 FC 01 00 40 */ fcmpo cr0, f1, f0
/* 8026E51C 0026B45C 4C 40 13 82 */ cror 2, 0, 2
/* 8026E520 0026B460 40 82 00 20 */ bne lbl_8026E540
/* 8026E524 0026B464 81 83 00 00 */ lwz r12, 0(r3)
/* 8026E528 0026B468 38 A0 00 00 */ li r5, 0
/* 8026E52C 0026B46C 38 C0 00 00 */ li r6, 0
/* 8026E530 0026B470 81 8C 00 1C */ lwz r12, 0x1c(r12)
/* 8026E534 0026B474 7D 89 03 A6 */ mtctr r12
/* 8026E538 0026B478 4E 80 04 21 */ bctrl
/* 8026E53C 0026B47C 48 00 00 30 */ b lbl_8026E56C
lbl_8026E540:
/* 8026E540 0026B480 80 BF 00 C0 */ lwz r5, 0xc0(r31)
/* 8026E544 0026B484 C0 3F 02 C4 */ lfs f1, 0x2c4(r31)
/* 8026E548 0026B488 C0 05 08 1C */ lfs f0, 0x81c(r5)
/* 8026E54C 0026B48C FC 01 00 40 */ fcmpo cr0, f1, f0
/* 8026E550 0026B490 40 81 00 1C */ ble lbl_8026E56C
/* 8026E554 0026B494 81 83 00 00 */ lwz r12, 0(r3)
/* 8026E558 0026B498 38 A0 00 02 */ li r5, 2
/* 8026E55C 0026B49C 38 C0 00 00 */ li r6, 0
/* 8026E560 0026B4A0 81 8C 00 1C */ lwz r12, 0x1c(r12)
/* 8026E564 0026B4A4 7D 89 03 A6 */ mtctr r12
/* 8026E568 0026B4A8 4E 80 04 21 */ bctrl
lbl_8026E56C:
/* 8026E56C 0026B4AC 80 01 00 14 */ lwz r0, 0x14(r1)
/* 8026E570 0026B4B0 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 8026E574 0026B4B4 83 C1 00 08 */ lwz r30, 8(r1)
/* 8026E578 0026B4B8 7C 08 03 A6 */ mtlr r0
/* 8026E57C 0026B4BC 38 21 00 10 */ addi r1, r1, 0x10
/* 8026E580 0026B4C0 4E 80 00 20 */ blr
.global cleanup__Q34Game8ElecHiba9StateWaitFPQ24Game9EnemyBase
cleanup__Q34Game8ElecHiba9StateWaitFPQ24Game9EnemyBase:
/* 8026E584 0026B4C4 4E 80 00 20 */ blr
.global init__Q34Game8ElecHiba9StateSignFPQ24Game9EnemyBasePQ24Game8StateArg
init__Q34Game8ElecHiba9StateSignFPQ24Game9EnemyBasePQ24Game8StateArg:
/* 8026E588 0026B4C8 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 8026E58C 0026B4CC 7C 08 02 A6 */ mflr r0
/* 8026E590 0026B4D0 C0 02 CD 58 */ lfs f0, lbl_8051B0B8@sda21(r2)
/* 8026E594 0026B4D4 38 A0 00 00 */ li r5, 0
/* 8026E598 0026B4D8 90 01 00 14 */ stw r0, 0x14(r1)
/* 8026E59C 0026B4DC 93 E1 00 0C */ stw r31, 0xc(r1)
/* 8026E5A0 0026B4E0 7C 9F 23 78 */ mr r31, r4
/* 8026E5A4 0026B4E4 38 80 00 00 */ li r4, 0
/* 8026E5A8 0026B4E8 93 C1 00 08 */ stw r30, 8(r1)
/* 8026E5AC 0026B4EC 7F E3 FB 78 */ mr r3, r31
/* 8026E5B0 0026B4F0 D0 1F 02 C4 */ stfs f0, 0x2c4(r31)
/* 8026E5B4 0026B4F4 80 1F 01 E0 */ lwz r0, 0x1e0(r31)
/* 8026E5B8 0026B4F8 54 00 06 B0 */ rlwinm r0, r0, 0, 0x1a, 0x18
/* 8026E5BC 0026B4FC 90 1F 01 E0 */ stw r0, 0x1e0(r31)
/* 8026E5C0 0026B500 4B E9 6A 45 */ bl startMotion__Q24Game9EnemyBaseFiPQ28SysShape14MotionListener
/* 8026E5C4 0026B504 7F E3 FB 78 */ mr r3, r31
/* 8026E5C8 0026B508 48 00 13 71 */ bl getChildObjPtr__Q34Game8ElecHiba3ObjFv
/* 8026E5CC 0026B50C 7C 7E 1B 79 */ or. r30, r3, r3
/* 8026E5D0 0026B510 41 82 00 28 */ beq lbl_8026E5F8
/* 8026E5D4 0026B514 80 1E 01 E0 */ lwz r0, 0x1e0(r30)
/* 8026E5D8 0026B518 38 80 00 00 */ li r4, 0
/* 8026E5DC 0026B51C 38 A0 00 00 */ li r5, 0
/* 8026E5E0 0026B520 54 00 06 B0 */ rlwinm r0, r0, 0, 0x1a, 0x18
/* 8026E5E4 0026B524 90 1E 01 E0 */ stw r0, 0x1e0(r30)
/* 8026E5E8 0026B528 4B E9 6A 1D */ bl startMotion__Q24Game9EnemyBaseFiPQ28SysShape14MotionListener
/* 8026E5EC 0026B52C 7F E3 FB 78 */ mr r3, r31
/* 8026E5F0 0026B530 7F C4 F3 78 */ mr r4, r30
/* 8026E5F4 0026B534 48 00 1E 25 */ bl startChargeEffect__Q34Game8ElecHiba3ObjFPQ24Game8Creature
lbl_8026E5F8:
/* 8026E5F8 0026B538 80 01 00 14 */ lwz r0, 0x14(r1)
/* 8026E5FC 0026B53C 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 8026E600 0026B540 83 C1 00 08 */ lwz r30, 8(r1)
/* 8026E604 0026B544 7C 08 03 A6 */ mtlr r0
/* 8026E608 0026B548 38 21 00 10 */ addi r1, r1, 0x10
/* 8026E60C 0026B54C 4E 80 00 20 */ blr
.global exec__Q34Game8ElecHiba9StateSignFPQ24Game9EnemyBase
exec__Q34Game8ElecHiba9StateSignFPQ24Game9EnemyBase:
/* 8026E610 0026B550 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 8026E614 0026B554 7C 08 02 A6 */ mflr r0
/* 8026E618 0026B558 90 01 00 14 */ stw r0, 0x14(r1)
/* 8026E61C 0026B55C 93 E1 00 0C */ stw r31, 0xc(r1)
/* 8026E620 0026B560 7C 9F 23 78 */ mr r31, r4
/* 8026E624 0026B564 93 C1 00 08 */ stw r30, 8(r1)
/* 8026E628 0026B568 7C 7E 1B 78 */ mr r30, r3
/* 8026E62C 0026B56C 7F E3 FB 78 */ mr r3, r31
/* 8026E630 0026B570 80 AD 9A EC */ lwz r5, sys@sda21(r13)
/* 8026E634 0026B574 C0 24 02 C4 */ lfs f1, 0x2c4(r4)
/* 8026E638 0026B578 C0 05 00 54 */ lfs f0, 0x54(r5)
/* 8026E63C 0026B57C EC 01 00 2A */ fadds f0, f1, f0
/* 8026E640 0026B580 D0 04 02 C4 */ stfs f0, 0x2c4(r4)
/* 8026E644 0026B584 81 9F 00 00 */ lwz r12, 0(r31)
/* 8026E648 0026B588 81 8C 00 F4 */ lwz r12, 0xf4(r12)
/* 8026E64C 0026B58C 7D 89 03 A6 */ mtctr r12
/* 8026E650 0026B590 4E 80 04 21 */ bctrl
/* 8026E654 0026B594 81 83 00 00 */ lwz r12, 0(r3)
/* 8026E658 0026B598 38 80 50 AC */ li r4, 0x50ac
/* 8026E65C 0026B59C 38 A0 00 00 */ li r5, 0
/* 8026E660 0026B5A0 81 8C 00 0C */ lwz r12, 0xc(r12)
/* 8026E664 0026B5A4 7D 89 03 A6 */ mtctr r12
/* 8026E668 0026B5A8 4E 80 04 21 */ bctrl
/* 8026E66C 0026B5AC C0 3F 02 00 */ lfs f1, 0x200(r31)
/* 8026E670 0026B5B0 C0 02 CD 58 */ lfs f0, lbl_8051B0B8@sda21(r2)
/* 8026E674 0026B5B4 FC 01 00 40 */ fcmpo cr0, f1, f0
/* 8026E678 0026B5B8 4C 40 13 82 */ cror 2, 0, 2
/* 8026E67C 0026B5BC 40 82 00 40 */ bne lbl_8026E6BC
/* 8026E680 0026B5C0 7F E3 FB 78 */ mr r3, r31
/* 8026E684 0026B5C4 48 00 12 B5 */ bl getChildObjPtr__Q34Game8ElecHiba3ObjFv
/* 8026E688 0026B5C8 28 03 00 00 */ cmplwi r3, 0
/* 8026E68C 0026B5CC 41 82 00 0C */ beq lbl_8026E698
/* 8026E690 0026B5D0 7F E3 FB 78 */ mr r3, r31
/* 8026E694 0026B5D4 48 00 1E 95 */ bl finishChargeEffect__Q34Game8ElecHiba3ObjFv
lbl_8026E698:
/* 8026E698 0026B5D8 7F C3 F3 78 */ mr r3, r30
/* 8026E69C 0026B5DC 7F E4 FB 78 */ mr r4, r31
/* 8026E6A0 0026B5E0 81 9E 00 00 */ lwz r12, 0(r30)
/* 8026E6A4 0026B5E4 38 A0 00 00 */ li r5, 0
/* 8026E6A8 0026B5E8 38 C0 00 00 */ li r6, 0
/* 8026E6AC 0026B5EC 81 8C 00 1C */ lwz r12, 0x1c(r12)
/* 8026E6B0 0026B5F0 7D 89 03 A6 */ mtctr r12
/* 8026E6B4 0026B5F4 4E 80 04 21 */ bctrl
/* 8026E6B8 0026B5F8 48 00 00 38 */ b lbl_8026E6F0
lbl_8026E6BC:
/* 8026E6BC 0026B5FC 80 7F 00 C0 */ lwz r3, 0xc0(r31)
/* 8026E6C0 0026B600 C0 3F 02 C4 */ lfs f1, 0x2c4(r31)
/* 8026E6C4 0026B604 C0 03 08 44 */ lfs f0, 0x844(r3)
/* 8026E6C8 0026B608 FC 01 00 40 */ fcmpo cr0, f1, f0
/* 8026E6CC 0026B60C 40 81 00 24 */ ble lbl_8026E6F0
/* 8026E6D0 0026B610 7F C3 F3 78 */ mr r3, r30
/* 8026E6D4 0026B614 7F E4 FB 78 */ mr r4, r31
/* 8026E6D8 0026B618 81 9E 00 00 */ lwz r12, 0(r30)
/* 8026E6DC 0026B61C 38 A0 00 03 */ li r5, 3
/* 8026E6E0 0026B620 38 C0 00 00 */ li r6, 0
/* 8026E6E4 0026B624 81 8C 00 1C */ lwz r12, 0x1c(r12)
/* 8026E6E8 0026B628 7D 89 03 A6 */ mtctr r12
/* 8026E6EC 0026B62C 4E 80 04 21 */ bctrl
lbl_8026E6F0:
/* 8026E6F0 0026B630 80 01 00 14 */ lwz r0, 0x14(r1)
/* 8026E6F4 0026B634 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 8026E6F8 0026B638 83 C1 00 08 */ lwz r30, 8(r1)
/* 8026E6FC 0026B63C 7C 08 03 A6 */ mtlr r0
/* 8026E700 0026B640 38 21 00 10 */ addi r1, r1, 0x10
/* 8026E704 0026B644 4E 80 00 20 */ blr
.global cleanup__Q34Game8ElecHiba9StateSignFPQ24Game9EnemyBase
cleanup__Q34Game8ElecHiba9StateSignFPQ24Game9EnemyBase:
/* 8026E708 0026B648 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 8026E70C 0026B64C 7C 08 02 A6 */ mflr r0
/* 8026E710 0026B650 7C 83 23 78 */ mr r3, r4
/* 8026E714 0026B654 90 01 00 14 */ stw r0, 0x14(r1)
/* 8026E718 0026B658 80 04 01 E0 */ lwz r0, 0x1e0(r4)
/* 8026E71C 0026B65C 60 00 00 40 */ ori r0, r0, 0x40
/* 8026E720 0026B660 90 04 01 E0 */ stw r0, 0x1e0(r4)
/* 8026E724 0026B664 48 00 12 15 */ bl getChildObjPtr__Q34Game8ElecHiba3ObjFv
/* 8026E728 0026B668 28 03 00 00 */ cmplwi r3, 0
/* 8026E72C 0026B66C 41 82 00 10 */ beq lbl_8026E73C
/* 8026E730 0026B670 80 03 01 E0 */ lwz r0, 0x1e0(r3)
/* 8026E734 0026B674 60 00 00 40 */ ori r0, r0, 0x40
/* 8026E738 0026B678 90 03 01 E0 */ stw r0, 0x1e0(r3)
lbl_8026E73C:
/* 8026E73C 0026B67C 80 01 00 14 */ lwz r0, 0x14(r1)
/* 8026E740 0026B680 7C 08 03 A6 */ mtlr r0
/* 8026E744 0026B684 38 21 00 10 */ addi r1, r1, 0x10
/* 8026E748 0026B688 4E 80 00 20 */ blr
.global init__Q34Game8ElecHiba11StateAttackFPQ24Game9EnemyBasePQ24Game8StateArg
init__Q34Game8ElecHiba11StateAttackFPQ24Game9EnemyBasePQ24Game8StateArg:
/* 8026E74C 0026B68C 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 8026E750 0026B690 7C 08 02 A6 */ mflr r0
/* 8026E754 0026B694 C0 02 CD 58 */ lfs f0, lbl_8051B0B8@sda21(r2)
/* 8026E758 0026B698 38 A0 00 00 */ li r5, 0
/* 8026E75C 0026B69C 90 01 00 14 */ stw r0, 0x14(r1)
/* 8026E760 0026B6A0 93 E1 00 0C */ stw r31, 0xc(r1)
/* 8026E764 0026B6A4 7C 9F 23 78 */ mr r31, r4
/* 8026E768 0026B6A8 38 80 00 00 */ li r4, 0
/* 8026E76C 0026B6AC D0 1F 02 C4 */ stfs f0, 0x2c4(r31)
/* 8026E770 0026B6B0 7F E3 FB 78 */ mr r3, r31
/* 8026E774 0026B6B4 80 1F 01 E0 */ lwz r0, 0x1e0(r31)
/* 8026E778 0026B6B8 54 00 06 B0 */ rlwinm r0, r0, 0, 0x1a, 0x18
/* 8026E77C 0026B6BC 90 1F 01 E0 */ stw r0, 0x1e0(r31)
/* 8026E780 0026B6C0 4B E9 68 85 */ bl startMotion__Q24Game9EnemyBaseFiPQ28SysShape14MotionListener
/* 8026E784 0026B6C4 7F E3 FB 78 */ mr r3, r31
/* 8026E788 0026B6C8 48 00 1F 31 */ bl setVersusHibaType__Q34Game8ElecHiba3ObjFv
/* 8026E78C 0026B6CC 7F E3 FB 78 */ mr r3, r31
/* 8026E790 0026B6D0 48 00 11 A9 */ bl getChildObjPtr__Q34Game8ElecHiba3ObjFv
/* 8026E794 0026B6D4 28 03 00 00 */ cmplwi r3, 0
/* 8026E798 0026B6D8 41 82 00 24 */ beq lbl_8026E7BC
/* 8026E79C 0026B6DC 80 03 01 E0 */ lwz r0, 0x1e0(r3)
/* 8026E7A0 0026B6E0 38 80 00 00 */ li r4, 0
/* 8026E7A4 0026B6E4 38 A0 00 00 */ li r5, 0
/* 8026E7A8 0026B6E8 54 00 06 B0 */ rlwinm r0, r0, 0, 0x1a, 0x18
/* 8026E7AC 0026B6EC 90 03 01 E0 */ stw r0, 0x1e0(r3)
/* 8026E7B0 0026B6F0 4B E9 68 55 */ bl startMotion__Q24Game9EnemyBaseFiPQ28SysShape14MotionListener
/* 8026E7B4 0026B6F4 7F E3 FB 78 */ mr r3, r31
/* 8026E7B8 0026B6F8 48 00 1D A9 */ bl startDisChargeEffect__Q34Game8ElecHiba3ObjFv
lbl_8026E7BC:
/* 8026E7BC 0026B6FC 80 01 00 14 */ lwz r0, 0x14(r1)
/* 8026E7C0 0026B700 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 8026E7C4 0026B704 7C 08 03 A6 */ mtlr r0
/* 8026E7C8 0026B708 38 21 00 10 */ addi r1, r1, 0x10
/* 8026E7CC 0026B70C 4E 80 00 20 */ blr
.global exec__Q34Game8ElecHiba11StateAttackFPQ24Game9EnemyBase
exec__Q34Game8ElecHiba11StateAttackFPQ24Game9EnemyBase:
/* 8026E7D0 0026B710 94 21 FF D0 */ stwu r1, -0x30(r1)
/* 8026E7D4 0026B714 7C 08 02 A6 */ mflr r0
/* 8026E7D8 0026B718 90 01 00 34 */ stw r0, 0x34(r1)
/* 8026E7DC 0026B71C 93 E1 00 2C */ stw r31, 0x2c(r1)
/* 8026E7E0 0026B720 7C 9F 23 78 */ mr r31, r4
/* 8026E7E4 0026B724 93 C1 00 28 */ stw r30, 0x28(r1)
/* 8026E7E8 0026B728 7C 7E 1B 78 */ mr r30, r3
/* 8026E7EC 0026B72C 80 AD 9A EC */ lwz r5, sys@sda21(r13)
/* 8026E7F0 0026B730 C0 24 02 C4 */ lfs f1, 0x2c4(r4)
/* 8026E7F4 0026B734 C0 05 00 54 */ lfs f0, 0x54(r5)
/* 8026E7F8 0026B738 EC 01 00 2A */ fadds f0, f1, f0
/* 8026E7FC 0026B73C D0 04 02 C4 */ stfs f0, 0x2c4(r4)
/* 8026E800 0026B740 88 04 02 F4 */ lbz r0, 0x2f4(r4)
/* 8026E804 0026B744 28 00 00 00 */ cmplwi r0, 0
/* 8026E808 0026B748 41 82 00 38 */ beq lbl_8026E840
/* 8026E80C 0026B74C 7F E3 FB 78 */ mr r3, r31
/* 8026E810 0026B750 48 00 1F 95 */ bl isAttackFinish__Q34Game8ElecHiba3ObjFv
/* 8026E814 0026B754 54 60 06 3F */ clrlwi. r0, r3, 0x18
/* 8026E818 0026B758 41 82 00 84 */ beq lbl_8026E89C
/* 8026E81C 0026B75C 7F C3 F3 78 */ mr r3, r30
/* 8026E820 0026B760 7F E4 FB 78 */ mr r4, r31
/* 8026E824 0026B764 81 9E 00 00 */ lwz r12, 0(r30)
/* 8026E828 0026B768 38 A0 00 01 */ li r5, 1
/* 8026E82C 0026B76C 38 C0 00 00 */ li r6, 0
/* 8026E830 0026B770 81 8C 00 1C */ lwz r12, 0x1c(r12)
/* 8026E834 0026B774 7D 89 03 A6 */ mtctr r12
/* 8026E838 0026B778 4E 80 04 21 */ bctrl
/* 8026E83C 0026B77C 48 00 00 60 */ b lbl_8026E89C
lbl_8026E840:
/* 8026E840 0026B780 C0 3F 02 00 */ lfs f1, 0x200(r31)
/* 8026E844 0026B784 C0 02 CD 58 */ lfs f0, lbl_8051B0B8@sda21(r2)
/* 8026E848 0026B788 FC 01 00 40 */ fcmpo cr0, f1, f0
/* 8026E84C 0026B78C 4C 40 13 82 */ cror 2, 0, 2
/* 8026E850 0026B790 40 82 00 20 */ bne lbl_8026E870
/* 8026E854 0026B794 81 83 00 00 */ lwz r12, 0(r3)
/* 8026E858 0026B798 38 A0 00 00 */ li r5, 0
/* 8026E85C 0026B79C 38 C0 00 00 */ li r6, 0
/* 8026E860 0026B7A0 81 8C 00 1C */ lwz r12, 0x1c(r12)
/* 8026E864 0026B7A4 7D 89 03 A6 */ mtctr r12
/* 8026E868 0026B7A8 4E 80 04 21 */ bctrl
/* 8026E86C 0026B7AC 48 00 00 30 */ b lbl_8026E89C
lbl_8026E870:
/* 8026E870 0026B7B0 80 BF 00 C0 */ lwz r5, 0xc0(r31)
/* 8026E874 0026B7B4 C0 3F 02 C4 */ lfs f1, 0x2c4(r31)
/* 8026E878 0026B7B8 C0 05 08 6C */ lfs f0, 0x86c(r5)
/* 8026E87C 0026B7BC FC 01 00 40 */ fcmpo cr0, f1, f0
/* 8026E880 0026B7C0 40 81 00 1C */ ble lbl_8026E89C
/* 8026E884 0026B7C4 81 83 00 00 */ lwz r12, 0(r3)
/* 8026E888 0026B7C8 38 A0 00 01 */ li r5, 1
/* 8026E88C 0026B7CC 38 C0 00 00 */ li r6, 0
/* 8026E890 0026B7D0 81 8C 00 1C */ lwz r12, 0x1c(r12)
/* 8026E894 0026B7D4 7D 89 03 A6 */ mtctr r12
/* 8026E898 0026B7D8 4E 80 04 21 */ bctrl
lbl_8026E89C:
/* 8026E89C 0026B7DC 7F E3 FB 78 */ mr r3, r31
/* 8026E8A0 0026B7E0 48 00 10 99 */ bl getChildObjPtr__Q34Game8ElecHiba3ObjFv
/* 8026E8A4 0026B7E4 28 03 00 00 */ cmplwi r3, 0
/* 8026E8A8 0026B7E8 41 82 00 48 */ beq lbl_8026E8F0
/* 8026E8AC 0026B7EC 7C 64 1B 78 */ mr r4, r3
/* 8026E8B0 0026B7F0 38 61 00 08 */ addi r3, r1, 8
/* 8026E8B4 0026B7F4 81 84 00 00 */ lwz r12, 0(r4)
/* 8026E8B8 0026B7F8 81 8C 00 08 */ lwz r12, 8(r12)
/* 8026E8BC 0026B7FC 7D 89 03 A6 */ mtctr r12
/* 8026E8C0 0026B800 4E 80 04 21 */ bctrl
/* 8026E8C4 0026B804 C0 41 00 08 */ lfs f2, 8(r1)
/* 8026E8C8 0026B808 7F E3 FB 78 */ mr r3, r31
/* 8026E8CC 0026B80C C0 21 00 0C */ lfs f1, 0xc(r1)
/* 8026E8D0 0026B810 38 81 00 14 */ addi r4, r1, 0x14
/* 8026E8D4 0026B814 C0 01 00 10 */ lfs f0, 0x10(r1)
/* 8026E8D8 0026B818 D0 41 00 14 */ stfs f2, 0x14(r1)
/* 8026E8DC 0026B81C D0 21 00 18 */ stfs f1, 0x18(r1)
/* 8026E8E0 0026B820 D0 01 00 1C */ stfs f0, 0x1c(r1)
/* 8026E8E4 0026B824 48 00 11 E1 */ bl "interactDenkiAttack__Q34Game8ElecHiba3ObjFR10Vector3<f>"
/* 8026E8E8 0026B828 7F E3 FB 78 */ mr r3, r31
/* 8026E8EC 0026B82C 48 00 18 3D */ bl updateEfxLod__Q34Game8ElecHiba3ObjFv
lbl_8026E8F0:
/* 8026E8F0 0026B830 7F E3 FB 78 */ mr r3, r31
/* 8026E8F4 0026B834 81 9F 00 00 */ lwz r12, 0(r31)
/* 8026E8F8 0026B838 81 8C 00 F4 */ lwz r12, 0xf4(r12)
/* 8026E8FC 0026B83C 7D 89 03 A6 */ mtctr r12
/* 8026E900 0026B840 4E 80 04 21 */ bctrl
/* 8026E904 0026B844 81 83 00 00 */ lwz r12, 0(r3)
/* 8026E908 0026B848 38 80 50 AD */ li r4, 0x50ad
/* 8026E90C 0026B84C 38 A0 00 00 */ li r5, 0
/* 8026E910 0026B850 81 8C 00 0C */ lwz r12, 0xc(r12)
/* 8026E914 0026B854 7D 89 03 A6 */ mtctr r12
/* 8026E918 0026B858 4E 80 04 21 */ bctrl
/* 8026E91C 0026B85C 80 01 00 34 */ lwz r0, 0x34(r1)
/* 8026E920 0026B860 83 E1 00 2C */ lwz r31, 0x2c(r1)
/* 8026E924 0026B864 83 C1 00 28 */ lwz r30, 0x28(r1)
/* 8026E928 0026B868 7C 08 03 A6 */ mtlr r0
/* 8026E92C 0026B86C 38 21 00 30 */ addi r1, r1, 0x30
/* 8026E930 0026B870 4E 80 00 20 */ blr
.global cleanup__Q34Game8ElecHiba11StateAttackFPQ24Game9EnemyBase
cleanup__Q34Game8ElecHiba11StateAttackFPQ24Game9EnemyBase:
/* 8026E934 0026B874 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 8026E938 0026B878 7C 08 02 A6 */ mflr r0
/* 8026E93C 0026B87C 90 01 00 14 */ stw r0, 0x14(r1)
/* 8026E940 0026B880 93 E1 00 0C */ stw r31, 0xc(r1)
/* 8026E944 0026B884 7C 9F 23 78 */ mr r31, r4
/* 8026E948 0026B888 7F E3 FB 78 */ mr r3, r31
/* 8026E94C 0026B88C 80 04 01 E0 */ lwz r0, 0x1e0(r4)
/* 8026E950 0026B890 60 00 00 40 */ ori r0, r0, 0x40
/* 8026E954 0026B894 90 04 01 E0 */ stw r0, 0x1e0(r4)
/* 8026E958 0026B898 48 00 0F E1 */ bl getChildObjPtr__Q34Game8ElecHiba3ObjFv
/* 8026E95C 0026B89C 28 03 00 00 */ cmplwi r3, 0
/* 8026E960 0026B8A0 41 82 00 18 */ beq lbl_8026E978
/* 8026E964 0026B8A4 80 03 01 E0 */ lwz r0, 0x1e0(r3)
/* 8026E968 0026B8A8 60 00 00 40 */ ori r0, r0, 0x40
/* 8026E96C 0026B8AC 90 03 01 E0 */ stw r0, 0x1e0(r3)
/* 8026E970 0026B8B0 7F E3 FB 78 */ mr r3, r31
/* 8026E974 0026B8B4 48 00 1C 5D */ bl finishDisChargeEffect__Q34Game8ElecHiba3ObjFv
lbl_8026E978:
/* 8026E978 0026B8B8 7F E3 FB 78 */ mr r3, r31
/* 8026E97C 0026B8BC 48 00 1D 69 */ bl resetAttrHitCount__Q34Game8ElecHiba3ObjFv
/* 8026E980 0026B8C0 80 01 00 14 */ lwz r0, 0x14(r1)
/* 8026E984 0026B8C4 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 8026E988 0026B8C8 7C 08 03 A6 */ mtlr r0
/* 8026E98C 0026B8CC 38 21 00 10 */ addi r1, r1, 0x10
/* 8026E990 0026B8D0 4E 80 00 20 */ blr

View File

@ -491,6 +491,35 @@ struct EnemyBase : public Creature, public SysShape::MotionListener, virtual pub
sep.y = m_position.z - point.z;
}
inline f32 changeFaceDir(Vector2f& XZ)
{
f32 approxSpeed;
f32 rotSpeed;
f32 rotAccel;
f32 x;
f32 z;
EnemyParmsBase* parms = static_cast<EnemyParmsBase*>(m_parms);
rotSpeed = parms->m_general.m_rotationalSpeed.m_value;
rotAccel = parms->m_general.m_rotationalAccel.m_value;
Vector3f pos = getPosition();
x = XZ.x;
z = XZ.y;
f32 angleDist = angDist(_angXZ(x, z, pos.x, pos.z), getFaceDir());
f32 limit = (DEG2RAD * rotSpeed) * PI;
approxSpeed = angleDist * rotAccel;
if (FABS(approxSpeed) > limit) {
approxSpeed = (approxSpeed > 0.0f) ? limit : -limit;
}
m_faceDir = roundAng(approxSpeed + getFaceDir());
_1A4.m_matrix[0][1] = m_faceDir;
return angleDist;
}
// Creature: _000 - _178
// MotionListener: _178 - _17C
// ptr to PelletView: _17C

View File

@ -21,6 +21,9 @@ Creature* getNearestPikminOrNavi(Creature*, f32, f32, f32*, Condition<Navi>*, Co
Navi* getNearestNavi(Creature*, f32, f32, f32*, Condition<Navi>*);
bool isStartFlick(EnemyBase*, bool);
void walkToTarget(EnemyBase*, Vector3f&, f32, f32, f32);
void attackNavi(Creature*, f32, f32, f32, CollPart*, Condition<Navi>*);
void eatPikmin(EnemyBase*, Condition<Piki>*);
void swallowPikmin(Creature*, f32, Condition<Piki>*);
} // namespace EnemyFunc
} // namespace Game

View File

@ -47,7 +47,7 @@ struct Obj : public EnemyBase {
virtual void setFSM(FSM*); // _2F8
//////////////// VTABLE END
void getSlotPikiNum();
int getSlotPikiNum();
void resetRandTargetPosition();
void resetZukanAnimationFrame();
void moveNoTarget();
@ -110,6 +110,15 @@ struct ProperAnimator : public EnemyAnimatorBase {
/////////////////////////////////////////////////////////////////
// STATE MACHINE DEFINITIONS
enum StateID {
BABY_Dead = 0,
BABY_Press = 1,
BABY_Born = 2,
BABY_Move = 3,
BABY_Attack = 4,
BABY_Count = 5,
};
struct FSM : public EnemyStateMachine {
virtual void init(EnemyBase*); // _08
@ -118,11 +127,22 @@ struct FSM : public EnemyStateMachine {
};
struct State : public EnemyFSMState {
inline State(u16 stateID, const char* name)
: EnemyFSMState(stateID)
{
m_name = name;
}
// _00 = VTBL
// _00-_10 = EnemyFSMState
};
struct StateAttack : public EnemyFSMState {
struct StateAttack : public State {
inline StateAttack()
: State(BABY_Attack, "attack")
{
}
virtual void init(EnemyBase*, StateArg*); // _08
virtual void exec(EnemyBase*); // _0C
virtual void cleanup(EnemyBase*); // _10
@ -131,7 +151,12 @@ struct StateAttack : public EnemyFSMState {
// _00-_10 = EnemyFSMState
};
struct StateBorn : public EnemyFSMState {
struct StateBorn : public State {
inline StateBorn()
: State(BABY_Born, "born")
{
}
virtual void init(EnemyBase*, StateArg*); // _08
virtual void exec(EnemyBase*); // _0C
virtual void cleanup(EnemyBase*); // _10
@ -140,7 +165,12 @@ struct StateBorn : public EnemyFSMState {
// _00-_10 = EnemyFSMState
};
struct StateDead : public EnemyFSMState {
struct StateDead : public State {
inline StateDead()
: State(BABY_Dead, "dead")
{
}
virtual void init(EnemyBase*, StateArg*); // _08
virtual void exec(EnemyBase*); // _0C
virtual void cleanup(EnemyBase*); // _10
@ -149,7 +179,12 @@ struct StateDead : public EnemyFSMState {
// _00-_10 = EnemyFSMState
};
struct StateMove : public EnemyFSMState {
struct StateMove : public State {
inline StateMove()
: State(BABY_Move, "move")
{
}
virtual void init(EnemyBase*, StateArg*); // _08
virtual void exec(EnemyBase*); // _0C
virtual void cleanup(EnemyBase*); // _10
@ -158,7 +193,12 @@ struct StateMove : public EnemyFSMState {
// _00-_10 = EnemyFSMState
};
struct StatePress : public EnemyFSMState {
struct StatePress : public State {
inline StatePress()
: State(BABY_Press, "press")
{
}
virtual void init(EnemyBase*, StateArg*); // _08
virtual void exec(EnemyBase*); // _0C
virtual void cleanup(EnemyBase*); // _10

View File

@ -36,20 +36,23 @@ struct Obj : public EnemyBase {
Obj();
//////////////// VTABLE
virtual void onInit(CreatureInitArg*); // _30
virtual void doSimulation(f32); // _4C (weak)
virtual void doDirectDraw(Graphics&); // _50
virtual void inWaterCallback(WaterBox*); // _84 (weak)
virtual void outWaterCallback(); // _88 (weak)
virtual bool isLivingThing(); // _D4 (weak)
virtual void getShadowParam(ShadowParam&); // _134
virtual ~Obj(); // _1BC (weak)
virtual void birth(Vector3f&, f32); // _1C0
virtual void setInitialSetting(EnemyInitialParamBase*); // _1C4
virtual void doUpdate(); // _1CC
virtual void doDebugDraw(Graphics&); // _1EC
virtual bool injure(); // _23C
virtual EnemyTypeID::EEnemyTypeID getEnemyTypeID(); // _258 (weak)
virtual void onInit(CreatureInitArg*); // _30
virtual void doSimulation(f32); // _4C (weak)
virtual void doDirectDraw(Graphics&); // _50
virtual void inWaterCallback(WaterBox*); // _84 (weak)
virtual void outWaterCallback(); // _88 (weak)
virtual bool isLivingThing(); // _D4 (weak)
virtual void getShadowParam(ShadowParam&); // _134
virtual ~Obj(); // _1BC (weak)
virtual void birth(Vector3f&, f32); // _1C0
virtual void setInitialSetting(EnemyInitialParamBase*); // _1C4
virtual void doUpdate(); // _1CC
virtual void doDebugDraw(Graphics&); // _1EC
virtual bool injure(); // _23C
virtual EnemyTypeID::EEnemyTypeID getEnemyTypeID() // _258 (weak)
{
return EnemyTypeID::EnemyID_ElecHiba;
}
virtual void doGetLifeGaugeParam(LifeGaugeParam&); // _260
virtual bool damageCallBack(Creature*, f32, CollPart*); // _278
virtual bool pressCallBack(Creature*, f32, CollPart*); // _27C
@ -59,7 +62,7 @@ struct Obj : public EnemyBase {
virtual void setFSM(FSM*); // _2F8
//////////////// VTABLE END
void getChildObjPtr();
Obj* getChildObjPtr();
void setElecHibaPosition(InitialParam*, f32);
void interactDenkiAttack(Vector3f&);
void addDamageMyself(f32);
@ -76,17 +79,19 @@ struct Obj : public EnemyBase {
void setVersusHibaType();
void resetAttrHitCount();
void addAttrAttackCount(Piki*);
void isWaitFinish();
void isAttackFinish();
bool isWaitFinish();
bool isAttackFinish();
// _00 = VTBL
// _00-_2BC = EnemyBase
FSM* m_FSM; // _2BC
u8 _2C0[0x8]; // _2C0, unknown
u8 _2C0; // _2C0
f32 m_waitTimer; // _2C4
TeamList m_teamList; // _2C8
u8 _2E0[0x10]; // _2E0, unknown
efx::TDenkiHibaMgr* m_efxDenkiHibaMgr; // _2F0
u8 _2F4[0x10]; // _2F4, unknown
u8 _2F4; // _2F4, might be a bool?
u8 _2F5[0x9]; // _2F5, unknown
// _304 = PelletView
};
@ -154,6 +159,14 @@ struct ProperAnimator : public EnemyAnimatorBase {
/////////////////////////////////////////////////////////////////
// STATE MACHINE DEFINITIONS
enum StateID {
ELECHIBA_Dead = 0,
ELECHIBA_Wait = 1,
ELECHIBA_Sign = 2,
ELECHIBA_Attack = 3,
ELECHIBA_Count = 4,
};
struct FSM : public EnemyStateMachine {
virtual void init(EnemyBase*); // _08
@ -162,11 +175,22 @@ struct FSM : public EnemyStateMachine {
};
struct State : public EnemyFSMState {
inline State(u16 stateID, const char* name)
: EnemyFSMState(stateID)
{
m_name = name;
}
// _00 = VTBL
// _00-_10 = EnemyFSMState
};
struct StateAttack : public State {
inline StateAttack()
: State(ELECHIBA_Attack, "attack")
{
}
virtual void init(EnemyBase*, StateArg*); // _08
virtual void exec(EnemyBase*); // _0C
virtual void cleanup(EnemyBase*); // _10
@ -176,6 +200,11 @@ struct StateAttack : public State {
};
struct StateDead : public State {
inline StateDead()
: State(ELECHIBA_Dead, "dead")
{
}
virtual void init(EnemyBase*, StateArg*); // _08
virtual void exec(EnemyBase*); // _0C
virtual void cleanup(EnemyBase*); // _10
@ -185,6 +214,11 @@ struct StateDead : public State {
};
struct StateSign : public State {
inline StateSign()
: State(ELECHIBA_Sign, "sign")
{
}
virtual void init(EnemyBase*, StateArg*); // _08
virtual void exec(EnemyBase*); // _0C
virtual void cleanup(EnemyBase*); // _10
@ -194,6 +228,11 @@ struct StateSign : public State {
};
struct StateWait : public State {
inline StateWait()
: State(ELECHIBA_Wait, "wait")
{
}
virtual void init(EnemyBase*, StateArg*); // _08
virtual void exec(EnemyBase*); // _0C
virtual void cleanup(EnemyBase*); // _10

View File

@ -107,8 +107,6 @@ struct Obj : public EnemyBase {
inline void getScaledRadius(f32 scale, f32* radius) { *radius = scale * (m_cellRadius - 10.0f); }
inline f32 changeFaceDir(Vector2f& XZ);
// _00 = VTBL
// _00-_2BC = EnemyBase
FSM* m_FSM; // _2BC
@ -385,37 +383,6 @@ struct StateWait : public State {
// _00 = VTBL
// _00-_10 = EnemyFSMState
};
// dumb inline for StateTurn::exec, StateItemTurn::exec, StateBombTurn::exec
inline f32 Obj::changeFaceDir(Vector2f& XZ)
{
f32 approxSpeed;
f32 rotSpeed;
f32 rotAccel;
f32 x;
f32 z;
Parms* parms = static_cast<Parms*>(m_parms);
rotSpeed = parms->m_general.m_rotationalSpeed.m_value;
rotAccel = parms->m_general.m_rotationalAccel.m_value;
Vector3f pos = getPosition();
x = XZ.x;
z = XZ.y;
f32 angleDist = angDist(_angXZ(x, z, pos.x, pos.z), getFaceDir());
f32 limit = (DEG2RAD * rotSpeed) * PI;
approxSpeed = angleDist * rotAccel;
if (FABS(approxSpeed) > limit) {
approxSpeed = (approxSpeed > 0.0f) ? limit : -limit;
}
m_faceDir = roundAng(approxSpeed + getFaceDir());
_1A4.m_matrix[0][1] = m_faceDir;
return angleDist;
}
/////////////////////////////////////////////////////////////////
} // namespace OtakaraBase
} // namespace Game

View File

@ -40,6 +40,17 @@ namespace Queen {
struct QueenShadowMgr;
struct FSM;
enum StateID {
QUEEN_NULL = -1,
QUEEN_Dead = 0,
QUEEN_Sleep = 1,
QUEEN_Wait = 2,
QUEEN_Damage = 3,
QUEEN_Flick = 4,
QUEEN_Rolling = 5,
QUEEN_Born = 6,
};
struct Obj : public EnemyBase {
Obj();
@ -72,12 +83,12 @@ struct Obj : public EnemyBase {
void rollingAttack();
void flickPikmin(f32);
void isRollingAttackLeft();
bool isRollingAttackLeft();
void createCrashFallRock();
void createBabyChappy();
void updateCreateBaby();
void isCreateBaby();
void isHitCounterUp();
bool isCreateBaby();
bool isHitCounterUp();
void resetJointShadow();
void releaseJointShadow();
void startBossChargeBGM();
@ -113,10 +124,10 @@ struct Obj : public EnemyBase {
u8 _2C3; // _2C3
u8 _2C4; // _2C4
u8 _2C5; // _2C5
f32 _2C8; // _2C8, timer?
f32 m_waitTimer; // _2C8
f32 _2CC; // _2CC, timer?
f32 _2D0; // _2D0
int _2D4; // _2D4
StateID m_nextState; // _2D4
QueenShadowMgr* m_shadowMgr; // _2D8
Sys::MatLoopAnimator* m_matLoopAnimator; // _2DC
efx::TQueenLay* _2E0; // _2E0
@ -212,11 +223,22 @@ struct FSM : public EnemyStateMachine {
};
struct State : public EnemyFSMState {
inline State(int stateID, char* name)
: EnemyFSMState(stateID)
{
m_name = name;
}
// _00 = VTBL
// _00-_10 = EnemyFSMState
};
struct StateBorn : public State {
inline StateBorn()
: State(QUEEN_Born, "born")
{
}
virtual void init(EnemyBase*, StateArg*); // _08
virtual void exec(EnemyBase*); // _0C
virtual void cleanup(EnemyBase*); // _10
@ -226,6 +248,11 @@ struct StateBorn : public State {
};
struct StateDamage : public State {
inline StateDamage()
: State(QUEEN_Damage, "damage")
{
}
virtual void init(EnemyBase*, StateArg*); // _08
virtual void exec(EnemyBase*); // _0C
virtual void cleanup(EnemyBase*); // _10
@ -235,6 +262,11 @@ struct StateDamage : public State {
};
struct StateDead : public State {
inline StateDead()
: State(QUEEN_Dead, "dead")
{
}
virtual void init(EnemyBase*, StateArg*); // _08
virtual void exec(EnemyBase*); // _0C
virtual void cleanup(EnemyBase*); // _10
@ -244,6 +276,11 @@ struct StateDead : public State {
};
struct StateFlick : public State {
inline StateFlick()
: State(QUEEN_Flick, "flick")
{
}
virtual void init(EnemyBase*, StateArg*); // _08
virtual void exec(EnemyBase*); // _0C
virtual void cleanup(EnemyBase*); // _10
@ -253,6 +290,11 @@ struct StateFlick : public State {
};
struct StateRolling : public State {
inline StateRolling()
: State(QUEEN_Rolling, "rolling")
{
}
virtual void init(EnemyBase*, StateArg*); // _08
virtual void exec(EnemyBase*); // _0C
virtual void cleanup(EnemyBase*); // _10
@ -262,6 +304,11 @@ struct StateRolling : public State {
};
struct StateSleep : public State {
inline StateSleep()
: State(QUEEN_Sleep, "sleep")
{
}
virtual void init(EnemyBase*, StateArg*); // _08
virtual void exec(EnemyBase*); // _0C
virtual void cleanup(EnemyBase*); // _10
@ -271,6 +318,11 @@ struct StateSleep : public State {
};
struct StateWait : public State {
inline StateWait()
: State(QUEEN_Wait, "wait")
{
}
virtual void init(EnemyBase*, StateArg*); // _08
virtual void exec(EnemyBase*); // _0C
virtual void cleanup(EnemyBase*); // _10

View File

@ -127,6 +127,14 @@ inline Vector3f operator*=(const Vector3f& a, const float b) { return Vector3f(a
inline float dot(const Vector3f& a, const Vector3f& b) { return a.x * b.x + a.y * b.y + a.z * b.z; }
inline void weightVecXZ(Vector3f& vec, f32 weight)
{
Vector3f temp = vec;
temp.x *= weight;
temp.z *= weight;
vec = temp;
}
inline f32 Vector3f::length() const
{
f32 thing = x;

View File

@ -6,6 +6,11 @@
namespace efx {
struct TBabyBecha : public TSimple1 {
inline TBabyBecha()
: TSimple1(3)
{
}
// _00 = VTBL
// _00-_0C = TSimple1
};

View File

@ -687,7 +687,7 @@ NISHIMURA:=\
$(BUILD_DIR)/src/plugProjectNishimuraU/GasHibaAnimator.o\
$(BUILD_DIR)/asm/plugProjectNishimuraU/GasHibaMgr.o\
$(BUILD_DIR)/asm/plugProjectNishimuraU/GasHiba.o\
$(BUILD_DIR)/asm/plugProjectNishimuraU/ElecHibaState.o\
$(BUILD_DIR)/src/plugProjectNishimuraU/ElecHibaState.o\
$(BUILD_DIR)/src/plugProjectNishimuraU/ElecHibaAnimator.o\
$(BUILD_DIR)/asm/plugProjectNishimuraU/ElecHibaMgr.o\
$(BUILD_DIR)/asm/plugProjectNishimuraU/ElecHiba.o\

View File

@ -1,141 +1,7 @@
#include "types.h"
#include "Game/Entities/Baby.h"
/*
Generated from dpostproc
.section .data, "wa" # 0x8049E220 - 0x804EFC20
.global __vt__Q34Game4Baby11StateAttack
__vt__Q34Game4Baby11StateAttack:
.4byte 0
.4byte 0
.4byte
init__Q34Game4Baby11StateAttackFPQ24Game9EnemyBasePQ24Game8StateArg .4byte
exec__Q34Game4Baby11StateAttackFPQ24Game9EnemyBase .4byte
cleanup__Q34Game4Baby11StateAttackFPQ24Game9EnemyBase .4byte
resume__Q24Game13EnemyFSMStateFPQ24Game9EnemyBase .4byte
restart__Q24Game13EnemyFSMStateFPQ24Game9EnemyBase .4byte
transit__Q24Game13EnemyFSMStateFPQ24Game9EnemyBaseiPQ24Game8StateArg .4byte
doDirectDraw__Q24Game13EnemyFSMStateFPQ24Game9EnemyBaseR8Graphics .global
__vt__Q34Game4Baby9StateMove
__vt__Q34Game4Baby9StateMove:
.4byte 0
.4byte 0
.4byte init__Q34Game4Baby9StateMoveFPQ24Game9EnemyBasePQ24Game8StateArg
.4byte exec__Q34Game4Baby9StateMoveFPQ24Game9EnemyBase
.4byte cleanup__Q34Game4Baby9StateMoveFPQ24Game9EnemyBase
.4byte resume__Q24Game13EnemyFSMStateFPQ24Game9EnemyBase
.4byte restart__Q24Game13EnemyFSMStateFPQ24Game9EnemyBase
.4byte
transit__Q24Game13EnemyFSMStateFPQ24Game9EnemyBaseiPQ24Game8StateArg .4byte
doDirectDraw__Q24Game13EnemyFSMStateFPQ24Game9EnemyBaseR8Graphics .global
__vt__Q34Game4Baby9StateBorn
__vt__Q34Game4Baby9StateBorn:
.4byte 0
.4byte 0
.4byte init__Q34Game4Baby9StateBornFPQ24Game9EnemyBasePQ24Game8StateArg
.4byte exec__Q34Game4Baby9StateBornFPQ24Game9EnemyBase
.4byte cleanup__Q34Game4Baby9StateBornFPQ24Game9EnemyBase
.4byte resume__Q24Game13EnemyFSMStateFPQ24Game9EnemyBase
.4byte restart__Q24Game13EnemyFSMStateFPQ24Game9EnemyBase
.4byte
transit__Q24Game13EnemyFSMStateFPQ24Game9EnemyBaseiPQ24Game8StateArg .4byte
doDirectDraw__Q24Game13EnemyFSMStateFPQ24Game9EnemyBaseR8Graphics .global
__vt__Q23efx10TBabyBecha
__vt__Q23efx10TBabyBecha:
.4byte 0
.4byte 0
.4byte create__Q23efx8TSimple1FPQ23efx3Arg
.4byte forceKill__Q23efx8TSimple1Fv
.4byte fade__Q23efx8TSimple1Fv
.global __vt__Q34Game4Baby10StatePress
__vt__Q34Game4Baby10StatePress:
.4byte 0
.4byte 0
.4byte
init__Q34Game4Baby10StatePressFPQ24Game9EnemyBasePQ24Game8StateArg .4byte
exec__Q34Game4Baby10StatePressFPQ24Game9EnemyBase .4byte
cleanup__Q34Game4Baby10StatePressFPQ24Game9EnemyBase .4byte
resume__Q24Game13EnemyFSMStateFPQ24Game9EnemyBase .4byte
restart__Q24Game13EnemyFSMStateFPQ24Game9EnemyBase .4byte
transit__Q24Game13EnemyFSMStateFPQ24Game9EnemyBaseiPQ24Game8StateArg .4byte
doDirectDraw__Q24Game13EnemyFSMStateFPQ24Game9EnemyBaseR8Graphics .global
__vt__Q34Game4Baby9StateDead
__vt__Q34Game4Baby9StateDead:
.4byte 0
.4byte 0
.4byte init__Q34Game4Baby9StateDeadFPQ24Game9EnemyBasePQ24Game8StateArg
.4byte exec__Q34Game4Baby9StateDeadFPQ24Game9EnemyBase
.4byte cleanup__Q34Game4Baby9StateDeadFPQ24Game9EnemyBase
.4byte resume__Q24Game13EnemyFSMStateFPQ24Game9EnemyBase
.4byte restart__Q24Game13EnemyFSMStateFPQ24Game9EnemyBase
.4byte
transit__Q24Game13EnemyFSMStateFPQ24Game9EnemyBaseiPQ24Game8StateArg .4byte
doDirectDraw__Q24Game13EnemyFSMStateFPQ24Game9EnemyBaseR8Graphics .global
__vt__Q34Game4Baby5State
__vt__Q34Game4Baby5State:
.4byte 0
.4byte 0
.4byte init__Q24Game13EnemyFSMStateFPQ24Game9EnemyBasePQ24Game8StateArg
.4byte exec__Q24Game13EnemyFSMStateFPQ24Game9EnemyBase
.4byte cleanup__Q24Game13EnemyFSMStateFPQ24Game9EnemyBase
.4byte resume__Q24Game13EnemyFSMStateFPQ24Game9EnemyBase
.4byte restart__Q24Game13EnemyFSMStateFPQ24Game9EnemyBase
.4byte
transit__Q24Game13EnemyFSMStateFPQ24Game9EnemyBaseiPQ24Game8StateArg .4byte
doDirectDraw__Q24Game13EnemyFSMStateFPQ24Game9EnemyBaseR8Graphics .global
__vt__Q34Game4Baby3FSM
__vt__Q34Game4Baby3FSM:
.4byte 0
.4byte 0
.4byte init__Q34Game4Baby3FSMFPQ24Game9EnemyBase
.4byte
start__Q24Game17EnemyStateMachineFPQ24Game9EnemyBaseiPQ24Game8StateArg .4byte
exec__Q24Game17EnemyStateMachineFPQ24Game9EnemyBase .4byte
transit__Q24Game17EnemyStateMachineFPQ24Game9EnemyBaseiPQ24Game8StateArg
.4byte
doDirectDraw__Q24Game17EnemyStateMachineFPQ24Game9EnemyBaseR8Graphics .4byte
getCurrState__Q24Game17EnemyStateMachineFPQ24Game9EnemyBase .4byte
setCurrState__Q24Game17EnemyStateMachineFPQ24Game9EnemyBasePQ24Game13EnemyFSMState
.section .sdata2, "a" # 0x80516360 - 0x80520E40
.global lbl_8051B888
lbl_8051B888:
.4byte 0x64656164
.4byte 0x00000000
.global lbl_8051B890
lbl_8051B890:
.4byte 0x70726573
.4byte 0x73000000
.global lbl_8051B898
lbl_8051B898:
.4byte 0x626F726E
.4byte 0x00000000
.global lbl_8051B8A0
lbl_8051B8A0:
.4byte 0x6D6F7665
.4byte 0x00000000
.global lbl_8051B8A8
lbl_8051B8A8:
.4byte 0x61747461
.4byte 0x636B0000
.global lbl_8051B8B0
lbl_8051B8B0:
.4byte 0x00000000
.global lbl_8051B8B4
lbl_8051B8B4:
.4byte 0x3F733333
.global lbl_8051B8B8
lbl_8051B8B8:
.4byte 0x40490FDB
.global lbl_8051B8BC
lbl_8051B8BC:
.4byte 0x3BB60B61
.global lbl_8051B8C0
lbl_8051B8C0:
.float 0.25
.4byte 0x00000000
*/
#include "Game/EnemyAnimKeyEvent.h"
#include "Game/EnemyFunc.h"
#include "efx/TBaby.h"
namespace Game {
namespace Baby {
@ -144,116 +10,13 @@ namespace Baby {
* Address: 8028C584
* Size: 0001D0
*/
void FSM::init(Game::EnemyBase*)
void FSM::init(EnemyBase* enemy)
{
/*
stwu r1, -0x10(r1)
mflr r0
li r4, 5
stw r0, 0x14(r1)
stw r31, 0xc(r1)
mr r31, r3
bl create__Q24Game17EnemyStateMachineFi
li r3, 0x10
bl __nw__FUl
or. r4, r3, r3
beq lbl_8028C5E8
lis r3, __vt__Q24Game13EnemyFSMState@ha
lis r5, __vt__Q34Game4Baby5State@ha
addi r0, r3, __vt__Q24Game13EnemyFSMState@l
lis r3, __vt__Q34Game4Baby9StateDead@ha
stw r0, 0(r4)
li r7, 0
addi r6, r5, __vt__Q34Game4Baby5State@l
addi r5, r2, lbl_8051B888@sda21
stw r7, 4(r4)
addi r0, r3, __vt__Q34Game4Baby9StateDead@l
stw r7, 8(r4)
stw r6, 0(r4)
stw r5, 0xc(r4)
stw r0, 0(r4)
lbl_8028C5E8:
mr r3, r31
bl registerState__Q24Game17EnemyStateMachineFPQ24Game13EnemyFSMState li
r3, 0x10 bl __nw__FUl or. r4, r3, r3 beq lbl_8028C63C lis
r3, __vt__Q24Game13EnemyFSMState@ha lis r5, __vt__Q34Game4Baby5State@ha
addi r0, r3, __vt__Q24Game13EnemyFSMState@l
lis r3, __vt__Q34Game4Baby10StatePress@ha
stw r0, 0(r4)
li r0, 1
li r7, 0
addi r6, r5, __vt__Q34Game4Baby5State@l
stw r0, 4(r4)
addi r5, r2, lbl_8051B890@sda21
addi r0, r3, __vt__Q34Game4Baby10StatePress@l
stw r7, 8(r4)
stw r6, 0(r4)
stw r5, 0xc(r4)
stw r0, 0(r4)
lbl_8028C63C:
mr r3, r31
bl registerState__Q24Game17EnemyStateMachineFPQ24Game13EnemyFSMState li
r3, 0x10 bl __nw__FUl or. r4, r3, r3 beq lbl_8028C690 lis
r3, __vt__Q24Game13EnemyFSMState@ha lis r5, __vt__Q34Game4Baby5State@ha
addi r0, r3, __vt__Q24Game13EnemyFSMState@l
lis r3, __vt__Q34Game4Baby9StateBorn@ha
stw r0, 0(r4)
li r0, 2
li r7, 0
addi r6, r5, __vt__Q34Game4Baby5State@l
stw r0, 4(r4)
addi r5, r2, lbl_8051B898@sda21
addi r0, r3, __vt__Q34Game4Baby9StateBorn@l
stw r7, 8(r4)
stw r6, 0(r4)
stw r5, 0xc(r4)
stw r0, 0(r4)
lbl_8028C690:
mr r3, r31
bl registerState__Q24Game17EnemyStateMachineFPQ24Game13EnemyFSMState li
r3, 0x10 bl __nw__FUl or. r4, r3, r3 beq lbl_8028C6E4 lis
r3, __vt__Q24Game13EnemyFSMState@ha lis r5, __vt__Q34Game4Baby5State@ha
addi r0, r3, __vt__Q24Game13EnemyFSMState@l
lis r3, __vt__Q34Game4Baby9StateMove@ha
stw r0, 0(r4)
li r0, 3
li r7, 0
addi r6, r5, __vt__Q34Game4Baby5State@l
stw r0, 4(r4)
addi r5, r2, lbl_8051B8A0@sda21
addi r0, r3, __vt__Q34Game4Baby9StateMove@l
stw r7, 8(r4)
stw r6, 0(r4)
stw r5, 0xc(r4)
stw r0, 0(r4)
lbl_8028C6E4:
mr r3, r31
bl registerState__Q24Game17EnemyStateMachineFPQ24Game13EnemyFSMState li
r3, 0x10 bl __nw__FUl or. r4, r3, r3 beq lbl_8028C738 lis
r3, __vt__Q24Game13EnemyFSMState@ha lis r5, __vt__Q34Game4Baby5State@ha
addi r0, r3, __vt__Q24Game13EnemyFSMState@l
lis r3, __vt__Q34Game4Baby11StateAttack@ha
stw r0, 0(r4)
li r0, 4
li r7, 0
addi r6, r5, __vt__Q34Game4Baby5State@l
stw r0, 4(r4)
addi r5, r2, lbl_8051B8A8@sda21
addi r0, r3, __vt__Q34Game4Baby11StateAttack@l
stw r7, 8(r4)
stw r6, 0(r4)
stw r5, 0xc(r4)
stw r0, 0(r4)
lbl_8028C738:
mr r3, r31
bl registerState__Q24Game17EnemyStateMachineFPQ24Game13EnemyFSMState lwz
r0, 0x14(r1) lwz r31, 0xc(r1) mtlr r0 addi r1, r1, 0x10 blr
*/
create(BABY_Count), registerState(new StateDead);
registerState(new StatePress);
registerState(new StateBorn);
registerState(new StateMove);
registerState(new StateAttack);
}
/*
@ -261,32 +24,13 @@ r0, 0x14(r1) lwz r31, 0xc(r1) mtlr r0 addi r1, r1, 0x10 blr
* Address: 8028C754
* Size: 000058
*/
void StateDead::init(Game::EnemyBase*, Game::StateArg*)
void StateDead::init(EnemyBase* enemy, StateArg* stateArg)
{
/*
stwu r1, -0x10(r1)
mflr r0
stw r0, 0x14(r1)
stw r31, 0xc(r1)
mr r31, r4
mr r3, r31
bl createHoney__Q34Game4Baby3ObjFv
mr r3, r31
bl deathProcedure__Q24Game9EnemyBaseFv
lfs f0, lbl_8051B8B0@sda21(r2)
mr r3, r31
li r4, 0
li r5, 0
stfs f0, 0x1d4(r31)
stfs f0, 0x1d8(r31)
stfs f0, 0x1dc(r31)
bl startMotion__Q24Game9EnemyBaseFiPQ28SysShape14MotionListener
lwz r0, 0x14(r1)
lwz r31, 0xc(r1)
mtlr r0
addi r1, r1, 0x10
blr
*/
Obj* baby = static_cast<Obj*>(enemy);
baby->createHoney();
baby->deathProcedure();
baby->m_velocity2 = Vector3f(0.0f);
baby->startMotion(0, nullptr);
}
/*
@ -294,29 +38,11 @@ void StateDead::init(Game::EnemyBase*, Game::StateArg*)
* Address: 8028C7AC
* Size: 000044
*/
void StateDead::exec(Game::EnemyBase*)
void StateDead::exec(EnemyBase* enemy)
{
/*
stwu r1, -0x10(r1)
mflr r0
stw r0, 0x14(r1)
lwz r3, 0x188(r4)
lbz r0, 0x24(r3)
cmplwi r0, 0
beq lbl_8028C7E0
lwz r0, 0x1c(r3)
cmplwi r0, 0x3e8
bne lbl_8028C7E0
mr r3, r4
li r4, 0
bl kill__Q24Game8CreatureFPQ24Game15CreatureKillArg
lbl_8028C7E0:
lwz r0, 0x14(r1)
mtlr r0
addi r1, r1, 0x10
blr
*/
if (enemy->m_animKeyEvent->m_running && (u32)enemy->m_animKeyEvent->m_type == 1000) {
enemy->kill(nullptr);
}
}
/*
@ -324,72 +50,27 @@ lbl_8028C7E0:
* Address: 8028C7F0
* Size: 000004
*/
void StateDead::cleanup(Game::EnemyBase*) { }
void StateDead::cleanup(EnemyBase* enemy) { }
/*
* --INFO--
* Address: 8028C7F4
* Size: 0000DC
*/
void StatePress::init(Game::EnemyBase*, Game::StateArg*)
void StatePress::init(EnemyBase* enemy, StateArg* stateArg)
{
/*
stwu r1, -0x40(r1)
mflr r0
stw r0, 0x44(r1)
stw r31, 0x3c(r1)
mr r31, r4
mr r3, r31
bl createHoney__Q34Game4Baby3ObjFv
lfs f0, lbl_8051B8B0@sda21(r2)
mr r3, r31
stfs f0, 0x200(r31)
bl deathProcedure__Q24Game9EnemyBaseFv
lfs f0, lbl_8051B8B0@sda21(r2)
mr r3, r31
li r4, 1
li r5, 0
stfs f0, 0x1d4(r31)
stfs f0, 0x1d8(r31)
stfs f0, 0x1dc(r31)
bl startMotion__Q24Game9EnemyBaseFiPQ28SysShape14MotionListener
mr r4, r31
addi r3, r1, 8
lwz r12, 0(r31)
lwz r12, 8(r12)
mtctr r12
bctrl
lis r4, __vt__Q23efx5TBase@ha
lis r3, __vt__Q23efx8TSimple1@ha
addi r0, r4, __vt__Q23efx5TBase@l
lfs f2, 8(r1)
stw r0, 0x14(r1)
addi r0, r3, __vt__Q23efx8TSimple1@l
lfs f1, 0xc(r1)
lis r4, __vt__Q23efx3Arg@ha
lfs f0, 0x10(r1)
lis r3, __vt__Q23efx10TBabyBecha@ha
addi r4, r4, __vt__Q23efx3Arg@l
li r6, 3
li r5, 0
stw r0, 0x14(r1)
addi r0, r3, __vt__Q23efx10TBabyBecha@l
addi r3, r1, 0x14
stw r4, 0x20(r1)
addi r4, r1, 0x20
stfs f2, 0x24(r1)
stfs f1, 0x28(r1)
stfs f0, 0x2c(r1)
sth r6, 0x18(r1)
stw r5, 0x1c(r1)
stw r0, 0x14(r1)
bl create__Q23efx8TSimple1FPQ23efx3Arg
lwz r0, 0x44(r1)
lwz r31, 0x3c(r1)
mtlr r0
addi r1, r1, 0x40
blr
*/
Obj* baby = static_cast<Obj*>(enemy);
baby->createHoney();
baby->m_health = 0.0f;
baby->deathProcedure();
baby->m_velocity2 = Vector3f(0.0f);
baby->startMotion(1, nullptr);
Vector3f position = baby->getPosition();
efx::Arg fxArg(position);
efx::TBabyBecha bechaEffect;
bechaEffect.create(&fxArg);
}
/*
@ -397,29 +78,11 @@ void StatePress::init(Game::EnemyBase*, Game::StateArg*)
* Address: 8028C8D0
* Size: 000044
*/
void StatePress::exec(Game::EnemyBase*)
void StatePress::exec(EnemyBase* enemy)
{
/*
stwu r1, -0x10(r1)
mflr r0
stw r0, 0x14(r1)
lwz r3, 0x188(r4)
lbz r0, 0x24(r3)
cmplwi r0, 0
beq lbl_8028C904
lwz r0, 0x1c(r3)
cmplwi r0, 0x3e8
bne lbl_8028C904
mr r3, r4
li r4, 0
bl kill__Q24Game8CreatureFPQ24Game15CreatureKillArg
lbl_8028C904:
lwz r0, 0x14(r1)
mtlr r0
addi r1, r1, 0x10
blr
*/
if (enemy->m_animKeyEvent->m_running && (u32)enemy->m_animKeyEvent->m_type == 1000) {
enemy->kill(nullptr);
}
}
/*
@ -427,33 +90,18 @@ lbl_8028C904:
* Address: 8028C914
* Size: 000004
*/
void StatePress::cleanup(Game::EnemyBase*) { }
void StatePress::cleanup(EnemyBase* enemy) { }
/*
* --INFO--
* Address: 8028C918
* Size: 000040
*/
void StateBorn::init(Game::EnemyBase*, Game::StateArg*)
void StateBorn::init(EnemyBase* enemy, StateArg* stateArg)
{
/*
stwu r1, -0x10(r1)
mflr r0
stw r0, 0x14(r1)
stw r31, 0xc(r1)
mr r31, r4
mr r3, r31
bl createBornEffect__Q34Game4Baby3ObjFv
mr r3, r31
li r4, 5
li r5, 0
bl startMotion__Q24Game9EnemyBaseFiPQ28SysShape14MotionListener
lwz r0, 0x14(r1)
lwz r31, 0xc(r1)
mtlr r0
addi r1, r1, 0x10
blr
*/
Obj* baby = static_cast<Obj*>(enemy);
baby->createBornEffect();
baby->startMotion(5, nullptr);
}
/*
@ -461,70 +109,25 @@ void StateBorn::init(Game::EnemyBase*, Game::StateArg*)
* Address: 8028C958
* Size: 0000D8
*/
void StateBorn::exec(Game::EnemyBase*)
void StateBorn::exec(EnemyBase* enemy)
{
/*
stwu r1, -0x10(r1)
mflr r0
stw r0, 0x14(r1)
stw r31, 0xc(r1)
mr r31, r4
stw r30, 8(r1)
mr r30, r3
lwz r0, 0xc8(r4)
cmplwi r0, 0
beq lbl_8028C9A4
lfs f2, 0x1d4(r31)
mr r3, r31
lfs f0, lbl_8051B8B4@sda21(r2)
lfs f3, 0x1dc(r31)
fmuls f2, f2, f0
fmuls f3, f3, f0
stfs f2, 0x1d4(r31)
stfs f3, 0x1dc(r31)
bl finishMotion__Q24Game9EnemyBaseFv
if (enemy->_0C8 != nullptr) {
lbl_8028C9A4:
lwz r3, 0x188(r31)
lbz r0, 0x24(r3)
cmplwi r0, 0
beq lbl_8028CA18
lwz r0, 0x1c(r3)
cmplwi r0, 0x3e8
bne lbl_8028CA18
lfs f1, 0x200(r31)
lfs f0, lbl_8051B8B0@sda21(r2)
fcmpo cr0, f1, f0
cror 2, 0, 2
bne lbl_8028C9F8
mr r3, r30
mr r4, r31
lwz r12, 0(r30)
li r5, 0
li r6, 0
lwz r12, 0x1c(r12)
mtctr r12
bctrl
b lbl_8028CA18
Vector3f vec = enemy->m_velocity2;
weightVecXZ(vec, 0.95f);
enemy->m_velocity2 = vec;
lbl_8028C9F8:
mr r3, r30
mr r4, r31
lwz r12, 0(r30)
li r5, 3
li r6, 0
lwz r12, 0x1c(r12)
mtctr r12
bctrl
enemy->finishMotion();
}
lbl_8028CA18:
lwz r0, 0x14(r1)
lwz r31, 0xc(r1)
lwz r30, 8(r1)
mtlr r0
addi r1, r1, 0x10
blr
*/
if (enemy->m_animKeyEvent->m_running && (u32)enemy->m_animKeyEvent->m_type == 1000) {
if (enemy->m_health <= 0.0f) {
transit(enemy, BABY_Dead, nullptr);
} else {
transit(enemy, BABY_Move, nullptr);
}
}
}
/*
@ -532,30 +135,18 @@ lbl_8028CA18:
* Address: 8028CA30
* Size: 000004
*/
void StateBorn::cleanup(Game::EnemyBase*) { }
void StateBorn::cleanup(EnemyBase* enemy) { }
/*
* --INFO--
* Address: 8028CA34
* Size: 000034
*/
void StateMove::init(Game::EnemyBase*, Game::StateArg*)
void StateMove::init(EnemyBase* enemy, StateArg* stateArg)
{
/*
stwu r1, -0x10(r1)
mflr r0
mr r3, r4
li r4, 2
stw r0, 0x14(r1)
li r0, 0
li r5, 0
stw r0, 0x230(r3)
bl startMotion__Q24Game9EnemyBaseFiPQ28SysShape14MotionListener
lwz r0, 0x14(r1)
mtlr r0
addi r1, r1, 0x10
blr
*/
Obj* baby = static_cast<Obj*>(enemy);
baby->m_targetCreature = nullptr;
baby->startMotion(2, nullptr);
}
/*
@ -563,8 +154,66 @@ void StateMove::init(Game::EnemyBase*, Game::StateArg*)
* Address: 8028CA68
* Size: 000468
*/
void StateMove::exec(Game::EnemyBase*)
// NON-MATCHING
void StateMove::exec(EnemyBase* enemy)
{
Obj* baby = static_cast<Obj*>(enemy);
if (baby->m_health <= 0.0f) {
transit(baby, BABY_Dead, nullptr);
return;
}
Creature* creature
= EnemyFunc::getNearestPikminOrNavi(baby, static_cast<Parms*>(baby->m_parms)->m_general.m_fov.m_value,
static_cast<Parms*>(baby->m_parms)->m_general.m_sightRadius.m_value, nullptr, nullptr, nullptr);
if (creature != nullptr) {
Vector3f creaturePos = creature->getPosition();
Vector2f XZ;
XZ.x = creaturePos.x;
XZ.y = creaturePos.z;
f32 angleDist = baby->changeFaceDir(XZ);
f64 abs = fabs(angleDist);
if ((f32)(abs) <= (DEG2RAD * static_cast<Parms*>(baby->m_parms)->m_general.m_fp21.m_value) * PI) {
f32 speed = static_cast<Parms*>(baby->m_parms)->m_general.m_moveSpeed.m_value;
f32 sintheta = (f32)sin(baby->getFaceDir());
Vector3f vel = baby->m_velocity2;
f32 costheta = (f32)cos(baby->getFaceDir());
enemy->m_velocity2 = Vector3f(speed * sintheta, vel.y, speed * costheta);
} else {
f32 speed = static_cast<Parms*>(baby->m_parms)->m_general.m_moveSpeed.m_value / 4;
f32 sintheta = (f32)sin(baby->getFaceDir());
Vector3f vel = baby->m_velocity2;
f32 costheta = (f32)cos(baby->getFaceDir());
enemy->m_velocity2 = Vector3f(speed * sintheta, vel.y, speed * costheta);
}
f32 attackAngle = static_cast<Parms*>(baby->m_parms)->m_general.m_fp21.m_value;
bool check = false;
f32 range = static_cast<Parms*>(baby->m_parms)->m_general.m_fp20.m_value;
Vector3f sep(baby->getPosition().x - creature->getPosition().x, baby->getPosition().y - creature->getPosition().y,
baby->getPosition().z - creature->getPosition().z);
if ((sep.x * sep.x + sep.y * sep.y + sep.z * sep.z < range * range) && FABS(angleDist) <= (DEG2RAD * attackAngle) * PI) {
check = true;
}
if (check) {
transit(baby, BABY_Attack, nullptr);
}
} else {
baby->moveNoTarget();
}
if (baby->m_animKeyEvent->m_running && (u32)baby->m_animKeyEvent->m_type == 1000) {
transit(baby, BABY_Move, nullptr);
}
/*
stwu r1, -0xf0(r1)
mflr r0
@ -875,37 +524,18 @@ lbl_8028CE80:
* Address: 8028CED0
* Size: 000004
*/
void StateMove::cleanup(Game::EnemyBase*) { }
void StateMove::cleanup(EnemyBase* enemy) { }
/*
* --INFO--
* Address: 8028CED4
* Size: 000050
*/
void StateAttack::init(Game::EnemyBase*, Game::StateArg*)
void StateAttack::init(EnemyBase* enemy, StateArg* stateArg)
{
/*
stwu r1, -0x10(r1)
mflr r0
lfs f0, lbl_8051B8B0@sda21(r2)
stw r0, 0x14(r1)
stw r31, 0xc(r1)
mr r31, r4
mr r3, r31
stfs f0, 0x1d4(r4)
stfs f0, 0x1d8(r4)
stfs f0, 0x1dc(r4)
bl setEmotionExcitement__Q24Game9EnemyBaseFv
mr r3, r31
li r4, 3
li r5, 0
bl startMotion__Q24Game9EnemyBaseFiPQ28SysShape14MotionListener
lwz r0, 0x14(r1)
lwz r31, 0xc(r1)
mtlr r0
addi r1, r1, 0x10
blr
*/
enemy->m_velocity2 = Vector3f(0.0f);
enemy->setEmotionExcitement();
enemy->startMotion(3, nullptr);
}
/*
@ -913,86 +543,36 @@ void StateAttack::init(Game::EnemyBase*, Game::StateArg*)
* Address: 8028CF24
* Size: 000104
*/
void StateAttack::exec(Game::EnemyBase*)
void StateAttack::exec(EnemyBase* enemy)
{
/*
stwu r1, -0x10(r1)
mflr r0
stw r0, 0x14(r1)
stw r31, 0xc(r1)
mr r31, r4
lwz r5, 0x188(r4)
lbz r0, 0x24(r5)
cmplwi r0, 0
beq lbl_8028D014
lwz r0, 0x1c(r5)
cmplwi r0, 2
bne lbl_8028CFA4
lwz r6, 0xc0(r31)
mr r3, r31
li r4, 0
li r5, 0
lfs f1, 0x5b4(r6)
lfs f2, 0x5dc(r6)
lfs f3, 0x604(r6)
bl
"attackNavi__Q24Game9EnemyFuncFPQ24Game8CreaturefffP8CollPartP23Condition<Q24Game4Navi>"
mr r3, r31
li r4, 0
bl
"eatPikmin__Q24Game9EnemyFuncFPQ24Game9EnemyBaseP23Condition<Q24Game4Piki>"
mr r3, r31 bl getSlotPikiNum__Q34Game4Baby3ObjFv cmpwi r3, 0 bne
lbl_8028D014 mr r3, r31 li r4, 4 li r5, 0 bl
startMotion__Q24Game9EnemyBaseFiPQ28SysShape14MotionListener b lbl_8028D014
lbl_8028CFA4:
cmplwi r0, 3
bne lbl_8028CFC4
lwz r5, 0xc0(r31)
mr r3, r31
li r4, 0
lfs f1, 0x81c(r5)
bl
"swallowPikmin__Q24Game9EnemyFuncFPQ24Game8CreaturefP23Condition<Q24Game4Piki>"
b lbl_8028D014
lbl_8028CFC4:
cmplwi r0, 0x3e8
bne lbl_8028D014
lfs f1, 0x200(r31)
lfs f0, lbl_8051B8B0@sda21(r2)
fcmpo cr0, f1, f0
cror 2, 0, 2
bne lbl_8028CFFC
lwz r12, 0(r3)
li r5, 0
li r6, 0
lwz r12, 0x1c(r12)
mtctr r12
bctrl
b lbl_8028D014
lbl_8028CFFC:
lwz r12, 0(r3)
li r5, 3
li r6, 0
lwz r12, 0x1c(r12)
mtctr r12
bctrl
lbl_8028D014:
lwz r0, 0x14(r1)
lwz r31, 0xc(r1)
mtlr r0
addi r1, r1, 0x10
blr
*/
Obj* baby = static_cast<Obj*>(enemy);
if (baby->m_animKeyEvent->m_running) {
if ((u32)baby->m_animKeyEvent->m_type == 2) {
Parms* parms = static_cast<Parms*>(baby->m_parms);
EnemyFunc::attackNavi(baby, parms->m_general.m_fp22.m_value, parms->m_general.m_fp23.m_value,
parms->m_general.m_attackDamage.m_value, nullptr, nullptr);
EnemyFunc::eatPikmin(baby, nullptr);
int slotCount = baby->getSlotPikiNum();
if (slotCount == 0) {
baby->startMotion(4, nullptr);
}
} else if ((u32)baby->m_animKeyEvent->m_type == 3) {
Parms* parms = static_cast<Parms*>(baby->m_parms);
EnemyFunc::swallowPikmin(baby, parms->m_properParms.m_fp01.m_value, nullptr);
} else if ((u32)baby->m_animKeyEvent->m_type == 1000) {
if (baby->m_health <= 0.0f) {
transit(baby, BABY_Dead, nullptr);
} else {
transit(baby, BABY_Move, nullptr);
}
}
}
}
/*
* --INFO--
* Address: 8028D028
* Size: 000024
*/
void StateAttack::cleanup(EnemyBase* baby) { setEmotionCaution(baby); }
void StateAttack::cleanup(EnemyBase* enemy) { enemy->setEmotionCaution(); }
} // namespace Baby
} // namespace Game

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -109,3 +109,5 @@ You have 445 out of 10000 Pokos and 18 out of 201 treasures.",2022-09-25 02:08:4
You have 449 out of 10000 Pokos and 19 out of 201 treasures.",2022-09-28 08:49:14.326110
454,211628,0.045488389528565334,19,67756,0.09504864937659219,"
You have 454 out of 10000 Pokos and 19 out of 201 treasures.",2022-10-01 13:37:47.988651
460,214120,0.046024032575351134,19,67998,0.09538812887876373,"
You have 460 out of 10000 Pokos and 19 out of 201 treasures.",2022-10-01 14:01:15.723059

1 code_count_in_pokos code_completion_in_bytes code_completion_in_percentage data_count_in_treasures data_completion_in_bytes data_completion_in_percentage sentence created_at
109
110
111
112
113