summaryrefslogtreecommitdiff
path: root/include/game.h
diff options
context:
space:
mode:
authorColin Noga <Tempus@chronometry.ca>2012-09-26 11:51:03 -0500
committerColin Noga <Tempus@chronometry.ca>2012-09-26 11:51:03 -0500
commitf9afbf1109b30bbc6011e81109b7e11961a4361a (patch)
tree46883b3ccd9ab82b439c192a657e0632414e906a /include/game.h
parent3268b1fab87a34897289faa8a1f5ee0679f74e19 (diff)
parent46b65dfd76411bec6f8356c581f337f8a1944013 (diff)
downloadkamek-f9afbf1109b30bbc6011e81109b7e11961a4361a.tar.gz
kamek-f9afbf1109b30bbc6011e81109b7e11961a4361a.zip
Merge remote-tracking branch 'origin/new-hud' into level-select
Diffstat (limited to '')
-rwxr-xr-xinclude/game.h205
1 files changed, 186 insertions, 19 deletions
diff --git a/include/game.h b/include/game.h
index 4695ea6..e31e675 100755
--- a/include/game.h
+++ b/include/game.h
@@ -80,9 +80,60 @@ struct StartLevelInfo {
unsigned char level2; // 0x0F
};
-extern void *GameMgr;
+class GMgr8 {
+ public:
+ virtual ~GMgr8();
+
+ int _4;
+ float _8, _C;
+ u32 _10, _14;
+ u8 _18, _19, _1A, _1B, _1C;
+ u32 _20, _24, _28, _2C, _30;
+};
+
+struct GMgrA0 {
+ u32 _0, _4, _8;
+ u8 _C;
+};
+
+class GameMgr {
+ public:
+ virtual ~GameMgr();
+
+ u32 _4;
+ GMgr8 eight;
+ u32 _3C, _40, _44, _48, _4C, _50, _54, _58;
+ u32 _5C, _60, _64, _68, _6C;
+ u32 _70[10];
+ u8 _98;
+ u32 _9C;
+ GMgrA0 _A0[40];
+ u32 _320[10], _348[10];
+ u32 _370, _374, _378, _37C;
+ u8 switchPalaceFlag;
+ u32 CharIDs[4];
+ u8 _394;
+ u8 _395[10];
+ u8 _39F[10];
+ u8 _3A9[10];
+ u8 _3B3;
+ u32 numberToInsertInThing[7];
+ u32 msgCategory, msgID;
+ u8 _3D8;
+ u8 currentControllerType, layoutShadowFlag;
+ u32 numberToInsertInThing10, numberToInsertInThing11;
+ u32 _3E4, _3E8, _3EC, _3F0, _3F4, _3F8;
+ // unmapped data from 3FC..AEC (0x6F0)
+ u8 _3FC[0x6F0];
+ u32 _AEC, _AF0, _AF4, _AF8;
+ u8 _AFC, _AFD, _AFE[88];
+ u8 _B56[4];
+ u8 _B5A, _B5B;
+};
+
+extern GameMgr *GameMgrP;
inline void *GetGameMgr() {
- return GameMgr;
+ return GameMgrP;
}
bool QueryPlayerAvailability(int id);
@@ -219,9 +270,31 @@ inline SaveHandler *GetSaveHandler() {
#define WPAD_MINUS 0x1000
#define WPAD_HOME 0x8000
+struct Remocon {
+ virtual ~Remocon();
+ int id;
+ int controllerType;
+ u32 untouchedButtons;
+ u32 lastUntouchedButtons;
+ u32 heldButtons;
+ u32 lastHeldButtons;
+ u32 nowPressed;
+ u32 _20, _24, _28, _2C, _30;
+ Vec acc, lastAcc;
+ Vec2 accVertical, lastAccVertical;
+ Vec2 vec_5C, lastVec_5C;
+ Vec2 vec_6C;
+ Vec2 vec_74, lastVec_74;
+ float wiimoteMoveDistanceOrSomething;
+ float lastWiimoteMoveDistanceOrSomething;
+ u8 isShaking, _8D;
+ u16 tiltAmount;
+ u8 _90, _91, _92;
+};
+
struct RemoconMngClass {
void *vtable;
- void *controllers[4];
+ Remocon *controllers[4];
};
/*
@@ -246,7 +319,7 @@ inline int GetActiveWiimoteID() {
return ActiveWiimoteID;
}
-inline void *GetActiveRemocon() {
+inline Remocon *GetActiveRemocon() {
return GetRemoconMng()->controllers[GetActiveWiimoteID()];
}
@@ -254,11 +327,11 @@ inline void *GetActiveWiimote() {
return ActiveWiimote;
}
-inline unsigned int Remocon_GetButtons(void *self) {
+inline unsigned int Remocon_GetButtons(Remocon *self) {
return *((unsigned int*)((u32)self+0x18));
}
-inline unsigned int Remocon_GetPressed(void *self) {
+inline unsigned int Remocon_GetPressed(Remocon *self) {
return *((unsigned int*)((u32)self+0x1C));
}
@@ -505,6 +578,20 @@ namespace lyt {
class Group;
class GroupContainer;
+ namespace detail {
+ class TexCoordAry {
+ public:
+ TexCoordAry();
+ void Free();
+ void Reserve(u8 count);
+ void SetSize(u8 count);
+ void Copy(const void *source, u8 count);
+
+ u8 reservedSize, usedSize;
+ void *data;
+ };
+ }
+
class Layout {
public:
Layout();
@@ -636,11 +723,17 @@ namespace lyt {
u8 flag;
char name[0x11];
- char userdata[8];
+ char userdata[9];
- u8 _D5;
u8 paneIsOwnedBySomeoneElse;
u8 _D7;
+
+ void SetVisible(bool value) {
+ if (value)
+ flag |= 1;
+ else
+ flag &= ~1;
+ }
};
class TextBox : public Pane {
@@ -657,7 +750,7 @@ namespace lyt {
uchar GetVtxColorElement(ulong id) const;
void SetVtxColorElement(ulong id, uchar value);
- virtual void LoadMtx(const DrawInfo &info);
+ void LoadMtx(const DrawInfo &info);
virtual void AllocStringBuffer(u16 size);
virtual void FreeStringBuffer();
@@ -681,6 +774,26 @@ namespace lyt {
u8 alignment;
u8 flags;
};
+
+ class Picture : public Pane {
+ public:
+ Picture(void *, void *); // todo: Picture((res::Picture const *,ResBlockSet const &))
+ ~Picture();
+
+ void *GetRuntimeTypeInfo() const;
+
+ void DrawSelf(const DrawInfo &info);
+
+ ut::Color GetVtxColor(ulong id) const;
+ void SetVtxColor(ulong id, ut::Color color);
+ uchar GetVtxColorElement(ulong id) const;
+ void SetVtxColorElement(ulong id, uchar value);
+
+ virtual void Append(const GXTexObj &obj);
+
+ ut::Color colours[4];
+ detail::TexCoordAry texCoords;
+ };
}
@@ -2487,7 +2600,10 @@ namespace nw4r {
void SetupGXWithColorMapping(Color c1, Color c2);
public:
- Color colors[8]; // todo: document
+ Color minColMapping, maxColMapping;
+ Color vtxColours[4];
+ Color topColour, bottomColour;
+
u32 modeOfSomeKind;
float scaleX;
float scaleY;
@@ -2522,12 +2638,12 @@ namespace nw4r {
bool IsDrawFlagSet(ulong, ulong) const;
- float _4C;
+ float widthLimit;
float charSpace;
- float somethingRelatedToLineHeight;
- u32 _58;
+ float lineSpace;
+ u32 tabWidth;
u32 drawFlag;
- void *tagProcessorMaybe;
+ void *tagProcessor;
};
}
}
@@ -2667,7 +2783,7 @@ namespace m2d {
nw4r::lyt::Pane *getRootPane();
nw4r::lyt::Pane *findPaneByName(const char *name) const;
nw4r::lyt::TextBox *findTextBoxByName(const char *name) const;
- nw4r::lyt::Pane *findPictureByName(const char *name) const; // TODO: change to others
+ nw4r::lyt::Picture *findPictureByName(const char *name) const;
nw4r::lyt::Pane *findWindowByName(const char *name) const;
void animate();
@@ -2705,10 +2821,10 @@ namespace m2d {
// does NSMBW even use consts? I have no idea. maybe not
- void getPanes(const char **names, nw4r::lyt::Pane *output, int count) const;
- void getWindows(const char **names, nw4r::lyt::Pane *output, int count) const; // TODO: change to others
- void getPictures(const char **names, nw4r::lyt::Pane *output, int count) const;
- void getTextBoxes(const char **names, nw4r::lyt::TextBox *output, int count) const;
+ void getPanes(const char **names, nw4r::lyt::Pane **output, int count) const;
+ void getWindows(const char **names, nw4r::lyt::Pane **output, int count) const; // TODO: change to others
+ void getPictures(const char **names, nw4r::lyt::Picture **output, int count) const;
+ void getTextBoxes(const char **names, nw4r::lyt::TextBox **output, int count) const;
void setLangStrings(const char **names, const int *msgIDs, int category, int count);
@@ -3072,6 +3188,57 @@ namespace mHeap {
};
void WriteNumberToTextBox(int *number, const int *fieldLength, nw4r::lyt::TextBox *textBox, bool unk); // 800B3B60
+
+namespace EGG {
+ class MsgRes {
+ private:
+ const u8 *bmg, *INF1, *DAT1, *STR1, *MID1, *FLW1, *FLI1;
+ public:
+ MsgRes(const u8 *bmgFile, u32 unusedParam); // 802D7970
+ virtual ~MsgRes();
+
+ static void parseFormatCode(wchar_t initialTag, const wchar_t *string, u8 *outArgsSize, u32 *outCmd, const wchar_t **args); // 802D7B10
+
+ const wchar_t *findStringForMessageID(int category, int message) const; // 0x802D7B50
+
+ private:
+ void setBMG(const u8 *ptr); // 802D7B90
+ void setINF(const u8 *ptr); // 802D7BA0
+ void setDAT(const u8 *ptr); // 802D7BB0
+ void setSTR(const u8 *ptr); // 802D7BC0
+ void setMID(const u8 *ptr); // 802D7BD0
+ void setFLW(const u8 *ptr); // 802D7BE0
+ void setFLI(const u8 *ptr); // 802D7BF0
+ int identifySectionByMagic(u32 magic) const; // 802D7C00
+
+ protected:
+ struct INFEntry {
+ u32 stringOffset;
+ };
+ const INFEntry *findINFForMessageID(int category, int message) const; // 802D7C90
+ u32 getEntryFromMID(int index) const; // 802D7D70
+ };
+}
+namespace dScript {
+ class Res_c : public EGG::MsgRes {
+ public:
+ Res_c(const u8 *bmgFile, u32 unusedParam); // 800CE7F0
+ ~Res_c();
+
+ u16 getCharScaleForMessageID(int category, int message) const; // 800CE890
+ u8 getFontIDForMessageID(int category, int message) const; // 800CE8C0
+ };
+}
+class MessageClass {
+ public:
+ dDvdLoader_c loader;
+ void *rawBmgPointer;
+ dScript::Res_c *msgRes;
+};
+
+dScript::Res_c *GetBMG(); // 800CDD50
+void WriteBMGToTextBox(nw4r::lyt::TextBox *textBox, dScript::Res_c *res, int category, int message, int argCount, ...); // 0x800C9B50
+
extern "C" dAc_Py_c* GetSpecificPlayerActor(int number);
extern "C" dStageActor_c *CreateActor(u16 classID, int settings, Vec pos, char rot, char layer);
extern "C" dStageActor_c *Actor_SearchByID(u32 actorID);