mirror of https://github.com/zeldaret/botw.git
144 lines
3.9 KiB
C++
144 lines
3.9 KiB
C++
#pragma once
|
|
|
|
#include <basis/seadTypes.h>
|
|
#include <prim/seadSafeString.h>
|
|
#include <prim/seadTypedBitFlag.h>
|
|
|
|
namespace ksys::act {
|
|
class ActorConstDataAccess;
|
|
class InstParamPack;
|
|
namespace ai {
|
|
struct InlineParamPack;
|
|
}
|
|
} // namespace ksys::act
|
|
|
|
namespace ksys::evt {
|
|
class OrderParam;
|
|
}
|
|
|
|
namespace ksys::res {
|
|
class GParamList;
|
|
}
|
|
|
|
namespace uking::ui {
|
|
class PouchItem;
|
|
}
|
|
|
|
namespace uking::act {
|
|
|
|
enum class WeaponModifier : u32 {
|
|
None = 0,
|
|
/// Attack Up (swords and bows)
|
|
AddAtk = 0x1,
|
|
/// Durability Up
|
|
AddLife = 0x2,
|
|
|
|
/// Critical Hit (swords)
|
|
AddCrit = 0x4,
|
|
/// Long Throw (swords)
|
|
AddThrow = 0x8,
|
|
|
|
/// Multi-shot (bows)
|
|
AddSpreadFire = 0x10,
|
|
/// ??? (bows)
|
|
AddZoomRapid = 0x20,
|
|
/// Quick Shot (bows)
|
|
AddRapidFire = 0x40,
|
|
|
|
/// Unused bonus type (shields)
|
|
AddSurfMaster = 0x80,
|
|
/// Shield Guard Up (shields)
|
|
AddGuard = 0x100,
|
|
|
|
/// Whether this is a yellow tier (PoweredSharp) modifier.
|
|
IsYellow = 0x80000000,
|
|
};
|
|
|
|
struct WeaponModifierRanges;
|
|
|
|
struct WeaponModifierInfo {
|
|
WeaponModifierInfo() : value() {}
|
|
explicit WeaponModifierInfo(const ui::PouchItem& item);
|
|
void fromItem(const ui::PouchItem& item);
|
|
|
|
int getAddLife() const;
|
|
static int getLifeMultiplier();
|
|
|
|
void loadPorchSwordFlag(int idx);
|
|
void loadPorchShieldFlag(int idx);
|
|
void loadPorchBowFlag(int idx);
|
|
|
|
void savePorchSwordFlag(int idx) const;
|
|
void savePorchShieldFlag(int idx) const;
|
|
void savePorchBowFlag(int idx) const;
|
|
|
|
void loadEquipStandSwordFlag(int idx);
|
|
void loadEquipStandShieldFlag(int idx);
|
|
void loadEquipStandBowFlag(int idx);
|
|
|
|
void saveEquipStandSwordFlag(int idx) const;
|
|
void saveEquipStandShieldFlag(int idx) const;
|
|
void saveEquipStandBowFlag(int idx) const;
|
|
|
|
void addModifierParams(ksys::act::InstParamPack& params) const;
|
|
void set(u32 type_, u32 value_);
|
|
static void addModifierParams(WeaponModifierInfo* self, ksys::evt::OrderParam& params);
|
|
static void addModifierParams(WeaponModifierInfo* self, ksys::act::ai::InlineParamPack& params);
|
|
|
|
bool pickRandomBlueModifierAmiibo(const sead::SafeString& actor);
|
|
bool pickRandomYellowModifierAmiibo(const sead::SafeString& actor);
|
|
bool pickRandomModifierAmiibo(const WeaponModifierRanges& ranges);
|
|
|
|
bool pickRandomModifier(const WeaponModifierRanges& ranges);
|
|
|
|
bool pickRandomBlueModifierTbox(const sead::SafeString& actor);
|
|
bool pickRandomYellowModifierTbox(const sead::SafeString& actor);
|
|
|
|
bool pickRandomBlueModifierActor(const ksys::act::ActorConstDataAccess& acc);
|
|
bool pickRandomYellowModifierActor(const ksys::act::ActorConstDataAccess& acc);
|
|
|
|
void setModifier(WeaponModifier modifier, s32 value_) {
|
|
flags.setDirect((flags.getDirect() & u32(WeaponModifier::IsYellow)) | u32(modifier));
|
|
value = value_;
|
|
}
|
|
|
|
void setModifierFloat(WeaponModifier modifier, f32 value_) {
|
|
flags.setDirect((flags.getDirect() & u32(WeaponModifier::IsYellow)) | u32(modifier));
|
|
value = value_ * 1000.0f;
|
|
}
|
|
|
|
sead::TypedBitFlag<WeaponModifier> flags;
|
|
s32 value;
|
|
};
|
|
|
|
struct WeaponModifierRanges {
|
|
bool loadTierBlue(const sead::SafeString& actor);
|
|
bool loadTierYellow(const sead::SafeString& actor);
|
|
|
|
bool loadTierBlue(const ksys::res::GParamList& gparamlist);
|
|
bool loadTierYellow(const ksys::res::GParamList& gparamlist);
|
|
|
|
WeaponModifier getRandomModifier() const;
|
|
bool isConfigValid() const;
|
|
|
|
int addAtkMin = 0;
|
|
int addAtkMax = 0;
|
|
int addLifeMin = 0;
|
|
int addLifeMax = 0;
|
|
bool addCrit = false;
|
|
int addGuardMin = 0;
|
|
int addGuardMax = 0;
|
|
float addThrowMin = 1.0;
|
|
float addThrowMax = 1.0;
|
|
bool addSpreadFire = false;
|
|
bool addZoomRapid = false;
|
|
float addRapidFireMin = 1.0;
|
|
float addRapidFireMax = 1.0;
|
|
bool addSurfMaster = false;
|
|
bool isTierYellow = false;
|
|
};
|
|
|
|
// TODO: Weapon class
|
|
|
|
} // namespace uking::act
|