Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions configure.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ def do_clean(version: str, build_dir: Path) -> None:
config.binutils_tag = "2.45"
config.compilers_tag = "20250812"
config.mwccps2_tag = "3.0.1b198-051011"
config.objdiff_tag = "v3.5.1"
config.objdiff_tag = "v3.7.1"
config.wibo_tag = "1.0.0-beta.5"

# Project
Expand All @@ -209,15 +209,16 @@ def do_clean(version: str, build_dir: Path) -> None:
# Base flags for MWCCPS2 (C++ game code)
cflags_base = [
"-lang=c++",
"-O3",
"-O3,p",
"-sdatathreshold 0",
"-i include",
f"-DBUILD_VERSION={version_num}",
]

# Flags for C SDK libraries (no -lang=c++ override)
cflags_c = [
"-lang=c",
"-O3",
"-O3,p",
"-i include",
f"-DBUILD_VERSION={version_num}",
]
Expand Down
10 changes: 10 additions & 0 deletions include/Develop/Projects/SR2/pgm/lib/OO/PS2/PS2System.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#ifndef PS2SYSTEM_HPP
#define PS2SYSTEM_HPP

#include "Develop/Projects/SR2/pgm/lib/OO/core/Singleton.hpp"
#include "Develop/Projects/SR2/pgm/lib/OO/core/OOSystem.hpp"

// total size: 0x4
class clsPfSystem : public clsSingleton<clsPfSystem>, public clsOOSystem {};

#endif // PS2SYSTEM_HPP
16 changes: 16 additions & 0 deletions include/Develop/Projects/SR2/pgm/lib/OO/core/OOSystem.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#ifndef OOSYSTEM_HPP
#define OOSYSTEM_HPP

// OO system base
class clsOOSystem {
public:
void* __vtable; // 0x00
int m_eSoundMode; // 0x04
int m_eMessageLanguage; // 0x08
int m_eVoiceLanguage; // 0x0C
float m_f32FrameRate; // 0x10
float m_f32FrameRateAdd; // 0x14
float m_f32FrameRateAdd2; // 0x18
};

#endif // OOSYSTEM_HPP
11 changes: 11 additions & 0 deletions include/Develop/Projects/SR2/pgm/lib/OO/core/Singleton.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#ifndef SINGLETON_HPP
#define SINGLETON_HPP

// Singleton base class — provides a global instance pointer per type (header-only template)
template<class T>
class clsSingleton {
public:
static T* m_tpcSingleton;
};

#endif // SINGLETON_HPP
78 changes: 78 additions & 0 deletions include/Develop/Projects/SR2/pgm/src/Game/Game.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
#ifndef GAME_HPP
#define GAME_HPP

#include "Develop/Projects/SR2/pgm/lib/OO/core/Singleton.hpp"
#include "Develop/Projects/SR2/pgm/src/Game/Story/StoryMgr.hpp"
#include "Develop/Projects/SR2/pgm/src/Game/WorldGp/WorldGpMgr.hpp"
#include "Develop/Projects/SR2/pgm/src/Game/TimeAttack/TimeAtkMgr.hpp"

// Enum for game modes
enum enmMode {
GAME_MODE___NONE = 0,
GAME_MODE___ADVERTISE = 1,
GAME_MODE___TITLE_DEMO = 2,
GAME_MODE___FREE_RACE = 3,
GAME_MODE___TIME_ATTACK = 4,
GAME_MODE___STORY = 5,
GAME_MODE___WORLD_GP = 6,
GAME_MODE___MISSION = 7,
GAME_MODE___TUTORIAL = 8,
GAME_MODE___SURVIVAL_RELAY = 9,
GAME_MODE___SURVIVAL_BALL = 10,
GAME_MODE___SURVIVAL_BATTLE = 11,
GAME_MODE___EVENT = 12,
GAME_MODE___CREDIT = 13,
GAME_MODE___EASY_MENU = 14,
GAME_MODE___MODEL_VIEWER = 15,
GAME_MODE___MAX = 16,
};

