NSMBW-Decomp
A decompilation of New Super Mario Bros. Wii
Loading...
Searching...
No Matches
d_cd.hpp
1#pragma once
2#include <types.h>
4#include <game/bases/d_cd_blocks.hpp>
5#include <game/sLib/s_RangeData.hpp>
6#include <lib/egg/core/eggHeap.h>
7
8/// @brief Course data file holder.
9/// A course data file contains the actual course elements -
10/// areas, actor create information, background data, etc.
11class dCdFile_c {
12public:
13 dCdFile_c() {}
14 virtual ~dCdFile_c() {}
15
16 void loadCourseData(int fileNo);
17 sScrollData *getScrollDataP(u8 id);
18 sBgData *getBg2DataP(u8 id);
19 sBgData *getBg3DataP(u8 id);
20 sNextGotoData *getNextGotoP(u8 id);
21 sAreaData *getAreaDataP(u8 id, sRangeDataF *bound);
22 u8 getAreaID(u8 id);
23 int getAreaScroll(u8 id);
24 int getAreaZoomType(u8 id);
25 int getAreaZoomID(u8 id);
26 int getAreaZoomChange(u8 id);
27 int getAreaBgm(u8 id);
28 int getAreaBgmMode(u8 id);
29 int getAreaMaskNo(u8 id);
30 int getAreaBg2(u8 id);
31 int getAreaBg3(u8 id);
32 int getAreaColorOBJ(u8 id);
33 int getAreaColorBG(u8 id);
34 int getAreaDirection(u8 id);
35 int getAreaSizeX(u8 id);
36 u8 getAreaNo(mVec3_c *pos);
37 u8 getAreaNo(sRangePosSize *bound);
38 sRangeData *getRangeDataP(u8 id, sRangeDataF *bound);
39 bool checkRange(mVec3_c *pos, sRangeData *range);
40 bool checkRange(sRangePosSize *range1, sRangePosSize *range2);
41 sScrollAreaData *getScrlAreaDataP(u8 id);
42
43 int mFileNo;
44 union {
45 void *mpBlocks[CD_BLOCK_COUNT];
46 struct {
47 sTilesetData *mpTilesetNames;
48 sOptionData *mpOptions;
49 sScrollData *mpScrollData;
50 sBlock4Data *mBlock4;
51 sBgData *mpBg2Data;
52 sBgData *mpBg3Data;
53 sNextGotoData *mpNextGotos;
54 sActorCreateData *mpActorCreates;
55 sBlock8Data *mBlock8;
56 sAreaData *mpAreas;
57 sRangeData *mpRangeData;
58 sScrollAreaData *mpScrlAreas;
59 sRailInfoData *mpRails;
60 sRailNodeData *mpRailNodes;
61 };
62 };
63 u32 mBlockSizes[CD_BLOCK_COUNT];
64 union {
65 u32 mBlockElementCounts[CD_BLOCK_COUNT];
66 struct {
67 int mTilesetsCount;
68 int mOptionsCount;
69 int mScrollDataCount;
70 int mBlock4ElementCount;
71 int mBg2DataCount;
72 int mBg3DataCount;
73 int mNextGotoCount;
74 int mActorCreateCount;
75 int mBlock8ElementCount;
76 int mAreaCount;
77 int mRangeCount;
78 int mScrlAreaCount;
79 int mRailCount;
80 int mRailNodeCount;
81 };
82 };
83 u32 mArr1[64];
84 u32 mArr2[64];
85 u32 mArr3[64];
86};
87
88/// @brief Current course data holder.
89/// A course is made up of multiple files [Reggie terminology: "areas"] - see dCdFile_c.
90class dCd_c {
91public:
92 dCd_c() { m_instance = this; }
93 ~dCd_c() { m_instance = nullptr; }
94
95 void loadCourseData();
96
97 static void setCourseArcName(int world, int course, char *buffer);
98 static void createInstance(EGG::Heap *heap);
99 static void deleteInstance();
100
101 dCdFile_c *getFileP(int idx) {
102 dCdFile_c *course = &mFiles[idx];
103 if (course->mpAreas != nullptr) {
104 return course;
105 }
106 return nullptr;
107 }
108
110
111 static dCd_c *m_instance;
112};
Course data file holder. A course data file contains the actual course elements - areas,...
Definition d_cd.hpp:11
A three-dimensional floating point vector.
Definition m_vec.hpp:100
#define COURSE_FILE_COUNT
The number of files in a course.