Files
Hyblocker 84e8af3325 Match more things across ROM variants (#385)
* fix: match marerr

* chore: marnamerefgen bathtubpeach

* marnamerefgen improvements

* match processmeter

* fix: match JointModel

* fix: symbol validation order

* feat: J3DModel NX

* feat: Application NX

* chore: styling fixes

* chore: attempt to properly decomp MapStaticObject for non JP

* fix: regression

* fix: code review feedback

* fix: forgor
2026-11-02 22:22:07 +03:00

132 lines
3.3 KiB
C++

#ifndef APPLICATION_HPP
#define APPLICATION_HPP
#include <Strategic/NameRefAry.hpp>
#include <Strategic/NameRefPtrAry.hpp>
#include <System/GameSequence.hpp>
#include <dolphin/types.h>
static const char* dummyMactorStringValue1 = "\0\0\0\0\0\0\0\0\0\0\0";
static const char* SMS_NO_MEMORY_MESSAGE = "メモリが足りません\n";
#ifdef VERSION_GMSP01_NX
extern u32 gl_stardust_frameid;
#endif
namespace JDrama {
class TDisplay;
class TDirector;
} // namespace JDrama
class JKRMemArchive;
class JKRHeap;
class TMarioGamePad;
class TSMSFader;
class TScenarioArchiveName;
class TProcessMeter;
class JKRAramBlock;
class JKRArchive;
class JUTResFont;
f32 SMSGetVSyncTimesPerSec();
#if defined(VERSION_GMSP01) || defined(VERSION_GMSP01_NX) \
|| defined(VERSION_GMSJ01_01)
f32 SMSGetRealVSyncTimesPerSec();
void load2DResource2Aram();
#endif
#ifdef VERSION_GMSP01_NX
extern bool s_RunOnGC;
#endif
f32 SMSGetAnmFrameRate();
void* SMSLoadArchive(const char*, void*, u32, JKRHeap*);
struct TARAMBlock {
/* 0x0 */ JKRAramBlock* mBlock;
/* 0x4 */ bool mIsCompressed;
};
void SMSLoadArchiveARAM(TARAMBlock* out_block, const char* path);
void SMSMountAramArchive(JKRMemArchive* archive, TARAMBlock& block);
JKRArchive* SMSSwitch2DArchive(const char* arc_path, TARAMBlock& block);
extern TARAMBlock gArBkConsole;
extern TARAMBlock gArBkGuide;
extern JUTResFont* gpSystemFont;
class TApplication {
public:
TApplication();
void* setupThreadFuncBoot();
void initialize();
void* setupThreadFuncLogo();
void initialize_bootAfter();
void initialize_nlogoAfter();
void initialize_processMeter();
void finalize();
bool checkAdditionalMovie();
void proc();
int gameLoop();
int drawDVDErr();
JKRMemArchive* mountStageArchive();
// Fabricated
const TGameSequence& getPrevArea() const { return mPrevArea; }
// Fabricated
const TGameSequence& getCurrArea() const { return mCurrArea; }
// Fabricated
TGameSequence& getNextArea() { return mNextArea; }
// fabricated
void setNextArea(const TGameSequence& next_area) { mNextArea = next_area; }
u32 getMovie() const { return mMovie; }
void setMovie(u32 v) { mMovie = v; }
// Fabricated
s8 getSaveFile() const { return mSaveFile; }
// Fabricated
void setSaveFile(s8 file) { mSaveFile = file; }
TSMSFader* getFader() const { return mFader; }
enum {
APP_STATE_WAIT = 0,
APP_STATE_DEFAULT = 1,
APP_STATE_BOOT = 2,
APP_STATE_NLOGO = 3,
APP_STATE_DONE = 4,
APP_STATE_GAMEPLAY = 5,
APP_STATE_MOVIE = 6,
APP_STATE_QUIT = 7,
APP_STATE_TITLE = 8,
APP_STATE_MENU = 9,
};
private:
/* 0x00 */ TApplication* mSelf;
/* 0x04 */ JDrama::TDirector* mDirector;
/* 0x08 */ u8 mAppState;
/* 0x0A */ TGameSequence mPrevArea;
/* 0x0E */ TGameSequence mCurrArea;
/* 0x12 */ TGameSequence mNextArea;
/* 0x18 */ u32 mMovie;
/* 0x1C */ JDrama::TDisplay* mDisplay;
/* 0x20 */ TMarioGamePad* mGamePads[4];
/* 0x30 */ TNameRefPtrAryT<TNameRefAryT<TScenarioArchiveName> >* unk30;
/* 0x34 */ TSMSFader* mFader;
/* 0x38 */ s8 mSaveFile;
/* 0x3C */ u32 unk3C;
/* 0x40 */ JKRHeap* mHeap;
/* 0x44 */ u16 unk44;
/* 0x46 */ u16 unk46;
/* 0x48 */ TProcessMeter* mMeter;
};
extern TApplication gpApplication;
// fabricated
inline TApplication* SMSGetApplication() { return &gpApplication; }
class TCardManager;
extern TCardManager* gpCardManager;
#endif