CThardusRockProjectile matches

This commit is contained in:
Phillip Stephens
2026-01-21 01:21:18 -08:00
parent 6aad4b7cdd
commit 59b03dd02e
13 changed files with 546 additions and 204 deletions
+20 -20
View File
@@ -9162,11 +9162,11 @@ fn_801DB618 = .text:0x801DB618; // type:function size:0x21C
StartAttack__8CThardusFR13CStateManagerf = .text:0x801DB834; // type:function size:0x8 scope:global
Suck__8CThardusFR13CStateManager9EStateMsgf = .text:0x801DB83C; // type:function size:0x68 scope:global
Explode__8CThardusFR13CStateManager9EStateMsgf = .text:0x801DB8A4; // type:function size:0x17C scope:global
fn_801DBA20 = .text:0x801DBA20; // type:function size:0x1BC
ShakeScreen__8CThardusFR13CStateManagerRC9CVector3ffff = .text:0x801DBA20; // type:function size:0x1BC
fn_801DBBDC = .text:0x801DBBDC; // type:function size:0x64
fn_801DBC40 = .text:0x801DBC40; // type:function size:0x1C
fn_801DBC5C = .text:0x801DBC5C; // type:function size:0x3C
fn_801DBC98 = .text:0x801DBC98; // type:function size:0x38
StartTimedThermalFlash__8CThardusFR13CStateManagerfR6CActor = .text:0x801DBC98; // type:function size:0x38
PathFind__8CThardusFR13CStateManager9EStateMsgf = .text:0x801DBCD0; // type:function size:0x25C scope:global
PathFound__8CThardusFR13CStateManagerf = .text:0x801DBF2C; // type:function size:0x8 scope:global
fn_801DBF34 = .text:0x801DBF34; // type:function size:0x394
@@ -9231,7 +9231,7 @@ Accept__8CThardusFR8IVisitor = .text:0x801E21EC; // type:function size:0x38 scop
__ct__8CThardusF9TUniqueIdRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>RC11CEntityInfoRC12CTransform4fRC10CModelDataRC16CActorParametersRC14CPatternedInfoRCQ24rstl47vector<10CModelData,Q24rstl17rmemory_allocator>RCQ24rstl47vector<10CModelData,Q24rstl17rmemory_allocator>UiUiUifffffff = .text:0x801E2224; // type:function size:0x910 scope:global
fn_801E2B34 = .text:0x801E2B34; // type:function size:0x29C
fn_801E2DD0 = .text:0x801E2DD0; // type:function size:0x3C
fn_801E2E0C = .text:0x801E2E0C; // type:function size:0xB0
__ct__Q24rstl47vector<10CModelData,Q24rstl17rmemory_allocator>FRCQ24rstl47vector<10CModelData,Q24rstl17rmemory_allocator> = .text:0x801E2E0C; // type:function size:0xB0
fn_801E2EBC = .text:0x801E2EBC; // type:function size:0x74
fn_801E2F30 = .text:0x801E2F30; // type:function size:0x28
CanRenderUnsorted__16CDestroyableRockCFRC13CStateManager = .text:0x801E2F58; // type:function size:0x8 scope:global
@@ -9617,19 +9617,19 @@ fn_802034E0 = .text:0x802034E0; // type:function size:0x110
fn_802035F0 = .text:0x802035F0; // type:function size:0x64
__insertion_sort<Q24rstl162pointer_iterator<Q212CMapUniverse18CMapObjectSortInfo,Q24rstl71vector<Q212CMapUniverse18CMapObjectSortInfo,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>,29CMapObjectSortInfoGreaterThan>__4rstlFQ24rstl162pointer_iterator<Q212CMapUniverse18CMapObjectSortInfo,Q24rstl71vector<Q212CMapUniverse18CMapObjectSortInfo,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>Q24rstl162pointer_iterator<Q212CMapUniverse18CMapObjectSortInfo,Q24rstl71vector<Q212CMapUniverse18CMapObject = .text:0x80203654; // type:function size:0xAC scope:global
__dt__22CThardusRockProjectileFv = .text:0x80203700; // type:function size:0x124 scope:global
fn_80203824 = .text:0x80203824; // type:function size:0x270
fn_80203A94 = .text:0x80203A94; // type:function size:0x2C4
fn_80203D58 = .text:0x80203D58; // type:function size:0x74
AddParticleEffect__22CThardusRockProjectileFR13CStateManagerUiRC9CVector3fRC9CVector3fi = .text:0x80203824; // type:function size:0x270
AddDeathEffects__22CThardusRockProjectileFR13CStateManagerRC9CVector3f = .text:0x80203A94; // type:function size:0x2C4
AddGravity__22CThardusRockProjectileFR13CStateManager = .text:0x80203D58; // type:function size:0x74
Render__22CThardusRockProjectileCFRC13CStateManager = .text:0x80203DCC; // type:function size:0x20 scope:global
fn_80203DEC = .text:0x80203DEC; // type:function size:0x128
ModifyChildrenMaterial__22CThardusRockProjectileFR13CStateManagerQ222CThardusRockProjectile15EModifyMaterial14EMaterialTypes = .text:0x80203DEC; // type:function size:0x128
SetChildrenActive__22CThardusRockProjectileFR13CStateManagerb = .text:0x80203F14; // type:function size:0xD8 scope:global
UpdateDestroyableRockCollisionActors__22CThardusRockProjectileFR13CStateManager = .text:0x80203FEC; // type:function size:0x254 scope:global
UpdateDestroyableRockPositions__22CThardusRockProjectileFR13CStateManager = .text:0x80204240; // type:function size:0x14C scope:global
fn_8020438C = .text:0x8020438C; // type:function size:0x16C
AddSphereCollisionList__22CThardusRockProjectileFPCQ224CPatternedCollisionUtils16SSphereJointInfoiRQ24rstl63vector<26CJointCollisionDescription,Q24rstl17rmemory_allocator> = .text:0x8020438C; // type:function size:0x16C
SetMaterialProperties__22CThardusRockProjectileFRQ24rstl36single_ptr<22CCollisionActorManager>R13CStateManager = .text:0x802044F8; // type:function size:0xF8 scope:global
InitializeCollisionManager__22CThardusRockProjectileFR13CStateManager = .text:0x802045F0; // type:function size:0x1CC scope:global
Delay__22CThardusRockProjectileFR13CStateManagerf = .text:0x802047BC; // type:function size:0x18 scope:global
fn_802047D4 = .text:0x802047D4; // type:function size:0x14
AnimOver__22CThardusRockProjectileFR13CStateManagerf = .text:0x802047D4; // type:function size:0x14
HitSomething__22CThardusRockProjectileFR13CStateManagerf = .text:0x802047E8; // type:function size:0x8 scope:global
ShouldAttack__22CThardusRockProjectileFR13CStateManagerf = .text:0x802047F0; // type:function size:0x34 scope:global
ShouldMove__22CThardusRockProjectileFR13CStateManagerf = .text:0x80204824; // type:function size:0x1C scope:global
@@ -9641,7 +9641,7 @@ GetUp__22CThardusRockProjectileFR13CStateManager9EStateMsgf = .text:0x80204D2C;
Think__22CThardusRockProjectileFfR13CStateManager = .text:0x802050A0; // type:function size:0x1C0 scope:global
AcceptScriptMsg__22CThardusRockProjectileF20EScriptObjectMessage9TUniqueIdR13CStateManager = .text:0x80205260; // type:function size:0x8C0 scope:global
Accept__22CThardusRockProjectileFR8IVisitor = .text:0x80205B20; // type:function size:0x38 scope:global
__ct__22CThardusRockProjectileF9TUniqueIdRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>RC11CEntityInfoRC12CTransform4fRC10CModelDataRC16CActorParametersRC14CPatternedInfoRCQ24rstl47vector<10CModelData,Q24rstl17rmemory_allocator>Ui = .text:0x80205B58; // type:function size:0x1DC scope:global
__ct__22CThardusRockProjectileF9TUniqueIdRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>RC11CEntityInfoRC12CTransform4fRC10CModelDataRC16CActorParametersRC14CPatternedInfoRCQ24rstl47vector<10CStaticRes,Q24rstl17rmemory_allocator>Uif = .text:0x80205B58; // type:function size:0x1DC scope:global
IsRightLogDynamic__16CInventoryScreenCFv = .text:0x80205D34; // type:function size:0x8 scope:global
IsRightInventoryItemEquipped__16CInventoryScreenCFi = .text:0x80205D3C; // type:function size:0x254 scope:global
HasRightInventoryItem__16CInventoryScreenCFi = .text:0x80205F90; // type:function size:0x214 scope:global
@@ -18583,7 +18583,7 @@ jumptable_803E6B28 = .data:0x803E6B28; // type:object size:0x70 scope:local
__vt__20CFlyingPirateRagDoll = .data:0x803E6B98; // type:object size:0x18 scope:global
lbl_803E6BB0 = .data:0x803E6BB0; // type:object size:0x20
lbl_803E6BD0 = .data:0x803E6BD0; // type:object size:0x10
lbl_803E6BE0 = .data:0x803E6BE0; // type:object size:0x2D0
__vt__22CThardusRockProjectile = .data:0x803E6BE0; // type:object size:0x2D0
lbl_803E6EB0 = .data:0x803E6EB0; // type:object size:0x54
jumptable_803E6F04 = .data:0x803E6F04; // type:object size:0x60 scope:local
jumptable_803E6F64 = .data:0x803E6F64; // type:object size:0x60 scope:local
@@ -25309,15 +25309,15 @@ lbl_805ACD84 = .sdata2:0x805ACD84; // type:object size:0x4 align:4 data:float
lbl_805ACD88 = .sdata2:0x805ACD88; // type:object size:0x8 align:8 data:double
lbl_805ACD90 = .sdata2:0x805ACD90; // type:object size:0x8 align:4 data:float
lbl_805ACD98 = .sdata2:0x805ACD98; // type:object size:0x8 data:4byte
lbl_805ACDA0 = .sdata2:0x805ACDA0; // type:object size:0x4 align:4 data:float
lbl_805ACDA4 = .sdata2:0x805ACDA4; // type:object size:0x4 align:4 data:float
lbl_805ACDA8 = .sdata2:0x805ACDA8; // type:object size:0x4 align:4 data:float
lbl_805ACDAC = .sdata2:0x805ACDAC; // type:object size:0x4 align:4 data:float
lbl_805ACDB0 = .sdata2:0x805ACDB0; // type:object size:0x4 align:4 data:float
lbl_805ACDB4 = .sdata2:0x805ACDB4; // type:object size:0x4 align:4 data:float
lbl_805ACDB8 = .sdata2:0x805ACDB8; // type:object size:0x4 align:4 data:float
lbl_805ACDBC = .sdata2:0x805ACDBC; // type:object size:0x4 align:4 data:float
lbl_805ACDC0 = .sdata2:0x805ACDC0; // type:object size:0x4 align:4 data:float
@763 = .sdata2:0x805ACDA0; // type:object size:0x4 align:4 data:float
@764 = .sdata2:0x805ACDA4; // type:object size:0x4 align:4 data:float
@765 = .sdata2:0x805ACDA8; // type:object size:0x4 align:4 data:float
@766 = .sdata2:0x805ACDAC; // type:object size:0x4 align:4 data:float
@767 = .sdata2:0x805ACDB0; // type:object size:0x4 align:4 data:float
@768 = .sdata2:0x805ACDB4; // type:object size:0x4 align:4 data:float
@769 = .sdata2:0x805ACDB8; // type:object size:0x4 align:4 data:float
@770 = .sdata2:0x805ACDBC; // type:object size:0x4 align:4 data:float
@781 = .sdata2:0x805ACDC0; // type:object size:0x4 align:4 data:float
lbl_805ACDC4 = .sdata2:0x805ACDC4; // type:object size:0x4 align:4 data:float
lbl_805ACDC8 = .sdata2:0x805ACDC8; // type:object size:0x4 align:4 data:float
lbl_805ACDCC = .sdata2:0x805ACDCC; // type:object size:0x4 align:4 data:float
+10 -10
View File
@@ -9162,11 +9162,11 @@ fn_801DB618 = .text:0x801DB694; // type:function size:0x21C scope:global
StartAttack__8CThardusFR13CStateManagerf = .text:0x801DB8B0; // type:function size:0x8 scope:global
Suck__8CThardusFR13CStateManager9EStateMsgf = .text:0x801DB8B8; // type:function size:0x68 scope:global
Explode__8CThardusFR13CStateManager9EStateMsgf = .text:0x801DB920; // type:function size:0x17C scope:global
fn_801DBA20 = .text:0x801DBA9C; // type:function size:0x1BC scope:global
ShakeScreen__8CThardusFR13CStateManagerRC9CVector3ffff = .text:0x801DBA9C; // type:function size:0x1BC scope:global
fn_801DBBDC = .text:0x801DBC58; // type:function size:0x64 scope:global
fn_801DBC40 = .text:0x801DBCBC; // type:function size:0x1C scope:global
fn_801DBC5C = .text:0x801DBCD8; // type:function size:0x3C scope:global
fn_801DBC98 = .text:0x801DBD14; // type:function size:0x38 scope:global
StartTimedThermalFlash__8CThardusFR13CStateManagerfR6CActor = .text:0x801DBD14; // type:function size:0x38 scope:global
PathFind__8CThardusFR13CStateManager9EStateMsgf = .text:0x801DBD4C; // type:function size:0x25C scope:global
PathFound__8CThardusFR13CStateManagerf = .text:0x801DBFA8; // type:function size:0x8 scope:global
fn_801DBF34 = .text:0x801DBFB0; // type:function size:0x394 scope:global
@@ -9231,7 +9231,7 @@ Accept__8CThardusFR8IVisitor = .text:0x801E2268; // type:function size:0x38 scop
__ct__8CThardusF9TUniqueIdRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>RC11CEntityInfoRC12CTransform4fRC10CModelDataRC16CActorParametersRC14CPatternedInfoRCQ24rstl47vector<10CModelData,Q24rstl17rmemory_allocator>RCQ24rstl47vector<10CModelData,Q24rstl17rmemory_allocator>UiUiUifffffff = .text:0x801E22A0; // type:function size:0x910 scope:global
fn_801E2B34 = .text:0x801E2BB0; // type:function size:0x29C scope:global
fn_801E2DD0 = .text:0x801E2E4C; // type:function size:0x3C scope:global
fn_801E2E0C = .text:0x801E2E88; // type:function size:0xB0 scope:global
__ct__Q24rstl47vector<10CModelData,Q24rstl17rmemory_allocator>FRCQ24rstl47vector<10CModelData,Q24rstl17rmemory_allocator> = .text:0x801E2E88; // type:function size:0xB0 scope:global
fn_801E2EBC = .text:0x801E2F38; // type:function size:0x74 scope:global
fn_801E2F30 = .text:0x801E2FAC; // type:function size:0x28 scope:global
CanRenderUnsorted__16CDestroyableRockCFRC13CStateManager = .text:0x801E2FD4; // type:function size:0x8 scope:global
@@ -9617,19 +9617,19 @@ fn_802034E0 = .text:0x8020355C; // type:function size:0x110 scope:global
fn_802035F0 = .text:0x8020366C; // type:function size:0x64 scope:global
__insertion_sort<Q24rstl162pointer_iterator<Q212CMapUniverse18CMapObjectSortInfo,Q24rstl71vector<Q212CMapUniverse18CMapObjectSortInfo,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>,29CMapObjectSortInfoGreaterThan>__4rstlFQ24rstl162pointer_iterator<Q212CMapUniverse18CMapObjectSortInfo,Q24rstl71vector<Q212CMapUniverse18CMapObjectSortInfo,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>Q24rstl162pointer_iterator<Q212CMapUniverse18CMapObjectSortInfo,Q24rstl71vector<Q212CMapUniverse18CMapObject = .text:0x802036D0; // type:function size:0xAC scope:global
__dt__22CThardusRockProjectileFv = .text:0x8020377C; // type:function size:0x124 scope:global
fn_80203824 = .text:0x802038A0; // type:function size:0x270 scope:global
fn_80203A94 = .text:0x80203B10; // type:function size:0x2C4 scope:global
fn_80203D58 = .text:0x80203DD4; // type:function size:0x74 scope:global
AddParticleEffect__22CThardusRockProjectileFR13CStateManagerUiRC9CVector3fRC9CVector3fi = .text:0x802038A0; // type:function size:0x270 scope:global
AddDeathEffects__22CThardusRockProjectileFR13CStateManagerRC9CVector3f = .text:0x80203B10; // type:function size:0x2C4 scope:global
AddGravity__22CThardusRockProjectileFR13CStateManager = .text:0x80203DD4; // type:function size:0x74 scope:global
Render__22CThardusRockProjectileCFRC13CStateManager = .text:0x80203E48; // type:function size:0x20 scope:global
fn_80203DEC = .text:0x80203E68; // type:function size:0x128 scope:global
ModifyChildrenMaterial__22CThardusRockProjectileFR13CStateManagerQ222CThardusRockProjectile15EModifyMaterial14EMaterialTypes = .text:0x80203E68; // type:function size:0x128 scope:global
SetChildrenActive__22CThardusRockProjectileFR13CStateManagerb = .text:0x80203F90; // type:function size:0xD8 scope:global
UpdateDestroyableRockCollisionActors__22CThardusRockProjectileFR13CStateManager = .text:0x80204068; // type:function size:0x254 scope:global
UpdateDestroyableRockPositions__22CThardusRockProjectileFR13CStateManager = .text:0x802042BC; // type:function size:0x14C scope:global
fn_8020438C = .text:0x80204408; // type:function size:0x16C scope:global
AddSphereCollisionList__22CThardusRockProjectileFPCQ224CPatternedCollisionUtils16SSphereJointInfoiRQ24rstl63vector<26CJointCollisionDescription,Q24rstl17rmemory_allocator> = .text:0x80204408; // type:function size:0x16C scope:global
SetMaterialProperties__22CThardusRockProjectileFRQ24rstl36single_ptr<22CCollisionActorManager>R13CStateManager = .text:0x80204574; // type:function size:0xF8 scope:global
InitializeCollisionManager__22CThardusRockProjectileFR13CStateManager = .text:0x8020466C; // type:function size:0x1CC scope:global
Delay__22CThardusRockProjectileFR13CStateManagerf = .text:0x80204838; // type:function size:0x18 scope:global
fn_802047D4 = .text:0x80204850; // type:function size:0x14 scope:global
AnimOver__22CThardusRockProjectileFR13CStateManagerf = .text:0x80204850; // type:function size:0x14 scope:global
HitSomething__22CThardusRockProjectileFR13CStateManagerf = .text:0x80204864; // type:function size:0x8 scope:global
ShouldAttack__22CThardusRockProjectileFR13CStateManagerf = .text:0x8020486C; // type:function size:0x34 scope:global
ShouldMove__22CThardusRockProjectileFR13CStateManagerf = .text:0x802048A0; // type:function size:0x1C scope:global
@@ -9641,7 +9641,7 @@ GetUp__22CThardusRockProjectileFR13CStateManager9EStateMsgf = .text:0x80204DA8;
Think__22CThardusRockProjectileFfR13CStateManager = .text:0x8020511C; // type:function size:0x1C0 scope:global
AcceptScriptMsg__22CThardusRockProjectileF20EScriptObjectMessage9TUniqueIdR13CStateManager = .text:0x802052DC; // type:function size:0x8C0 scope:global
Accept__22CThardusRockProjectileFR8IVisitor = .text:0x80205B9C; // type:function size:0x38 scope:global
__ct__22CThardusRockProjectileF9TUniqueIdRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>RC11CEntityInfoRC12CTransform4fRC10CModelDataRC16CActorParametersRC14CPatternedInfoRCQ24rstl47vector<10CModelData,Q24rstl17rmemory_allocator>Ui = .text:0x80205BD4; // type:function size:0x1DC scope:global
__ct__22CThardusRockProjectileF9TUniqueIdRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>RC11CEntityInfoRC12CTransform4fRC10CModelDataRC16CActorParametersRC14CPatternedInfoRCQ24rstl47vector<10CStaticRes,Q24rstl17rmemory_allocator>Uif = .text:0x80205BD4; // type:function size:0x1DC scope:global
IsRightLogDynamic__16CInventoryScreenCFv = .text:0x80205DB0; // type:function size:0x8 scope:global
IsRightInventoryItemEquipped__16CInventoryScreenCFi = .text:0x80205DB8; // type:function size:0x254 scope:global
HasRightInventoryItem__16CInventoryScreenCFi = .text:0x8020600C; // type:function size:0x214 scope:global
+2 -2
View File
@@ -102,9 +102,9 @@ public:
}
explicit CMaterialList(u64 value) : value(value) {}
void Add(const EMaterialTypes material) { value |= u64(1) << material; }
void Add(const EMaterialTypes material) { value |= 1ull << material; }
void Add(const CMaterialList& material) { value |= material.value; }
void Remove(EMaterialTypes material) { value &= ~(u64(1) << material); }
void Remove(EMaterialTypes material) { value &= ~(1ull << material); }
void Remove(const CMaterialList& material) { value &= ~material.value; }
const CMaterialList Union(const CMaterialList& other) const {
return CMaterialList(value | other.value);
+4 -3
View File
@@ -89,9 +89,10 @@ public:
CAdvancementDeltas UpdateAnimation(float dt, CStateManager& mgr, bool advTree);
void ProcessSoundEvent(int sfxId, float weight, int flags, float fallOff, float maxDist,
uchar minVol, uchar maxVol, const CVector3f& toListener,
const CVector3f& position, int aid, CStateManager& mgr, bool translateId);
void ProcessSoundEvent(const int sfxId, const float weight, const int flags, const float fallOff,
const float maxDist, const uchar minVol, const uchar maxVol,
const CVector3f& toListener, const CVector3f& position, const int aid,
CStateManager& mgr, const bool translateId);
void UpdateSfxEmitters();
void RemoveEmitter();
@@ -32,9 +32,9 @@ public:
uint GetNumCollisionActors() const { return x0_jointDescriptions.size(); }
rstl::optional_object< CVector3f > GetDeviation(const CStateManager& mgr, CSegId seg);
const CJointCollisionDescription& GetCollisionDescFromIndex(uint i) const {
const CJointCollisionDescription& GetCollisionDescFromIndex(uint i) const; /*{
return x0_jointDescriptions[i];
}
}*/
static CTransform4f GetWRLocatorTransform(const CAnimData& animData, CSegId id,
const CTransform4f& worldXf,
+1 -1
View File
@@ -70,7 +70,7 @@ public:
CModelData();
CModelData(const CAnimRes&);
CModelData(const CStaticRes&);
CModelData(const CModelData& other);
//CModelData(const CModelData& other);
~CModelData();
CAdvancementDeltas AdvanceAnimation(float dt, CStateManager& mgr, TAreaId aid, bool advTree);
+4 -3
View File
@@ -228,8 +228,9 @@ public:
void ApplyDamageToWorld(TUniqueId, const CActor&, const CVector3f&, const CDamageInfo& info,
const CMaterialFilter&);
bool ApplyDamage(TUniqueId damagerId, TUniqueId damageeId, const TUniqueId radiusSender,
const CDamageInfo& info, const CMaterialFilter& filter,
bool ApplyDamage(const TUniqueId damagerId, const TUniqueId damageeId,
const TUniqueId radiusSender, const CDamageInfo& info,
const CMaterialFilter& filter,
const CVector3f& knockbackVec = CVector3f::Zero());
void InformListeners(const CVector3f&, EListenNoiseType);
@@ -300,7 +301,7 @@ public:
void RemoveActiveFlickerBat(const TUniqueId& uid) { xf3c_activeFlickerBats.remove(uid); }
rstl::list< TUniqueId >& GetActiveFlickerBats() { return xf3c_activeFlickerBats; }
void DrawSpaceWarp(const CVector3f& point, float strength) const;
private:
@@ -0,0 +1,10 @@
#ifndef _CPATTERNEDCOLLISIONUTILS
#define _CPATTERNEDCOLLISIONUTILS
namespace CPatternedCollisionUtils {
struct SSphereJointInfo {
const char* name;
float radius;
};
}; // namespace CPatternedCollisionUtils
#endif // MP1_CPATTERNEDCOLLISIONUTILS_HPP
+123 -123
View File
@@ -42,130 +42,130 @@ public:
virtual CVector3f GetOrigin(const CStateManager& mgr, const CTeamAiRole& role,
const CVector3f& aimPos) const;
virtual void Patrol(CStateManager&, EStateMsg, float);
virtual void FollowPattern(CStateManager&, EStateMsg, float);
virtual void Dead(CStateManager&, EStateMsg, float);
virtual void PathFind(CStateManager&, EStateMsg, float);
virtual void Start(CStateManager&, EStateMsg, float);
virtual void SelectTarget(CStateManager&, EStateMsg, float);
virtual void TargetPatrol(CStateManager&, EStateMsg, float);
virtual void TargetPlayer(CStateManager&, EStateMsg, float);
virtual void TargetCover(CStateManager&, EStateMsg, float);
virtual void Halt(CStateManager&, EStateMsg, float);
virtual void Walk(CStateManager&, EStateMsg, float);
virtual void Run(CStateManager&, EStateMsg, float);
virtual void Generate(CStateManager&, EStateMsg, float);
virtual void Deactivate(CStateManager&, EStateMsg, float);
virtual void Attack(CStateManager&, EStateMsg, float);
virtual void LoopedAttack(CStateManager&, EStateMsg, float);
virtual void JumpBack(CStateManager&, EStateMsg, float);
virtual void DoubleSnap(CStateManager&, EStateMsg, float);
virtual void Shuffle(CStateManager&, EStateMsg, float);
virtual void TurnAround(CStateManager&, EStateMsg, float);
virtual void Skid(CStateManager&, EStateMsg, float);
virtual void Active(CStateManager&, EStateMsg, float);
virtual void InActive(CStateManager&, EStateMsg, float);
virtual void CoverAttack(CStateManager&, EStateMsg, float);
virtual void Crouch(CStateManager&, EStateMsg, float);
virtual void FadeIn(CStateManager&, EStateMsg, float);
virtual void FadeOut(CStateManager&, EStateMsg, float);
virtual void GetUp(CStateManager&, EStateMsg, float);
virtual void Taunt(CStateManager&, EStateMsg, float);
virtual void Suck(CStateManager&, EStateMsg, float);
virtual void Flee(CStateManager&, EStateMsg, float);
virtual void Lurk(CStateManager&, EStateMsg, float);
virtual void ProjectileAttack(CStateManager&, EStateMsg, float);
virtual void Flinch(CStateManager&, EStateMsg, float);
virtual void Hurled(CStateManager&, EStateMsg, float);
virtual void TelegraphAttack(CStateManager&, EStateMsg, float);
virtual void Jump(CStateManager&, EStateMsg, float);
virtual void Explode(CStateManager&, EStateMsg, float);
virtual void Dodge(CStateManager&, EStateMsg, float);
virtual void Retreat(CStateManager&, EStateMsg, float);
virtual void Cover(CStateManager&, EStateMsg, float);
virtual void Approach(CStateManager&, EStateMsg, float);
virtual void WallHang(CStateManager&, EStateMsg, float);
virtual void WallDetach(CStateManager&, EStateMsg, float);
virtual void Enraged(CStateManager&, EStateMsg, float);
virtual void SpecialAttack(CStateManager&, EStateMsg, float);
virtual void Growth(CStateManager&, EStateMsg, float);
virtual void Faint(CStateManager&, EStateMsg, float);
virtual void Land(CStateManager&, EStateMsg, float);
virtual void Bounce(CStateManager&, EStateMsg, float);
virtual void PathFindEx(CStateManager&, EStateMsg, float);
virtual void Dizzy(CStateManager&, EStateMsg, float);
virtual void CallForBackup(CStateManager&, EStateMsg, float);
virtual void BulbAttack(CStateManager&, EStateMsg, float);
virtual void PodAttack(CStateManager&, EStateMsg, float);
virtual void Patrol(CStateManager& mgr, EStateMsg msg, float arg);
virtual void FollowPattern(CStateManager& mgr, EStateMsg msg, float arg);
virtual void Dead(CStateManager& mgr, EStateMsg msg, float arg);
virtual void PathFind(CStateManager& mgr, EStateMsg msg, float arg);
virtual void Start(CStateManager& mgr, EStateMsg msg, float arg);
virtual void SelectTarget(CStateManager& mgr, EStateMsg msg, float arg);
virtual void TargetPatrol(CStateManager& mgr, EStateMsg msg, float arg);
virtual void TargetPlayer(CStateManager& mgr, EStateMsg msg, float arg);
virtual void TargetCover(CStateManager& mgr, EStateMsg msg, float arg);
virtual void Halt(CStateManager& mgr, EStateMsg msg, float arg);
virtual void Walk(CStateManager& mgr, EStateMsg msg, float arg);
virtual void Run(CStateManager& mgr, EStateMsg msg, float arg);
virtual void Generate(CStateManager& mgr, EStateMsg msg, float arg);
virtual void Deactivate(CStateManager& mgr, EStateMsg msg, float arg);
virtual void Attack(CStateManager& mgr, EStateMsg msg, float arg);
virtual void LoopedAttack(CStateManager& mgr, EStateMsg msg, float arg);
virtual void JumpBack(CStateManager& mgr, EStateMsg msg, float arg);
virtual void DoubleSnap(CStateManager& mgr, EStateMsg msg, float arg);
virtual void Shuffle(CStateManager& mgr, EStateMsg msg, float arg);
virtual void TurnAround(CStateManager& mgr, EStateMsg msg, float arg);
virtual void Skid(CStateManager& mgr, EStateMsg msg, float arg);
virtual void Active(CStateManager& mgr, EStateMsg msg, float arg);
virtual void InActive(CStateManager& mgr, EStateMsg msg, float arg);
virtual void CoverAttack(CStateManager& mgr, EStateMsg msg, float arg);
virtual void Crouch(CStateManager& mgr, EStateMsg msg, float arg);
virtual void FadeIn(CStateManager& mgr, EStateMsg msg, float arg);
virtual void FadeOut(CStateManager& mgr, EStateMsg msg, float arg);
virtual void GetUp(CStateManager& mgr, EStateMsg msg, float arg);
virtual void Taunt(CStateManager& mgr, EStateMsg msg, float arg);
virtual void Suck(CStateManager& mgr, EStateMsg msg, float arg);
virtual void Flee(CStateManager& mgr, EStateMsg msg, float arg);
virtual void Lurk(CStateManager& mgr, EStateMsg msg, float arg);
virtual void ProjectileAttack(CStateManager& mgr, EStateMsg msg, float arg);
virtual void Flinch(CStateManager& mgr, EStateMsg msg, float arg);
virtual void Hurled(CStateManager& mgr, EStateMsg msg, float arg);
virtual void TelegraphAttack(CStateManager& mgr, EStateMsg msg, float arg);
virtual void Jump(CStateManager& mgr, EStateMsg msg, float arg);
virtual void Explode(CStateManager& mgr, EStateMsg msg, float arg);
virtual void Dodge(CStateManager& mgr, EStateMsg msg, float arg);
virtual void Retreat(CStateManager& mgr, EStateMsg msg, float arg);
virtual void Cover(CStateManager& mgr, EStateMsg msg, float arg);
virtual void Approach(CStateManager& mgr, EStateMsg msg, float arg);
virtual void WallHang(CStateManager& mgr, EStateMsg msg, float arg);
virtual void WallDetach(CStateManager& mgr, EStateMsg msg, float arg);
virtual void Enraged(CStateManager& mgr, EStateMsg msg, float arg);
virtual void SpecialAttack(CStateManager& mgr, EStateMsg msg, float arg);
virtual void Growth(CStateManager& mgr, EStateMsg msg, float arg);
virtual void Faint(CStateManager& mgr, EStateMsg msg, float arg);
virtual void Land(CStateManager& mgr, EStateMsg msg, float arg);
virtual void Bounce(CStateManager& mgr, EStateMsg msg, float arg);
virtual void PathFindEx(CStateManager& mgr, EStateMsg msg, float arg);
virtual void Dizzy(CStateManager& mgr, EStateMsg msg, float arg);
virtual void CallForBackup(CStateManager& mgr, EStateMsg msg, float arg);
virtual void BulbAttack(CStateManager& mgr, EStateMsg msg, float arg);
virtual void PodAttack(CStateManager& mgr, EStateMsg msg, float arg);
virtual bool InAttackPosition(CStateManager&, float);
virtual bool Leash(CStateManager&, float);
virtual bool OffLine(CStateManager&, float);
virtual bool Attacked(CStateManager&, float);
virtual bool PathShagged(CStateManager&, float);
virtual bool PathOver(CStateManager&, float);
virtual bool PathFound(CStateManager&, float);
virtual bool TooClose(CStateManager&, float);
virtual bool InRange(CStateManager&, float);
virtual bool InMaxRange(CStateManager&, float);
virtual bool InDetectionRange(CStateManager&, float);
virtual bool SpotPlayer(CStateManager&, float);
virtual bool PlayerSpot(CStateManager&, float);
virtual bool PatternOver(CStateManager&, float);
virtual bool PatternShagged(CStateManager&, float);
virtual bool HasAttackPattern(CStateManager&, float);
virtual bool HasPatrolPath(CStateManager&, float);
virtual bool HasRetreatPattern(CStateManager&, float);
virtual bool Delay(CStateManager&, float);
virtual bool RandomDelay(CStateManager&, float);
virtual bool FixedDelay(CStateManager&, float);
virtual bool Default(CStateManager&, float);
virtual bool AnimOver(CStateManager&, float);
virtual bool ShouldAttack(CStateManager&, float);
virtual bool ShouldDoubleSnap(CStateManager&, float);
virtual bool InPosition(CStateManager&, float);
virtual bool ShouldTurn(CStateManager&, float);
virtual bool HitSomething(CStateManager&, float);
virtual bool ShouldJumpBack(CStateManager&, float);
virtual bool Stuck(CStateManager&, float);
virtual bool NoPathNodes(CStateManager&, float);
virtual bool Landed(CStateManager&, float);
virtual bool HearShot(CStateManager&, float);
virtual bool HearPlayer(CStateManager&, float);
virtual bool CoverCheck(CStateManager&, float);
virtual bool CoverFind(CStateManager&, float);
virtual bool CoverBlown(CStateManager&, float);
virtual bool CoverNearlyBlown(CStateManager&, float);
virtual bool CoveringFire(CStateManager&, float);
virtual bool GotUp(CStateManager&, float);
virtual bool LineOfSight(CStateManager&, float);
virtual bool AggressionCheck(CStateManager&, float);
virtual bool AttackOver(CStateManager&, float);
virtual bool ShouldTaunt(CStateManager&, float);
virtual bool Inside(CStateManager&, float);
virtual bool ShouldFire(CStateManager&, float);
virtual bool ShouldFlinch(CStateManager&, float);
virtual bool PatrolPathOver(CStateManager&, float);
virtual bool ShouldDodge(CStateManager&, float);
virtual bool ShouldRetreat(CStateManager&, float);
virtual bool ShouldCrouch(CStateManager&, float);
virtual bool ShouldMove(CStateManager&, float);
virtual bool ShotAt(CStateManager&, float);
virtual bool HasTargetingPoint(CStateManager&, float);
virtual bool ShouldWallHang(CStateManager&, float);
virtual bool SetAIStage(CStateManager&, float);
virtual bool AIStage(CStateManager&, float);
virtual bool StartAttack(CStateManager&, float);
virtual bool BreakAttack(CStateManager&, float);
virtual bool ShouldStrafe(CStateManager&, float);
virtual bool ShouldSpecialAttack(CStateManager&, float);
virtual bool LostInterest(CStateManager&, float);
virtual bool CodeTrigger(CStateManager&, float);
virtual bool BounceFind(CStateManager&, float);
virtual bool Random(CStateManager&, float);
virtual bool FixedRandom(CStateManager&, float);
virtual bool IsDizzy(CStateManager&, float);
virtual bool ShouldCallForBackup(CStateManager&, float);
virtual bool InAttackPosition(CStateManager& mgr, float arg);
virtual bool Leash(CStateManager& mgr, float arg);
virtual bool OffLine(CStateManager& mgr, float arg);
virtual bool Attacked(CStateManager& mgr, float arg);
virtual bool PathShagged(CStateManager& mgr, float arg);
virtual bool PathOver(CStateManager& mgr, float arg);
virtual bool PathFound(CStateManager& mgr, float arg);
virtual bool TooClose(CStateManager& mgr, float arg);
virtual bool InRange(CStateManager& mgr, float arg);
virtual bool InMaxRange(CStateManager& mgr, float arg);
virtual bool InDetectionRange(CStateManager& mgr, float arg);
virtual bool SpotPlayer(CStateManager& mgr, float arg);
virtual bool PlayerSpot(CStateManager& mgr, float arg);
virtual bool PatternOver(CStateManager& mgr, float arg);
virtual bool PatternShagged(CStateManager& mgr, float arg);
virtual bool HasAttackPattern(CStateManager& mgr, float arg);
virtual bool HasPatrolPath(CStateManager& mgr, float arg);
virtual bool HasRetreatPattern(CStateManager& mgr, float arg);
virtual bool Delay(CStateManager& mgr, float arg);
virtual bool RandomDelay(CStateManager& mgr, float arg);
virtual bool FixedDelay(CStateManager& mgr, float arg);
virtual bool Default(CStateManager& mgr, float arg);
virtual bool AnimOver(CStateManager& mgr, float arg);
virtual bool ShouldAttack(CStateManager& mgr, float arg);
virtual bool ShouldDoubleSnap(CStateManager& mgr, float arg);
virtual bool InPosition(CStateManager& mgr, float arg);
virtual bool ShouldTurn(CStateManager& mgr, float arg);
virtual bool HitSomething(CStateManager& mgr, float arg);
virtual bool ShouldJumpBack(CStateManager& mgr, float arg);
virtual bool Stuck(CStateManager& mgr, float arg);
virtual bool NoPathNodes(CStateManager& mgr, float arg);
virtual bool Landed(CStateManager& mgr, float arg);
virtual bool HearShot(CStateManager& mgr, float arg);
virtual bool HearPlayer(CStateManager& mgr, float arg);
virtual bool CoverCheck(CStateManager& mgr, float arg);
virtual bool CoverFind(CStateManager& mgr, float arg);
virtual bool CoverBlown(CStateManager& mgr, float arg);
virtual bool CoverNearlyBlown(CStateManager& mgr, float arg);
virtual bool CoveringFire(CStateManager& mgr, float arg);
virtual bool GotUp(CStateManager& mgr, float arg);
virtual bool LineOfSight(CStateManager& mgr, float arg);
virtual bool AggressionCheck(CStateManager& mgr, float arg);
virtual bool AttackOver(CStateManager& mgr, float arg);
virtual bool ShouldTaunt(CStateManager& mgr, float arg);
virtual bool Inside(CStateManager& mgr, float arg);
virtual bool ShouldFire(CStateManager& mgr, float arg);
virtual bool ShouldFlinch(CStateManager& mgr, float arg);
virtual bool PatrolPathOver(CStateManager& mgr, float arg);
virtual bool ShouldDodge(CStateManager& mgr, float arg);
virtual bool ShouldRetreat(CStateManager& mgr, float arg);
virtual bool ShouldCrouch(CStateManager& mgr, float arg);
virtual bool ShouldMove(CStateManager& mgr, float arg);
virtual bool ShotAt(CStateManager& mgr, float arg);
virtual bool HasTargetingPoint(CStateManager& mgr, float arg);
virtual bool ShouldWallHang(CStateManager& mgr, float arg);
virtual bool SetAIStage(CStateManager& mgr, float arg);
virtual bool AIStage(CStateManager& mgr, float arg);
virtual bool StartAttack(CStateManager& mgr, float arg);
virtual bool BreakAttack(CStateManager& mgr, float arg);
virtual bool ShouldStrafe(CStateManager& mgr, float arg);
virtual bool ShouldSpecialAttack(CStateManager& mgr, float arg);
virtual bool LostInterest(CStateManager& mgr, float arg);
virtual bool CodeTrigger(CStateManager& mgr, float arg);
virtual bool BounceFind(CStateManager& mgr, float arg);
virtual bool Random(CStateManager& mgr, float arg);
virtual bool FixedRandom(CStateManager& mgr, float arg);
virtual bool IsDizzy(CStateManager& mgr, float arg);
virtual bool ShouldCallForBackup(CStateManager& mgr, float arg);
private:
CHealthInfo x258_healthInfo;
+41 -38
View File
@@ -183,43 +183,43 @@ public:
void KnockBack(const CVector3f&, CStateManager&, const CDamageInfo& info, EKnockBackType type,
bool inDeferred, float magnitude) override;
void TakeDamage(const CVector3f& direction, float magnitude) override;
void Patrol(CStateManager&, EStateMsg, float) override;
void FollowPattern(CStateManager&, EStateMsg, float) override;
void Dead(CStateManager&, EStateMsg, float) override;
void PathFind(CStateManager&, EStateMsg, float) override;
void Start(CStateManager&, EStateMsg, float) override;
void TargetPatrol(CStateManager&, EStateMsg, float) override;
void TargetPlayer(CStateManager&, EStateMsg, float) override;
bool Leash(CStateManager&, float) override;
bool OffLine(CStateManager&, float) override;
bool Attacked(CStateManager&, float) override;
bool PathShagged(CStateManager&, float) override;
bool PathOver(CStateManager&, float) override;
bool PathFound(CStateManager&, float) override;
bool TooClose(CStateManager&, float) override;
bool InRange(CStateManager&, float) override;
bool InMaxRange(CStateManager&, float) override;
bool InDetectionRange(CStateManager&, float) override;
bool SpotPlayer(CStateManager&, float) override;
bool PlayerSpot(CStateManager&, float) override;
bool PatternOver(CStateManager&, float) override;
bool PatternShagged(CStateManager&, float) override;
bool HasAttackPattern(CStateManager&, float) override;
bool HasPatrolPath(CStateManager&, float) override;
bool HasRetreatPattern(CStateManager&, float) override;
bool Delay(CStateManager&, float) override;
bool RandomDelay(CStateManager&, float) override;
bool FixedDelay(CStateManager&, float) override;
bool Default(CStateManager&, float) override;
bool AnimOver(CStateManager&, float) override;
bool InPosition(CStateManager&, float) override;
bool Stuck(CStateManager&, float) override;
bool NoPathNodes(CStateManager&, float) override;
bool Landed(CStateManager&, float) override;
bool PatrolPathOver(CStateManager&, float) override;
bool CodeTrigger(CStateManager&, float) override;
bool Random(CStateManager&, float) override;
bool FixedRandom(CStateManager&, float) override;
void Patrol(CStateManager& mgr, EStateMsg msg, float arg) override;
void FollowPattern(CStateManager& mgr, EStateMsg msg, float arg) override;
void Dead(CStateManager& mgr, EStateMsg msg, float arg) override;
void PathFind(CStateManager& mgr, EStateMsg msg, float arg) override;
void Start(CStateManager& mgr, EStateMsg msg, float arg) override;
void TargetPatrol(CStateManager& mgr, EStateMsg msg, float arg) override;
void TargetPlayer(CStateManager& mgr, EStateMsg msg, float arg) override;
bool Leash(CStateManager& mgr, float arg) override;
bool OffLine(CStateManager& mgr, float arg) override;
bool Attacked(CStateManager& mgr, float arg) override;
bool PathShagged(CStateManager& mgr, float arg) override;
bool PathOver(CStateManager& mgr, float arg) override;
bool PathFound(CStateManager& mgr, float arg) override;
bool TooClose(CStateManager& mgr, float arg) override;
bool InRange(CStateManager& mgr, float arg) override;
bool InMaxRange(CStateManager& mgr, float arg) override;
bool InDetectionRange(CStateManager& mgr, float arg) override;
bool SpotPlayer(CStateManager& mgr, float arg) override;
bool PlayerSpot(CStateManager& mgr, float arg) override;
bool PatternOver(CStateManager& mgr, float arg) override;
bool PatternShagged(CStateManager& mgr, float arg) override;
bool HasAttackPattern(CStateManager& mgr, float arg) override;
bool HasPatrolPath(CStateManager& mgr, float arg) override;
bool HasRetreatPattern(CStateManager& mgr, float arg) override;
bool Delay(CStateManager& mgr, float arg) override;
bool RandomDelay(CStateManager& mgr, float arg) override;
bool FixedDelay(CStateManager& mgr, float arg) override;
bool Default(CStateManager& mgr, float arg) override;
bool AnimOver(CStateManager& mgr, float arg) override;
bool InPosition(CStateManager& mgr, float arg) override;
bool Stuck(CStateManager& mgr, float arg) override;
bool NoPathNodes(CStateManager& mgr, float arg) override;
bool Landed(CStateManager& mgr, float arg) override;
bool PatrolPathOver(CStateManager& mgr, float arg) override;
bool CodeTrigger(CStateManager& mgr, float arg) override;
bool Random(CStateManager& mgr, float arg) override;
bool FixedRandom(CStateManager& mgr, float arg) override;
// CPatterned
virtual void Freeze(CStateManager& mgr, const CVector3f& pos, const CUnitVector3f& dir,
@@ -249,6 +249,8 @@ public:
TUniqueId GetDestObj() const { return x2dc_destObj; } // TODO: name?
float GetAverageAttackTime() const { return x304_averageAttackTime; }
float GetAttackTimeVariation() const { return x308_attackTimeVariation; }
const bool GetVerticalMovement() const { return x328_25_verticalMovement; }
void SetVerticalMovement(const bool v) { x328_25_verticalMovement = v; }
EAnimState GetAnimationState() const { return x32c_animState; }
void SetAnimationState(const EAnimState state) { x32c_animState = state; }
float GetStateMachineTime() const { return GetStateMachineState().GetTime(); }
@@ -279,9 +281,10 @@ public:
void TryCommand(CStateManager& mgr, int state, FTryCommandCallback cb, int arg);
void SetupPlayerCollision(const bool startsHidden);
void ApproachDest(CStateManager& mgr);
void SetDestPos(const CVector3f& pos);
protected:
EPatrolState x2d8_patrolState;
TUniqueId x2dc_destObj;
+10
View File
@@ -0,0 +1,10 @@
#ifndef _CTHARDUS
#define _CTHARDUS
class CThardus : public CPatterned {
public:
void ShakeScreen(CStateManager& mgr, const CVector3f& position, const float, const float,
const float);
void StartTimedThermalFlash(CStateManager& mgr, float, CActor& actor);
};
#endif
@@ -3,9 +3,81 @@
#include "MetroidPrime/Enemies/CPatterned.hpp"
class CThardusRockProjectile : public CPatterned {
#include "MetroidPrime/Collision/CJointCollisionDescription.hpp"
#include "MetroidPrime/Collision/CPatternedCollisionUtils.hpp"
class CCollisionActorManager;
class CThardusRockProjectile : public CPatterned {
public:
enum EModifyMaterial {
kMM_Add,
kMM_Remove,
};
CThardusRockProjectile(const TUniqueId uid, const rstl::string& name, const CEntityInfo& info,
const CTransform4f& xf, const CModelData& modelData,
const CActorParameters& aParms, const CPatternedInfo& patternedInfo,
const rstl::vector< CModelData >& mDataVec, const CAssetId stateMachine,
const float);
void Accept(IVisitor& visitor) override;
void AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CStateManager& mgr) override;
void Think(float dt, CStateManager& mgr) override;
void GetUp(CStateManager& mgr, EStateMsg msg, float arg) override;
void Patrol(CStateManager&, EStateMsg, float) override;
void LoopedAttack(CStateManager& mgr, EStateMsg msg, float arg) override;
void Dead(CStateManager& mgr, EStateMsg msg, float arg) override;
void Lurk(CStateManager& mgr, EStateMsg msg, float arg) override;
bool ShouldMove(CStateManager& mgr, float arg) override;
bool ShouldAttack(CStateManager& mgr, float arg) override;
bool HitSomething(CStateManager& mgr, float arg) override;
bool AnimOver(CStateManager& mgr, float arg) override;
bool Delay(CStateManager& mgr, float arg) override;
void Render(const CStateManager&) const override;
void AddGravity(CStateManager& mgr);
void AddDeathEffects(CStateManager& mgr, const CVector3f& position);
void AddParticleEffect(CStateManager& mgr, const CAssetId particle, const CVector3f& position,
const CVector3f& scale, const int unk);
private:
void InitializeCollisionManager(CStateManager& mgr);
void SetMaterialProperties(rstl::single_ptr< CCollisionActorManager >& colMgr,
CStateManager& mgr);
void AddSphereCollisionList(const CPatternedCollisionUtils::SSphereJointInfo*, int,
rstl::vector< CJointCollisionDescription >&);
void UpdateDestroyableRockPositions(CStateManager& mgr);
void UpdateDestroyableRockCollisionActors(CStateManager& mgr);
void SetChildrenActive(CStateManager& mgr, bool active);
void ModifyChildrenMaterial(CStateManager& mgr, EModifyMaterial modify, EMaterialTypes material);
float x568_;
int mAiState;
TUniqueId x570_;
bool x572_;
EAnimState mAnimState;
rstl::single_ptr< CCollisionActorManager > mCollisionManager;
rstl::vector< CModelData > x57c_;
rstl::vector< TUniqueId > mDestroyableRocks;
CAssetId mStateMachineId;
uint x5a0_;
bool x5a4_;
float mDelayTime;
float mAttackTime;
CVector3f x5b0_;
bool x5bc_;
float x5c0_;
uint x5c4_;
uint x5c8_;
uint x5cc_;
TUniqueId mThardusId;
uint x5d4_;
uint x5d8_;
bool x5dc_;
bool x5dd_;
static CPatternedCollisionUtils::SSphereJointInfo skJointInfoList[1];
};
#endif // _CTHARDUSROCKPROJECTILE
@@ -0,0 +1,245 @@
#include "MetroidPrime/Enemies/CThardusRockProjectile.hpp"
#include "Kyoto/Particles/CGenDescription.hpp"
#include "MetroidPrime/CCollisionActorManager.hpp"
#include "MetroidPrime/CExplosion.hpp"
#include "MetroidPrime/Enemies/CThardus.hpp"
#include "MetroidPrime/Player/CPlayer.hpp"
CPatternedCollisionUtils::SSphereJointInfo CThardusRockProjectile::skJointInfoList[] = {
{"Rock_01_Collision_LCTR", 1.5f},
};
CThardusRockProjectile::CThardusRockProjectile(const TUniqueId uid, const rstl::string& name,
const CEntityInfo& info, const CTransform4f& xf,
const CModelData& modelData,
const CActorParameters& aParms,
const CPatternedInfo& patternedInfo,
const rstl::vector< CModelData >& mDataVec,
const CAssetId stateMachine, const float f1)
: CPatterned(kC_ThardusRockProjectile, uid, name, kFT_Zero, info, xf, modelData, patternedInfo,
kMT_Flyer, kCT_One, kBT_Flyer, aParms, kKBV_Medium)
, x568_(1.f)
, x570_(kInvalidUniqueId)
, x572_(false)
, mAnimState(kAS_Invalid)
, x57c_(mDataVec)
, mStateMachineId(stateMachine)
, x5a0_(0)
, x5a4_(true)
, mDelayTime(0.f)
, mAttackTime(0.f)
, x5b0_(0.f, 1.f, 0.f)
, x5bc_(true)
, x5c0_(f1)
, x5c4_(0)
, x5c8_(0)
, x5cc_(0)
, mThardusId(kInvalidUniqueId)
, x5d4_(0)
, x5d8_(0)
, x5dc_(false)
, x5dd_(false) {
CMaterialList exclude = GetMaterialFilter().GetExcludeList();
exclude.Add(CMaterialList(kMT_Player, kMT_Character, kMT_NoPlatformCollision));
SetMaterialFilter(
CMaterialFilter::MakeIncludeExclude(GetMaterialFilter().GetIncludeList(), exclude));
x50c_baseDamageMag = 1.f;
}
void CThardusRockProjectile::Accept(IVisitor& visitor) { visitor.Visit(*this); }
void CThardusRockProjectile::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid,
CStateManager& mgr) {}
void CThardusRockProjectile::Think(float dt, CStateManager& mgr) {}
void CThardusRockProjectile::GetUp(CStateManager& mgr, const EStateMsg msg, const float arg) {
switch (msg) {
case kStateMsg_Activate:
break;
case kStateMsg_Update:
break;
case kStateMsg_Deactivate:
break;
}
}
void CThardusRockProjectile::Patrol(CStateManager& mgr, const EStateMsg msg, const float arg) {
switch (msg) {
case kStateMsg_Activate:
break;
case kStateMsg_Update:
break;
case kStateMsg_Deactivate:
break;
}
}
void CThardusRockProjectile::LoopedAttack(CStateManager& mgr, EStateMsg msg, float arg) {
switch (msg) {
case kStateMsg_Activate:
break;
case kStateMsg_Update:
break;
case kStateMsg_Deactivate:
break;
}
}
void CThardusRockProjectile::Dead(CStateManager& mgr, EStateMsg msg, float arg) {
switch (msg) {
case kStateMsg_Activate:
break;
case kStateMsg_Update:
break;
case kStateMsg_Deactivate:
break;
}
}
void CThardusRockProjectile::Lurk(CStateManager& mgr, EStateMsg msg, float arg) {
switch (msg) {
case kStateMsg_Activate:
break;
case kStateMsg_Update:
break;
case kStateMsg_Deactivate:
break;
}
}
bool CThardusRockProjectile::ShouldMove(CStateManager& mgr, float arg) { return mAiState >= 1; }
bool CThardusRockProjectile::ShouldAttack(CStateManager& mgr, float arg) {
if (GetStateMachineTime() > mAttackTime && mAiState != 3) {
mAiState = 2;
return true;
}
return false;
}
bool CThardusRockProjectile::HitSomething(CStateManager& mgr, float arg) { return x572_; }
bool CThardusRockProjectile::AnimOver(CStateManager& mgr, float arg) { return mAnimState == 3; }
bool CThardusRockProjectile::Delay(CStateManager& mgr, float arg) {
return GetStateMachineTime() > mDelayTime;
}
void CThardusRockProjectile::InitializeCollisionManager(CStateManager& mgr) {}
void CThardusRockProjectile::SetMaterialProperties(
rstl::single_ptr< CCollisionActorManager >& colMgr, CStateManager& mgr) {}
void CThardusRockProjectile::AddSphereCollisionList(
const CPatternedCollisionUtils::SSphereJointInfo*, int,
rstl::vector< CJointCollisionDescription >&) {}
void CThardusRockProjectile::UpdateDestroyableRockPositions(CStateManager& mgr) {}
void CThardusRockProjectile::UpdateDestroyableRockCollisionActors(CStateManager& mgr) {}
void CThardusRockProjectile::SetChildrenActive(CStateManager& mgr, bool active) {
const int rockCount = mDestroyableRocks.size();
for (uint i = 0; i < rockCount; i++) {
const TUniqueId rockId = mDestroyableRocks[i];
const TUniqueId colId = mCollisionManager->GetCollisionDescFromIndex(i).GetCollisionActorId();
CEntity* rockAct = mgr.ObjectById(rockId);
if (!rockAct) {
continue;
}
CEntity* colAct = mgr.ObjectById(colId);
if (!colAct) {
continue;
}
rockAct->SetActive(active);
colAct->SetActive(active);
}
}
void CThardusRockProjectile::ModifyChildrenMaterial(CStateManager& mgr, EModifyMaterial modify,
EMaterialTypes material) {
const int rockCount = mDestroyableRocks.size();
for (uint i = 0; i < rockCount; i++) {
TUniqueId rockId = mDestroyableRocks[i];
TUniqueId colId = mCollisionManager->GetCollisionDescFromIndex(i).GetCollisionActorId();
CActor* rockAct = TCastToPtr< CActor >(mgr.ObjectById(rockId));
if (!rockAct) {
continue;
}
CActor* colAct = TCastToPtr< CActor >(mgr.ObjectById(colId));
if (!colAct) {
continue;
}
switch (modify) {
case kMM_Add:
rockAct->AddMaterial(material, mgr);
colAct->AddMaterial(material, mgr);
break;
case kMM_Remove:
rockAct->RemoveMaterial(material, mgr);
colAct->RemoveMaterial(material, mgr);
break;
}
}
}
void CThardusRockProjectile::Render(const CStateManager& mgr) const { CPatterned::Render(mgr); }
void CThardusRockProjectile::AddGravity(CStateManager& mgr) {
SetVerticalMovement(false);
Stop();
SetMomentumWR(CVector3f(0.f, 0.f, 2.f * -GetWeight()));
mAiState = 3;
}
void CThardusRockProjectile::AddDeathEffects(CStateManager& mgr, const CVector3f& position) {
if (mThardusId == kInvalidUniqueId) {
return;
}
CThardus* thardus = static_cast< CThardus* >(mgr.ObjectById(mThardusId));
if (!thardus) {
return;
}
AddParticleEffect(mgr, x5c8_, position, CVector3f(GetModelData()->GetScale()), 0);
thardus->ShakeScreen(mgr, position, 0.75f, 125.f, 1.f);
const CPlayer* player = mgr.GetPlayer();
const CVector3f diff = player->GetTranslation() - GetTranslation();
const float widthTimes10 = GetModelData()->GetScale().GetX() * 10.f;
if (diff.MagSquared() < widthTimes10 * widthTimes10) {
mgr.ApplyDamage(GetUniqueId(), player->GetUniqueId(), GetUniqueId(),
CDamageInfo(CWeaponMode(kWT_AI), GetContactDamage().GetDamage() * 0.5f,
widthTimes10, GetContactDamage().GetKnockBackPower() * 0.5f),
CMaterialFilter::GetPassEverything(), diff.AsNormalized());
}
ProcessSoundEvent(x5d8_, 1.f, 0, 0.1f, 1000.f, 20, 127, CVector3f::Zero(), GetTranslation(),
mgr.GetNextAreaId().Value(), mgr, true);
if (x5dd_) {
thardus->StartTimedThermalFlash(mgr, 2.f, *this);
SendScriptMsgs(kSS_Zero, mgr, kSM_None);
}
}
void CThardusRockProjectile::AddParticleEffect(CStateManager& mgr, CAssetId particle,
const CVector3f& position, const CVector3f& scale,
int unk) {
TUniqueId uid = mgr.AllocateUniqueId();
char buf[1024];
sprintf(buf, "ROCK_PROJECTILE_EFFECT-%u-%i", particle, uid.Value());
CEntity* ent = rs_new CExplosion(
TLockedToken< CGenDescription >(gpSimplePool->GetObj(SObjectTag('PART', particle))), uid,
true, CEntityInfo(mgr.GetNextAreaId(), rstl::vector< SConnection >()), rstl::string(buf),
CTransform4f(CMatrix3f::Identity(), position), unk, scale, CColor::White());
mgr.AddObject(*ent);
}