[Starlight] 構造体まとめ

Hack

構造体の意味

構造体の定義を把握しておけば、ある値を調べたいときに先頭アドレスさえわかればオフセットがいくらであるかをすぐに調べることができ、目的の値にアクセスするのが非常に簡単になります。

Game::Coop

Game::Coop::Wave

WAVEの情報が定義されている構造体です。三つほどなにを示しているのかわからないデータがあります。

struct Game::Coop::Wave
{
  _DWORD gap0x0;
  _DWORD tide;
  _DWORD gap0x8;
  _DWORD gap0xC;
  _DWORD event;
};

Game::Coop::Setting

前半部分に何が入っているかはさっぱりわからないのがネック。後半部分は先程定義したWAVE情報が入っています。

struct Game::Coop::Setting
{
  _BYTE gap[5348];
  Game::Coop::Wave next;
  Game::Coop::Wave prev;
  Game::Coop::Wave wave1;
  Game::Coop::Wave wave2;
  Game::Coop::Wave wave3;
};

Game::Coop::SpawnGeyser

カンケツセンの座標が定義されている構造体です。

struct Game::Coop::SpawnGeyser
{
  _BYTE gap[924];
  sead::Vector3 vector;
};

Game::Coop::EventDirector

夜WAVEの情報が定義されている構造体です。

struct Game::Coop::EventDirector
{
  Cmn::Actor actor;
  sead::IDisposer *idisposer;
  _QWORD eventNone;
  _QWORD eventRush;
  _QWORD eventGeyser;
  _QWORD eventDozer;
  _QWORD eventRally;
  _QWORD eventFog;
  _QWORD eventMissile;
  _BYTE gap[788];
  uint32_t activeMax;
};

Game::Coop::EnemyDirector

今のところはなにをしているのかさっぱりわからない構造体です。

struct Game::Coop::EnemyDirector
{
  Cmn::Actor actor;
  sead::IDisposer *disposer;
};

Game::Coop::EventGeyser

カンケツセンイベントを司る構造体です。

struct Game::Coop::EventGeyser
{
  Cmn::Actor actor;
  Lp::Utl::StateMachine stateMachine;
  sead::Random random1;
  sead::Random random2;
  sead::PtrArrayImpl ptrArray;
  _QWORD succPos;
  _QWORD qword3D0;
  _QWORD goalPos;
  _QWORD qword3F0;
  _DWORD qword3F8;
  sead::Vector3 qword3FC;
};

Game::

Game::Player

struct Game::Player
{
  Cmn::Actor actor;
  _BYTE byte348[240];
  Game::PlayerSpectatorBirdCamera *mPlayerSpectatorBirdCamera[2];
  _BYTE somestuff[56];
  uint32_t mIndex;
  Cmn::PlayerInfo *mPlayerInfo;
  Game::PlayerMgr *PlayerMgr;
  _BYTE moarstuff[688];
  sead::Vector3 mPosition;
  _BYTE morestuff[1916];
  Game::PlayerParam *mPlayerParam;
  Game::PlayerGamePad *mPlayerGamePad;
  Game::PlayerRemote *mPlayerRemote;
  Game::PlayerDokanWarp *mPlayerDokanWarp;
  Game::PlayerSideStep *mPlayerSiteStep;
  Game::PlayerForwardRoll *mPlayerForwardRoll;
  Game::PlayerJetpack *mPlayerJetpack;
  Game::PlayerSuperArmor *mPlayerSuperArmor;
  Game::PlayerSuperLanding *mPlayerSuperLanding;
  Game::PlayerAquaBall *mPlayerAquaBall;
  Game::PlayerSquidCannon *mPlayerSquidCannon;
  Game::PlayerStatus *mPlayerStatus;
  Game::PlayerStepPaint *mPlayerStepPaint;
  Game::PlayerMove *mPlayerMove;
  Game::PlayerTrouble *mPlayerTrouble;
  Game::PlayerInputAction *mPlayerInputAction;
  Game::PlayerInputCamera *mPlayerInputCamera;
  Game::PlayerInputVictoryClam *mPlayerInputVictoryClam;
  Game::PlayerInkAction *mPlayerInkAction1;
  Game::PlayerCollision *mPlayerCollision;
  Game::PlayerModel *mPlayerModel;
  uint64_t silhouette;
  Game::PlayerMotion *mPlayerMotion;
  Game::PlayerHairBodyAnimSlot *mPlayerHairBodyAnimSlot;
  Game::PlayerEffect *mPlayerEffect;
  Game::PlayerInkAction *mPlayerInkAction2;
  Game::PlayerJointHuman *mPlayerJointHuman;
  Game::PlayerJointSquid *mPlayerJointSquid;
  Game::PlayerBombHandheld *mPlayerBombHandheld[2];
  Cmn::PlayerCustomMgr *mPlayerCustomMgr;
  Game::PlayerCustomInfo *mPlayerCustomInfo;
  Game::PlayerAccessoryMgr *mPlayerAccessoryMgr;
  Game::PlayerNetControl *mPlayerNetControl;
  Game::PlayerDamage *mPlayerDamage[3];
  Game::PlayerGearSkillMgr *mPlayerGearSkillMgr;
  Game::PlayerCoopSeqRoundSetup *mPlayerCoopSeqRoundSetup;
  Game::PlayerCoopFloat *mPlayerCoopFloat;
  Game::PlayerCoopGoldenIkura *mPlayerCoopGoldenIkura;
  Game::PlayerCoopSkillMgr *mPlayerCoopSkillMgr;
  Game::PlayerComeOnNice *mPlayerComeOnNice;
  Game::PlayerOffenseAssistLog *mPlayerOffenseAssistLog;
  Game::PlayerVictimLog *mPlayerVictimLog;
  Game::PlayerSpectator *mPlayerSpectator;
  Game::PlayerMissionDunkShoot *mPlayerMissionDunkShoot;
  Game::PlayerMissionSeqWeaponDrone *mPlayerMissionSeqWeaponDrone;
  Game::PlayerWeaponDrone *mPlayerWeaponDrone;
  Game::PlayerMissionOctaSeqEntrance *mPlayerMissionOctaSeqEntrance;
  Game::PlayerMissionOctaSeqPinch *mPlayerMissionOctaSeqPinch;
  Game::PlayerGrindRail *mPlayerGrindRail;
  Game::PlayerGrindRailVersus *mPlayerGrindRailVersus;
  Game::PlayerDashPanel *mPlayerDashPanel;
  Game::PlayerInkRailVersus *mPlayerInkRailVersus;
};

