Merge remote-tracking branch 'upstream/main' into d_a_obj_boomerang

This commit is contained in:
robojumper
2025-07-23 00:20:43 +02:00
86 changed files with 5126 additions and 2443 deletions
+3 -1
View File
@@ -16,8 +16,8 @@
#include "nw4r/ut/ut_Color.h"
#include "s/s_State.hpp"
#include "toBeSorted/actor_event.h"
#include "toBeSorted/dowsing_target.h"
#include "toBeSorted/d_emitter.h"
#include "toBeSorted/dowsing_target.h"
class dAcItem_0xB34 {
public:
@@ -46,6 +46,8 @@ public:
static void spawnItem(u16 item, u32 room, const mVec3_c &pos, const mAng3_c &rot, u32 params, u32 arg);
static void spawnDrop(u16 item, u32 room, const mVec3_c &pos, const mAng3_c &rot);
static void giveItem22(ITEM_ID, s32, s32);
static void giveItem(ITEM_ID, s32, s32);
static u32 checkFlag(u32 flag);
static bool hasItem(u32 flag) {
return checkFlag(flag);
+61 -3
View File
@@ -1,22 +1,80 @@
#ifndef D_A_OBJ_CHEST_H
#define D_A_OBJ_CHEST_H
#include "common.h"
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/bg/d_bg_w.h"
#include "m/m3d/m_smdl.h"
#include "nw4r/g3d/res/g3d_resfile.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
#include "toBeSorted/actor_event.h"
#include "toBeSorted/attention.h"
#include "toBeSorted/d_d3d.h"
#include "toBeSorted/dowsing_target.h"
class dAcOChest_c : public dAcObjBase_c {
public:
dAcOChest_c() : mStateMgr(*this, sStateID::null) {}
dAcOChest_c()
: mStateMgr(*this, sStateID::null), mEvent(*this, nullptr), mDowsingTarget(this, DowsingTarget::SLOT_NONE) {}
virtual ~dAcOChest_c() {}
static void changeStateOpenCallback(dAcOChest_c *);
static void changeStateWaitCallback(dAcOChest_c *);
static void changeStateFailCallback(dAcOChest_c *);
static void changeStateWait2Callback(dAcOChest_c *);
virtual bool createHeap() override;
virtual int create() override;
virtual int draw() override;
virtual int doDelete() override;
virtual int actorExecute() override;
STATE_FUNC_DECLARE(dAcOChest_c, Wait);
STATE_FUNC_DECLARE(dAcOChest_c, OpenEvent);
STATE_FUNC_DECLARE(dAcOChest_c, FailEvent);
STATE_FUNC_DECLARE(dAcOChest_c, OrderOpenEventAfter);
virtual void doInteraction(s32) override;
void fn_326_C90();
void changeStateOpen();
void changeStateWait();
void changeStateFail();
void changeStateWait2();
char *getName();
char *getSubtypeName();
char *getModelName();
char *getOpenOrClose(u8);
char *getDzbPlcName();
s32 getSubtype();
bool hasBeenOpened();
void stateOpenUpdate2();
void stateOpenEventEnter2();
void fn_326_1440();
bool hasInsideModel();
void fn_326_1470();
void fn_326_14A0();
private:
/* 0x??? */ STATE_MGR_DECLARE(dAcOChest_c);
/* 0x330 */ nw4r::g3d::ResFile mResFile;
/* 0x334 */ d3d::AnmMdlWrapper mAnmMdl;
/* 0x3A4 */ m3d::smdl_c mInsideMdl;
/* 0x3C0 */ dBgW mBgW;
/* 0x5D0 */ STATE_MGR_DECLARE(dAcOChest_c);
/* 0x60C */ ActorEventRelated mEvent;
/* 0x65C */ bool mGaveItem;
/* 0x65D */ bool mField_0x65D;
/* 0x65E */ bool mHasInsideModel;
/* 0x65F */ bool mIsLinksCloset;
/* 0x660 */ DowsingTarget mDowsingTarget;
static const f32 OPEN_WARDROBE_INTERACTION_FIELD_0x24;
static const char *CHEST_OPEN;
static const char *CHEST_OPEN_AFTER;
static const char *CHEST_FAIL;
static InteractionTargetDef OPEN_WARDROBE_INTERACTION;
static char *INSIDE_MODEL_NAMES[4];
static const u32 unused;
};
#endif
+24 -2
View File
@@ -2,19 +2,41 @@
#define D_A_OBJ_CLOUD_DIVE_H
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/cc/d_cc_d.h"
#include "m/m3d/m_smdl.h"
#include "nw4r/g3d/res/g3d_resfile.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
class dAcOcloudDive_c : public dAcObjBase_c {
public:
dAcOcloudDive_c() : mStateMgr(*this, sStateID::null) {}
virtual ~dAcOcloudDive_c() {}
virtual bool createHeap() override;
virtual int create() override;
virtual int doDelete() override;
virtual int actorExecute() override;
virtual int draw() override;
bool fn_350_6F0();
bool fn_350_760();
STATE_FUNC_DECLARE(dAcOcloudDive_c, Wait);
STATE_FUNC_DECLARE(dAcOcloudDive_c, Dead);
private:
/* 0x??? */ STATE_MGR_DECLARE(dAcOcloudDive_c);
/* 0x330 */ nw4r::g3d::ResFile mResFile;
/* 0x334 */ m3d::smdl_c mMdl;
/* 0x350 */ dCcD_Cyl mCollider;
/* 0x4A0 */ STATE_MGR_DECLARE(dAcOcloudDive_c);
/* 0x4DC */ u8 field_0x4DC;
/* 0x4DD */ u8 mItemID;
/* 0x4E0 */ f32 mRadius;
static const f32 mRadius1;
static const f32 mRadius2;
static const f32 height;
static dCcD_SrcCyl sCylSrc;
};
#endif
+17 -1
View File
@@ -2,6 +2,9 @@
#define D_A_OBJ_DECOB_H
#include "d/a/obj/d_a_obj_base.h"
#include "m/m3d/m_smdl.h"
#include "m/m_angle.h"
#include "nw4r/g3d/res/g3d_resfile.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
@@ -10,10 +13,23 @@ public:
dAcODecoB_c() : mStateMgr(*this, sStateID::null) {}
virtual ~dAcODecoB_c() {}
virtual bool createHeap() override;
virtual int create() override;
virtual int doDelete() override;
virtual int actorExecute() override;
virtual int draw() override;
STATE_FUNC_DECLARE(dAcODecoB_c, Wait);
private:
/* 0x??? */ STATE_MGR_DECLARE(dAcODecoB_c);
/* 0x330 */ nw4r::g3d::ResFile mResFile;
/* 0x334 */ m3d::smdl_c mMdl;
/* 0x350 */ STATE_MGR_DECLARE(dAcODecoB_c);
/* 0x38C */ u16 padding_0x38C;
/* 0x38E */ mAng field_0x38E;
static f32 lbl_611_data_34;
static const f32 lbl_611_rodata_30;
};
#endif
+15
View File
@@ -2,13 +2,28 @@
#define D_A_OBJ_DESERT_DEBRIS_H
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/bg/d_bg_w.h"
#include "m/m3d/m_smdl.h"
#include "nw4r/g3d/res/g3d_resfile.h"
class dAcOdesertDebris_c : public dAcObjBase_c {
public:
dAcOdesertDebris_c() {}
virtual ~dAcOdesertDebris_c() {}
virtual bool createHeap() override;
virtual int create() override;
virtual int doDelete() override;
virtual int actorExecute() override;
virtual int draw() override;
private:
bool checkStoryFlag() const;
/* 0x330 */ nw4r::g3d::ResFile mResFile;
/* 0x334 */ m3d::smdl_c mMdl;
/* 0x350 */ dBgW mBgW;
/* 0x560 */ u16 mStoryFlag;
};
#endif
+16 -1
View File
@@ -2,6 +2,9 @@
#define D_A_OBJ_HOLE_H
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/bg/d_bg_s_acch.h"
#include "m/m3d/m_smdl.h"
#include "nw4r/g3d/res/g3d_resfile.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
@@ -10,10 +13,22 @@ public:
dAcOhole_c() : mStateMgr(*this, sStateID::null) {}
virtual ~dAcOhole_c() {}
virtual bool createHeap() override;
virtual int create() override;
virtual int doDelete() override;
virtual int actorExecute() override;
virtual int draw() override;
STATE_FUNC_DECLARE(dAcOhole_c, Wait);
private:
/* 0x??? */ STATE_MGR_DECLARE(dAcOhole_c);
/* 0x330 */ nw4r::g3d::ResFile mResFile;
/* 0x334 */ m3d::smdl_c mMdl;
/* 0x350 */ STATE_MGR_DECLARE(dAcOhole_c);
/* 0x38C */ dBgS_AcchCir mAcchCir;
/* 0x3E8 */ dBgS_ObjAcch mObjAcch;
/* 0x798 */ u8 field_0x798;
/* 0x799 */ u8 field_0x799;
};
#endif
+20 -2
View File
@@ -2,18 +2,36 @@
#define D_A_OBJ_OCT_GRASS_H
#include "d/a/obj/d_a_obj_base.h"
#include "m/m3d/m_smdl.h"
#include "nw4r/g3d/res/g3d_resfile.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
class dAcOOctGrass_c : public dAcObjBase_c {
public:
dAcOOctGrass_c() : mStateMgr(*this, sStateID::null) {}
virtual ~dAcOOctGrass_c() {}
virtual bool createHeap() override;
virtual int create() override;
virtual int doDelete() override;
virtual int actorExecute() override;
virtual int draw() override;
void spawnOcGrsL();
STATE_FUNC_DECLARE(dAcOOctGrass_c, Wait);
void executeState() {
mStateMgr.executeState();
}
private:
/* 0x??? */ STATE_MGR_DECLARE(dAcOOctGrass_c);
/* 0x330 */ nw4r::g3d::ResFile mResFile;
/* 0x334 */ m3d::smdl_c mMdl;
/* 0x350 */ STATE_MGR_DECLARE(dAcOOctGrass_c);
static const char *GRASS_OARCS[4];
static const char *GRASS_CUT_MODELS[4];
};
#endif
+21 -2
View File
@@ -2,19 +2,38 @@
#define D_A_OBJ_STOPPING_ROPE_H
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/bg/d_bg_w.h"
#include "d/col/cc/d_cc_d.h"
#include "m/m3d/m_smdl.h"
#include "nw4r/g3d/res/g3d_resfile.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
#include "s/s_StateInterfaces.hpp"
class dAcOStoppingRope_c : public dAcObjBase_c {
public:
dAcOStoppingRope_c() : mStateMgr(*this, sStateID::null) {}
virtual ~dAcOStoppingRope_c() {}
virtual bool createHeap() override;
virtual int create() override;
virtual int doDelete() override;
virtual int actorExecute() override;
virtual int draw() override;
void changeState(const sStateIDIf_c &value) {
mStateMgr.changeState(value);
}
STATE_FUNC_DECLARE(dAcOStoppingRope_c, Wait);
STATE_FUNC_DECLARE(dAcOStoppingRope_c, SwitchOn);
private:
/* 0x??? */ STATE_MGR_DECLARE(dAcOStoppingRope_c);
/* 0x330 */ nw4r::g3d::ResFile mResFile;
/* 0x334 */ m3d::smdl_c mMdl;
/* 0x350 */ dBgW mBgW;
/* 0x360 */ dCcD_Sph mCollider;
/* 0x6B0 */ STATE_MGR_DECLARE(dAcOStoppingRope_c);
/* 0x6EC */ u8 padding_0x6EC[16];
};
#endif
+16 -1
View File
@@ -2,13 +2,28 @@
#define D_A_OBJ_UNDER_CLOUD_H
#include "d/a/obj/d_a_obj_base.h"
#include "m/m3d/m_anmtexsrt.h"
#include "m/m3d/m_smdl.h"
#include "nw4r/g3d/res/g3d_resfile.h"
#include "toBeSorted/actor_event.h"
class dAcOunderCloud_c : public dAcObjBase_c {
public:
dAcOunderCloud_c() {}
dAcOunderCloud_c() : mEvent(*this, nullptr) {}
virtual ~dAcOunderCloud_c() {}
virtual bool createHeap() override;
virtual int create() override;
virtual int doDelete() override;
virtual int actorExecute() override;
virtual int actorExecuteInEvent() override;
virtual int draw() override;
private:
/* 0x330 */ nw4r::g3d::ResFile mResFile;
/* 0x334 */ m3d::smdl_c mMdl;
/* 0x350 */ m3d::anmTexSrt_c mAnm;
/* 0x37C */ ActorEventRelated mEvent;
};
#endif
+3 -3
View File
@@ -11,9 +11,9 @@
#include "s/s_StateID.hpp"
#include "toBeSorted/d_emitter.h"
struct CsGameConfigMaybe {
CsGameConfigMaybe();
virtual ~CsGameConfigMaybe() {}
struct dCsGame_HIO_c {
dCsGame_HIO_c();
virtual ~dCsGame_HIO_c() {}
/* 0x04 */ f32 field_0x04;
/* 0x08 */ f32 field_0x08;
@@ -1,5 +1,5 @@
#ifndef D_TEXTUNK_H
#define D_TEXTUNK_H
#ifndef D_LYT_HIO_H
#define D_LYT_HIO_H
#include "common.h"
#include "libms/flowfile.h"
@@ -14,10 +14,10 @@
* for overriding the text and flow files being accessed. The actual
* implementation appears to have been stripped out though.
*/
class UnkTextThing {
class dLyt_HIO_c {
public:
UnkTextThing();
virtual ~UnkTextThing() {}
dLyt_HIO_c();
virtual ~dLyt_HIO_c() {}
void destroy();
@@ -149,7 +149,7 @@ public:
return 0;
}
static UnkTextThing *getInstance() {
static dLyt_HIO_c *getInstance() {
return sInstance;
}
@@ -209,7 +209,7 @@ public:
void destroyUnk(void *thing);
private:
static UnkTextThing *sInstance;
static dLyt_HIO_c *sInstance;
void destroyFlow(MsbfInfo *flow);
void destroyMsg(MsbtInfo *msg);
@@ -1,14 +1,14 @@
#ifndef D_LYT_METER_CONFIGURATION
#define D_LYT_METER_CONFIGURATION
#ifndef D_LYT_METER_HIO_H
#define D_LYT_METER_HIO_H
#include "common.h"
class dLytMeterConfiguration_c {
class dLytMeter_HIO_c {
public:
dLytMeterConfiguration_c();
virtual ~dLytMeterConfiguration_c();
dLytMeter_HIO_c();
virtual ~dLytMeter_HIO_c();
static const dLytMeterConfiguration_c *GetInstance() {
static const dLytMeter_HIO_c *GetInstance() {
return sInstance;
}
@@ -45,7 +45,7 @@ public:
}
static dLytMeterConfiguration_c *sInstance;
static dLytMeter_HIO_c *sInstance;
/* 0x004 */ u8 field_0x004;
/* 0x005 */ u8 field_0x005;
+1 -1
View File
@@ -24,7 +24,7 @@ public:
ExpHeap(MEMiHeapHead *heapHead);
static ExpHeap *create(void *block, size_t size, u16 attr);
static ExpHeap *create(size_t size, Heap *heap, u16 attr);
void setGroupID(u16 groupId);
void setAllocMode(u16 allocMode);
static u32 getSizeForMBlock(const void *block);
// Placement new for ::create
+1 -4
View File
@@ -6,9 +6,6 @@
#include "rvl/GX.h" // IWYU pragma: export
#include "rvl/VI.h" // IWYU pragma: export
extern "C" GXRenderModeObj lbl_8055FC64;
namespace EGG {
class Video {
@@ -32,7 +29,7 @@ public:
const GXRenderModeObj *getCurrentOrFallbackRenderModeObj() const {
if (pRenderMode == nullptr) {
return &lbl_8055FC64;
return &GXNtsc480Int;
}
return pRenderMode;
}
+1 -1
View File
@@ -33,7 +33,7 @@ private:
void internalDrawStandard(u16);
void internalDrawLite(u16);
void afterDraw(u16 x, u16 y, u16 width, u16 height);
void allocAndCaptureBlurBuffer(u16 x, u16 y, u16 width, u16 height);
/* 0x1C */ u16 field_0x1C;
/* 0x1E */ u8 field_0x1E;
+1 -1
View File
@@ -71,7 +71,7 @@ public:
}
private:
static void fn_804AE340(nw4r::g3d::ResMat, GXTexCoordID);
static void setupEnvmap(nw4r::g3d::ResMat, GXTexCoordID);
int getTextureIndex(const char *name) const;
bool getSomeTfRelatedBool() const {
+1 -1
View File
@@ -57,7 +57,7 @@ public:
}
private:
void drawInternal(u8, u8, f32, f32);
void setMaterialMulti(u8, u8, f32, f32);
/* 0x2C */ u8 field_0x2C;
/* 0x30 */ f32 field_0x30;
+2 -2
View File
@@ -99,13 +99,13 @@ public:
void CopyFromAnother(const Screen &other);
void Reset(f32, f32, f32, f32, CanvasMode);
void OnDirectEfb() const;
void GetPosSizeInEfb() const;
const DataEfb &GetDataEfb() const;
bool IsChangeEfb() const;
void CalcMatrixForDrawQuad(nw4r::math::MTX34 *, f32, f32, f32, f32) const;
void FillBufferGX(u32, GXColor, u32) const;
void GetGlobalPos(f32 *, f32 *) const;
void fn_804B2EE0(f32 *, f32 *, f32, f32) const;
void ConvertToEfb(f32, f32, f32 *, f32 *) const;
f32 ScaleByX(f32 val) const {
return val * StateGX::s_widthEfb / GetSizeXMax(GetComputedTVMode());
+2 -2
View File
@@ -31,7 +31,7 @@ private:
static s32 sPushCount;
static u32 sFlag;
static bool GetShouldCapture();
static bool isEnableDirtyBufferMode();
static bool GetUseTfRgb565();
public:
@@ -45,7 +45,7 @@ private:
// Unknown names
static void fn_804B4270(BufferType type, u32 userData);
static void fn_804B4310(BufferType type, u32 userData);
static void popWorkBuffer(bool b, u32 userData);
static f32 *fn_804B4550();
};
+1 -1
View File
@@ -81,7 +81,7 @@ public:
static void invalidateTexAllGX();
static void GXSetPixelFmt_(GXPixelFmt pixelFmt, GXZFmt16 zFmt);
static void setPixelFormatGX(GXPixelFmt pixelFmt, GXZFmt16 zFmt);
static bool GXSetColorUpdate_(bool);
static bool GXSetAlphaUpdate_(bool);
static bool GXSetDither_(bool);
+4
View File
@@ -235,6 +235,10 @@ public:
f32 squareMagXZ() const {
return x * x + z * z;
}
f32 squareDistanceToXZ(const mVec3_c &other) const {
return (*this - other).squareMagXZ();
}
void rotX(const mAng &angle);
void rotY(const mAng &angle);
void rotZ(const mAng &angle);
+1
View File
@@ -39,6 +39,7 @@ void GXCopyTex(void *data, GXBool bUpdate);
void GXPixModeSync();
extern GXRenderModeObj GXNtsc480IntDf;
extern GXRenderModeObj GXNtsc480Int;
extern GXRenderModeObj GXMpal480IntDf;
extern GXRenderModeObj GXPal528IntDf;
extern GXRenderModeObj GXEurgb60Hz480IntDf;
+1 -1
View File
@@ -52,7 +52,7 @@ void GXSetTexCoordBias(GXTexCoordID, GXBool, GXBool);
u16 GXGetTexObjWidth(const GXTexObj *obj);
u16 GXGetTexObjHeight(const GXTexObj *obj);
GXTexFmt GXGetTexObjFormat(const GXTexObj *obj);
GXTexFmt GXGetTexObjFmt(const GXTexObj *obj);
GXBool GXGetTexObjMipMap(const GXTexObj *obj);
GXTexWrapMode GXGetTexObjWrapS(const GXTexObj *obj);
u32 GXGetTexObjTlut(const GXTexObj *);
+3 -1
View File
@@ -56,10 +56,12 @@ void *MEMAllocFromExpHeapEx(struct MEMiHeapHead *heap, u32 size, s32 align);
u32 MEMResizeForMBlockExpHeap(struct MEMiHeapHead *heap, void *memBlock, u32 size);
void MEMFreeToExpHeap(struct MEMiHeapHead *heap, void *memBlock);
u32 MEMGetAllocatableSizeForExpHeap(struct MEMiHeapHead *heap);
u32 MEMGetTotalFreeSizeForExpHeap(struct MEMiHeapHead *heap);
u32 MEMGetAllocatableSizeForExpHeapEx(struct MEMiHeapHead *heap, s32 align);
void MEMSetGroupIdForExpHeap(MEMiHeapHead *mHeapHandle, u16 groupId);
void MEMSetGroupIdForExpHeap(struct MEMiHeapHead *mHeapHandle, u16 groupId);
u32 MEMAdjustExpHeap(struct MEMiHeapHead *heap);
u32 MEMGetSizeForMBlockExpHeap(const void *block);
void MEMSetAllocModeForExpHeap(struct MEMiHeapHead *heap, u16 allocMode);
static inline struct MEMiHeapHead *MEMCreateExpHeap(void *start, u32 size) {
return MEMCreateExpHeapEx(start, size, 0);
+1
View File
@@ -37,6 +37,7 @@ typedef struct MEMiHeapHead {
void MEMiInitHeapHead(MEMiHeapHead *heap, u32 magic, void *start, void *end, u16 opt);
void MEMiFinalizeHeap(MEMiHeapHead *heap);
MEMiHeapHead *MEMFindContainHeap(const void *memBlock);
MEMiHeapHead *MEMFindParentHeap(const MEMiHeapHead *pHandle);
static inline int GetUIntPtr(const void *p) {
return (int)p;
+1
View File
@@ -27,6 +27,7 @@ typedef struct OSContext {
f64 psfs[32]; // at 0x1C8
} OSContext;
void OSFillFPUContext(OSContext *ctx);
void OSSaveFPUContext(OSContext *ctx);
void OSSetCurrentContext(OSContext *ctx);
OSContext *OSGetCurrentContext(void);
+11
View File
@@ -11,11 +11,22 @@ extern "C" {
#define OS_MEM_IS_MEM1(addr) (((u32)(addr) & 0x30000000) == 0)
#define OS_MEM_IS_MEM2(addr) (((u32)(addr) & 0x30000000) == 0x10000000)
#define OS_PROTECT_CHAN0 0
#define OS_PROTECT_CHAN1 1
#define OS_PROTECT_CHAN2 2
#define OS_PROTECT_CHAN3 3
#define OS_PROTECT_CONTROL_NONE 0x00
#define OS_PROTECT_CONTROL_READ 0x01
#define OS_PROTECT_CONTROL_WRITE 0x02
#define OS_PROTECT_CONTROL_RDWR (OS_PROTECT_CONTROL_READ | OS_PROTECT_CONTROL_WRITE)
u32 OSGetPhysicalMem1Size(void);
u32 OSGetPhysicalMem2Size(void);
u32 OSGetConsoleSimulatedMem1Size(void);
u32 OSGetConsoleSimulatedMem2Size(void);
void __OSInitMemoryProtection(void);
void OSProtectRange(u32 chan, void* addr, u32 nBytes, u32 control);
#ifdef __cplusplus
}
+2 -2
View File
@@ -9,7 +9,7 @@ class sFStateVirtualID_c : public sFStateID_c<T> {
public:
typedef void (T::*stateFunc)();
sFStateVirtualID_c(
const sStateID_c *superState, const char *name, stateFunc initialize, stateFunc execute, stateFunc finalize
const sStateIDIf_c *superState, const char *name, stateFunc initialize, stateFunc execute, stateFunc finalize
)
: sFStateID_c<T>(name, initialize, execute, finalize), mpSuperState(superState) {}
@@ -29,7 +29,7 @@ public:
}
private:
const sStateID_c *mpSuperState;
const sStateIDIf_c *mpSuperState;
};
#endif
+2 -2
View File
@@ -65,11 +65,11 @@
#define STATE_VIRTUAL_DEFINE(class, name) \
template <typename T> \
static const sStateID_c &baseID_##name() { \
static const sStateIDIf_c &baseID_##name() { \
return T::StateID_##name; \
} \
template <> \
const sStateID_c &baseID_##name<sStateID_c>() { \
const sStateIDIf_c &baseID_##name<sStateID_c>() { \
return sStateID::null; \
} \
const sFStateVirtualID_c<class> class ::StateID_##name( \
+1
View File
@@ -18,6 +18,7 @@ public:
bool isAdvance();
int getSomeEventRelatedNumber();
int getSingleIntData(int *result, u32 code, u32);
int getSingleFloatData(f32 *result, u32 code, u32);
int getSingleVecData(mVec3_c *result, u32 code, u32);