Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 16 additions & 16 deletions data/uking_functions.csv
Original file line number Diff line number Diff line change
Expand Up @@ -19436,21 +19436,21 @@ Address,Quality,Size,Name
0x00000071002ce67c,U,000160,
0x00000071002ce71c,U,000152,
0x00000071002ce7b4,U,000160,
0x00000071002ce854,U,000072,DamageMgrShield::ctor
0x00000071002ce89c,U,000060,DamageMgrShield::setDamage
0x00000071002ce8d8,U,000540,DamageMgrShield::m22
0x00000071002ceaf4,U,000632,DamageMgrShield::shieldSurfDamageLogic
0x00000071002ced6c,U,000404,DamageMgrShield::shieldDamageLogic
0x00000071002cef00,U,000008,DamageMgrShield::rtti1
0x00000071002cef08,U,000092,DamageMgrShield::rtti2
0x00000071002cef64,U,000004,DamageMgrShield::dtor
0x00000071002cef68,U,000004,j__ZdlPv_79
0x00000071002cef6c,U,000008,DamageMgrShield::getNumCallbacks
0x00000071002cef74,U,000048,DamageMgrShield::freeCallbacks
0x00000071002cefa4,U,000008,DamageMgrShield::getDamage
0x00000071002cefac,U,000008,DamageMgrShield::m53
0x00000071002cefb4,U,000004,nullsub_937
0x00000071002cefb8,U,000008,
0x00000071002ce854,O,000072,_ZN5uking3dmg15DamageMgrShieldC1EPN4ksys3act5ActorE
0x00000071002ce89c,O,000060,_ZN5uking3dmg15DamageMgrShield10setDamage2Ef
0x00000071002ce8d8,O,000540,_ZN5uking3dmg15DamageMgrShield3m22Ev
0x00000071002ceaf4,U,000632,_ZN5uking3dmg15DamageMgrShield21shieldSurfDamageLogicEPiS2_S2_S2_S2_S2_
0x00000071002ced6c,U,000404,_ZN5uking3dmg15DamageMgrShield17shieldDamageLogicEPiS2_S2_S2_S2_S2_
0x00000071002cef00,U,000008,
0x00000071002cef08,O,000092,_ZNK5uking3dmg15DamageMgrShield18getRuntimeTypeInfoEv
0x00000071002cef64,O,000004,_ZN5uking3dmg15DamageMgrShieldD2Ev
0x00000071002cef68,O,000004,_ZN5uking3dmg15DamageMgrShieldD0Ev
0x00000071002cef6c,O,000008,_ZN5uking3dmg15DamageMgrShield15getNumCallbacksEv
0x00000071002cef74,O,000048,_ZN5uking3dmg15DamageMgrShield10preDelete1Ev
0x00000071002cefa4,O,000008,_ZN5uking3dmg15DamageMgrShield10getDamage2Ev
0x00000071002cefac,O,000008,_ZNK5uking3dmg15DamageMgrShield13isDamageType4Ev
0x00000071002cefb4,O,000004,_ZThn56_N5uking3dmg15DamageMgrShieldD1Ev
0x00000071002cefb8,O,000008,_ZThn56_N5uking3dmg15DamageMgrShieldD0Ev
0x00000071002cefc0,U,000372,
0x00000071002cf134,U,000360,SiteBoss::construct
0x00000071002cf29c,U,000016,MesTransceiverId::dtor
Expand Down Expand Up @@ -45365,7 +45365,7 @@ Address,Quality,Size,Name
0x00000071006dfdd8,U,000096,DamageMgrBase::m20
0x00000071006dfe38,U,000020,DamageMgrBase::resetStuff
0x00000071006dfe4c,O,000500,_ZN5uking3dmg17DamageManagerBase11applyDamageERi
0x00000071006e0040,O,000204,_ZN5uking3dmg17DamageManagerBase21handleDamageForPlayerEPjS2_S2_S2_S2_
0x00000071006e0040,O,000204,_ZN5uking3dmg17DamageManagerBase21handleDamageForPlayerEPjS2_S2_PiS3_
0x00000071006e010c,O,000072,_ZN5uking3dmg17DamageManagerBase9addDamageEliiiiii
0x00000071006e0154,U,000004,_ZN5uking3dmg17DamageManagerBase10isSlowTimeEv
0x00000071006e0158,U,000324,DamageMgrBase::m29
Expand Down
3 changes: 3 additions & 0 deletions src/Game/Damage/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@ target_sources(uking PRIVATE
dmgDamageCallback.h
dmgDamageManagerBase.h
dmgDamageManagerBase.cpp
dmgDamageMgrShield.cpp
dmgDamageMgrShield.h
dmgDamageMgrWeapon.h
dmgInfoManager.cpp
dmgInfoManager.h
dmgStruct20.h
Expand Down
2 changes: 1 addition & 1 deletion src/Game/Damage/dmgDamageManagerBase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ bool DamageManagerBase::canTakeDamage() {
return item.mCanTakeDamageFromType[damageTypeMaybe] & 0x1;
}

void DamageManagerBase::handleDamageForPlayer(u32* a2, u32* a3, u32* a4, u32* a5, u32* a6) {
void DamageManagerBase::handleDamageForPlayer(u32* a2, u32* a3, u32* a4, s32* a5, s32* a6) {
Struct20* currentStruct = sead::DynamicCast<Struct20>(mStruct20_b);
if (!currentStruct) {
return;
Expand Down
14 changes: 9 additions & 5 deletions src/Game/Damage/dmgDamageManagerBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ class DamageManagerBase : public DamageManagerBase_UnknownBase1,
virtual void m43() {}
virtual bool canTakeDamage();
virtual void m45() {}
virtual void handleDamageForPlayer(u32* a2, u32* a3, u32* a4, u32* a5, u32* a6);
virtual void handleDamageForPlayer(u32* a2, u32* a3, u32* a4, s32* a5, s32* a6);
virtual bool addDamage(s64 a2, s32 damage, s32 df48, s32 minDmg, s32 f50, s32 f54, s32 f40);
virtual void onApplyDamage() {}

Expand All @@ -119,17 +119,21 @@ class DamageManagerBase : public DamageManagerBase_UnknownBase1,

void clearCallbacks();
void resetStuff();
void callDamageCallbacks(u32 a2, u32* a3, s32* a4, u32* a5, u32* a6, u32* a7, u64 a8);
void callDamageCallbacks(u32 a2, u32* a3, s32* a4, u32* a5, s32* a6, s32* a7, u64 a8);
s64 calcMaybe();

inline void tryBuffDamage(s32& damage);
inline void tryApplyDamageRecovery(s32& damage);

private:
void setDamageType(s32 type) { mDamageType = type; }

bool isOwnedByPlayer() const { return mIsOwnedByPlayer; }

public:
s32 mField_40 = 0;
s32 mDamage = 0;
u32 mDamage = 0;
s32 mField_48 = 0;
s32 mMinDmg = 0;
u32 mMinDmg = 0;
s32 mField_50 = -1;
s32 mField_54 = -1;
s32 mFlags2 = 0;
Expand Down
93 changes: 93 additions & 0 deletions src/Game/Damage/dmgDamageMgrShield.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
#include "Game/Damage/dmgDamageMgrShield.h"

#include "Game/Actor/actWeapon.h"
#include "KingSystem/ActorSystem/actActor.h"
#include "KingSystem/ActorSystem/actActorConstDataAccess.h"

namespace uking::dmg {

DamageMgrShield::DamageMgrShield(ksys::act::Actor* actor) : DamageMgrWeapon(actor) {
mDamage2 = act::WeaponModifierInfo::getLifeMultiplier();
mIsDamageType4 = false;
}

DamageMgrShield::~DamageMgrShield() = default;

void DamageMgrShield::setDamage2(f32 damage) {
mDamage2 = act::WeaponModifierInfo::getLifeMultiplier() * damage;
}

void DamageMgrShield::m22() {
u32 aDamage = 0;
u32 aDf48 = 0;
s32 a5 = -1;
s32 a6 = -1;
u32 aMinDmg = 0;

if (isOwnedByPlayer()) {
handleDamageForPlayer(&aDamage, &aDf48, &aMinDmg, &a5, &a6);
}

mIsDamageType4 = false;
resetStuff();

s32 bDamage = 0;
s32 bDf48 = 0;
s32 bMinDmg = 0;
s32 b6 = -1;
s32 b5 = -1;
s32 b7 = 0;

if (mField_34)
return;

if (isOwnedByPlayer() && shieldSurfDamageLogic(&bDamage, &bDf48, &bMinDmg, &b5, &b6, &b7) &&
addDamage(2, bDamage, bDf48, bMinDmg, b5, b6, b7)) {
setDamageType(2);
}

if (shieldDamageLogic(&bDamage, &bDf48, &bMinDmg, &b5, &b6, &b7) &&
addDamage(3, bDamage, bDf48, bMinDmg, b5, b6, b7)) {
setDamageType(3);
}

ksys::act::Chemical* chemical = mActor->getChemicalStuff();
if (chemical && chemical->value == 3) {
s32* life = mActor->getLife();
bDamage = life ? *life : 1;
bDf48 = 0;
bMinDmg = 0;
b5 = 9;
b6 = 30;
b7 = 1;
if (addDamage(1, bDamage, bDf48, bMinDmg, b5, b6, b7))
setDamageType(1);
}

if (addDamage(4, aDamage, aDf48, aMinDmg, a5, a6, 1)) {
mIsDamageType4 = true;
setDamageType(4);
}

callDamageCallbacks(0, &mDamage, &mField_48, &mMinDmg, &mField_50, &mField_54, 0);
}

s32 DamageMgrShield::getNumCallbacks() {
return 1;
}

void DamageMgrShield::preDelete1() {
m20();
resetStuff();
mCallback = nullptr;
mIsDamageType4 = false;
}

s32 DamageMgrShield::getDamage2() {
return mDamage2;
}

bool DamageMgrShield::isDamageType4() const {
return mIsDamageType4;
}
} // namespace uking::dmg
42 changes: 42 additions & 0 deletions src/Game/Damage/dmgDamageMgrShield.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#pragma once

#include <basis/seadTypes.h>
#include "Game/Damage/dmgDamageMgrWeapon.h"

namespace ksys::act {
// TODO: Move Chemical to correct file
class Chemical {
public:
char filler[0xc0];
u8 value;
};
} // namespace ksys::act

namespace uking::dmg {

class DamageMgrShield : public DamageMgrWeapon {
SEAD_RTTI_OVERRIDE(DamageMgrShield, DamageMgrWeapon)

public:
DamageMgrShield(ksys::act::Actor* actor);
~DamageMgrShield() override;

void setDamage2(f32 damage) override;
void m22() override;
bool shieldSurfDamageLogic(s32* damage, s32* df48, s32* minDmg, s32* f50, s32* f54, s32* f40);
bool shieldDamageLogic(s32* damage, s32* df48, s32* minDmg, s32* f50, s32* f54, s32* f40);
s32 getNumCallbacks() override;

void preDelete1() override;
s32 getDamage2() override;
bool isDamageType4() const override;

private:
/* 0x0068 */ void* mCallback = nullptr;
/* 0x0070 */ s32 mDamage2;
/* 0x0074 */ bool mIsDamageType4;
};

KSYS_CHECK_SIZE_NX150(DamageMgrShield, 0x78);

} // namespace uking::dmg
23 changes: 23 additions & 0 deletions src/Game/Damage/dmgDamageMgrWeapon.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#pragma once

#include <basis/seadTypes.h>
#include "Game/Damage/dmgDamageManagerBase.h"

namespace uking::dmg {

class DamageMgrWeapon : public DamageManagerBase {
SEAD_RTTI_OVERRIDE(DamageMgrWeapon, DamageManagerBase)

public:
DamageMgrWeapon(ksys::act::Actor* actor);

virtual void setDamage2(f32 damage);
virtual s32 getDamage2();
virtual s32 m52();
virtual bool isDamageType4() const;

void m20();
};
KSYS_CHECK_SIZE_NX150(DamageMgrWeapon, 0x68);

} // namespace uking::dmg