1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
#pragma once
#include <basis/seadTypes.h>
#include <container/seadBuffer.h>
#include <heap/seadExpHeap.h>
#include <math/seadMatrix.h>
#include <prim/seadRuntimeTypeInfo.h>
#include "Game/Actor/Damage/actDamageInfoMgr.h"
#include "Game/Actor/Damage/actStruct20.h"
#include "KingSystem/ActorSystem/actBaseProcLink.h"
#include "KingSystem/ActorSystem/actIDamageManager.h"
namespace ksys {
class Message;
} // namespace ksys
namespace ksys::act {
class Actor;
class ActorParam;
} // namespace ksys::act
namespace uking::act {
// FIXME: Unknown base 2. Helper functions maybe? Might also contain some of the fields from
// DamageManagerBase.
class DamageManagerBase_UnknownBase2 {
public:
virtual ~DamageManagerBase_UnknownBase2() = default;
};
class DamageManagerBase : public ksys::act::IDamageManager, public DamageManagerBase_UnknownBase2 {
public:
explicit DamageManagerBase(ksys::act::Actor* actor);
~DamageManagerBase() override = default;
SEAD_RTTI_OVERRIDE(DamageManagerBase, ksys::act::IDamageManager)
u32 getDamage() override;
s32 getField48() override { return mField_48; }
s32 getMinDmg() override { return mMinDmg; }
s32 getField50() override { return mField_50; }
s32 getField54() override { return mField_54; }
bool checkDamageFlags() override { return false; }
s32 getFlags2() override { return mFlags2; }
virtual f32 getStasisBlowPowerRatio() { return 0.0f; }
virtual bool getStasisBlowVelocity(sead::Vector3f* velocity) { return false; }
virtual bool applyDamage(s32& life);
virtual bool handleMessage(const ksys::Message&) { return false; }
virtual void accumulateStasisBlowVelocity() {}
virtual s32 getNumCallbacks();
virtual bool initCallbacks(sead::Heap* heap);
// m20 (FIXME: incomplete)
virtual void resetDamage();
virtual void preDelete2() {}
virtual void calcDamage() {}
virtual bool allocStruct20(sead::Heap* heap);
virtual void preDelete1();
virtual s64 m25() { return 0; }
virtual s64 m26() { return 0; }
virtual s32 getPosition() { return 0; }
virtual bool getDamageDir(sead::Vector3f* dir) { return false; }
//(FIXME: incomplete)
virtual s64 m29(s64 a2);
// qword pointer? (FIXME: incomplete)
virtual s64 m30(u64 a2);
virtual bool getHitDirection(sead::Vector3f* dir) { return false; }
virtual s32 getDamageImpulse() { return 0; }
virtual s64 getAttackOtherMaterialMask() { return 0; }
virtual s64 tgSensorMaterialOnHitMaybe() { return 0; }
virtual bool getAttackSourceMtx(sead::Matrix34f* mtx) { return false; }
// FIXME: incomplete. Return dummy Base Proc Link
virtual ksys::act::BaseProcLink* getAttacker();
// FIXME: incomplete. Same as getAttacker, but return different Actor ProcLink I assume.
virtual s64 m37();
virtual s32 isDamageSourceObjectMaybe() { return 0; }
// FIXME: Incomplete. Call isSlowTimeMaybe
virtual bool isSlowTime();
virtual s32 getAttackDirType() { return 0; }
virtual s32 getAttackInfoFlagFC() { return 0; }
virtual s32 isDamageItemFlagCheckDisabled() { return 0; }
virtual void applyAttackInfoStateChangeDamage() {}
virtual bool canTakeDamage();
virtual void applyRequestedDamage() {}
virtual void handleDamageForPlayer(u32* a2, u32* a3, u32* a4, u32* a5, u32* a6);
virtual bool addDamage(s64 a2, s32 damage, s32 df48, s32 minDmg, s32 f50, s32 f54, s32 f40);
virtual void onApplyDamage() {}
virtual s32 getDamageFromTypeIndex(s32 damageTypeMaybe);
void clearCallbacks();
void resetStuff();
void callDamageCallbacks(u32 a2, u32* a3, s32* a4, u32* a5, u32* a6, u32* a7, u64 a8);
s64 calcMaybe();
inline void tryBuffDamage(s32& damage);
inline void tryApplyDamageRecovery(s32& damage);
private:
s32 mField_40 = 0;
s32 mDamage = 0;
s32 mField_48 = 0;
s32 mMinDmg = 0;
s32 mField_50 = -1;
s32 mField_54 = -1;
s32 mFlags2 = 0;
s32 mDamageType = 0;
s32 mDamageReactionTableStuff = -1;
u8 mField_64 = 0;
bool mIsOwnedByPlayer;
};
KSYS_CHECK_SIZE_NX150(DamageManagerBase, 0x68);
} // namespace uking::act
|