Mario Kart 64
Loading...
Searching...
No Matches
main.h
Go to the documentation of this file.
1#ifndef MAIN_H
2#define MAIN_H
3
4
5// Message IDs
6#define MESG_SP_COMPLETE 100
7#define MESG_DP_COMPLETE 101
8#define MESG_VI_VBLANK 102
9#define MESG_START_GFX_SPTASK 103
10#define MESG_NMI_REQUEST 104
11
12#define MTX_HUD_POOL_SIZE 800
13
14#ifdef AVOID_UB
15#define MTX_HUD_POOL_SIZE_MAX MTX_HUD_POOL_SIZE
16#else
17#define MTX_HUD_POOL_SIZE_MAX MTX_HUD_POOL_SIZE - 50
18#endif
19
20#define MTX_OBJECT_POOL_SIZE 128
21
23// functions called by mtxShadow multiply by 8
24// 8 Kart AI Players * 4 real players in coop
25#define MTX_SHADOW_POOL_SIZE 8 * 4
26
28// functions called by mtxKart multiply by 8
29// 8 Kart AI Players * 4 real players in coop
30#define MTX_KART_POOL_SIZE 8 * 4
31
32#define MTX_EFFECT_POOL_SIZE 660
33
34// func_80095BD0 sets an OOB pool size max check (760)
35#ifdef AVOID_UB
36#define MTX_EFFECT_POOL_SIZE_MAX MTX_EFFECT_POOL_SIZE
37#else
38#define MTX_EFFECT_POOL_SIZE_MAX MTX_EFFECT_POOL_SIZE + 100
39#endif
40
41#define GFX_POOL_SIZE 7500
42
43struct GfxPool {
44 /* 0x00000 */ Mtx mtxScreen; // Matrix for skybox and startup logo
45 /* 0x00040 */ Mtx mtxPersp[4]; // Matrix for perspective screen modes
46 /* 0x00140 */ Mtx mtxOrtho; // Matrix for ortho hud screen modes
47 /* 0x00180 */ Mtx mtxUnk; // Matrix unused
48 /* 0x001C0 */ Mtx mtxLookAt[4]; // Matrix for lookat screen modes
49 /* 0x002C0 */ Mtx mtxHud[MTX_HUD_POOL_SIZE]; // Matrix hud elements and 2D related effects
50 /* 0x0CAC0 */ Mtx mtxObject[MTX_OBJECT_POOL_SIZE]; // Matrix course objects
51 /* 0x0EAC0 */ Mtx mtxShadow[MTX_SHADOW_POOL_SIZE]; // Matrix shadow characters
52 /* 0x0F2C0 */ Mtx mtxKart[MTX_KART_POOL_SIZE]; // Matrix kart characters
53 /* 0x0FAC0 */ Mtx mtxEffect[MTX_EFFECT_POOL_SIZE]; // Matrix misc effects
54 /* 0x19FC0 */ Mtx mtxArr[4]; // Matrix unused array
55 /* 0x1A0C0 */ Gfx gfxPool[GFX_POOL_SIZE];
56 /* 0x28B20 */ struct SPTask spTask;
57}; // size = 0x28B70
58
63
64void create_thread(OSThread*, OSId, void (*entry)(void *), void*, void*, OSPri);
65void main_func(void);
66void thread1_idle(void*);
67void setup_mesg_queues(void);
68void start_sptask(s32);
70void init_controllers(void);
72void read_controllers(void);
73void func_80000BEC(void);
74void dispatch_audio_sptask(struct SPTask*);
75void exec_display_list(struct SPTask*);
76void init_rcp(void);
79void rendering_init(void);
80void config_gfx_pool(void);
81void display_and_vsync(void);
83void init_segment_racing(void);
84void dma_copy(u8*, u8*, size_t);
85void setup_game_memory(void);
87void race_logic_loop(void);
88void game_state_handler(void);
89void interrupt_gfx_sptask(void);
90void receive_new_tasks(void);
91void set_vblank_handler(s32, struct VblankHandler*, OSMesgQueue*, OSMesg*);
92void start_gfx_sptask(void);
93void handle_vblank(void);
94void handle_dp_complete(void);
95void handle_sp_complete(void);
96void thread3_video(void*);
97void func_800025D4(void);
98void func_80002600(void);
99void func_8000262C(void);
100void func_80002658(void);
101void update_gamestate(void);
103void thread4_audio(void*);
104
105
106extern struct VblankHandler *gVblankHandler1;
107extern struct VblankHandler *gVblankHandler2;
108
109extern struct SPTask *gActiveSPTask;
110extern struct SPTask *sCurrentAudioSPTask;
111extern struct SPTask* sCurrentDisplaySPTask;
112extern struct SPTask* sNextAudioSPTask;
113extern struct SPTask* sNextDisplaySPTask;
114
115extern struct Controller gControllers[];
116extern struct Controller *gControllerOne;
117extern struct Controller *gControllerTwo;
118extern struct Controller *gControllerThree;
119extern struct Controller *gControllerFour;
120extern struct Controller *gControllerFive;
121extern struct Controller *gControllerSix;
122extern struct Controller *gControllerSeven;
123extern struct Controller *gControllerEight;
124
125extern Player gPlayers[];
126extern Player *gPlayerOne;
127extern Player *gPlayerTwo;
128extern Player *gPlayerThree;
129extern Player *gPlayerFour;
130extern Player *gPlayerFive;
131extern Player *gPlayerSix;
132extern Player *gPlayerSeven;
133extern Player *gPlayerEight;
134
135extern Player *gPlayerOneCopy;
136extern Player *gPlayerTwoCopy;
137
138extern struct GfxPool gGfxPools[];
139extern struct GfxPool *gGfxPool;
140
144extern OSMesgQueue sSoundMesgQueue;
145extern OSMesg sSoundMesgBuf[1];
146extern OSMesg gDmaMesgBuf[1], gGameMesgBuf;
147extern OSMesg gGfxMesgBuf[];
148extern OSMesg gIntrMesgBuf[16], gSPTaskMesgBuf[16];
149extern OSMesg gMainReceivedMesg;
150extern OSIoMesg gDmaIoMesg;
151extern OSMesgQueue gSIEventMesgQueue;
152extern OSMesg gSIEventMesgBuf[3];
153
155
157extern u8 gControllerBits;
158
159extern struct UnkStruct_8015F584 D_8014F110[];
160extern u16 gNumActors;
162extern s32 gTickSpeed;
163extern f32 D_80150118;
164extern u16 wasSoftReset;
165extern u16 D_8015011E;
166
167extern s32 D_80150120;
168extern s32 gGotoMode;
169extern f32 gCameraZoom[];
170
171extern f32 gScreenAspect;
172extern f32 D_8015014C;
173extern f32 D_80150150;
174
175extern struct D_80150158 gD_80150158[];
176extern uintptr_t gSegmentTable[];
177extern Gfx *gDisplayListHead;
178extern struct SPTask *gGfxSPTask;
179extern s32 D_801502A0;
180extern s32 D_801502A4;
181extern u16 *gPhysicalFramebuffers[];
182extern uintptr_t gPhysicalZBuffer;
183extern Mat4 D_801502C0;
184
185extern s32 padding[];
186
187extern u16 D_80152300[];
188extern u16 D_80152308;
189
190extern OSThread gIdleThread;
191extern u8 gIdleThreadStack[];
193extern u8 gVideoThreadStack[];
195extern u8 gGameLoopThreadStack[];
197extern u8 gAudioThreadStack[];
198
200extern u32 gGfxSPTaskStack[];
201extern OSMesg gPIMesgBuf[];
202extern OSMesgQueue gPIMesgQueue;
203void race_logic_loop(void);
204extern s32 gGamestate;
205#ifndef D_800DC510_AS_U16
206 // Prevent overlapping writes in gcc
207 // Whether D_800DC510 was intended to be a separate variable in main.c from the rest of the game is unknown
208 #ifdef GCC
209 extern u16 D_800DC510;
210 #else
211 extern s32 D_800DC510;
212 #endif
213#endif
214
215extern u16 D_800DC514;
217extern u16 gDemoMode;
218extern u16 gEnableDebugMode;
219extern s32 gGamestateNext;
223
224extern s32 gModeSelection;
225extern s32 D_800DC540;
226extern s32 D_800DC544;
227extern s32 gCCSelection;
228extern s32 gGlobalTimer;
231extern s32 D_800DC568;
232extern s32 D_800DC56C[];
233extern s16 sNumVBlanks;
234extern f32 gVBlankTimer;
235extern f32 gCourseTimer;
236
237// end of definition of main.c variables
238
239#endif
s16 gCourseMaxZ
Definition code_800029B0.c:92
f32 Mat4[4][4]
Definition common_structs.h:16
OSMesg gPIMesgBuf[]
Definition main.c:165
Player * gPlayerOne
Definition main.c:74
void init_segment_racing(void)
Definition main.c:482
OSMesgQueue gDmaMesgQueue
Definition main.c:95
void dispatch_audio_sptask(struct SPTask *)
Definition main.c:373
struct SPTask * sNextDisplaySPTask
Definition main.c:60
struct Controller * gControllerTwo
Definition main.c:65
void interrupt_gfx_sptask(void)
Definition main.c:912
Gfx * gDisplayListHead
Definition main.c:133
void func_80002600(void)
Definition main.c:1108
u8 gVideoThreadStack[]
Definition main.c:153
OSMesgQueue unused_gMsgQueue
Definition main.h:143
OSMesgQueue gGameVblankQueue
Definition main.h:143
s32 D_800DC544
Definition main.c:184
Player * gPlayerTwoCopy
Definition main.c:84
void thread4_audio(void *)
s32 D_80150120
Definition main.c:119
struct UnkStruct_8015F584 D_8014F110[]
Definition main.c:110
f32 D_80150150
Definition main.c:128
OSMesg gGfxMesgBuf[]
Definition main.c:99
void func_8000262C(void)
Definition main.c:1114
OSIoMesg gDmaIoMesg
Definition main.c:103
void receive_new_tasks(void)
Definition main.c:919
s32 padding[]
Definition main.c:144
f32 D_80150118
Definition main.c:114
void thread3_video(void *)
struct D_80150158 gD_80150158[]
Definition main.c:131
Player * gPlayerSix
Definition main.c:79
u16 wasSoftReset
Definition main.c:116
f32 gCourseTimer
Definition main.c:199
#define MTX_OBJECT_POOL_SIZE
Definition main.h:20
s16 sNumVBlanks
Definition main.c:196
OSMesg gIntrMesgBuf[16]
Definition main.c:101
void exec_display_list(struct SPTask *)
Definition main.c:378
u16 sRenderingFramebuffer
Definition main.c:192
void func_80002658(void)
Definition main.c:1120
#define MTX_EFFECT_POOL_SIZE
Definition main.h:32
#define MTX_KART_POOL_SIZE
Definition main.h:30
s32 D_800DC540
Definition main.c:183
struct SPTask * sNextAudioSPTask
Definition main.c:59
s32 gGlobalTimer
Definition main.c:186
OSMesgQueue gPIMesgQueue
Definition main.c:166
void handle_dp_complete(void)
Definition main.c:1005
s32 D_801502A0
Definition main.c:136
OSMesg gMainReceivedMesg
Definition main.c:102
void start_sptask(s32)
Definition main.c:256
struct Controller * gControllerThree
Definition main.c:66
void main_func(void)
Definition main.c:207
u8 gAudioThreadStack[]
Definition main.c:159
u16 * gPhysicalFramebuffers[]
Definition main.c:138
Mat4 D_801502C0
Definition main.c:142
void read_controllers(void)
Definition main.c:351
OSContStatus gControllerStatuses[]
Definition main.c:107
struct Controller * gControllerFour
Definition main.c:67
s32 D_800DC510
Definition main.c:170
f32 gScreenAspect
Definition main.c:126
u16 D_80152308
Definition main.c:147
s32 gGamestateNext
Definition main.c:175
OSMesg sSoundMesgBuf[1]
Definition main.c:97
u16 D_800DC514
Definition main.c:171
Player * gPlayerFour
Definition main.c:77
Player * gPlayerOneCopy
Definition main.c:83
void end_master_display_list(void)
Definition main.c:405
struct Controller gControllers[]
Definition main.c:63
struct VblankHandler sSoundVblankHandler
Definition main.c:94
void func_80000BEC(void)
Definition main.c:369
s32 gPlayerCountSelection1
Definition main.c:180
OSMesgQueue gSPTaskMesgQueue
Definition main.h:143
void handle_vblank(void)
Definition main.c:966
void game_init_clear_framebuffer(void)
Definition main.c:561
u8 gGfxSPTaskYieldBuffer[]
Definition main.c:163
void thread1_idle(void *)
Definition main.c:222
Player * gPlayerFive
Definition main.c:78
s32 gScreenModeSelection
Definition main.c:178
OSMesgQueue gGfxVblankQueue
Definition main.h:143
s32 gGotoMode
Definition main.c:120
u16 D_8015011E
Definition main.c:117
OSMesg gGameMesgBuf
Definition main.h:146
void func_800025D4(void)
Definition main.c:1102
void setup_game_memory(void)
Definition main.c:509
Player * gPlayerTwo
Definition main.c:75
uintptr_t gPhysicalZBuffer
Definition main.c:139
#define GFX_POOL_SIZE
Definition main.h:41
u16 gNumActors
Definition main.c:111
#define MTX_SHADOW_POOL_SIZE
Definition main.h:25
void * clear_framebuffer(s32)
Definition main.c:413
struct SPTask * gGfxSPTask
Definition main.c:135
Player gPlayers[]
Definition main.c:73
void config_gfx_pool(void)
Definition main.c:441
struct Controller * gControllerFive
Definition main.c:68
s32 gGamestate
Definition main.c:168
s32 D_801502A4
Definition main.c:137
struct Controller * gControllerSeven
Definition main.c:70
struct GfxPool * gGfxPool
Definition main.c:90
OSMesg gDmaMesgBuf[1]
Definition main.c:98
void init_segment_ending_sequences(void)
Definition main.c:474
OSThread gGameLoopThread
Definition main.c:156
u8 gIdleThreadStack[]
Definition main.c:151
void display_and_vsync(void)
Definition main.c:454
u16 gMatrixObjectCount
Definition main.c:112
s32 D_800DC568
Definition main.c:194
struct GfxPool gGfxPools[]
Definition main.c:89
void update_controller(s32)
Definition main.c:315
struct VblankHandler * gVblankHandler2
Definition main.c:54
OSMesgQueue sSoundMesgQueue
Definition main.c:96
Player * gPlayerSeven
Definition main.c:80
u8 gGameLoopThreadStack[]
Definition main.c:157
void rendering_init(void)
Definition main.c:428
OSThread gVideoThread
Definition main.c:152
struct SPTask * sCurrentAudioSPTask
Definition main.c:57
void create_gfx_task_structure(void)
Definition main.c:271
s32 gTickSpeed
Definition main.c:113
OSMesgQueue gIntrMesgQueue
Definition main.h:143
void handle_sp_complete(void)
Definition main.c:1015
#define MTX_HUD_POOL_SIZE
Definition main.h:12
struct SPTask * sCurrentDisplaySPTask
Definition main.c:58
Player * gPlayerEight
Definition main.c:81
struct SPTask * gActiveSPTask
Definition main.c:56
OSContPad gControllerPads[]
Definition main.c:108
struct Controller * gControllerSix
Definition main.c:69
u16 D_80152300[]
Definition main.c:146
void update_gamestate(void)
Definition main.c:1131
s32 gCCSelection
Definition main.c:185
OSMesg gSIEventMesgBuf[3]
Definition main.c:105
u16 gDemoMode
Definition main.c:173
s32 D_800DC56C[]
Definition main.c:195
struct VblankHandler gGameVblankHandler
Definition main.c:93
u32 gGfxSPTaskStack[]
Definition main.c:164
void thread5_game_loop(void *)
u16 gEnableDebugMode
Definition main.c:174
void set_vblank_handler(s32, struct VblankHandler *, OSMesgQueue *, OSMesg *)
Definition main.c:945
s32 gActiveScreenMode
Definition main.c:177
void setup_mesg_queues(void)
Definition main.c:247
struct Controller * gControllerEight
Definition main.c:71
void game_state_handler(void)
Definition main.c:868
struct VblankHandler * gVblankHandler1
Definition main.c:53
u16 creditsRenderMode
Definition main.c:172
OSMesg gSPTaskMesgBuf[16]
Definition main.h:148
void init_controllers(void)
Definition main.c:304
Player * gPlayerThree
Definition main.c:76
OSMesgQueue gSIEventMesgQueue
Definition main.c:104
f32 gVBlankTimer
Definition main.c:198
OSThread gAudioThread
Definition main.c:158
void dma_copy(u8 *, u8 *, size_t)
Definition main.c:490
u16 sRenderedFramebuffer
Definition main.c:191
uintptr_t gSegmentTable[]
Definition main.c:132
struct Controller * gControllerOne
Definition main.c:64
void start_gfx_sptask(void)
Definition main.c:958
f32 gCameraZoom[]
Definition main.c:123
f32 D_8015014C
Definition main.c:127
OSThread gIdleThread
Definition main.c:150
void create_thread(OSThread *, OSId, void(*entry)(void *), void *, void *, OSPri)
Definition main.c:201
u8 gControllerBits
Definition main.c:109
s32 gModeSelection
Definition main.c:182
void init_rcp(void)
Definition main.c:394
void race_logic_loop(void)
Definition main.c:566
s32 OSId
Definition os_thread.h:22
s32 OSPri
Definition os_thread.h:21
Definition common_structs.h:71
Definition common_structs.h:64
Definition main.h:43
Mtx mtxHud[MTX_HUD_POOL_SIZE]
Definition main.h:49
Mtx mtxLookAt[4]
Definition main.h:48
Mtx mtxKart[MTX_KART_POOL_SIZE]
Definition main.h:52
Mtx mtxObject[MTX_OBJECT_POOL_SIZE]
Definition main.h:50
Mtx mtxEffect[MTX_EFFECT_POOL_SIZE]
Definition main.h:53
Mtx mtxPersp[4]
Definition main.h:45
struct SPTask spTask
Definition main.h:56
Gfx gfxPool[GFX_POOL_SIZE]
Definition main.h:55
Mtx mtxOrtho
Definition main.h:46
Mtx mtxShadow[MTX_SHADOW_POOL_SIZE]
Definition main.h:51
Mtx mtxUnk
Definition main.h:47
Mtx mtxScreen
Definition main.h:44
Mtx mtxArr[4]
Definition main.h:54
Definition os_pi.h:53
Definition os_thread.h:51
Definition common_structs.h:269
Definition common_structs.h:51
Definition main.h:59
u16 unk0
Definition main.h:60
u16 unk2
Definition main.h:61
Definition common_structs.h:59
signed int s32
Definition ultratypes.h:15
unsigned int u32
Definition ultratypes.h:16
signed short int s16
Definition ultratypes.h:13
float f32
Definition ultratypes.h:33
unsigned short int u16
Definition ultratypes.h:14
unsigned char u8
Definition ultratypes.h:12