#include #include #include #include #include "KingSystem/Resource/resResource.h" #include "KingSystem/Utils/ParamIO.h" namespace ksys::res { class DamageParam : public ParamIO, public Resource { SEAD_RTTI_OVERRIDE(DamageParam, Resource) public: DamageParam() : ParamIO("dmgparam", 0) {} ~DamageParam() override = default; bool needsParse() const override { return true; } bool ParamIO_m0(char* data) override { return false; } f32 getDamageRate(const sead::SafeString& damage_source); const sead::SafeString& getDamageReaction(const sead::SafeString& damage_source, const sead::SafeString& damage_size); // clang-format off SEAD_ENUM(DamageSize,Small,Middle,Large,Huge) SEAD_ENUM(DamageSource,Sword,LargeSword,Spear,Arrow,Bomb,Body,Ancient,ShockWave,Impulse,GanonBeam) // clang-format on private: void doCreate_(u8*, u32, sead::Heap*) override {} bool parse_(u8* data, size_t size, sead::Heap* heap) override; agl::utl::ParameterList mParamList; agl::utl::ParameterObj mReactionTableObj; agl::utl::ParameterObj mDamageRateObj; agl::utl::ParameterObj mParametersObj; agl::utl::ParameterObj mDamageTypeObj; sead::Buffer> mDamageRateBuffer; sead::Buffer> mDamageTypeBuffer; public: agl::utl::Parameter mKeyString; agl::utl::Parameter mBreakable; agl::utl::Parameter mHammerAffect; agl::utl::Parameter mWeakBreakerAffect; agl::utl::Parameter mChemicalAttackAffect; agl::utl::Parameter mSpAffectRatio; agl::utl::Parameter mSpAffectDamage; agl::utl::Parameter mVanishAffect; agl::utl::Parameter mIsCriticalBlowOff; agl::utl::Parameter mIsAcceptAtkImpulse; agl::utl::Parameter mIsCommonCalcImpuleDamage; agl::utl::Parameter mIsHeavyBreak; agl::utl::Parameter mImpulseThresholdLv0; agl::utl::Parameter mImpulseDamageLv0; agl::utl::Parameter mImpulseThresholdLv1; agl::utl::Parameter mImpulseDamageLv1; agl::utl::Parameter mImpulseThresholdLv2; agl::utl::Parameter mImpulseDamageLv2; agl::utl::Parameter mImpulseThresholdLv3; agl::utl::Parameter mImpulseDamageLv3; agl::utl::Parameter mImpulseThresholdLv4; agl::utl::Parameter mFallDamageStartHeight; agl::utl::Parameter mFallDamageMin; agl::utl::Parameter mFallDamagePerMeter; agl::utl::Parameter mFallDamageHighStart; agl::utl::Parameter mFallDamageHighPerMeter; agl::utl::Parameter mFallDamageNoWaterDepth; agl::utl::Parameter mWeakPointBone; agl::utl::Parameter mWeakPointCalcArea; agl::utl::Parameter mWeakPointCalcOffset; agl::utl::Parameter mWeakPointArea; agl::utl::Parameter mWeakPointOffset; agl::utl::Parameter mWeakPointRatio; agl::utl::Parameter mWeakPointNoUIFlag; agl::utl::Parameter mWeakPointBone2; agl::utl::Parameter mWeakPointCalcArea2; agl::utl::Parameter mWeakPointCalcOffset2; agl::utl::Parameter mWeakPointArea2; agl::utl::Parameter mWeakPointOffset2; agl::utl::Parameter mWeakPointRatio2; agl::utl::Parameter mWeakPointNoUIFlag2; agl::utl::Parameter mSillentKillMultRatio; agl::utl::Parameter mSillentKillAddDamage; agl::utl::Parameter mIsDeadBurnout; agl::utl::Parameter mIsMetamorBurnout; agl::utl::Parameter mIsMatamorFromTg; agl::utl::Parameter mBurnable; agl::utl::Parameter mBurnDamage; agl::utl::Parameter mBurnDamage2; agl::utl::Parameter mBurnDamage3; agl::utl::Parameter mBurnDamage4; agl::utl::Parameter mBurnDamage5; agl::utl::Parameter mBurnTime; agl::utl::Parameter mBurnDamageInterval; agl::utl::Parameter mBurnContinuousDamage; agl::utl::Parameter mBurnCritical; agl::utl::Parameter mProofBurnAtSmallDamage; agl::utl::Parameter mIsDeadIce; agl::utl::Parameter mIsMetamorIce; agl::utl::Parameter mIceable; agl::utl::Parameter mIceDamage; agl::utl::Parameter mIceTime; agl::utl::Parameter mIceBreakableByAtk; agl::utl::Parameter mIceBreakDamageRatio; agl::utl::Parameter mIceCritical; agl::utl::Parameter mProofIceAtSmallDamage; agl::utl::Parameter mIsDeadElectric; agl::utl::Parameter mIsMetamorElectric; agl::utl::Parameter mElectricable; agl::utl::Parameter mElectricDamage; agl::utl::Parameter mElectricTime; agl::utl::Parameter mElecCancelableByAtk; agl::utl::Parameter mProofElecAtSmallDamage; agl::utl::Parameter mWetAffect; agl::utl::Parameter mLightningAffect; agl::utl::Parameter mLightningDamage; agl::utl::Parameter mGerudoHeroAffect; agl::utl::Parameter mGerudoHeroDamage; agl::utl::Parameter mGerudoHeroTime; agl::utl::Parameter mGustAffect; agl::utl::Parameter mDrownHeight; agl::utl::Parameter mDrownDamage; agl::utl::Parameter mColdWaterFrozenTime; agl::utl::Parameter mColdWaterAffect; agl::utl::Parameter mColdWaterDamage; agl::utl::Parameter mColdWaterDamageInterval; agl::utl::Parameter mColdWaterDamageStartDepth; agl::utl::Parameter mColdWaterDamageIntervalDeep; agl::utl::Parameter mColdWaterDamageDeepDepth; agl::utl::Parameter mHotWaterBoiledTime; agl::utl::Parameter mHotWaterHealAffect; agl::utl::Parameter mHotWaterHeal; agl::utl::Parameter mHotWaterHealInterval; agl::utl::Parameter mHotWaterHealStartDepth; agl::utl::Parameter mHotWaterHealIntervalDeep; agl::utl::Parameter mHotWaterHealDeepDepth; agl::utl::Parameter mHotWaterChemCrit; agl::utl::Parameter mPoisonBogAffect; agl::utl::Parameter mPoisonBogDamage; agl::utl::Parameter mPoisonBogDamageInterval; agl::utl::Parameter mLavaAffect; agl::utl::Parameter mLavaDamage; agl::utl::Parameter mLavaDamageInterval; agl::utl::Parameter mLavaDeepDepth; agl::utl::Parameter mLavaDeepDamage; agl::utl::Parameter mCurseAffect; agl::utl::Parameter mCurseDamage; agl::utl::Parameter mCurseInterval; agl::utl::Parameter mCurseContinuousDamage; agl::utl::Parameter mHeavySnowColdTime; }; } // namespace ksys::res