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#include "mk64.h"
5#include "common_structs.h"
6
7// Message IDs
8#define MESG_SP_COMPLETE 100
9#define MESG_DP_COMPLETE 101
10#define MESG_VI_VBLANK 102
11#define MESG_START_GFX_SPTASK 103
12#define MESG_NMI_REQUEST 104
13
14#define MTX_HUD_POOL_SIZE 1600
15
16#ifdef AVOID_UB
17#define MTX_HUD_POOL_SIZE_MAX MTX_HUD_POOL_SIZE
18#else
19#define MTX_HUD_POOL_SIZE_MAX MTX_HUD_POOL_SIZE - 50
20#endif
21
22#define MTX_OBJECT_POOL_SIZE 512
23
25// functions called by mtxShadow multiply by 8
26// 8 Kart AI Players * 4 real players in coop
27#define MTX_SHADOW_POOL_SIZE 8 * 4
28
30// functions called by mtxKart multiply by 8
31// 8 Kart AI Players * 4 real players in coop
32#define MTX_KART_POOL_SIZE 8 * 4
33
34#define MTX_EFFECT_POOL_SIZE 660
35
36// func_80095BD0 sets an OOB pool size max check (760)
37#ifdef AVOID_UB
38#define MTX_EFFECT_POOL_SIZE_MAX MTX_EFFECT_POOL_SIZE
39#else
40#define MTX_EFFECT_POOL_SIZE_MAX MTX_EFFECT_POOL_SIZE + 100
41#endif
42
43#define GFX_POOL_SIZE 15000
44
45struct GfxPool {
46 /* 0x00000 */ Mtx mtxScreen; // Matrix for skybox and startup logo
47 /* 0x00040 */ Mtx mtxPersp[4]; // Matrix for perspective screen modes
48 /* 0x00140 */ Mtx mtxOrtho; // Matrix for ortho hud screen modes
49 /* 0x00180 */ Mtx mtxUnk; // Matrix unused
50 /* 0x001C0 */ Mtx mtxLookAt[4]; // Matrix for lookat screen modes
51 /* 0x002C0 */ Mtx mtxHud[MTX_HUD_POOL_SIZE]; // Matrix hud elements and 2D related effects
52 /* 0x0CAC0 */ Mtx mtxObject[MTX_OBJECT_POOL_SIZE]; // Matrix course objects
53 /* 0x0EAC0 */ Mtx mtxShadow[MTX_SHADOW_POOL_SIZE]; // Matrix shadow characters
54 /* 0x0F2C0 */ Mtx mtxKart[MTX_KART_POOL_SIZE]; // Matrix kart characters
55 /* 0x0FAC0 */ Mtx mtxEffect[MTX_EFFECT_POOL_SIZE]; // Matrix misc effects
56 /* 0x19FC0 */ Mtx mtxArr[4]; // Matrix unused array
57 /* 0x1A0C0 */ Gfx gfxPool[GFX_POOL_SIZE];
58 /* 0x28B20 */ struct SPTask spTask;
59}; // size = 0x28B70
60
61typedef struct {
62 u16 triangle; // Index for gCollisionIndices which has indexes for gCollisionMesh
65
66void create_thread(OSThread*, OSId, void (*entry)(void*), void*, void*, OSPri);
67void main_func(void);
68void thread1_idle(void*);
69void setup_mesg_queues(void);
70void start_sptask(s32);
72void init_controllers(void);
73void update_controller(s32);
74void read_controllers(void);
75void func_80000BEC(void);
76void dispatch_audio_sptask(struct SPTask*);
77void exec_display_list(struct SPTask*);
78void init_rcp(void);
80void* clear_framebuffer(s32);
81void rendering_init(void);
82void config_gfx_pool(void);
83void display_and_vsync(void);
85void init_segment_racing(void);
86void dma_copy(u8*, u8*, size_t);
87void setup_game_memory(void);
89void race_logic_loop(void);
90void game_state_handler(void);
91void interrupt_gfx_sptask(void);
92void receive_new_tasks(void);
93void set_vblank_handler(s32, struct VblankHandler*, OSMesgQueue*, OSMesg*);
94void start_gfx_sptask(void);
95void handle_vblank(void);
96void handle_dp_complete(void);
97void handle_sp_complete(void);
98void thread3_video(void*);
99void func_800025D4(void);
100void func_80002600(void);
101void func_8000262C(void);
102void func_80002658(void);
103void update_gamestate(void);
104void thread5_game_loop(void);
105void thread5_iteration(void);
106void thread4_audio(void*);
107extern f32 gDeltaTime;
108
109extern struct VblankHandler* gVblankHandler1;
110extern struct VblankHandler* gVblankHandler2;
111
112extern struct SPTask* gActiveSPTask;
113extern struct SPTask* sCurrentAudioSPTask;
114extern struct SPTask* sCurrentDisplaySPTask;
115extern struct SPTask* sNextAudioSPTask;
116extern struct SPTask* sNextDisplaySPTask;
117
118extern struct Controller gControllers[];
119extern struct Controller* gControllerOne;
120extern struct Controller* gControllerTwo;
121extern struct Controller* gControllerThree;
122extern struct Controller* gControllerFour;
123extern struct Controller* gControllerFive;
124extern struct Controller* gControllerSix;
125extern struct Controller* gControllerSeven;
126extern struct Controller* gControllerEight;
127
128extern Player gPlayers[];
129extern Player* gPlayerOne;
130extern Player* gPlayerTwo;
131extern Player* gPlayerThree;
132extern Player* gPlayerFour;
133extern Player* gPlayerFive;
134extern Player* gPlayerSix;
135extern Player* gPlayerSeven;
136extern Player* gPlayerEight;
137
138extern Player* gPlayerOneCopy;
139extern Player* gPlayerTwoCopy;
140
141extern struct GfxPool gGfxPools[];
142extern struct GfxPool* gGfxPool;
143
147extern OSMesgQueue sSoundMesgQueue;
148extern OSMesg sSoundMesgBuf[1];
149extern OSMesg gDmaMesgBuf[1], gGameMesgBuf;
150extern OSMesg gGfxMesgBuf[];
151extern OSMesg gIntrMesgBuf[16], gSPTaskMesgBuf[16];
152extern OSMesg gMainReceivedMesg;
153extern OSIoMesg gDmaIoMesg;
154extern OSMesgQueue gSIEventMesgQueue;
155extern OSMesg gSIEventMesgBuf[3];
156
157extern OSContStatus gControllerStatuses[];
158
159extern OSContPad gControllerPads[];
160extern u8 gControllerBits;
161
163extern u16 gNumActors;
164extern u16 gMatrixObjectCount;
165extern s32 gTickLogic;
166extern s32 gTickVisuals;
167extern f32 D_80150118;
168extern u16 wasSoftReset;
169extern u16 D_8015011E;
170
171extern s32 D_80150120;
172extern s32 gGotoMode;
173extern f32 gCameraZoom[];
174
175extern f32 gScreenAspect;
176extern f32 D_8015014C;
177extern f32 D_80150150;
178
179extern struct D_80150158 gD_80150158[];
180extern uintptr_t gSegmentTable[];
181extern Gfx* gDisplayListHead;
182extern struct SPTask* gGfxSPTask;
183extern s32 D_801502A0;
184extern s32 D_801502A4;
185extern u16* gPhysicalFramebuffers[];
187extern uintptr_t gPhysicalZBuffer;
188extern Mat4 sBillBoardMtx;
189
190extern s32 padding[];
191
192extern u16 D_80152300[];
193extern u16 D_80152308;
194
195extern OSThread gIdleThread;
196extern u8 gIdleThreadStack[];
198extern u8 gVideoThreadStack[];
200extern u8 gGameLoopThreadStack[];
202extern u8 gAudioThreadStack[];
203
204extern u8 gGfxSPTaskYieldBuffer[];
205extern u32 gGfxSPTaskStack[];
206extern OSMesg gPIMesgBuf[];
207extern OSMesgQueue gPIMesgQueue;
208void race_logic_loop(void);
209extern s32 gGamestate;
210#ifndef gRaceState_AS_U16
211// Prevent overlapping writes in gcc
212// Whether gRaceState was intended to be a separate variable in main.c from the rest of the game is unknown
213#ifdef GCC
214extern u16 gRaceState;
215#else
216extern s32 gRaceState;
217#endif
218#endif
219
220extern u16 D_800DC514;
221extern u16 creditsRenderMode;
222extern u16 gDemoMode;
223extern u16 gEnableDebugMode;
224extern s32 gGamestateNext;
225extern s32 gActiveScreenMode;
226extern s32 gScreenModeSelection;
227extern s32 gPlayerCountSelection1;
228
229extern s32 gModeSelection;
230extern s32 D_800DC540;
231extern s32 D_800DC544;
232extern s32 gCCSelection;
233extern s32 gGlobalTimer;
234extern u16 sRenderedFramebuffer;
235extern u16 sRenderingFramebuffer;
236extern s32 D_800DC568;
237extern s32 D_800DC56C[];
238extern s16 sNumVBlanks;
239extern f32 gVBlankTimer;
240extern f32 gCourseTimer;
241
242// end of definition of main.c variables
243
244#endif
f32 Mat4[4][4]
Definition common_structs.h:20
Player * gPlayerOne
Definition main.c:82
OSMesgQueue gDmaMesgQueue
Definition main.c:103
u16 gRaceState
Definition main.c:182
struct SPTask * sNextDisplaySPTask
Definition main.c:69
ALIGNED8 u8 gGameLoopThreadStack[STACKSIZE]
Definition main.c:169
struct Controller * gControllerTwo
Definition main.c:73
Gfx * gDisplayListHead
Definition main.c:144
OSMesgQueue unused_gMsgQueue
Definition main.c:103
OSMesgQueue gGameVblankQueue
Definition main.c:103
s32 D_800DC544
Definition main.c:196
OSMesg gPIMesgBuf[32]
Definition main.c:177
Player * gPlayerTwoCopy
Definition main.c:92
s32 D_80150120
Definition main.c:130
f32 D_80150150
Definition main.c:139
OSIoMesg gDmaIoMesg
Definition main.c:111
f32 D_80150118
Definition main.c:125
Player * gPlayerSix
Definition main.c:87
u16 wasSoftReset
Definition main.c:127
f32 gCourseTimer
Definition main.c:211
s16 sNumVBlanks
Definition main.c:208
OSMesg gIntrMesgBuf[16]
Definition main.c:109
u16 sRenderingFramebuffer
Definition main.c:204
OSMesg gGfxMesgBuf[1]
Definition main.c:107
u16 D_80152300[4]
Definition main.c:158
s32 D_800DC540
Definition main.c:195
struct SPTask * sNextAudioSPTask
Definition main.c:68
s32 gGlobalTimer
Definition main.c:198
OSMesgQueue gPIMesgQueue
Definition main.c:178
s32 D_801502A0
Definition main.c:147
OSContStatus gControllerStatuses[4]
Definition main.c:115
OSMesg gMainReceivedMesg
Definition main.c:110
struct Controller * gControllerThree
Definition main.c:74
struct Controller * gControllerFour
Definition main.c:75
OSContPad gControllerPads[4]
Definition main.c:116
f32 gScreenAspect
Definition main.c:137
Player gPlayers[NUM_PLAYERS]
Definition main.c:81
u16 D_80152308
Definition main.c:159
s32 gGamestateNext
Definition main.c:187
OSMesg sSoundMesgBuf[1]
Definition main.c:105
u16 D_800DC514
Definition main.c:183
f32 gCameraZoom[4]
Definition main.c:134
Player * gPlayerFour
Definition main.c:85
Player * gPlayerOneCopy
Definition main.c:91
struct VblankHandler sSoundVblankHandler
Definition main.c:102
s32 gPlayerCountSelection1
Definition main.c:192
OSMesgQueue gSPTaskMesgQueue
Definition main.c:103
Player * gPlayerFive
Definition main.c:86
s32 gScreenModeSelection
Definition main.c:190
OSMesgQueue gGfxVblankQueue
Definition main.c:103
s32 gGotoMode
Definition main.c:131
u16 D_8015011E
Definition main.c:128
ALIGNED8 u8 gAudioThreadStack[STACKSIZE]
Definition main.c:171
OSMesg gGameMesgBuf
Definition main.c:106
u16 gPortFramebuffers[3][SCREEN_WIDTH *SCREEN_HEIGHT]
Definition main.c:150
Player * gPlayerTwo
Definition main.c:83
uintptr_t gPhysicalZBuffer
Definition main.c:151
u16 gNumActors
Definition main.c:120
struct SPTask * gGfxSPTask
Definition main.c:146
struct Controller gControllers[NUM_PLAYERS]
Definition main.c:71
ALIGNED8 u8 gGfxSPTaskYieldBuffer[4352]
Definition main.c:175
struct Controller * gControllerFive
Definition main.c:76
s32 gGamestate
Definition main.c:180
s32 D_800DC56C[8]
Definition main.c:207
s32 D_801502A4
Definition main.c:148
struct Controller * gControllerSeven
Definition main.c:78
struct GfxPool * gGfxPool
Definition main.c:98
OSMesg gDmaMesgBuf[1]
Definition main.c:106
OSThread gGameLoopThread
Definition main.c:168
u16 gMatrixObjectCount
Definition main.c:121
s32 D_800DC568
Definition main.c:206
struct VblankHandler * gVblankHandler2
Definition main.c:63
OSMesgQueue sSoundMesgQueue
Definition main.c:104
Player * gPlayerSeven
Definition main.c:88
CollisionGrid gCollisionGrid[1024]
Definition main.c:119
OSThread gVideoThread
Definition main.c:164
u16 * gPhysicalFramebuffers[3]
Definition main.c:149
struct SPTask * sCurrentAudioSPTask
Definition main.c:66
ALIGNED8 u8 gVideoThreadStack[STACKSIZE]
Definition main.c:165
OSMesgQueue gIntrMesgQueue
Definition main.c:103
struct D_80150158 gD_80150158[16]
Definition main.c:142
struct SPTask * sCurrentDisplaySPTask
Definition main.c:67
Player * gPlayerEight
Definition main.c:89
struct SPTask * gActiveSPTask
Definition main.c:65
struct Controller * gControllerSix
Definition main.c:77
ALIGNED8 u32 gGfxSPTaskStack[256]
Definition main.c:176
s32 gCCSelection
Definition main.c:197
OSMesg gSIEventMesgBuf[3]
Definition main.c:113
u16 gDemoMode
Definition main.c:185
struct VblankHandler gGameVblankHandler
Definition main.c:101
struct GfxPool gGfxPools[2]
Definition main.c:97
f32 gDeltaTime
Definition main.c:328
ALIGNED8 u8 gIdleThreadStack[STACKSIZE]
Definition main.c:163
Mat4 sBillBoardMtx
Definition main.c:154
u16 gEnableDebugMode
Definition main.c:186
s32 gActiveScreenMode
Definition main.c:189
struct Controller * gControllerEight
Definition main.c:79
s32 padding[2048]
Definition main.c:156
struct VblankHandler * gVblankHandler1
Definition main.c:62
u16 creditsRenderMode
Definition main.c:184
OSMesg gSPTaskMesgBuf[16]
Definition main.c:109
Player * gPlayerThree
Definition main.c:84
OSMesgQueue gSIEventMesgQueue
Definition main.c:112
f32 gVBlankTimer
Definition main.c:210
OSThread gAudioThread
Definition main.c:170
u16 sRenderedFramebuffer
Definition main.c:203
uintptr_t gSegmentTable[16]
Definition main.c:143
struct Controller * gControllerOne
Definition main.c:72
f32 D_8015014C
Definition main.c:138
s32 gTickVisuals
Definition main.c:123
OSThread gIdleThread
Definition main.c:162
u8 gControllerBits
Definition main.c:117
s32 gModeSelection
Definition main.c:194
s32 gTickLogic
Definition main.c:122
void init_segment_racing(void)
Definition main.c:554
void dispatch_audio_sptask(struct SPTask *)
Definition main.c:441
void interrupt_gfx_sptask(void)
Definition main.c:993
void func_80002600(void)
Definition main.c:1192
void thread4_audio(void *)
void func_8000262C(void)
Definition main.c:1198
void thread5_iteration(void)
Definition main.c:1280
void receive_new_tasks(void)
Definition main.c:1000
void thread3_video(void *)
#define MTX_OBJECT_POOL_SIZE
Definition main.h:22
void exec_display_list(struct SPTask *)
Definition main.c:446
void func_80002658(void)
Definition main.c:1204
#define MTX_EFFECT_POOL_SIZE
Definition main.h:34
#define MTX_KART_POOL_SIZE
Definition main.h:32
void handle_dp_complete(void)
Definition main.c:1088
void start_sptask(s32)
Definition main.c:270
void main_func(void)
Definition main.c:219
void read_controllers(void)
Definition main.c:408
void thread5_game_loop(void)
Definition main.c:1255
void end_master_display_list(void)
Definition main.c:472
void func_80000BEC(void)
Definition main.c:437
void handle_vblank(void)
Definition main.c:1047
void game_init_clear_framebuffer(void)
Definition main.c:635
void thread1_idle(void *)
Definition main.c:234
void func_800025D4(void)
Definition main.c:1186
void setup_game_memory(void)
Definition main.c:583
#define GFX_POOL_SIZE
Definition main.h:43
#define MTX_SHADOW_POOL_SIZE
Definition main.h:27
void * clear_framebuffer(s32)
Definition main.c:480
void config_gfx_pool(void)
Definition main.c:507
void init_segment_ending_sequences(void)
Definition main.c:544
void display_and_vsync(void)
Definition main.c:520
void update_controller(s32)
Definition main.c:362
void rendering_init(void)
Definition main.c:494
void create_gfx_task_structure(void)
Definition main.c:287
void handle_sp_complete(void)
Definition main.c:1098
#define MTX_HUD_POOL_SIZE
Definition main.h:14
void update_gamestate(void)
Definition main.c:1215
void set_vblank_handler(s32, struct VblankHandler *, OSMesgQueue *, OSMesg *)
Definition main.c:1026
void setup_mesg_queues(void)
Definition main.c:261
void game_state_handler(void)
Definition main.c:951
void init_controllers(void)
Definition main.c:351
void dma_copy(u8 *, u8 *, size_t)
Definition main.c:564
void start_gfx_sptask(void)
Definition main.c:1039
void create_thread(OSThread *, OSId, void(*entry)(void *), void *, void *, OSPri)
Definition main.c:213
void init_rcp(void)
Definition main.c:461
void race_logic_loop(void)
Definition main.c:816
#define SCREEN_WIDTH
Definition mk64.h:26
#define SCREEN_HEIGHT
Definition mk64.h:27
s32 OSId
Definition os_thread.h:22
struct OSThread_s OSThread
s32 OSPri
Definition os_thread.h:21
Definition main.h:61
u16 triangle
Definition main.h:62
u16 numTriangles
Definition main.h:63
Definition common_structs.h:66
Definition common_structs.h:59
Definition main.h:45
Mtx mtxHud[MTX_HUD_POOL_SIZE]
Definition main.h:51
Mtx mtxLookAt[4]
Definition main.h:50
Mtx mtxKart[MTX_KART_POOL_SIZE]
Definition main.h:54
Mtx mtxObject[MTX_OBJECT_POOL_SIZE]
Definition main.h:52
Mtx mtxEffect[MTX_EFFECT_POOL_SIZE]
Definition main.h:55
Mtx mtxPersp[4]
Definition main.h:47
struct SPTask spTask
Definition main.h:58
Gfx gfxPool[GFX_POOL_SIZE]
Definition main.h:57
Mtx mtxOrtho
Definition main.h:48
Mtx mtxShadow[MTX_SHADOW_POOL_SIZE]
Definition main.h:53
Mtx mtxUnk
Definition main.h:49
Mtx mtxScreen
Definition main.h:46
Mtx mtxArr[4]
Definition main.h:56
Definition common_structs.h:264
Definition common_structs.h:47
Definition common_structs.h:54