// class stcSendAdv - used by stcSendNextModeData
class stcSendAdv {
public:
unsigned int u5CharaId : 5; // offset 0x0, size 0x4
unsigned int u2PadNo : 2; // offset 0x0, size 0x4
unsigned int u1Paddin : 1; // offset 0x0, size 0x4
unsigned int u8GearCtrlNo : 8; // offset 0x0, size 0x4
unsigned int u8Padding1 : 8; // offset 0x0, size 0x4
unsigned int u8Padding2 : 8; // offset 0x0, size 0x4
};

// class stcSendNextModeData - used by clsGameMgr
class stcSendNextModeData {
public:
class stcSendAdv sSendAdv[8]; // offset 0x0, size 0x20
enum enmMode eNextMode; // offset 0x20, size 0x4
signed char s8StageNo; // offset 0x24, size 0x1
signed char s8PlayerNum; // offset 0x25, size 0x1
signed char s8UserNum; // offset 0x26, size 0x1
signed char s8UniqueData; // offset 0x27, size 0x1
};

// class clsGameMgr
class clsGameMgr : public clsSingleton<clsGameMgr> {
public:
class stcSendNextModeData m_sSendNextModeData; // offset 0x4, size 0x28
class clsStoryMgr cStoryMgr; // offset 0x2C, size 0x14
class clsWorldGpMgr cWorldGpMgr; // offset 0x40, size 0x28
class clsTimeAtkMgr cTimeAtkMgr; // offset 0x68, size 0x14
unsigned char * m_pu8MapBuffer; // offset 0x7C, size 0x4
enum enmMode m_eMode; // offset 0x80, size 0x4
unsigned int m_u32EtcUnlock; // offset 0x84, size 0x4
unsigned char m_eResultSelect; // offset 0x88, size 0x1
signed char m_s8TitleDemoNo; // offset 0x89, size 0x1
signed char m_s8SecretTrickType; // offset 0x8A, size 0x1
signed char m_s8SecretCommnadCount[2]; // offset 0x8B, size 0x2
unsigned char m_bLogoSkip; // offset 0x8D, size 0x1
unsigned char m_bStartLoad; // offset 0x8E, size 0x1
unsigned char m_bStartTutorial; // offset 0x8F, size 0x1
unsigned char m_abMissionUnLock[16][4]; // offset 0x90, size 0x40
unsigned char m_abStageUnLock[16]; // offset 0xD0, size 0x10
unsigned char m_abCharaUnLock[11]; // offset 0xE0, size 0xB
unsigned char m_bEnableRenderNowLodingExpand; // offset 0xEB, size 0x1

signed int getFreeAgp_Option() const;
signed int getRelayAgp_Option() const;
};

#endif // GAME_HPP
28 changes: 28 additions & 0 deletions include/Develop/Projects/SR2/pgm/src/Game/Story/StoryMgr.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#ifndef STORYMGR_HPP
#define STORYMGR_HPP

#include "usr/local/sega/nn/NNS.hpp"

class _NNS_TEXLIST;

// struct stcFormer - used by clsStoryMgr
struct stcFormer {
unsigned char u8StoryNo; // offset 0x0, size 0x1
unsigned char u8StageNo; // offset 0x1, size 0x1
unsigned char u8EventNo; // offset 0x2, size 0x1
unsigned char u8MovieNo; // offset 0x3, size 0x1
};

// class clsStoryMgr
class clsStoryMgr {
public:
class _NNS_TEXLIST * m_psTexList_Loading; // offset 0x4, size 0x4
unsigned int m_u32VictoryLimitMilliSec; // offset 0x8, size 0x4
struct stcFormer m_sFormer; // offset 0xC, size 0x4
unsigned char m_eVictoryType; // offset 0x10, size 0x1
unsigned char m_eHbMode; // offset 0x11, size 0x1
signed char m_s8StoryNo; // offset 0x12, size 0x1
signed char m_s8DetailNo; // offset 0x13, size 0x1
};

