CPlayerGun (#43)

* CPlayerGun (not cleaned up yet)

* Update tool versions

* Cleanup

* Cleanup some stuff

* Update CBomb ctor symbol in _01
This commit is contained in:
Luke Street
2026-03-17 01:01:21 -06:00
committed by GitHub
parent 2c46a69188
commit 596f979e57
27 changed files with 2162 additions and 276 deletions
+2 -2
View File
@@ -162,14 +162,14 @@ MetroidPrime/Tweaks/CTweakGame.cpp:
.data start:0x803D9CD0 end:0x803D9CE0
MetroidPrime/Weapons/CGameProjectile.cpp:
.text start:0x80037400 end:0x8003A7A4
.text start:0x80037400 end:0x8003A820
.rodata start:0x803CCE20 end:0x803CCE38
.data start:0x803D9CE0 end:0x803D9D50
.sdata start:0x805A6DB8 end:0x805A6DE0
.sdata2 start:0x805AA120 end:0x805AA168
MetroidPrime/Player/CPlayerGun.cpp:
.text start:0x8003A7A4 end:0x80043DE0
.text start:0x8003A820 end:0x80043DE0
.ctors start:0x803CB1E0 end:0x803CB1E4
.rodata start:0x803CCE38 end:0x803CCEE0
.data start:0x803D9D50 end:0x803D9E30
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -2020,7 +2020,7 @@ AddToRenderer__5CBombCFRC14CFrustumPlanesRC13CStateManager = .text:0x800904D0; /
Touch__5CBombFR6CActorR13CStateManager = .text:0x80090654; // type:function size:0xC scope:global
Explode__5CBombFRC9CVector3fR13CStateManager = .text:0x80090660; // type:function size:0x10C scope:global
__dt__5CBombFv = .text:0x8009076C; // type:function size:0xB4 scope:global
__ct__5CBombFRC25TToken<15CGenDescription>RC25TToken<15CGenDescription>9TUniqueId7TAreaId9TUniqueIdfRC12CTransform4fRC11CDamageInfo = .text:0x80090820; // type:function size:0x3B0 scope:global
__ct__5CBombF25TToken<15CGenDescription>25TToken<15CGenDescription>9TUniqueId7TAreaId9TUniqueIdfRC12CTransform4fRC11CDamageInfo = .text:0x80090820; // type:function size:0x3B0 scope:global
__ct__10CTweakBallFR12CInputStream = .text:0x80090BD0; // type:function size:0x620 scope:global
__dt__10CTweakBallFv = .text:0x800911F0; // type:function size:0x5C scope:global
__dl__24TOneStatic<10CTweakBall>FPv = .text:0x8009124C; // type:function size:0x2C scope:weak
-4
View File
@@ -6,7 +6,6 @@
#include "MetroidPrime/TGameTypes.hpp"
#include "MetroidPrime/Weapons/WeaponTypes.hpp"
struct SShotParam;
class CDamageVulnerability;
class CDamageInfo {
@@ -40,9 +39,6 @@ public:
CDamageInfo(CInputStream& in);
CDamageInfo(const CDamageInfo&, float);
CDamageInfo(const SShotParam& other);
CDamageInfo& operator=(const SShotParam& other);
const CWeaponMode& GetWeaponMode() const { return x0_weaponMode; }
void SetWeaponMode(const CWeaponMode& mode) { x0_weaponMode = mode; }
+3
View File
@@ -101,6 +101,9 @@ public:
bool IsLoaded(int shaderIdx) const;
bool IsDefinitelyOpaque(EWhichModel which) const;
CTransform4f GetLocatorTransformDynamic(const rstl::string& name, const CCharAnimTime* time) const;
CTransform4f GetScaledLocatorTransformDynamic(const rstl::string& name,
const CCharAnimTime* time) const;
CTransform4f GetLocatorTransform(const rstl::string& name) const;
CTransform4f GetScaledLocatorTransform(const rstl::string& name) const;
@@ -6,6 +6,7 @@
class CMetroidBeta : public CPatterned {
public:
void RenderHitBallEffect() const;
void RenderHitGunEffect() const;
};
#endif // _CMETROIDBETA
@@ -337,6 +337,10 @@ public:
void UpdateDamageColor(float dt);
void UpdateAlphaDelta(float dt, CStateManager& mgr);
// TODO: names?
bool IsMakingBigStrike() const { return x402_28_isMakingBigStrike; }
float GetDamageDuration() const { return x504_damageDur; }
protected:
EPatrolState x2d8_patrolState;
TUniqueId x2dc_destObj;
@@ -6,6 +6,7 @@
#include "Kyoto/Animation/CAnimCharacterSet.hpp"
#include "Kyoto/Audio/CSfxHandle.hpp"
#include "Kyoto/Math/CTransform4f.hpp"
#include "MetroidPrime/CEntityInfo.hpp"
#include "MetroidPrime/CModelData.hpp"
#include "MetroidPrime/Player/CPlayerState.hpp"
@@ -23,6 +24,8 @@ class CSwooshDescription;
class CElementGen;
class CParticleSwoosh;
class CRainSplashGenerator;
class CModelFlags;
class CActorLights;
class CGrappleArm {
public:
@@ -44,15 +47,25 @@ public:
~CGrappleArm();
void PreRender(CStateManager& mgr, const CFrustumPlanes& frustum, const CVector3f& camPos);
void Update(float swingT, float dt, CStateManager& mgr);
void EnterFidget(CStateManager& mgr, int a, int b, int c);
void EnterFreeLook(int gunId, int setId, CStateManager& mgr);
void EnterComboFire(int a, CStateManager& mgr);
void ReturnToDefault(CStateManager& mgr, float dt, bool setState);
void EnterIdle(CStateManager& mgr);
void EnterStruck(CStateManager&, float, bool, bool);
void DisconnectGrappleBeam();
void RenderGrappleBeam(const CStateManager&, const CVector3f&) const;
void AsyncLoadSuit(CStateManager& mgr);
void TouchModel(const CStateManager&) const;
void Render(const CStateManager&, const CVector3f&, const CModelFlags&, const CActorLights*) const;
void AcceptScriptMsg(EScriptObjectMessage, TUniqueId, CStateManager&);
void SetTransform(const CTransform4f& xf) { x220_xf = xf; }
CTransform4f GetTransform() const { return x220_xf; }
CTransform4f& AuxTransform() { return x2e0_auxXf; }
CGunController* GunController() { return x328_gunController.get(); }
const CGunController* GetGunController() const { return x328_gunController.get(); }
EArmState GetAnimState() const { return x334_animState; }
void SetAnimState(const EArmState state) { x334_animState = state; }
+6
View File
@@ -363,6 +363,9 @@ public:
TUniqueId GetOrbitTargetId() const { return x310_orbitTargetId; }
const CVector3f& GetOrbitPoint() const { return x314_orbitPoint; }
TUniqueId GetOrbitNextTargetId() const { return x33c_orbitNextTargetId; }
TUniqueId GetAttachedActor() const { return x26c_attachedActor; }
bool GetControlsFrozen() const { return x760_controlsFrozen; } // name?
float GetDistanceUnderWater() const { return x828_distanceUnderWater; }
TUniqueId GetScanningObjectId() const { return x3b4_scanningObject; }
EGrappleState GetGrappleState() const { return x3b8_grappleState; }
bool IsInFreeLook() const { return x3dc_inFreeLook; }
@@ -370,6 +373,7 @@ public:
bool GetFreeLookStickState() const { return x3de_lookAnalogHeld; }
TUniqueId GetAimTargetId() const { return x3f4_aimTarget; }
EPlayerCameraState GetCameraState() const { return x2f4_cameraState; }
TUniqueId GetRidingPlatformId() const { return x82e_ridingPlatform; }
void SetCameraState(EPlayerCameraState state, CStateManager& mgr);
EGunHolsterState GetGunHolsterState() const { return x498_gunHolsterState; }
NPlayer::EPlayerMovementState GetPlayerMovementState() const { return x258_movementState; }
@@ -378,6 +382,7 @@ public:
const CVector3f& GetAssistedTargetAim() const { return x480_assistedTargetAim; }
// CPlayer::GetFlipSpiderBallControlY() const weak
// CPlayer::GetFlipSpiderBallControlX() const weak
float GetDeathTime() const { return x9f4_deathTime; } // name?
bool IsInsideFluid() const { return x9c4_31_inWaterMovement; }
@@ -393,6 +398,7 @@ public:
float GetGravity() const;
float GetAttachedActorStruggle() const;
const CPlayerEnergyDrain& GetPlayerEnergyDrain() const { return x274_energyDrain; }
float GetGunAlpha() const { return x494_gunAlpha; }
void SetAttachedActorStruggle(float struggle) { xa28_attachedActorStruggle = struggle; }
+35 -3
View File
@@ -173,14 +173,46 @@ public:
void SetPhazonBeamFeedback(bool);
void SetAssistAimTransform(const CTransform4f& xf) { x478_assistAimXf = xf; }
CTransform4f GetTransform() const { return x3e8_xf; }
float GetChargeBeamFactor() const { return x834_24_charging ? x340_chargeBeamFactor : 0.f; }
EChargeState GetChargeState() const { return x330_chargeState; }
CPlayerState::EBeamId GetPrimaryWeaponId() const { return x310_currentBeam; }
CPlayerState::EBeamId GetPrimaryDestWeaponId() const { return x314_nextBeam; }
uint GetSecondaryItemId() const { return x318_comboAmmoIdx; }
int GetBombsPending() const { return x308_bombCount; }
uint GetFiring() const { return x2ec_lastFireButtonStates; }
float GetHoloTransitionFactor() const { return x678_morph.GetTransitionFactor(); }
TUniqueId GetPowerBombId() const { return x53a_powerBomb; }
static float GetTractorBeamFactor() { return kTractorBeamFactor; }
static const CVector3f& GetGunScale() { return kScaleVector; }
int GetStateFlags() const { return x2f8_stateFlags; }
void SetStateFlags(int flags) { x2f8_stateFlags = flags; }
bool IsWeaponStateSet(int state) const { return (x2f8_stateFlags & state) == state; }
void EnableWeaponState(int state) { x2f8_stateFlags |= state; }
void DisableWeaponState(int state) { x2f8_stateFlags &= ~state; }
void ResetToBeam() {
if (!IsWeaponStateSet(0x8)) {
EnableWeaponState(0x1);
DisableWeaponState(0x16);
}
x318_comboAmmoIdx = 0;
x31c_missileMode = kMM_Inactive;
}
void ResetToMissile() {
DisableWeaponState(0x1);
EnableWeaponState(0x6);
x318_comboAmmoIdx = 1;
x31c_missileMode = kMM_Active;
}
bool CanCycleShoot() const {
return x32c_chargePhase == kCP_NotCharging && int(x318_comboAmmoIdx) != 1;
}
bool IsCharging() const { return x834_24_charging; }
void SetTransform(CTransform4f xf) { x3e8_xf = xf; }
CTransform4f GetGunMotionTransform() const { return x4a8_gunWorldXf; }
CGrappleArm& GrappleArm() { return *x740_grappleArm.get(); }
CGrappleArm& GetGrappleArm() const { return *x740_grappleArm.get(); }
bool IsFidgeting() const { return x833_24_notFidgeting; }
@@ -285,10 +317,10 @@ private:
uint x2f4_fireButtonStates;
// 0x1: beam mode, 0x2: missile mode, 0x4: missile ready, 0x8: morphing, 0x10: combo fire
int x2f8_stateFlags;
uint x2fc_fidgetAnimBits;
int x2fc_fidgetAnimBits;
uint x300_remainingMissiles;
uint x304_;
uint x308_bombCount;
int x308_bombCount;
uint x30c_rapidFireShots;
CPlayerState::EBeamId x310_currentBeam;
CPlayerState::EBeamId x314_nextBeam;
@@ -296,7 +328,7 @@ private:
EMissileMode x31c_missileMode;
CPlayerState::EBeamId x320_currentAuxBeam;
EIdleState x324_idleState;
float x328_animSfxPitch;
int x328_animSfxPitch;
EChargePhase x32c_chargePhase;
EChargeState x330_chargeState;
uint x334_;
@@ -74,6 +74,7 @@ public:
bool IsRider(TUniqueId id) const;
bool IsSlave(TUniqueId id) const;
void BuildSlaveList(CStateManager& mgr);
void AddSlave(TUniqueId id, CStateManager& mgr);
rstl::vector< SRiders >& GetStaticSlaves() { return x328_slavesStatic; }
rstl::vector< SRiders >& GetDynamicSlaves() { return x338_slavesDynamic; }
+11 -53
View File
@@ -3,67 +3,24 @@
#include "types.h"
#include "MetroidPrime/CDamageInfo.hpp"
#include "MetroidPrime/Tweaks/ITweakObject.hpp"
#include "Kyoto/Math/CVector3f.hpp"
#include "Kyoto/TOneStatic.hpp"
#include "rstl/reserved_vector.hpp"
struct SShotParam {
uint x0_weaponType;
bool x4_24_charged : 1;
bool x4_25_combo : 1;
bool x4_26_instaKill : 1;
float x8_damage;
float xc_radiusDamage;
float x10_radius;
float x14_knockback;
bool x18_24_noImmunity : 1;
SShotParam()
: x0_weaponType(-1)
, x4_24_charged(false)
, x4_25_combo(false)
, x4_26_instaKill(false)
, x8_damage(0.f)
, xc_radiusDamage(0.f)
, x10_radius(0.f)
, x14_knockback(0.f)
, x18_24_noImmunity(false) {}
SShotParam(float chargeFactor, const SShotParam& other) {
x14_knockback = chargeFactor * other.x14_knockback;
x0_weaponType = other.x0_weaponType;
x10_radius = chargeFactor * other.x10_radius;
x8_damage = chargeFactor * other.x8_damage;
x18_24_noImmunity = false;
*(reinterpret_cast<int*>(this) + 1) = *(reinterpret_cast<const int*>(&other) + 1);
xc_radiusDamage = chargeFactor * other.xc_radiusDamage;
}
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;
SShotParam x4_normal;
SChargedShotParam x20_charged;
CDamageInfo x4_normal;
CDamageInfo x20_charged;
SWeaponInfo() : x0_coolDown(0.1f) {}
explicit SWeaponInfo(CInputStream& in);
};
class CTweakPlayerGun : public ITweakObject, public TOneStatic<CTweakPlayerGun> {
class CTweakPlayerGun : public ITweakObject, public TOneStatic< CTweakPlayerGun > {
public:
CTweakPlayerGun(CInputStream& in);
~CTweakPlayerGun() override;
@@ -91,6 +48,8 @@ public:
const SWeaponInfo& GetBeamInfo(int beam) const;
const CDamageInfo& GetBombInfo() const { return x70_bomb; }
// private:
float x4_upLookAngle;
float x8_downLookAngle;
@@ -113,12 +72,11 @@ public:
CVector3f x4c_gunPosition;
CVector3f x58_;
CVector3f x64_grapplingArmPosition;
SShotParam x70_bomb;
SShotParam x8c_powerBomb;
SShotParam x1d4_missile;
CDamageInfo x70_bomb;
CDamageInfo x8c_powerBomb;
CDamageInfo x1d4_missile;
SWeaponInfo xa8_beams[5];
rstl::reserved_vector< SShotParam, 5 >
x1f0_combos; // Originally rstl::reserved_vector<SShotParam,5>
rstl::reserved_vector< CDamageInfo, 5 > x1f0_combos;
rstl::reserved_vector< float, 5 > x280_ricochetData;
};
@@ -3,7 +3,10 @@
#include "types.h"
#include "MetroidPrime/CEntityInfo.hpp"
#include "MetroidPrime/Player/CPlayerState.hpp"
#include "MetroidPrime/TGameTypes.hpp"
#include "MetroidPrime/Weapons/WeaponCommon.hpp"
class CWeaponDescription;
class CGenDescription;
@@ -14,6 +17,19 @@ public:
CAuxWeapon(TUniqueId playerId);
bool IsComboFxActive(const CStateManager& mgr) const;
bool UpdateComboFx(float dt, const CVector3f& scale, const CVector3f& firePos,
const CTransform4f& targetXf, CStateManager& mgr);
TUniqueId HasTarget(const CStateManager& mgr) const;
void SetNewTarget(TUniqueId target, CStateManager& mgr);
void StopComboFx(CStateManager& mgr, bool deactivate);
void Load(int curBeam, CStateManager& mgr);
void Fire(float dt, bool underwater, CPlayerState::EBeamId currentBeam,
CPlayerState::EChargeStage chargeState, const CTransform4f& xf, CStateManager& mgr,
EWeaponType type, TUniqueId homingId);
void RenderMuzzleFx() const;
void AcceptScriptMsg(EScriptObjectMessage, TUniqueId, CStateManager&);
bool IsLoaded() const { return x80_24_isLoaded; }
private:
TCachedToken< CWeaponDescription > x0_missile;
+2 -2
View File
@@ -9,8 +9,8 @@ class CElementGen;
class CGenDescription;
class CBomb : public CWeapon {
public:
CBomb(const TToken< CGenDescription >& particle1, const TToken< CGenDescription >& particle2,
TUniqueId uid, TAreaId aid, TUniqueId playerId, float f1, const CTransform4f& xf,
CBomb(TToken< CGenDescription > particle1, TToken< CGenDescription > particle2, TUniqueId uid,
TAreaId aid, TUniqueId playerId, float f1, const CTransform4f& xf,
const CDamageInfo& dInfo);
~CBomb();
+3 -3
View File
@@ -30,7 +30,6 @@ class CTransform4f;
class CModelFlags;
class CActorLights;
class SWeaponInfo;
class SShotParam;
enum EFrozenFxType {
kFFT_None,
@@ -59,6 +58,7 @@ private:
};
class CGunWeapon {
friend class CPlayerGun;
public:
CGunWeapon(CAssetId ancsId, EWeaponType type, TUniqueId playerId, EMaterialTypes playerMaterial,
@@ -74,7 +74,7 @@ public:
// Virtual Methods
virtual void Reset(CStateManager& mgr);
virtual void PlayAnim(const NWeaponTypes::EGunAnimType type, const bool loop);
virtual void PlayAnim(const NWeaponTypes::EGunAnimType type, bool loop);
virtual void PreRenderGunFx(const CStateManager& mgr, const CTransform4f& xf);
virtual void PostRenderGunFx(const CStateManager& mgr, const CTransform4f& xf);
virtual void UpdateGunFx(const bool shotSmoke, const float dt, const CStateManager& mgr,
@@ -124,7 +124,7 @@ public:
CDamageInfo GetDamageInfo(CStateManager& mgr, CPlayerState::EChargeStage chargeState,
float chargeFactor);
CDamageInfo GetShotDamageInfo(const SShotParam& shotParam, CStateManager& mgr) const;
CDamageInfo GetShotDamageInfo(const CDamageInfo& shotParam, CStateManager& mgr) const;
static const char* GetMuzzleLocator() { return skMuzzleLocator; }
+3 -1
View File
@@ -8,6 +8,8 @@
#include <types.h>
class CPhazonBeam : public CGunWeapon {
friend class CPlayerGun;
public:
CPhazonBeam(CAssetId characterId, EWeaponType type, TUniqueId playerId,
EMaterialTypes playerMaterial, const CVector3f& scale);
@@ -34,7 +36,7 @@ public:
void Unload(CStateManager& mgr) override;
bool IsLoaded() const override;
void CreateBeam(CStateManager& mgr);
void AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId sender, CStateManager& mgr);
void AcceptScriptMsg(EScriptObjectMessage, TUniqueId, CStateManager&);
private:
TToken< CModel > mVeins;
+3
View File
@@ -55,9 +55,12 @@ public:
TUniqueId GetOwnerId() const { return xec_ownerId; }
EWeaponType GetType() const { return xf0_weaponType; }
CMaterialFilter GetFilter() const { return xf8_filter; }
// TODO: names?
CDamageInfo& OrigDamageInfo() { return x110_origDamageInfo; }
CDamageInfo& CurrentDamageInfo() { return x12c_curDamageInfo; }
const CDamageInfo& GetCurrentDamageInfo() const { return x12c_curDamageInfo; }
float GetDamageDuration() const { return x150_damageDuration; }
float GetInterferenceDuration() const { return x154_interferenceDuration; }
void SetOwnerId(TUniqueId id) { xec_ownerId = id; }
@@ -48,6 +48,8 @@ public:
CModelData& GetModelData() { return x0_modelData; }
const CModelData& GetModelData() const { return x0_modelData; }
CGunController& GunController() { return x4c_gunController; }
const CGunController& GunController() const { return x4c_gunController; }
bool IsAnimPlaying() const { return xb8_24_animPlaying; }
private:
@@ -11,6 +11,8 @@ class CSfxHandle;
class CAnimData;
class CStateManager;
class CPrimitive;
class CVector3f;
struct TAreaId;
namespace NWeaponTypes {
@@ -29,6 +31,10 @@ enum EGunAnimType {
};
CSfxHandle play_sfx(const ushort sfx, const bool underwater, const bool looped, const short pan);
void do_sound_event(rstl::pair< u16, CSfxHandle >& sfxHandle, int& pitch, bool doPitchBend,
uint soundId, float weight, uint flags, float falloff, float maxDist,
uchar minVol, uchar maxVol, const CVector3f& posToCam, const CVector3f& pos,
TAreaId aid, CStateManager& mgr);
void primitive_set_to_token_vector(const CAnimData& animData,
const rstl::set< CPrimitive >& primSet,
+2 -2
View File
@@ -23,8 +23,8 @@ enum EWeaponType {
class CWeaponMode {
public:
explicit CWeaponMode(const EWeaponType type = kWT_None, const bool charged = false,
const bool comboed = false, const bool instaKill = false)
CWeaponMode(const EWeaponType type = kWT_None, const bool charged = false,
const bool comboed = false, const bool instaKill = false)
: x0_weaponType(type)
, x4_24_charged(charged)
, x4_25_comboed(comboed)

Some files were not shown because too many files have changed in this diff Show More