Super Mario 64 Source
A Super Mario 64 decompilation, brought to you by a bunch of clever folks.
area.h
Go to the documentation of this file.
1 #ifndef _AREA_H
2 #define _AREA_H
3 
4 #include "types.h"
5 
7 {
8  COURSE_NONE, // (0) Overworld (Castle Grounds, etc)
10  /* -------------- Main Courses -------------- */
12  COURSE_BOB = COURSE_STAGES_MIN, // (1) Bob Omb Battlefield
13  COURSE_WF, // (2) Whomp's Fortress
14  COURSE_JRB, // (3) Jolly Rodger's Bay
15  COURSE_CCM, // (4) Cool Cool Mountain
16  COURSE_BBH, // (5) Big Boo's Haunt
17  COURSE_HMC, // (6) Hazy Maze Cave
18  COURSE_LLL, // (7) Lethal Lava Land
19  COURSE_SSL, // (8) Shifting Sand Land
20  COURSE_DDD, // (9) Dire Dire Docks
21  COURSE_SL, // (10) Snowman's Land
22  COURSE_WDW, // (11) Wet Dry World
23  COURSE_TTM, // (12) Tall Tall Mountain
24  COURSE_THI, // (13) Tiny Huge Island
25  COURSE_TTC, // (14) Tick Tock Clock
26  COURSE_RR, // (15) Rainbow Ride
30  /* -------------- Bonus Courses -------------- */
31  COURSE_BITDW, // (16) Bowser in the Dark World
32  COURSE_BITFS, // (17) Bowser in the Fire Sea
33  COURSE_BITS, // (18) Bowser in the Sky
34  COURSE_PSS, // (19) Princess's Secret Slide
36  COURSE_COTMC = COURSE_CAP_COURSES, // (20) Cavern of the Metal Cap
37  COURSE_TOTWC, // (21) Tower of the Wing Cap
38  COURSE_VCUTM, // (22) Vanish Cap Under the Moat
39  COURSE_WMOTR, // (23) Winged Mario over the Rainbow
40  COURSE_SA, // (24) Secret Aquarium
41  COURSE_CAKE_END, // (25) The End (Cake Scene)
45 };
46 
47 #define COURSE_IS_MAIN_COURSE(cmd) (cmd >= COURSE_STAGES_MIN && cmd <= COURSE_STAGES_MAX)
48 
50 {
51  LEVEL_NONE, // not indexed
54  LEVEL_UNKNOWN_2, // (2) ""
55  LEVEL_UNKNOWN_3, // (3) ""
56  LEVEL_BBH, // (4) "TERESA OBAKE" Big Boo's Haunt
57  LEVEL_CCM, // (5) "YYAMA1 % YSLD1" Cool Cool Mountain
58  LEVEL_CASTLE, // (6) "SELECT ROOM" Castle lobby
59  LEVEL_HMC, // (7) "HORROR DUNGEON" Hazy Maze Cave
60  LEVEL_SSL, // (8) "SABAKU % PYRMD" Shifting Sand Land
61  LEVEL_BOB, // (9) "BATTLE FIELD" Bob Omb Battlefield
62  LEVEL_SL, // (10) "YUKIYAMA2" Snowman's Land
63  LEVEL_WDW, // (11) "POOL KAI" Wet Dry World
64  LEVEL_JRB, // (12) "WTDG % TINBOTU" Jolly Rodger's Bay
65  LEVEL_THI, // (13) "BIG WORLD" Tiny Huge Island
66  LEVEL_TTC, // (14) "CLOCK TOWER" Tick Tock Clock
67  LEVEL_RR, // (15) "RAINBOW CRUISE" Rainbow Ride
68  LEVEL_CASTLE_GROUNDS, // (16) "MAIN MAP" Castle grounds (outside)
69  LEVEL_BITDW, // (17) "EXT1 YOKO SCRL" Bowser in the Dark World
70  LEVEL_VCUTM, // (18) "EXT7 HORI MINI" Vanish Cap under the Moat
71  LEVEL_BITFS, // (19) "EXT2 TIKA LAVA" Bowser in the Fire Sea
72  LEVEL_SA, // (20) "EXT9 SUISOU" Secret Aquarium
73  LEVEL_BITS, // (21) "EXT3 HEAVEN" Bowser in the Sky
74  LEVEL_LLL, // (22) "FIREB1 % INVLC" Lethal Lava Land
75  LEVEL_DDD, // (23) "WATER LAND" Dire Dire Docks
76  LEVEL_WF, // (24) "MOUNTAIN" Whomp's Fortress
77  LEVEL_ENDING, // (25) "ENDING" (Ending Cutscene)
78  LEVEL_CASTLE_COURTYARD, // (26) "URANIWA" Castle courtyard (BBH entrance)
79  LEVEL_PSS, // (27) "EXT4 MINI SLID" Princess's Secret Slide
80  LEVEL_COTMC, // (28) "IN THE FALL" Cavern of the Metal Cap
81  LEVEL_TOTWC, // (29) "EXT6 MARIO FLY" Tower of the Wing Cap
82  LEVEL_BOWSER_1, // (30) "KUPPA1" Bowser in the Dark World (Boss)
83  LEVEL_WMOTR, // (31) "EXT8 BLUE SKY" Winged Mario over the Rainbow
84  LEVEL_UNKNOWN_32, // (32) ""
85  LEVEL_BOWSER_2, // (33) "KUPPA2" Bowser in the Fire Sea (Boss)
86  LEVEL_BOWSER_3, // (34) "KUPPA3" Bowser in the Sky (Final Boss)
87  LEVEL_UNKNOWN_35, // (35) ""
88  LEVEL_TTM, // (36) "DONKEY % SLID2" Tall Tall Mountain
89  LEVEL_UNKNOWN_37, // (37) ""
90  LEVEL_UNKNOWN_38, // (38) ""
93 };
94 
95 struct WarpNode
96 {
97  /*00*/ u8 id;
98  /*01*/ u8 destLevel;
99  /*02*/ u8 destArea;
100  /*03*/ u8 destNode;
101 };
102 
104 {
105  /*0x00*/ struct WarpNode node;
106  /*0x04*/ struct Object *object;
107  /*0x08*/ struct ObjectWarpNode *next;
108 };
109 
110 // From Surface 0x1B to 0x1E
111 #define INSTANT_WARP_INDEX_START 0x00 // Equal and greater than Surface 0x1B
112 #define INSTANT_WARP_INDEX_STOP 0x04 // Less than Surface 0x1F
113 
115 {
116  /*0x00*/ u8 id; // 0 = 0x1B / 1 = 0x1C / 2 = 0x1D / 3 = 0x1E
117  /*0x01*/ u8 area;
118  /*0x02*/ Vec3s displacement;
119 };
120 
121 struct SpawnInfo
122 {
123  /*0x00*/ Vec3s startPos;
124  /*0x06*/ Vec3s startAngle;
125  /*0x0C*/ s8 areaIndex;
126  /*0x0D*/ s8 activeAreaIndex;
127  /*0x10*/ u32 behaviorArg;
128  /*0x14*/ void *behaviorScript;
129  /*0x18*/ struct GraphNode *unk18;
130  /*0x1C*/ struct SpawnInfo *next;
131 };
132 
133 // Some of these might need to be renamed at some point.
134 #define CAMERA_PRESET_NONE 0x00
135 #define CAMERA_PRESET_OPEN_CAMERA 0x01
136 #define CAMERA_PRESET_REVERSE_TOWER 0x02
137 #define CAMERA_PRESET_BEHIND_MARIO 0x03
138 #define CAMERA_PRESET_CLOSE 0x04 // Inside Castle / Big Boo's Haunt
139 #define CAMERA_PRESET_C_UP_LOOK 0x06
140 #define CAMERA_PRESET_WATER_SURFACE 0x08
141 #define CAMERA_PRESET_SLIDE_HOOT 0x09
142 #define CAMERA_PRESET_INSIDE_CANNON 0x0A
143 #define CAMERA_PRESET_BOSS_FIGHT 0x0B
144 #define CAMERA_PRESET_PARALLEL_TRACKING 0x0C
145 #define CAMERA_PRESET_FIXED_REF_POINT 0x0D
146 #define CAMERA_PRESET_PLATFORM_LEVEL 0x0E // Bowser Courses / Rainbow Road
147 #define CAMERA_PRESET_FREE_ROAM 0x10
148 #define CAMERA_PRESET_SPIRAL_STAIRS 0x11
149 
150 // Used mostly in camera.c
152 {
153  /*0x00*/ u8 currPreset; // What type of preset the camera uses (see defines above)
154  /*0x01*/ u8 defPreset;
155  /*0x02*/ s16 trueYaw;
156  /*0x04*/ Vec3f focus;
157  /*0x10*/ Vec3f pos;
158  /*0x1C*/ u8 filler1C[0x28-0x1C];
159  /*0x28*/ f32 xFocus;
160  /*0x2C*/ f32 zFocus;
161  /*0x30*/ u8 cutscene;
162  /*0x31*/ u8 filler31[0x9];
163  /*0x3A*/ s16 storedYaw;
164  /*0x3C*/ u8 filler3C[0x64-0x3C];
165  /*0x64*/ u8 unk64;
166  /*0x65*/ u8 filler65[3];
167  /*0x68*/ f32 unk68;
168 };
169 
171 {
172  /*0x00*/ s16 unk00;
173  /*0x02*/ s16 unk02;
174  /*0x04*/ s16 unk04;
175  /*0x06*/ s16 unk06;
176  /*0x08*/ s16 unk08;
177 };
178 
179 struct Whirlpool
180 {
181  /*0x00*/ Vec3s pos;
182  /*0x03*/ s16 strength;
183 };
184 
185 struct Area
186 {
187  /*0x00*/ s8 index;
188  /*0x01*/ s8 flags; // Only has 1 flag: 0x01 = Is this the active area?
189  /*0x02*/ u16 terrainType; // default terrain of the level (set from level script cmd 0x31)
190  /*0x04*/ struct GraphNode *unk04; // geometry layout data
191  /*0x08*/ s16 *terrainData; // collision data (set from level script cmd 0x2E)
192  /*0x0C*/ s8 *surfaceRooms; // (set from level script cmd 0x2F)
193  /*0x10*/ s16 *macroObjects; // Macro Objects Ptr (set from level script cmd 0x39)
194  /*0x14*/ struct ObjectWarpNode *warpNodes;
195  /*0x18*/ struct WarpNode *paintingWarpNodes;
196  /*0x1C*/ struct InstantWarp *instantWarps;
197  /*0x20*/ struct SpawnInfo *objectSpawnInfos;
198  /*0x24*/ struct LevelCamera *camera;
199  /*0x28*/ struct UnusedArea28 *unused28; // Filled by level script 0x3A, but is unused.
200  /*0x2C*/ struct Whirlpool *whirlpools[2];
201  /*0x34*/ u8 dialog[2]; // Level start dialog number (set by level script cmd 0x30)
202  /*0x36*/ u16 musicParam;
203  /*0x38*/ u16 musicParam2;
204 };
205 
206 // All the transition data to be used in screen_transition.c
208 {
209  /*0x00*/ u8 red;
210  /*0x01*/ u8 green;
211  /*0x02*/ u8 blue;
212 
215  /*0x08*/ s16 startCircleX;
216  /*0x0A*/ s16 startCircleY;
217  /*0x0C*/ s16 endCircleX;
218  /*0x0E*/ s16 endCircleY;
219 
220  /*0x10*/ s16 unk10;
221 };
222 
223 #define WARP_TRANSITION_FADE_FROM_COLOR 0x00
224 #define WARP_TRANSITION_FADE_INTO_COLOR 0x01
225 #define WARP_TRANSITION_FADE_FROM_STAR 0x08
226 #define WARP_TRANSITION_FADE_INTO_STAR 0x09
227 #define WARP_TRANSITION_FADE_FROM_CIRCLE 0x0A
228 #define WARP_TRANSITION_FADE_INTO_CIRCLE 0x0B
229 #define WARP_TRANSITION_FADE_FROM_MARIO 0x10
230 #define WARP_TRANSITION_FADE_INTO_MARIO 0x11
231 #define WARP_TRANSITION_FADE_FROM_BOWSER 0x12
232 #define WARP_TRANSITION_FADE_INTO_BOWSER 0x13
233 
235 {
236  /*0x00*/ u8 isActive; // Is the transition active. (either TRUE or FALSE)
237  /*0x01*/ u8 type; // Determines the type of transition to use (circle, star, etc.)
238  /*0x02*/ u8 time; // Amount of time to complete the transition (in frames)
239  /*0x03*/ u8 pauseRendering; // Should the game stop rendering. (either TRUE or FALSE)
240  /*0x04*/ struct WarpTransitionData data;
241 };
242 
243 extern struct SpawnInfo gPlayerSpawnInfos[];
244 extern struct GraphNode *D_8033A160[];
245 extern struct Area gAreaData[];
246 extern struct WarpTransition gWarpTransition;
247 extern s16 gCurrCourseNum;
248 extern s16 gCurrActNum;
249 extern s16 gCurrAreaIndex;
250 extern s16 gSavedCourseNum;
251 extern s16 D_8033A75E;
252 extern s16 D_8033A760;
253 
254 extern struct SpawnInfo *gMarioSpawnInfo;
255 
256 extern struct Area *gAreas;
257 extern struct Area *gCurrentArea;
258 
259 extern s16 gCurrSaveFileNum;
260 extern s16 gCurrLevelNum;
261 
262 
263 void func_8027A220(Vp *a, Vp *b, u8 c, u8 d, u8 e);
264 void print_intro_text(void);
267 void clear_areas(void);
268 void func_8027A7C4(void);
269 void load_area(s32 index);
270 void func_8027A998(void);
271 void load_mario_area(void);
272 void func_8027AA88(void);
273 void change_area(s32 index);
274 void area_update_objects(void);
275 void play_transition(s16 transType, s16 time, u8 red, u8 green, u8 blue);
276 void play_transition_after_delay(s16 transType, s16 time, u8 red, u8 green, u8 blue, s16 delay);
277 void render_game(void);
278 
279 
280 #endif
Definition: area.h:121
struct Object * object
Definition: area.h:106
Definition: area.h:9
f32 Vec3f[3]
Definition: types.h:23
Definition: area.h:75
Definition: area.h:57
struct WarpNode * paintingWarpNodes
Definition: area.h:195
u8 red
Definition: area.h:209
u16 musicParam
Definition: area.h:202
Definition: area.h:85
Definition: area.h:43
Definition: area.h:65
void func_8027A220(Vp *a, Vp *b, u8 c, u8 d, u8 e)
Definition: area.c:79
u16 musicParam2
Definition: area.h:203
Definition: area.h:36
Definition: area.h:8
Vec3s displacement
Definition: area.h:118
Definition: area.h:103
signed char s8
Definition: ultratypes.h:11
Definition: area.h:21
u8 green
Definition: area.h:210
unsigned short int u16
Definition: ultratypes.h:14
u8 blue
Definition: area.h:211
Definition: area.h:52
f32 unk68
Definition: area.h:167
Definition: area.h:28
Definition: area.h:88
u8 unk64
Definition: area.h:165
Definition: area.h:58
signed short int s16
Definition: ultratypes.h:13
Definition: area.h:90
void func_8027A7C4(void)
Definition: area.c:192
Definition: area.h:234
s8 * surfaceRooms
Definition: area.h:192
void play_transition_after_delay(s16 transType, s16 time, u8 red, u8 green, u8 blue, s16 delay)
Definition: area.c:339
s16 gCurrAreaIndex
Definition: area.c:31
struct WarpTransition gWarpTransition
Definition: area.c:27
Definition: area.h:91
Definition: area.h:70
Vec3s pos
Definition: area.h:181
s16 endCircleX
Definition: area.h:217
Definition: area.h:59
Definition: area.h:62
Definition: types.h:77
u8 type
Definition: area.h:237
Definition: area.h:72
Definition: area.h:42
s16 startCircleRadius
Definition: area.h:213
Definition: area.h:19
u8 cutscene
Definition: area.h:161
Definition: area.h:55
Definition: area.h:54
s16 storedYaw
Definition: area.h:163
u8 destArea
Definition: area.h:99
struct SpawnInfo gPlayerSpawnInfos[]
Definition: area.c:23
u8 defPreset
Definition: area.h:154
Definition: area.h:78
u8 destNode
Definition: area.h:100
LevelNum
Definition: area.h:49
s8 activeAreaIndex
Definition: area.h:126
struct Area * gCurrentArea
Definition: area.c:39
s16 gCurrLevelNum
Definition: area.c:50
Definition: area.h:66
Definition: area.h:61
Definition: area.h:67
Definition: area.h:114
s16 unk00
Definition: area.h:172
s16 gCurrActNum
Definition: area.c:30
Definition: area.h:63
s16 gCurrSaveFileNum
Definition: area.c:49
s16 unk02
Definition: area.h:173
Definition: area.h:14
Definition: area.h:37
void play_transition(s16 transType, s16 time, u8 red, u8 green, u8 blue)
Definition: area.c:283
s16 Vec3s[3]
Definition: types.h:24
Definition: area.h:179
Definition: area.h:26
s16 unk04
Definition: area.h:174
s16 D_8033A75E
Definition: area.c:33
Definition: area.h:76
Definition: area.h:87
void load_area(s32 index)
Definition: area.c:209
Definition: area.h:33
u8 id
Definition: area.h:97
void load_mario_area(void)
Definition: area.c:238
float f32
Definition: ultratypes.h:29
s16 endCircleRadius
Definition: area.h:214
data
Definition: seq_decoder.py:292
Definition: area.h:13
void change_area(s32 index)
Definition: area.c:258
Vec3f focus
Definition: area.h:156
s16 gCurrCourseNum
Definition: area.c:29
Definition: area.h:29
Definition: area.h:84
struct SpawnInfo * objectSpawnInfos
Definition: area.h:197
void area_update_objects(void)
Definition: area.c:274
Definition: area.h:95
Definition: area.h:79
at end of structure union member declaration In standard C each member declaration must be terminated by a
Definition: err.english.cc:690
struct ObjectWarpNode * next
Definition: area.h:107
Definition: area.h:40
s16 endCircleY
Definition: area.h:218
Definition: types.h:122
u8 destLevel
Definition: area.h:98
Definition: area.h:83
Definition: area.h:64
Definition: area.h:25
Definition: area.h:16
Definition: area.h:207
#define o
Definition: behavior_actions.c:40
s8 index
Definition: area.h:187
Definition: area.h:185
u8 isActive
Definition: area.h:236
struct ObjectWarpNode * area_get_warp_node(u8 id)
Definition: area.c:129
u8 pauseRendering
Definition: area.h:239
Definition: area.h:11
Definition: area.h:68
s16 startCircleX
Definition: area.h:215
u16 terrainType
Definition: area.h:189
Definition: area.h:38
struct Area * gAreas
Definition: area.c:38
u8 id
Definition: area.h:116
u8 area
Definition: area.h:117
Vec3f pos
Definition: area.h:157
struct Area gAreaData[]
Definition: area.c:25
u32 get_mario_spawn_type(struct Object *o)
Definition: area.c:118
s8 flags
Definition: area.h:188
Definition: area.h:12
Definition: area.h:170
struct SpawnInfo * next
Definition: area.h:130
Definition: area.h:17
void clear_areas(void)
Definition: area.c:161
Definition: area.h:34
s16 unk10
Definition: area.h:220
Definition: area.h:92
Definition: area.h:151
Definition: area.h:27
s8 areaIndex
Definition: area.h:125
struct GraphNode * D_8033A160[]
Definition: area.c:24
struct LevelCamera * camera
Definition: area.h:198
Definition: area.h:82
Definition: area.h:20
s16 startCircleY
Definition: area.h:216
void print_intro_text(void)
Definition: area.c:96
void func_8027AA88(void)
Definition: area.c:248
Definition: area.h:80
Definition: area.h:24
u8 currPreset
Definition: area.h:153
Vec3s startPos
Definition: area.h:123
s16 D_8033A760
Definition: area.c:34
s16 * macroObjects
Definition: area.h:193
struct ObjectWarpNode * warpNodes
Definition: area.h:194
Definition: area.h:56
CourseNum
Definition: area.h:6
unsigned char u8
Definition: ultratypes.h:12
struct GraphNode * unk18
Definition: area.h:129
Definition: area.h:15
Definition: area.h:73
s16 unk06
Definition: area.h:175
void render_game(void)
Definition: area.c:344
Definition: gbi_old.h:39
Definition: area.h:32
Definition: area.h:77
u32 behaviorArg
Definition: area.h:127
u8 time
Definition: area.h:238
Definition: area.h:35
void func_8027A998(void)
Definition: area.c:227
s16 trueYaw
Definition: area.h:155
Definition: area.h:22
s16 gSavedCourseNum
Definition: area.c:32
Definition: area.h:41
f32 xFocus
Definition: area.h:159
s16 * terrainData
Definition: area.h:191
Definition: area.h:71
Definition: area.h:69
signed int s32
Definition: ultratypes.h:15
Definition: area.h:18
s16 unk08
Definition: area.h:176
Definition: area.h:86
Definition: area.h:23
Definition: area.h:44
struct SpawnInfo * gMarioSpawnInfo
Definition: area.c:36
Definition: area.h:89
struct InstantWarp * instantWarps
Definition: area.h:196
Definition: area.h:53
f32 zFocus
Definition: area.h:160
Definition: area.h:51
unsigned int u32
Definition: ultratypes.h:16
Definition: area.h:39
Definition: area.h:74
Definition: area.h:81
struct UnusedArea28 * unused28
Definition: area.h:199
Vec3s startAngle
Definition: area.h:124
struct GraphNode * unk04
Definition: area.h:190
void * behaviorScript
Definition: area.h:128
s16 strength
Definition: area.h:182
Definition: area.h:60
Definition: area.h:31