Game::Coop::Player

なくてもいいけど、定義しておいたほうが多分便利な構造体。

struct Game::Coop::Player
{
  uint32_t mRoundBankedPowerIkuraNum;
  uint32_t mGotGoldenIkuraNum;
  uint32_t mRoundBankedGoldenIkuraNum;
  uint32_t mTotalBankedGoldenIkuraNum;
  uint32_t unknown[8];
  uint32_t mTotalRobbedGoldenIkuraNum;
  uint32_t _0x34;
  uint32_t _0x38;
  uint32_t mTotalDefeatedSalmonidsNum;
  uint32_t mTotalDefeatedSakelienStandardNum;
  uint32_t mTotalDefeatedSakelienLargeNum;
  uint32_t mTotalDefeatedSakelienSmallNum;
  uint32_t _0x4C;
  uint32_t _0x50;
  uint32_t _0x54;
  uint32_t _0x58;
  uint32_t _0x5C;
  uint32_t _0x60;
  uint32_t _0x64;
  uint32_t _0x68;
  uint32_t _0x6C;
  uint32_t _0x70;
  uint32_t _0x74;
  uint32_t _0x78;
  uint32_t _0x7C;
  uint32_t _0x80;
  uint32_t _0x84;
  uint32_t _0x88;
  uint32_t _0x8C;
  uint32_t _0x90;
  uint32_t _0x94;
  uint32_t _0x98;
  uint32_t mTotalHitNum;
  uint32_t _0xA0;
  uint32_t _0xA4;
  uint32_t _0xA8;
  uint32_t _0xAC;
  uint32_t _0xB0;
  uint32_t _0xB4;
  uint32_t _0xB8;
  uint32_t _0xBC;
  uint32_t _0xC0;
  uint32_t _0xC4;
  uint32_t _0xC8;
  uint32_t _0xCC;
  uint32_t _0xD0;
  uint32_t _0xD4;
  uint32_t _0xD8;
  uint32_t _0xDC;
  uint32_t _0xE0;
  uint32_t _0xE4;
  uint32_t _0xE8;
  uint32_t _0xEC;
  uint32_t mTotalGotGoldenIkuraNum[2];
  uint32_t _0xF8;
  uint32_t _0xFC;
};

Game::Coop::PlayerDirector

本当はもっと大きい構造体なんだけど、後ろのほうがどうなっているかはよくわかってない。

struct Game::Coop::PlayerDirector
{
  _BYTE gap[880];
  Game::Coop::Player player[4];
};

sead

sead::IDisposer

struct sead::IDisposer
{
  void *vtable;
  sead::Heap *mHeapPtr;
  uint64_t _10;
  uint64_t _18;
};

sead::SafeStringBase

文字列をバッファアンダーランエラーを起こさずに読み込む構造体、多分。

struct sead::SafeStringBase
{
  void *vtabe;
  char *mCharPtr;
};

sead::BufferedSafeStringBase

文字列を扱う構造体だと思うのですが、詳しくはよくわかってないです。

struct __cppobj sead::BufferedSafeStringBase : sead::SafeStringBase
{
  char *mBufferedString;
};

sead::Random

線形合同法で疑似乱数を生成する構造体です。