#endif // STORYMGR_HPP
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#ifndef TIMEATKMGR_HPP
#define TIMEATKMGR_HPP

// Enum for TimeAtkMgr start modes
enum enmStartMode {
START_NORMAL = 0,
START_GHOST_VS = 1,
START_WORLD_RANKING = 2,
START_FORCE_NORMAL = 3,
};

// class clsTimeAtkMgr
class clsTimeAtkMgr {
public:
enum enmStartMode m_eStartMode; // offset 0x4, size 0x4
signed int m_s32StageNo; // offset 0x8, size 0x4
unsigned char m_u8CharaId; // offset 0xC, size 0x1
unsigned char m_u8PadNo; // offset 0xD, size 0x1
unsigned char m_u8GearId; // offset 0xE, size 0x1
unsigned char m_bNextWorldRanking; // offset 0xF, size 0x1
unsigned char m_bStartWorldRanking; // offset 0x10, size 0x1
unsigned char m_bModeWorldRanking; // offset 0x11, size 0x1
};

#endif // TIMEATKMGR_HPP
18 changes: 18 additions & 0 deletions include/Develop/Projects/SR2/pgm/src/Game/WorldGp/WorldGpMgr.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#ifndef WORLDGPMGR_HPP
#define WORLDGPMGR_HPP

// class clsWorldGpMgr
class clsWorldGpMgr {
public:
unsigned int m_u32TotalTime; // offset 0x4, size 0x4
unsigned char m_eHbMode; // offset 0x8, size 0x1
unsigned char m_au8Points[8]; // offset 0x9, size 0x8
unsigned char m_au8Ranking[8]; // offset 0x11, size 0x8
unsigned char m_au8RankingPlayer[8]; // offset 0x19, size 0x8
unsigned char m_u8TopComCharacterId; // offset 0x21, size 0x1
signed char m_s8WorldGpStageNo; // offset 0x22, size 0x1
signed char m_s8DetailNo; // offset 0x23, size 0x1
unsigned char m_u8PlannedTopComId; // offset 0x24, size 0x1
};

#endif // WORLDGPMGR_HPP
62 changes: 62 additions & 0 deletions include/Develop/Projects/SR2/pgm/src/Havok/Havok.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
#ifndef HAVOK_HPP
#define HAVOK_HPP

#include "Develop/Projects/SR2/pgm/lib/OO/core/Singleton.hpp"

// total size: 0x4
class hkPadSpu {
public:
void* m_storage; // offset 0x0, size 0x4
};

// total size: 0x0
class hkCollisionListener {};

// total size: 0x10
class hkStepInfo {
public:
hkPadSpu m_startTime; // offset 0x0, size 0x4
hkPadSpu m_endTime; // offset 0x4, size 0x4
hkPadSpu m_deltaTime; // offset 0x8, size 0x4
hkPadSpu m_invDeltaTime; // offset 0xC, size 0x4
};

// total size: 0x20
class clsStepInfo : public hkStepInfo {
public:
hkPadSpu m_invDeltaTimeCaret2; // offset 0x10, size 0x4
};

// Used by hkWorld::updateCollisionFilterOnPhantom
enum hkUpdateCollectionFilterMode {
HK_UPDATE_COLLECTION_FILTER_IGNORE_SHAPE_COLLECTIONS = 0,
HK_UPDATE_COLLECTION_FILTER_PROCESS_SHAPE_COLLECTIONS = 1,
};

class hkWorldObject {};
class hkPhantom : public hkWorldObject {};
class hkShapePhantom : public hkPhantom {};
class hkSimpleShapePhantom : public hkShapePhantom {};

class hkCharacterProxy {
public:
hkPhantom* getShapePhantom();
};

class hkWorld {
public:
void updateCollisionFilterOnPhantom(hkPhantom* phantom, hkUpdateCollectionFilterMode mode);
};

