uking/dmg: Implement DamageInfoMgr::isTrueFormMasterSword

And some trivial getters.
This commit is contained in:
Léo Lam 2021-01-22 17:20:24 +01:00
parent 5328fd2782
commit 5280254ef1
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
5 changed files with 91 additions and 7 deletions

View File

@ -40218,7 +40218,7 @@
0x000000710067446c,sub_710067446C,664,
0x0000007100674704,sub_7100674704,44,
0x0000007100674730,sub_7100674730,44,
0x000000710067475c,enableBoomerangBombs,8,
0x000000710067475c,enableBoomerangBombs,8,_ZN5uking3dmg13DamageInfoMgr26enableBoomerangRemoteBombsEv
0x0000007100674764,sub_7100674764,8,
0x000000710067476c,sub_710067476C,8,
0x0000007100674774,sub_7100674774,8,
@ -40226,11 +40226,11 @@
0x0000007100674788,sub_7100674788,8,
0x0000007100674790,sub_7100674790,12,
0x000000710067479c,sub_710067479C,8,
0x00000071006747a4,getShieldRideBaseFrame,48,
0x00000071006747d4,getShieldRideHitBaseDamage,48,
0x00000071006747a4,getShieldRideBaseFrame,48,_ZN5uking3dmg13DamageInfoMgr22getShieldRideBaseFrameEv
0x00000071006747d4,getShieldRideHitBaseDamage,48,_ZN5uking3dmg13DamageInfoMgr26getShieldRideHitBaseDamageEv
0x0000007100674804,get10,8,
0x000000710067480c,sub_710067480C,36,
0x0000007100674830,DamageInfoMgr::isTrueFormMasterSword,612,
0x000000710067480c,sub_710067480C,36,_ZN5uking3dmg13DamageInfoMgr22getCriticalAttackRatioEv
0x0000007100674830,DamageInfoMgr::isTrueFormMasterSword,612,_ZNK5uking3dmg13DamageInfoMgr21isTrueFormMasterSwordEv
0x0000007100674a94,sub_7100674A94,156,
0x0000007100674b30,sub_7100674B30,144,
0x0000007100674bc0,sub_7100674BC0,100,

Can't render this file because it is too large.

View File

@ -229,11 +229,11 @@ bool DamageManagerBase::canTakeDamage() {
return false;
}
if (!DamageInfoMgr::instance()->mDamagesArray.isBufferReady()) {
if (!DamageInfoMgr::instance()->getDamagesArray().isBufferReady()) {
return false;
}
DamageInfoMgr::DamageItem& item = DamageInfoMgr::instance()->mDamagesArray[idx];
DamageInfoMgr::DamageItem& item = DamageInfoMgr::instance()->getDamagesArray()[idx];
return item.mCanTakeDamageFromType[damageTypeMaybe] & 0x1;
}

View File

@ -1,7 +1,69 @@
#include "Game/Damage/dmgInfoManager.h"
#include "Game/gameScene.h"
#include "KingSystem/ActorSystem/actGlobalParameter.h"
#include "KingSystem/GameData/gdtCommonFlagsUtils.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectGlobal.h"
namespace uking::dmg {
SEAD_SINGLETON_DISPOSER_IMPL(DamageInfoMgr)
bool DamageInfoMgr::enableBoomerangRemoteBombs() {
return false;
}
int DamageInfoMgr::getShieldRideBaseFrame() {
auto* global = ksys::act::GlobalParameter::instance();
if (!global || !global->getGlobalParam())
return 0;
return global->getGlobalParam()->mShieldRideBaseFrame.ref();
}
int DamageInfoMgr::getShieldRideHitBaseDamage() {
auto* global = ksys::act::GlobalParameter::instance();
if (!global || !global->getGlobalParam())
return 0;
return global->getGlobalParam()->mShieldRideHitBaseDamage.ref();
}
f32 DamageInfoMgr::getCriticalAttackRatio() {
auto* global = ksys::act::GlobalParameter::instance();
if (!global || !global->getGlobalParam())
return 1.0;
return global->getGlobalParam()->mCriticalAttackRatio.ref();
}
bool DamageInfoMgr::isTrueFormMasterSword() const {
if (mMasterSwordDisableTrueForm)
return false;
if (ksys::gdt::getFlag_Open_MasterSword_FullPower())
return true;
if (ksys::gdt::getFlag_IsInHyruleCastleArea())
return true;
if (ksys::gdt::getFlag_LastBossGanonBeastGenerateFlag())
return true;
const sead::SafeString& map = GameScene::getCurrentMapName();
if (!ksys::gdt::getFlag_Die_PGanonElectric() && map == "RemainsElectric")
return true;
if (!ksys::gdt::getFlag_Die_PGanonFire() && map == "RemainsFire")
return true;
if (!ksys::gdt::getFlag_Die_PGanonWater() && map == "RemainsWater")
return true;
if (!ksys::gdt::getFlag_Die_PGanonWind() && map == "RemainsWind")
return true;
return mMasterSwordDetectedEvil;
}
} // namespace uking::dmg

View File

@ -24,8 +24,22 @@ public:
sead::SafeArray<u8, 3> mCanTakeDamageFromType;
};
/// Boomerang remote bombs are a scrapped feature.
static bool enableBoomerangRemoteBombs();
static int getShieldRideBaseFrame();
static int getShieldRideHitBaseDamage();
static f32 getCriticalAttackRatio();
bool isTrueFormMasterSword() const;
sead::Buffer<DamageItem>& getDamagesArray() { return mDamagesArray; }
const sead::Buffer<DamageItem>& getDamagesArray() const { return mDamagesArray; }
f32 getMasterSwordSearchEvilDist() const { return mMasterSwordSearchEvilDist; }
bool isMasterSwordDetectedEvil() const { return mMasterSwordDetectedEvil; }
bool isMasterSwordDisableTrueForm() const { return mMasterSwordDisableTrueForm; }
bool isOneHitObliteratorActive() const { return mOneHitObliteratorActive; }
private:
/* 0x0028 */ u8 TEMP_8[0x5d0 - 0x28];
/* 0x05d0 */ ksys::res::Handle mReactionTable;
/* 0x0620 */ sead::Buffer<DamageItem> mDamagesArray;

View File

@ -1,5 +1,7 @@
#pragma once
#include <prim/seadSafeString.h>
namespace uking {
// TODO
@ -7,6 +9,12 @@ class GameScene {
public:
static bool isOpenWorldDemo() { return sIsOpenWorldDemo; }
/// Get the current map type (e.g. MainFieldDungeon)
static const sead::SafeString& getCurrentMapType();
/// Get the current map name (e.g. RemainsWind, FinalTrial, ...)
static const sead::SafeString& getCurrentMapName();
private:
static bool sIsOpenWorldDemo;
};