struct sead::Random
{
  _DWORD seed1;
  _DWORD seed2;
  _DWORD seed3;
  _DWORD seed4;
};

sead::Vector3

三次元の座標情報を定義する構造体です。

struct sead::Vector3
{
  float x;
  float y;
  float z;
};

sead::PtrArrayImpl

配列の構造体です。

struct sead::PtrArrayImpl
{
  uint32_t mLength;
  uint64_t *ptr;
};

sead::TreeNode

struct sead::TreeNode
{
  sead::TreeNode *mRoot;
  sead::TreeNode *mChildNode;
  sead::TreeNode *mParent;
  u64 _18;
  u64 mValue;
};

sead::Color4f

struct sead::Color4f
{
  uint8_t r;
  uint8_t g;
  uint8_t b;
  uint8_t a;
};

Lp

Lp::Utl::stateMachine

色んな所に使われている構造体です。

struct Lp::Utl::StateMachine
{
  void *vtable;
  _QWORD qword8;
  _DWORD currentStateIdx;
  _DWORD ranCount;
  _DWORD lastStateIdx;
  _DWORD lastRanCount;
  _DWORD firstStateIdx;
  _DWORD firstStateRanCount;
  _BYTE byte28[1];
  _BYTE byte29[1];
  sead::PtrArrayImpl states;
  _QWORD totalStates;
  _DWORD *stateNames;
};

Lp::Sys::xLinkIUser

さっぱりわかりません。

struct Lp::Sys::XLinkIUser
{
  void *vtable;
  _QWORD modelCount;
  gsys::Model **models;
  _QWORD actionSlotCount;
  sead::SafeStringBase **actionSlots;
  _QWORD localPropertyCount;
  _QWORD localProperties;
};

Lp::Sys::Actor

これもよくわからない構造体です。

struct Lp::Sys::Actor
{
  void *vtable;
  u64 LpActor_x8;
  sead::TreeNode mTreeNodes[2];
  char LpActor_x60[184];
  u64 LpActor_x118;
  u64 LpActor_x120;
  u64 LpActor_x128;
  u64 LpActor_x130;
  u64 LpActor_x138;
  u64 LpActor_x140;
  u64 LpActor_x148;
  u64 LpActor_x150[16];
  char LpActor_x1D0[136];
  u32 LpActor_x258;
  u32 LpActor_x25C;
  u64 mSystemTick;
  _QWORD LpActor_x268;
  sead::BufferedSafeStringBase mLpActorStr;
  char LpActor_x288[64];
  u64 LpActor_x2C8;
  u64 LpActor_x2D0;
  u64 LpActor_x2D8;
  u64 LpActor_x2E0;
};

Cmn

Cmn::PlayerInfo

struct Cmn::PlayerInfo
{
  uint32_t PlayerInfo_x0;
  uint32_t PlayerInfo_x4;
  uint32_t PlayerInfo_x8;
  uint32_t PlayerInfo_xC;
  uint32_t mPlayerIndex;
  uint16_t mValid;
  char16_t mPlayerName[17];
  Cmn::Def::Team mTeam;
  uint32_t mModelType;
  u32 mModelId;
  uint32_t mSkinColorId;
  uint32_t mEyeColorId;
  Cmn::Def::Weapon mWeapon;
  uint32_t PlayerInfo_x5C;
  uint32_t PlayerInfo_x60;
  Cmn::Def::Gear mGears[3];
  uint32_t mTankId;
  uint32_t mBottomId;
  sead::Color4f mColor;
  uint32_t mPlayerRank;
  uint32_t mStarRank;
  uint32_t mUdemaeGrades[5];
  uint32_t PlayerInfo_xF8;
  uint32_t PlayerInfo_xFC;
  Cmn::Def::MMR mMMR1;
  Cmn::Def::MMR mMMR2;
  char gap_x120[128];
};

Cmn::Actor

さっぱりわからない構造体です。

struct Cmn::Actor
{
  Lp::Sys::Actor lpActor;
  Lp::Sys::XLinkIUser xlinkUser;
  Lp::Sys::XLink *xLink;
  unsigned int team;
  Cmn::ComponentHolder *componentHolder;
  gsys::Model *model;
  Lp::Utl::StateMachine *stateMachine;
};

Cmn::Def::MMR

struct Cmn::Def::MMR
{
  float mRate;
  float mRD;
  float mVolatility;
  float unk;
};

Cmn::Def::Team

Cmn::Def::Weapon

struct Cmn::Def::Weapon
{
  uint32_t mWeapon[3];
  uint32_t mTurfedInk;
};

Cmn::Def::Gear

struct Cmn::Def::Gear
{
  uint32_t mId;
  uint32_t mUnlockedSlotCount;
  uint32_t _8;
  uint32_t mMainSkill;
  uint32_t mSkills[3];
  uint32_t _1C;
};

コメント

タイトルとURLをコピーしました