#pragma once #include "Runtime/Tweaks/ITweak.hpp" namespace metaforce { /* Same as CDamageInfo */ struct SShotParam { atInt32 x0_weaponType = -1; bool x4_24_charged : 1; bool x4_25_combo : 1; bool x4_26_instaKill : 1; float x8_damage = 0.f; float xc_radiusDamage = 0.f; float x10_radius = 0.f; float x14_knockback = 0.f; bool x18_24_noImmunity : 1; SShotParam() { x4_24_charged = false; x4_25_combo = false; x4_26_instaKill = false; x18_24_noImmunity = false; } explicit SShotParam(CInputStream& in); }; struct SComboShotParam : SShotParam { SComboShotParam() { x4_25_combo = true; } explicit SComboShotParam(CInputStream& in) : SShotParam(in) { x4_25_combo = true; } }; struct SChargedShotParam : SShotParam { SChargedShotParam() { x4_24_charged = true; } explicit SChargedShotParam(CInputStream& in) : SShotParam(in) { x4_24_charged = true; } }; struct SWeaponInfo { float x0_coolDown = 0.1f; SShotParam x4_normal; SChargedShotParam x20_charged; SWeaponInfo() = default; explicit SWeaponInfo(CInputStream& in); }; namespace Tweaks { struct ITweakPlayerGun : ITweak { virtual float GetUpLookAngle() const = 0; virtual float GetDownLookAngle() const = 0; virtual float GetVerticalSpread() const = 0; virtual float GetHorizontalSpread() const = 0; virtual float GetHighVerticalSpread() const = 0; virtual float GetHighHorizontalSpread() const = 0; virtual float GetLowVerticalSpread() const = 0; virtual float GetLowHorizontalSpread() const = 0; virtual float GetAimVerticalSpeed() const = 0; // x24 virtual float GetAimHorizontalSpeed() const = 0; // x28 virtual float GetBombFuseTime() const = 0; // x2c virtual float GetBombDropDelayTime() const = 0; // x30 virtual float GetHoloHoldTime() const = 0; // x34 virtual float GetGunTransformTime() const = 0; // x38 virtual float GetGunHolsterTime() const = 0; virtual float GetGunNotFiringTime() const = 0; virtual float GetFixedVerticalAim() const = 0; virtual float GetGunExtendDistance() const = 0; virtual const zeus::CVector3f& GetGunPosition() const = 0; virtual const zeus::CVector3f& GetGrapplingArmPosition() const = 0; virtual float GetRichochetDamage(atUint32) const = 0; virtual const SWeaponInfo& GetBeamInfo(atInt32 beam) const = 0; virtual const SComboShotParam& GetComboShotInfo(atInt32 beam) const = 0; virtual const SShotParam& GetBombInfo() const = 0; virtual const SShotParam& GetPowerBombInfo() const = 0; }; } // namespace Tweaks } // namespace metaforce