Skip to content

Commit 2363fbf

Browse files
committed
PlayerInfo stuff that doesn't require PlayerBase
1 parent d5128f8 commit 2363fbf

13 files changed

+342
-74
lines changed

data/data_symbols.csv

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
0x00000071024D8D58,_ZTVN4ksys3act2ai10ActionBaseE
2727
0x00000071025129E0,_ZTVN4ksys3act2ai6ActionE
2828
0x0000007102513268,_ZTVN4ksys3act2ai2AiE
29+
0x00000071025CDB60,_ZN4ksys3act10PlayerInfo9sInstanceE
2930
0x00000071025F75B0,pfnc_nvnDeviceBuilderSetDefaults
3031
0x00000071025F75B8,pfnc_nvnDeviceBuilderSetFlags
3132
0x00000071025F75C0,pfnc_nvnDeviceInitialize

data/uking_functions.csv

Lines changed: 62 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -51629,7 +51629,7 @@ Address,Quality,Size,Name
5162951629
0x000000710084b62c,U,000084,Player::setItemVel
5163051630
0x000000710084b680,U,000084,Player::setItemSwimVel
5163151631
0x000000710084b6d4,U,000084,
51632-
0x000000710084b728,U,000080,Player::addExtraLife
51632+
0x000000710084b728,U,000080,Player::setExtraLife
5163351633
0x000000710084b778,U,000072,Player::addExtraStamina
5163451634
0x000000710084b7c0,U,000080,
5163551635
0x000000710084b810,U,000080,
@@ -52122,32 +52122,32 @@ Address,Quality,Size,Name
5212252122
0x00000071008525f8,U,000092,
5212352123
0x0000007100852654,U,000072,
5212452124
0x000000710085269c,U,000372,
52125-
0x0000007100852810,U,000048,PlayerInfo::S1::ctor
52126-
0x0000007100852840,U,000004,j_nullsub_2594
52127-
0x0000007100852844,U,000036,
52128-
0x0000007100852868,U,000020,PlayerInfo::S0::ctor
52129-
0x000000710085287c,U,000004,nullsub_2594
52130-
0x0000007100852880,U,000004,j__ZdlPv_369
52131-
0x0000007100852884,U,000048,PlayerInfo::S2::ctor
52132-
0x00000071008528b4,U,000004,j_nullsub_2594_0
52133-
0x00000071008528b8,U,000036,
52125+
0x0000007100852810,O,000048,_ZN4ksys3act10PlayerInfo5Info1C1Ev
52126+
0x0000007100852840,O,000004,_ZN4ksys3act10PlayerInfo5Info1D2Ev
52127+
0x0000007100852844,O,000036,_ZN4ksys3act10PlayerInfo5Info1D0Ev
52128+
0x0000007100852868,O,000020,_ZN4ksys3act14PlayerInfoBaseC1Ev
52129+
0x000000710085287c,O,000004,_ZN4ksys3act14PlayerInfoBaseD2Ev
52130+
0x0000007100852880,O,000004,_ZN4ksys3act14PlayerInfoBaseD0Ev
52131+
0x0000007100852884,O,000048,_ZN4ksys3act10PlayerInfo5Info2C1Ev
52132+
0x00000071008528b4,O,000004,_ZN4ksys3act10PlayerInfo5Info2D2Ev
52133+
0x00000071008528b8,O,000036,_ZN4ksys3act10PlayerInfo5Info2D0Ev
5213452134
0x00000071008528dc,U,000004,nullsub_2595
52135-
0x00000071008528e0,U,000048,PlayerInfo::S3::ctor
52136-
0x0000007100852910,U,000004,j_nullsub_2594_1
52137-
0x0000007100852914,U,000036,
52138-
0x0000007100852938,U,000048,PlayerInfo::S4::ctor
52139-
0x0000007100852968,U,000004,j_nullsub_2594_2
52140-
0x000000710085296c,U,000036,
52141-
0x0000007100852990,U,000048,PlayerInfo::S5::ctor
52142-
0x00000071008529c0,U,000004,j_nullsub_2594_3
52143-
0x00000071008529c4,U,000036,
52135+
0x00000071008528e0,O,000048,_ZN4ksys3act10PlayerInfo5Info3C1Ev
52136+
0x0000007100852910,O,000004,_ZN4ksys3act10PlayerInfo5Info3D2Ev
52137+
0x0000007100852914,O,000036,_ZN4ksys3act10PlayerInfo5Info3D0Ev
52138+
0x0000007100852938,O,000048,_ZN4ksys3act10PlayerInfo5Info4C1Ev
52139+
0x0000007100852968,O,000004,_ZN4ksys3act10PlayerInfo5Info4D2Ev
52140+
0x000000710085296c,O,000036,_ZN4ksys3act10PlayerInfo5Info4D0Ev
52141+
0x0000007100852990,O,000048,_ZN4ksys3act10PlayerInfo5Info5C1Ev
52142+
0x00000071008529c0,O,000004,_ZN4ksys3act10PlayerInfo5Info5D2Ev
52143+
0x00000071008529c4,O,000036,_ZN4ksys3act10PlayerInfo5Info5D0Ev
5214452144
0x00000071008529e8,U,000008,return1_0
52145-
0x00000071008529f0,U,000048,PlayerInfo::S6::ctor
52146-
0x0000007100852a20,U,000004,j_nullsub_2594_4
52147-
0x0000007100852a24,U,000036,
52148-
0x0000007100852a48,U,000048,PlayerInfo::S7::ctor
52149-
0x0000007100852a78,U,000004,j_nullsub_2594_5
52150-
0x0000007100852a7c,U,000036,
52145+
0x00000071008529f0,O,000048,_ZN4ksys3act10PlayerInfo5Info6C1Ev
52146+
0x0000007100852a20,O,000004,_ZN4ksys3act10PlayerInfo5Info6D2Ev
52147+
0x0000007100852a24,O,000036,_ZN4ksys3act10PlayerInfo5Info6D0Ev
52148+
0x0000007100852a48,O,000048,_ZN4ksys3act10PlayerInfo5Info7C1Ev
52149+
0x0000007100852a78,O,000004,_ZN4ksys3act10PlayerInfo5Info7D2Ev
52150+
0x0000007100852a7c,O,000036,_ZN4ksys3act10PlayerInfo5Info7D0Ev
5215152151
0x0000007100852aa0,U,000240,Player::RideInfo::ctor
5215252152
0x0000007100852b90,U,000152,Player::RideInfo::init
5215352153
0x0000007100852c28,U,000044,Player::RideInfo::x_0
@@ -52164,46 +52164,46 @@ Address,Quality,Size,Name
5216452164
0x0000007100854028,U,000036,
5216552165
0x000000710085404c,U,000288,
5216652166
0x000000710085416c,U,000092,
52167-
0x00000071008541c8,U,000100,
52168-
0x000000710085422c,U,000108,
52169-
0x0000007100854298,U,000136,PlayerInfo::createInstance
52170-
0x0000007100854320,U,000192,PlayerInfo::ctor
52171-
0x00000071008543e0,U,000124,PlayerInfo::dtor
52172-
0x000000710085445c,U,000132,PlayerInfo::dtorDelete
52173-
0x00000071008544e0,U,000008,PlayerInfo::init
52167+
0x00000071008541c8,O,000100,_ZN4ksys3act10PlayerInfo18SingletonDisposer_D1Ev
52168+
0x000000710085422c,O,000108,_ZN4ksys3act10PlayerInfo18SingletonDisposer_D0Ev
52169+
0x0000007100854298,O,000136,_ZN4ksys3act10PlayerInfo14createInstanceEPN4sead4HeapE
52170+
0x0000007100854320,O,000192,_ZN4ksys3act10PlayerInfoC1Ev
52171+
0x00000071008543e0,O,000124,_ZN4ksys3act10PlayerInfoD1Ev
52172+
0x000000710085445c,O,000132,_ZN4ksys3act10PlayerInfoD0Ev
52173+
0x00000071008544e0,O,000008,_ZN4ksys3act10PlayerInfo4initEv
5217452174
0x00000071008544e8,U,000084,PlayerInfo::setPlayerActor
52175-
0x000000710085453c,U,000028,PlayerInfo::resetActor
52176-
0x0000007100854558,U,000012,
52177-
0x0000007100854564,U,000008,PlayerInfo::__auto2
52178-
0x000000710085456c,U,000068,PlayerInfo::getActor
52179-
0x00000071008545b0,U,000068,PlayerInfo::getActor_0
52175+
0x000000710085453c,O,000028,_ZN4ksys3act10PlayerInfo11resetPlayerEPNS0_10PlayerBaseE
52176+
0x0000007100854558,O,000012,_ZN4ksys3act10PlayerInfo12acquireHorseEPNS0_8BaseProcE
52177+
0x0000007100854564,O,000008,_ZN4ksys3act10PlayerInfo12setHorseLinkERKNS0_12BaseProcLinkE
52178+
0x000000710085456c,O,000068,_ZNK4ksys3act10PlayerInfo9getPlayerEv
52179+
0x00000071008545b0,O,000068,_ZNK4ksys3act10PlayerInfo10getPlayer_Ev
5218052180
0x00000071008545f4,U,000212,PlayerInfo::getRiddenHorse
52181-
0x00000071008546c8,U,000016,PlayerInfo::setPlayerActorMaxHeartValue
52182-
0x00000071008546d8,U,000024,PlayerInfo::getMaxLife
52183-
0x00000071008546f0,U,000052,PlayerInfo::setMaxHeartValue
52184-
0x0000007100854724,U,000012,PlayerInfo::getMaxHeartValue
52185-
0x0000007100854730,U,000044,PlayerInfo::updateMaxHeartValue
52186-
0x000000710085475c,U,000052,PlayerInfo::setLife
52187-
0x0000007100854790,U,000052,PlayerInfo::getLife
52188-
0x00000071008547c4,U,000164,PlayerInfo::updateCurrentHartFlagFromPlayer
52181+
0x00000071008546c8,U,000016,PlayerInfo::setMaxLifeForPlayerActor
52182+
0x00000071008546d8,O,000024,_ZNK4ksys3act10PlayerInfo25getMaxLifeFromPlayerActorEv
52183+
0x00000071008546f0,O,000052,_ZN4ksys3act10PlayerInfo16setMaxHeartValueEi
52184+
0x0000007100854724,O,000012,_ZNK4ksys3act10PlayerInfo16getMaxHeartValueEv
52185+
0x0000007100854730,O,000044,_ZN4ksys3act10PlayerInfo31updateMaxHeartValueFromGameDataEv
52186+
0x000000710085475c,O,000052,_ZN4ksys3act10PlayerInfo21setLifeForPlayerActorEi
52187+
0x0000007100854790,O,000052,_ZNK4ksys3act10PlayerInfo22getLifeFromPlayerActorEv
52188+
0x00000071008547c4,U,000164,PlayerInfo::updateCurrentHartFlagFromPlayerActor
5218952189
0x0000007100854868,U,000100,PlayerInfo::updateLifeAfterGameOver
52190-
0x00000071008548cc,U,000168,PlayerInfo::resetPlayerPullSwordStartLife
52191-
0x0000007100854974,U,000096,PlayerInfo::saveLifeInfoForPlayerPullSword
52192-
0x00000071008549d4,U,000076,
52193-
0x0000007100854a20,U,000052,PlayerInfo::setStamina
52194-
0x0000007100854a54,U,000008,PlayerInfo::getStaminaCurrentMax_0
52195-
0x0000007100854a5c,U,000040,PlayerInfo::updateStaminaCurrentMax
52196-
0x0000007100854a84,U,000052,PlayerInfo::setStaminaMax
52197-
0x0000007100854ab8,U,000008,PlayerInfo::getStaminaMax
52198-
0x0000007100854ac0,U,000040,PlayerInfo::updateStaminaMax
52199-
0x0000007100854ae8,U,000016,PlayerInfo::x_1
52200-
0x0000007100854af8,U,000024,PlayerInfo::getMaxStamina
52201-
0x0000007100854b10,U,000072,PlayerInfo::recoverEnergy
52202-
0x0000007100854b58,U,000072,PlayerInfo::recoverPlayerCondition
52203-
0x0000007100854ba0,U,000008,PlayerInfo::getActorWithoutAnyChecks
52204-
0x0000007100854ba8,U,000120,PlayerInfo::getPlayerPos
52205-
0x0000007100854c20,U,000120,PlayerInfo::getPlayerPosForPostCalc
52206-
0x0000007100854c98,U,000048,
52190+
0x00000071008548cc,U,000168,PlayerInfo::resetLifeToBeforeSwordPull
52191+
0x0000007100854974,U,000096,PlayerInfo::saveLifeInfoForSwordPull
52192+
0x00000071008549d4,O,000076,_ZN4ksys3act10PlayerInfo11recoverLifeEv
52193+
0x0000007100854a20,O,000052,_ZN4ksys3act10PlayerInfo20setStaminaCurrentMaxEf
52194+
0x0000007100854a54,O,000008,_ZNK4ksys3act10PlayerInfo20getStaminaCurrentMaxEv
52195+
0x0000007100854a5c,O,000040,_ZN4ksys3act10PlayerInfo35updateStaminaCurrentMaxFromGameDataEv
52196+
0x0000007100854a84,O,000052,_ZN4ksys3act10PlayerInfo13setStaminaMaxEf
52197+
0x0000007100854ab8,O,000008,_ZNK4ksys3act10PlayerInfo13getStaminaMaxEv
52198+
0x0000007100854ac0,O,000040,_ZN4ksys3act10PlayerInfo28updateStaminaMaxFromGameDataEv
52199+
0x0000007100854ae8,U,000016,PlayerInfo::setStaminaMax
52200+
0x0000007100854af8,U,000024,PlayerInfo::getStaminaMax
52201+
0x0000007100854b10,U,000072,PlayerInfo::recoverStamina
52202+
0x0000007100854b58,U,000072,PlayerInfo::recoverCondition
52203+
0x0000007100854ba0,O,000008,_ZN4ksys3act10PlayerInfo18getPlayerUncheckedEv
52204+
0x0000007100854ba8,O,000120,_ZN4ksys3act10PlayerInfo12getPlayerPosEv
52205+
0x0000007100854c20,O,000120,_ZN4ksys3act10PlayerInfo23getPlayerPosForPostCalcEv
52206+
0x0000007100854c98,U,000048,PlayerInfo::getPlayerM265
5220752207
0x0000007100854cc8,U,001052,Player::x_43
5220852208
0x00000071008550e4,U,000280,
5220952209
0x00000071008551fc,U,000292,Player::x_25

