Add new utility to calculate packed dl end and vertex count (#411)

* Add new utility to calculate packed dl end and vertex count

Requires changing a bunch of actual references to packed dl lists
 with raw numbers. Which feels extremely bad but it doesn't match
 otherwise.

Signed-off-by: Taggerung <tyler.taggerung@email.com>

* Hard code array lenghts in appropriate headers

Use macros to generate the vertex counts and packed dl end points

Heavily dependent on the array lengths being accurate. If they
 aren't stuff will break.

Signed-off-by: Taggerung <tyler.taggerung@email.com>
This commit is contained in:
Tyler McGavran 2023-09-10 16:21:16 -04:00 committed by GitHub
parent ccfe604719
commit c85a333a3f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
32 changed files with 453 additions and 3769 deletions

View File

@ -347,8 +347,6 @@ MIO0TOOL := $(TOOLS_DIR)/mio0
N64CKSUM := $(TOOLS_DIR)/n64cksum
N64GRAPHICS := $(TOOLS_DIR)/n64graphics
DLPACKER := $(TOOLS_DIR)/displaylist_packer
DLSYMGEN := $(PYTHON) $(TOOLS_DIR)/generate_segment_headers.py
MODELSYMGEN := $(PYTHON) $(TOOLS_DIR)/generate_vertice_count.py
BIN2C := $(PYTHON) $(TOOLS_DIR)/bin2c.py
EXTRACT_DATA_FOR_MIO := $(TOOLS_DIR)/extract_data_for_mio
ASSET_EXTRACT := $(PYTHON) $(TOOLS_DIR)/new_extract_assets.py

View File

@ -0,0 +1,55 @@
#ifndef ALL_COURSE_DATA_H
#define ALL_COURSE_DATA_H
#include "macros.h"
#include "common_structs.h"
/** WARNING!!!
* This header file has the sizes of the vertex array's hard coded.
* If those arrays ever have their sizes changed that MUST be reflected
* in this file or problems will arise in other parts of the code
**/
extern mk64_Vtx d_course_big_donut_vertex[0x48D];
extern mk64_Vtx d_course_block_fort_vertex[0x440];
extern mk64_Vtx d_course_double_deck_vertex[0x22B];
extern mk64_Vtx d_course_skyscraper_vertex[0x43E];
extern mk64_Vtx d_course_choco_mountain_vertex[0x15B8];
extern mk64_Vtx d_course_frappe_snowland_vertex[0x1599];
extern mk64_Vtx d_course_mario_raceway_vertex[0x167D];
extern mk64_Vtx d_course_toads_turnpike_vertex[0x18D7];
extern mk64_Vtx d_course_kalimari_desert_vertex[0x18F9];
extern mk64_Vtx d_course_koopa_troopa_beach_vertex[0x24A0];
extern mk64_Vtx d_course_luigi_raceway_vertex[0x1730];
extern mk64_Vtx d_course_moo_moo_farm_vertex[0x1F24];
extern mk64_Vtx d_course_banshee_boardwalk_vertex[0x1351];
extern mk64_Vtx d_course_dks_jungle_parkway_vertex[0x162F];
extern mk64_Vtx d_course_rainbow_road_vertex[0xC27];
extern mk64_Vtx d_course_yoshi_valley_vertex[0xE88];
extern mk64_Vtx d_course_bowsers_castle_vertex[0x2537];
extern mk64_Vtx d_course_royal_raceway_vertex[0x2072];
extern mk64_Vtx d_course_sherbet_land_vertex[0xA76];
extern mk64_Vtx d_course_wario_stadium_vertex[0x17B3];
#define d_course_big_donut_vertex_count ARRAY_COUNT(d_course_big_donut_vertex)
#define d_course_block_fort_vertex_count ARRAY_COUNT(d_course_block_fort_vertex)
#define d_course_double_deck_vertex_count ARRAY_COUNT(d_course_double_deck_vertex)
#define d_course_skyscraper_vertex_count ARRAY_COUNT(d_course_skyscraper_vertex)
#define d_course_choco_mountain_vertex_count ARRAY_COUNT(d_course_choco_mountain_vertex)
#define d_course_frappe_snowland_vertex_count ARRAY_COUNT(d_course_frappe_snowland_vertex)
#define d_course_mario_raceway_vertex_count ARRAY_COUNT(d_course_mario_raceway_vertex)
#define d_course_toads_turnpike_vertex_count ARRAY_COUNT(d_course_toads_turnpike_vertex)
#define d_course_kalimari_desert_vertex_count ARRAY_COUNT(d_course_kalimari_desert_vertex)
#define d_course_koopa_troopa_beach_vertex_count ARRAY_COUNT(d_course_koopa_troopa_beach_vertex)
#define d_course_luigi_raceway_vertex_count ARRAY_COUNT(d_course_luigi_raceway_vertex)
#define d_course_moo_moo_farm_vertex_count ARRAY_COUNT(d_course_moo_moo_farm_vertex)
#define d_course_banshee_boardwalk_vertex_count ARRAY_COUNT(d_course_banshee_boardwalk_vertex)
#define d_course_dks_jungle_parkway_vertex_count ARRAY_COUNT(d_course_dks_jungle_parkway_vertex)
#define d_course_rainbow_road_vertex_count ARRAY_COUNT(d_course_rainbow_road_vertex)
#define d_course_yoshi_valley_vertex_count ARRAY_COUNT(d_course_yoshi_valley_vertex)
#define d_course_bowsers_castle_vertex_count ARRAY_COUNT(d_course_bowsers_castle_vertex)
#define d_course_royal_raceway_vertex_count ARRAY_COUNT(d_course_royal_raceway_vertex)
#define d_course_sherbet_land_vertex_count ARRAY_COUNT(d_course_sherbet_land_vertex)
#define d_course_wario_stadium_vertex_count ARRAY_COUNT(d_course_wario_stadium_vertex)
#endif

View File

@ -0,0 +1,32 @@
#ifndef ALL_COURSE_PACKED_H
#define ALL_COURSE_PACKED_H
/** WARNING!!!
* Each course #defines a token that looks like `d_course_<course_name_here>_packed_end`.
* These macros only work if the the last Gfx array in each packed.inc.c file has its length hardcoded
* in the accompanying header file. If that array is resized or moved the #defines will become
* incorrect
**/
#include "courses/battle/big_donut/packed.inc.h"
#include "courses/battle/block_fort/packed.inc.h"
#include "courses/battle/double_deck/packed.inc.h"
#include "courses/battle/skyscraper/packed.inc.h"
#include "courses/flower_cup/choco_mountain/packed.inc.h"
#include "courses/flower_cup/frappe_snowland/packed.inc.h"
#include "courses/flower_cup/mario_raceway/packed.inc.h"
#include "courses/flower_cup/toads_turnpike/packed.inc.h"
#include "courses/mushroom_cup/kalimari_desert/packed.inc.h"
#include "courses/mushroom_cup/koopa_troopa_beach/packed.inc.h"
#include "courses/mushroom_cup/luigi_raceway/packed.inc.h"
#include "courses/mushroom_cup/moo_moo_farm/packed.inc.h"
#include "courses/special_cup/banshee_boardwalk/packed.inc.h"
#include "courses/special_cup/dks_jungle_parkway/packed.inc.h"
#include "courses/special_cup/rainbow_road/packed.inc.h"
#include "courses/special_cup/yoshi_valley/packed.inc.h"
#include "courses/star_cup/bowsers_castle/packed.inc.h"
#include "courses/star_cup/royal_raceway/packed.inc.h"
#include "courses/star_cup/sherbet_land/packed.inc.h"
#include "courses/star_cup/wario_stadium/packed.inc.h"
#endif

View File

@ -1,4 +1,5 @@
#include <PR/gbi.h>
#include "macros.h"
extern Gfx d_course_big_donut_packed_dl_0[];
extern Gfx d_course_big_donut_packed_dl_210[];
@ -19,4 +20,6 @@ extern Gfx d_course_big_donut_packed_dl_F08[];
extern Gfx d_course_big_donut_packed_dl_F90[];
extern Gfx d_course_big_donut_packed_dl_1018[];
extern Gfx d_course_big_donut_packed_dl_1040[];
extern Gfx d_course_big_donut_packed_dl_1070[];
extern Gfx d_course_big_donut_packed_dl_1070[2];
#define d_course_big_donut_packed_end GET_PACKED_END(d_course_big_donut_packed_dl_1070)

View File

@ -1,4 +1,5 @@
#include <PR/gbi.h>
#include "macros.h"
extern Gfx d_course_block_fort_packed_dl_0[];
extern Gfx d_course_block_fort_packed_dl_B8[];
@ -27,4 +28,6 @@ extern Gfx d_course_block_fort_packed_dl_14C8[];
extern Gfx d_course_block_fort_packed_dl_1580[];
extern Gfx d_course_block_fort_packed_dl_1590[];
extern Gfx d_course_block_fort_packed_dl_15C0[];
extern Gfx d_course_block_fort_packed_dl_15D0[];
extern Gfx d_course_block_fort_packed_dl_15D0[1];
#define d_course_block_fort_packed_end GET_PACKED_END(d_course_block_fort_packed_dl_15D0)

View File

@ -1,4 +1,5 @@
#include <PR/gbi.h>
#include "macros.h"
extern Gfx d_course_double_deck_packed_dl_0[];
extern Gfx d_course_double_deck_packed_dl_210[];
@ -8,4 +9,6 @@ extern Gfx d_course_double_deck_packed_dl_580[];
extern Gfx d_course_double_deck_packed_dl_708[];
extern Gfx d_course_double_deck_packed_dl_720[];
extern Gfx d_course_double_deck_packed_dl_738[];
extern Gfx d_course_double_deck_packed_dl_748[];
extern Gfx d_course_double_deck_packed_dl_748[1];
#define d_course_double_deck_packed_end GET_PACKED_END(d_course_double_deck_packed_dl_748)

View File

@ -1,4 +1,5 @@
#include <PR/gbi.h>
#include "macros.h"
extern Gfx d_course_skyscraper_packed_dl_0[];
extern Gfx d_course_skyscraper_packed_dl_238[];
@ -18,4 +19,6 @@ extern Gfx d_course_skyscraper_packed_dl_FE8[];
extern Gfx d_course_skyscraper_packed_dl_FF8[];
extern Gfx d_course_skyscraper_packed_dl_10C8[];
extern Gfx d_course_skyscraper_packed_dl_10D8[];
extern Gfx d_course_skyscraper_packed_dl_1110[];
extern Gfx d_course_skyscraper_packed_dl_1110[2];
#define d_course_skyscraper_packed_end GET_PACKED_END(d_course_skyscraper_packed_dl_1110)

View File

@ -1,164 +1,149 @@
#include <ultra64.h>
#include <macros.h>
#include "types.h"
#include <vertice_count_gen.h>
#include <packed_displaylist_symbols_gen.h>
#include "courseTable.h"
/**
* vertex_count is generated from tools/generate_vertice_count.py
* It takes the size of the vertex variable from objdump using the model.inc.elf file.
* From there it divides the size by fourteen bytes (the size of a single vertex).
* It then generates the header file with definitions of vertex_count.
* This tool is ran during the compile process.
*/
/**
* The address of the final displaylist is generated and calculated by tools/generate_segment_headers.py
* It always refers to a gsSPEndDisplayList command.
*/
#define GET_OFFSET(val) (val - 0x8) - 0x07000000
#include "all_course_model.h"
#include "all_course_packed.h"
struct courseTable gCourseTable[] = {{
_course_mario_raceway_dl_mio0SegmentRomStart, _course_mario_raceway_dl_mio0SegmentRomEnd,
_mario_raceway_vertexSegmentRomStart, _mario_raceway_vertexSegmentRomEnd,
_course_mario_raceway_offsetsSegmentRomStart, _course_mario_raceway_offsetsSegmentRomEnd,
d_course_mario_raceway_vertex, d_course_mario_raceway_vertex_count,
d_course_mario_raceway_packed, GET_OFFSET(d_course_mario_raceway_packed_end),
d_course_mario_raceway_packed, d_course_mario_raceway_packed_end,
mario_raceway_textures, 0, 0x0000,
}, {
_course_choco_mountain_dl_mio0SegmentRomStart, _course_choco_mountain_dl_mio0SegmentRomEnd,
_choco_mountain_vertexSegmentRomStart, _choco_mountain_vertexSegmentRomEnd,
_course_choco_mountain_offsetsSegmentRomStart, _course_choco_mountain_offsetsSegmentRomEnd,
d_course_choco_mountain_vertex, d_course_choco_mountain_vertex_count,
d_course_choco_mountain_packed, GET_OFFSET(d_course_choco_mountain_packed_end),
d_course_choco_mountain_packed, d_course_choco_mountain_packed_end,
choco_mountain_textures, 1, 0x0000,
}, {
_course_bowsers_castle_dl_mio0SegmentRomStart, _course_bowsers_castle_dl_mio0SegmentRomEnd,
_bowsers_castle_vertexSegmentRomStart, _bowsers_castle_vertexSegmentRomEnd,
_course_bowsers_castle_offsetsSegmentRomStart, _course_bowsers_castle_offsetsSegmentRomEnd,
d_course_bowsers_castle_vertex, d_course_bowsers_castle_vertex_count,
d_course_bowsers_castle_packed, GET_OFFSET(d_course_bowsers_castle_packed_end),
d_course_bowsers_castle_packed, d_course_bowsers_castle_packed_end,
bowsers_castle_textures, 0, 0x0000,
}, {
_course_banshee_boardwalk_dl_mio0SegmentRomStart, _course_banshee_boardwalk_dl_mio0SegmentRomEnd,
_banshee_boardwalk_vertexSegmentRomStart, _banshee_boardwalk_vertexSegmentRomEnd,
_course_banshee_boardwalk_offsetsSegmentRomStart, _course_banshee_boardwalk_offsetsSegmentRomEnd,
d_course_banshee_boardwalk_vertex, d_course_banshee_boardwalk_vertex_count,
d_course_banshee_boardwalk_packed, GET_OFFSET(d_course_banshee_boardwalk_packed_end),
d_course_banshee_boardwalk_packed, d_course_banshee_boardwalk_packed_end,
banshee_boardwalk_textures, 1, 0x0000,
}, {
_course_yoshi_valley_dl_mio0SegmentRomStart, _course_yoshi_valley_dl_mio0SegmentRomEnd,
_yoshi_valley_vertexSegmentRomStart, _yoshi_valley_vertexSegmentRomEnd,
_course_yoshi_valley_offsetsSegmentRomStart, _course_yoshi_valley_offsetsSegmentRomEnd,
d_course_yoshi_valley_vertex, d_course_yoshi_valley_vertex_count,
d_course_yoshi_valley_packed, GET_OFFSET(d_course_yoshi_valley_packed_end),
d_course_yoshi_valley_packed, d_course_yoshi_valley_packed_end,
yoshi_valley_textures, 0, 0x0000,
}, {
_course_frappe_snowland_dl_mio0SegmentRomStart, _course_frappe_snowland_dl_mio0SegmentRomEnd,
_frappe_snowland_vertexSegmentRomStart, _frappe_snowland_vertexSegmentRomEnd,
_course_frappe_snowland_offsetsSegmentRomStart, _course_frappe_snowland_offsetsSegmentRomEnd,
d_course_frappe_snowland_vertex, d_course_frappe_snowland_vertex_count,
d_course_frappe_snowland_packed, GET_OFFSET(d_course_frappe_snowland_packed_end),
d_course_frappe_snowland_packed, d_course_frappe_snowland_packed_end,
frappe_snowland_textures, 0, 0x0000,
}, {
_course_koopa_troopa_beach_dl_mio0SegmentRomStart, _course_koopa_troopa_beach_dl_mio0SegmentRomEnd,
_koopa_troopa_beach_vertexSegmentRomStart, _koopa_troopa_beach_vertexSegmentRomEnd,
_course_koopa_troopa_beach_offsetsSegmentRomStart, _course_koopa_troopa_beach_offsetsSegmentRomEnd,
d_course_koopa_troopa_beach_vertex, d_course_koopa_troopa_beach_vertex_count,
d_course_koopa_troopa_beach_packed, GET_OFFSET(d_course_koopa_troopa_beach_packed_end),
d_course_koopa_troopa_beach_packed, d_course_koopa_troopa_beach_packed_end,
koopa_troopa_beach_textures, 0, 0x0000,
}, {
_course_royal_raceway_dl_mio0SegmentRomStart, _course_royal_raceway_dl_mio0SegmentRomEnd,
_royal_raceway_vertexSegmentRomStart, _royal_raceway_vertexSegmentRomEnd,
_course_royal_raceway_offsetsSegmentRomStart, _course_royal_raceway_offsetsSegmentRomEnd,
d_course_royal_raceway_vertex, d_course_royal_raceway_vertex_count,
d_course_royal_raceway_packed, GET_OFFSET(d_course_royal_raceway_packed_end),
d_course_royal_raceway_packed, d_course_royal_raceway_packed_end,
royal_raceway_textures, 0, 0x0000,
}, {
_course_luigi_raceway_dl_mio0SegmentRomStart, _course_luigi_raceway_dl_mio0SegmentRomEnd,
_luigi_raceway_vertexSegmentRomStart, _luigi_raceway_vertexSegmentRomEnd,
_course_luigi_raceway_offsetsSegmentRomStart, _course_luigi_raceway_offsetsSegmentRomEnd,
d_course_luigi_raceway_vertex, d_course_luigi_raceway_vertex_count,
d_course_luigi_raceway_packed, GET_OFFSET(d_course_luigi_raceway_packed_end),
d_course_luigi_raceway_packed, d_course_luigi_raceway_packed_end,
luigi_raceway_textures, 0, 0x0000,
}, {
_course_moo_moo_farm_dl_mio0SegmentRomStart, _course_moo_moo_farm_dl_mio0SegmentRomEnd,
_moo_moo_farm_vertexSegmentRomStart, _moo_moo_farm_vertexSegmentRomEnd,
_course_moo_moo_farm_offsetsSegmentRomStart, _course_moo_moo_farm_offsetsSegmentRomEnd,
d_course_moo_moo_farm_vertex, d_course_moo_moo_farm_vertex_count,
d_course_moo_moo_farm_packed, GET_OFFSET(d_course_moo_moo_farm_packed_end),
d_course_moo_moo_farm_packed, d_course_moo_moo_farm_packed_end,
moo_moo_farm_textures, 0, 0x0000,
}, {
_course_toads_turnpike_dl_mio0SegmentRomStart, _course_toads_turnpike_dl_mio0SegmentRomEnd,
_toads_turnpike_vertexSegmentRomStart, _toads_turnpike_vertexSegmentRomEnd,
_course_toads_turnpike_offsetsSegmentRomStart, _course_toads_turnpike_offsetsSegmentRomEnd,
d_course_toads_turnpike_vertex, d_course_toads_turnpike_vertex_count,
d_course_toads_turnpike_packed, GET_OFFSET(d_course_toads_turnpike_packed_end),
d_course_toads_turnpike_packed, d_course_toads_turnpike_packed_end,
toads_turnpike_textures, 0, 0x0000,
}, {
_course_kalimari_desert_dl_mio0SegmentRomStart, _course_kalimari_desert_dl_mio0SegmentRomEnd,
_kalimari_desert_vertexSegmentRomStart, _kalimari_desert_vertexSegmentRomEnd,
_course_kalimari_desert_offsetsSegmentRomStart, _course_kalimari_desert_offsetsSegmentRomEnd,
d_course_kalimari_desert_vertex, d_course_kalimari_desert_vertex_count,
d_course_kalimari_desert_packed, GET_OFFSET(d_course_kalimari_desert_packed_end),
d_course_kalimari_desert_packed, d_course_kalimari_desert_packed_end,
kalimari_desert_textures, 0, 0x0000,
}, {
_course_sherbet_land_dl_mio0SegmentRomStart, _course_sherbet_land_dl_mio0SegmentRomEnd,
_sherbet_land_vertexSegmentRomStart, _sherbet_land_vertexSegmentRomEnd,
_course_sherbet_land_offsetsSegmentRomStart, _course_sherbet_land_offsetsSegmentRomEnd,
d_course_sherbet_land_vertex, d_course_sherbet_land_vertex_count,
d_course_sherbet_land_packed, GET_OFFSET(d_course_sherbet_land_packed_end),
d_course_sherbet_land_packed, d_course_sherbet_land_packed_end,
sherbet_land_textures, 0, 0x0000,
}, {
_course_rainbow_road_dl_mio0SegmentRomStart, _course_rainbow_road_dl_mio0SegmentRomEnd,
_rainbow_road_vertexSegmentRomStart, _rainbow_road_vertexSegmentRomEnd,
_course_rainbow_road_offsetsSegmentRomStart, _course_rainbow_road_offsetsSegmentRomEnd,
d_course_rainbow_road_vertex, d_course_rainbow_road_vertex_count,
d_course_rainbow_road_packed, GET_OFFSET(d_course_rainbow_road_packed_end),
d_course_rainbow_road_packed, d_course_rainbow_road_packed_end,
rainbow_road_textures, 0, 0x0000,
}, {
_course_wario_stadium_dl_mio0SegmentRomStart, _course_wario_stadium_dl_mio0SegmentRomEnd,
_wario_stadium_vertexSegmentRomStart, _wario_stadium_vertexSegmentRomEnd,
_course_wario_stadium_offsetsSegmentRomStart, _course_wario_stadium_offsetsSegmentRomEnd,
d_course_wario_stadium_vertex, d_course_wario_stadium_vertex_count,
d_course_wario_stadium_packed, GET_OFFSET(d_course_wario_stadium_packed_end),
d_course_wario_stadium_packed, d_course_wario_stadium_packed_end,
wario_stadium_textures, 0, 0x0000,
}, {
_course_block_fort_dl_mio0SegmentRomStart, _course_block_fort_dl_mio0SegmentRomEnd,
_block_fort_vertexSegmentRomStart, _block_fort_vertexSegmentRomEnd,
_course_block_fort_offsetsSegmentRomStart, _course_block_fort_offsetsSegmentRomEnd,
d_course_block_fort_vertex, d_course_block_fort_vertex_count,
d_course_block_fort_packed, GET_OFFSET(d_course_block_fort_packed_end),
d_course_block_fort_packed, d_course_block_fort_packed_end,
block_fort_textures, 0, 0x0000,
}, {
_course_skyscraper_dl_mio0SegmentRomStart, _course_skyscraper_dl_mio0SegmentRomEnd,
_skyscraper_vertexSegmentRomStart, _skyscraper_vertexSegmentRomEnd,
_course_skyscraper_offsetsSegmentRomStart, _course_skyscraper_offsetsSegmentRomEnd,
d_course_skyscraper_vertex, d_course_skyscraper_vertex_count,
d_course_skyscraper_packed, GET_OFFSET(d_course_skyscraper_packed_end),
d_course_skyscraper_packed, d_course_skyscraper_packed_end,
skyscraper_textures, 0, 0x0000,
}, {
_course_double_deck_dl_mio0SegmentRomStart, _course_double_deck_dl_mio0SegmentRomEnd,
_double_deck_vertexSegmentRomStart, _double_deck_vertexSegmentRomEnd,
_course_double_deck_offsetsSegmentRomStart, _course_double_deck_offsetsSegmentRomEnd,
d_course_double_deck_vertex, d_course_double_deck_vertex_count,
d_course_double_deck_packed, GET_OFFSET(d_course_double_deck_packed_end),
d_course_double_deck_packed, d_course_double_deck_packed_end,
double_deck_textures, 0, 0x0000,
}, {
_course_dks_jungle_parkway_dl_mio0SegmentRomStart, _course_dks_jungle_parkway_dl_mio0SegmentRomEnd,
_dks_jungle_parkway_vertexSegmentRomStart, _dks_jungle_parkway_vertexSegmentRomEnd,
_course_dks_jungle_parkway_offsetsSegmentRomStart, _course_dks_jungle_parkway_offsetsSegmentRomEnd,
d_course_dks_jungle_parkway_vertex, d_course_dks_jungle_parkway_vertex_count,
d_course_dks_jungle_parkway_packed, GET_OFFSET(d_course_dks_jungle_parkway_packed_end),
d_course_dks_jungle_parkway_packed, d_course_dks_jungle_parkway_packed_end,
dks_jungle_parkway_textures, 0, 0x0000,
}, {
_course_big_donut_dl_mio0SegmentRomStart, _course_big_donut_dl_mio0SegmentRomEnd,
_big_donut_vertexSegmentRomStart, _big_donut_vertexSegmentRomEnd,
_course_big_donut_offsetsSegmentRomStart, _course_big_donut_offsetsSegmentRomEnd,
d_course_big_donut_vertex, d_course_big_donut_vertex_count,
d_course_big_donut_packed, GET_OFFSET(d_course_big_donut_packed_end),
d_course_big_donut_packed, d_course_big_donut_packed_end,
big_donut_textures, 0, 0x0000,
}};

View File

@ -1,4 +1,5 @@
#include <PR/gbi.h>
#include "macros.h"
extern Gfx d_course_choco_mountain_packed_dl_0[];
extern Gfx d_course_choco_mountain_packed_dl_98[];
@ -126,4 +127,6 @@ extern Gfx d_course_choco_mountain_packed_dl_59A0[];
extern Gfx d_course_choco_mountain_packed_dl_5A00[];
extern Gfx d_course_choco_mountain_packed_dl_5A70[];
extern Gfx d_course_choco_mountain_packed_dl_5A98[];
extern Gfx d_course_choco_mountain_packed_dl_5AE0[];
extern Gfx d_course_choco_mountain_packed_dl_5AE0[2];
#define d_course_choco_mountain_packed_end GET_PACKED_END(d_course_choco_mountain_packed_dl_5AE0)

View File

@ -1,4 +1,5 @@
#include <PR/gbi.h>
#include "macros.h"
extern Gfx d_course_frappe_snowland_packed_dl_0[];
extern Gfx d_course_frappe_snowland_packed_dl_88[];
@ -140,4 +141,6 @@ extern Gfx d_course_frappe_snowland_packed_dl_62F8[];
extern Gfx d_course_frappe_snowland_packed_dl_63D8[];
extern Gfx d_course_frappe_snowland_packed_dl_65E0[];
extern Gfx d_course_frappe_snowland_packed_dl_65F0[];
extern Gfx d_course_frappe_snowland_packed_dl_6638[];
extern Gfx d_course_frappe_snowland_packed_dl_6638[3];
#define d_course_frappe_snowland_packed_end GET_PACKED_END(d_course_frappe_snowland_packed_dl_6638)

View File

@ -1,4 +1,5 @@
#include <PR/gbi.h>
#include "macros.h"
extern Gfx d_course_mario_raceway_packed_dl_0[];
extern Gfx d_course_mario_raceway_packed_dl_70[];
@ -172,4 +173,6 @@ extern Gfx d_course_mario_raceway_packed_dl_6598[];
extern Gfx d_course_mario_raceway_packed_dl_6710[];
extern Gfx d_course_mario_raceway_packed_dl_68B0[];
extern Gfx d_course_mario_raceway_packed_dl_68C0[];
extern Gfx d_course_mario_raceway_packed_dl_6928[];
extern Gfx d_course_mario_raceway_packed_dl_6928[2];
#define d_course_mario_raceway_packed_end GET_PACKED_END(d_course_mario_raceway_packed_dl_6928)

View File

@ -1,4 +1,5 @@
#include <PR/gbi.h>
#include "macros.h"
extern Gfx d_course_toads_turnpike_packed_dl_0[];
extern Gfx d_course_toads_turnpike_packed_dl_68[];
@ -116,4 +117,6 @@ extern Gfx d_course_toads_turnpike_packed_dl_6848[];
extern Gfx d_course_toads_turnpike_packed_dl_6908[];
extern Gfx d_course_toads_turnpike_packed_dl_6AB8[];
extern Gfx d_course_toads_turnpike_packed_dl_6AD8[];
extern Gfx d_course_toads_turnpike_packed_dl_6B08[];
extern Gfx d_course_toads_turnpike_packed_dl_6B08[2];
#define d_course_toads_turnpike_packed_end GET_PACKED_END(d_course_toads_turnpike_packed_dl_6B08)

View File

@ -1,4 +1,5 @@
#include <PR/gbi.h>
#include "macros.h"
extern Gfx d_course_kalimari_desert_packed_dl_0[];
extern Gfx d_course_kalimari_desert_packed_dl_68[];
@ -304,4 +305,6 @@ extern Gfx d_course_kalimari_desert_packed_dl_A458[];
extern Gfx d_course_kalimari_desert_packed_dl_A4D0[];
extern Gfx d_course_kalimari_desert_packed_dl_A548[];
extern Gfx d_course_kalimari_desert_packed_dl_A5F0[];
extern Gfx d_course_kalimari_desert_packed_dl_A670[];
extern Gfx d_course_kalimari_desert_packed_dl_A670[2];
#define d_course_kalimari_desert_packed_end GET_PACKED_END(d_course_kalimari_desert_packed_dl_A670)

View File

@ -1,4 +1,5 @@
#include <PR/gbi.h>
#include "macros.h"
extern Gfx d_course_koopa_troopa_beach_packed_dl_0[];
extern Gfx d_course_koopa_troopa_beach_packed_dl_B0[];
@ -307,4 +308,6 @@ extern Gfx d_course_koopa_troopa_beach_packed_dl_B0A0[];
extern Gfx d_course_koopa_troopa_beach_packed_dl_B168[];
extern Gfx d_course_koopa_troopa_beach_packed_dl_B208[];
extern Gfx d_course_koopa_troopa_beach_packed_dl_B230[];
extern Gfx d_course_koopa_troopa_beach_packed_dl_B2B0[];
extern Gfx d_course_koopa_troopa_beach_packed_dl_B2B0[2];
#define d_course_koopa_troopa_beach_packed_end GET_PACKED_END(d_course_koopa_troopa_beach_packed_dl_B2B0)

View File

@ -1,4 +1,5 @@
#include <PR/gbi.h>
#include "macros.h"
extern Gfx d_course_luigi_raceway_packed_dl_0[];
extern Gfx d_course_luigi_raceway_packed_dl_68[];
@ -357,4 +358,6 @@ extern Gfx d_course_luigi_raceway_packed_dl_C540[];
extern Gfx d_course_luigi_raceway_packed_dl_C5C0[];
extern Gfx d_course_luigi_raceway_packed_dl_C640[];
extern Gfx d_course_luigi_raceway_packed_dl_C668[];
extern Gfx d_course_luigi_raceway_packed_dl_C730[];
extern Gfx d_course_luigi_raceway_packed_dl_C730[2];
#define d_course_luigi_raceway_packed_end GET_PACKED_END(d_course_luigi_raceway_packed_dl_C730)

View File

@ -1,4 +1,5 @@
#include <PR/gbi.h>
#include "macros.h"
extern Gfx d_course_moo_moo_farm_packed_dl_0[];
extern Gfx d_course_moo_moo_farm_packed_dl_28[];
@ -229,4 +230,6 @@ extern Gfx d_course_moo_moo_farm_packed_dl_64D0[];
extern Gfx d_course_moo_moo_farm_packed_dl_6578[];
extern Gfx d_course_moo_moo_farm_packed_dl_6618[];
extern Gfx d_course_moo_moo_farm_packed_dl_66D0[];
extern Gfx d_course_moo_moo_farm_packed_dl_6730[];
extern Gfx d_course_moo_moo_farm_packed_dl_6730[2];
#define d_course_moo_moo_farm_packed_end GET_PACKED_END(d_course_moo_moo_farm_packed_dl_6730)

View File

@ -1,4 +1,5 @@
#include <PR/gbi.h>
#include "macros.h"
extern Gfx d_course_banshee_boardwalk_packed_dl_0[];
extern Gfx d_course_banshee_boardwalk_packed_dl_60[];
@ -191,4 +192,6 @@ extern Gfx d_course_banshee_boardwalk_packed_dl_7138[];
extern Gfx d_course_banshee_boardwalk_packed_dl_71B0[];
extern Gfx d_course_banshee_boardwalk_packed_dl_7228[];
extern Gfx d_course_banshee_boardwalk_packed_dl_72B8[];
extern Gfx d_course_banshee_boardwalk_packed_dl_7338[];
extern Gfx d_course_banshee_boardwalk_packed_dl_7338[2];
#define d_course_banshee_boardwalk_packed_end GET_PACKED_END(d_course_banshee_boardwalk_packed_dl_7338)

View File

@ -1,4 +1,5 @@
#include <PR/gbi.h>
#include "macros.h"
extern Gfx d_course_dks_jungle_parkway_packed_dl_0[];
extern Gfx d_course_dks_jungle_parkway_packed_dl_200[];
@ -202,4 +203,6 @@ extern Gfx d_course_dks_jungle_parkway_packed_dl_9A20[];
extern Gfx d_course_dks_jungle_parkway_packed_dl_9A38[];
extern Gfx d_course_dks_jungle_parkway_packed_dl_9B98[];
extern Gfx d_course_dks_jungle_parkway_packed_dl_9BA8[];
extern Gfx d_course_dks_jungle_parkway_packed_dl_9C18[];
extern Gfx d_course_dks_jungle_parkway_packed_dl_9C18[2];
#define d_course_dks_jungle_parkway_packed_end GET_PACKED_END(d_course_dks_jungle_parkway_packed_dl_9C18)

View File

@ -1,4 +1,5 @@
#include <PR/gbi.h>
#include "macros.h"
extern Gfx d_course_rainbow_road_packed_dl_0[];
extern Gfx d_course_rainbow_road_packed_dl_308[];
@ -35,4 +36,6 @@ extern Gfx d_course_rainbow_road_packed_dl_2068[];
extern Gfx d_course_rainbow_road_packed_dl_2078[];
extern Gfx d_course_rainbow_road_packed_dl_20C0[];
extern Gfx d_course_rainbow_road_packed_dl_20D0[];
extern Gfx d_course_rainbow_road_packed_dl_20F8[];
extern Gfx d_course_rainbow_road_packed_dl_20F8[2];
#define d_course_rainbow_road_packed_end GET_PACKED_END(d_course_rainbow_road_packed_dl_20F8)

View File

@ -1,4 +1,5 @@
#include <PR/gbi.h>
#include "macros.h"
extern Gfx d_course_yoshi_valley_packed_dl_0[];
extern Gfx d_course_yoshi_valley_packed_dl_A8[];
@ -238,4 +239,6 @@ extern Gfx d_course_yoshi_valley_packed_dl_7F58[];
extern Gfx d_course_yoshi_valley_packed_dl_7FC8[];
extern Gfx d_course_yoshi_valley_packed_dl_8050[];
extern Gfx d_course_yoshi_valley_packed_dl_8110[];
extern Gfx d_course_yoshi_valley_packed_dl_8150[];
extern Gfx d_course_yoshi_valley_packed_dl_8150[2];
#define d_course_yoshi_valley_packed_end GET_PACKED_END(d_course_yoshi_valley_packed_dl_8150)

View File

@ -1,4 +1,5 @@
#include <PR/gbi.h>
#include "macros.h"
extern Gfx d_course_bowsers_castle_packed_dl_0[];
extern Gfx d_course_bowsers_castle_packed_dl_60[];
@ -174,4 +175,6 @@ extern Gfx d_course_bowsers_castle_packed_dl_94B0[];
extern Gfx d_course_bowsers_castle_packed_dl_94D8[];
extern Gfx d_course_bowsers_castle_packed_dl_9820[];
extern Gfx d_course_bowsers_castle_packed_dl_9830[];
extern Gfx d_course_bowsers_castle_packed_dl_9910[];
extern Gfx d_course_bowsers_castle_packed_dl_9910[2];
#define d_course_bowsers_castle_packed_end GET_PACKED_END(d_course_bowsers_castle_packed_dl_9910)

View File

@ -1,4 +1,5 @@
#include <PR/gbi.h>
#include "macros.h"
extern Gfx d_course_royal_raceway_packed_dl_0[];
extern Gfx d_course_royal_raceway_packed_dl_A8[];
@ -322,4 +323,6 @@ extern Gfx d_course_royal_raceway_packed_dl_AEF8[];
extern Gfx d_course_royal_raceway_packed_dl_AF28[];
extern Gfx d_course_royal_raceway_packed_dl_B030[];
extern Gfx d_course_royal_raceway_packed_dl_B040[];
extern Gfx d_course_royal_raceway_packed_dl_B120[];
extern Gfx d_course_royal_raceway_packed_dl_B120[2];
#define d_course_royal_raceway_packed_end GET_PACKED_END(d_course_royal_raceway_packed_dl_B120)

View File

@ -1,4 +1,5 @@
#include <PR/gbi.h>
#include "macros.h"
extern Gfx d_course_sherbet_land_packed_dl_0[];
extern Gfx d_course_sherbet_land_packed_dl_C0[];
@ -100,4 +101,6 @@ extern Gfx d_course_sherbet_land_packed_dl_36B8[];
extern Gfx d_course_sherbet_land_packed_dl_3728[];
extern Gfx d_course_sherbet_land_packed_dl_3788[];
extern Gfx d_course_sherbet_land_packed_dl_37E0[];
extern Gfx d_course_sherbet_land_packed_dl_3848[];
extern Gfx d_course_sherbet_land_packed_dl_3848[2];
#define d_course_sherbet_land_packed_end GET_PACKED_END(d_course_sherbet_land_packed_dl_3848)

View File

@ -1,4 +1,5 @@
#include <PR/gbi.h>
#include "macros.h"
extern Gfx d_course_wario_stadium_packed_dl_0[];
extern Gfx d_course_wario_stadium_packed_dl_60[];
@ -259,4 +260,6 @@ extern Gfx d_course_wario_stadium_packed_dl_A228[];
extern Gfx d_course_wario_stadium_packed_dl_A248[];
extern Gfx d_course_wario_stadium_packed_dl_A448[];
extern Gfx d_course_wario_stadium_packed_dl_A458[];
extern Gfx d_course_wario_stadium_packed_dl_A4A8[];
extern Gfx d_course_wario_stadium_packed_dl_A4A8[3];
#define d_course_wario_stadium_packed_end GET_PACKED_END(d_course_wario_stadium_packed_dl_A4A8)

View File

@ -1,23 +1,5 @@
#include "courses/battle/big_donut/course_data.inc.h"
#include "courses/battle/block_fort/course_data.inc.h"
#include "courses/battle/double_deck/course_data.inc.h"
#include "courses/battle/skyscraper/course_data.inc.h"
#include "courses/flower_cup/choco_mountain/course_data.inc.h"
#include "courses/flower_cup/frappe_snowland/course_data.inc.h"
#include "courses/flower_cup/mario_raceway/course_data.inc.h"
#include "courses/flower_cup/toads_turnpike/course_data.inc.h"
#include "courses/mushroom_cup/kalimari_desert/course_data.inc.h"
#include "courses/mushroom_cup/koopa_troopa_beach/course_data.inc.h"
#include "courses/mushroom_cup/luigi_raceway/course_data.inc.h"
#include "courses/mushroom_cup/moo_moo_farm/course_data.inc.h"
#include "courses/special_cup/banshee_boardwalk/course_data.inc.h"
#include "courses/special_cup/dks_jungle_parkway/course_data.inc.h"
#include "courses/special_cup/rainbow_road/course_data.inc.h"
#include "courses/special_cup/yoshi_valley/course_data.inc.h"
#include "courses/star_cup/bowsers_castle/course_data.inc.h"
#include "courses/star_cup/royal_raceway/course_data.inc.h"
#include "courses/star_cup/sherbet_land/course_data.inc.h"
#include "courses/star_cup/wario_stadium/course_data.inc.h"
#include "courses/all_course_data.h"
#include "courses/all_course_packed.h"
#include "include/libc/math.h"
#include "include/libc/stdarg.h"
#include "include/libc/stddef.h"

View File

@ -64,4 +64,12 @@
// aligns an address to the next 16 bytes
#define ALIGN16(val) (((val) + 0xF) & ~0xF)
/**
* (u8*) dl : Cast array down to u8's
* + sizeof(dl) : go to the end of the array
* - sizeof(dl[0]) : walk back 1 Gfx macro
* - 0x07000000 : get just the offset
**/
#define GET_PACKED_END(dl) (((u8*) dl) + sizeof(dl) - sizeof(dl[0]) - 0x07000000)
#endif

File diff suppressed because it is too large Load Diff

View File

@ -1,44 +0,0 @@
// Generated by tools/generate_vertice_count.py
#include <macros.h>
#define d_course_rainbow_road_vertex_count 0x00000C27
#define d_course_yoshi_valley_vertex_count 0x00000E88
#define d_course_banshee_boardwalk_vertex_count 0x00001351
#define d_course_dks_jungle_parkway_vertex_count 0x0000162F
#define d_course_skyscraper_vertex_count 0x0000043E
#define d_course_block_fort_vertex_count 0x00000440
#define d_course_double_deck_vertex_count 0x0000022B
#define d_course_big_donut_vertex_count 0x0000048D
#define d_course_mario_raceway_vertex_count 0x0000167D
#define d_course_toads_turnpike_vertex_count 0x000018D7
#define d_course_choco_mountain_vertex_count 0x000015B8
#define d_course_frappe_snowland_vertex_count 0x00001599
#define d_course_kalimari_desert_vertex_count 0x000018F9
#define d_course_luigi_raceway_vertex_count 0x00001730
#define d_course_moo_moo_farm_vertex_count 0x00001F24
#define d_course_koopa_troopa_beach_vertex_count 0x000024A0
#define d_course_sherbet_land_vertex_count 0x00000A76
#define d_course_wario_stadium_vertex_count 0x000017B3
#define d_course_royal_raceway_vertex_count 0x00002072
#define d_course_bowsers_castle_vertex_count 0x00002537

View File

@ -70,7 +70,9 @@
#include <ultra64.h>
#include <variables.h>
#include <vehicles.h>
#include <vertice_count_gen.h>
#include <waypoints.h>
#include <courses/all_course_data.h>
#include <courses/all_course_packed.h>
#endif

View File

@ -5,7 +5,6 @@
#include <types.h>
#include <code_800029B0.h>
#include <course.h>
#include <packed_displaylist_symbols_gen.h>
#include "main.h"
#include "actors.h"
#include "math_util.h"
@ -15,6 +14,7 @@
#include "render_courses.h"
#include "skybox_and_splitscreen.h"
#include "courses/all_course_data.h"
#include "courses/all_course_packed.h"
s16 D_802B87B0 = 995;
s16 D_802B87B4 = 1000;
@ -182,14 +182,17 @@ void load_surface_map(uintptr_t arg0, struct UnkStruct_800DC5EC *arg1) {
}
void func_80291198(void) {
gSPDisplayList(gDisplayListHead++, d_course_mario_raceway_packed_dl_1140);
// d_course_mario_raceway_packed_dl_1140
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07001140));
}
void func_802911C4(void) {
if (gScreenModeSelection == SCREEN_MODE_1P) {
gSPDisplayList(gDisplayListHead++, d_course_mario_raceway_packed_dl_8E8);
// d_course_mario_raceway_packed_dl_8E8
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070008E8));
} else {
gSPDisplayList(gDisplayListHead++, d_course_mario_raceway_packed_dl_2D68);
// d_course_mario_raceway_packed_dl_2D68
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07002D68));
}
}
@ -244,6 +247,7 @@ void func_8029122C(struct UnkStruct_800DC5EC *arg0, s32 arg1) {
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_XLU_INTER, G_RM_NOOP2);
gDPSetBlendMask(gDisplayListHead++, 0xFF);
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA);
// d_course_banshee_boardwalk_packed_dl_878
gSPDisplayList(gDisplayListHead++, 0x07000878);
gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE);
gDPPipeSync(gDisplayListHead++);
@ -473,7 +477,8 @@ void render_mario_raceway(struct UnkStruct_800DC5EC *arg0) {
if (func_80290C20(arg0->camera) == 1) {
gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
gSPDisplayList(gDisplayListHead++, d_course_mario_raceway_packed_dl_3050);
// d_course_mario_raceway_packed_dl_3050
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07003050));
}
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
@ -556,19 +561,26 @@ void render_mario_raceway(struct UnkStruct_800DC5EC *arg0) {
}
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
gSPDisplayList(gDisplayListHead++, d_course_mario_raceway_packed_dl_3508);
gSPDisplayList(gDisplayListHead++, d_course_mario_raceway_packed_dl_3240);
gSPDisplayList(gDisplayListHead++, d_course_mario_raceway_packed_dl_14A0);
// d_course_mario_raceway_packed_dl_3508
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07003508));
// d_course_mario_raceway_packed_dl_3240
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07003240));
// d_course_mario_raceway_packed_dl_14A0
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070014A0));
load_surface_map((uintptr_t) mario_raceway_dls, arg0);
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2);
gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK);
gSPDisplayList(gDisplayListHead++, d_course_mario_raceway_packed_dl_450);
gSPDisplayList(gDisplayListHead++, d_course_mario_raceway_packed_dl_240);
// d_course_mario_raceway_packed_dl_450
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000450));
// d_course_mario_raceway_packed_dl_240
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000240));
gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
gSPDisplayList(gDisplayListHead++, d_course_mario_raceway_packed_dl_E0);
gSPDisplayList(gDisplayListHead++, d_course_mario_raceway_packed_dl_160);
// d_course_mario_raceway_packed_dl_E0
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070000E0));
// d_course_mario_raceway_packed_dl_160
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000160));
}
void render_choco_mountain(struct UnkStruct_800DC5EC *arg0) {
@ -580,7 +592,8 @@ void render_choco_mountain(struct UnkStruct_800DC5EC *arg0) {
if (func_80290C20(arg0->camera) == 1) {
gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
gSPDisplayList(gDisplayListHead++, d_course_choco_mountain_packed_dl_4608);
// d_course_choco_mountain_packed_dl_4608
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07004608));
}
gDPSetCycleType(gDisplayListHead++, G_CYC_2CYCLE);
gDPSetFogColor(gDisplayListHead++, D_801625EC, D_801625F4, D_801625F0, 0xFF);
@ -592,10 +605,14 @@ void render_choco_mountain(struct UnkStruct_800DC5EC *arg0) {
gDPSetRenderMode(gDisplayListHead++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2);
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
gSPDisplayList(gDisplayListHead++, d_course_choco_mountain_packed_dl_5A70);
gSPDisplayList(gDisplayListHead++, d_course_choco_mountain_packed_dl_828);
gSPDisplayList(gDisplayListHead++, d_course_choco_mountain_packed_dl_8E0);
gSPDisplayList(gDisplayListHead++, d_course_choco_mountain_packed_dl_5868);
// d_course_choco_mountain_packed_dl_5A70
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07005A70));
// d_course_choco_mountain_packed_dl_828
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000828));
// d_course_choco_mountain_packed_dl_8E0
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070008E0));
// d_course_choco_mountain_packed_dl_5868
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07005868));
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
load_surface_map((uintptr_t) choco_mountain_dls, arg0);
@ -603,10 +620,13 @@ void render_choco_mountain(struct UnkStruct_800DC5EC *arg0) {
gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK);
gDPSetRenderMode(gDisplayListHead++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_TEX_EDGE2);
gDPSetCombineMode(gDisplayListHead++, G_CC_DECALRGBA, G_CC_PASS2);
gSPDisplayList(gDisplayListHead++, d_course_choco_mountain_packed_dl_448);
gSPDisplayList(gDisplayListHead++, d_course_choco_mountain_packed_dl_5D8);
// d_course_choco_mountain_packed_dl_448
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000448));
// d_course_choco_mountain_packed_dl_5D8
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070005D8));
gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
gSPDisplayList(gDisplayListHead++, d_course_choco_mountain_packed_dl_718);
// d_course_choco_mountain_packed_dl_718
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000718));
gSPClearGeometryMode(gDisplayListHead++, G_FOG);
gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE);
gDPPipeSync(gDisplayListHead++);
@ -622,7 +642,8 @@ void render_bowsers_castle(struct UnkStruct_800DC5EC *arg0) {
if (func_80290C20(arg0->camera) == 1) {
gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
gSPDisplayList(gDisplayListHead++, d_course_bowsers_castle_packed_dl_6A80);
// d_course_bowsers_castle_packed_dl_6A80
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07006A80));
}
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA);
@ -636,7 +657,8 @@ void render_bowsers_castle(struct UnkStruct_800DC5EC *arg0) {
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2);
gSPDisplayList(gDisplayListHead++, d_course_bowsers_castle_packed_dl_248);
// d_course_bowsers_castle_packed_dl_248
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000248));
}
void render_banshee_boardwalk(struct UnkStruct_800DC5EC *arg0) {
@ -648,7 +670,8 @@ void render_banshee_boardwalk(struct UnkStruct_800DC5EC *arg0) {
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
gDPSetCombineMode(gDisplayListHead++, G_CC_DECALRGBA, G_CC_DECALRGBA);
gSPDisplayList(gDisplayListHead++, d_course_banshee_boardwalk_packed_dl_7228);
// d_course_banshee_boardwalk_packed_dl_7228
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07007228));
gSPFogPosition(gDisplayListHead++, D_802B87B0, D_802B87B4);
@ -662,9 +685,12 @@ void render_banshee_boardwalk(struct UnkStruct_800DC5EC *arg0) {
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
gSPDisplayList(gDisplayListHead++, d_course_banshee_boardwalk_packed_dl_5CD0);
gSPDisplayList(gDisplayListHead++, d_course_banshee_boardwalk_packed_dl_4E60);
gSPDisplayList(gDisplayListHead++, d_course_banshee_boardwalk_packed_dl_69B0);
// d_course_banshee_boardwalk_packed_dl_5CD0
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07005CD0));
// d_course_banshee_boardwalk_packed_dl_4E60
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07004E60));
// d_course_banshee_boardwalk_packed_dl_69B0
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070069B0));
load_surface_map((uintptr_t) banshee_boardwalk_dls, arg0);
@ -673,12 +699,16 @@ void render_banshee_boardwalk(struct UnkStruct_800DC5EC *arg0) {
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2);
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
gSPSetGeometryMode(gDisplayListHead++, G_SHADE | G_SHADING_SMOOTH);
gSPDisplayList(gDisplayListHead++, d_course_banshee_boardwalk_packed_dl_580);
gSPDisplayList(gDisplayListHead++, d_course_banshee_boardwalk_packed_dl_60);
gSPDisplayList(gDisplayListHead++, d_course_banshee_boardwalk_packed_dl_540);
// d_course_banshee_boardwalk_packed_dl_580
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000580));
// d_course_banshee_boardwalk_packed_dl_60
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000060));
// d_course_banshee_boardwalk_packed_dl_540
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000540));
if (camera->pos[1] < -20.0f) {
gSPDisplayList(gDisplayListHead++, d_course_banshee_boardwalk_packed_dl_6310);
// d_course_banshee_boardwalk_packed_dl_6310
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07006310));
}
spA8[0] = camera->pos[0];
spA8[1] = -82.0f;
@ -709,7 +739,8 @@ void render_frappe_snowland(struct UnkStruct_800DC5EC *arg0) {
if (func_80290C20(arg0->camera) == 1) {
gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
gSPDisplayList(gDisplayListHead++, d_course_frappe_snowland_packed_dl_65E0);
// d_course_frappe_snowland_packed_dl_65E0
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070065E0));
}
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA);
@ -727,16 +758,19 @@ void render_koopa_troopa_beach(struct UnkStruct_800DC5EC *arg0) {
if (func_80290C20(arg0->camera) == 1) {
gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
gSPDisplayList(gDisplayListHead++, d_course_koopa_troopa_beach_packed_dl_9CC0);
// d_course_koopa_troopa_beach_packed_dl_9CC0
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07009CC0));
}
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
gSPDisplayList(gDisplayListHead++, d_course_koopa_troopa_beach_packed_dl_9688);
// d_course_koopa_troopa_beach_packed_dl_9688
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07009688));
load_surface_map((uintptr_t) d_course_koopa_troopa_beach_dl_list1, arg0);
gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK);
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2);
gSPDisplayList(gDisplayListHead++, d_course_koopa_troopa_beach_packed_dl_2C0);
// d_course_koopa_troopa_beach_packed_dl_2C0
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070002C0));
gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
gDPPipeSync(gDisplayListHead++);
}
@ -750,20 +784,24 @@ void render_royal_raceway(struct UnkStruct_800DC5EC *arg0) {
if (func_80290C20(arg0->camera) == 1) {
gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
gSPDisplayList(gDisplayListHead++, d_course_royal_raceway_packed_dl_B030);
// d_course_royal_raceway_packed_dl_B030
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x0700B030));
}
gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
gSPDisplayList(gDisplayListHead++, d_course_royal_raceway_packed_dl_A648);
// d_course_royal_raceway_packed_dl_A648
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x0700A648));
load_surface_map((uintptr_t) royal_raceway_dls, arg0);
gSPDisplayList(gDisplayListHead++, d_course_royal_raceway_packed_dl_11A8);
// d_course_royal_raceway_packed_dl_11A8
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070011A8));
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2);
gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK);
gSPDisplayList(gDisplayListHead++, d_course_royal_raceway_packed_dl_8A0);
// d_course_royal_raceway_packed_dl_8A0
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070008A0));
gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
}
@ -780,7 +818,8 @@ void render_luigi_raceway(struct UnkStruct_800DC5EC *arg0) {
if (func_80290C20(arg0->camera) == 1) {
gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
gSPDisplayList(gDisplayListHead++, d_course_luigi_raceway_packed_dl_9EC0);
// d_course_luigi_raceway_packed_dl_9EC0
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07009EC0));
}
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA);
@ -790,8 +829,10 @@ void render_luigi_raceway(struct UnkStruct_800DC5EC *arg0) {
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2);
gSPDisplayList(gDisplayListHead++, d_course_luigi_raceway_packed_dl_E0);
gSPDisplayList(gDisplayListHead++, d_course_luigi_raceway_packed_dl_68);
// d_course_luigi_raceway_packed_dl_E0
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070000E0));
// d_course_luigi_raceway_packed_dl_68
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000068));
D_800DC5DC = 88;
D_800DC5E0 = 72;
@ -849,14 +890,17 @@ void render_moo_moo_farm(struct UnkStruct_800DC5EC *arg0) {
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_MODULATEI);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_packed_dl_4DF8);
gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_packed_dl_5640);
// d_course_moo_moo_farm_packed_dl_4DF8
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07004DF8));
// d_course_moo_moo_farm_packed_dl_5640
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07005640));
gSPFogPosition(gDisplayListHead++, D_802B87B0, D_802B87B4);
load_surface_map((uintptr_t) moo_moo_farm_dls, arg0);
if ((temp_s0 < 14) && (temp_s0 > 10)) {
if ((temp_s1 == 2) || (temp_s1 == 3) || (temp_s1 == 1))
//
gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_13FF8);
} else if (temp_s0 < 16) {
@ -875,31 +919,34 @@ void render_moo_moo_farm(struct UnkStruct_800DC5EC *arg0) {
if ((temp_s0 >= 16) && (temp_s0 < 24)) {
if ((temp_s1 == 2) || (temp_s1 == 3))
gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_packed_dl_5410);
// d_course_moo_moo_farm_packed_dl_5410
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07005410));
} else if (temp_s0 < 9) {
if (temp_s1 == 2)
gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_packed_dl_5410);
// d_course_moo_moo_farm_packed_dl_5410
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07005410));
}
if (temp_s0 < 4) {
if (temp_s1 != 0)
if (temp_s1 != 0)
gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_14060);
} else if (temp_s0 < 8) {
if (temp_s1 == 2)
if (temp_s1 == 2)
gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_14060);
} else if (temp_s0 >= 22) {
gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_14060);
} else if (temp_s0 >= 18) {
if ((temp_s1 == 0) || (temp_s1 == 3))
if ((temp_s1 == 0) || (temp_s1 == 3))
gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_14060);
}
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2);
gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_packed_dl_10C0);
// d_course_moo_moo_farm_packed_dl_10C0
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070010C0));
}
void render_toads_turnpike(struct UnkStruct_800DC5EC *arg0) {
@ -920,9 +967,12 @@ void render_toads_turnpike(struct UnkStruct_800DC5EC *arg0) {
gDPSetRenderMode(gDisplayListHead++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_TEX_EDGE2);
gDPSetCombineMode(gDisplayListHead++, G_CC_DECALRGBA, G_CC_PASS2);
gSPDisplayList(gDisplayListHead++, d_course_toads_turnpike_packed_dl_0);
gSPDisplayList(gDisplayListHead++, d_course_toads_turnpike_packed_dl_68);
gSPDisplayList(gDisplayListHead++, d_course_toads_turnpike_packed_dl_D8);
// d_course_toads_turnpike_packed_dl_0
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000000));
// d_course_toads_turnpike_packed_dl_68
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000068));
// d_course_toads_turnpike_packed_dl_D8
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070000D8));
gSPClearGeometryMode(gDisplayListHead++, G_FOG);
gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE);
}
@ -938,20 +988,26 @@ void render_kalimari_desert(struct UnkStruct_800DC5EC *arg0) {
if (func_80290C20(arg0->camera) == 1) {
gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_packed_dl_71C8);
// d_course_kalimari_desert_packed_dl_71C8
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070071C8));
}
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_MODULATEI);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
load_surface_map((uintptr_t) kalimari_desert_dls, arg0);
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_packed_dl_1ED8);
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_packed_dl_1B18);
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_packed_dl_8330);
// d_course_kalimari_desert_packed_dl_1ED8
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07001ED8));
// d_course_kalimari_desert_packed_dl_1B18
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07001B18));
// d_course_kalimari_desert_packed_dl_8330
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07008330));
gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK);
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2);
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_packed_dl_998);
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_packed_dl_270);
// d_course_kalimari_desert_packed_dl_998
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000998));
// d_course_kalimari_desert_packed_dl_270
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000270));
gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
}
@ -985,7 +1041,8 @@ void render_wario_stadium(struct UnkStruct_800DC5EC *arg0) {
gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
gSPDisplayList(gDisplayListHead++, d_course_wario_stadium_packed_dl_A0C8);
// d_course_wario_stadium_packed_dl_A0C8
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x0700A0C8));
}
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATERGBA, G_CC_MODULATERGBA);
@ -993,11 +1050,13 @@ void render_wario_stadium(struct UnkStruct_800DC5EC *arg0) {
load_surface_map((uintptr_t) wario_stadium_dls, arg0);
gSPDisplayList(gDisplayListHead++, d_course_wario_stadium_packed_dl_A228);
// d_course_wario_stadium_packed_dl_A228
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x0700A228));
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2);
gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK);
gSPDisplayList(gDisplayListHead++, d_course_wario_stadium_packed_dl_A88);
// d_course_wario_stadium_packed_dl_A88
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000A88));
gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
D_800DC5DC = 88;
@ -1042,7 +1101,8 @@ void render_block_fort(UNUSED struct UnkStruct_800DC5EC *arg0) {
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH);
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
gSPDisplayList(gDisplayListHead++, d_course_block_fort_packed_dl_15C0);
// d_course_block_fort_packed_dl_15C0
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070015C0));
}
@ -1051,15 +1111,22 @@ void render_skyscraper(UNUSED struct UnkStruct_800DC5EC *arg0) {
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH);
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
gSPDisplayList(gDisplayListHead++, d_course_skyscraper_packed_dl_FE8);
gSPDisplayList(gDisplayListHead++, d_course_skyscraper_packed_dl_C60);
gSPDisplayList(gDisplayListHead++, d_course_skyscraper_packed_dl_B70);
gSPDisplayList(gDisplayListHead++, d_course_skyscraper_packed_dl_6B8);
gSPDisplayList(gDisplayListHead++, d_course_skyscraper_packed_dl_570);
// d_course_skyscraper_packed_dl_FE8
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000FE8));
// d_course_skyscraper_packed_dl_C60
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000C60));
// d_course_skyscraper_packed_dl_B70
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000B70));
// d_course_skyscraper_packed_dl_6B8
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070006B8));
// d_course_skyscraper_packed_dl_570
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000570));
gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK);
gSPDisplayList(gDisplayListHead++, d_course_skyscraper_packed_dl_10C8);
// d_course_skyscraper_packed_dl_10C8
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070010C8));
gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
gSPDisplayList(gDisplayListHead++, d_course_skyscraper_packed_dl_258);
// d_course_skyscraper_packed_dl_258
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000258));
}
@ -1070,7 +1137,8 @@ void render_double_deck(UNUSED struct UnkStruct_800DC5EC *arg0) {
gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH);
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK);
gSPDisplayList(gDisplayListHead++, d_course_double_deck_packed_dl_738);
// d_course_double_deck_packed_dl_738
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000738));
gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
}
@ -1086,7 +1154,8 @@ void render_dks_jungle_parkway(struct UnkStruct_800DC5EC *arg0) {
gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_92D8);
// d_course_dks_jungle_parkway_packed_dl_92D8
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070092D8));
}
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
@ -1108,12 +1177,17 @@ void render_big_donut(struct UnkStruct_800DC5EC *arg0) {
if (func_80290C20(arg0->camera) == 1) {
gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
gSPDisplayList(gDisplayListHead++, d_course_big_donut_packed_dl_DE8);
// d_course_big_donut_packed_dl_DE8
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000DE8));
}
gSPDisplayList(gDisplayListHead++, d_course_big_donut_packed_dl_450);
gSPDisplayList(gDisplayListHead++, d_course_big_donut_packed_dl_AC0);
gSPDisplayList(gDisplayListHead++, d_course_big_donut_packed_dl_D20);
gSPDisplayList(gDisplayListHead++, d_course_big_donut_packed_dl_230);
// d_course_big_donut_packed_dl_450
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000450));
// d_course_big_donut_packed_dl_AC0
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000AC0));
// d_course_big_donut_packed_dl_D20
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000D20));
// d_course_big_donut_packed_dl_230
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000230));
}
void func_8029569C(void) {
@ -1306,11 +1380,14 @@ void func_80295D88(void) {
D_800DC5C8 = 0;
switch (gCurrentCourseId) {
case COURSE_MARIO_RACEWAY:
set_vertex_data_with_defaults(d_course_mario_raceway_packed_dl_1140);
// d_course_mario_raceway_packed_dl_1140
set_vertex_data_with_defaults((uintptr_t)0x07001140);
if (gScreenModeSelection == SCREEN_MODE_1P) {
set_vertex_data_with_defaults(d_course_mario_raceway_packed_dl_8E8);
// d_course_mario_raceway_packed_dl_8E8
set_vertex_data_with_defaults((uintptr_t)0x070008E8);
} else {
set_vertex_data_with_defaults(d_course_mario_raceway_packed_dl_2D68);
// d_course_mario_raceway_packed_dl_2D68
set_vertex_data_with_defaults((uintptr_t)0x07002D68);
}
parse_course_displaylists((uintptr_t) d_course_mario_raceway_addr);
func_80295C6C();
@ -1328,12 +1405,18 @@ void func_80295D88(void) {
// Spawn guardrail only for CC_50 and time trials.
if ((gCCSelection != CC_50) && (gModeSelection != TIME_TRIALS)) {
nullify_displaylist(d_course_choco_mountain_packed_dl_0);
nullify_displaylist(d_course_choco_mountain_packed_dl_98);
nullify_displaylist(d_course_choco_mountain_packed_dl_178);
nullify_displaylist(d_course_choco_mountain_packed_dl_280);
nullify_displaylist(d_course_choco_mountain_packed_dl_340);
nullify_displaylist(d_course_choco_mountain_packed_dl_3C8);
// d_course_choco_mountain_packed_dl_0
nullify_displaylist((uintptr_t)0x07000000);
// d_course_choco_mountain_packed_dl_98
nullify_displaylist((uintptr_t)0x07000098);
// d_course_choco_mountain_packed_dl_178
nullify_displaylist((uintptr_t)0x07000178);
// d_course_choco_mountain_packed_dl_280
nullify_displaylist((uintptr_t)0x07000280);
// d_course_choco_mountain_packed_dl_340
nullify_displaylist((uintptr_t)0x07000340);
// d_course_choco_mountain_packed_dl_3C8
nullify_displaylist((uintptr_t)0x070003C8);
}
parse_course_displaylists((uintptr_t) &d_course_choco_mountain_addr);
func_802B5CAC(0x238E, 0x31C7, D_8015F590);
@ -1343,7 +1426,8 @@ void func_80295D88(void) {
case COURSE_BOWSER_CASTLE:
parse_course_displaylists((uintptr_t) d_course_bowsers_castle_addr);
func_80295C6C();
find_vtx_and_set_colours(d_course_bowsers_castle_packed_dl_1350, 0x32, 0, 0, 0);
// d_course_bowsers_castle_packed_dl_1350
find_vtx_and_set_colours((uintptr_t)0x07001350, 0x32, 0, 0, 0);
D_8015F8E4 = -50.0f;
break;
case COURSE_BANSHEE_BOARDWALK:
@ -1353,7 +1437,8 @@ void func_80295D88(void) {
D_801625F0 = 0;
parse_course_displaylists((uintptr_t) d_course_banshee_boardwalk_track_sections);
func_80295C6C();
find_vtx_and_set_colours(d_course_banshee_boardwalk_packed_dl_878, 128, 0, 0, 0);
// d_course_banshee_boardwalk_packed_dl_878
find_vtx_and_set_colours((uintptr_t)0x07000878, 128, 0, 0, 0);
D_8015F8E4 = -80.0f;
break;
case COURSE_YOSHI_VALLEY:
@ -1370,10 +1455,14 @@ void func_80295D88(void) {
case COURSE_KOOPA_BEACH:
parse_course_displaylists((uintptr_t) d_course_koopa_troopa_beach_addr);
func_80295C6C();
find_vtx_and_set_colours(d_course_koopa_troopa_beach_packed_dl_ADE0, -0x6A, 255, 255, 255);
find_vtx_and_set_colours(d_course_koopa_troopa_beach_packed_dl_A540, -0x6A, 255, 255, 255);
find_vtx_and_set_colours(d_course_koopa_troopa_beach_packed_dl_9E70, -0x6A, 255, 255, 255);
find_vtx_and_set_colours(d_course_koopa_troopa_beach_packed_dl_358, -0x6A, 255, 255, 255);
// d_course_koopa_troopa_beach_packed_dl_ADE0
find_vtx_and_set_colours((uintptr_t)0x0700ADE0, -0x6A, 255, 255, 255);
// d_course_koopa_troopa_beach_packed_dl_A540
find_vtx_and_set_colours((uintptr_t)0x0700A540, -0x6A, 255, 255, 255);
// d_course_koopa_troopa_beach_packed_dl_9E70
find_vtx_and_set_colours((uintptr_t)0x07009E70, -0x6A, 255, 255, 255);
// d_course_koopa_troopa_beach_packed_dl_358
find_vtx_and_set_colours((uintptr_t)0x07000358, -0x6A, 255, 255, 255);
break;
case COURSE_ROYAL_RACEWAY:
parse_course_displaylists((uintptr_t) d_course_royal_raceway_addr);
@ -1409,48 +1498,66 @@ void func_80295D88(void) {
parse_course_displaylists((uintptr_t) d_course_sherbet_land_addr);
func_80295C6C();
D_8015F8E4 = -18.0f;
find_vtx_and_set_colours(d_course_sherbet_land_packed_dl_1EB8, -0x4C, 255, 255, 255);
find_vtx_and_set_colours(d_course_sherbet_land_packed_dl_2308, -0x6A, 255, 255, 255);
// d_course_sherbet_land_packed_dl_1EB8
find_vtx_and_set_colours((uintptr_t)0x07001EB8, -0x4C, 255, 255, 255);
// d_course_sherbet_land_packed_dl_2308
find_vtx_and_set_colours((uintptr_t)0x07002308, -0x6A, 255, 255, 255);
break;
case COURSE_RAINBOW_ROAD:
D_800DC5C8 = 1;
parse_course_displaylists((uintptr_t) d_course_rainbow_road_addr);
func_80295C6C();
D_8015F8E4 = 0.0f;
find_vtx_and_set_colours(d_course_rainbow_road_packed_dl_2068, -0x6A, 255, 255, 255);
find_vtx_and_set_colours(d_course_rainbow_road_packed_dl_1E18, -0x6A, 255, 255, 255);
find_vtx_and_set_colours(d_course_rainbow_road_packed_dl_1318, 255, 255, 255, 0);
// d_course_rainbow_road_packed_dl_2068
find_vtx_and_set_colours((uintptr_t)0x07002068, -0x6A, 255, 255, 255);
// d_course_rainbow_road_packed_dl_1E18
find_vtx_and_set_colours((uintptr_t)0x07001E18, -0x6A, 255, 255, 255);
// d_course_rainbow_road_packed_dl_1318
find_vtx_and_set_colours((uintptr_t)0x07001318, 255, 255, 255, 0);
if (gGamestate != CREDITS_SEQUENCE) {
find_vtx_and_set_colours(d_course_rainbow_road_packed_dl_1FB8, -0x6A, 255, 255, 255);
// d_course_rainbow_road_packed_dl_1FB8
find_vtx_and_set_colours((uintptr_t)0x07001FB8, -0x6A, 255, 255, 255);
}
break;
case COURSE_WARIO_STADIUM:
parse_course_displaylists((uintptr_t) d_course_wario_stadium_addr);
func_80295C6C();
D_8015F8E4 = D_8015F6EE - 10.0f;
find_vtx_and_set_colours(d_course_wario_stadium_packed_dl_C50, 100, 255, 255, 255);
find_vtx_and_set_colours(d_course_wario_stadium_packed_dl_BD8, 100, 255, 255, 255);
find_vtx_and_set_colours(d_course_wario_stadium_packed_dl_B60, 100, 255, 255, 255);
find_vtx_and_set_colours(d_course_wario_stadium_packed_dl_AE8, 100, 255, 255, 255);
find_vtx_and_set_colours(d_course_wario_stadium_packed_dl_CC8, 100, 255, 255, 255);
find_vtx_and_set_colours(d_course_wario_stadium_packed_dl_D50, 100, 255, 255, 255);
find_vtx_and_set_colours(d_course_wario_stadium_packed_dl_DD0, 100, 255, 255, 255);
find_vtx_and_set_colours(d_course_wario_stadium_packed_dl_E48, 100, 255, 255, 255);
// d_course_wario_stadium_packed_dl_C50
find_vtx_and_set_colours((uintptr_t)0x07000C50, 100, 255, 255, 255);
// d_course_wario_stadium_packed_dl_BD8
find_vtx_and_set_colours((uintptr_t)0x07000BD8, 100, 255, 255, 255);
// d_course_wario_stadium_packed_dl_B60
find_vtx_and_set_colours((uintptr_t)0x07000B60, 100, 255, 255, 255);
// d_course_wario_stadium_packed_dl_AE8
find_vtx_and_set_colours((uintptr_t)0x07000AE8, 100, 255, 255, 255);
// d_course_wario_stadium_packed_dl_CC8
find_vtx_and_set_colours((uintptr_t)0x07000CC8, 100, 255, 255, 255);
// d_course_wario_stadium_packed_dl_D50
find_vtx_and_set_colours((uintptr_t)0x07000D50, 100, 255, 255, 255);
// d_course_wario_stadium_packed_dl_DD0
find_vtx_and_set_colours((uintptr_t)0x07000DD0, 100, 255, 255, 255);
// d_course_wario_stadium_packed_dl_E48
find_vtx_and_set_colours((uintptr_t)0x07000E48, 100, 255, 255, 255);
break;
case COURSE_BLOCK_FORT:
set_vertex_data_with_default_section_id(d_course_block_fort_packed_dl_15C0, 1);
// d_course_block_fort_packed_dl_15C0
set_vertex_data_with_default_section_id((uintptr_t)0x070015C0, 1);
func_80295C6C();
D_8015F8E4 = D_8015F6EE - 10.0f;
break;
case COURSE_SKYSCRAPER:
set_vertex_data_with_default_section_id(d_course_skyscraper_packed_dl_1110, 1);
set_vertex_data_with_default_section_id(d_course_skyscraper_packed_dl_258, 1);
// d_course_skyscraper_packed_dl_1110
set_vertex_data_with_default_section_id((uintptr_t)0x07001110, 1);
// d_course_skyscraper_packed_dl_258
set_vertex_data_with_default_section_id((uintptr_t)0x07000258, 1);
func_80295C6C();
D_8015F8E4 = -480.0f;
break;
case COURSE_DOUBLE_DECK:
set_vertex_data_with_default_section_id(d_course_double_deck_packed_dl_738, 1);
// d_course_double_deck_packed_dl_738
set_vertex_data_with_default_section_id((uintptr_t)0x07000738, 1);
func_80295C6C();
D_8015F8E4 = D_8015F6EE - 10.0f;
break;
@ -1458,14 +1565,20 @@ void func_80295D88(void) {
parse_course_displaylists((uintptr_t) d_course_dks_jungle_parkway_addr);
func_80295C6C();
D_8015F8E4 = -475.0f;
find_vtx_and_set_colours(d_course_dks_jungle_parkway_packed_dl_3FA8, 120, 255, 255, 255);
// d_course_dks_jungle_parkway_packed_dl_3FA8
find_vtx_and_set_colours((uintptr_t)0x07003FA8, 120, 255, 255, 255);
break;
case COURSE_BIG_DONUT:
set_vertex_data_with_default_section_id(d_course_big_donut_packed_dl_1018, 6);
set_vertex_data_with_default_section_id(d_course_big_donut_packed_dl_450, 6);
set_vertex_data_with_default_section_id(d_course_big_donut_packed_dl_AC0, 6);
set_vertex_data_with_default_section_id(d_course_big_donut_packed_dl_B58, 6);
set_vertex_data_with_default_section_id(d_course_big_donut_packed_dl_230, 6);
// d_course_big_donut_packed_dl_1018
set_vertex_data_with_default_section_id((uintptr_t)0x07001018, 6);
// d_course_big_donut_packed_dl_450
set_vertex_data_with_default_section_id((uintptr_t)0x07000450, 6);
// d_course_big_donut_packed_dl_AC0
set_vertex_data_with_default_section_id((uintptr_t)0x07000AC0, 6);
// d_course_big_donut_packed_dl_B58
set_vertex_data_with_default_section_id((uintptr_t)0x07000B58, 6);
// d_course_big_donut_packed_dl_230
set_vertex_data_with_default_section_id((uintptr_t)0x07000230, 6);
func_80295C6C();
D_8015F8E4 = 100.0f;
break;
@ -1492,8 +1605,10 @@ void func_802966A0(void) {
D_802B87C4 = 0;
}
// waterfall animation
find_and_set_tile_size(d_course_koopa_troopa_beach_packed_dl_9D58, 0, D_802B87BC);
find_and_set_tile_size(d_course_koopa_troopa_beach_packed_dl_9CD0, 0, D_802B87C4);
// d_course_koopa_troopa_beach_packed_dl_9D58
find_and_set_tile_size((uintptr_t)0x07009D58, 0, D_802B87BC);
// d_course_koopa_troopa_beach_packed_dl_9CD0
find_and_set_tile_size((uintptr_t)0x07009CD0, 0, D_802B87C4);
D_802B87CC = random_int(300) / 40;
if (D_802B87C8 < 0) {
D_802B87C8 = random_int(300) / 40;
@ -1501,7 +1616,8 @@ void func_802966A0(void) {
D_802B87C8 = -(random_int(300) / 40);
}
// Waterfall bubbling effect? (unused)
find_and_set_tile_size(d_course_koopa_troopa_beach_packed_dl_2E8, D_802B87C8, D_802B87CC);
// d_course_koopa_troopa_beach_packed_dl_2E8
find_and_set_tile_size((uintptr_t)0x070002E8, D_802B87C8, D_802B87CC);
break;
case COURSE_BANSHEE_BOARDWALK:
D_802B87BC++;
@ -1509,31 +1625,39 @@ void func_802966A0(void) {
if (D_802B87BC >= 0x100) {
D_802B87BC = 0;
}
find_and_set_tile_size((uintptr_t) d_course_banshee_boardwalk_dl_B278, 0, D_802B87BC);
find_and_set_tile_size(d_course_banshee_boardwalk_dl_B278, 0, D_802B87BC);
break;
case COURSE_ROYAL_RACEWAY:
D_802B87BC -= 20;
if (D_802B87BC < 0) {
D_802B87BC = 0xFF;
}
find_and_set_tile_size(d_course_royal_raceway_packed_dl_A6A8, 0, D_802B87BC);
find_and_set_tile_size(d_course_royal_raceway_packed_dl_A648, 0, D_802B87BC);
// d_course_royal_raceway_packed_dl_A6A8
find_and_set_tile_size((uintptr_t)0x0700A6A8, 0, D_802B87BC);
// d_course_royal_raceway_packed_dl_A648
find_and_set_tile_size((uintptr_t)0x0700A648, 0, D_802B87BC);
break;
case COURSE_DK_JUNGLE:
D_802B87BC += 2;
if (D_802B87BC > 255) {
D_802B87BC = 0;
}
find_and_set_tile_size(d_course_dks_jungle_parkway_packed_dl_3DD0, 0, D_802B87BC);
find_and_set_tile_size(d_course_dks_jungle_parkway_packed_dl_3E40, 0, D_802B87BC);
find_and_set_tile_size(d_course_dks_jungle_parkway_packed_dl_3EB0, 0, D_802B87BC);
find_and_set_tile_size(d_course_dks_jungle_parkway_packed_dl_3F30, 0, D_802B87BC);
find_and_set_tile_size(d_course_dks_jungle_parkway_packed_dl_36A8, 0, D_802B87BC);
// d_course_dks_jungle_parkway_packed_dl_3DD0
find_and_set_tile_size((uintptr_t)0x07003DD0, 0, D_802B87BC);
// d_course_dks_jungle_parkway_packed_dl_3E40
find_and_set_tile_size((uintptr_t)0x07003E40, 0, D_802B87BC);
// d_course_dks_jungle_parkway_packed_dl_3EB0
find_and_set_tile_size((uintptr_t)0x07003EB0, 0, D_802B87BC);
// d_course_dks_jungle_parkway_packed_dl_3F30
find_and_set_tile_size((uintptr_t)0x07003F30, 0, D_802B87BC);
// d_course_dks_jungle_parkway_packed_dl_36A8
find_and_set_tile_size((uintptr_t)0x070036A8, 0, D_802B87BC);
D_802B87C4 -= 20;
if (D_802B87C4 < 0) {
D_802B87C4 = 0xFF;
}
find_and_set_tile_size(d_course_dks_jungle_parkway_packed_dl_9880, 0, D_802B87C4);
// d_course_dks_jungle_parkway_packed_dl_9880
find_and_set_tile_size((uintptr_t)0x07009880, 0, D_802B87C4);
func_80298C94();
break;
}

View File

@ -1,56 +0,0 @@
import subprocess
# This script generates headers for course segmented packed displaylist data
dir_path = "build/us/courses/"
output_file = "include/packed_displaylist_symbols_gen.h"
sym_list = []
# Run objdump for each packed.inc.elf file in courses/
for filename in subprocess.check_output(f"find {dir_path} -name packed.inc.elf", shell=True).decode().splitlines():
file_output = subprocess.check_output(f"objdump -t {filename} | grep ' .data\| .bss' | awk '$6 != \"\" {{print $1, $5, $6}}'", shell=True)
file_output = file_output.decode()
# Create temporary list of (addr, name) tuples from file_output
sym_list_tmp = []
for line in file_output.splitlines():
addr, size, name = line.split()
# Skip lines with the .data directive
if (name == ".data"):
continue
sym_list_tmp.append((addr, size, name))
# Sort the tmp list
sym_list_tmp = sorted(sym_list_tmp, key=lambda x: x[0])
# Generate the final displaylist symbol for courses
# Take the last addr and add its size
end_addr = '0{:X}'.format(int(sym_list_tmp[-1][0], 16) + int(sym_list_tmp[-1][1], 16))
end_name = sym_list_tmp[-1][2].split("dl_")[0] + "end"
sym_list_tmp.append((end_addr, '0', end_name))
# Magic number to insert a newline after every file.
sym_list_tmp.append((0xFFFFFFFF, '0',"newline"))
# Copy to the main list
sym_list.extend(sym_list_tmp)
# Write includes and defines to the header file
with open(output_file, "w") as f:
# Write comments
f.write("// Generated by tools/generate_segment_headers.py\n\n")
# Write includes
f.write("#include <macros.h>\n\n")
# Write #define statements to header file
for addr, size, name in sym_list:
# Add two newlines for readability
if (name == "newline"):
f.write("\n\n")
continue
f.write(f"#define {name} ((uintptr_t) 0x{addr.upper()})\n")

View File

@ -1,34 +0,0 @@
import sys
import subprocess
# This script generates vertice count for course geography used in the courseTable.
dir_path = "build/us/courses/"
output_file = "include/vertice_count_gen.h"
sym_list = []
output = ""
# Run objdump for each model.inc.elf file in courses/
for filename in subprocess.check_output(f"find {dir_path} -name model.inc.elf", shell=True).decode().splitlines():
file_output = subprocess.check_output(f"objdump -t {filename} | grep ' .data\| .bss' | awk '$6 != \"\" {{print $5, $6}}'", shell=True)
output += file_output.decode()
# Write includes and defines to the header file
with open(output_file, "w") as f:
# Write comments
f.write("// Generated by tools/generate_vertice_count.py\n\n")
# Write includes
f.write("#include <macros.h>\n\n")
# Write defines
for line in output.splitlines():
addr, name = line.split()
if (name == ".data"):
continue
# (size / 14) -> fill with zeros to make complete u32 -> toUppercase()
# One vertice = 14 bytes. objdump outputs the size. Divide size by 14.
f.write(f"#define {name}_count 0x{hex(int(addr, 16) // 14)[2:].zfill(8).upper()}\n\n")