// total size: 0x40
class clsHavok : public clsSingleton<clsHavok> {
public:
virtual ~clsHavok(); // vtable at 0x0
hkWorld* m_pcWorld; // offset 0x4, size 0x4
char* m_pu8StackBuff; // offset 0x8, size 0x4
hkCollisionListener* m_pcRigidListener; // offset 0xC, size 0x4
clsStepInfo m_cStepInfo; // offset 0x10, size 0x20
signed int m_s32ProcNum; // offset 0x30, size 0x4
};

#endif // HAVOK_HPP
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#ifndef CHARACTER_HPP
#define CHARACTER_HPP

#include "Develop/Projects/SR2/pgm/src/Object/Player/Performance.hpp"

class clsModelType_OB_TX;
class clsDrawAttackEffect_Task;
class clsPlayerTask;

// total size: 0x24
class stcData {
public:
char ac8Name_Debug[16]; // offset 0x00, size 0x10
float f32Height; // offset 0x10, size 0x4
float f32Weight; // offset 0x14, size 0x4
unsigned char u8Style; // offset 0x18, size 0x1
unsigned char u8SkillType; // offset 0x19, size 0x1
unsigned char u8BaseType; // offset 0x1A, size 0x1
unsigned char u8Reserve[1]; // offset 0x1B, size 0x1
float f32AttackLFrame; // offset 0x1C, size 0x4
float f32AttackRFrame; // offset 0x20, size 0x4
};

// total size: 0x60
class clsCharacter {
public:
clsModelType_OB_TX* m_pcModel; // 0x00, size 0x4
stcData* m_posData; // 0x04, size 0x4
clsPlayerTask* m_pcPlayer; // 0x08, size 0x4
float m_f32OffsetPosition; // 0x0C, size 0x4
unsigned char m_u8Type; // 0x10, size 0x1
enmBaseType m_eBaseType; // 0x14, size 0x4
enmWalkType m_eWalkType; // 0x18, size 0x4
unsigned char m_u8ModelType; // 0x1C, size 0x1
float m_f32DrawAlpha; // 0x20, size 0x4
float m_f32behaviorCnt; // 0x24, size 0x4
clsDrawAttackEffect_Task* m_pcDrawEffTsk; // 0x28, size 0x4
float m_sFollowOffsetVF[4]; // 0x30, size 0x10 (NNS_VECTORFAST)
float m_sFollowVF[4]; // 0x40, size 0x10 (NNS_VECTORFAST)
unsigned int m_u32FollowCalcNodeIdx; // 0x50, size 0x4
};

#endif // CHARACTER_HPP
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

class clsGearCtrl; // forward decl

namespace nspGear {
enum enmLevel {
LV_ERROR = -1,
LV_BASE = 0,
Expand All @@ -14,6 +15,8 @@ enum enmLevel {
MAX_LV_TABLE_NUM = 4,
MAX_MODELS = 9,
};
} // namespace nspGear
using namespace nspGear;

// For now, we assume this to be the correctly associated enum
enum enmRet {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
#ifndef GEARCTRL_HPP
#define GEARCTRL_HPP

#include "Develop/Projects/SR2/pgm/lib/OO/core/Singleton.hpp"
#include "Develop/Projects/SR2/pgm/lib/OO/PS2/PS2System.hpp"
#include "Develop/Projects/SR2/pgm/src/Object/Player/Gear/Gear.hpp"
#include "Develop/Projects/SR2/pgm/src/Object/Player/Performance.hpp"

class clsGear; // forward decl
class clsPrfm; // forward decl
#ifndef GEARCTRL_HPP
#define GEARCTRL_HPP

enum enmGearType {
GEAR_TYPE_BOARD = 0,
Expand Down Expand Up @@ -290,7 +294,7 @@ class clsGearCtrl : public clsGearCtrlBase {

// Class funcs
void behavior();
void setUnuseGearLevel(enum enmLevel eLevel /* r2 */);
void setUnuseGearLevel(nspGear::enmLevel eLevel /* r2 */);
void changeInitGearModel(enum enmInitBoard eBoard /* r2 */);
unsigned char getEquipsGearFlags();
//enum enmMotionType getEquipsGearBaseMotionType();
Expand Down
Loading
Loading