src/Game/AI/Query/queryComparePlayerHeart.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ int ComparePlayerHeart::doQuery() {
1313
if (pi == nullptr)
1414
return 0;
1515

16-
return pi->getLife() >= *mThreshold;
16+
return pi->getLifeFromPlayerActor() >= *mThreshold;
1717
}
1818

1919
void ComparePlayerHeart::loadParams(const evfl::QueryArg& arg) {

src/Game/AI/Query/queryComparePlayerMaxHeart.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ int ComparePlayerMaxHeart::doQuery() {
1313
if (pi == nullptr)
1414
return 0;
1515

16-
s32 full_hearts = pi->getMaxHearts() / 4;
16+
s32 full_hearts = pi->getMaxHeartValue() / 4;
1717
return full_hearts >= *mThreshold;
1818
}
1919

src/Game/AI/Query/queryComparePlayerMaxStamina.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ int ComparePlayerMaxStamina::doQuery() {
1313
if (pi == nullptr)
1414
return 0;
1515

16-
s32 stamina = pi->getMaxStamina();
16+
s32 stamina = pi->getStaminaMax();
1717
if (stamina % 200 <= 0)
1818
return stamina / 200 >= *mThreshold;
1919
else

src/Game/AI/Query/queryComparePlayerOriginalHeart.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ int ComparePlayerOriginalHeart::doQuery() {
1515
if (PlayerInfo::instance() == nullptr)
1616
return 0;
1717

18-
s32 life = PlayerInfo::instance()->getLife();
19-
s32 hearts = PlayerInfo::instance()->getMaxHearts();
18+
s32 life = PlayerInfo::instance()->getLifeFromPlayerActor();
19+
s32 hearts = PlayerInfo::instance()->getMaxHeartValue();
2020
s32 compare;
2121
if (life <= hearts)
2222
compare = life;

src/KingSystem/ActorSystem/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ target_sources(uking PRIVATE
118118
actPhysicsUserTag.h
119119
actPlayerInfo.cpp
120120
actPlayerInfo.h
121+
actPlayerInfoBase.cpp
122+
actPlayerInfoStub.cpp
121123
actTag.h
122124

123125
actionDummyAction.cpp
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
11
#pragma once
22

33
#include <prim/seadSafeString.h>
4+
#include "KingSystem/ActorSystem/actActor.h"
45

56
namespace ksys::act {
67

78
// TODO
8-
class PlayerBase {
9+
class PlayerBase : public Actor {
910
public:
1011
// FIXME: name for x and name+type for y
1112
void switchEquipment(const sead::SafeString& slot, int frames, int x = -1,
1213
const uintptr_t& y = {});
14+
15+
// FIXME: name for x
16+
void setExtraLife(s32 extra_life, f32 x);
1317
};
1418

1519
} // namespace ksys::act
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,134 @@
11
#include "KingSystem/ActorSystem/actPlayerInfo.h"
2+
#include "KingSystem/ActorSystem/Profiles/actPlayerBase.h"
3+
#include "KingSystem/ActorSystem/actActorConstDataAccess.h"
4+
#include "KingSystem/ActorSystem/actActorLinkConstDataAccess.h"
5+
#include "KingSystem/ActorSystem/actBaseProc.h"
6+
#include "KingSystem/ActorSystem/actBaseProcMgr.h"
7+
#include "KingSystem/GameData/gdtCommonFlagsUtils.h"
8+
#include "KingSystem/ksys.h"
9+
10+
namespace ksys::act {
11+
12+
SEAD_SINGLETON_DISPOSER_IMPL(PlayerInfo)
13+
14+
PlayerInfo::PlayerInfo() = default;
15+
PlayerInfo::~PlayerInfo() = default;
16+
17+
bool PlayerInfo::init() {
18+
return true;
19+
}
20+
21+
void PlayerInfo::resetPlayer(PlayerBase* player) {
22+
if (mPlayerActor == player) {
23+
mPlayerActor = nullptr;
24+
ksys::setPlayerLink(nullptr);
25+
}
26+
}
27+
28+
bool PlayerInfo::acquireHorse(BaseProc* horse) {
29+
return mHorseLink.acquire(horse, false);
30+
}
31+
32+
void PlayerInfo::setHorseLink(const BaseProcLink& horse_link) {
33+
mHorseLink = horse_link;
34+
}
35+
36+
PlayerBase* PlayerInfo::getPlayer() const {
37+
if (!mPlayerActor) {
38+
return nullptr;
39+
}
40+
BaseProcMgr::instance()->isAccessingProcSafe(mPlayerActor, nullptr);
41+
return mPlayerActor;
42+
}
43+
44+
PlayerBase* PlayerInfo::getPlayer_() const {
45+
if (!mPlayerActor) {
46+
return nullptr;
47+
}
48+
BaseProcMgr::instance()->isAccessingProcSafe(mPlayerActor, nullptr);
49+
return mPlayerActor;
50+
}
51+
52+
s32 PlayerInfo::getMaxLifeFromPlayerActor() const {
53+
return mPlayerActor ? mPlayerActor->getMaxLife() : 0;
54+
}
55+
56+
void PlayerInfo::setMaxHeartValue(s32 quarter_hearts) {
57+
gdt::setFlag_MaxHartValue(quarter_hearts);
58+
mMaxHeartValue = static_cast<f32>(quarter_hearts);
59+
}
60+
61+
u32 PlayerInfo::getMaxHeartValue() const {
62+
// Return type is unsigned, but the conversion is signed
63+
return static_cast<s32>(mMaxHeartValue);
64+
}
65+
66+
void PlayerInfo::updateMaxHeartValueFromGameData() {
67+
mMaxHeartValue = static_cast<f32>(gdt::getFlag_MaxHartValue());
68+
}
69+
70+
void PlayerInfo::setLifeForPlayerActor(s32 life) {
71+
if (mPlayerActor) {
72+
*mPlayerActor->getLife() = life;
73+
}
74+
}
75+
76+
s32 PlayerInfo::getLifeFromPlayerActor() const {
77+
if (!mPlayerActor) {
78+
return 0;
79+
}
80+
auto* life = mPlayerActor->getLife();
81+
return life ? *life : 1;
82+
}
83+
84+
void PlayerInfo::recoverLife() {
85+
setLifeForPlayerActor(getMaxLifeFromPlayerActor());
86+
}
87+
88+
void PlayerInfo::setStaminaCurrentMax(f32 max_stamina) {
89+
gdt::setFlag_StaminaCurrentMax(max_stamina);
90+
mStaminaCurrentMax = max_stamina;
91+
}
92+
93+
f32 PlayerInfo::getStaminaCurrentMax() const {
94+
return mStaminaCurrentMax;
95+
}
96+
97+
void PlayerInfo::updateStaminaCurrentMaxFromGameData() {
98+
mStaminaCurrentMax = gdt::getFlag_StaminaCurrentMax();
99+
}
100+
101+
void PlayerInfo::setStaminaMax(f32 max_stamina) {
102+
gdt::setFlag_StaminaMax(max_stamina);
103+
mStaminaMax = max_stamina;
104+
}
105+
106+
f32 PlayerInfo::getStaminaMax() const {
107+
return mStaminaMax;
108+
}
109+
110+
void PlayerInfo::updateStaminaMaxFromGameData() {
111+
mStaminaMax = gdt::getFlag_StaminaMax();
112+
}
113+
114+
PlayerBase* PlayerInfo::getPlayerUnchecked() {
115+
return mPlayerActor;
116+
}
117+
118+
sead::Vector3f& PlayerInfo::getPlayerPos() {
119+
ActorConstDataAccess accessor;
120+
121+
acquireActor(&mPlayerLink, &accessor);
122+
accessor.debugLog(1, "getPlayerPos");
123+
return mPlayerPos;
124+
}
125+
126+
sead::Vector3f& PlayerInfo::getPlayerPosForPostCalc() {
127+
ActorConstDataAccess accessor;
128+
129+
acquireActor(&mPlayerLink, &accessor);
130+
accessor.debugLog(0, "getPlayerPosForPostCalc");
131+
return mPlayerPosForPostCalc;
132+
}
133+
134+
} // namespace ksys::act

0 commit comments

Comments
 (0)