d_a_e_zs (a.k.a. Stallord's zombie soldiers) equivalent (#2313)

* Initial work for d_a_e_zs

* d_a_e_zs equivalent

* d_a_e_zs data fixes. Thanks Taka!

* Update d_a_e_zs based on Taka's comments
This commit is contained in:
YunataSavior 2025-03-08 01:04:31 -08:00 committed by GitHub
parent fb45587923
commit 52b23ad73c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 645 additions and 585 deletions

View File

@ -17,6 +17,6 @@ REL/global_destructor_chain.c:
d/actor/d_a_e_zs.cpp:
.text start:0x000000EC end:0x000022FC
.ctors start:0x00000000 end:0x00000004
.rodata start:0x00000000 end:0x0000007C
.rodata start:0x00000000 end:0x00000079
.data start:0x00000000 end:0x0000014C
.bss start:0x00000008 end:0x0000002C
.bss start:0x00000008 end:0x0000002A

View File

@ -5,11 +5,11 @@ __register_global_object = .text:0x00000078; // type:function size:0x1C scope:gl
__destroy_global_chain = .text:0x00000094; // type:function size:0x58 scope:global
__ct__12daE_ZS_HIO_cFv = .text:0x000000EC; // type:function size:0x30 scope:global
draw__8daE_ZS_cFv = .text:0x0000011C; // type:function size:0xE8 scope:global
daE_ZS_Draw__FP8daE_ZS_c = .text:0x00000204; // type:function size:0x20 scope:global
daE_ZS_Draw__FP8daE_ZS_c = .text:0x00000204; // type:function size:0x20 scope:local
setBck__8daE_ZS_cFiUcff = .text:0x00000224; // type:function size:0xAC scope:global
setActionMode__8daE_ZS_cFii = .text:0x000002D0; // type:function size:0xC scope:global
damage_check__8daE_ZS_cFv = .text:0x000002DC; // type:function size:0x3B0 scope:global
s_BossSearch__FPvPv = .text:0x0000068C; // type:function size:0x4C scope:global
s_BossSearch__FPvPv = .text:0x0000068C; // type:function size:0x4C scope:local
mBossHandCheck__8daE_ZS_cFv = .text:0x000006D8; // type:function size:0x2CC scope:global
executeAppear__8daE_ZS_cFv = .text:0x000009A4; // type:function size:0x3CC scope:global
executeWait__8daE_ZS_cFv = .text:0x00000D70; // type:function size:0x1EC scope:global
@ -19,19 +19,19 @@ action__8daE_ZS_cFv = .text:0x00001308; // type:function size:0x1B0 scope:global
mtx_set__8daE_ZS_cFv = .text:0x000014B8; // type:function size:0xA0 scope:global
cc_set__8daE_ZS_cFv = .text:0x00001558; // type:function size:0x138 scope:global
execute__8daE_ZS_cFv = .text:0x00001690; // type:function size:0x6C scope:global
daE_ZS_Execute__FP8daE_ZS_c = .text:0x000016FC; // type:function size:0x20 scope:global
daE_ZS_IsDelete__FP8daE_ZS_c = .text:0x0000171C; // type:function size:0x8 scope:global
daE_ZS_Execute__FP8daE_ZS_c = .text:0x000016FC; // type:function size:0x20 scope:local
daE_ZS_IsDelete__FP8daE_ZS_c = .text:0x0000171C; // type:function size:0x8 scope:local
_delete__8daE_ZS_cFv = .text:0x00001724; // type:function size:0x74 scope:global
daE_ZS_Delete__FP8daE_ZS_c = .text:0x00001798; // type:function size:0x20 scope:global
daE_ZS_Delete__FP8daE_ZS_c = .text:0x00001798; // type:function size:0x20 scope:local
CreateHeap__8daE_ZS_cFv = .text:0x000017B8; // type:function size:0xEC scope:global
useHeapInit__FP10fopAc_ac_c = .text:0x000018A4; // type:function size:0x20 scope:global
useHeapInit__FP10fopAc_ac_c = .text:0x000018A4; // type:function size:0x20 scope:local
create__8daE_ZS_cFv = .text:0x000018C4; // type:function size:0x324 scope:global
__dt__8cM3dGCylFv = .text:0x00001BE8; // type:function size:0x48 scope:global
__dt__8cM3dGAabFv = .text:0x00001C30; // type:function size:0x48 scope:global
__dt__10dCcD_GSttsFv = .text:0x00001C78; // type:function size:0x5C scope:global
__dt__12dBgS_ObjAcchFv = .text:0x00001CD4; // type:function size:0x70 scope:global
__dt__12dBgS_AcchCirFv = .text:0x00001D44; // type:function size:0x70 scope:global
daE_ZS_Create__FP8daE_ZS_c = .text:0x00001DB4; // type:function size:0x20 scope:global
daE_ZS_Create__FP8daE_ZS_c = .text:0x00001DB4; // type:function size:0x20 scope:local
__dt__10cCcD_GSttsFv = .text:0x00001DD4; // type:function size:0x48 scope:global
__dt__12daE_ZS_HIO_cFv = .text:0x00001E1C; // type:function size:0x48 scope:global
__sinit_d_a_e_zs_cpp = .text:0x00001E64; // type:function size:0x3C scope:local
@ -71,16 +71,16 @@ _dtors = .dtors:0x00000000; // type:label scope:global
@4649 = .rodata:0x00000070; // type:object size:0x4 scope:local
@stringBase0 = .rodata:0x00000074; // type:object size:0x5 scope:local data:string_table
...data.0 = .data:0x00000000; // type:label scope:local
cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:global
cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:local
@1787 = .data:0x0000000C; // type:object size:0x4 scope:local
e_prim$3788 = .data:0x00000020; // type:object size:0x8 scope:local
e_env$3789 = .data:0x00000028; // type:object size:0x8 scope:local
eff_id$3797 = .data:0x00000030; // type:object size:0x6 scope:local
cc_zs_src__22@unnamed@d_a_e_zs_cpp@ = .data:0x00000038; // type:object size:0x44 scope:global
cc_zs_src__22@unnamed@d_a_e_zs_cpp@ = .data:0x00000038; // type:object size:0x44 scope:local
eff_Damage_id$3979 = .data:0x0000007C; // type:object size:0x6 scope:local
eff_Appear_id$4194 = .data:0x00000084; // type:object size:0x4 scope:local
w_eff_id$4324 = .data:0x00000088; // type:object size:0x8 scope:local
l_daE_ZS_Method = .data:0x00000090; // type:object size:0x20 scope:global
l_daE_ZS_Method = .data:0x00000090; // type:object size:0x20 scope:local
g_profile_E_ZS = .data:0x000000B0; // type:object size:0x30 scope:global
__vt__12dBgS_AcchCir = .data:0x000000E0; // type:object size:0xC scope:global
__vt__10cCcD_GStts = .data:0x000000EC; // type:object size:0xC scope:global
@ -90,8 +90,8 @@ __vt__8cM3dGAab = .data:0x00000110; // type:object size:0xC scope:global
__vt__12dBgS_ObjAcch = .data:0x0000011C; // type:object size:0x24 scope:global
__vt__12daE_ZS_HIO_c = .data:0x00000140; // type:object size:0xC scope:global
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global
lbl_259_bss_8 = .bss:0x00000008; // type:object size:0x1 data:byte
lbl_259_bss_8 = .bss:0x00000008; // type:object size:0x1 scope:local data:byte
@3925 = .bss:0x0000000C; // type:object size:0xC scope:local
l_HIO = .bss:0x00000018; // type:object size:0x10 scope:global data:byte
lbl_259_bss_28 = .bss:0x00000028; // type:object size:0x1 data:byte
lbl_259_bss_29 = .bss:0x00000029; // type:object size:0x1 data:byte
l_HIO = .bss:0x00000018; // type:object size:0x10 scope:local data:byte
lbl_259_bss_28 = .bss:0x00000028; // type:object size:0x1 scope:local data:byte
lbl_259_bss_29 = .bss:0x00000029; // type:object size:0x1 scope:local data:byte

View File

@ -1691,7 +1691,7 @@ config.libs = [
ActorRel(NonMatching, "d_a_e_yr"),
ActorRel(NonMatching, "d_a_e_zh"),
ActorRel(NonMatching, "d_a_e_zm"),
ActorRel(NonMatching, "d_a_e_zs"),
ActorRel(Equivalent, "d_a_e_zs"),
ActorRel(MatchingFor("GZ2E01"), "d_a_formation_mng"),
ActorRel(MatchingFor("GZ2E01"), "d_a_guard_mng"),
ActorRel(NonMatching, "d_a_horse"),

View File

@ -178,6 +178,15 @@ public:
/* 805DB974 */ cPhs__Step create();
/* 805DC1E8 */ daB_DS_c();
cXyz getHandPosR();
cXyz getHandPosL();
BOOL isOpening() { return mAction == ACT_OPENING_DEMO; }
bool isDemo() { return mIsDemo; }
bool isAppear() { return mIsAppear; }
bool isAppearG() { return mIsAppearG; }
bool isDead() { return mDead; }
bool isArg0() { return arg0; }
private:
/* 0x05AC */ request_of_phase_process_class mPhase;
/* 0x05B4 */ mDoExt_McaMorfSO* mpMorf;
@ -321,6 +330,9 @@ private:
/* 0x2EDC */ dMsgFlow_c mMsgFlow;
};
cXyz daB_DS_c::getHandPosR() { return mHandPos[1]; }
cXyz daB_DS_c::getHandPosL() { return mHandPos[0]; }
STATIC_ASSERT(sizeof(daB_DS_c) == 0x2F28);
class daB_DS_HIO_c {

View File

@ -1,7 +1,9 @@
#ifndef D_A_E_ZS_H
#define D_A_E_ZS_H
#include "f_op/f_op_actor_mng.h"
#include "d/d_bg_s_acch.h"
#include "d/d_cc_d.h"
#include "f_op/f_op_actor.h"
/**
* @ingroup actors-enemies
@ -12,11 +14,19 @@
*
*/
class daE_ZS_c : public fopEn_enemy_c {
/* 808330DC */ void draw();
public:
enum daE_ZS_Action {
/* 0 */ ACT_APPEAR,
/* 1 */ ACT_WAIT,
/* 2 */ ACT_DAMAGE,
/* 3 */ ACT_DRIVE
};
/* 808330DC */ int draw();
/* 808331E4 */ void setBck(int, u8, f32, f32);
/* 80833290 */ void setActionMode(int, int);
/* 8083329C */ void damage_check();
/* 80833698 */ void mBossHandCheck();
/* 80833698 */ u8 mBossHandCheck();
/* 80833964 */ void executeAppear();
/* 80833D30 */ void executeWait();
/* 80833F1C */ void executeDamage();
@ -24,20 +34,48 @@ class daE_ZS_c : public fopEn_enemy_c {
/* 808342C8 */ void action();
/* 80834478 */ void mtx_set();
/* 80834518 */ void cc_set();
/* 80834650 */ void execute();
/* 808346E4 */ void _delete();
/* 80834778 */ void CreateHeap();
/* 80834884 */ void create();
/* 80834650 */ int execute();
/* 808346E4 */ int _delete();
/* 80834778 */ int CreateHeap();
/* 80834884 */ int create();
private:
/* 0x5ac */ u8 field_0x5ac[0xa3c - 0x5ac];
/* 0x5ac */ request_of_phase_process_class mPhase;
/* 0x5b4 */ mDoExt_McaMorfSO* mpMorf;
/* 0x5b8 */ Z2CreatureEnemy mSound;
/* 0x65c */ f32 field_0x65c;
/* 0x660 */ int mAction;
/* 0x664 */ int mMode;
/* 0x668 */ int mResIndex;
/* 0x66c */ u32 mShadowKey;
/* 0x670 */ u8 field_0x670;
/* 0x671 */ u8 field_0x671;
/* 0x672 */ u8 field_0x672;
/* 0x673 */ u8 field_0x673;
/* 0x674 */ dBgS_AcchCir mAcchCir;
/* 0x6b4 */ dBgS_ObjAcch mAcch;
/* 0x88c */ dCcD_Stts mStts;
/* 0x8c8 */ dCcD_Cyl mCyl;
/* 0xa04 */ cCcD_Obj* mpCollider;
/* 0xa08 */ u8 field_0xa08[0xa0c - 0xa08];
/* 0xa0c */ Z2CreatureEnemy* mpSound;
/* 0xa10 */ u8 field_0xa10[0xa22 - 0xa10];
/* 0xa22 */ s8 field_0xa22;
/* 0xa23 */ u8 field_0xa23[0xa28 - 0xa23];
/* 0xa28 */ u8 field_0xa28;
/* 0xa29 */ u8 field_0xa29[0xa3c - 0xa29];
};
STATIC_ASSERT(sizeof(daE_ZS_c) == 0xa3c);
class daE_ZS_HIO_c {
public:
/* 808330AC */ daE_ZS_HIO_c();
/* 80834DDC */ ~daE_ZS_HIO_c();
/* 80834DDC */ virtual ~daE_ZS_HIO_c() {}
/* 0x4 */ s8 field_0x4;
/* 0x8 */ f32 field_0x8;
/* 0xc */ f32 field_0xc;
};

File diff suppressed because it is too large Load Diff