Update decomp clang (#67)

* Update menus.c (#634)

* Update common_data.yml (#635)

* Renames for screenId and other changes (#636)

* screenId renames

* Rename surface map to collision mesh (#637)

* Rename some stack vars (#638)

* Fix syntax error (#639)

* Rename some stack vars

* Update collision.c

* Collision Documentation (#640)

* Collision related renames

* update doxygen (#649)

* change bool (#644)

Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>

* Update (#642)

* Delete trig_tables_bss.c (#650)

* fix typo audio (#656)

* fix typo src actor (#657)

Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>

* fix typo include (#658)

* fix course (#659)

* fix typo debug (#660)

* fix typo data (#661)

* replace number with const (#665)

* fix typo buffers (#655)

* fix typo buffers

* tweak ld file

* rename to sMemoryPool

* add a warning

---------

* fix typo src (#654)

* fix typo src

* fix non matcing

* Update code_80091750.c

---------

* fix typo racing (#653)

* fix typo racing

* get it match

* replace G_LINE3D to G_QUAD

---------

* fix typo src (#652)

* fix ending typo (#651)

* Action more info when it doesn't match and fix first diff (#662)

* Update linux-compile.yml

* fix first-diff

* Update first-diff.py

---------

* document texture of kart (#663)

* document texture of kart

* change screenPlayerId to screenId

* some documentation around object

* Revert "some documentation around object"

This reverts commit cbb39078e036bf2a417bed67359e910213acab28.

* more rename

---------

* Make evaluate_collision_players_palm_tree better (#667)

This matches just the same as before,	but using those two casts instead of
shifts seems more likely to be accurate to the original source code

Signed-off-by: Gabriel Ravier <gabravier@gmail.com>

* add fedora instruciton (#666)

* start documenting animation (#668)

* start documenting animation

* Update course_data.c

* change comment

* update libultra asm (#648)

* update libultra asm

* fix gcc __osThreadTail

---------

* Document Vehicles (#641)

* start doc collision

* fix merge

* finish rename fonction related to vehicle

* document around waypoint of vehicle

* make some modification

* make some change and rename one

* copy_ to oldPos

* doc smoke ferry and train

* some rename

* fix some renaming

* precise index

* rename a funciton

* simplify waypoint_vehicles

* change some name

* change some name

* rename move_to_point_direction

* fix some conflict

* Update code_80005FD0.c

* Update code_80005FD0.h

---------

* Label a save info loop (#645)

* save info

* more gcc progress

* fix a value and do a rename (#669)

* update clang and add action (#664)

* update clang and add action

* try clang on course folder only

* forget two file

* Update course_displaylists.inc.c

* forget few other file

* Update course_vertices.inc.c

* format all code while get it match

* second pass

* format other dir

* disable clang format on bad ido code

* fix some tabulation

* revert format on tool dir

* Update clang-format.yml

* ignore gbi.h

* add some read me instruction

* fix error

* format and fixing error

* Update README.md

---------

* Update linkonly_generator.py (#670)

* format more file

* update

* fix compilation issue

* remove course_metadata folder

* re add course metadata folder

* fix banshee bordwalk crash

* fix windows eurk

* Update CMakeLists.txt

---------
This commit is contained in:
coco875 2024-08-28 01:47:39 +02:00 committed by GitHub
parent bb3cbe0500
commit a1f0d32d66
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
402 changed files with 43929 additions and 45274 deletions

View File

@ -1,18 +1,23 @@
IndentWidth: 4
Language: Cpp
AlignAfterOpenBracket: Align
SortIncludes: false
ColumnLimit: 104
PointerAlignment: Right
AllowShortFunctionsOnASingleLine: false
AllowShortIfStatementsOnASingleLine: false
BinPackArguments: true
BinPackParameters: true
SpaceAfterCStyleCast: true
UseTab: Never
ColumnLimit: 120
PointerAlignment: Left
BreakBeforeBraces: Attach
BreakBeforeTernaryOperators: true
BreakBeforeBinaryOperators: NonAssignment
SpaceAfterCStyleCast: true
Cpp11BracedListStyle: false
IndentCaseLabels: true
BinPackArguments: true
BinPackParameters: true
AlignAfterOpenBracket: Align
AlignOperands: true
BreakBeforeTernaryOperators: true
BreakBeforeBinaryOperators: None
AllowShortBlocksOnASingleLine: true
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: false
AlignEscapedNewlines: Left
AlignTrailingComments: true
UseTab: Never
SortIncludes: false

View File

@ -1,6 +1,9 @@
---
Checks: '-*,readability-braces-around-statements'
Checks: '-*,readability-braces-around-statements,readability-inconsistent-declaration-parameter-name'
WarningsAsErrors: ''
HeaderFilterRegex: '(src|include|enhancements)\/.*\.h$'
HeaderFilterRegex: '(src|include)\/.*\.h$'
FormatStyle: 'file'
CheckOptions:
# Require argument names to match exactly (instead of allowing a name to be a prefix/suffix of another)
# Note: 'true' is expected by clang-tidy 12+ but '1' is used for compatibility with older versions
- key: readability-inconsistent-declaration-parameter-name.Strict
value: 1

21
.github/workflows/clang-format.yml vendored Normal file
View File

@ -0,0 +1,21 @@
name: clang-format Check
on: [push, pull_request]
jobs:
formatting-check:
name: Formatting Check
runs-on: ubuntu-latest
strategy:
matrix:
path:
- include
- data
- courses
- src
steps:
- uses: actions/checkout@v4
- name: Run clang-format style check for C/C++/Protobuf programs.
uses: jidicula/clang-format-action@v4.13.0
with:
clang-format-version: "18"
check-path: ${{ matrix.path }}
exclude-regex: "gbi.h"

View File

@ -434,6 +434,9 @@ doc:
@$(PRINT) "$(GREEN)Documentation generated in docs/html$(NO_COL)\n"
@$(PRINT) "$(GREEN)Results can be viewed by opening docs/html/index.html in a web browser$(NO_COL)\n"
format:
@$(PYTHON) $(TOOLS_DIR)/format.py -j $(N_THREADS)
clean:
$(RM) -r $(BUILD_DIR)

View File

@ -95,6 +95,7 @@ Documentation generated using [Doxygen](https://www.doxygen.nl/index.html). Run
Pull requests are welcome. For major changes, please discuss in the Discord.
Run `clang-format` on your code to ensure it meets the project's coding standards.
Run `make format` to ensure it meets the project's coding standards.
If code needs to avoid formatting place `// clang-format off` before the code and `// clang-format on` after.
Official Discord: [discord.gg/DuYH3Fh](https://discord.gg/DuYH3Fh)

View File

@ -25,5 +25,4 @@
#include <assets/block_fort_data.h>
#include <assets/double_deck_data.h>
#endif // ALL_COURSE_DATA_H

View File

@ -32,24 +32,25 @@
#include <assets/sherbet_land_vertices.h>
#include <assets/rainbow_road_vertices.h>
#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_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_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_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)
#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 // ALL_COURSE_MODEL_H

View File

@ -3,22 +3,22 @@
#include "course_offsets.h"
extern Gfx *rainbow_road_dls[];
extern Gfx *yoshi_valley_dls[];
extern Gfx *toads_turnpike_dls[];
extern Gfx *banshee_boardwalk_dls[];
extern Gfx *frappe_snowland_dls[];
extern Gfx *bowsers_castle_dls[];
extern Gfx *choco_mountain_dls[];
extern const char *kalimari_desert_dls[];
extern const char *luigi_raceway_dls[];
extern const char *mario_raceway_dls[];
extern Gfx *moo_moo_farm_dls[];
extern const char *royal_raceway_dls[];
extern Gfx *sherbet_land_dls[];
extern Gfx *sherbet_land_dls_2[];
extern Gfx *wario_stadium_dls[];
extern const char *dks_jungle_parkway_dls[];
extern const char* rainbow_road_dls[];
extern const char* yoshi_valley_dls[];
extern const char* toads_turnpike_dls[];
extern const char* banshee_boardwalk_dls[];
extern const char* frappe_snowland_dls[];
extern const char* bowsers_castle_dls[];
extern const char* choco_mountain_dls[];
extern const char* kalimari_desert_dls[];
extern const char* luigi_raceway_dls[];
extern const char* mario_raceway_dls[];
extern const char* moo_moo_farm_dls[];
extern const char* royal_raceway_dls[];
extern const char* sherbet_land_dls[];
extern const char* sherbet_land_dls_2[];
extern const char* wario_stadium_dls[];
extern const char* dks_jungle_parkway_dls[];
extern const course_texture banshee_boardwalk_textures[];
extern const course_texture big_donut_textures[];

View File

@ -5,130 +5,64 @@
#include <libultra/gbi.h>
const course_texture banshee_boardwalk_textures[] = {
{gTexture6447C4, 0x0106, 0x0800, 0x0},
{gTexture676FB0, 0x0525, 0x0800, 0x0},
{gTexture643B3C, 0x0798, 0x0800, 0x0},
{gTexture64BB60, 0x0169, 0x0800, 0x0},
{gTexture64BCCC, 0x0450, 0x0800, 0x0},
{gTexture64FBF4, 0x0274, 0x0800, 0x0},
{gTexture651B20, 0x041D, 0x0800, 0x0},
{gTexture66262C, 0x02F7, 0x0800, 0x0},
{gTexture668728, 0x01F5, 0x0800, 0x0},
{gTexture66A3DC, 0x07C5, 0x0800, 0x0},
{gTexture66CA98, 0x02C9, 0x0800, 0x0},
{gTexture66CD64, 0x02C0, 0x0800, 0x0},
{gTexture66D698, 0x0370, 0x0800, 0x0},
{gTexture66E608, 0x05E8, 0x0800, 0x0},
{gTexture67B388, 0x03D2, 0x0800, 0x0},
{gTextureSignWelcome0, 0x0A2E, 0x1000, 0x0},
{gTextureSignWelcome1, 0x0A0A, 0x1000, 0x0},
{gTextureSignWoodenBack0, 0x06EF, 0x1000, 0x0},
{gTextureSignWoodenBack1, 0x06D1, 0x1000, 0x0},
{gTextureSignWoodRedArrow, 0x04E1, 0x1000, 0x0},
{gTexture68D940, 0x057D, 0x0800, 0x0},
{gTexture685AC0, 0x07CC, 0x1000, 0x0},
{0x00000000, 0x0000, 0x0000, 0x0},
{ gTexture6447C4, 0x0106, 0x0800, 0x0 },
{ gTexture676FB0, 0x0525, 0x0800, 0x0 },
{ gTexture643B3C, 0x0798, 0x0800, 0x0 },
{ gTexture64BB60, 0x0169, 0x0800, 0x0 },
{ gTexture64BCCC, 0x0450, 0x0800, 0x0 },
{ gTexture64FBF4, 0x0274, 0x0800, 0x0 },
{ gTexture651B20, 0x041D, 0x0800, 0x0 },
{ gTexture66262C, 0x02F7, 0x0800, 0x0 },
{ gTexture668728, 0x01F5, 0x0800, 0x0 },
{ gTexture66A3DC, 0x07C5, 0x0800, 0x0 },
{ gTexture66CA98, 0x02C9, 0x0800, 0x0 },
{ gTexture66CD64, 0x02C0, 0x0800, 0x0 },
{ gTexture66D698, 0x0370, 0x0800, 0x0 },
{ gTexture66E608, 0x05E8, 0x0800, 0x0 },
{ gTexture67B388, 0x03D2, 0x0800, 0x0 },
{ gTextureSignWelcome0, 0x0A2E, 0x1000, 0x0 },
{ gTextureSignWelcome1, 0x0A0A, 0x1000, 0x0 },
{ gTextureSignWoodenBack0, 0x06EF, 0x1000, 0x0 },
{ gTextureSignWoodenBack1, 0x06D1, 0x1000, 0x0 },
{ gTextureSignWoodRedArrow, 0x04E1, 0x1000, 0x0 },
{ gTexture68D940, 0x057D, 0x0800, 0x0 },
{ gTexture685AC0, 0x07CC, 0x1000, 0x0 },
{ 0x00000000, 0x0000, 0x0000, 0x0 },
};
const Gfx *banshee_boardwalk_dls[] = {
d_course_banshee_boardwalk_dl_A0,
d_course_banshee_boardwalk_dl_210,
d_course_banshee_boardwalk_dl_160,
d_course_banshee_boardwalk_dl_270,
d_course_banshee_boardwalk_dl_358,
d_course_banshee_boardwalk_dl_4F0,
d_course_banshee_boardwalk_dl_408,
d_course_banshee_boardwalk_dl_540,
d_course_banshee_boardwalk_dl_620,
d_course_banshee_boardwalk_dl_7C0,
d_course_banshee_boardwalk_dl_6D0,
d_course_banshee_boardwalk_dl_870,
d_course_banshee_boardwalk_dl_940,
d_course_banshee_boardwalk_dl_AD0,
d_course_banshee_boardwalk_dl_9E0,
d_course_banshee_boardwalk_dl_B80,
d_course_banshee_boardwalk_dl_C30,
d_course_banshee_boardwalk_dl_D80,
d_course_banshee_boardwalk_dl_CD0,
d_course_banshee_boardwalk_dl_E10,
d_course_banshee_boardwalk_dl_EE0,
d_course_banshee_boardwalk_dl_1000,
d_course_banshee_boardwalk_dl_F50,
d_course_banshee_boardwalk_dl_1070,
d_course_banshee_boardwalk_dl_1160,
d_course_banshee_boardwalk_dl_12A8,
d_course_banshee_boardwalk_dl_11C8,
d_course_banshee_boardwalk_dl_12E8,
d_course_banshee_boardwalk_dl_13F0,
d_course_banshee_boardwalk_dl_1520,
d_course_banshee_boardwalk_dl_1448,
d_course_banshee_boardwalk_dl_1580,
d_course_banshee_boardwalk_dl_1678,
d_course_banshee_boardwalk_dl_17A0,
d_course_banshee_boardwalk_dl_16B8,
d_course_banshee_boardwalk_dl_1820,
d_course_banshee_boardwalk_dl_18D8,
d_course_banshee_boardwalk_dl_1A30,
d_course_banshee_boardwalk_dl_1940,
d_course_banshee_boardwalk_dl_1B00,
d_course_banshee_boardwalk_dl_1BA0,
d_course_banshee_boardwalk_dl_1CC8,
d_course_banshee_boardwalk_dl_1C20,
d_course_banshee_boardwalk_dl_1D90,
d_course_banshee_boardwalk_dl_1E28,
d_course_banshee_boardwalk_dl_1F40,
d_course_banshee_boardwalk_dl_1EA0,
d_course_banshee_boardwalk_dl_2028,
d_course_banshee_boardwalk_dl_20A0,
d_course_banshee_boardwalk_dl_21C8,
d_course_banshee_boardwalk_dl_2138,
d_course_banshee_boardwalk_dl_22D8,
d_course_banshee_boardwalk_dl_2340,
d_course_banshee_boardwalk_dl_24E8,
d_course_banshee_boardwalk_dl_2448,
d_course_banshee_boardwalk_dl_2610,
d_course_banshee_boardwalk_dl_2650,
d_course_banshee_boardwalk_dl_2790,
d_course_banshee_boardwalk_dl_2718,
d_course_banshee_boardwalk_dl_2868,
d_course_banshee_boardwalk_dl_28A8,
d_course_banshee_boardwalk_dl_2A18,
d_course_banshee_boardwalk_dl_2980,
d_course_banshee_boardwalk_dl_2AE0,
d_course_banshee_boardwalk_dl_2B88,
d_course_banshee_boardwalk_dl_2CE0,
d_course_banshee_boardwalk_dl_2C30,
d_course_banshee_boardwalk_dl_2DB0,
d_course_banshee_boardwalk_dl_2E20,
d_course_banshee_boardwalk_dl_2FA0,
d_course_banshee_boardwalk_dl_2EE0,
d_course_banshee_boardwalk_dl_3050,
d_course_banshee_boardwalk_dl_3100,
d_course_banshee_boardwalk_dl_32B0,
d_course_banshee_boardwalk_dl_3200,
d_course_banshee_boardwalk_dl_3390,
d_course_banshee_boardwalk_dl_3468,
d_course_banshee_boardwalk_dl_3660,
d_course_banshee_boardwalk_dl_35A0,
d_course_banshee_boardwalk_dl_3710,
d_course_banshee_boardwalk_dl_37F0,
d_course_banshee_boardwalk_dl_3980,
d_course_banshee_boardwalk_dl_3920,
d_course_banshee_boardwalk_dl_3A20,
d_course_banshee_boardwalk_dl_3AF8,
d_course_banshee_boardwalk_dl_3C40,
d_course_banshee_boardwalk_dl_3C00,
d_course_banshee_boardwalk_dl_3CD0,
d_course_banshee_boardwalk_dl_3D98,
d_course_banshee_boardwalk_dl_3EF0,
d_course_banshee_boardwalk_dl_3EB0,
d_course_banshee_boardwalk_dl_3F60,
d_course_banshee_boardwalk_dl_4038,
d_course_banshee_boardwalk_dl_4188,
d_course_banshee_boardwalk_dl_4118,
d_course_banshee_boardwalk_dl_41F0,
d_course_banshee_boardwalk_dl_42D0,
d_course_banshee_boardwalk_dl_4428,
d_course_banshee_boardwalk_dl_43A8,
const Gfx* banshee_boardwalk_dls[] = {
d_course_banshee_boardwalk_dl_A0, d_course_banshee_boardwalk_dl_210, d_course_banshee_boardwalk_dl_160,
d_course_banshee_boardwalk_dl_270, d_course_banshee_boardwalk_dl_358, d_course_banshee_boardwalk_dl_4F0,
d_course_banshee_boardwalk_dl_408, d_course_banshee_boardwalk_dl_540, d_course_banshee_boardwalk_dl_620,
d_course_banshee_boardwalk_dl_7C0, d_course_banshee_boardwalk_dl_6D0, d_course_banshee_boardwalk_dl_870,
d_course_banshee_boardwalk_dl_940, d_course_banshee_boardwalk_dl_AD0, d_course_banshee_boardwalk_dl_9E0,
d_course_banshee_boardwalk_dl_B80, d_course_banshee_boardwalk_dl_C30, d_course_banshee_boardwalk_dl_D80,
d_course_banshee_boardwalk_dl_CD0, d_course_banshee_boardwalk_dl_E10, d_course_banshee_boardwalk_dl_EE0,
d_course_banshee_boardwalk_dl_1000, d_course_banshee_boardwalk_dl_F50, d_course_banshee_boardwalk_dl_1070,
d_course_banshee_boardwalk_dl_1160, d_course_banshee_boardwalk_dl_12A8, d_course_banshee_boardwalk_dl_11C8,
d_course_banshee_boardwalk_dl_12E8, d_course_banshee_boardwalk_dl_13F0, d_course_banshee_boardwalk_dl_1520,
d_course_banshee_boardwalk_dl_1448, d_course_banshee_boardwalk_dl_1580, d_course_banshee_boardwalk_dl_1678,
d_course_banshee_boardwalk_dl_17A0, d_course_banshee_boardwalk_dl_16B8, d_course_banshee_boardwalk_dl_1820,
d_course_banshee_boardwalk_dl_18D8, d_course_banshee_boardwalk_dl_1A30, d_course_banshee_boardwalk_dl_1940,
d_course_banshee_boardwalk_dl_1B00, d_course_banshee_boardwalk_dl_1BA0, d_course_banshee_boardwalk_dl_1CC8,
d_course_banshee_boardwalk_dl_1C20, d_course_banshee_boardwalk_dl_1D90, d_course_banshee_boardwalk_dl_1E28,
d_course_banshee_boardwalk_dl_1F40, d_course_banshee_boardwalk_dl_1EA0, d_course_banshee_boardwalk_dl_2028,
d_course_banshee_boardwalk_dl_20A0, d_course_banshee_boardwalk_dl_21C8, d_course_banshee_boardwalk_dl_2138,
d_course_banshee_boardwalk_dl_22D8, d_course_banshee_boardwalk_dl_2340, d_course_banshee_boardwalk_dl_24E8,
d_course_banshee_boardwalk_dl_2448, d_course_banshee_boardwalk_dl_2610, d_course_banshee_boardwalk_dl_2650,
d_course_banshee_boardwalk_dl_2790, d_course_banshee_boardwalk_dl_2718, d_course_banshee_boardwalk_dl_2868,
d_course_banshee_boardwalk_dl_28A8, d_course_banshee_boardwalk_dl_2A18, d_course_banshee_boardwalk_dl_2980,
d_course_banshee_boardwalk_dl_2AE0, d_course_banshee_boardwalk_dl_2B88, d_course_banshee_boardwalk_dl_2CE0,
d_course_banshee_boardwalk_dl_2C30, d_course_banshee_boardwalk_dl_2DB0, d_course_banshee_boardwalk_dl_2E20,
d_course_banshee_boardwalk_dl_2FA0, d_course_banshee_boardwalk_dl_2EE0, d_course_banshee_boardwalk_dl_3050,
d_course_banshee_boardwalk_dl_3100, d_course_banshee_boardwalk_dl_32B0, d_course_banshee_boardwalk_dl_3200,
d_course_banshee_boardwalk_dl_3390, d_course_banshee_boardwalk_dl_3468, d_course_banshee_boardwalk_dl_3660,
d_course_banshee_boardwalk_dl_35A0, d_course_banshee_boardwalk_dl_3710, d_course_banshee_boardwalk_dl_37F0,
d_course_banshee_boardwalk_dl_3980, d_course_banshee_boardwalk_dl_3920, d_course_banshee_boardwalk_dl_3A20,
d_course_banshee_boardwalk_dl_3AF8, d_course_banshee_boardwalk_dl_3C40, d_course_banshee_boardwalk_dl_3C00,
d_course_banshee_boardwalk_dl_3CD0, d_course_banshee_boardwalk_dl_3D98, d_course_banshee_boardwalk_dl_3EF0,
d_course_banshee_boardwalk_dl_3EB0, d_course_banshee_boardwalk_dl_3F60, d_course_banshee_boardwalk_dl_4038,
d_course_banshee_boardwalk_dl_4188, d_course_banshee_boardwalk_dl_4118, d_course_banshee_boardwalk_dl_41F0,
d_course_banshee_boardwalk_dl_42D0, d_course_banshee_boardwalk_dl_4428, d_course_banshee_boardwalk_dl_43A8,
d_course_banshee_boardwalk_dl_4480,
};

View File

@ -2,9 +2,7 @@
#include "course_offsets.h"
const course_texture big_donut_textures[] = {
{gTexture66ABA4, 0x0312, 0x0800, 0x0},
{gTexture6747C4, 0x0145, 0x0800, 0x0},
{gTexture67490C, 0x021C, 0x0800, 0x0},
{gTexture64BA50, 0x0110, 0x0800, 0x0},
{0x00000000, 0x0000, 0x0000, 0x0},
{ gTexture66ABA4, 0x0312, 0x0800, 0x0 }, { gTexture6747C4, 0x0145, 0x0800, 0x0 },
{ gTexture67490C, 0x021C, 0x0800, 0x0 }, { gTexture64BA50, 0x0110, 0x0800, 0x0 },
{ 0x00000000, 0x0000, 0x0000, 0x0 },
};

View File

@ -3,12 +3,8 @@
#include <assets/other_textures.h>
const course_texture block_fort_textures[] = {
{gTexture64286C, 0x010A, 0x0800, 0x0},
{gTextureGrayCheckerboard, 0x010C, 0x0800, 0x0},
{gTextureGrayCobblestone, 0x010C, 0x0800, 0x0},
{gTexture64275C, 0x0110, 0x0800, 0x0},
{gTexture642978, 0x010D, 0x0800, 0x0},
{gTexture6747C4, 0x0145, 0x0800, 0x0},
{gTexture6442D4, 0x0138, 0x0800, 0x0},
{0x00000000, 0x0000, 0x0000, 0x0},
{ gTexture64286C, 0x010A, 0x0800, 0x0 }, { gTextureGrayCheckerboard, 0x010C, 0x0800, 0x0 },
{ gTextureGrayCobblestone, 0x010C, 0x0800, 0x0 }, { gTexture64275C, 0x0110, 0x0800, 0x0 },
{ gTexture642978, 0x010D, 0x0800, 0x0 }, { gTexture6747C4, 0x0145, 0x0800, 0x0 },
{ gTexture6442D4, 0x0138, 0x0800, 0x0 }, { 0x00000000, 0x0000, 0x0000, 0x0 },
};

View File

@ -3,144 +3,72 @@
#include <assets/bowsers_castle_data.h>
const course_texture bowsers_castle_textures[] = {
{gTexture64313C, 0x01B8, 0x0800, 0x0},
{gTexture6528DC, 0x0278, 0x0800, 0x0},
{gTexture66ED38, 0x010E, 0x0800, 0x0},
{gTexture676C6C, 0x0110, 0x0800, 0x0},
{gTexture676EA8, 0x0108, 0x0800, 0x0},
{gTexture679D34, 0x0106, 0x0800, 0x0},
{gTextureGrass6, 0x023B, 0x0800, 0x0},
{gTexture6522E0, 0x05FC, 0x0800, 0x0},
{gTexture651F40, 0x039F, 0x0800, 0x0},
{gTextureRoofTile, 0x0129, 0x0800, 0x0},
{gTextureSignBowser0, 0x07D0, 0x1000, 0x0},
{gTextureSignBowser1, 0x064D, 0x1000, 0x0},
{gTexture66ABA4, 0x0312, 0x0800, 0x0},
{gTexture66EBF0, 0x0146, 0x0800, 0x0},
{gTexture6733CC, 0x020E, 0x0800, 0x0},
{gTexture673118, 0x02B1, 0x0800, 0x0},
{gTexture673FF8, 0x035B, 0x0800, 0x0},
{gTexture674B28, 0x0230, 0x0800, 0x0},
{gTextureSignGreenArrow, 0x025B, 0x1000, 0x0},
{gTexture68D834, 0x010A, 0x0800, 0x0},
{gTexture676D7C, 0x012C, 0x0800, 0x0},
{gTexture67ADF0, 0x0595, 0x0800, 0x0},
{gTexture67EFEC, 0x016F, 0x0800, 0x0},
{gTexture653DB0, 0x06AE, 0x0800, 0x0},
{gTexture66CA98, 0x02C9, 0x0800, 0x0},
{gTexture673990, 0x02D8, 0x0800, 0x0},
{gTexture67A370, 0x05AA, 0x0800, 0x0},
{gTexture67A91C, 0x04D1, 0x0800, 0x0},
{0x00000000, 0x0000, 0x0000, 0x0},
{ gTexture64313C, 0x01B8, 0x0800, 0x0 },
{ gTexture6528DC, 0x0278, 0x0800, 0x0 },
{ gTexture66ED38, 0x010E, 0x0800, 0x0 },
{ gTexture676C6C, 0x0110, 0x0800, 0x0 },
{ gTexture676EA8, 0x0108, 0x0800, 0x0 },
{ gTexture679D34, 0x0106, 0x0800, 0x0 },
{ gTextureGrass6, 0x023B, 0x0800, 0x0 },
{ gTexture6522E0, 0x05FC, 0x0800, 0x0 },
{ gTexture651F40, 0x039F, 0x0800, 0x0 },
{ gTextureRoofTile, 0x0129, 0x0800, 0x0 },
{ gTextureSignBowser0, 0x07D0, 0x1000, 0x0 },
{ gTextureSignBowser1, 0x064D, 0x1000, 0x0 },
{ gTexture66ABA4, 0x0312, 0x0800, 0x0 },
{ gTexture66EBF0, 0x0146, 0x0800, 0x0 },
{ gTexture6733CC, 0x020E, 0x0800, 0x0 },
{ gTexture673118, 0x02B1, 0x0800, 0x0 },
{ gTexture673FF8, 0x035B, 0x0800, 0x0 },
{ gTexture674B28, 0x0230, 0x0800, 0x0 },
{ gTextureSignGreenArrow, 0x025B, 0x1000, 0x0 },
{ gTexture68D834, 0x010A, 0x0800, 0x0 },
{ gTexture676D7C, 0x012C, 0x0800, 0x0 },
{ gTexture67ADF0, 0x0595, 0x0800, 0x0 },
{ gTexture67EFEC, 0x016F, 0x0800, 0x0 },
{ gTexture653DB0, 0x06AE, 0x0800, 0x0 },
{ gTexture66CA98, 0x02C9, 0x0800, 0x0 },
{ gTexture673990, 0x02D8, 0x0800, 0x0 },
{ gTexture67A370, 0x05AA, 0x0800, 0x0 },
{ gTexture67A91C, 0x04D1, 0x0800, 0x0 },
{ 0x00000000, 0x0000, 0x0000, 0x0 },
};
const Gfx *bowsers_castle_dls[] = {
d_course_bowsers_castle_dl_0,
d_course_bowsers_castle_dl_230,
d_course_bowsers_castle_dl_110,
d_course_bowsers_castle_dl_398,
d_course_bowsers_castle_dl_428,
d_course_bowsers_castle_dl_640,
d_course_bowsers_castle_dl_4F0,
d_course_bowsers_castle_dl_7A0,
d_course_bowsers_castle_dl_860,
d_course_bowsers_castle_dl_9F8,
d_course_bowsers_castle_dl_8E8,
d_course_bowsers_castle_dl_AE0,
d_course_bowsers_castle_dl_B88,
d_course_bowsers_castle_dl_D20,
d_course_bowsers_castle_dl_C08,
d_course_bowsers_castle_dl_E00,
d_course_bowsers_castle_dl_EA8,
d_course_bowsers_castle_dl_1040,
d_course_bowsers_castle_dl_F08,
d_course_bowsers_castle_dl_1138,
d_course_bowsers_castle_dl_11F0,
d_course_bowsers_castle_dl_1290,
d_course_bowsers_castle_dl_1248,
d_course_bowsers_castle_dl_12D0,
d_course_bowsers_castle_dl_1330,
d_course_bowsers_castle_dl_1370,
d_course_bowsers_castle_dl_1350,
d_course_bowsers_castle_dl_13A0,
d_course_bowsers_castle_dl_13C0,
d_course_bowsers_castle_dl_1448,
d_course_bowsers_castle_dl_13E0,
d_course_bowsers_castle_dl_1488,
d_course_bowsers_castle_dl_14B0,
d_course_bowsers_castle_dl_1590,
d_course_bowsers_castle_dl_1520,
d_course_bowsers_castle_dl_1608,
d_course_bowsers_castle_dl_1690,
d_course_bowsers_castle_dl_1788,
d_course_bowsers_castle_dl_1710,
d_course_bowsers_castle_dl_17D0,
d_course_bowsers_castle_dl_1818,
d_course_bowsers_castle_dl_18C0,
d_course_bowsers_castle_dl_1860,
d_course_bowsers_castle_dl_1928,
d_course_bowsers_castle_dl_1960,
d_course_bowsers_castle_dl_19F8,
d_course_bowsers_castle_dl_19A8,
d_course_bowsers_castle_dl_1A40,
d_course_bowsers_castle_dl_1A90,
d_course_bowsers_castle_dl_1B10,
d_course_bowsers_castle_dl_1AD8,
d_course_bowsers_castle_dl_1B58,
d_course_bowsers_castle_dl_1BB0,
d_course_bowsers_castle_dl_1C38,
d_course_bowsers_castle_dl_1C10,
d_course_bowsers_castle_dl_1C60,
d_course_bowsers_castle_dl_1C98,
d_course_bowsers_castle_dl_1DF8,
d_course_bowsers_castle_dl_1CD0,
d_course_bowsers_castle_dl_1EB0,
d_course_bowsers_castle_dl_1FA0,
d_course_bowsers_castle_dl_2130,
d_course_bowsers_castle_dl_2008,
d_course_bowsers_castle_dl_21F0,
d_course_bowsers_castle_dl_22E8,
d_course_bowsers_castle_dl_24B8,
d_course_bowsers_castle_dl_2398,
d_course_bowsers_castle_dl_2578,
d_course_bowsers_castle_dl_2688,
d_course_bowsers_castle_dl_2880,
d_course_bowsers_castle_dl_2760,
d_course_bowsers_castle_dl_2958,
d_course_bowsers_castle_dl_2A60,
d_course_bowsers_castle_dl_2C48,
d_course_bowsers_castle_dl_2B80,
d_course_bowsers_castle_dl_2D08,
d_course_bowsers_castle_dl_2DF8,
d_course_bowsers_castle_dl_2FB0,
d_course_bowsers_castle_dl_2F30,
d_course_bowsers_castle_dl_3050,
d_course_bowsers_castle_dl_3158,
d_course_bowsers_castle_dl_32C0,
d_course_bowsers_castle_dl_3230,
d_course_bowsers_castle_dl_3338,
d_course_bowsers_castle_dl_3480,
d_course_bowsers_castle_dl_35D0,
d_course_bowsers_castle_dl_3508,
d_course_bowsers_castle_dl_3678,
d_course_bowsers_castle_dl_37D8,
d_course_bowsers_castle_dl_39E0,
d_course_bowsers_castle_dl_38F8,
d_course_bowsers_castle_dl_3B00,
d_course_bowsers_castle_dl_3C08,
d_course_bowsers_castle_dl_3EA8,
d_course_bowsers_castle_dl_3D78,
d_course_bowsers_castle_dl_3FF0,
d_course_bowsers_castle_dl_40F0,
d_course_bowsers_castle_dl_4358,
d_course_bowsers_castle_dl_4278,
d_course_bowsers_castle_dl_4488,
d_course_bowsers_castle_dl_45D8,
d_course_bowsers_castle_dl_4820,
d_course_bowsers_castle_dl_4748,
d_course_bowsers_castle_dl_4998,
d_course_bowsers_castle_dl_4A98,
d_course_bowsers_castle_dl_4CE8,
d_course_bowsers_castle_dl_4C00,
d_course_bowsers_castle_dl_4EA8,
const Gfx* bowsers_castle_dls[] = {
d_course_bowsers_castle_dl_0, d_course_bowsers_castle_dl_230, d_course_bowsers_castle_dl_110,
d_course_bowsers_castle_dl_398, d_course_bowsers_castle_dl_428, d_course_bowsers_castle_dl_640,
d_course_bowsers_castle_dl_4F0, d_course_bowsers_castle_dl_7A0, d_course_bowsers_castle_dl_860,
d_course_bowsers_castle_dl_9F8, d_course_bowsers_castle_dl_8E8, d_course_bowsers_castle_dl_AE0,
d_course_bowsers_castle_dl_B88, d_course_bowsers_castle_dl_D20, d_course_bowsers_castle_dl_C08,
d_course_bowsers_castle_dl_E00, d_course_bowsers_castle_dl_EA8, d_course_bowsers_castle_dl_1040,
d_course_bowsers_castle_dl_F08, d_course_bowsers_castle_dl_1138, d_course_bowsers_castle_dl_11F0,
d_course_bowsers_castle_dl_1290, d_course_bowsers_castle_dl_1248, d_course_bowsers_castle_dl_12D0,
d_course_bowsers_castle_dl_1330, d_course_bowsers_castle_dl_1370, d_course_bowsers_castle_dl_1350,
d_course_bowsers_castle_dl_13A0, d_course_bowsers_castle_dl_13C0, d_course_bowsers_castle_dl_1448,
d_course_bowsers_castle_dl_13E0, d_course_bowsers_castle_dl_1488, d_course_bowsers_castle_dl_14B0,
d_course_bowsers_castle_dl_1590, d_course_bowsers_castle_dl_1520, d_course_bowsers_castle_dl_1608,
d_course_bowsers_castle_dl_1690, d_course_bowsers_castle_dl_1788, d_course_bowsers_castle_dl_1710,
d_course_bowsers_castle_dl_17D0, d_course_bowsers_castle_dl_1818, d_course_bowsers_castle_dl_18C0,
d_course_bowsers_castle_dl_1860, d_course_bowsers_castle_dl_1928, d_course_bowsers_castle_dl_1960,
d_course_bowsers_castle_dl_19F8, d_course_bowsers_castle_dl_19A8, d_course_bowsers_castle_dl_1A40,
d_course_bowsers_castle_dl_1A90, d_course_bowsers_castle_dl_1B10, d_course_bowsers_castle_dl_1AD8,
d_course_bowsers_castle_dl_1B58, d_course_bowsers_castle_dl_1BB0, d_course_bowsers_castle_dl_1C38,
d_course_bowsers_castle_dl_1C10, d_course_bowsers_castle_dl_1C60, d_course_bowsers_castle_dl_1C98,
d_course_bowsers_castle_dl_1DF8, d_course_bowsers_castle_dl_1CD0, d_course_bowsers_castle_dl_1EB0,
d_course_bowsers_castle_dl_1FA0, d_course_bowsers_castle_dl_2130, d_course_bowsers_castle_dl_2008,
d_course_bowsers_castle_dl_21F0, d_course_bowsers_castle_dl_22E8, d_course_bowsers_castle_dl_24B8,
d_course_bowsers_castle_dl_2398, d_course_bowsers_castle_dl_2578, d_course_bowsers_castle_dl_2688,
d_course_bowsers_castle_dl_2880, d_course_bowsers_castle_dl_2760, d_course_bowsers_castle_dl_2958,
d_course_bowsers_castle_dl_2A60, d_course_bowsers_castle_dl_2C48, d_course_bowsers_castle_dl_2B80,
d_course_bowsers_castle_dl_2D08, d_course_bowsers_castle_dl_2DF8, d_course_bowsers_castle_dl_2FB0,
d_course_bowsers_castle_dl_2F30, d_course_bowsers_castle_dl_3050, d_course_bowsers_castle_dl_3158,
d_course_bowsers_castle_dl_32C0, d_course_bowsers_castle_dl_3230, d_course_bowsers_castle_dl_3338,
d_course_bowsers_castle_dl_3480, d_course_bowsers_castle_dl_35D0, d_course_bowsers_castle_dl_3508,
d_course_bowsers_castle_dl_3678, d_course_bowsers_castle_dl_37D8, d_course_bowsers_castle_dl_39E0,
d_course_bowsers_castle_dl_38F8, d_course_bowsers_castle_dl_3B00, d_course_bowsers_castle_dl_3C08,
d_course_bowsers_castle_dl_3EA8, d_course_bowsers_castle_dl_3D78, d_course_bowsers_castle_dl_3FF0,
d_course_bowsers_castle_dl_40F0, d_course_bowsers_castle_dl_4358, d_course_bowsers_castle_dl_4278,
d_course_bowsers_castle_dl_4488, d_course_bowsers_castle_dl_45D8, d_course_bowsers_castle_dl_4820,
d_course_bowsers_castle_dl_4748, d_course_bowsers_castle_dl_4998, d_course_bowsers_castle_dl_4A98,
d_course_bowsers_castle_dl_4CE8, d_course_bowsers_castle_dl_4C00, d_course_bowsers_castle_dl_4EA8,
};

View File

@ -3,124 +3,60 @@
#include <assets/choco_mountain_data.h>
const course_texture choco_mountain_textures[] = {
{gTexture64619C, 0x0124, 0x0800, 0x0},
{gTexture64647C, 0x0829, 0x1000, 0x0},
{gTexture647F4C, 0x05BC, 0x1000, 0x0},
{gTexture64FBF4, 0x0274, 0x0800, 0x0},
{gTexture653DB0, 0x06AE, 0x0800, 0x0},
{gTexture652B54, 0x0606, 0x0800, 0x0},
{gTexture65315C, 0x04A9, 0x0800, 0x0},
{gTexture6684F8, 0x010D, 0x0800, 0x0},
{gTextureSignLuigis0, 0x0287, 0x1000, 0x0},
{gTextureSignLuigis1, 0x02AF, 0x1000, 0x0},
{gTextureSignNintendoRed0, 0x02A6, 0x1000, 0x0},
{gTextureSignNintendoRed1, 0x02F7, 0x1000, 0x0},
{gTexture6774D8, 0x0113, 0x0800, 0x0},
{gTextureSignFallingRocks, 0x012C, 0x0800, 0x0},
{gTextureSignBackside, 0x011E, 0x0800, 0x0},
{gTexture679C04, 0x012F, 0x0800, 0x0},
{gTexture67B864, 0x014C, 0x0800, 0x0},
{gTexture67DC20, 0x03EF, 0x0800, 0x0},
{gTextureSignYoshi, 0x04DF, 0x1000, 0x0},
{gTextureCheckerboardBlueGray, 0x04A1, 0x1000, 0x0},
{0x00000000, 0x0000, 0x0000, 0x0},
{ gTexture64619C, 0x0124, 0x0800, 0x0 },
{ gTexture64647C, 0x0829, 0x1000, 0x0 },
{ gTexture647F4C, 0x05BC, 0x1000, 0x0 },
{ gTexture64FBF4, 0x0274, 0x0800, 0x0 },
{ gTexture653DB0, 0x06AE, 0x0800, 0x0 },
{ gTexture652B54, 0x0606, 0x0800, 0x0 },
{ gTexture65315C, 0x04A9, 0x0800, 0x0 },
{ gTexture6684F8, 0x010D, 0x0800, 0x0 },
{ gTextureSignLuigis0, 0x0287, 0x1000, 0x0 },
{ gTextureSignLuigis1, 0x02AF, 0x1000, 0x0 },
{ gTextureSignNintendoRed0, 0x02A6, 0x1000, 0x0 },
{ gTextureSignNintendoRed1, 0x02F7, 0x1000, 0x0 },
{ gTexture6774D8, 0x0113, 0x0800, 0x0 },
{ gTextureSignFallingRocks, 0x012C, 0x0800, 0x0 },
{ gTextureSignBackside, 0x011E, 0x0800, 0x0 },
{ gTexture679C04, 0x012F, 0x0800, 0x0 },
{ gTexture67B864, 0x014C, 0x0800, 0x0 },
{ gTexture67DC20, 0x03EF, 0x0800, 0x0 },
{ gTextureSignYoshi, 0x04DF, 0x1000, 0x0 },
{ gTextureCheckerboardBlueGray, 0x04A1, 0x1000, 0x0 },
{ 0x00000000, 0x0000, 0x0000, 0x0 },
};
const Gfx *choco_mountain_dls[] = {
d_course_choco_mountain_dl_0,
d_course_choco_mountain_dl_150,
d_course_choco_mountain_dl_B0,
d_course_choco_mountain_dl_208,
d_course_choco_mountain_dl_2A8,
d_course_choco_mountain_dl_410,
d_course_choco_mountain_dl_330,
d_course_choco_mountain_dl_4D8,
d_course_choco_mountain_dl_588,
d_course_choco_mountain_dl_6C0,
d_course_choco_mountain_dl_618,
d_course_choco_mountain_dl_750,
d_course_choco_mountain_dl_7E8,
d_course_choco_mountain_dl_908,
d_course_choco_mountain_dl_878,
d_course_choco_mountain_dl_990,
d_course_choco_mountain_dl_A28,
d_course_choco_mountain_dl_BB8,
d_course_choco_mountain_dl_B10,
d_course_choco_mountain_dl_C40,
d_course_choco_mountain_dl_D30,
d_course_choco_mountain_dl_EA0,
d_course_choco_mountain_dl_DF8,
d_course_choco_mountain_dl_F38,
d_course_choco_mountain_dl_1000,
d_course_choco_mountain_dl_1150,
d_course_choco_mountain_dl_10A8,
d_course_choco_mountain_dl_11D8,
d_course_choco_mountain_dl_1280,
d_course_choco_mountain_dl_13E0,
d_course_choco_mountain_dl_1330,
d_course_choco_mountain_dl_1488,
d_course_choco_mountain_dl_1528,
d_course_choco_mountain_dl_16B8,
d_course_choco_mountain_dl_15E8,
d_course_choco_mountain_dl_1788,
d_course_choco_mountain_dl_1810,
d_course_choco_mountain_dl_1970,
d_course_choco_mountain_dl_18B8,
d_course_choco_mountain_dl_1A40,
d_course_choco_mountain_dl_1AC8,
d_course_choco_mountain_dl_1C18,
d_course_choco_mountain_dl_1B70,
d_course_choco_mountain_dl_1CC8,
d_course_choco_mountain_dl_1D50,
d_course_choco_mountain_dl_1E98,
d_course_choco_mountain_dl_1E08,
d_course_choco_mountain_dl_1F40,
d_course_choco_mountain_dl_1FE0,
d_course_choco_mountain_dl_2168,
d_course_choco_mountain_dl_20C8,
d_course_choco_mountain_dl_2228,
d_course_choco_mountain_dl_22D8,
d_course_choco_mountain_dl_2468,
d_course_choco_mountain_dl_23C8,
d_course_choco_mountain_dl_2538,
d_course_choco_mountain_dl_2600,
d_course_choco_mountain_dl_2780,
d_course_choco_mountain_dl_26D8,
d_course_choco_mountain_dl_2840,
d_course_choco_mountain_dl_2908,
d_course_choco_mountain_dl_2A88,
d_course_choco_mountain_dl_29B8,
d_course_choco_mountain_dl_2B38,
d_course_choco_mountain_dl_2C08,
d_course_choco_mountain_dl_2D50,
d_course_choco_mountain_dl_2C98,
d_course_choco_mountain_dl_2DE8,
d_course_choco_mountain_dl_2EA0,
d_course_choco_mountain_dl_2FD0,
d_course_choco_mountain_dl_2F28,
d_course_choco_mountain_dl_3070,
d_course_choco_mountain_dl_3120,
d_course_choco_mountain_dl_32B0,
d_course_choco_mountain_dl_31D8,
d_course_choco_mountain_dl_3368,
d_course_choco_mountain_dl_3438,
d_course_choco_mountain_dl_3618,
d_course_choco_mountain_dl_3550,
d_course_choco_mountain_dl_36F0,
d_course_choco_mountain_dl_37D0,
d_course_choco_mountain_dl_39A8,
d_course_choco_mountain_dl_38E8,
d_course_choco_mountain_dl_3A80,
d_course_choco_mountain_dl_3B60,
d_course_choco_mountain_dl_3CB8,
d_course_choco_mountain_dl_3C18,
d_course_choco_mountain_dl_3D70,
d_course_choco_mountain_dl_3E18,
d_course_choco_mountain_dl_3FA8,
d_course_choco_mountain_dl_3EE0,
d_course_choco_mountain_dl_4090,
d_course_choco_mountain_dl_4138,
d_course_choco_mountain_dl_42C8,
d_course_choco_mountain_dl_41F8,
d_course_choco_mountain_dl_43C8,
const Gfx* choco_mountain_dls[] = {
d_course_choco_mountain_dl_0, d_course_choco_mountain_dl_150, d_course_choco_mountain_dl_B0,
d_course_choco_mountain_dl_208, d_course_choco_mountain_dl_2A8, d_course_choco_mountain_dl_410,
d_course_choco_mountain_dl_330, d_course_choco_mountain_dl_4D8, d_course_choco_mountain_dl_588,
d_course_choco_mountain_dl_6C0, d_course_choco_mountain_dl_618, d_course_choco_mountain_dl_750,
d_course_choco_mountain_dl_7E8, d_course_choco_mountain_dl_908, d_course_choco_mountain_dl_878,
d_course_choco_mountain_dl_990, d_course_choco_mountain_dl_A28, d_course_choco_mountain_dl_BB8,
d_course_choco_mountain_dl_B10, d_course_choco_mountain_dl_C40, d_course_choco_mountain_dl_D30,
d_course_choco_mountain_dl_EA0, d_course_choco_mountain_dl_DF8, d_course_choco_mountain_dl_F38,
d_course_choco_mountain_dl_1000, d_course_choco_mountain_dl_1150, d_course_choco_mountain_dl_10A8,
d_course_choco_mountain_dl_11D8, d_course_choco_mountain_dl_1280, d_course_choco_mountain_dl_13E0,
d_course_choco_mountain_dl_1330, d_course_choco_mountain_dl_1488, d_course_choco_mountain_dl_1528,
d_course_choco_mountain_dl_16B8, d_course_choco_mountain_dl_15E8, d_course_choco_mountain_dl_1788,
d_course_choco_mountain_dl_1810, d_course_choco_mountain_dl_1970, d_course_choco_mountain_dl_18B8,
d_course_choco_mountain_dl_1A40, d_course_choco_mountain_dl_1AC8, d_course_choco_mountain_dl_1C18,
d_course_choco_mountain_dl_1B70, d_course_choco_mountain_dl_1CC8, d_course_choco_mountain_dl_1D50,
d_course_choco_mountain_dl_1E98, d_course_choco_mountain_dl_1E08, d_course_choco_mountain_dl_1F40,
d_course_choco_mountain_dl_1FE0, d_course_choco_mountain_dl_2168, d_course_choco_mountain_dl_20C8,
d_course_choco_mountain_dl_2228, d_course_choco_mountain_dl_22D8, d_course_choco_mountain_dl_2468,
d_course_choco_mountain_dl_23C8, d_course_choco_mountain_dl_2538, d_course_choco_mountain_dl_2600,
d_course_choco_mountain_dl_2780, d_course_choco_mountain_dl_26D8, d_course_choco_mountain_dl_2840,
d_course_choco_mountain_dl_2908, d_course_choco_mountain_dl_2A88, d_course_choco_mountain_dl_29B8,
d_course_choco_mountain_dl_2B38, d_course_choco_mountain_dl_2C08, d_course_choco_mountain_dl_2D50,
d_course_choco_mountain_dl_2C98, d_course_choco_mountain_dl_2DE8, d_course_choco_mountain_dl_2EA0,
d_course_choco_mountain_dl_2FD0, d_course_choco_mountain_dl_2F28, d_course_choco_mountain_dl_3070,
d_course_choco_mountain_dl_3120, d_course_choco_mountain_dl_32B0, d_course_choco_mountain_dl_31D8,
d_course_choco_mountain_dl_3368, d_course_choco_mountain_dl_3438, d_course_choco_mountain_dl_3618,
d_course_choco_mountain_dl_3550, d_course_choco_mountain_dl_36F0, d_course_choco_mountain_dl_37D0,
d_course_choco_mountain_dl_39A8, d_course_choco_mountain_dl_38E8, d_course_choco_mountain_dl_3A80,
d_course_choco_mountain_dl_3B60, d_course_choco_mountain_dl_3CB8, d_course_choco_mountain_dl_3C18,
d_course_choco_mountain_dl_3D70, d_course_choco_mountain_dl_3E18, d_course_choco_mountain_dl_3FA8,
d_course_choco_mountain_dl_3EE0, d_course_choco_mountain_dl_4090, d_course_choco_mountain_dl_4138,
d_course_choco_mountain_dl_42C8, d_course_choco_mountain_dl_41F8, d_course_choco_mountain_dl_43C8,
};

View File

@ -4,144 +4,305 @@
#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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, d_course_big_donut_packed_end,
// big_donut_textures, 0, 0x0000,
// }};
/*
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
d_course_big_donut_packed_end,
big_donut_textures,
0,
0x0000,
} };
*/

View File

@ -7,19 +7,19 @@
// dlRomStart, vertexRomStart, & vertexStart, are u8* because mio0 compressed.
struct CourseTable {
u8 *dlRomStart; // 0x00 ROM start for segment 6 DL data
u8 *dlRomEnd; // 0x04 ROM end for segment 6 DL data
u8 *vertexRomStart; // 0x08 ROM start for segment 4 vertex data
u8 *vertexRomEnd; // 0x0C ROM end for segment 7?
u8 *offsetRomStart; // 0x10 ROM start for uncompressed segment 9 texture and DL addresses
u8 *offsetRomEnd; // 0x14 ROM end for uncompressed segment 9 texture and DL addresses
CourseVtx *vertexStart; // 0x18 segmented address of vertex data
u32 vertexCount; // 0x1C number of vertices in vertex data
u8 *packedStart; // 0x20 packed display list start address
u8 *finalDisplaylistOffset; // 0x24
u32 *textures; // 0x20 segmented address of textures table
u16 unknown1; // 0x2C
u16 padding; // 0x2E
u8* dlRomStart; // 0x00 ROM start for segment 6 DL data
u8* dlRomEnd; // 0x04 ROM end for segment 6 DL data
u8* vertexRomStart; // 0x08 ROM start for segment 4 vertex data
u8* vertexRomEnd; // 0x0C ROM end for segment 7?
u8* offsetRomStart; // 0x10 ROM start for uncompressed segment 9 texture and DL addresses
u8* offsetRomEnd; // 0x14 ROM end for uncompressed segment 9 texture and DL addresses
CourseVtx* vertexStart; // 0x18 segmented address of vertex data
u32 vertexCount; // 0x1C number of vertices in vertex data
u8* packedStart; // 0x20 packed display list start address
u8* finalDisplaylistOffset; // 0x24
u32* textures; // 0x20 segmented address of textures table
u16 unknown1; // 0x2C
u16 padding; // 0x2E
};
extern struct CourseTable gCourseTable[];

View File

@ -3,58 +3,67 @@
#include <assets/dks_jungle_parkway_data.h>
const course_texture dks_jungle_parkway_textures[] = {
{gTexture648508, 0x01FE, 0x1000, 0x0},
{gTexture6684F8, 0x010D, 0x0800, 0x0},
{gTextureWoodBridgeSlats, 0x0DAB, 0x1000, 0x0},
{gTexture654460, 0x0B12, 0x1000, 0x0},
{gTexture654F74, 0x0A24, 0x1000, 0x0},
{gTexture655998, 0x059F, 0x0800, 0x0},
{gTexture655F38, 0x0BB9, 0x1000, 0x0},
{gTexture656AF4, 0x0AD3, 0x1000, 0x0},
{gTexture6575C8, 0x0DA7, 0x1000, 0x0},
{gTexture658370, 0x0DBA, 0x1000, 0x0},
{gTexture65912C, 0x0DBC, 0x1000, 0x0},
{gTexture659EE8, 0x0EF5, 0x1000, 0x0},
{gTexture65ADE0, 0x0D5A, 0x1000, 0x0},
{gTexture65BB3C, 0x0D9E, 0x1000, 0x0},
{gTexture65C8DC, 0x0CF5, 0x1000, 0x0},
{gTexture65D5D4, 0x0D18, 0x1000, 0x0},
{gTexture65E2EC, 0x02B0, 0x0800, 0x0},
{gTexture65EAEC, 0x034A, 0x0800, 0x0},
{gTexture65E59C, 0x054F, 0x1000, 0x0},
{gTexture65EE38, 0x0CDE, 0x1000, 0x0},
{gTexture65FB18, 0x03EE, 0x0800, 0x0},
{gTextureSignPinkArrow, 0x0198, 0x0800, 0x0},
{gTextureWaves0, 0x04D0, 0x0800, 0x0},
{gTexture683844, 0x0655, 0x0800, 0x0},
{0x00000000, 0x0000, 0x0000, 0x0},
{ gTexture648508, 0x01FE, 0x1000, 0x0 },
{ gTexture6684F8, 0x010D, 0x0800, 0x0 },
{ gTextureWoodBridgeSlats, 0x0DAB, 0x1000, 0x0 },
{ gTexture654460, 0x0B12, 0x1000, 0x0 },
{ gTexture654F74, 0x0A24, 0x1000, 0x0 },
{ gTexture655998, 0x059F, 0x0800, 0x0 },
{ gTexture655F38, 0x0BB9, 0x1000, 0x0 },
{ gTexture656AF4, 0x0AD3, 0x1000, 0x0 },
{ gTexture6575C8, 0x0DA7, 0x1000, 0x0 },
{ gTexture658370, 0x0DBA, 0x1000, 0x0 },
{ gTexture65912C, 0x0DBC, 0x1000, 0x0 },
{ gTexture659EE8, 0x0EF5, 0x1000, 0x0 },
{ gTexture65ADE0, 0x0D5A, 0x1000, 0x0 },
{ gTexture65BB3C, 0x0D9E, 0x1000, 0x0 },
{ gTexture65C8DC, 0x0CF5, 0x1000, 0x0 },
{ gTexture65D5D4, 0x0D18, 0x1000, 0x0 },
{ gTexture65E2EC, 0x02B0, 0x0800, 0x0 },
{ gTexture65EAEC, 0x034A, 0x0800, 0x0 },
{ gTexture65E59C, 0x054F, 0x1000, 0x0 },
{ gTexture65EE38, 0x0CDE, 0x1000, 0x0 },
{ gTexture65FB18, 0x03EE, 0x0800, 0x0 },
{ gTextureSignPinkArrow, 0x0198, 0x0800, 0x0 },
{ gTextureWaves0, 0x04D0, 0x0800, 0x0 },
{ gTexture683844, 0x0655, 0x0800, 0x0 },
{ 0x00000000, 0x0000, 0x0000, 0x0 },
};
const Gfx *dks_jungle_parkway_dls[] = {
d_course_dks_jungle_parkway_dl_20, d_course_dks_jungle_parkway_dl_210, d_course_dks_jungle_parkway_dl_180, d_course_dks_jungle_parkway_dl_310,
d_course_dks_jungle_parkway_dl_400, d_course_dks_jungle_parkway_dl_628, d_course_dks_jungle_parkway_dl_560, d_course_dks_jungle_parkway_dl_750,
d_course_dks_jungle_parkway_dl_888, d_course_dks_jungle_parkway_dl_B00, d_course_dks_jungle_parkway_dl_A10, d_course_dks_jungle_parkway_dl_C30,
d_course_dks_jungle_parkway_dl_D98, d_course_dks_jungle_parkway_dl_1028, d_course_dks_jungle_parkway_dl_EF0, d_course_dks_jungle_parkway_dl_1160,
d_course_dks_jungle_parkway_dl_12E8, d_course_dks_jungle_parkway_dl_15E0, d_course_dks_jungle_parkway_dl_1478, d_course_dks_jungle_parkway_dl_1718,
d_course_dks_jungle_parkway_dl_1890, d_course_dks_jungle_parkway_dl_1B20, d_course_dks_jungle_parkway_dl_1A00, d_course_dks_jungle_parkway_dl_1C20,
d_course_dks_jungle_parkway_dl_1DB8, d_course_dks_jungle_parkway_dl_1FD8, d_course_dks_jungle_parkway_dl_1F20, d_course_dks_jungle_parkway_dl_20A0,
d_course_dks_jungle_parkway_dl_2200, d_course_dks_jungle_parkway_dl_2398, d_course_dks_jungle_parkway_dl_2328, d_course_dks_jungle_parkway_dl_2480,
d_course_dks_jungle_parkway_dl_2558, d_course_dks_jungle_parkway_dl_2810, d_course_dks_jungle_parkway_dl_2728, d_course_dks_jungle_parkway_dl_2928,
d_course_dks_jungle_parkway_dl_2AC0, d_course_dks_jungle_parkway_dl_2D70, d_course_dks_jungle_parkway_dl_2B88, d_course_dks_jungle_parkway_dl_2E30,
d_course_dks_jungle_parkway_dl_3010, d_course_dks_jungle_parkway_dl_3338, d_course_dks_jungle_parkway_dl_3100, d_course_dks_jungle_parkway_dl_3498,
d_course_dks_jungle_parkway_dl_36A0, d_course_dks_jungle_parkway_dl_3988, d_course_dks_jungle_parkway_dl_3790, d_course_dks_jungle_parkway_dl_3B28,
d_course_dks_jungle_parkway_dl_3CC8, d_course_dks_jungle_parkway_dl_3F78, d_course_dks_jungle_parkway_dl_3D88, d_course_dks_jungle_parkway_dl_4100,
d_course_dks_jungle_parkway_dl_4250, d_course_dks_jungle_parkway_dl_4470, d_course_dks_jungle_parkway_dl_42F8, d_course_dks_jungle_parkway_dl_45C0,
d_course_dks_jungle_parkway_dl_4658, d_course_dks_jungle_parkway_dl_4848, d_course_dks_jungle_parkway_dl_4710, d_course_dks_jungle_parkway_dl_4980,
d_course_dks_jungle_parkway_dl_4A38, d_course_dks_jungle_parkway_dl_4C18, d_course_dks_jungle_parkway_dl_4AE8, d_course_dks_jungle_parkway_dl_4D10,
d_course_dks_jungle_parkway_dl_4E10, d_course_dks_jungle_parkway_dl_51B0, d_course_dks_jungle_parkway_dl_4FB0, d_course_dks_jungle_parkway_dl_53F8,
d_course_dks_jungle_parkway_dl_5580, d_course_dks_jungle_parkway_dl_57A0, d_course_dks_jungle_parkway_dl_5650, d_course_dks_jungle_parkway_dl_5920,
d_course_dks_jungle_parkway_dl_59B8, d_course_dks_jungle_parkway_dl_5B90, d_course_dks_jungle_parkway_dl_5A50, d_course_dks_jungle_parkway_dl_5CB0,
d_course_dks_jungle_parkway_dl_5D70, d_course_dks_jungle_parkway_dl_5EC8, d_course_dks_jungle_parkway_dl_5DF8, d_course_dks_jungle_parkway_dl_5FA8,
d_course_dks_jungle_parkway_dl_6048, d_course_dks_jungle_parkway_dl_62D0, d_course_dks_jungle_parkway_dl_6178, d_course_dks_jungle_parkway_dl_6468,
d_course_dks_jungle_parkway_dl_6588, d_course_dks_jungle_parkway_dl_6740, d_course_dks_jungle_parkway_dl_6680, d_course_dks_jungle_parkway_dl_67C0,
d_course_dks_jungle_parkway_dl_68D0, d_course_dks_jungle_parkway_dl_6A70, d_course_dks_jungle_parkway_dl_69C8, d_course_dks_jungle_parkway_dl_6AD8,
d_course_dks_jungle_parkway_dl_6BE8, d_course_dks_jungle_parkway_dl_6CB8, d_course_dks_jungle_parkway_dl_6C70, d_course_dks_jungle_parkway_dl_6D10,
d_course_dks_jungle_parkway_dl_6D88, d_course_dks_jungle_parkway_dl_6E48, d_course_dks_jungle_parkway_dl_6E00, d_course_dks_jungle_parkway_dl_6EB0,
d_course_dks_jungle_parkway_dl_6F10, d_course_dks_jungle_parkway_dl_7080, d_course_dks_jungle_parkway_dl_7008, d_course_dks_jungle_parkway_dl_7108,
const Gfx* dks_jungle_parkway_dls[] = {
d_course_dks_jungle_parkway_dl_20, d_course_dks_jungle_parkway_dl_210, d_course_dks_jungle_parkway_dl_180,
d_course_dks_jungle_parkway_dl_310, d_course_dks_jungle_parkway_dl_400, d_course_dks_jungle_parkway_dl_628,
d_course_dks_jungle_parkway_dl_560, d_course_dks_jungle_parkway_dl_750, d_course_dks_jungle_parkway_dl_888,
d_course_dks_jungle_parkway_dl_B00, d_course_dks_jungle_parkway_dl_A10, d_course_dks_jungle_parkway_dl_C30,
d_course_dks_jungle_parkway_dl_D98, d_course_dks_jungle_parkway_dl_1028, d_course_dks_jungle_parkway_dl_EF0,
d_course_dks_jungle_parkway_dl_1160, d_course_dks_jungle_parkway_dl_12E8, d_course_dks_jungle_parkway_dl_15E0,
d_course_dks_jungle_parkway_dl_1478, d_course_dks_jungle_parkway_dl_1718, d_course_dks_jungle_parkway_dl_1890,
d_course_dks_jungle_parkway_dl_1B20, d_course_dks_jungle_parkway_dl_1A00, d_course_dks_jungle_parkway_dl_1C20,
d_course_dks_jungle_parkway_dl_1DB8, d_course_dks_jungle_parkway_dl_1FD8, d_course_dks_jungle_parkway_dl_1F20,
d_course_dks_jungle_parkway_dl_20A0, d_course_dks_jungle_parkway_dl_2200, d_course_dks_jungle_parkway_dl_2398,
d_course_dks_jungle_parkway_dl_2328, d_course_dks_jungle_parkway_dl_2480, d_course_dks_jungle_parkway_dl_2558,
d_course_dks_jungle_parkway_dl_2810, d_course_dks_jungle_parkway_dl_2728, d_course_dks_jungle_parkway_dl_2928,
d_course_dks_jungle_parkway_dl_2AC0, d_course_dks_jungle_parkway_dl_2D70, d_course_dks_jungle_parkway_dl_2B88,
d_course_dks_jungle_parkway_dl_2E30, d_course_dks_jungle_parkway_dl_3010, d_course_dks_jungle_parkway_dl_3338,
d_course_dks_jungle_parkway_dl_3100, d_course_dks_jungle_parkway_dl_3498, d_course_dks_jungle_parkway_dl_36A0,
d_course_dks_jungle_parkway_dl_3988, d_course_dks_jungle_parkway_dl_3790, d_course_dks_jungle_parkway_dl_3B28,
d_course_dks_jungle_parkway_dl_3CC8, d_course_dks_jungle_parkway_dl_3F78, d_course_dks_jungle_parkway_dl_3D88,
d_course_dks_jungle_parkway_dl_4100, d_course_dks_jungle_parkway_dl_4250, d_course_dks_jungle_parkway_dl_4470,
d_course_dks_jungle_parkway_dl_42F8, d_course_dks_jungle_parkway_dl_45C0, d_course_dks_jungle_parkway_dl_4658,
d_course_dks_jungle_parkway_dl_4848, d_course_dks_jungle_parkway_dl_4710, d_course_dks_jungle_parkway_dl_4980,
d_course_dks_jungle_parkway_dl_4A38, d_course_dks_jungle_parkway_dl_4C18, d_course_dks_jungle_parkway_dl_4AE8,
d_course_dks_jungle_parkway_dl_4D10, d_course_dks_jungle_parkway_dl_4E10, d_course_dks_jungle_parkway_dl_51B0,
d_course_dks_jungle_parkway_dl_4FB0, d_course_dks_jungle_parkway_dl_53F8, d_course_dks_jungle_parkway_dl_5580,
d_course_dks_jungle_parkway_dl_57A0, d_course_dks_jungle_parkway_dl_5650, d_course_dks_jungle_parkway_dl_5920,
d_course_dks_jungle_parkway_dl_59B8, d_course_dks_jungle_parkway_dl_5B90, d_course_dks_jungle_parkway_dl_5A50,
d_course_dks_jungle_parkway_dl_5CB0, d_course_dks_jungle_parkway_dl_5D70, d_course_dks_jungle_parkway_dl_5EC8,
d_course_dks_jungle_parkway_dl_5DF8, d_course_dks_jungle_parkway_dl_5FA8, d_course_dks_jungle_parkway_dl_6048,
d_course_dks_jungle_parkway_dl_62D0, d_course_dks_jungle_parkway_dl_6178, d_course_dks_jungle_parkway_dl_6468,
d_course_dks_jungle_parkway_dl_6588, d_course_dks_jungle_parkway_dl_6740, d_course_dks_jungle_parkway_dl_6680,
d_course_dks_jungle_parkway_dl_67C0, d_course_dks_jungle_parkway_dl_68D0, d_course_dks_jungle_parkway_dl_6A70,
d_course_dks_jungle_parkway_dl_69C8, d_course_dks_jungle_parkway_dl_6AD8, d_course_dks_jungle_parkway_dl_6BE8,
d_course_dks_jungle_parkway_dl_6CB8, d_course_dks_jungle_parkway_dl_6C70, d_course_dks_jungle_parkway_dl_6D10,
d_course_dks_jungle_parkway_dl_6D88, d_course_dks_jungle_parkway_dl_6E48, d_course_dks_jungle_parkway_dl_6E00,
d_course_dks_jungle_parkway_dl_6EB0, d_course_dks_jungle_parkway_dl_6F10, d_course_dks_jungle_parkway_dl_7080,
d_course_dks_jungle_parkway_dl_7008, d_course_dks_jungle_parkway_dl_7108,
};

View File

@ -2,7 +2,7 @@
#include "course_offsets.h"
const course_texture double_deck_textures[] = {
{gTextureGrayCobblestone, 0x010C, 0x0800, 0x0},
{gTexture642978, 0x010D, 0x0800, 0x0},
{0x00000000, 0x0000, 0x0000, 0x0},
{ gTextureGrayCobblestone, 0x010C, 0x0800, 0x0 },
{ gTexture642978, 0x010D, 0x0800, 0x0 },
{ 0x00000000, 0x0000, 0x0000, 0x0 },
};

View File

@ -3,50 +3,35 @@
#include <assets/frappe_snowland_data.h>
const course_texture frappe_snowland_textures[] = {
{gTexture6684F8, 0x010D, 0x0800, 0x0},
{gTexture66CA98, 0x02C9, 0x0800, 0x0},
{gTexture66EBF0, 0x0146, 0x0800, 0x0},
{gTexture675434, 0x0245, 0x0800, 0x0},
{gTexture677F04, 0x0213, 0x0800, 0x0},
{gTexture678118, 0x0314, 0x0800, 0x0},
{gTexture679258, 0x04E3, 0x1000, 0x0},
{gTexture67973C, 0x04C6, 0x1000, 0x0},
{0x00000000, 0x0000, 0x0000, 0x0},
{ gTexture6684F8, 0x010D, 0x0800, 0x0 }, { gTexture66CA98, 0x02C9, 0x0800, 0x0 },
{ gTexture66EBF0, 0x0146, 0x0800, 0x0 }, { gTexture675434, 0x0245, 0x0800, 0x0 },
{ gTexture677F04, 0x0213, 0x0800, 0x0 }, { gTexture678118, 0x0314, 0x0800, 0x0 },
{ gTexture679258, 0x04E3, 0x1000, 0x0 }, { gTexture67973C, 0x04C6, 0x1000, 0x0 },
{ 0x00000000, 0x0000, 0x0000, 0x0 },
};
const Gfx *frappe_snowland_dls[] = {
d_course_frappe_snowland_dl_0, d_course_frappe_snowland_dl_1B8,
d_course_frappe_snowland_dl_C8, d_course_frappe_snowland_dl_298,
d_course_frappe_snowland_dl_398, d_course_frappe_snowland_dl_540,
d_course_frappe_snowland_dl_458, d_course_frappe_snowland_dl_610,
d_course_frappe_snowland_dl_728, d_course_frappe_snowland_dl_8C0,
d_course_frappe_snowland_dl_7C8, d_course_frappe_snowland_dl_940,
d_course_frappe_snowland_dl_A38, d_course_frappe_snowland_dl_BA8,
d_course_frappe_snowland_dl_AA8, d_course_frappe_snowland_dl_C38,
d_course_frappe_snowland_dl_D28, d_course_frappe_snowland_dl_EC8,
d_course_frappe_snowland_dl_DA8, d_course_frappe_snowland_dl_F90,
d_course_frappe_snowland_dl_1068, d_course_frappe_snowland_dl_1240,
d_course_frappe_snowland_dl_1118, d_course_frappe_snowland_dl_1360,
d_course_frappe_snowland_dl_1430, d_course_frappe_snowland_dl_1610,
d_course_frappe_snowland_dl_14E0, d_course_frappe_snowland_dl_1768,
d_course_frappe_snowland_dl_1818, d_course_frappe_snowland_dl_1A50,
d_course_frappe_snowland_dl_1930, d_course_frappe_snowland_dl_1BC8,
d_course_frappe_snowland_dl_1C80, d_course_frappe_snowland_dl_1E98,
d_course_frappe_snowland_dl_1DE8, d_course_frappe_snowland_dl_2000,
d_course_frappe_snowland_dl_20B0, d_course_frappe_snowland_dl_2308,
d_course_frappe_snowland_dl_2240, d_course_frappe_snowland_dl_2448,
d_course_frappe_snowland_dl_2588, d_course_frappe_snowland_dl_2698,
d_course_frappe_snowland_dl_2618, d_course_frappe_snowland_dl_2700,
d_course_frappe_snowland_dl_2780, d_course_frappe_snowland_dl_2860,
d_course_frappe_snowland_dl_27F8, d_course_frappe_snowland_dl_28A8,
d_course_frappe_snowland_dl_2930, d_course_frappe_snowland_dl_2A40,
d_course_frappe_snowland_dl_29B0, d_course_frappe_snowland_dl_2AB0,
d_course_frappe_snowland_dl_2B48, d_course_frappe_snowland_dl_2C00,
d_course_frappe_snowland_dl_2BA0, d_course_frappe_snowland_dl_2C50,
d_course_frappe_snowland_dl_2CB8, d_course_frappe_snowland_dl_2D78,
d_course_frappe_snowland_dl_2D20, d_course_frappe_snowland_dl_2DD0,
d_course_frappe_snowland_dl_2E40, d_course_frappe_snowland_dl_3000,
d_course_frappe_snowland_dl_2F40, d_course_frappe_snowland_dl_30D0,
d_course_frappe_snowland_dl_3198, d_course_frappe_snowland_dl_3328,
const Gfx* frappe_snowland_dls[] = {
d_course_frappe_snowland_dl_0, d_course_frappe_snowland_dl_1B8, d_course_frappe_snowland_dl_C8,
d_course_frappe_snowland_dl_298, d_course_frappe_snowland_dl_398, d_course_frappe_snowland_dl_540,
d_course_frappe_snowland_dl_458, d_course_frappe_snowland_dl_610, d_course_frappe_snowland_dl_728,
d_course_frappe_snowland_dl_8C0, d_course_frappe_snowland_dl_7C8, d_course_frappe_snowland_dl_940,
d_course_frappe_snowland_dl_A38, d_course_frappe_snowland_dl_BA8, d_course_frappe_snowland_dl_AA8,
d_course_frappe_snowland_dl_C38, d_course_frappe_snowland_dl_D28, d_course_frappe_snowland_dl_EC8,
d_course_frappe_snowland_dl_DA8, d_course_frappe_snowland_dl_F90, d_course_frappe_snowland_dl_1068,
d_course_frappe_snowland_dl_1240, d_course_frappe_snowland_dl_1118, d_course_frappe_snowland_dl_1360,
d_course_frappe_snowland_dl_1430, d_course_frappe_snowland_dl_1610, d_course_frappe_snowland_dl_14E0,
d_course_frappe_snowland_dl_1768, d_course_frappe_snowland_dl_1818, d_course_frappe_snowland_dl_1A50,
d_course_frappe_snowland_dl_1930, d_course_frappe_snowland_dl_1BC8, d_course_frappe_snowland_dl_1C80,
d_course_frappe_snowland_dl_1E98, d_course_frappe_snowland_dl_1DE8, d_course_frappe_snowland_dl_2000,
d_course_frappe_snowland_dl_20B0, d_course_frappe_snowland_dl_2308, d_course_frappe_snowland_dl_2240,
d_course_frappe_snowland_dl_2448, d_course_frappe_snowland_dl_2588, d_course_frappe_snowland_dl_2698,
d_course_frappe_snowland_dl_2618, d_course_frappe_snowland_dl_2700, d_course_frappe_snowland_dl_2780,
d_course_frappe_snowland_dl_2860, d_course_frappe_snowland_dl_27F8, d_course_frappe_snowland_dl_28A8,
d_course_frappe_snowland_dl_2930, d_course_frappe_snowland_dl_2A40, d_course_frappe_snowland_dl_29B0,
d_course_frappe_snowland_dl_2AB0, d_course_frappe_snowland_dl_2B48, d_course_frappe_snowland_dl_2C00,
d_course_frappe_snowland_dl_2BA0, d_course_frappe_snowland_dl_2C50, d_course_frappe_snowland_dl_2CB8,
d_course_frappe_snowland_dl_2D78, d_course_frappe_snowland_dl_2D20, d_course_frappe_snowland_dl_2DD0,
d_course_frappe_snowland_dl_2E40, d_course_frappe_snowland_dl_3000, d_course_frappe_snowland_dl_2F40,
d_course_frappe_snowland_dl_30D0, d_course_frappe_snowland_dl_3198, d_course_frappe_snowland_dl_3328,
d_course_frappe_snowland_dl_3270, d_course_frappe_snowland_dl_33E0,
};
};

View File

@ -3,113 +3,47 @@
#include <assets/kalimari_desert_data.h>
const course_texture kalimari_desert_textures[] = {
{gTexture6684F8, 0x010D, 0x0800, 0x0},
{gTextureSignLuigis0, 0x0287, 0x1000, 0x0},
{gTextureSignLuigis1, 0x02AF, 0x1000, 0x0},
{gTextureSignMarioStar0, 0x02D2, 0x1000, 0x0},
{gTextureSignMarioStar1, 0x02B1, 0x1000, 0x0},
{gTextureSignNintendoRed0, 0x02A6, 0x1000, 0x0},
{gTextureSignNintendoRed1, 0x02F7, 0x1000, 0x0},
{gTexture67490C, 0x021C, 0x0800, 0x0},
{gTextureSignYoshi, 0x04DF, 0x1000, 0x0},
{gTextureCheckerboardBlueGray, 0x04A1, 0x1000, 0x0},
{gTexture646CA8, 0x073A, 0x1000, 0x0},
{gTexture6473E4, 0x05AD, 0x1000, 0x0},
{gTexture647994, 0x05B5, 0x1000, 0x0},
{gTexture668920, 0x03D9, 0x0800, 0x0},
{gTextureRailroadTrack, 0x0B5B, 0x1000, 0x0},
{gTextureRailroadCrossingTrack, 0x0208, 0x1000, 0x0},
{gTexture67291C, 0x059C, 0x0800, 0x0},
{gTextureFenceBarbedWire, 0x021E, 0x1000, 0x0},
{gTexture67D304, 0x091C, 0x1000, 0x0},
{gTexture67E010, 0x0415, 0x0800, 0x0},
{gTexture67EEAC, 0x0140, 0x0800, 0x0},
{gTextureSignShellShot0, 0x038C, 0x1000, 0x0},
{gTextureSignShellShot1, 0x0247, 0x1000, 0x0},
{gTextureSignKoopaAir0, 0x0360, 0x1000, 0x0},
{gTextureSignKoopaAir1, 0x0304, 0x1000, 0x0},
{0x00000000, 0x0000, 0x0000, 0x0},
{ gTexture6684F8, 0x010D, 0x0800, 0x0 }, { gTextureSignLuigis0, 0x0287, 0x1000, 0x0 },
{ gTextureSignLuigis1, 0x02AF, 0x1000, 0x0 }, { gTextureSignMarioStar0, 0x02D2, 0x1000, 0x0 },
{ gTextureSignMarioStar1, 0x02B1, 0x1000, 0x0 }, { gTextureSignNintendoRed0, 0x02A6, 0x1000, 0x0 },
{ gTextureSignNintendoRed1, 0x02F7, 0x1000, 0x0 }, { gTexture67490C, 0x021C, 0x0800, 0x0 },
{ gTextureSignYoshi, 0x04DF, 0x1000, 0x0 }, { gTextureCheckerboardBlueGray, 0x04A1, 0x1000, 0x0 },
{ gTexture646CA8, 0x073A, 0x1000, 0x0 }, { gTexture6473E4, 0x05AD, 0x1000, 0x0 },
{ gTexture647994, 0x05B5, 0x1000, 0x0 }, { gTexture668920, 0x03D9, 0x0800, 0x0 },
{ gTextureRailroadTrack, 0x0B5B, 0x1000, 0x0 }, { gTextureRailroadCrossingTrack, 0x0208, 0x1000, 0x0 },
{ gTexture67291C, 0x059C, 0x0800, 0x0 }, { gTextureFenceBarbedWire, 0x021E, 0x1000, 0x0 },
{ gTexture67D304, 0x091C, 0x1000, 0x0 }, { gTexture67E010, 0x0415, 0x0800, 0x0 },
{ gTexture67EEAC, 0x0140, 0x0800, 0x0 }, { gTextureSignShellShot0, 0x038C, 0x1000, 0x0 },
{ gTextureSignShellShot1, 0x0247, 0x1000, 0x0 }, { gTextureSignKoopaAir0, 0x0360, 0x1000, 0x0 },
{ gTextureSignKoopaAir1, 0x0304, 0x1000, 0x0 }, { 0x00000000, 0x0000, 0x0000, 0x0 },
};
const Gfx *kalimari_desert_dls[] = {
d_course_kalimari_desert_dl_0,
d_course_kalimari_desert_dl_258,
d_course_kalimari_desert_dl_100,
d_course_kalimari_desert_dl_310,
d_course_kalimari_desert_dl_4A0,
d_course_kalimari_desert_dl_778,
d_course_kalimari_desert_dl_5C0,
d_course_kalimari_desert_dl_858,
d_course_kalimari_desert_dl_A58,
d_course_kalimari_desert_dl_CD0,
d_course_kalimari_desert_dl_B38,
d_course_kalimari_desert_dl_DD0,
d_course_kalimari_desert_dl_F68,
d_course_kalimari_desert_dl_1258,
d_course_kalimari_desert_dl_1030,
d_course_kalimari_desert_dl_1350,
d_course_kalimari_desert_dl_14C0,
d_course_kalimari_desert_dl_17C8,
d_course_kalimari_desert_dl_1588,
d_course_kalimari_desert_dl_18C8,
d_course_kalimari_desert_dl_1A58,
d_course_kalimari_desert_dl_1D48,
d_course_kalimari_desert_dl_1B38,
d_course_kalimari_desert_dl_1E80,
d_course_kalimari_desert_dl_2000,
d_course_kalimari_desert_dl_22D8,
d_course_kalimari_desert_dl_20E0,
d_course_kalimari_desert_dl_2458,
d_course_kalimari_desert_dl_25D0,
d_course_kalimari_desert_dl_2868,
d_course_kalimari_desert_dl_26E8,
d_course_kalimari_desert_dl_29C0,
d_course_kalimari_desert_dl_2B40,
d_course_kalimari_desert_dl_2DE8,
d_course_kalimari_desert_dl_2C88,
d_course_kalimari_desert_dl_2F30,
d_course_kalimari_desert_dl_3068,
d_course_kalimari_desert_dl_32F8,
d_course_kalimari_desert_dl_31C0,
d_course_kalimari_desert_dl_3460,
d_course_kalimari_desert_dl_3590,
d_course_kalimari_desert_dl_3818,
d_course_kalimari_desert_dl_3718,
d_course_kalimari_desert_dl_3998,
d_course_kalimari_desert_dl_3AC0,
d_course_kalimari_desert_dl_3DB8,
d_course_kalimari_desert_dl_3CA0,
d_course_kalimari_desert_dl_3FB0,
d_course_kalimari_desert_dl_40A8,
d_course_kalimari_desert_dl_4358,
d_course_kalimari_desert_dl_4280,
d_course_kalimari_desert_dl_4538,
d_course_kalimari_desert_dl_4630,
d_course_kalimari_desert_dl_49E0,
d_course_kalimari_desert_dl_4908,
d_course_kalimari_desert_dl_4BA0,
d_course_kalimari_desert_dl_4CF0,
d_course_kalimari_desert_dl_4FB0,
d_course_kalimari_desert_dl_4EF8,
d_course_kalimari_desert_dl_5100,
d_course_kalimari_desert_dl_5208,
d_course_kalimari_desert_dl_5470,
d_course_kalimari_desert_dl_53A0,
d_course_kalimari_desert_dl_55C8,
d_course_kalimari_desert_dl_5730,
d_course_kalimari_desert_dl_5978,
d_course_kalimari_desert_dl_5898,
d_course_kalimari_desert_dl_5AD0,
d_course_kalimari_desert_dl_5BE8,
d_course_kalimari_desert_dl_5DF8,
d_course_kalimari_desert_dl_5D20,
d_course_kalimari_desert_dl_5F20,
d_course_kalimari_desert_dl_6028,
d_course_kalimari_desert_dl_62F8,
d_course_kalimari_desert_dl_61B0,
d_course_kalimari_desert_dl_63E0,
d_course_kalimari_desert_dl_65B0,
d_course_kalimari_desert_dl_6838,
d_course_kalimari_desert_dl_66F0,
d_course_kalimari_desert_dl_6940,
const Gfx* kalimari_desert_dls[] = {
d_course_kalimari_desert_dl_0, d_course_kalimari_desert_dl_258, d_course_kalimari_desert_dl_100,
d_course_kalimari_desert_dl_310, d_course_kalimari_desert_dl_4A0, d_course_kalimari_desert_dl_778,
d_course_kalimari_desert_dl_5C0, d_course_kalimari_desert_dl_858, d_course_kalimari_desert_dl_A58,
d_course_kalimari_desert_dl_CD0, d_course_kalimari_desert_dl_B38, d_course_kalimari_desert_dl_DD0,
d_course_kalimari_desert_dl_F68, d_course_kalimari_desert_dl_1258, d_course_kalimari_desert_dl_1030,
d_course_kalimari_desert_dl_1350, d_course_kalimari_desert_dl_14C0, d_course_kalimari_desert_dl_17C8,
d_course_kalimari_desert_dl_1588, d_course_kalimari_desert_dl_18C8, d_course_kalimari_desert_dl_1A58,
d_course_kalimari_desert_dl_1D48, d_course_kalimari_desert_dl_1B38, d_course_kalimari_desert_dl_1E80,
d_course_kalimari_desert_dl_2000, d_course_kalimari_desert_dl_22D8, d_course_kalimari_desert_dl_20E0,
d_course_kalimari_desert_dl_2458, d_course_kalimari_desert_dl_25D0, d_course_kalimari_desert_dl_2868,
d_course_kalimari_desert_dl_26E8, d_course_kalimari_desert_dl_29C0, d_course_kalimari_desert_dl_2B40,
d_course_kalimari_desert_dl_2DE8, d_course_kalimari_desert_dl_2C88, d_course_kalimari_desert_dl_2F30,
d_course_kalimari_desert_dl_3068, d_course_kalimari_desert_dl_32F8, d_course_kalimari_desert_dl_31C0,
d_course_kalimari_desert_dl_3460, d_course_kalimari_desert_dl_3590, d_course_kalimari_desert_dl_3818,
d_course_kalimari_desert_dl_3718, d_course_kalimari_desert_dl_3998, d_course_kalimari_desert_dl_3AC0,
d_course_kalimari_desert_dl_3DB8, d_course_kalimari_desert_dl_3CA0, d_course_kalimari_desert_dl_3FB0,
d_course_kalimari_desert_dl_40A8, d_course_kalimari_desert_dl_4358, d_course_kalimari_desert_dl_4280,
d_course_kalimari_desert_dl_4538, d_course_kalimari_desert_dl_4630, d_course_kalimari_desert_dl_49E0,
d_course_kalimari_desert_dl_4908, d_course_kalimari_desert_dl_4BA0, d_course_kalimari_desert_dl_4CF0,
d_course_kalimari_desert_dl_4FB0, d_course_kalimari_desert_dl_4EF8, d_course_kalimari_desert_dl_5100,
d_course_kalimari_desert_dl_5208, d_course_kalimari_desert_dl_5470, d_course_kalimari_desert_dl_53A0,
d_course_kalimari_desert_dl_55C8, d_course_kalimari_desert_dl_5730, d_course_kalimari_desert_dl_5978,
d_course_kalimari_desert_dl_5898, d_course_kalimari_desert_dl_5AD0, d_course_kalimari_desert_dl_5BE8,
d_course_kalimari_desert_dl_5DF8, d_course_kalimari_desert_dl_5D20, d_course_kalimari_desert_dl_5F20,
d_course_kalimari_desert_dl_6028, d_course_kalimari_desert_dl_62F8, d_course_kalimari_desert_dl_61B0,
d_course_kalimari_desert_dl_63E0, d_course_kalimari_desert_dl_65B0, d_course_kalimari_desert_dl_6838,
d_course_kalimari_desert_dl_66F0, d_course_kalimari_desert_dl_6940,
};

View File

@ -3,177 +3,129 @@
#include <assets/koopa_troopa_beach_data.h>
const course_texture koopa_troopa_beach_textures[] = {
{gTexture643B3C, 0x0798, 0x0800, 0x0},
{gTexture66A3DC, 0x07C5, 0x0800, 0x0},
{gTextureSignWoodRedArrow, 0x04E1, 0x1000, 0x0},
{gTexture66DD38, 0x0330, 0x1000, 0x0},
{gTexture643430, 0x0604, 0x0800, 0x0},
{gTexture660D8C, 0x0126, 0x0800, 0x0},
{gTexture6609D0, 0x03BB, 0x1000, 0x0},
{gTextureGrass12, 0x0874, 0x0800, 0x0},
{gTexture66CA98, 0x02C9, 0x0800, 0x0},
{gTexture66EBF0, 0x0146, 0x0800, 0x0},
{gTexture67BEE8, 0x02D0, 0x0800, 0x0},
{gTextureSandFinish, 0x022E, 0x0800, 0x0},
{gTextureWheelSteamEngine, 0x020F, 0x0800, 0x0},
{gTexture669570, 0x0E6B, 0x1000, 0x0},
{gTextureWaves1, 0x05C4, 0x0800, 0x0},
{gTextureWaves2, 0x0488, 0x0800, 0x0},
{0x00000000, 0x0000, 0x0000, 0x0},
{ gTexture643B3C, 0x0798, 0x0800, 0x0 },
{ gTexture66A3DC, 0x07C5, 0x0800, 0x0 },
{ gTextureSignWoodRedArrow, 0x04E1, 0x1000, 0x0 },
{ gTexture66DD38, 0x0330, 0x1000, 0x0 },
{ gTexture643430, 0x0604, 0x0800, 0x0 },
{ gTexture660D8C, 0x0126, 0x0800, 0x0 },
{ gTexture6609D0, 0x03BB, 0x1000, 0x0 },
{ gTextureGrass12, 0x0874, 0x0800, 0x0 },
{ gTexture66CA98, 0x02C9, 0x0800, 0x0 },
{ gTexture66EBF0, 0x0146, 0x0800, 0x0 },
{ gTexture67BEE8, 0x02D0, 0x0800, 0x0 },
{ gTextureSandFinish, 0x022E, 0x0800, 0x0 },
{ gTextureWheelSteamEngine, 0x020F, 0x0800, 0x0 },
{ gTexture669570, 0x0E6B, 0x1000, 0x0 },
{ gTextureWaves1, 0x05C4, 0x0800, 0x0 },
{ gTextureWaves2, 0x0488, 0x0800, 0x0 },
{ 0x00000000, 0x0000, 0x0000, 0x0 },
};
Gfx *koopa_troopa_beach_dls1[] = {
d_course_koopa_troopa_beach_dl_90, d_course_koopa_troopa_beach_dl_278,
d_course_koopa_troopa_beach_dl_188, d_course_koopa_troopa_beach_dl_3C0,
d_course_koopa_troopa_beach_dl_4B0, d_course_koopa_troopa_beach_dl_6E0,
d_course_koopa_troopa_beach_dl_5A0, d_course_koopa_troopa_beach_dl_828,
d_course_koopa_troopa_beach_dl_960, d_course_koopa_troopa_beach_dl_B98,
d_course_koopa_troopa_beach_dl_A58, d_course_koopa_troopa_beach_dl_CF0,
d_course_koopa_troopa_beach_dl_E48, d_course_koopa_troopa_beach_dl_10D0,
d_course_koopa_troopa_beach_dl_F60, d_course_koopa_troopa_beach_dl_1218,
d_course_koopa_troopa_beach_dl_13B8, d_course_koopa_troopa_beach_dl_15E0,
d_course_koopa_troopa_beach_dl_1498, d_course_koopa_troopa_beach_dl_1708,
d_course_koopa_troopa_beach_dl_1818, d_course_koopa_troopa_beach_dl_1988,
d_course_koopa_troopa_beach_dl_18E0, d_course_koopa_troopa_beach_dl_1A50,
d_course_koopa_troopa_beach_dl_1AD8, d_course_koopa_troopa_beach_dl_1C48,
d_course_koopa_troopa_beach_dl_1BB8, d_course_koopa_troopa_beach_dl_1D20,
d_course_koopa_troopa_beach_dl_1DE0, d_course_koopa_troopa_beach_dl_1FE8,
d_course_koopa_troopa_beach_dl_1EB0, d_course_koopa_troopa_beach_dl_20C8,
d_course_koopa_troopa_beach_dl_2200, d_course_koopa_troopa_beach_dl_2440,
d_course_koopa_troopa_beach_dl_22C8, d_course_koopa_troopa_beach_dl_2540,
d_course_koopa_troopa_beach_dl_2660, d_course_koopa_troopa_beach_dl_2898,
d_course_koopa_troopa_beach_dl_2760, d_course_koopa_troopa_beach_dl_2988,
d_course_koopa_troopa_beach_dl_2AA0, d_course_koopa_troopa_beach_dl_2CC0,
d_course_koopa_troopa_beach_dl_2B78, d_course_koopa_troopa_beach_dl_2DC0,
d_course_koopa_troopa_beach_dl_2EC0, d_course_koopa_troopa_beach_dl_30E0,
d_course_koopa_troopa_beach_dl_2FB0, d_course_koopa_troopa_beach_dl_3218,
d_course_koopa_troopa_beach_dl_3308, d_course_koopa_troopa_beach_dl_3550,
d_course_koopa_troopa_beach_dl_33F8, d_course_koopa_troopa_beach_dl_36D8,
d_course_koopa_troopa_beach_dl_37B8, d_course_koopa_troopa_beach_dl_3A10,
d_course_koopa_troopa_beach_dl_38A8, d_course_koopa_troopa_beach_dl_3BB8,
d_course_koopa_troopa_beach_dl_3CC0, d_course_koopa_troopa_beach_dl_3F20,
d_course_koopa_troopa_beach_dl_3DC0, d_course_koopa_troopa_beach_dl_40C0,
d_course_koopa_troopa_beach_dl_41D0, d_course_koopa_troopa_beach_dl_4450,
d_course_koopa_troopa_beach_dl_42D8, d_course_koopa_troopa_beach_dl_45D0,
d_course_koopa_troopa_beach_dl_4700, d_course_koopa_troopa_beach_dl_49F0,
d_course_koopa_troopa_beach_dl_4840, d_course_koopa_troopa_beach_dl_4BC8,
d_course_koopa_troopa_beach_dl_4D08, d_course_koopa_troopa_beach_dl_4FF8,
d_course_koopa_troopa_beach_dl_4E70, d_course_koopa_troopa_beach_dl_51C8,
d_course_koopa_troopa_beach_dl_52D8, d_course_koopa_troopa_beach_dl_5500,
d_course_koopa_troopa_beach_dl_53B8, d_course_koopa_troopa_beach_dl_5628,
d_course_koopa_troopa_beach_dl_5778, d_course_koopa_troopa_beach_dl_5A50,
d_course_koopa_troopa_beach_dl_58E0, d_course_koopa_troopa_beach_dl_5BB8,
d_course_koopa_troopa_beach_dl_5D28, d_course_koopa_troopa_beach_dl_5F58,
d_course_koopa_troopa_beach_dl_5E28, d_course_koopa_troopa_beach_dl_6050,
d_course_koopa_troopa_beach_dl_61D0, d_course_koopa_troopa_beach_dl_6410,
d_course_koopa_troopa_beach_dl_62F8, d_course_koopa_troopa_beach_dl_64F0,
d_course_koopa_troopa_beach_dl_6660, d_course_koopa_troopa_beach_dl_6898,
d_course_koopa_troopa_beach_dl_67A0, d_course_koopa_troopa_beach_dl_6968,
d_course_koopa_troopa_beach_dl_6AC0, d_course_koopa_troopa_beach_dl_6D10,
d_course_koopa_troopa_beach_dl_6C18, d_course_koopa_troopa_beach_dl_6E18,
d_course_koopa_troopa_beach_dl_6F70, d_course_koopa_troopa_beach_dl_71C8,
d_course_koopa_troopa_beach_dl_7100, d_course_koopa_troopa_beach_dl_7338,
d_course_koopa_troopa_beach_dl_7478, d_course_koopa_troopa_beach_dl_7718,
d_course_koopa_troopa_beach_dl_7640, d_course_koopa_troopa_beach_dl_78E8,
d_course_koopa_troopa_beach_dl_79E8, d_course_koopa_troopa_beach_dl_7C08,
d_course_koopa_troopa_beach_dl_7B50, d_course_koopa_troopa_beach_dl_7D58,
d_course_koopa_troopa_beach_dl_7E38, d_course_koopa_troopa_beach_dl_8048,
d_course_koopa_troopa_beach_dl_7F68, d_course_koopa_troopa_beach_dl_8150,
d_course_koopa_troopa_beach_dl_8228, d_course_koopa_troopa_beach_dl_8448,
d_course_koopa_troopa_beach_dl_8368, d_course_koopa_troopa_beach_dl_8550,
d_course_koopa_troopa_beach_dl_8650, d_course_koopa_troopa_beach_dl_8878,
d_course_koopa_troopa_beach_dl_8790, d_course_koopa_troopa_beach_dl_8958,
d_course_koopa_troopa_beach_dl_8A98, d_course_koopa_troopa_beach_dl_8D48,
d_course_koopa_troopa_beach_dl_8C48, d_course_koopa_troopa_beach_dl_8E30,
d_course_koopa_troopa_beach_dl_9008, d_course_koopa_troopa_beach_dl_9288,
d_course_koopa_troopa_beach_dl_9188, d_course_koopa_troopa_beach_dl_9378,
d_course_koopa_troopa_beach_dl_9548, d_course_koopa_troopa_beach_dl_9798,
d_course_koopa_troopa_beach_dl_96A0, d_course_koopa_troopa_beach_dl_98A0,
d_course_koopa_troopa_beach_dl_9A30, d_course_koopa_troopa_beach_dl_9C38,
d_course_koopa_troopa_beach_dl_9B58, d_course_koopa_troopa_beach_dl_9D98,
d_course_koopa_troopa_beach_dl_9ED8, d_course_koopa_troopa_beach_dl_A0D0,
d_course_koopa_troopa_beach_dl_9FE8, d_course_koopa_troopa_beach_dl_A220,
d_course_koopa_troopa_beach_dl_A340, d_course_koopa_troopa_beach_dl_A608,
d_course_koopa_troopa_beach_dl_A4D8, d_course_koopa_troopa_beach_dl_A780,
d_course_koopa_troopa_beach_dl_A8D0, d_course_koopa_troopa_beach_dl_AB88,
d_course_koopa_troopa_beach_dl_AA38, d_course_koopa_troopa_beach_dl_AC68,
Gfx* koopa_troopa_beach_dls1[] = {
d_course_koopa_troopa_beach_dl_90, d_course_koopa_troopa_beach_dl_278, d_course_koopa_troopa_beach_dl_188,
d_course_koopa_troopa_beach_dl_3C0, d_course_koopa_troopa_beach_dl_4B0, d_course_koopa_troopa_beach_dl_6E0,
d_course_koopa_troopa_beach_dl_5A0, d_course_koopa_troopa_beach_dl_828, d_course_koopa_troopa_beach_dl_960,
d_course_koopa_troopa_beach_dl_B98, d_course_koopa_troopa_beach_dl_A58, d_course_koopa_troopa_beach_dl_CF0,
d_course_koopa_troopa_beach_dl_E48, d_course_koopa_troopa_beach_dl_10D0, d_course_koopa_troopa_beach_dl_F60,
d_course_koopa_troopa_beach_dl_1218, d_course_koopa_troopa_beach_dl_13B8, d_course_koopa_troopa_beach_dl_15E0,
d_course_koopa_troopa_beach_dl_1498, d_course_koopa_troopa_beach_dl_1708, d_course_koopa_troopa_beach_dl_1818,
d_course_koopa_troopa_beach_dl_1988, d_course_koopa_troopa_beach_dl_18E0, d_course_koopa_troopa_beach_dl_1A50,
d_course_koopa_troopa_beach_dl_1AD8, d_course_koopa_troopa_beach_dl_1C48, d_course_koopa_troopa_beach_dl_1BB8,
d_course_koopa_troopa_beach_dl_1D20, d_course_koopa_troopa_beach_dl_1DE0, d_course_koopa_troopa_beach_dl_1FE8,
d_course_koopa_troopa_beach_dl_1EB0, d_course_koopa_troopa_beach_dl_20C8, d_course_koopa_troopa_beach_dl_2200,
d_course_koopa_troopa_beach_dl_2440, d_course_koopa_troopa_beach_dl_22C8, d_course_koopa_troopa_beach_dl_2540,
d_course_koopa_troopa_beach_dl_2660, d_course_koopa_troopa_beach_dl_2898, d_course_koopa_troopa_beach_dl_2760,
d_course_koopa_troopa_beach_dl_2988, d_course_koopa_troopa_beach_dl_2AA0, d_course_koopa_troopa_beach_dl_2CC0,
d_course_koopa_troopa_beach_dl_2B78, d_course_koopa_troopa_beach_dl_2DC0, d_course_koopa_troopa_beach_dl_2EC0,
d_course_koopa_troopa_beach_dl_30E0, d_course_koopa_troopa_beach_dl_2FB0, d_course_koopa_troopa_beach_dl_3218,
d_course_koopa_troopa_beach_dl_3308, d_course_koopa_troopa_beach_dl_3550, d_course_koopa_troopa_beach_dl_33F8,
d_course_koopa_troopa_beach_dl_36D8, d_course_koopa_troopa_beach_dl_37B8, d_course_koopa_troopa_beach_dl_3A10,
d_course_koopa_troopa_beach_dl_38A8, d_course_koopa_troopa_beach_dl_3BB8, d_course_koopa_troopa_beach_dl_3CC0,
d_course_koopa_troopa_beach_dl_3F20, d_course_koopa_troopa_beach_dl_3DC0, d_course_koopa_troopa_beach_dl_40C0,
d_course_koopa_troopa_beach_dl_41D0, d_course_koopa_troopa_beach_dl_4450, d_course_koopa_troopa_beach_dl_42D8,
d_course_koopa_troopa_beach_dl_45D0, d_course_koopa_troopa_beach_dl_4700, d_course_koopa_troopa_beach_dl_49F0,
d_course_koopa_troopa_beach_dl_4840, d_course_koopa_troopa_beach_dl_4BC8, d_course_koopa_troopa_beach_dl_4D08,
d_course_koopa_troopa_beach_dl_4FF8, d_course_koopa_troopa_beach_dl_4E70, d_course_koopa_troopa_beach_dl_51C8,
d_course_koopa_troopa_beach_dl_52D8, d_course_koopa_troopa_beach_dl_5500, d_course_koopa_troopa_beach_dl_53B8,
d_course_koopa_troopa_beach_dl_5628, d_course_koopa_troopa_beach_dl_5778, d_course_koopa_troopa_beach_dl_5A50,
d_course_koopa_troopa_beach_dl_58E0, d_course_koopa_troopa_beach_dl_5BB8, d_course_koopa_troopa_beach_dl_5D28,
d_course_koopa_troopa_beach_dl_5F58, d_course_koopa_troopa_beach_dl_5E28, d_course_koopa_troopa_beach_dl_6050,
d_course_koopa_troopa_beach_dl_61D0, d_course_koopa_troopa_beach_dl_6410, d_course_koopa_troopa_beach_dl_62F8,
d_course_koopa_troopa_beach_dl_64F0, d_course_koopa_troopa_beach_dl_6660, d_course_koopa_troopa_beach_dl_6898,
d_course_koopa_troopa_beach_dl_67A0, d_course_koopa_troopa_beach_dl_6968, d_course_koopa_troopa_beach_dl_6AC0,
d_course_koopa_troopa_beach_dl_6D10, d_course_koopa_troopa_beach_dl_6C18, d_course_koopa_troopa_beach_dl_6E18,
d_course_koopa_troopa_beach_dl_6F70, d_course_koopa_troopa_beach_dl_71C8, d_course_koopa_troopa_beach_dl_7100,
d_course_koopa_troopa_beach_dl_7338, d_course_koopa_troopa_beach_dl_7478, d_course_koopa_troopa_beach_dl_7718,
d_course_koopa_troopa_beach_dl_7640, d_course_koopa_troopa_beach_dl_78E8, d_course_koopa_troopa_beach_dl_79E8,
d_course_koopa_troopa_beach_dl_7C08, d_course_koopa_troopa_beach_dl_7B50, d_course_koopa_troopa_beach_dl_7D58,
d_course_koopa_troopa_beach_dl_7E38, d_course_koopa_troopa_beach_dl_8048, d_course_koopa_troopa_beach_dl_7F68,
d_course_koopa_troopa_beach_dl_8150, d_course_koopa_troopa_beach_dl_8228, d_course_koopa_troopa_beach_dl_8448,
d_course_koopa_troopa_beach_dl_8368, d_course_koopa_troopa_beach_dl_8550, d_course_koopa_troopa_beach_dl_8650,
d_course_koopa_troopa_beach_dl_8878, d_course_koopa_troopa_beach_dl_8790, d_course_koopa_troopa_beach_dl_8958,
d_course_koopa_troopa_beach_dl_8A98, d_course_koopa_troopa_beach_dl_8D48, d_course_koopa_troopa_beach_dl_8C48,
d_course_koopa_troopa_beach_dl_8E30, d_course_koopa_troopa_beach_dl_9008, d_course_koopa_troopa_beach_dl_9288,
d_course_koopa_troopa_beach_dl_9188, d_course_koopa_troopa_beach_dl_9378, d_course_koopa_troopa_beach_dl_9548,
d_course_koopa_troopa_beach_dl_9798, d_course_koopa_troopa_beach_dl_96A0, d_course_koopa_troopa_beach_dl_98A0,
d_course_koopa_troopa_beach_dl_9A30, d_course_koopa_troopa_beach_dl_9C38, d_course_koopa_troopa_beach_dl_9B58,
d_course_koopa_troopa_beach_dl_9D98, d_course_koopa_troopa_beach_dl_9ED8, d_course_koopa_troopa_beach_dl_A0D0,
d_course_koopa_troopa_beach_dl_9FE8, d_course_koopa_troopa_beach_dl_A220, d_course_koopa_troopa_beach_dl_A340,
d_course_koopa_troopa_beach_dl_A608, d_course_koopa_troopa_beach_dl_A4D8, d_course_koopa_troopa_beach_dl_A780,
d_course_koopa_troopa_beach_dl_A8D0, d_course_koopa_troopa_beach_dl_AB88, d_course_koopa_troopa_beach_dl_AA38,
d_course_koopa_troopa_beach_dl_AC68,
};
Gfx *koopa_troopa_beach_dls2[] = {
d_course_koopa_troopa_beach_dl_118, d_course_koopa_troopa_beach_dl_328,
d_course_koopa_troopa_beach_dl_218, d_course_koopa_troopa_beach_dl_458,
d_course_koopa_troopa_beach_dl_530, d_course_koopa_troopa_beach_dl_790,
d_course_koopa_troopa_beach_dl_658, d_course_koopa_troopa_beach_dl_8F0,
d_course_koopa_troopa_beach_dl_9E0, d_course_koopa_troopa_beach_dl_C50,
d_course_koopa_troopa_beach_dl_B10, d_course_koopa_troopa_beach_dl_DB8,
d_course_koopa_troopa_beach_dl_EE0, d_course_koopa_troopa_beach_dl_1178,
d_course_koopa_troopa_beach_dl_1040, d_course_koopa_troopa_beach_dl_1310,
d_course_koopa_troopa_beach_dl_1430, d_course_koopa_troopa_beach_dl_1680,
d_course_koopa_troopa_beach_dl_1558, d_course_koopa_troopa_beach_dl_17B0,
d_course_koopa_troopa_beach_dl_1878, d_course_koopa_troopa_beach_dl_19E8,
d_course_koopa_troopa_beach_dl_1940, d_course_koopa_troopa_beach_dl_1AA8,
d_course_koopa_troopa_beach_dl_1B50, d_course_koopa_troopa_beach_dl_1CB0,
d_course_koopa_troopa_beach_dl_1C00, d_course_koopa_troopa_beach_dl_1D88,
d_course_koopa_troopa_beach_dl_1E40, d_course_koopa_troopa_beach_dl_2058,
d_course_koopa_troopa_beach_dl_1F68, d_course_koopa_troopa_beach_dl_2178,
d_course_koopa_troopa_beach_dl_2258, d_course_koopa_troopa_beach_dl_24C0,
d_course_koopa_troopa_beach_dl_2390, d_course_koopa_troopa_beach_dl_25D8,
d_course_koopa_troopa_beach_dl_26E0, d_course_koopa_troopa_beach_dl_2910,
d_course_koopa_troopa_beach_dl_2800, d_course_koopa_troopa_beach_dl_2A18,
d_course_koopa_troopa_beach_dl_2B08, d_course_koopa_troopa_beach_dl_2D50,
d_course_koopa_troopa_beach_dl_2C28, d_course_koopa_troopa_beach_dl_2E38,
d_course_koopa_troopa_beach_dl_2F30, d_course_koopa_troopa_beach_dl_3198,
d_course_koopa_troopa_beach_dl_3050, d_course_koopa_troopa_beach_dl_3278,
d_course_koopa_troopa_beach_dl_3370, d_course_koopa_troopa_beach_dl_3628,
d_course_koopa_troopa_beach_dl_34B8, d_course_koopa_troopa_beach_dl_3730,
d_course_koopa_troopa_beach_dl_3830, d_course_koopa_troopa_beach_dl_3B10,
d_course_koopa_troopa_beach_dl_3980, d_course_koopa_troopa_beach_dl_3C28,
d_course_koopa_troopa_beach_dl_3D40, d_course_koopa_troopa_beach_dl_4028,
d_course_koopa_troopa_beach_dl_3EA8, d_course_koopa_troopa_beach_dl_4138,
d_course_koopa_troopa_beach_dl_4260, d_course_koopa_troopa_beach_dl_4548,
d_course_koopa_troopa_beach_dl_43C0, d_course_koopa_troopa_beach_dl_4670,
d_course_koopa_troopa_beach_dl_47C0, d_course_koopa_troopa_beach_dl_4B28,
d_course_koopa_troopa_beach_dl_4948, d_course_koopa_troopa_beach_dl_4C70,
d_course_koopa_troopa_beach_dl_4DC0, d_course_koopa_troopa_beach_dl_5120,
d_course_koopa_troopa_beach_dl_4F58, d_course_koopa_troopa_beach_dl_5248,
d_course_koopa_troopa_beach_dl_5358, d_course_koopa_troopa_beach_dl_55D0,
d_course_koopa_troopa_beach_dl_5480, d_course_koopa_troopa_beach_dl_56D0,
d_course_koopa_troopa_beach_dl_5840, d_course_koopa_troopa_beach_dl_5B48,
d_course_koopa_troopa_beach_dl_59C8, d_course_koopa_troopa_beach_dl_5C88,
d_course_koopa_troopa_beach_dl_5DB8, d_course_koopa_troopa_beach_dl_6000,
d_course_koopa_troopa_beach_dl_5EE0, d_course_koopa_troopa_beach_dl_6128,
d_course_koopa_troopa_beach_dl_6268, d_course_koopa_troopa_beach_dl_6498,
d_course_koopa_troopa_beach_dl_6398, d_course_koopa_troopa_beach_dl_65B8,
d_course_koopa_troopa_beach_dl_6718, d_course_koopa_troopa_beach_dl_6918,
d_course_koopa_troopa_beach_dl_6830, d_course_koopa_troopa_beach_dl_6A28,
d_course_koopa_troopa_beach_dl_6B88, d_course_koopa_troopa_beach_dl_6DB8,
d_course_koopa_troopa_beach_dl_6CA0, d_course_koopa_troopa_beach_dl_6ED0,
d_course_koopa_troopa_beach_dl_7060, d_course_koopa_troopa_beach_dl_72B0,
d_course_koopa_troopa_beach_dl_7168, d_course_koopa_troopa_beach_dl_73F8,
d_course_koopa_troopa_beach_dl_75A0, d_course_koopa_troopa_beach_dl_7840,
d_course_koopa_troopa_beach_dl_76A8, d_course_koopa_troopa_beach_dl_7978,
d_course_koopa_troopa_beach_dl_7AE0, d_course_koopa_troopa_beach_dl_7CE0,
d_course_koopa_troopa_beach_dl_7BA0, d_course_koopa_troopa_beach_dl_7DD0,
d_course_koopa_troopa_beach_dl_7EE0, d_course_koopa_troopa_beach_dl_80E0,
d_course_koopa_troopa_beach_dl_7FC8, d_course_koopa_troopa_beach_dl_81B8,
d_course_koopa_troopa_beach_dl_82D8, d_course_koopa_troopa_beach_dl_84D0,
d_course_koopa_troopa_beach_dl_83D0, d_course_koopa_troopa_beach_dl_85E8,
d_course_koopa_troopa_beach_dl_8710, d_course_koopa_troopa_beach_dl_88F0,
d_course_koopa_troopa_beach_dl_8800, d_course_koopa_troopa_beach_dl_8A20,
d_course_koopa_troopa_beach_dl_8BB0, d_course_koopa_troopa_beach_dl_8DC0,
d_course_koopa_troopa_beach_dl_8CC8, d_course_koopa_troopa_beach_dl_8F50,
d_course_koopa_troopa_beach_dl_90F0, d_course_koopa_troopa_beach_dl_92E8,
d_course_koopa_troopa_beach_dl_9210, d_course_koopa_troopa_beach_dl_9498,
d_course_koopa_troopa_beach_dl_9618, d_course_koopa_troopa_beach_dl_9818,
d_course_koopa_troopa_beach_dl_9720, d_course_koopa_troopa_beach_dl_99A0,
d_course_koopa_troopa_beach_dl_9AE0, d_course_koopa_troopa_beach_dl_9D00,
d_course_koopa_troopa_beach_dl_9BC8, d_course_koopa_troopa_beach_dl_9E60,
d_course_koopa_troopa_beach_dl_9F78, d_course_koopa_troopa_beach_dl_A190,
d_course_koopa_troopa_beach_dl_A070, d_course_koopa_troopa_beach_dl_A2E8,
d_course_koopa_troopa_beach_dl_A428, d_course_koopa_troopa_beach_dl_A6F0,
d_course_koopa_troopa_beach_dl_A578, d_course_koopa_troopa_beach_dl_A828,
d_course_koopa_troopa_beach_dl_A9A0, d_course_koopa_troopa_beach_dl_AC10,
d_course_koopa_troopa_beach_dl_AAE8, d_course_koopa_troopa_beach_dl_AD40,
Gfx* koopa_troopa_beach_dls2[] = {
d_course_koopa_troopa_beach_dl_118, d_course_koopa_troopa_beach_dl_328, d_course_koopa_troopa_beach_dl_218,
d_course_koopa_troopa_beach_dl_458, d_course_koopa_troopa_beach_dl_530, d_course_koopa_troopa_beach_dl_790,
d_course_koopa_troopa_beach_dl_658, d_course_koopa_troopa_beach_dl_8F0, d_course_koopa_troopa_beach_dl_9E0,
d_course_koopa_troopa_beach_dl_C50, d_course_koopa_troopa_beach_dl_B10, d_course_koopa_troopa_beach_dl_DB8,
d_course_koopa_troopa_beach_dl_EE0, d_course_koopa_troopa_beach_dl_1178, d_course_koopa_troopa_beach_dl_1040,
d_course_koopa_troopa_beach_dl_1310, d_course_koopa_troopa_beach_dl_1430, d_course_koopa_troopa_beach_dl_1680,
d_course_koopa_troopa_beach_dl_1558, d_course_koopa_troopa_beach_dl_17B0, d_course_koopa_troopa_beach_dl_1878,
d_course_koopa_troopa_beach_dl_19E8, d_course_koopa_troopa_beach_dl_1940, d_course_koopa_troopa_beach_dl_1AA8,
d_course_koopa_troopa_beach_dl_1B50, d_course_koopa_troopa_beach_dl_1CB0, d_course_koopa_troopa_beach_dl_1C00,
d_course_koopa_troopa_beach_dl_1D88, d_course_koopa_troopa_beach_dl_1E40, d_course_koopa_troopa_beach_dl_2058,
d_course_koopa_troopa_beach_dl_1F68, d_course_koopa_troopa_beach_dl_2178, d_course_koopa_troopa_beach_dl_2258,
d_course_koopa_troopa_beach_dl_24C0, d_course_koopa_troopa_beach_dl_2390, d_course_koopa_troopa_beach_dl_25D8,
d_course_koopa_troopa_beach_dl_26E0, d_course_koopa_troopa_beach_dl_2910, d_course_koopa_troopa_beach_dl_2800,
d_course_koopa_troopa_beach_dl_2A18, d_course_koopa_troopa_beach_dl_2B08, d_course_koopa_troopa_beach_dl_2D50,
d_course_koopa_troopa_beach_dl_2C28, d_course_koopa_troopa_beach_dl_2E38, d_course_koopa_troopa_beach_dl_2F30,
d_course_koopa_troopa_beach_dl_3198, d_course_koopa_troopa_beach_dl_3050, d_course_koopa_troopa_beach_dl_3278,
d_course_koopa_troopa_beach_dl_3370, d_course_koopa_troopa_beach_dl_3628, d_course_koopa_troopa_beach_dl_34B8,
d_course_koopa_troopa_beach_dl_3730, d_course_koopa_troopa_beach_dl_3830, d_course_koopa_troopa_beach_dl_3B10,
d_course_koopa_troopa_beach_dl_3980, d_course_koopa_troopa_beach_dl_3C28, d_course_koopa_troopa_beach_dl_3D40,
d_course_koopa_troopa_beach_dl_4028, d_course_koopa_troopa_beach_dl_3EA8, d_course_koopa_troopa_beach_dl_4138,
d_course_koopa_troopa_beach_dl_4260, d_course_koopa_troopa_beach_dl_4548, d_course_koopa_troopa_beach_dl_43C0,
d_course_koopa_troopa_beach_dl_4670, d_course_koopa_troopa_beach_dl_47C0, d_course_koopa_troopa_beach_dl_4B28,
d_course_koopa_troopa_beach_dl_4948, d_course_koopa_troopa_beach_dl_4C70, d_course_koopa_troopa_beach_dl_4DC0,
d_course_koopa_troopa_beach_dl_5120, d_course_koopa_troopa_beach_dl_4F58, d_course_koopa_troopa_beach_dl_5248,
d_course_koopa_troopa_beach_dl_5358, d_course_koopa_troopa_beach_dl_55D0, d_course_koopa_troopa_beach_dl_5480,
d_course_koopa_troopa_beach_dl_56D0, d_course_koopa_troopa_beach_dl_5840, d_course_koopa_troopa_beach_dl_5B48,
d_course_koopa_troopa_beach_dl_59C8, d_course_koopa_troopa_beach_dl_5C88, d_course_koopa_troopa_beach_dl_5DB8,
d_course_koopa_troopa_beach_dl_6000, d_course_koopa_troopa_beach_dl_5EE0, d_course_koopa_troopa_beach_dl_6128,
d_course_koopa_troopa_beach_dl_6268, d_course_koopa_troopa_beach_dl_6498, d_course_koopa_troopa_beach_dl_6398,
d_course_koopa_troopa_beach_dl_65B8, d_course_koopa_troopa_beach_dl_6718, d_course_koopa_troopa_beach_dl_6918,
d_course_koopa_troopa_beach_dl_6830, d_course_koopa_troopa_beach_dl_6A28, d_course_koopa_troopa_beach_dl_6B88,
d_course_koopa_troopa_beach_dl_6DB8, d_course_koopa_troopa_beach_dl_6CA0, d_course_koopa_troopa_beach_dl_6ED0,
d_course_koopa_troopa_beach_dl_7060, d_course_koopa_troopa_beach_dl_72B0, d_course_koopa_troopa_beach_dl_7168,
d_course_koopa_troopa_beach_dl_73F8, d_course_koopa_troopa_beach_dl_75A0, d_course_koopa_troopa_beach_dl_7840,
d_course_koopa_troopa_beach_dl_76A8, d_course_koopa_troopa_beach_dl_7978, d_course_koopa_troopa_beach_dl_7AE0,
d_course_koopa_troopa_beach_dl_7CE0, d_course_koopa_troopa_beach_dl_7BA0, d_course_koopa_troopa_beach_dl_7DD0,
d_course_koopa_troopa_beach_dl_7EE0, d_course_koopa_troopa_beach_dl_80E0, d_course_koopa_troopa_beach_dl_7FC8,
d_course_koopa_troopa_beach_dl_81B8, d_course_koopa_troopa_beach_dl_82D8, d_course_koopa_troopa_beach_dl_84D0,
d_course_koopa_troopa_beach_dl_83D0, d_course_koopa_troopa_beach_dl_85E8, d_course_koopa_troopa_beach_dl_8710,
d_course_koopa_troopa_beach_dl_88F0, d_course_koopa_troopa_beach_dl_8800, d_course_koopa_troopa_beach_dl_8A20,
d_course_koopa_troopa_beach_dl_8BB0, d_course_koopa_troopa_beach_dl_8DC0, d_course_koopa_troopa_beach_dl_8CC8,
d_course_koopa_troopa_beach_dl_8F50, d_course_koopa_troopa_beach_dl_90F0, d_course_koopa_troopa_beach_dl_92E8,
d_course_koopa_troopa_beach_dl_9210, d_course_koopa_troopa_beach_dl_9498, d_course_koopa_troopa_beach_dl_9618,
d_course_koopa_troopa_beach_dl_9818, d_course_koopa_troopa_beach_dl_9720, d_course_koopa_troopa_beach_dl_99A0,
d_course_koopa_troopa_beach_dl_9AE0, d_course_koopa_troopa_beach_dl_9D00, d_course_koopa_troopa_beach_dl_9BC8,
d_course_koopa_troopa_beach_dl_9E60, d_course_koopa_troopa_beach_dl_9F78, d_course_koopa_troopa_beach_dl_A190,
d_course_koopa_troopa_beach_dl_A070, d_course_koopa_troopa_beach_dl_A2E8, d_course_koopa_troopa_beach_dl_A428,
d_course_koopa_troopa_beach_dl_A6F0, d_course_koopa_troopa_beach_dl_A578, d_course_koopa_troopa_beach_dl_A828,
d_course_koopa_troopa_beach_dl_A9A0, d_course_koopa_troopa_beach_dl_AC10, d_course_koopa_troopa_beach_dl_AAE8,
d_course_koopa_troopa_beach_dl_AD40,
};
// 0x06014828
@ -187,204 +139,35 @@ u32 d_course_koopa_troopa_beach_unk_data1[] = {
// 0x06014838
s16 d_course_koopa_troopa_beach_unk_data2[] = {
0x0000, 0x0000,
0x0000, 0x0001,
0x0002, 0x0003,
0x0005, 0x0006,
0x0007, 0x0007,
0x0007, 0x0006,
0x0005, 0x0003,
0x0002, 0x0001,
0x0000, 0x0000,
0x0000, 0xffff,
0xffff, 0xffff,
0xffff, 0xffff,
0xffff, 0xffff,
0xffff, 0xffff,
0xffff, 0xffff,
0x0000, 0x0000,
0x0000, 0x0000,
0x0000, 0x0000,
0x0000, 0xffff,
0x0000, 0x0000,
0x0001, 0x0001,
0x0000, 0x0000,
0xffff, 0xffff,
0xffff, 0xffff,
0x0000, 0x0000,
0x0001, 0x0001,
0x0001, 0x0000,
0x0000, 0x0000,
0x3fff, 0x3fff,
0x3fff, 0x18a7,
0x0e34, 0x03c1,
0xfaa6, 0xf434,
0xf1c2, 0xf434,
0xfaa7, 0x03c3,
0x0e36, 0x18a8,
0x21c6, 0x2838,
0x2aaa, 0x2845,
0x216b, 0x1728,
0x0b90, 0x00b6,
0xf8af, 0xf58c,
0xf8e3, 0x003c,
0x0795, 0x0aed,
0x0aaa, 0x09ed,
0x08cc, 0x0759,
0x05ab, 0x03d3,
0x01e8, 0xfffe,
0xfe26, 0xfc78,
0xfb05, 0xf9e4,
0xf927, 0xf8e4,
0x0000, 0x071c,
0x0652, 0x044a,
0x0183, 0xfe7d,
0xfbb6, 0xf9ae,
0xf8e4, 0xf9f5,
0xfcea, 0x0163,
0x0705, 0x0d71,
0x1449, 0x1b2f,
0xfac3, 0xf4e1,
0xf2ba, 0xf570,
0xfc94, 0x06ac,
0x1240, 0x1dd3,
0x27ec, 0x2f11,
0x31c6, 0x2e8b,
0x263e, 0x1afb,
0x0edc, 0x03f9,
0xfcee, 0xfa23,
0xfa72, 0xfcb3,
0xffbd, 0x0268,
0x038e, 0x0387,
0x0373, 0x0355,
0x032f, 0x0305,
0x02d8, 0x02ab,
0x0280, 0x025b,
0x023d, 0x0229,
0x0222, 0x05b0,
0x0143, 0xf90d,
0xf4a0, 0x071c,
0x0dfa, 0x1110,
0x11c6, 0x0f68,
0x097b, 0x01c7,
0xfa14, 0xf427,
0xf1c8, 0xfc72,
0x071c, 0x0716,
0x06e6, 0x065d,
0x054b, 0xfdde,
0xe698, 0xeea7,
0xfa0b, 0x0719,
0x1428, 0x1f8d,
0x279b, 0x2aaa,
0x2816, 0x2131,
0x173d, 0x0b7b,
0xff2d, 0xf394,
0xe9f3, 0xe38a,
0xe234, 0xe55c,
0xea9a, 0xef85,
0xf1b8, 0xf1ba,
0xf1b7, 0xf1b7,
0xf1c4, 0xf1d8,
0xf1e7, 0xf1f3,
0xf1f9, 0xf1fc,
0xf1fa, 0xf1f4,
0xf1e9, 0xf1db,
0xf1c8, 0xee3a,
0xf4b0, 0x02ae,
0x103a, 0x1555,
0x0b47, 0xfa83,
0xf1c8, 0xf05c,
0xee3a, 0xf330,
0xfe33, 0x0939,
0x0e38, 0x0bd6,
0x05bb, 0xfd65,
0xf451, 0xebfd,
0xe5e6, 0xe741,
0xf1ad, 0xfc24,
0x054b, 0x0bc7,
0x0e3e, 0x0bcc,
0x0559, 0xfc3d,
0xf1ca, 0xe758,
0xde3a, 0xd7c8,
0xd556, 0xd7c8,
0xde95, 0xe8b9,
0xf44d, 0xff32,
0x0749, 0x0a74,
0x071d, 0xffc4,
0xf86b, 0xf513,
0xf559, 0xf61d,
0xf74a, 0xf8cb,
0xfa8a, 0xfc74,
0xfe73, 0x0071,
0x025b, 0x041a,
0x059b, 0x06c8,
0x078c, 0x07d2,
0x005b, 0xf8e4,
0xf9ae, 0xfbb6,
0xfe7d, 0x0183,
0x044a, 0x0652,
0x071c, 0x060a,
0x0312, 0xfe95,
0xf8ef, 0xf281,
0xebaa, 0xe4c8,
0x051e, 0x0b0f,
0x0d46, 0x0a90,
0x036c, 0xf954,
0xedc0, 0xe22d,
0xd814, 0xd0ef,
0xce3a, 0xd176,
0xd9c4, 0xe508,
0xf128, 0xfc07,
0x030e, 0x05d8,
0x0589, 0x034a,
0x0041, 0xfd97,
0xfc72, 0xfc79,
0xfc8d, 0xfcab,
0xfcd1, 0xfcfb,
0xfd28, 0xfd55,
0xfd80, 0xfda5,
0xfdc3, 0xfdd7,
0xfdde, 0xfa50,
0xfe8e, 0x066d,
0x0aaa, 0xf8e4,
0xf08a, 0xee33,
0xee3a, 0xf098,
0xf685, 0xfe39,
0x05ec, 0x0bd9,
0x0e38, 0x0333,
0xf82e, 0xf848,
0xf8a7, 0xf968,
0xfaa7, 0x0222,
0x1968, 0x1159,
0x05f5, 0xf8e7,
0xebd8, 0xe073,
0xd865, 0xd556,
0xd865, 0xe073,
0xebd8, 0xf8e7,
0x05f5, 0x1159,
0x1968, 0x1c76,
0x1afd, 0x1778,
0x1346, 0x0fc2,
0x0e48, 0x0e46,
0x0e42, 0x0e3e,
0x0e3c, 0x0e3c,
0x0e3c, 0x0e3b,
0x0e3b, 0x0e3a,
0x0e3a, 0x0e39,
0x0e39, 0x0e38,
0x0e38, 0x11c6,
0x0b51, 0xfd4c,
0xefbd, 0xeaab,
0xf4b6, 0x056a,
0x0e38, 0x0fa4,
0x11c6, 0x0cd6,
0x01d4, 0xf6cd,
0xf1c8, 0xf425,
0xfa3e, 0x0294,
0x0ba9, 0x1400,
0x1a19, 0x3fff,
0x3fff, 0xc001,
0x3fff, 0x8001,
0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0005, 0x0006, 0x0007, 0x0007, 0x0007, 0x0006, 0x0005, 0x0003,
0x0002, 0x0001, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0001, 0x0001,
0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0001, 0x0001, 0x0001, 0x0000, 0x0000, 0x0000,
0x3fff, 0x3fff, 0x3fff, 0x18a7, 0x0e34, 0x03c1, 0xfaa6, 0xf434, 0xf1c2, 0xf434, 0xfaa7, 0x03c3, 0x0e36, 0x18a8,
0x21c6, 0x2838, 0x2aaa, 0x2845, 0x216b, 0x1728, 0x0b90, 0x00b6, 0xf8af, 0xf58c, 0xf8e3, 0x003c, 0x0795, 0x0aed,
0x0aaa, 0x09ed, 0x08cc, 0x0759, 0x05ab, 0x03d3, 0x01e8, 0xfffe, 0xfe26, 0xfc78, 0xfb05, 0xf9e4, 0xf927, 0xf8e4,
0x0000, 0x071c, 0x0652, 0x044a, 0x0183, 0xfe7d, 0xfbb6, 0xf9ae, 0xf8e4, 0xf9f5, 0xfcea, 0x0163, 0x0705, 0x0d71,
0x1449, 0x1b2f, 0xfac3, 0xf4e1, 0xf2ba, 0xf570, 0xfc94, 0x06ac, 0x1240, 0x1dd3, 0x27ec, 0x2f11, 0x31c6, 0x2e8b,
0x263e, 0x1afb, 0x0edc, 0x03f9, 0xfcee, 0xfa23, 0xfa72, 0xfcb3, 0xffbd, 0x0268, 0x038e, 0x0387, 0x0373, 0x0355,
0x032f, 0x0305, 0x02d8, 0x02ab, 0x0280, 0x025b, 0x023d, 0x0229, 0x0222, 0x05b0, 0x0143, 0xf90d, 0xf4a0, 0x071c,
0x0dfa, 0x1110, 0x11c6, 0x0f68, 0x097b, 0x01c7, 0xfa14, 0xf427, 0xf1c8, 0xfc72, 0x071c, 0x0716, 0x06e6, 0x065d,
0x054b, 0xfdde, 0xe698, 0xeea7, 0xfa0b, 0x0719, 0x1428, 0x1f8d, 0x279b, 0x2aaa, 0x2816, 0x2131, 0x173d, 0x0b7b,
0xff2d, 0xf394, 0xe9f3, 0xe38a, 0xe234, 0xe55c, 0xea9a, 0xef85, 0xf1b8, 0xf1ba, 0xf1b7, 0xf1b7, 0xf1c4, 0xf1d8,
0xf1e7, 0xf1f3, 0xf1f9, 0xf1fc, 0xf1fa, 0xf1f4, 0xf1e9, 0xf1db, 0xf1c8, 0xee3a, 0xf4b0, 0x02ae, 0x103a, 0x1555,
0x0b47, 0xfa83, 0xf1c8, 0xf05c, 0xee3a, 0xf330, 0xfe33, 0x0939, 0x0e38, 0x0bd6, 0x05bb, 0xfd65, 0xf451, 0xebfd,
0xe5e6, 0xe741, 0xf1ad, 0xfc24, 0x054b, 0x0bc7, 0x0e3e, 0x0bcc, 0x0559, 0xfc3d, 0xf1ca, 0xe758, 0xde3a, 0xd7c8,
0xd556, 0xd7c8, 0xde95, 0xe8b9, 0xf44d, 0xff32, 0x0749, 0x0a74, 0x071d, 0xffc4, 0xf86b, 0xf513, 0xf559, 0xf61d,
0xf74a, 0xf8cb, 0xfa8a, 0xfc74, 0xfe73, 0x0071, 0x025b, 0x041a, 0x059b, 0x06c8, 0x078c, 0x07d2, 0x005b, 0xf8e4,
0xf9ae, 0xfbb6, 0xfe7d, 0x0183, 0x044a, 0x0652, 0x071c, 0x060a, 0x0312, 0xfe95, 0xf8ef, 0xf281, 0xebaa, 0xe4c8,
0x051e, 0x0b0f, 0x0d46, 0x0a90, 0x036c, 0xf954, 0xedc0, 0xe22d, 0xd814, 0xd0ef, 0xce3a, 0xd176, 0xd9c4, 0xe508,
0xf128, 0xfc07, 0x030e, 0x05d8, 0x0589, 0x034a, 0x0041, 0xfd97, 0xfc72, 0xfc79, 0xfc8d, 0xfcab, 0xfcd1, 0xfcfb,
0xfd28, 0xfd55, 0xfd80, 0xfda5, 0xfdc3, 0xfdd7, 0xfdde, 0xfa50, 0xfe8e, 0x066d, 0x0aaa, 0xf8e4, 0xf08a, 0xee33,
0xee3a, 0xf098, 0xf685, 0xfe39, 0x05ec, 0x0bd9, 0x0e38, 0x0333, 0xf82e, 0xf848, 0xf8a7, 0xf968, 0xfaa7, 0x0222,
0x1968, 0x1159, 0x05f5, 0xf8e7, 0xebd8, 0xe073, 0xd865, 0xd556, 0xd865, 0xe073, 0xebd8, 0xf8e7, 0x05f5, 0x1159,
0x1968, 0x1c76, 0x1afd, 0x1778, 0x1346, 0x0fc2, 0x0e48, 0x0e46, 0x0e42, 0x0e3e, 0x0e3c, 0x0e3c, 0x0e3c, 0x0e3b,
0x0e3b, 0x0e3a, 0x0e3a, 0x0e39, 0x0e39, 0x0e38, 0x0e38, 0x11c6, 0x0b51, 0xfd4c, 0xefbd, 0xeaab, 0xf4b6, 0x056a,
0x0e38, 0x0fa4, 0x11c6, 0x0cd6, 0x01d4, 0xf6cd, 0xf1c8, 0xf425, 0xfa3e, 0x0294, 0x0ba9, 0x1400, 0x1a19, 0x3fff,
0x3fff, 0xc001, 0x3fff, 0x8001,
};
// 0x06014B50
@ -456,158 +239,83 @@ Animation d_course_koopa_troopa_beach_unk_data4 = {
d_course_koopa_troopa_beach_unk_data3,
};
//! 0x60169b
uintptr_t d_course_koopa_troopa_beach_unk4[] = {
0x00000001,
0x00000002,
0x00000001, 0x00000002,
0x00000000,
0x00000007,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000, 0x00000007, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000,
0x00000001,
0x00000002,
0x00000001, 0x00000002,
0x00000000,
0x00000007,
0x00000000,
d_course_koopa_troopa_beach_dl_16630,
0x00000000,
0x00000000,
0x00000000,
0x00000000, 0x00000007, 0x00000000, d_course_koopa_troopa_beach_dl_16630,
0x00000000, 0x00000000, 0x00000000,
0x00000001,
0x00000002,
0x00000001, 0x00000002,
0x00000000,
0x00000007,
0x00000000,
0x00000000,
0x00000000,
0xfffffffb,
0x00000005,
0x00000000, 0x00000007, 0x00000000, 0x00000000,
0x00000000, 0xfffffffb, 0x00000005,
0x00000001,
0x00000002,
0x00000001, 0x00000002,
0x00000000,
0x00000007,
0x00000000,
d_course_koopa_troopa_beach_dl_16850,
0x00000000,
0x00000000,
0x00000000,
0x00000000, 0x00000007, 0x00000000, d_course_koopa_troopa_beach_dl_16850,
0x00000000, 0x00000000, 0x00000000,
0x00000001,
0x00000002,
0x00000001, 0x00000002,
0x00000000,
0x00000007,
0x00000000,
d_course_koopa_troopa_beach_dl_168F0,
0x00000024,
0x00000000,
0x00000000,
0x00000000, 0x00000007, 0x00000000, d_course_koopa_troopa_beach_dl_168F0,
0x00000024, 0x00000000, 0x00000000,
0x00000001,
0x00000002,
0x00000001, 0x00000002,
0x00000000,
0x00000007,
0x00000000,
d_course_koopa_troopa_beach_dl_16990,
0x00000019,
0x00000000,
0x00000000,
0x00000000, 0x00000007, 0x00000000, d_course_koopa_troopa_beach_dl_16990,
0x00000019, 0x00000000, 0x00000000,
0x00000002,
0x00000002,
0x00000002, 0x00000002,
0x00000002,
0x00000002,
0x00000002, 0x00000002,
0x00000002,
0x00000002,
0x00000002, 0x00000002,
0x00000000,
0x00000007,
0x00000000,
0x00000000,
0x00000000,
0xfffffffb,
0xfffffffb,
0x00000000, 0x00000007, 0x00000000, 0x00000000,
0x00000000, 0xfffffffb, 0xfffffffb,
0x00000001,
0x00000002,
0x00000001, 0x00000002,
0x00000000,
0x00000007,
0x00000000,
d_course_koopa_troopa_beach_dl_16850,
0x00000000,
0x00000000,
0x00000000,
0x00000000, 0x00000007, 0x00000000, d_course_koopa_troopa_beach_dl_16850,
0x00000000, 0x00000000, 0x00000000,
0x00000001,
0x00000002,
0x00000001, 0x00000002,
0x00000000,
0x00000007,
0x00000000,
d_course_koopa_troopa_beach_dl_168F0,
0x00000024,
0x00000000,
0x00000000,
0x00000000, 0x00000007, 0x00000000, d_course_koopa_troopa_beach_dl_168F0,
0x00000024, 0x00000000, 0x00000000,
0x00000001,
0x00000002,
0x00000001, 0x00000002,
0x00000000,
0x00000007,
0x00000000,
d_course_koopa_troopa_beach_dl_16990,
0x00000019,
0x00000000,
0x00000000,
0x00000000, 0x00000007, 0x00000000, d_course_koopa_troopa_beach_dl_16990,
0x00000019, 0x00000000, 0x00000000,
0x00000002,
0x00000002,
0x00000002, 0x00000002,
0x00000002,
0x00000002,
0x00000002, 0x00000002,
0x00000002,
0x00000002,
0x00000002, 0x00000002,
0x00000002,
0x00000002,
0x00000002, 0x00000002,
0x00000002,
0x00000002,
0x00000002, 0x00000002,
0x00000002,
0x00000002,
0x00000002, 0x00000002,
0x00000003,
0x00000002,
0x00000003, 0x00000002,
};
// 0x06016B60
Animation *d_course_koopa_troopa_beach_unk_data5[] = {
Animation* d_course_koopa_troopa_beach_unk_data5[] = {
&d_course_koopa_troopa_beach_unk_data4,
};
// No idea what this stuff is
u32 d_course_koopa_troopa_beach_unk_data6[] = {
0x00000000,
0x00000000,
0x00000001,
0x00000000,
0x00000001,
};
0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000001,
};

View File

@ -3,168 +3,88 @@
#include <assets/luigi_raceway_data.h>
const course_texture luigi_raceway_textures[] = {
{gTextureSignShellShot0, 0x038C, 0x1000, 0x0},
{gTextureSignShellShot1, 0x0247, 0x1000, 0x0},
{gTextureCheckerboardYellowBlue, 0x013A, 0x0800, 0x0},
{gTexture64619C, 0x0124, 0x0800, 0x0},
{gTextureCheckerboardBlueGreen, 0x0139, 0x0800, 0x0},
{gTextureGrass3, 0x0372, 0x0800, 0x0},
{gTextureFlagRed, 0x019E, 0x0800, 0x0},
{gTexture65100C, 0x0120, 0x0800, 0x0},
{gTexture65112C, 0x0150, 0x0800, 0x0},
{gTexture653608, 0x07A7, 0x0800, 0x0},
{gTextureGrass11, 0x01F8, 0x0800, 0x0},
{gTextureSignLuigiFace0, 0x05C9, 0x1000, 0x0},
{gTextureSignLuigiFace1, 0x065F, 0x1000, 0x0},
{gTexture66C7A8, 0x0149, 0x0800, 0x0},
{gTexture670AC8, 0x0FBF, 0x1000, 0x0},
{gTexture671A88, 0x012D, 0x0800, 0x0},
{gTexture6735DC, 0x03B1, 0x0800, 0x0},
{gTexture673C68, 0x038D, 0x0800, 0x0},
{gTexture6747C4, 0x0145, 0x0800, 0x0},
{gTextureRoad1, 0x02D2, 0x1000, 0x0},
{gTextureRoad2, 0x02AE, 0x1000, 0x0},
{gTextureRoadFinish1, 0x026B, 0x1000, 0x0},
{gTexture67BBD8, 0x0310, 0x0800, 0x0},
{gTexture68272C, 0x01F9, 0x1000, 0x0},
{gTexture682928, 0x01F9, 0x1000, 0x0},
{gTexture682B24, 0x01F9, 0x1000, 0x0},
{gTexture682D20, 0x01F9, 0x1000, 0x0},
{gTexture682F1C, 0x01F9, 0x1000, 0x0},
{gTexture683118, 0x01F9, 0x1000, 0x0},
{gTextureSignBlue64, 0x0567, 0x1000, 0x0},
{gTextureSignKoopaAir0, 0x0360, 0x1000, 0x0},
{gTextureSignKoopaAir1, 0x0304, 0x1000, 0x0},
{gTextureSignLuigis0, 0x0287, 0x1000, 0x0},
{gTextureSignLuigis1, 0x02AF, 0x1000, 0x0},
{gTextureSignMarioStar0, 0x02D2, 0x1000, 0x0},
{gTextureSignMarioStar1, 0x02B1, 0x1000, 0x0},
{gTextureSignNintendoRed0, 0x02A6, 0x1000, 0x0},
{gTextureSignNintendoRed1, 0x02F7, 0x1000, 0x0},
{gTextureSignYoshi, 0x04DF, 0x1000, 0x0},
{gTextureCheckerboardBlueGray, 0x04A1, 0x1000, 0x0},
{0x00000000, 0x0000, 0x0000, 0x0},
{ gTextureSignShellShot0, 0x038C, 0x1000, 0x0 },
{ gTextureSignShellShot1, 0x0247, 0x1000, 0x0 },
{ gTextureCheckerboardYellowBlue, 0x013A, 0x0800, 0x0 },
{ gTexture64619C, 0x0124, 0x0800, 0x0 },
{ gTextureCheckerboardBlueGreen, 0x0139, 0x0800, 0x0 },
{ gTextureGrass3, 0x0372, 0x0800, 0x0 },
{ gTextureFlagRed, 0x019E, 0x0800, 0x0 },
{ gTexture65100C, 0x0120, 0x0800, 0x0 },
{ gTexture65112C, 0x0150, 0x0800, 0x0 },
{ gTexture653608, 0x07A7, 0x0800, 0x0 },
{ gTextureGrass11, 0x01F8, 0x0800, 0x0 },
{ gTextureSignLuigiFace0, 0x05C9, 0x1000, 0x0 },
{ gTextureSignLuigiFace1, 0x065F, 0x1000, 0x0 },
{ gTexture66C7A8, 0x0149, 0x0800, 0x0 },
{ gTexture670AC8, 0x0FBF, 0x1000, 0x0 },
{ gTexture671A88, 0x012D, 0x0800, 0x0 },
{ gTexture6735DC, 0x03B1, 0x0800, 0x0 },
{ gTexture673C68, 0x038D, 0x0800, 0x0 },
{ gTexture6747C4, 0x0145, 0x0800, 0x0 },
{ gTextureRoad1, 0x02D2, 0x1000, 0x0 },
{ gTextureRoad2, 0x02AE, 0x1000, 0x0 },
{ gTextureRoadFinish1, 0x026B, 0x1000, 0x0 },
{ gTexture67BBD8, 0x0310, 0x0800, 0x0 },
{ gTexture68272C, 0x01F9, 0x1000, 0x0 },
{ gTexture682928, 0x01F9, 0x1000, 0x0 },
{ gTexture682B24, 0x01F9, 0x1000, 0x0 },
{ gTexture682D20, 0x01F9, 0x1000, 0x0 },
{ gTexture682F1C, 0x01F9, 0x1000, 0x0 },
{ gTexture683118, 0x01F9, 0x1000, 0x0 },
{ gTextureSignBlue64, 0x0567, 0x1000, 0x0 },
{ gTextureSignKoopaAir0, 0x0360, 0x1000, 0x0 },
{ gTextureSignKoopaAir1, 0x0304, 0x1000, 0x0 },
{ gTextureSignLuigis0, 0x0287, 0x1000, 0x0 },
{ gTextureSignLuigis1, 0x02AF, 0x1000, 0x0 },
{ gTextureSignMarioStar0, 0x02D2, 0x1000, 0x0 },
{ gTextureSignMarioStar1, 0x02B1, 0x1000, 0x0 },
{ gTextureSignNintendoRed0, 0x02A6, 0x1000, 0x0 },
{ gTextureSignNintendoRed1, 0x02F7, 0x1000, 0x0 },
{ gTextureSignYoshi, 0x04DF, 0x1000, 0x0 },
{ gTextureCheckerboardBlueGray, 0x04A1, 0x1000, 0x0 },
{ 0x00000000, 0x0000, 0x0000, 0x0 },
};
const Gfx *luigi_raceway_dls[] = {
d_course_luigi_raceway_dl_0,
d_course_luigi_raceway_dl_328,
d_course_luigi_raceway_dl_1A8,
d_course_luigi_raceway_dl_480,
d_course_luigi_raceway_dl_6E0,
d_course_luigi_raceway_dl_9F8,
d_course_luigi_raceway_dl_868,
d_course_luigi_raceway_dl_B48,
d_course_luigi_raceway_dl_D80,
d_course_luigi_raceway_dl_1058,
d_course_luigi_raceway_dl_EE8,
d_course_luigi_raceway_dl_1198,
d_course_luigi_raceway_dl_1398,
d_course_luigi_raceway_dl_16D8,
d_course_luigi_raceway_dl_1538,
d_course_luigi_raceway_dl_1888,
d_course_luigi_raceway_dl_1B00,
d_course_luigi_raceway_dl_1E30,
d_course_luigi_raceway_dl_1C78,
d_course_luigi_raceway_dl_1FD0,
d_course_luigi_raceway_dl_2240,
d_course_luigi_raceway_dl_2518,
d_course_luigi_raceway_dl_2348,
d_course_luigi_raceway_dl_2658,
d_course_luigi_raceway_dl_2860,
d_course_luigi_raceway_dl_2BC0,
d_course_luigi_raceway_dl_2978,
d_course_luigi_raceway_dl_2D00,
d_course_luigi_raceway_dl_2F08,
d_course_luigi_raceway_dl_32C0,
d_course_luigi_raceway_dl_2FF8,
d_course_luigi_raceway_dl_3408,
d_course_luigi_raceway_dl_3610,
d_course_luigi_raceway_dl_3928,
d_course_luigi_raceway_dl_36A8,
d_course_luigi_raceway_dl_3AB0,
d_course_luigi_raceway_dl_3C18,
d_course_luigi_raceway_dl_3EB0,
d_course_luigi_raceway_dl_3CA0,
d_course_luigi_raceway_dl_4058,
d_course_luigi_raceway_dl_4198,
d_course_luigi_raceway_dl_4440,
d_course_luigi_raceway_dl_4240,
d_course_luigi_raceway_dl_4638,
d_course_luigi_raceway_dl_4720,
d_course_luigi_raceway_dl_4A18,
d_course_luigi_raceway_dl_4828,
d_course_luigi_raceway_dl_4C60,
d_course_luigi_raceway_dl_4CF8,
d_course_luigi_raceway_dl_4FD8,
d_course_luigi_raceway_dl_4E38,
d_course_luigi_raceway_dl_5220,
d_course_luigi_raceway_dl_52D0,
d_course_luigi_raceway_dl_5558,
d_course_luigi_raceway_dl_5420,
d_course_luigi_raceway_dl_5728,
d_course_luigi_raceway_dl_57F8,
d_course_luigi_raceway_dl_5A60,
d_course_luigi_raceway_dl_5940,
d_course_luigi_raceway_dl_5BA0,
d_course_luigi_raceway_dl_5CB8,
d_course_luigi_raceway_dl_5F08,
d_course_luigi_raceway_dl_5E10,
d_course_luigi_raceway_dl_6018,
d_course_luigi_raceway_dl_6150,
d_course_luigi_raceway_dl_6350,
d_course_luigi_raceway_dl_6288,
d_course_luigi_raceway_dl_6400,
d_course_luigi_raceway_dl_6558,
d_course_luigi_raceway_dl_6608,
d_course_luigi_raceway_dl_65B0,
d_course_luigi_raceway_dl_6658,
d_course_luigi_raceway_dl_66B8,
d_course_luigi_raceway_dl_67A0,
d_course_luigi_raceway_dl_6708,
d_course_luigi_raceway_dl_6810,
d_course_luigi_raceway_dl_68C0,
d_course_luigi_raceway_dl_6A00,
d_course_luigi_raceway_dl_6930,
d_course_luigi_raceway_dl_6A90,
d_course_luigi_raceway_dl_6B58,
d_course_luigi_raceway_dl_6DA0,
d_course_luigi_raceway_dl_6C40,
d_course_luigi_raceway_dl_6EB0,
d_course_luigi_raceway_dl_6FF0,
d_course_luigi_raceway_dl_7248,
d_course_luigi_raceway_dl_7110,
d_course_luigi_raceway_dl_7388,
d_course_luigi_raceway_dl_74B0,
d_course_luigi_raceway_dl_7750,
d_course_luigi_raceway_dl_75F0,
d_course_luigi_raceway_dl_7928,
d_course_luigi_raceway_dl_7A18,
d_course_luigi_raceway_dl_7CD0,
d_course_luigi_raceway_dl_7BB0,
d_course_luigi_raceway_dl_7EE8,
d_course_luigi_raceway_dl_7FA0,
d_course_luigi_raceway_dl_8260,
d_course_luigi_raceway_dl_8158,
d_course_luigi_raceway_dl_8450,
d_course_luigi_raceway_dl_8508,
d_course_luigi_raceway_dl_8790,
d_course_luigi_raceway_dl_86F8,
d_course_luigi_raceway_dl_8958,
d_course_luigi_raceway_dl_8A70,
d_course_luigi_raceway_dl_8D68,
d_course_luigi_raceway_dl_8CC8,
d_course_luigi_raceway_dl_8F00,
d_course_luigi_raceway_dl_9058,
d_course_luigi_raceway_dl_9408,
d_course_luigi_raceway_dl_9310,
d_course_luigi_raceway_dl_95A0,
d_course_luigi_raceway_dl_97B0,
d_course_luigi_raceway_dl_9AD0,
d_course_luigi_raceway_dl_99C0,
d_course_luigi_raceway_dl_9C50,
d_course_luigi_raceway_dl_9E58,
d_course_luigi_raceway_dl_A178,
d_course_luigi_raceway_dl_A028,
d_course_luigi_raceway_dl_A320,
const Gfx* luigi_raceway_dls[] = {
d_course_luigi_raceway_dl_0, d_course_luigi_raceway_dl_328, d_course_luigi_raceway_dl_1A8,
d_course_luigi_raceway_dl_480, d_course_luigi_raceway_dl_6E0, d_course_luigi_raceway_dl_9F8,
d_course_luigi_raceway_dl_868, d_course_luigi_raceway_dl_B48, d_course_luigi_raceway_dl_D80,
d_course_luigi_raceway_dl_1058, d_course_luigi_raceway_dl_EE8, d_course_luigi_raceway_dl_1198,
d_course_luigi_raceway_dl_1398, d_course_luigi_raceway_dl_16D8, d_course_luigi_raceway_dl_1538,
d_course_luigi_raceway_dl_1888, d_course_luigi_raceway_dl_1B00, d_course_luigi_raceway_dl_1E30,
d_course_luigi_raceway_dl_1C78, d_course_luigi_raceway_dl_1FD0, d_course_luigi_raceway_dl_2240,
d_course_luigi_raceway_dl_2518, d_course_luigi_raceway_dl_2348, d_course_luigi_raceway_dl_2658,
d_course_luigi_raceway_dl_2860, d_course_luigi_raceway_dl_2BC0, d_course_luigi_raceway_dl_2978,
d_course_luigi_raceway_dl_2D00, d_course_luigi_raceway_dl_2F08, d_course_luigi_raceway_dl_32C0,
d_course_luigi_raceway_dl_2FF8, d_course_luigi_raceway_dl_3408, d_course_luigi_raceway_dl_3610,
d_course_luigi_raceway_dl_3928, d_course_luigi_raceway_dl_36A8, d_course_luigi_raceway_dl_3AB0,
d_course_luigi_raceway_dl_3C18, d_course_luigi_raceway_dl_3EB0, d_course_luigi_raceway_dl_3CA0,
d_course_luigi_raceway_dl_4058, d_course_luigi_raceway_dl_4198, d_course_luigi_raceway_dl_4440,
d_course_luigi_raceway_dl_4240, d_course_luigi_raceway_dl_4638, d_course_luigi_raceway_dl_4720,
d_course_luigi_raceway_dl_4A18, d_course_luigi_raceway_dl_4828, d_course_luigi_raceway_dl_4C60,
d_course_luigi_raceway_dl_4CF8, d_course_luigi_raceway_dl_4FD8, d_course_luigi_raceway_dl_4E38,
d_course_luigi_raceway_dl_5220, d_course_luigi_raceway_dl_52D0, d_course_luigi_raceway_dl_5558,
d_course_luigi_raceway_dl_5420, d_course_luigi_raceway_dl_5728, d_course_luigi_raceway_dl_57F8,
d_course_luigi_raceway_dl_5A60, d_course_luigi_raceway_dl_5940, d_course_luigi_raceway_dl_5BA0,
d_course_luigi_raceway_dl_5CB8, d_course_luigi_raceway_dl_5F08, d_course_luigi_raceway_dl_5E10,
d_course_luigi_raceway_dl_6018, d_course_luigi_raceway_dl_6150, d_course_luigi_raceway_dl_6350,
d_course_luigi_raceway_dl_6288, d_course_luigi_raceway_dl_6400, d_course_luigi_raceway_dl_6558,
d_course_luigi_raceway_dl_6608, d_course_luigi_raceway_dl_65B0, d_course_luigi_raceway_dl_6658,
d_course_luigi_raceway_dl_66B8, d_course_luigi_raceway_dl_67A0, d_course_luigi_raceway_dl_6708,
d_course_luigi_raceway_dl_6810, d_course_luigi_raceway_dl_68C0, d_course_luigi_raceway_dl_6A00,
d_course_luigi_raceway_dl_6930, d_course_luigi_raceway_dl_6A90, d_course_luigi_raceway_dl_6B58,
d_course_luigi_raceway_dl_6DA0, d_course_luigi_raceway_dl_6C40, d_course_luigi_raceway_dl_6EB0,
d_course_luigi_raceway_dl_6FF0, d_course_luigi_raceway_dl_7248, d_course_luigi_raceway_dl_7110,
d_course_luigi_raceway_dl_7388, d_course_luigi_raceway_dl_74B0, d_course_luigi_raceway_dl_7750,
d_course_luigi_raceway_dl_75F0, d_course_luigi_raceway_dl_7928, d_course_luigi_raceway_dl_7A18,
d_course_luigi_raceway_dl_7CD0, d_course_luigi_raceway_dl_7BB0, d_course_luigi_raceway_dl_7EE8,
d_course_luigi_raceway_dl_7FA0, d_course_luigi_raceway_dl_8260, d_course_luigi_raceway_dl_8158,
d_course_luigi_raceway_dl_8450, d_course_luigi_raceway_dl_8508, d_course_luigi_raceway_dl_8790,
d_course_luigi_raceway_dl_86F8, d_course_luigi_raceway_dl_8958, d_course_luigi_raceway_dl_8A70,
d_course_luigi_raceway_dl_8D68, d_course_luigi_raceway_dl_8CC8, d_course_luigi_raceway_dl_8F00,
d_course_luigi_raceway_dl_9058, d_course_luigi_raceway_dl_9408, d_course_luigi_raceway_dl_9310,
d_course_luigi_raceway_dl_95A0, d_course_luigi_raceway_dl_97B0, d_course_luigi_raceway_dl_9AD0,
d_course_luigi_raceway_dl_99C0, d_course_luigi_raceway_dl_9C50, d_course_luigi_raceway_dl_9E58,
d_course_luigi_raceway_dl_A178, d_course_luigi_raceway_dl_A028, d_course_luigi_raceway_dl_A320,
};

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,6 @@
#include <libultra/gbi.h>
#include "macros.h"
#define d_course_mario_raceway_packed_end GET_PACKED_END(d_course_mario_raceway_packed_dl_6928)
#endif // MARIO_RACEWAY_DISPLAYLISTS_H
#endif // MARIO_RACEWAY_DISPLAYLISTS_H

View File

@ -3,106 +3,61 @@
#include <assets/mario_raceway_data.h>
const course_texture mario_raceway_textures[] = {
{gTextureCheckerboardYellowPink, 0x0149, 0x0800, 0x0},
{gTexture64619C, 0x0124, 0x0800, 0x0},
{gTextureGrass1, 0x0125, 0x0800, 0x0},
{gTexture64BB60, 0x0169, 0x0800, 0x0},
{gTextureGrass7, 0x05DE, 0x0800, 0x0},
{gTextureGrass5, 0x023F, 0x0800, 0x0},
{gTextureFlagRed, 0x019E, 0x0800, 0x0},
{gTexture663F90, 0x0122, 0x0800, 0x0},
{gTexture6642A4, 0x0162, 0x0800, 0x0},
{gTexture6640B4, 0x01EF, 0x0800, 0x0},
{gTextureGrass10, 0x01F8, 0x0800, 0x0},
{gTexture6684F8, 0x010D, 0x0800, 0x0},
{gTextureSignLuigis0, 0x0287, 0x1000, 0x0},
{gTextureSignLuigis1, 0x02AF, 0x1000, 0x0},
{gTextureSignMarioStar0, 0x02D2, 0x1000, 0x0},
{gTextureSignMarioStar1, 0x02B1, 0x1000, 0x0},
{gTexture66C8F4, 0x01A1, 0x0800, 0x0},
{gTextureSignNintendoRed0, 0x02A6, 0x1000, 0x0},
{gTextureSignNintendoRed1, 0x02F7, 0x1000, 0x0},
{gTexture670AC8, 0x0FBF, 0x1000, 0x0},
{gTexture674354, 0x046F, 0x0800, 0x0},
{gTextureRoad0, 0x0300, 0x1000, 0x0},
{gTextureRoadFinish0, 0x0338, 0x1000, 0x0},
{gTexture67B9B0, 0x0225, 0x0800, 0x0},
{gTextureSignYoshi, 0x04DF, 0x1000, 0x0},
{gTextureCheckerboardBlueGray, 0x04A1, 0x1000, 0x0},
{gTextureSignShellShot0, 0x038C, 0x1000, 0x0},
{gTextureSignShellShot1, 0x0247, 0x1000, 0x0},
{gTextureSignKoopaAir0, 0x0360, 0x1000, 0x0},
{gTextureSignKoopaAir1, 0x0304, 0x1000, 0x0},
{0x00000000, 0x0000, 0x0000, 0x0},
{ gTextureCheckerboardYellowPink, 0x0149, 0x0800, 0x0 },
{ gTexture64619C, 0x0124, 0x0800, 0x0 },
{ gTextureGrass1, 0x0125, 0x0800, 0x0 },
{ gTexture64BB60, 0x0169, 0x0800, 0x0 },
{ gTextureGrass7, 0x05DE, 0x0800, 0x0 },
{ gTextureGrass5, 0x023F, 0x0800, 0x0 },
{ gTextureFlagRed, 0x019E, 0x0800, 0x0 },
{ gTexture663F90, 0x0122, 0x0800, 0x0 },
{ gTexture6642A4, 0x0162, 0x0800, 0x0 },
{ gTexture6640B4, 0x01EF, 0x0800, 0x0 },
{ gTextureGrass10, 0x01F8, 0x0800, 0x0 },
{ gTexture6684F8, 0x010D, 0x0800, 0x0 },
{ gTextureSignLuigis0, 0x0287, 0x1000, 0x0 },
{ gTextureSignLuigis1, 0x02AF, 0x1000, 0x0 },
{ gTextureSignMarioStar0, 0x02D2, 0x1000, 0x0 },
{ gTextureSignMarioStar1, 0x02B1, 0x1000, 0x0 },
{ gTexture66C8F4, 0x01A1, 0x0800, 0x0 },
{ gTextureSignNintendoRed0, 0x02A6, 0x1000, 0x0 },
{ gTextureSignNintendoRed1, 0x02F7, 0x1000, 0x0 },
{ gTexture670AC8, 0x0FBF, 0x1000, 0x0 },
{ gTexture674354, 0x046F, 0x0800, 0x0 },
{ gTextureRoad0, 0x0300, 0x1000, 0x0 },
{ gTextureRoadFinish0, 0x0338, 0x1000, 0x0 },
{ gTexture67B9B0, 0x0225, 0x0800, 0x0 },
{ gTextureSignYoshi, 0x04DF, 0x1000, 0x0 },
{ gTextureCheckerboardBlueGray, 0x04A1, 0x1000, 0x0 },
{ gTextureSignShellShot0, 0x038C, 0x1000, 0x0 },
{ gTextureSignShellShot1, 0x0247, 0x1000, 0x0 },
{ gTextureSignKoopaAir0, 0x0360, 0x1000, 0x0 },
{ gTextureSignKoopaAir1, 0x0304, 0x1000, 0x0 },
{ 0x00000000, 0x0000, 0x0000, 0x0 },
};
const char *mario_raceway_dls[] = {
d_course_mario_raceway_dl_0,
d_course_mario_raceway_dl_1D0,
d_course_mario_raceway_dl_E8,
d_course_mario_raceway_dl_2C8,
d_course_mario_raceway_dl_3A8,
d_course_mario_raceway_dl_568,
d_course_mario_raceway_dl_478,
d_course_mario_raceway_dl_668,
d_course_mario_raceway_dl_750,
d_course_mario_raceway_dl_928,
d_course_mario_raceway_dl_828,
d_course_mario_raceway_dl_A00,
d_course_mario_raceway_dl_B08,
d_course_mario_raceway_dl_DC8,
d_course_mario_raceway_dl_C20,
d_course_mario_raceway_dl_F60,
d_course_mario_raceway_dl_10A8,
d_course_mario_raceway_dl_1408,
d_course_mario_raceway_dl_1210,
d_course_mario_raceway_dl_15C8,
d_course_mario_raceway_dl_1740,
d_course_mario_raceway_dl_1A30,
d_course_mario_raceway_dl_1850,
d_course_mario_raceway_dl_1B70,
d_course_mario_raceway_dl_1CF8,
d_course_mario_raceway_dl_1F68,
d_course_mario_raceway_dl_1DE0,
d_course_mario_raceway_dl_20A0,
d_course_mario_raceway_dl_21E8,
d_course_mario_raceway_dl_2418,
d_course_mario_raceway_dl_22E0,
d_course_mario_raceway_dl_2558,
d_course_mario_raceway_dl_2680,
d_course_mario_raceway_dl_28B0,
d_course_mario_raceway_dl_2790,
d_course_mario_raceway_dl_2A10,
d_course_mario_raceway_dl_2B40,
d_course_mario_raceway_dl_2DC0,
d_course_mario_raceway_dl_2C98,
d_course_mario_raceway_dl_2EF8,
d_course_mario_raceway_dl_3038,
d_course_mario_raceway_dl_32D8,
d_course_mario_raceway_dl_31F0,
d_course_mario_raceway_dl_3458,
d_course_mario_raceway_dl_35D0,
d_course_mario_raceway_dl_3830,
d_course_mario_raceway_dl_3748,
d_course_mario_raceway_dl_3960,
d_course_mario_raceway_dl_3AA0,
d_course_mario_raceway_dl_3D68,
d_course_mario_raceway_dl_3C08,
d_course_mario_raceway_dl_3EB8,
d_course_mario_raceway_dl_4038,
d_course_mario_raceway_dl_42A0,
d_course_mario_raceway_dl_4150,
d_course_mario_raceway_dl_43D8,
d_course_mario_raceway_dl_44F8,
d_course_mario_raceway_dl_4738,
d_course_mario_raceway_dl_4610,
d_course_mario_raceway_dl_4840,
d_course_mario_raceway_dl_4910,
d_course_mario_raceway_dl_4B78,
d_course_mario_raceway_dl_4A60,
d_course_mario_raceway_dl_4CD8,
d_course_mario_raceway_dl_4DC8,
d_course_mario_raceway_dl_4FF0,
d_course_mario_raceway_dl_4ED0,
d_course_mario_raceway_dl_5150,
const char* mario_raceway_dls[] = {
d_course_mario_raceway_dl_0, d_course_mario_raceway_dl_1D0, d_course_mario_raceway_dl_E8,
d_course_mario_raceway_dl_2C8, d_course_mario_raceway_dl_3A8, d_course_mario_raceway_dl_568,
d_course_mario_raceway_dl_478, d_course_mario_raceway_dl_668, d_course_mario_raceway_dl_750,
d_course_mario_raceway_dl_928, d_course_mario_raceway_dl_828, d_course_mario_raceway_dl_A00,
d_course_mario_raceway_dl_B08, d_course_mario_raceway_dl_DC8, d_course_mario_raceway_dl_C20,
d_course_mario_raceway_dl_F60, d_course_mario_raceway_dl_10A8, d_course_mario_raceway_dl_1408,
d_course_mario_raceway_dl_1210, d_course_mario_raceway_dl_15C8, d_course_mario_raceway_dl_1740,
d_course_mario_raceway_dl_1A30, d_course_mario_raceway_dl_1850, d_course_mario_raceway_dl_1B70,
d_course_mario_raceway_dl_1CF8, d_course_mario_raceway_dl_1F68, d_course_mario_raceway_dl_1DE0,
d_course_mario_raceway_dl_20A0, d_course_mario_raceway_dl_21E8, d_course_mario_raceway_dl_2418,
d_course_mario_raceway_dl_22E0, d_course_mario_raceway_dl_2558, d_course_mario_raceway_dl_2680,
d_course_mario_raceway_dl_28B0, d_course_mario_raceway_dl_2790, d_course_mario_raceway_dl_2A10,
d_course_mario_raceway_dl_2B40, d_course_mario_raceway_dl_2DC0, d_course_mario_raceway_dl_2C98,
d_course_mario_raceway_dl_2EF8, d_course_mario_raceway_dl_3038, d_course_mario_raceway_dl_32D8,
d_course_mario_raceway_dl_31F0, d_course_mario_raceway_dl_3458, d_course_mario_raceway_dl_35D0,
d_course_mario_raceway_dl_3830, d_course_mario_raceway_dl_3748, d_course_mario_raceway_dl_3960,
d_course_mario_raceway_dl_3AA0, d_course_mario_raceway_dl_3D68, d_course_mario_raceway_dl_3C08,
d_course_mario_raceway_dl_3EB8, d_course_mario_raceway_dl_4038, d_course_mario_raceway_dl_42A0,
d_course_mario_raceway_dl_4150, d_course_mario_raceway_dl_43D8, d_course_mario_raceway_dl_44F8,
d_course_mario_raceway_dl_4738, d_course_mario_raceway_dl_4610, d_course_mario_raceway_dl_4840,
d_course_mario_raceway_dl_4910, d_course_mario_raceway_dl_4B78, d_course_mario_raceway_dl_4A60,
d_course_mario_raceway_dl_4CD8, d_course_mario_raceway_dl_4DC8, d_course_mario_raceway_dl_4FF0,
d_course_mario_raceway_dl_4ED0, d_course_mario_raceway_dl_5150,
};

File diff suppressed because it is too large Load Diff

View File

@ -3,128 +3,67 @@
#include <assets/moo_moo_farm_data.h>
const course_texture moo_moo_farm_textures[] = {
{gTextureWoodDoor0, 0x0294, 0x1000, 0x0},
{gTextureGrass2, 0x0415, 0x0800, 0x0},
{gTexture64AF50, 0x0140, 0x0800, 0x0},
{gTexture64B090, 0x0365, 0x0800, 0x0},
{gTexture64B54C, 0x038C, 0x0800, 0x0},
{gTexture64B3F8, 0x0153, 0x0800, 0x0},
{gTextureSignNintendo0, 0x0541, 0x1000, 0x0},
{gTextureSignNintendo1, 0x0512, 0x1000, 0x0},
{gTexture6684F8, 0x010D, 0x0800, 0x0},
{gTextureSignLuigis0, 0x0287, 0x1000, 0x0},
{gTextureSignLuigis1, 0x02AF, 0x1000, 0x0},
{gTextureSignMarioStar0, 0x02D2, 0x1000, 0x0},
{gTextureSignMarioStar1, 0x02B1, 0x1000, 0x0},
{gTexture674D58, 0x030C, 0x1000, 0x0},
{gTexture675064, 0x01BB, 0x0800, 0x0},
{gTexture675220, 0x0212, 0x0800, 0x0},
{gTexture6775EC, 0x0233, 0x1000, 0x0},
{gTexture683314, 0x02DC, 0x1000, 0x0},
{gTexture68CDA0, 0x0110, 0x0800, 0x0},
{gTexture6442D4, 0x0138, 0x0800, 0x0},
{gTexture64440C, 0x029D, 0x1000, 0x0},
{gTexture6446AC, 0x0116, 0x0800, 0x0},
{gTextureMooMooFarmSignLeft, 0x0A66, 0x1000, 0x0},
{gTextureMooMooFarmSignRight, 0x0A64, 0x1000, 0x0},
{gTexture64ACAC, 0x02A3, 0x0800, 0x0},
{gTexture66D698, 0x0370, 0x0800, 0x0},
{gTexture66EBF0, 0x0146, 0x0800, 0x0},
{gTextureWheelSteamEngineReal, 0x022F, 0x1000, 0x0},
{0x00000000, 0x0000, 0x0000, 0x0},
{ gTextureWoodDoor0, 0x0294, 0x1000, 0x0 },
{ gTextureGrass2, 0x0415, 0x0800, 0x0 },
{ gTexture64AF50, 0x0140, 0x0800, 0x0 },
{ gTexture64B090, 0x0365, 0x0800, 0x0 },
{ gTexture64B54C, 0x038C, 0x0800, 0x0 },
{ gTexture64B3F8, 0x0153, 0x0800, 0x0 },
{ gTextureSignNintendo0, 0x0541, 0x1000, 0x0 },
{ gTextureSignNintendo1, 0x0512, 0x1000, 0x0 },
{ gTexture6684F8, 0x010D, 0x0800, 0x0 },
{ gTextureSignLuigis0, 0x0287, 0x1000, 0x0 },
{ gTextureSignLuigis1, 0x02AF, 0x1000, 0x0 },
{ gTextureSignMarioStar0, 0x02D2, 0x1000, 0x0 },
{ gTextureSignMarioStar1, 0x02B1, 0x1000, 0x0 },
{ gTexture674D58, 0x030C, 0x1000, 0x0 },
{ gTexture675064, 0x01BB, 0x0800, 0x0 },
{ gTexture675220, 0x0212, 0x0800, 0x0 },
{ gTexture6775EC, 0x0233, 0x1000, 0x0 },
{ gTexture683314, 0x02DC, 0x1000, 0x0 },
{ gTexture68CDA0, 0x0110, 0x0800, 0x0 },
{ gTexture6442D4, 0x0138, 0x0800, 0x0 },
{ gTexture64440C, 0x029D, 0x1000, 0x0 },
{ gTexture6446AC, 0x0116, 0x0800, 0x0 },
{ gTextureMooMooFarmSignLeft, 0x0A66, 0x1000, 0x0 },
{ gTextureMooMooFarmSignRight, 0x0A64, 0x1000, 0x0 },
{ gTexture64ACAC, 0x02A3, 0x0800, 0x0 },
{ gTexture66D698, 0x0370, 0x0800, 0x0 },
{ gTexture66EBF0, 0x0146, 0x0800, 0x0 },
{ gTextureWheelSteamEngineReal, 0x022F, 0x1000, 0x0 },
{ 0x00000000, 0x0000, 0x0000, 0x0 },
};
const Gfx *moo_moo_farm_dls[] = {
d_course_moo_moo_farm_dl_88,
d_course_moo_moo_farm_dl_598,
d_course_moo_moo_farm_dl_338,
d_course_moo_moo_farm_dl_8A0,
d_course_moo_moo_farm_dl_B00,
d_course_moo_moo_farm_dl_FE0,
d_course_moo_moo_farm_dl_D70,
d_course_moo_moo_farm_dl_12B8,
d_course_moo_moo_farm_dl_1530,
d_course_moo_moo_farm_dl_1A20,
d_course_moo_moo_farm_dl_1790,
d_course_moo_moo_farm_dl_1D00,
d_course_moo_moo_farm_dl_1F58,
d_course_moo_moo_farm_dl_2470,
d_course_moo_moo_farm_dl_2190,
d_course_moo_moo_farm_dl_27A8,
d_course_moo_moo_farm_dl_2A10,
d_course_moo_moo_farm_dl_2F20,
d_course_moo_moo_farm_dl_2C38,
d_course_moo_moo_farm_dl_3238,
d_course_moo_moo_farm_dl_34A0,
d_course_moo_moo_farm_dl_39F8,
d_course_moo_moo_farm_dl_36B8,
d_course_moo_moo_farm_dl_3CB0,
d_course_moo_moo_farm_dl_3EB8,
d_course_moo_moo_farm_dl_4428,
d_course_moo_moo_farm_dl_4098,
d_course_moo_moo_farm_dl_46D8,
d_course_moo_moo_farm_dl_4910,
d_course_moo_moo_farm_dl_4E00,
d_course_moo_moo_farm_dl_4AD0,
d_course_moo_moo_farm_dl_5040,
d_course_moo_moo_farm_dl_5290,
d_course_moo_moo_farm_dl_5758,
d_course_moo_moo_farm_dl_5458,
d_course_moo_moo_farm_dl_5990,
d_course_moo_moo_farm_dl_5BF8,
d_course_moo_moo_farm_dl_60A8,
d_course_moo_moo_farm_dl_5DF0,
d_course_moo_moo_farm_dl_62D0,
d_course_moo_moo_farm_dl_6548,
d_course_moo_moo_farm_dl_6A70,
d_course_moo_moo_farm_dl_6778,
d_course_moo_moo_farm_dl_6CB8,
d_course_moo_moo_farm_dl_6FF0,
d_course_moo_moo_farm_dl_74C8,
d_course_moo_moo_farm_dl_7218,
d_course_moo_moo_farm_dl_7718,
d_course_moo_moo_farm_dl_7A80,
d_course_moo_moo_farm_dl_7F78,
d_course_moo_moo_farm_dl_7CD8,
d_course_moo_moo_farm_dl_81E8,
d_course_moo_moo_farm_dl_84D0,
d_course_moo_moo_farm_dl_89A0,
d_course_moo_moo_farm_dl_8728,
d_course_moo_moo_farm_dl_8C00,
d_course_moo_moo_farm_dl_8F18,
d_course_moo_moo_farm_dl_93D0,
d_course_moo_moo_farm_dl_9178,
d_course_moo_moo_farm_dl_9640,
d_course_moo_moo_farm_dl_9938,
d_course_moo_moo_farm_dl_9DF8,
d_course_moo_moo_farm_dl_9BB0,
d_course_moo_moo_farm_dl_A010,
d_course_moo_moo_farm_dl_A2C0,
d_course_moo_moo_farm_dl_A7B0,
d_course_moo_moo_farm_dl_A568,
d_course_moo_moo_farm_dl_A9C8,
d_course_moo_moo_farm_dl_ACB0,
d_course_moo_moo_farm_dl_B230,
d_course_moo_moo_farm_dl_B020,
d_course_moo_moo_farm_dl_B478,
d_course_moo_moo_farm_dl_B798,
d_course_moo_moo_farm_dl_BCE8,
d_course_moo_moo_farm_dl_BB00,
d_course_moo_moo_farm_dl_BF10,
d_course_moo_moo_farm_dl_C180,
d_course_moo_moo_farm_dl_C6D8,
d_course_moo_moo_farm_dl_C4F8,
d_course_moo_moo_farm_dl_C950,
d_course_moo_moo_farm_dl_CBC8,
d_course_moo_moo_farm_dl_D140,
d_course_moo_moo_farm_dl_CF58,
d_course_moo_moo_farm_dl_D408,
d_course_moo_moo_farm_dl_D6B0,
d_course_moo_moo_farm_dl_DC70,
d_course_moo_moo_farm_dl_DA50,
d_course_moo_moo_farm_dl_DF60,
d_course_moo_moo_farm_dl_E1D8,
d_course_moo_moo_farm_dl_E708,
d_course_moo_moo_farm_dl_E4B0,
d_course_moo_moo_farm_dl_EA18,
const Gfx* moo_moo_farm_dls[] = {
d_course_moo_moo_farm_dl_88, d_course_moo_moo_farm_dl_598, d_course_moo_moo_farm_dl_338,
d_course_moo_moo_farm_dl_8A0, d_course_moo_moo_farm_dl_B00, d_course_moo_moo_farm_dl_FE0,
d_course_moo_moo_farm_dl_D70, d_course_moo_moo_farm_dl_12B8, d_course_moo_moo_farm_dl_1530,
d_course_moo_moo_farm_dl_1A20, d_course_moo_moo_farm_dl_1790, d_course_moo_moo_farm_dl_1D00,
d_course_moo_moo_farm_dl_1F58, d_course_moo_moo_farm_dl_2470, d_course_moo_moo_farm_dl_2190,
d_course_moo_moo_farm_dl_27A8, d_course_moo_moo_farm_dl_2A10, d_course_moo_moo_farm_dl_2F20,
d_course_moo_moo_farm_dl_2C38, d_course_moo_moo_farm_dl_3238, d_course_moo_moo_farm_dl_34A0,
d_course_moo_moo_farm_dl_39F8, d_course_moo_moo_farm_dl_36B8, d_course_moo_moo_farm_dl_3CB0,
d_course_moo_moo_farm_dl_3EB8, d_course_moo_moo_farm_dl_4428, d_course_moo_moo_farm_dl_4098,
d_course_moo_moo_farm_dl_46D8, d_course_moo_moo_farm_dl_4910, d_course_moo_moo_farm_dl_4E00,
d_course_moo_moo_farm_dl_4AD0, d_course_moo_moo_farm_dl_5040, d_course_moo_moo_farm_dl_5290,
d_course_moo_moo_farm_dl_5758, d_course_moo_moo_farm_dl_5458, d_course_moo_moo_farm_dl_5990,
d_course_moo_moo_farm_dl_5BF8, d_course_moo_moo_farm_dl_60A8, d_course_moo_moo_farm_dl_5DF0,
d_course_moo_moo_farm_dl_62D0, d_course_moo_moo_farm_dl_6548, d_course_moo_moo_farm_dl_6A70,
d_course_moo_moo_farm_dl_6778, d_course_moo_moo_farm_dl_6CB8, d_course_moo_moo_farm_dl_6FF0,
d_course_moo_moo_farm_dl_74C8, d_course_moo_moo_farm_dl_7218, d_course_moo_moo_farm_dl_7718,
d_course_moo_moo_farm_dl_7A80, d_course_moo_moo_farm_dl_7F78, d_course_moo_moo_farm_dl_7CD8,
d_course_moo_moo_farm_dl_81E8, d_course_moo_moo_farm_dl_84D0, d_course_moo_moo_farm_dl_89A0,
d_course_moo_moo_farm_dl_8728, d_course_moo_moo_farm_dl_8C00, d_course_moo_moo_farm_dl_8F18,
d_course_moo_moo_farm_dl_93D0, d_course_moo_moo_farm_dl_9178, d_course_moo_moo_farm_dl_9640,
d_course_moo_moo_farm_dl_9938, d_course_moo_moo_farm_dl_9DF8, d_course_moo_moo_farm_dl_9BB0,
d_course_moo_moo_farm_dl_A010, d_course_moo_moo_farm_dl_A2C0, d_course_moo_moo_farm_dl_A7B0,
d_course_moo_moo_farm_dl_A568, d_course_moo_moo_farm_dl_A9C8, d_course_moo_moo_farm_dl_ACB0,
d_course_moo_moo_farm_dl_B230, d_course_moo_moo_farm_dl_B020, d_course_moo_moo_farm_dl_B478,
d_course_moo_moo_farm_dl_B798, d_course_moo_moo_farm_dl_BCE8, d_course_moo_moo_farm_dl_BB00,
d_course_moo_moo_farm_dl_BF10, d_course_moo_moo_farm_dl_C180, d_course_moo_moo_farm_dl_C6D8,
d_course_moo_moo_farm_dl_C4F8, d_course_moo_moo_farm_dl_C950, d_course_moo_moo_farm_dl_CBC8,
d_course_moo_moo_farm_dl_D140, d_course_moo_moo_farm_dl_CF58, d_course_moo_moo_farm_dl_D408,
d_course_moo_moo_farm_dl_D6B0, d_course_moo_moo_farm_dl_DC70, d_course_moo_moo_farm_dl_DA50,
d_course_moo_moo_farm_dl_DF60, d_course_moo_moo_farm_dl_E1D8, d_course_moo_moo_farm_dl_E708,
d_course_moo_moo_farm_dl_E4B0, d_course_moo_moo_farm_dl_EA18,
};

View File

@ -3,97 +3,45 @@
#include <assets/rainbow_road_data.h>
const course_texture rainbow_road_textures[] = {
{gTextureStarOutline, 0x037A, 0x0800, 0x0},
{gTexture67A1B8, 0x01B7, 0x0800, 0x0},
{gTextureCheckerboardBlackWhite, 0x0107, 0x0800, 0x0},
{gTexture662A34, 0x0106, 0x0800, 0x0},
{gTextureRainbow, 0x025D, 0x1000, 0x0},
{0x00000000, 0x0000, 0x0000, 0x0},
{ gTextureStarOutline, 0x037A, 0x0800, 0x0 },
{ gTexture67A1B8, 0x01B7, 0x0800, 0x0 },
{ gTextureCheckerboardBlackWhite, 0x0107, 0x0800, 0x0 },
{ gTexture662A34, 0x0106, 0x0800, 0x0 },
{ gTextureRainbow, 0x025D, 0x1000, 0x0 },
{ 0x00000000, 0x0000, 0x0000, 0x0 },
};
Gfx *rainbow_road_dls[] = {
d_course_rainbow_road_dl_D8, d_course_rainbow_road_dl_210,
d_course_rainbow_road_dl_178, d_course_rainbow_road_dl_288,
d_course_rainbow_road_dl_338, d_course_rainbow_road_dl_4A0,
d_course_rainbow_road_dl_3D0, d_course_rainbow_road_dl_528,
d_course_rainbow_road_dl_5F8, d_course_rainbow_road_dl_6E0,
d_course_rainbow_road_dl_658, d_course_rainbow_road_dl_730,
d_course_rainbow_road_dl_7A8, d_course_rainbow_road_dl_880,
d_course_rainbow_road_dl_7F8, d_course_rainbow_road_dl_8E0,
d_course_rainbow_road_dl_958, d_course_rainbow_road_dl_A70,
d_course_rainbow_road_dl_9C8, d_course_rainbow_road_dl_B08,
d_course_rainbow_road_dl_B70, d_course_rainbow_road_dl_C70,
d_course_rainbow_road_dl_BF0, d_course_rainbow_road_dl_D10,
d_course_rainbow_road_dl_D80, d_course_rainbow_road_dl_E98,
d_course_rainbow_road_dl_E08, d_course_rainbow_road_dl_F50,
d_course_rainbow_road_dl_FB0, d_course_rainbow_road_dl_10A8,
d_course_rainbow_road_dl_1030, d_course_rainbow_road_dl_1150,
d_course_rainbow_road_dl_1198, d_course_rainbow_road_dl_12A0,
d_course_rainbow_road_dl_1228, d_course_rainbow_road_dl_1340,
d_course_rainbow_road_dl_13F0, d_course_rainbow_road_dl_14E8,
d_course_rainbow_road_dl_1488, d_course_rainbow_road_dl_1530,
d_course_rainbow_road_dl_15D0, d_course_rainbow_road_dl_16C0,
d_course_rainbow_road_dl_1678, d_course_rainbow_road_dl_1738,
d_course_rainbow_road_dl_17D0, d_course_rainbow_road_dl_18D0,
d_course_rainbow_road_dl_1878, d_course_rainbow_road_dl_1948,
Gfx* rainbow_road_dls[] = {
d_course_rainbow_road_dl_D8, d_course_rainbow_road_dl_210, d_course_rainbow_road_dl_178,
d_course_rainbow_road_dl_288, d_course_rainbow_road_dl_338, d_course_rainbow_road_dl_4A0,
d_course_rainbow_road_dl_3D0, d_course_rainbow_road_dl_528, d_course_rainbow_road_dl_5F8,
d_course_rainbow_road_dl_6E0, d_course_rainbow_road_dl_658, d_course_rainbow_road_dl_730,
d_course_rainbow_road_dl_7A8, d_course_rainbow_road_dl_880, d_course_rainbow_road_dl_7F8,
d_course_rainbow_road_dl_8E0, d_course_rainbow_road_dl_958, d_course_rainbow_road_dl_A70,
d_course_rainbow_road_dl_9C8, d_course_rainbow_road_dl_B08, d_course_rainbow_road_dl_B70,
d_course_rainbow_road_dl_C70, d_course_rainbow_road_dl_BF0, d_course_rainbow_road_dl_D10,
d_course_rainbow_road_dl_D80, d_course_rainbow_road_dl_E98, d_course_rainbow_road_dl_E08,
d_course_rainbow_road_dl_F50, d_course_rainbow_road_dl_FB0, d_course_rainbow_road_dl_10A8,
d_course_rainbow_road_dl_1030, d_course_rainbow_road_dl_1150, d_course_rainbow_road_dl_1198,
d_course_rainbow_road_dl_12A0, d_course_rainbow_road_dl_1228, d_course_rainbow_road_dl_1340,
d_course_rainbow_road_dl_13F0, d_course_rainbow_road_dl_14E8, d_course_rainbow_road_dl_1488,
d_course_rainbow_road_dl_1530, d_course_rainbow_road_dl_15D0, d_course_rainbow_road_dl_16C0,
d_course_rainbow_road_dl_1678, d_course_rainbow_road_dl_1738, d_course_rainbow_road_dl_17D0,
d_course_rainbow_road_dl_18D0, d_course_rainbow_road_dl_1878, d_course_rainbow_road_dl_1948,
};
u64 d_course_rainbow_road_unk_double = 1;
u64 d_course_rainbow_road_unk_double2 = 1;
s16 d_rainbow_road_chomp_jaw_animation[] = {
0x0000, 0x3fff,
0x9602, 0x9483,
0x90d2, 0x8c1b,
0x878e, 0x845a,
0x83ac, 0x88ae,
0x9264, 0x9bc5,
0x9fc9, 0x9c7c,
0x950f, 0x8c27,
0x846d, 0x808a,
0x8348, 0x8abb,
0x9273, 0x9602,
0x6fb2, 0x70c6,
0x7369, 0x76ba,
0x79d6, 0x7bdd,
0x7beb, 0x7752,
0x6ed7, 0x66ca,
0x6379, 0x6692,
0x6d54, 0x756c,
0x7c87, 0x8054,
0x7e7c, 0x78b0,
0x728d, 0x6fb2,
0x9602, 0x9483,
0x90d2, 0x8c1b,
0x878e, 0x845a,
0x83ac, 0x88ae,
0x9264, 0x9bc5,
0x9fc9, 0x9c7c,
0x950f, 0x8c27,
0x846d, 0x808a,
0x8348, 0x8abb,
0x9273, 0x9602,
0x6fb2, 0x70c6,
0x7369, 0x76ba,
0x79d6, 0x7bdd,
0x7beb, 0x7752,
0x6ed7, 0x66ca,
0x6379, 0x6692,
0x6d54, 0x756c,
0x7c87, 0x8054,
0x7e7c, 0x78b0,
0x728d, 0x6fb2,
0x6fb2, 0x70c6,
0x7369, 0x76ba,
0x79d6, 0x7bdd,
0x7beb, 0x7752,
0x6ed7, 0x66ca,
0x6379, 0x6692,
0x6d54, 0x756c,
0x7c87, 0x8054,
0x7e7c, 0x78b0,
0x728d, 0x6fb2,
0x3fff, 0x0000,
0x0000, 0x3fff, 0x9602, 0x9483, 0x90d2, 0x8c1b, 0x878e, 0x845a, 0x83ac, 0x88ae, 0x9264, 0x9bc5, 0x9fc9,
0x9c7c, 0x950f, 0x8c27, 0x846d, 0x808a, 0x8348, 0x8abb, 0x9273, 0x9602, 0x6fb2, 0x70c6, 0x7369, 0x76ba,
0x79d6, 0x7bdd, 0x7beb, 0x7752, 0x6ed7, 0x66ca, 0x6379, 0x6692, 0x6d54, 0x756c, 0x7c87, 0x8054, 0x7e7c,
0x78b0, 0x728d, 0x6fb2, 0x9602, 0x9483, 0x90d2, 0x8c1b, 0x878e, 0x845a, 0x83ac, 0x88ae, 0x9264, 0x9bc5,
0x9fc9, 0x9c7c, 0x950f, 0x8c27, 0x846d, 0x808a, 0x8348, 0x8abb, 0x9273, 0x9602, 0x6fb2, 0x70c6, 0x7369,
0x76ba, 0x79d6, 0x7bdd, 0x7beb, 0x7752, 0x6ed7, 0x66ca, 0x6379, 0x6692, 0x6d54, 0x756c, 0x7c87, 0x8054,
0x7e7c, 0x78b0, 0x728d, 0x6fb2, 0x6fb2, 0x70c6, 0x7369, 0x76ba, 0x79d6, 0x7bdd, 0x7beb, 0x7752, 0x6ed7,
0x66ca, 0x6379, 0x6692, 0x6d54, 0x756c, 0x7c87, 0x8054, 0x7e7c, 0x78b0, 0x728d, 0x6fb2, 0x3fff, 0x0000,
};
// 0x06016098
@ -142,104 +90,53 @@ AnimationLimbVector d_rainbow_road_unk1[] = {
// 0x060160F8
Animation d_rainbow_road_unk2 = {
0x00010000,
0x00000000,
0x0014,
0x0007,
d_rainbow_road_chomp_jaw_animation,
d_rainbow_road_unk1,
0x00010000, 0x00000000, 0x0014, 0x0007, d_rainbow_road_chomp_jaw_animation, d_rainbow_road_unk1,
};
// 0x0601610C
Animation *d_rainbow_road_unk3[] = {
Animation* d_rainbow_road_unk3[] = {
&d_rainbow_road_unk2,
};
// 0x06016110
uintptr_t d_rainbow_road_unk4[] = {
0x00000001,
0x00000002,
0x00000001, 0x00000002,
0x00000000,
0x00000007,
0x00000000,
0x00000000,
0x00000000,
0x0000023a,
0x00000000,
0x00000000, 0x00000007, 0x00000000, 0x00000000,
0x00000000, 0x0000023a, 0x00000000,
0x00000001,
0x00000002,
0x00000001, 0x00000002,
0x00000000,
0x00000007,
0x00000000,
d_course_rainbow_road_dl_15550,
0x00000000,
0x00000000,
0x00000000,
0x00000000, 0x00000007, 0x00000000, d_course_rainbow_road_dl_15550,
0x00000000, 0x00000000, 0x00000000,
0x00000000,
0x00000007,
0x00000000,
d_course_rainbow_road_dl_151A8,
0x00000000,
0x00000000,
0x00000000,
0x00000000, 0x00000007, 0x00000000, d_course_rainbow_road_dl_151A8,
0x00000000, 0x00000000, 0x00000000,
0x00000002,
0x00000002,
0x00000002, 0x00000002,
0x00000000,
0x00000007,
0x00000000,
0x00000000,
0x00000000,
0x0000023a,
0x00000000,
0x00000000, 0x00000007, 0x00000000, 0x00000000,
0x00000000, 0x0000023a, 0x00000000,
0x00000001,
0x00000002,
0x00000001, 0x00000002,
0x00000000,
0x00000007,
0x00000000,
d_course_rainbow_road_dl_15C68,
0x00000000,
0x00000000,
0x00000000,
0x00000000, 0x00000007, 0x00000000, d_course_rainbow_road_dl_15C68,
0x00000000, 0x00000000, 0x00000000,
0x00000000,
0x00000007,
0x00000000,
d_course_rainbow_road_dl_158C0,
0x00000000,
0x00000000,
0x00000000,
0x00000000, 0x00000007, 0x00000000, d_course_rainbow_road_dl_158C0,
0x00000000, 0x00000000, 0x00000000,
0x00000000,
0x00000007,
0x00000000,
d_course_rainbow_road_dl_15F18,
0x00000000,
0x00000000,
0x00000000,
0x00000000, 0x00000007, 0x00000000, d_course_rainbow_road_dl_15F18,
0x00000000, 0x00000000, 0x00000000,
0x00000002,
0x00000002,
0x00000002, 0x00000002,
0x00000002,
0x00000002,
0x00000002, 0x00000002,
0x00000003,
0x00000002,
0x00000003, 0x00000002,
};
// No idea what this stuff is
u32 d_rainbow_road_unk5[] = {
0x00000000,
0x00000000,
0x00000002,
0x00000000,
0x00000002,
0x00000000, 0x00000000, 0x00000002, 0x00000000, 0x00000002,
};

View File

@ -3,183 +3,95 @@
#include <assets/royal_raceway_data.h>
const course_texture royal_raceway_textures[] = {
{gTexture64619C, 0x0124, 0x0800, 0x0},
{gTexture645134, 0x052C, 0x0800, 0x0},
{gTextureWoodDoor1, 0x0903, 0x1000, 0x0},
{gTexture64BB60, 0x0169, 0x0800, 0x0},
{gTextureGrass3, 0x0372, 0x0800, 0x0},
{gTexture64F9E8, 0x020B, 0x1000, 0x0},
{gTextureFlagRed, 0x019E, 0x0800, 0x0},
{gTextureCrownJewelBlue, 0x0301, 0x0800, 0x0},
{gTextureCrown, 0x0106, 0x0800, 0x0},
{gTextureCrownJewelPink, 0x0313, 0x0800, 0x0},
{gTextureSignKoopaAir0, 0x0360, 0x1000, 0x0},
{gTextureSignKoopaAir1, 0x0304, 0x1000, 0x0},
{gTexture6684F8, 0x010D, 0x0800, 0x0},
{gTextureSignLuigis0, 0x0287, 0x1000, 0x0},
{gTextureSignLuigis1, 0x02AF, 0x1000, 0x0},
{gTextureSignMarioStar0, 0x02D2, 0x1000, 0x0},
{gTextureSignMarioStar1, 0x02B1, 0x1000, 0x0},
{gTexture66CA98, 0x02C9, 0x0800, 0x0},
{gTextureCheckerboardPink, 0x0157, 0x0800, 0x0},
{gTexture670AC8, 0x0FBF, 0x1000, 0x0},
{gTextureRoad0, 0x0300, 0x1000, 0x0},
{gTextureRoadFinish0, 0x0338, 0x1000, 0x0},
{gTextureSignYoshi, 0x04DF, 0x1000, 0x0},
{gTextureCheckerboardBlueGray, 0x04A1, 0x1000, 0x0},
{gTextureCastleBricks, 0x0B33, 0x1000, 0x0},
{gTextureCastleBridge, 0x0428, 0x0800, 0x0},
{gTextureGrass8, 0x02CB, 0x0800, 0x0},
{gTextureGrass9, 0x0421, 0x0800, 0x0},
{gTexture6646B8, 0x0298, 0x1000, 0x0},
{gTexture664408, 0x02AE, 0x1000, 0x0},
{gTextureBricksRed, 0x0C55, 0x1000, 0x0},
{gTexture665C0C, 0x059D, 0x0800, 0x0},
{gTexture6661AC, 0x01F7, 0x0800, 0x0},
{gTexture6663A4, 0x05F6, 0x0800, 0x0},
{gTexture667BAC, 0x067A, 0x0800, 0x0},
{gTextureFlagRed2, 0x0186, 0x0800, 0x0},
{gTexture66DB60, 0x01D6, 0x0800, 0x0},
{gTextureStainglassPeach0, 0x0ED1, 0x1000, 0x0},
{gTextureStainglassPeach1, 0x0DA9, 0x1000, 0x0},
{gTextureFencePostWooden, 0x083D, 0x1000, 0x0},
{gTexture648508, 0x01FE, 0x1000, 0x0},
{gTexture6449D4, 0x075D, 0x0800, 0x0},
{gTexture67FE0C, 0x02DE, 0x0800, 0x0},
{0x00000000, 0x0000, 0x0000, 0x0},
{ gTexture64619C, 0x0124, 0x0800, 0x0 },
{ gTexture645134, 0x052C, 0x0800, 0x0 },
{ gTextureWoodDoor1, 0x0903, 0x1000, 0x0 },
{ gTexture64BB60, 0x0169, 0x0800, 0x0 },
{ gTextureGrass3, 0x0372, 0x0800, 0x0 },
{ gTexture64F9E8, 0x020B, 0x1000, 0x0 },
{ gTextureFlagRed, 0x019E, 0x0800, 0x0 },
{ gTextureCrownJewelBlue, 0x0301, 0x0800, 0x0 },
{ gTextureCrown, 0x0106, 0x0800, 0x0 },
{ gTextureCrownJewelPink, 0x0313, 0x0800, 0x0 },
{ gTextureSignKoopaAir0, 0x0360, 0x1000, 0x0 },
{ gTextureSignKoopaAir1, 0x0304, 0x1000, 0x0 },
{ gTexture6684F8, 0x010D, 0x0800, 0x0 },
{ gTextureSignLuigis0, 0x0287, 0x1000, 0x0 },
{ gTextureSignLuigis1, 0x02AF, 0x1000, 0x0 },
{ gTextureSignMarioStar0, 0x02D2, 0x1000, 0x0 },
{ gTextureSignMarioStar1, 0x02B1, 0x1000, 0x0 },
{ gTexture66CA98, 0x02C9, 0x0800, 0x0 },
{ gTextureCheckerboardPink, 0x0157, 0x0800, 0x0 },
{ gTexture670AC8, 0x0FBF, 0x1000, 0x0 },
{ gTextureRoad0, 0x0300, 0x1000, 0x0 },
{ gTextureRoadFinish0, 0x0338, 0x1000, 0x0 },
{ gTextureSignYoshi, 0x04DF, 0x1000, 0x0 },
{ gTextureCheckerboardBlueGray, 0x04A1, 0x1000, 0x0 },
{ gTextureCastleBricks, 0x0B33, 0x1000, 0x0 },
{ gTextureCastleBridge, 0x0428, 0x0800, 0x0 },
{ gTextureGrass8, 0x02CB, 0x0800, 0x0 },
{ gTextureGrass9, 0x0421, 0x0800, 0x0 },
{ gTexture6646B8, 0x0298, 0x1000, 0x0 },
{ gTexture664408, 0x02AE, 0x1000, 0x0 },
{ gTextureBricksRed, 0x0C55, 0x1000, 0x0 },
{ gTexture665C0C, 0x059D, 0x0800, 0x0 },
{ gTexture6661AC, 0x01F7, 0x0800, 0x0 },
{ gTexture6663A4, 0x05F6, 0x0800, 0x0 },
{ gTexture667BAC, 0x067A, 0x0800, 0x0 },
{ gTextureFlagRed2, 0x0186, 0x0800, 0x0 },
{ gTexture66DB60, 0x01D6, 0x0800, 0x0 },
{ gTextureStainglassPeach0, 0x0ED1, 0x1000, 0x0 },
{ gTextureStainglassPeach1, 0x0DA9, 0x1000, 0x0 },
{ gTextureFencePostWooden, 0x083D, 0x1000, 0x0 },
{ gTexture648508, 0x01FE, 0x1000, 0x0 },
{ gTexture6449D4, 0x075D, 0x0800, 0x0 },
{ gTexture67FE0C, 0x02DE, 0x0800, 0x0 },
{ 0x00000000, 0x0000, 0x0000, 0x0 },
};
const Gfx *royal_raceway_dls[] = {
d_course_royal_raceway_dl_0,
d_course_royal_raceway_dl_360,
d_course_royal_raceway_dl_258,
d_course_royal_raceway_dl_470,
d_course_royal_raceway_dl_6D0,
d_course_royal_raceway_dl_A48,
d_course_royal_raceway_dl_8E0,
d_course_royal_raceway_dl_B40,
d_course_royal_raceway_dl_DA0,
d_course_royal_raceway_dl_1180,
d_course_royal_raceway_dl_F40,
d_course_royal_raceway_dl_12C0,
d_course_royal_raceway_dl_1538,
d_course_royal_raceway_dl_1850,
d_course_royal_raceway_dl_1610,
d_course_royal_raceway_dl_19B0,
d_course_royal_raceway_dl_1BB8,
d_course_royal_raceway_dl_1E88,
d_course_royal_raceway_dl_1C40,
d_course_royal_raceway_dl_2018,
d_course_royal_raceway_dl_21A8,
d_course_royal_raceway_dl_2428,
d_course_royal_raceway_dl_2210,
d_course_royal_raceway_dl_25F0,
d_course_royal_raceway_dl_26F0,
d_course_royal_raceway_dl_29A0,
d_course_royal_raceway_dl_27B8,
d_course_royal_raceway_dl_2B78,
d_course_royal_raceway_dl_2C20,
d_course_royal_raceway_dl_2FE0,
d_course_royal_raceway_dl_2DD0,
d_course_royal_raceway_dl_31F8,
d_course_royal_raceway_dl_33B0,
d_course_royal_raceway_dl_3748,
d_course_royal_raceway_dl_3580,
d_course_royal_raceway_dl_3960,
d_course_royal_raceway_dl_3AD8,
d_course_royal_raceway_dl_3D38,
d_course_royal_raceway_dl_3BA8,
d_course_royal_raceway_dl_3ED8,
d_course_royal_raceway_dl_3FA0,
d_course_royal_raceway_dl_41D8,
d_course_royal_raceway_dl_4048,
d_course_royal_raceway_dl_4380,
d_course_royal_raceway_dl_4438,
d_course_royal_raceway_dl_45A0,
d_course_royal_raceway_dl_44C0,
d_course_royal_raceway_dl_46A0,
d_course_royal_raceway_dl_4750,
d_course_royal_raceway_dl_4930,
d_course_royal_raceway_dl_4800,
d_course_royal_raceway_dl_4A38,
d_course_royal_raceway_dl_4AE0,
d_course_royal_raceway_dl_4D00,
d_course_royal_raceway_dl_4BA8,
d_course_royal_raceway_dl_4DF8,
d_course_royal_raceway_dl_4EC0,
d_course_royal_raceway_dl_50F0,
d_course_royal_raceway_dl_4F80,
d_course_royal_raceway_dl_51D0,
d_course_royal_raceway_dl_52F0,
d_course_royal_raceway_dl_54F8,
d_course_royal_raceway_dl_53B8,
d_course_royal_raceway_dl_5598,
d_course_royal_raceway_dl_56C0,
d_course_royal_raceway_dl_5890,
d_course_royal_raceway_dl_5758,
d_course_royal_raceway_dl_5900,
d_course_royal_raceway_dl_5A40,
d_course_royal_raceway_dl_5CA0,
d_course_royal_raceway_dl_5B28,
d_course_royal_raceway_dl_5D08,
d_course_royal_raceway_dl_5EB8,
d_course_royal_raceway_dl_6118,
d_course_royal_raceway_dl_5FD8,
d_course_royal_raceway_dl_61B0,
d_course_royal_raceway_dl_6378,
d_course_royal_raceway_dl_6780,
d_course_royal_raceway_dl_6538,
d_course_royal_raceway_dl_68C8,
d_course_royal_raceway_dl_6BC0,
d_course_royal_raceway_dl_70C0,
d_course_royal_raceway_dl_6E20,
d_course_royal_raceway_dl_72B8,
d_course_royal_raceway_dl_75C0,
d_course_royal_raceway_dl_78E8,
d_course_royal_raceway_dl_7778,
d_course_royal_raceway_dl_7AD0,
d_course_royal_raceway_dl_7BD8,
d_course_royal_raceway_dl_7ED8,
d_course_royal_raceway_dl_7DB0,
d_course_royal_raceway_dl_8068,
d_course_royal_raceway_dl_81C0,
d_course_royal_raceway_dl_84A0,
d_course_royal_raceway_dl_8398,
d_course_royal_raceway_dl_8620,
d_course_royal_raceway_dl_8770,
d_course_royal_raceway_dl_88B0,
d_course_royal_raceway_dl_8838,
d_course_royal_raceway_dl_8930,
d_course_royal_raceway_dl_89F0,
d_course_royal_raceway_dl_8CD8,
d_course_royal_raceway_dl_8C58,
d_course_royal_raceway_dl_8EB8,
d_course_royal_raceway_dl_8FA8,
d_course_royal_raceway_dl_92D0,
d_course_royal_raceway_dl_9218,
d_course_royal_raceway_dl_94E8,
d_course_royal_raceway_dl_9678,
d_course_royal_raceway_dl_99A0,
d_course_royal_raceway_dl_9900,
d_course_royal_raceway_dl_9B30,
d_course_royal_raceway_dl_9D58,
d_course_royal_raceway_dl_A0A8,
d_course_royal_raceway_dl_9FE8,
d_course_royal_raceway_dl_A200,
d_course_royal_raceway_dl_A478,
d_course_royal_raceway_dl_A728,
d_course_royal_raceway_dl_A600,
d_course_royal_raceway_dl_A8A8,
d_course_royal_raceway_dl_A9D0,
d_course_royal_raceway_dl_AC28,
d_course_royal_raceway_dl_AB28,
d_course_royal_raceway_dl_AD90,
d_course_royal_raceway_dl_AE70,
d_course_royal_raceway_dl_B040,
d_course_royal_raceway_dl_AFB0,
d_course_royal_raceway_dl_B188,
d_course_royal_raceway_dl_B230,
d_course_royal_raceway_dl_B3E8,
d_course_royal_raceway_dl_B2E0,
d_course_royal_raceway_dl_B508,
const Gfx* royal_raceway_dls[] = {
d_course_royal_raceway_dl_0, d_course_royal_raceway_dl_360, d_course_royal_raceway_dl_258,
d_course_royal_raceway_dl_470, d_course_royal_raceway_dl_6D0, d_course_royal_raceway_dl_A48,
d_course_royal_raceway_dl_8E0, d_course_royal_raceway_dl_B40, d_course_royal_raceway_dl_DA0,
d_course_royal_raceway_dl_1180, d_course_royal_raceway_dl_F40, d_course_royal_raceway_dl_12C0,
d_course_royal_raceway_dl_1538, d_course_royal_raceway_dl_1850, d_course_royal_raceway_dl_1610,
d_course_royal_raceway_dl_19B0, d_course_royal_raceway_dl_1BB8, d_course_royal_raceway_dl_1E88,
d_course_royal_raceway_dl_1C40, d_course_royal_raceway_dl_2018, d_course_royal_raceway_dl_21A8,
d_course_royal_raceway_dl_2428, d_course_royal_raceway_dl_2210, d_course_royal_raceway_dl_25F0,
d_course_royal_raceway_dl_26F0, d_course_royal_raceway_dl_29A0, d_course_royal_raceway_dl_27B8,
d_course_royal_raceway_dl_2B78, d_course_royal_raceway_dl_2C20, d_course_royal_raceway_dl_2FE0,
d_course_royal_raceway_dl_2DD0, d_course_royal_raceway_dl_31F8, d_course_royal_raceway_dl_33B0,
d_course_royal_raceway_dl_3748, d_course_royal_raceway_dl_3580, d_course_royal_raceway_dl_3960,
d_course_royal_raceway_dl_3AD8, d_course_royal_raceway_dl_3D38, d_course_royal_raceway_dl_3BA8,
d_course_royal_raceway_dl_3ED8, d_course_royal_raceway_dl_3FA0, d_course_royal_raceway_dl_41D8,
d_course_royal_raceway_dl_4048, d_course_royal_raceway_dl_4380, d_course_royal_raceway_dl_4438,
d_course_royal_raceway_dl_45A0, d_course_royal_raceway_dl_44C0, d_course_royal_raceway_dl_46A0,
d_course_royal_raceway_dl_4750, d_course_royal_raceway_dl_4930, d_course_royal_raceway_dl_4800,
d_course_royal_raceway_dl_4A38, d_course_royal_raceway_dl_4AE0, d_course_royal_raceway_dl_4D00,
d_course_royal_raceway_dl_4BA8, d_course_royal_raceway_dl_4DF8, d_course_royal_raceway_dl_4EC0,
d_course_royal_raceway_dl_50F0, d_course_royal_raceway_dl_4F80, d_course_royal_raceway_dl_51D0,
d_course_royal_raceway_dl_52F0, d_course_royal_raceway_dl_54F8, d_course_royal_raceway_dl_53B8,
d_course_royal_raceway_dl_5598, d_course_royal_raceway_dl_56C0, d_course_royal_raceway_dl_5890,
d_course_royal_raceway_dl_5758, d_course_royal_raceway_dl_5900, d_course_royal_raceway_dl_5A40,
d_course_royal_raceway_dl_5CA0, d_course_royal_raceway_dl_5B28, d_course_royal_raceway_dl_5D08,
d_course_royal_raceway_dl_5EB8, d_course_royal_raceway_dl_6118, d_course_royal_raceway_dl_5FD8,
d_course_royal_raceway_dl_61B0, d_course_royal_raceway_dl_6378, d_course_royal_raceway_dl_6780,
d_course_royal_raceway_dl_6538, d_course_royal_raceway_dl_68C8, d_course_royal_raceway_dl_6BC0,
d_course_royal_raceway_dl_70C0, d_course_royal_raceway_dl_6E20, d_course_royal_raceway_dl_72B8,
d_course_royal_raceway_dl_75C0, d_course_royal_raceway_dl_78E8, d_course_royal_raceway_dl_7778,
d_course_royal_raceway_dl_7AD0, d_course_royal_raceway_dl_7BD8, d_course_royal_raceway_dl_7ED8,
d_course_royal_raceway_dl_7DB0, d_course_royal_raceway_dl_8068, d_course_royal_raceway_dl_81C0,
d_course_royal_raceway_dl_84A0, d_course_royal_raceway_dl_8398, d_course_royal_raceway_dl_8620,
d_course_royal_raceway_dl_8770, d_course_royal_raceway_dl_88B0, d_course_royal_raceway_dl_8838,
d_course_royal_raceway_dl_8930, d_course_royal_raceway_dl_89F0, d_course_royal_raceway_dl_8CD8,
d_course_royal_raceway_dl_8C58, d_course_royal_raceway_dl_8EB8, d_course_royal_raceway_dl_8FA8,
d_course_royal_raceway_dl_92D0, d_course_royal_raceway_dl_9218, d_course_royal_raceway_dl_94E8,
d_course_royal_raceway_dl_9678, d_course_royal_raceway_dl_99A0, d_course_royal_raceway_dl_9900,
d_course_royal_raceway_dl_9B30, d_course_royal_raceway_dl_9D58, d_course_royal_raceway_dl_A0A8,
d_course_royal_raceway_dl_9FE8, d_course_royal_raceway_dl_A200, d_course_royal_raceway_dl_A478,
d_course_royal_raceway_dl_A728, d_course_royal_raceway_dl_A600, d_course_royal_raceway_dl_A8A8,
d_course_royal_raceway_dl_A9D0, d_course_royal_raceway_dl_AC28, d_course_royal_raceway_dl_AB28,
d_course_royal_raceway_dl_AD90, d_course_royal_raceway_dl_AE70, d_course_royal_raceway_dl_B040,
d_course_royal_raceway_dl_AFB0, d_course_royal_raceway_dl_B188, d_course_royal_raceway_dl_B230,
d_course_royal_raceway_dl_B3E8, d_course_royal_raceway_dl_B2E0, d_course_royal_raceway_dl_B508,
};

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -2,28 +2,28 @@
#include "course_offsets.h"
const course_texture skyscraper_textures[] = {
{gTexture6457D8, 0x0160, 0x0800, 0x0},
{gTexture6462C0, 0x01B9, 0x0800, 0x0},
{gTexture6864E8, 0x0807, 0x1000, 0x0},
{gTexture686CF0, 0x08B7, 0x1000, 0x0},
{gTexture6875A8, 0x093F, 0x1000, 0x0},
{gTexture687EE8, 0x0883, 0x1000, 0x0},
{gTexture68876C, 0x0AC2, 0x1000, 0x0},
{gTexture689230, 0x09CE, 0x1000, 0x0},
{gTexture689C00, 0x0884, 0x1000, 0x0},
{gTexture68A484, 0x07D6, 0x1000, 0x0},
{gTexture68AC5C, 0x0A47, 0x1000, 0x0},
{gTexture68B6A4, 0x07C5, 0x1000, 0x0},
{gTexture68BE6C, 0x04A1, 0x1000, 0x0},
{gTexture68C310, 0x030D, 0x1000, 0x0},
{gTexture64B8D8, 0x0177, 0x0800, 0x0},
{gTexture645660, 0x0176, 0x0800, 0x0},
{gTextureNumberYellowBlue1, 0x01AE, 0x0800, 0x0},
{gTextureNumberYellowBlue2, 0x01C6, 0x0800, 0x0},
{gTextureNumberYellowBlue3, 0x01CC, 0x0800, 0x0},
{gTextureNumberYellowBlue4, 0x01E4, 0x0800, 0x0},
{gTexture668608, 0x0120, 0x0800, 0x0},
{gTexture67B75C, 0x0108, 0x0800, 0x0},
{gTexture6835F0, 0x0252, 0x1000, 0x0},
{0x00000000, 0x0000, 0x0000, 0x0},
{ gTexture6457D8, 0x0160, 0x0800, 0x0 },
{ gTexture6462C0, 0x01B9, 0x0800, 0x0 },
{ gTexture6864E8, 0x0807, 0x1000, 0x0 },
{ gTexture686CF0, 0x08B7, 0x1000, 0x0 },
{ gTexture6875A8, 0x093F, 0x1000, 0x0 },
{ gTexture687EE8, 0x0883, 0x1000, 0x0 },
{ gTexture68876C, 0x0AC2, 0x1000, 0x0 },
{ gTexture689230, 0x09CE, 0x1000, 0x0 },
{ gTexture689C00, 0x0884, 0x1000, 0x0 },
{ gTexture68A484, 0x07D6, 0x1000, 0x0 },
{ gTexture68AC5C, 0x0A47, 0x1000, 0x0 },
{ gTexture68B6A4, 0x07C5, 0x1000, 0x0 },
{ gTexture68BE6C, 0x04A1, 0x1000, 0x0 },
{ gTexture68C310, 0x030D, 0x1000, 0x0 },
{ gTexture64B8D8, 0x0177, 0x0800, 0x0 },
{ gTexture645660, 0x0176, 0x0800, 0x0 },
{ gTextureNumberYellowBlue1, 0x01AE, 0x0800, 0x0 },
{ gTextureNumberYellowBlue2, 0x01C6, 0x0800, 0x0 },
{ gTextureNumberYellowBlue3, 0x01CC, 0x0800, 0x0 },
{ gTextureNumberYellowBlue4, 0x01E4, 0x0800, 0x0 },
{ gTexture668608, 0x0120, 0x0800, 0x0 },
{ gTexture67B75C, 0x0108, 0x0800, 0x0 },
{ gTexture6835F0, 0x0252, 0x1000, 0x0 },
{ 0x00000000, 0x0000, 0x0000, 0x0 },
};

View File

@ -5,23 +5,20 @@
/*
* This file is required for data alignment
*
*/
*/
StaffGhost d_mario_raceway_staff_ghost[] = {
#include "courses/mario_raceway/staff_ghost.inc.c"
#include "courses/mario_raceway/staff_ghost.inc.c"
};
StaffGhost d_luigi_raceway_staff_ghost[1046] = {
#include "courses/luigi_raceway/staff_ghost.inc.c"
#include "courses/luigi_raceway/staff_ghost.inc.c"
};
StaffGhost d_royal_raceway_staff_ghost[] = {
#include "courses/royal_raceway/staff_ghost.inc.c"
#include "courses/royal_raceway/staff_ghost.inc.c"
};
// Unknown data. Perhaps colour or lights
s32 D_0F4FCAD0[] = {
0x00000000, 0xc8c8c8c8,
0xc8c80000, 0x00007b39, 0x6f6f6f6f, 0x6f6f6f6f,
0x3f7b0000, 0x0000c8c8, 0xc8c8c8c8, 0xc8000000
};
s32 D_0F4FCAD0[] = { 0x00000000, 0xc8c8c8c8, 0xc8c80000, 0x00007b39, 0x6f6f6f6f,
0x6f6f6f6f, 0x3f7b0000, 0x0000c8c8, 0xc8c8c8c8, 0xc8000000 };

View File

@ -4,67 +4,54 @@
#include <assets/toads_turnpike_data.h>
const course_texture toads_turnpike_textures[] = {
{gTexture645134, 0x052C, 0x0800, 0x0},
{gTexture64FE68, 0x0258, 0x1000, 0x0},
{gTexture6607C0, 0x0105, 0x0800, 0x0},
{gTexture6608C8, 0x0106, 0x0800, 0x0},
{gTextureGrass11, 0x01F8, 0x0800, 0x0},
{gTextureSignNintendoRed0, 0x02A6, 0x1000, 0x0},
{gTextureSignNintendoRed1, 0x02F7, 0x1000, 0x0},
{gTexture671A88, 0x012D, 0x0800, 0x0},
{gTextureRoad2, 0x02AE, 0x1000, 0x0},
{gTextureRoad3, 0x0286, 0x1000, 0x0},
{gTextureRoad4, 0x0282, 0x1000, 0x0},
{gTextureRoadFinish0, 0x0338, 0x1000, 0x0},
{gTextureSignToadYellow, 0x0723, 0x1000, 0x0},
{gTextureSignToadGreen, 0x071F, 0x1000, 0x0},
{gTextureSignMergingLanes, 0x0118, 0x0800, 0x0},
{gTexture65127C, 0x01AB, 0x0800, 0x0},
{gTextureRoad5, 0x02B9, 0x1000, 0x0},
{gTextureSignToadRed, 0x0610, 0x1000, 0x0},
{gTexture668228, 0x0130, 0x0800, 0x0},
{0x00000000, 0x0000, 0x0000, 0x0},
{ gTexture645134, 0x052C, 0x0800, 0x0 },
{ gTexture64FE68, 0x0258, 0x1000, 0x0 },
{ gTexture6607C0, 0x0105, 0x0800, 0x0 },
{ gTexture6608C8, 0x0106, 0x0800, 0x0 },
{ gTextureGrass11, 0x01F8, 0x0800, 0x0 },
{ gTextureSignNintendoRed0, 0x02A6, 0x1000, 0x0 },
{ gTextureSignNintendoRed1, 0x02F7, 0x1000, 0x0 },
{ gTexture671A88, 0x012D, 0x0800, 0x0 },
{ gTextureRoad2, 0x02AE, 0x1000, 0x0 },
{ gTextureRoad3, 0x0286, 0x1000, 0x0 },
{ gTextureRoad4, 0x0282, 0x1000, 0x0 },
{ gTextureRoadFinish0, 0x0338, 0x1000, 0x0 },
{ gTextureSignToadYellow, 0x0723, 0x1000, 0x0 },
{ gTextureSignToadGreen, 0x071F, 0x1000, 0x0 },
{ gTextureSignMergingLanes, 0x0118, 0x0800, 0x0 },
{ gTexture65127C, 0x01AB, 0x0800, 0x0 },
{ gTextureRoad5, 0x02B9, 0x1000, 0x0 },
{ gTextureSignToadRed, 0x0610, 0x1000, 0x0 },
{ gTexture668228, 0x0130, 0x0800, 0x0 },
{ 0x00000000, 0x0000, 0x0000, 0x0 },
};
Gfx *toads_turnpike_dls[] = {
d_course_toads_turnpike_dl_80, d_course_toads_turnpike_dl_1F8,
d_course_toads_turnpike_dl_158, d_course_toads_turnpike_dl_2D0,
d_course_toads_turnpike_dl_380, d_course_toads_turnpike_dl_4E8,
d_course_toads_turnpike_dl_438, d_course_toads_turnpike_dl_5B8,
d_course_toads_turnpike_dl_668, d_course_toads_turnpike_dl_7D8,
d_course_toads_turnpike_dl_718, d_course_toads_turnpike_dl_878,
d_course_toads_turnpike_dl_948, d_course_toads_turnpike_dl_AC8,
d_course_toads_turnpike_dl_9F0, d_course_toads_turnpike_dl_B88,
d_course_toads_turnpike_dl_C70, d_course_toads_turnpike_dl_DD0,
d_course_toads_turnpike_dl_D00, d_course_toads_turnpike_dl_E70,
d_course_toads_turnpike_dl_F18, d_course_toads_turnpike_dl_1070,
d_course_toads_turnpike_dl_FA8, d_course_toads_turnpike_dl_1118,
d_course_toads_turnpike_dl_11C0, d_course_toads_turnpike_dl_1310,
d_course_toads_turnpike_dl_1250, d_course_toads_turnpike_dl_13E0,
d_course_toads_turnpike_dl_1468, d_course_toads_turnpike_dl_15A8,
d_course_toads_turnpike_dl_1510, d_course_toads_turnpike_dl_1678,
d_course_toads_turnpike_dl_1708, d_course_toads_turnpike_dl_18C0,
d_course_toads_turnpike_dl_17F8, d_course_toads_turnpike_dl_19C0,
d_course_toads_turnpike_dl_1A60, d_course_toads_turnpike_dl_1C10,
d_course_toads_turnpike_dl_1B50, d_course_toads_turnpike_dl_1D18,
d_course_toads_turnpike_dl_1DC0, d_course_toads_turnpike_dl_1F40,
d_course_toads_turnpike_dl_1E80, d_course_toads_turnpike_dl_2030,
d_course_toads_turnpike_dl_20F8, d_course_toads_turnpike_dl_22A8,
d_course_toads_turnpike_dl_21C8, d_course_toads_turnpike_dl_2358,
d_course_toads_turnpike_dl_2440, d_course_toads_turnpike_dl_2628,
d_course_toads_turnpike_dl_2530, d_course_toads_turnpike_dl_26D8,
d_course_toads_turnpike_dl_27D0, d_course_toads_turnpike_dl_2960,
d_course_toads_turnpike_dl_2898, d_course_toads_turnpike_dl_2A00,
d_course_toads_turnpike_dl_2AF0, d_course_toads_turnpike_dl_2C38,
d_course_toads_turnpike_dl_2B88, d_course_toads_turnpike_dl_2CC0,
d_course_toads_turnpike_dl_2DB8, d_course_toads_turnpike_dl_2EF0,
d_course_toads_turnpike_dl_2E50, d_course_toads_turnpike_dl_2F78,
d_course_toads_turnpike_dl_3030, d_course_toads_turnpike_dl_3190,
d_course_toads_turnpike_dl_30F8, d_course_toads_turnpike_dl_3228,
d_course_toads_turnpike_dl_32F0, d_course_toads_turnpike_dl_3438,
d_course_toads_turnpike_dl_33A0, d_course_toads_turnpike_dl_34D0,
d_course_toads_turnpike_dl_3570, d_course_toads_turnpike_dl_36A8,
d_course_toads_turnpike_dl_3618, d_course_toads_turnpike_dl_3758,
d_course_toads_turnpike_dl_37F0, d_course_toads_turnpike_dl_39C8,
Gfx* toads_turnpike_dls[] = {
d_course_toads_turnpike_dl_80, d_course_toads_turnpike_dl_1F8, d_course_toads_turnpike_dl_158,
d_course_toads_turnpike_dl_2D0, d_course_toads_turnpike_dl_380, d_course_toads_turnpike_dl_4E8,
d_course_toads_turnpike_dl_438, d_course_toads_turnpike_dl_5B8, d_course_toads_turnpike_dl_668,
d_course_toads_turnpike_dl_7D8, d_course_toads_turnpike_dl_718, d_course_toads_turnpike_dl_878,
d_course_toads_turnpike_dl_948, d_course_toads_turnpike_dl_AC8, d_course_toads_turnpike_dl_9F0,
d_course_toads_turnpike_dl_B88, d_course_toads_turnpike_dl_C70, d_course_toads_turnpike_dl_DD0,
d_course_toads_turnpike_dl_D00, d_course_toads_turnpike_dl_E70, d_course_toads_turnpike_dl_F18,
d_course_toads_turnpike_dl_1070, d_course_toads_turnpike_dl_FA8, d_course_toads_turnpike_dl_1118,
d_course_toads_turnpike_dl_11C0, d_course_toads_turnpike_dl_1310, d_course_toads_turnpike_dl_1250,
d_course_toads_turnpike_dl_13E0, d_course_toads_turnpike_dl_1468, d_course_toads_turnpike_dl_15A8,
d_course_toads_turnpike_dl_1510, d_course_toads_turnpike_dl_1678, d_course_toads_turnpike_dl_1708,
d_course_toads_turnpike_dl_18C0, d_course_toads_turnpike_dl_17F8, d_course_toads_turnpike_dl_19C0,
d_course_toads_turnpike_dl_1A60, d_course_toads_turnpike_dl_1C10, d_course_toads_turnpike_dl_1B50,
d_course_toads_turnpike_dl_1D18, d_course_toads_turnpike_dl_1DC0, d_course_toads_turnpike_dl_1F40,
d_course_toads_turnpike_dl_1E80, d_course_toads_turnpike_dl_2030, d_course_toads_turnpike_dl_20F8,
d_course_toads_turnpike_dl_22A8, d_course_toads_turnpike_dl_21C8, d_course_toads_turnpike_dl_2358,
d_course_toads_turnpike_dl_2440, d_course_toads_turnpike_dl_2628, d_course_toads_turnpike_dl_2530,
d_course_toads_turnpike_dl_26D8, d_course_toads_turnpike_dl_27D0, d_course_toads_turnpike_dl_2960,
d_course_toads_turnpike_dl_2898, d_course_toads_turnpike_dl_2A00, d_course_toads_turnpike_dl_2AF0,
d_course_toads_turnpike_dl_2C38, d_course_toads_turnpike_dl_2B88, d_course_toads_turnpike_dl_2CC0,
d_course_toads_turnpike_dl_2DB8, d_course_toads_turnpike_dl_2EF0, d_course_toads_turnpike_dl_2E50,
d_course_toads_turnpike_dl_2F78, d_course_toads_turnpike_dl_3030, d_course_toads_turnpike_dl_3190,
d_course_toads_turnpike_dl_30F8, d_course_toads_turnpike_dl_3228, d_course_toads_turnpike_dl_32F0,
d_course_toads_turnpike_dl_3438, d_course_toads_turnpike_dl_33A0, d_course_toads_turnpike_dl_34D0,
d_course_toads_turnpike_dl_3570, d_course_toads_turnpike_dl_36A8, d_course_toads_turnpike_dl_3618,
d_course_toads_turnpike_dl_3758, d_course_toads_turnpike_dl_37F0, d_course_toads_turnpike_dl_39C8,
d_course_toads_turnpike_dl_3910, d_course_toads_turnpike_dl_3AD8,
};

View File

@ -3,136 +3,64 @@
#include <assets/wario_stadium_data.h>
const course_texture wario_stadium_textures[] = {
{gTexture67F15C, 0x02F1, 0x0800, 0x0},
{gTexture67F450, 0x0194, 0x0800, 0x0},
{gTextureSignWarioFace, 0x0825, 0x1000, 0x0},
{gTexture670AC8, 0x0FBF, 0x1000, 0x0},
{gTextureCheckerboardBlackWhite, 0x0107, 0x0800, 0x0},
{gTexture64C11C, 0x0695, 0x0800, 0x0},
{gTexture64C7B4, 0x046C, 0x0800, 0x0},
{gTexture668228, 0x0130, 0x0800, 0x0},
{gTexture668358, 0x01A0, 0x0800, 0x0},
{gTexture66AEB8, 0x0201, 0x0800, 0x0},
{gTexture677A40, 0x0275, 0x0800, 0x0},
{gTexture67E428, 0x0A81, 0x1000, 0x0},
{gTexture643A34, 0x0106, 0x0800, 0x0},
{gTexture66EBF0, 0x0146, 0x0800, 0x0},
{gTexture68272C, 0x01F9, 0x1000, 0x0},
{gTexture682928, 0x01F9, 0x1000, 0x0},
{gTexture682B24, 0x01F9, 0x1000, 0x0},
{gTexture682D20, 0x01F9, 0x1000, 0x0},
{gTexture682F1C, 0x01F9, 0x1000, 0x0},
{gTexture683118, 0x01F9, 0x1000, 0x0},
{0x00000000, 0x0000, 0x0000, 0x0},
{ gTexture67F15C, 0x02F1, 0x0800, 0x0 },
{ gTexture67F450, 0x0194, 0x0800, 0x0 },
{ gTextureSignWarioFace, 0x0825, 0x1000, 0x0 },
{ gTexture670AC8, 0x0FBF, 0x1000, 0x0 },
{ gTextureCheckerboardBlackWhite, 0x0107, 0x0800, 0x0 },
{ gTexture64C11C, 0x0695, 0x0800, 0x0 },
{ gTexture64C7B4, 0x046C, 0x0800, 0x0 },
{ gTexture668228, 0x0130, 0x0800, 0x0 },
{ gTexture668358, 0x01A0, 0x0800, 0x0 },
{ gTexture66AEB8, 0x0201, 0x0800, 0x0 },
{ gTexture677A40, 0x0275, 0x0800, 0x0 },
{ gTexture67E428, 0x0A81, 0x1000, 0x0 },
{ gTexture643A34, 0x0106, 0x0800, 0x0 },
{ gTexture66EBF0, 0x0146, 0x0800, 0x0 },
{ gTexture68272C, 0x01F9, 0x1000, 0x0 },
{ gTexture682928, 0x01F9, 0x1000, 0x0 },
{ gTexture682B24, 0x01F9, 0x1000, 0x0 },
{ gTexture682D20, 0x01F9, 0x1000, 0x0 },
{ gTexture682F1C, 0x01F9, 0x1000, 0x0 },
{ gTexture683118, 0x01F9, 0x1000, 0x0 },
{ 0x00000000, 0x0000, 0x0000, 0x0 },
};
const Gfx *wario_stadium_dls[] = {
d_course_wario_stadium_dl_0,
d_course_wario_stadium_dl_158,
d_course_wario_stadium_dl_B8,
d_course_wario_stadium_dl_1B8,
d_course_wario_stadium_dl_2A0,
d_course_wario_stadium_dl_440,
d_course_wario_stadium_dl_350,
d_course_wario_stadium_dl_4C0,
d_course_wario_stadium_dl_5E8,
d_course_wario_stadium_dl_798,
d_course_wario_stadium_dl_668,
d_course_wario_stadium_dl_830,
d_course_wario_stadium_dl_940,
d_course_wario_stadium_dl_AB0,
d_course_wario_stadium_dl_990,
d_course_wario_stadium_dl_B60,
d_course_wario_stadium_dl_C08,
d_course_wario_stadium_dl_D60,
d_course_wario_stadium_dl_C70,
d_course_wario_stadium_dl_E30,
d_course_wario_stadium_dl_ED0,
d_course_wario_stadium_dl_1068,
d_course_wario_stadium_dl_F70,
d_course_wario_stadium_dl_1158,
d_course_wario_stadium_dl_11F8,
d_course_wario_stadium_dl_13C0,
d_course_wario_stadium_dl_12E0,
d_course_wario_stadium_dl_14A0,
d_course_wario_stadium_dl_1590,
d_course_wario_stadium_dl_1708,
d_course_wario_stadium_dl_1630,
d_course_wario_stadium_dl_17A8,
d_course_wario_stadium_dl_1868,
d_course_wario_stadium_dl_19E0,
d_course_wario_stadium_dl_1908,
d_course_wario_stadium_dl_1AB8,
d_course_wario_stadium_dl_1B48,
d_course_wario_stadium_dl_1CA8,
d_course_wario_stadium_dl_1BB0,
d_course_wario_stadium_dl_1D68,
d_course_wario_stadium_dl_1DF8,
d_course_wario_stadium_dl_1FD8,
d_course_wario_stadium_dl_1E70,
d_course_wario_stadium_dl_20A8,
d_course_wario_stadium_dl_21A8,
d_course_wario_stadium_dl_2308,
d_course_wario_stadium_dl_2218,
d_course_wario_stadium_dl_23B0,
d_course_wario_stadium_dl_2490,
d_course_wario_stadium_dl_2610,
d_course_wario_stadium_dl_2530,
d_course_wario_stadium_dl_2698,
d_course_wario_stadium_dl_2798,
d_course_wario_stadium_dl_2928,
d_course_wario_stadium_dl_2870,
d_course_wario_stadium_dl_29D0,
d_course_wario_stadium_dl_2AB0,
d_course_wario_stadium_dl_2C30,
d_course_wario_stadium_dl_2B60,
d_course_wario_stadium_dl_2CE0,
d_course_wario_stadium_dl_2DC0,
d_course_wario_stadium_dl_2FB8,
d_course_wario_stadium_dl_2E70,
d_course_wario_stadium_dl_3098,
d_course_wario_stadium_dl_31B0,
d_course_wario_stadium_dl_3368,
d_course_wario_stadium_dl_3260,
d_course_wario_stadium_dl_3450,
d_course_wario_stadium_dl_3550,
d_course_wario_stadium_dl_36D8,
d_course_wario_stadium_dl_3600,
d_course_wario_stadium_dl_37A8,
d_course_wario_stadium_dl_3890,
d_course_wario_stadium_dl_3A10,
d_course_wario_stadium_dl_3980,
d_course_wario_stadium_dl_3AD0,
d_course_wario_stadium_dl_3BB0,
d_course_wario_stadium_dl_3D90,
d_course_wario_stadium_dl_3CF8,
d_course_wario_stadium_dl_3E80,
d_course_wario_stadium_dl_3F78,
d_course_wario_stadium_dl_40F0,
d_course_wario_stadium_dl_4060,
d_course_wario_stadium_dl_41D0,
d_course_wario_stadium_dl_4270,
d_course_wario_stadium_dl_43E0,
d_course_wario_stadium_dl_4340,
d_course_wario_stadium_dl_44B0,
d_course_wario_stadium_dl_4550,
d_course_wario_stadium_dl_47F0,
d_course_wario_stadium_dl_46E0,
d_course_wario_stadium_dl_4948,
d_course_wario_stadium_dl_4A78,
d_course_wario_stadium_dl_4BE8,
d_course_wario_stadium_dl_4B30,
d_course_wario_stadium_dl_4C60,
d_course_wario_stadium_dl_4D40,
d_course_wario_stadium_dl_4EF0,
d_course_wario_stadium_dl_4E30,
d_course_wario_stadium_dl_4F80,
d_course_wario_stadium_dl_5090,
d_course_wario_stadium_dl_51E8,
d_course_wario_stadium_dl_5168,
d_course_wario_stadium_dl_5270,
d_course_wario_stadium_dl_5338,
d_course_wario_stadium_dl_54E8,
d_course_wario_stadium_dl_5460,
d_course_wario_stadium_dl_5588,
const Gfx* wario_stadium_dls[] = {
d_course_wario_stadium_dl_0, d_course_wario_stadium_dl_158, d_course_wario_stadium_dl_B8,
d_course_wario_stadium_dl_1B8, d_course_wario_stadium_dl_2A0, d_course_wario_stadium_dl_440,
d_course_wario_stadium_dl_350, d_course_wario_stadium_dl_4C0, d_course_wario_stadium_dl_5E8,
d_course_wario_stadium_dl_798, d_course_wario_stadium_dl_668, d_course_wario_stadium_dl_830,
d_course_wario_stadium_dl_940, d_course_wario_stadium_dl_AB0, d_course_wario_stadium_dl_990,
d_course_wario_stadium_dl_B60, d_course_wario_stadium_dl_C08, d_course_wario_stadium_dl_D60,
d_course_wario_stadium_dl_C70, d_course_wario_stadium_dl_E30, d_course_wario_stadium_dl_ED0,
d_course_wario_stadium_dl_1068, d_course_wario_stadium_dl_F70, d_course_wario_stadium_dl_1158,
d_course_wario_stadium_dl_11F8, d_course_wario_stadium_dl_13C0, d_course_wario_stadium_dl_12E0,
d_course_wario_stadium_dl_14A0, d_course_wario_stadium_dl_1590, d_course_wario_stadium_dl_1708,
d_course_wario_stadium_dl_1630, d_course_wario_stadium_dl_17A8, d_course_wario_stadium_dl_1868,
d_course_wario_stadium_dl_19E0, d_course_wario_stadium_dl_1908, d_course_wario_stadium_dl_1AB8,
d_course_wario_stadium_dl_1B48, d_course_wario_stadium_dl_1CA8, d_course_wario_stadium_dl_1BB0,
d_course_wario_stadium_dl_1D68, d_course_wario_stadium_dl_1DF8, d_course_wario_stadium_dl_1FD8,
d_course_wario_stadium_dl_1E70, d_course_wario_stadium_dl_20A8, d_course_wario_stadium_dl_21A8,
d_course_wario_stadium_dl_2308, d_course_wario_stadium_dl_2218, d_course_wario_stadium_dl_23B0,
d_course_wario_stadium_dl_2490, d_course_wario_stadium_dl_2610, d_course_wario_stadium_dl_2530,
d_course_wario_stadium_dl_2698, d_course_wario_stadium_dl_2798, d_course_wario_stadium_dl_2928,
d_course_wario_stadium_dl_2870, d_course_wario_stadium_dl_29D0, d_course_wario_stadium_dl_2AB0,
d_course_wario_stadium_dl_2C30, d_course_wario_stadium_dl_2B60, d_course_wario_stadium_dl_2CE0,
d_course_wario_stadium_dl_2DC0, d_course_wario_stadium_dl_2FB8, d_course_wario_stadium_dl_2E70,
d_course_wario_stadium_dl_3098, d_course_wario_stadium_dl_31B0, d_course_wario_stadium_dl_3368,
d_course_wario_stadium_dl_3260, d_course_wario_stadium_dl_3450, d_course_wario_stadium_dl_3550,
d_course_wario_stadium_dl_36D8, d_course_wario_stadium_dl_3600, d_course_wario_stadium_dl_37A8,
d_course_wario_stadium_dl_3890, d_course_wario_stadium_dl_3A10, d_course_wario_stadium_dl_3980,
d_course_wario_stadium_dl_3AD0, d_course_wario_stadium_dl_3BB0, d_course_wario_stadium_dl_3D90,
d_course_wario_stadium_dl_3CF8, d_course_wario_stadium_dl_3E80, d_course_wario_stadium_dl_3F78,
d_course_wario_stadium_dl_40F0, d_course_wario_stadium_dl_4060, d_course_wario_stadium_dl_41D0,
d_course_wario_stadium_dl_4270, d_course_wario_stadium_dl_43E0, d_course_wario_stadium_dl_4340,
d_course_wario_stadium_dl_44B0, d_course_wario_stadium_dl_4550, d_course_wario_stadium_dl_47F0,
d_course_wario_stadium_dl_46E0, d_course_wario_stadium_dl_4948, d_course_wario_stadium_dl_4A78,
d_course_wario_stadium_dl_4BE8, d_course_wario_stadium_dl_4B30, d_course_wario_stadium_dl_4C60,
d_course_wario_stadium_dl_4D40, d_course_wario_stadium_dl_4EF0, d_course_wario_stadium_dl_4E30,
d_course_wario_stadium_dl_4F80, d_course_wario_stadium_dl_5090, d_course_wario_stadium_dl_51E8,
d_course_wario_stadium_dl_5168, d_course_wario_stadium_dl_5270, d_course_wario_stadium_dl_5338,
d_course_wario_stadium_dl_54E8, d_course_wario_stadium_dl_5460, d_course_wario_stadium_dl_5588,
};

View File

@ -4,165 +4,81 @@
#include <assets/yoshi_valley_data.h>
course_texture yoshi_valley_textures[] = {
{gTexture66EBF0, 0x0146, 0x0800, 0x0},
{gTextureWoodBridgeSlats, 0x0DAB, 0x1000, 0x0},
{gTexture65E2EC, 0x02B0, 0x0800, 0x0},
{gTexture6846DC, 0x04EA, 0x0800, 0x0},
{gTextureFenceRope, 0x0540, 0x0800, 0x0},
{gTexture685108, 0x04D4, 0x0800, 0x0},
{gTexture64CC20, 0x0EC3, 0x1000, 0x0},
{gTextureGrass4, 0x05C3, 0x0800, 0x0},
{gTexture6775EC, 0x0233, 0x1000, 0x0},
{gTexture68E2D0, 0x087F, 0x0800, 0x0},
{gTextureCheckerboardBlackWhite, 0x0107, 0x0800, 0x0},
{gTexture643B3C, 0x0798, 0x0800, 0x0},
{gTextureSignWoodRedArrow, 0x04E1, 0x1000, 0x0},
{gTexture68DEC0, 0x0410, 0x0800, 0x0},
{0x00000000, 0x0000, 0x0000, 0x0},
{ gTexture66EBF0, 0x0146, 0x0800, 0x0 },
{ gTextureWoodBridgeSlats, 0x0DAB, 0x1000, 0x0 },
{ gTexture65E2EC, 0x02B0, 0x0800, 0x0 },
{ gTexture6846DC, 0x04EA, 0x0800, 0x0 },
{ gTextureFenceRope, 0x0540, 0x0800, 0x0 },
{ gTexture685108, 0x04D4, 0x0800, 0x0 },
{ gTexture64CC20, 0x0EC3, 0x1000, 0x0 },
{ gTextureGrass4, 0x05C3, 0x0800, 0x0 },
{ gTexture6775EC, 0x0233, 0x1000, 0x0 },
{ gTexture68E2D0, 0x087F, 0x0800, 0x0 },
{ gTextureCheckerboardBlackWhite, 0x0107, 0x0800, 0x0 },
{ gTexture643B3C, 0x0798, 0x0800, 0x0 },
{ gTextureSignWoodRedArrow, 0x04E1, 0x1000, 0x0 },
{ gTexture68DEC0, 0x0410, 0x0800, 0x0 },
{ 0x00000000, 0x0000, 0x0000, 0x0 },
};
Gfx *yoshi_valley_dls[] = {
d_course_yoshi_valley_dl_40, d_course_yoshi_valley_dl_3F0,
d_course_yoshi_valley_dl_290, d_course_yoshi_valley_dl_4E8,
d_course_yoshi_valley_dl_7A0, d_course_yoshi_valley_dl_BC0,
d_course_yoshi_valley_dl_9C8, d_course_yoshi_valley_dl_CC0, // <- No idea what this is supposed to be a pointer to
d_course_yoshi_valley_dl_FA0, d_course_yoshi_valley_dl_13F8,
d_course_yoshi_valley_dl_1178, d_course_yoshi_valley_dl_14D0,
d_course_yoshi_valley_dl_17A8, d_course_yoshi_valley_dl_1C38,
d_course_yoshi_valley_dl_1968, d_course_yoshi_valley_dl_1D48,
d_course_yoshi_valley_dl_2000, d_course_yoshi_valley_dl_2408,
d_course_yoshi_valley_dl_21B0, d_course_yoshi_valley_dl_25E8,
d_course_yoshi_valley_dl_2840, d_course_yoshi_valley_dl_2BC0,
d_course_yoshi_valley_dl_2978, d_course_yoshi_valley_dl_2D70,
d_course_yoshi_valley_dl_2F48, d_course_yoshi_valley_dl_3258,
d_course_yoshi_valley_dl_3078, d_course_yoshi_valley_dl_3420,
d_course_yoshi_valley_dl_3560, d_course_yoshi_valley_dl_3880,
d_course_yoshi_valley_dl_36D0, d_course_yoshi_valley_dl_3A38,
d_course_yoshi_valley_dl_3BA0, d_course_yoshi_valley_dl_3E30,
d_course_yoshi_valley_dl_3D20, d_course_yoshi_valley_dl_3F88,
d_course_yoshi_valley_dl_40B8, d_course_yoshi_valley_dl_44C8,
d_course_yoshi_valley_dl_4320, d_course_yoshi_valley_dl_4718,
d_course_yoshi_valley_dl_48C0, d_course_yoshi_valley_dl_4C28,
d_course_yoshi_valley_dl_4A98, d_course_yoshi_valley_dl_4E60,
d_course_yoshi_valley_dl_5018, d_course_yoshi_valley_dl_53E0,
d_course_yoshi_valley_dl_51D0, d_course_yoshi_valley_dl_5638,
d_course_yoshi_valley_dl_5778, d_course_yoshi_valley_dl_5A80,
d_course_yoshi_valley_dl_5890, d_course_yoshi_valley_dl_5C70,
d_course_yoshi_valley_dl_5D60, d_course_yoshi_valley_dl_6070,
d_course_yoshi_valley_dl_5ED8, d_course_yoshi_valley_dl_6268,
d_course_yoshi_valley_dl_6358, d_course_yoshi_valley_dl_66B0,
d_course_yoshi_valley_dl_6530, d_course_yoshi_valley_dl_68C8,
d_course_yoshi_valley_dl_69C0, d_course_yoshi_valley_dl_6D78,
d_course_yoshi_valley_dl_6BF0, d_course_yoshi_valley_dl_6FB8,
d_course_yoshi_valley_dl_7100, d_course_yoshi_valley_dl_7400,
d_course_yoshi_valley_dl_7310, d_course_yoshi_valley_dl_75C8,
d_course_yoshi_valley_dl_7770, d_course_yoshi_valley_dl_7A08,
d_course_yoshi_valley_dl_7938, d_course_yoshi_valley_dl_7BB8,
d_course_yoshi_valley_dl_7CE8, d_course_yoshi_valley_dl_8030,
d_course_yoshi_valley_dl_7F80, d_course_yoshi_valley_dl_8218,
d_course_yoshi_valley_dl_8420, d_course_yoshi_valley_dl_8830,
d_course_yoshi_valley_dl_8710, d_course_yoshi_valley_dl_8958,
d_course_yoshi_valley_dl_8C30, d_course_yoshi_valley_dl_8FD8,
d_course_yoshi_valley_dl_8D58, d_course_yoshi_valley_dl_91D8,
d_course_yoshi_valley_dl_9340, d_course_yoshi_valley_dl_9780,
d_course_yoshi_valley_dl_9548, d_course_yoshi_valley_dl_9A00,
d_course_yoshi_valley_dl_9BB0, d_course_yoshi_valley_dl_9F70,
d_course_yoshi_valley_dl_9DB8, d_course_yoshi_valley_dl_A188,
d_course_yoshi_valley_dl_A328, d_course_yoshi_valley_dl_A6B8,
d_course_yoshi_valley_dl_A518, d_course_yoshi_valley_dl_A8A0,
d_course_yoshi_valley_dl_AAC0, d_course_yoshi_valley_dl_AE78,
d_course_yoshi_valley_dl_ACF0, d_course_yoshi_valley_dl_AFF8,
d_course_yoshi_valley_dl_B220, d_course_yoshi_valley_dl_B578,
d_course_yoshi_valley_dl_B428, d_course_yoshi_valley_dl_B778,
d_course_yoshi_valley_dl_B970, d_course_yoshi_valley_dl_BC98,
d_course_yoshi_valley_dl_BAF8, d_course_yoshi_valley_dl_BE18,
d_course_yoshi_valley_dl_BFC8, d_course_yoshi_valley_dl_C2D8,
d_course_yoshi_valley_dl_C140, d_course_yoshi_valley_dl_C470,
d_course_yoshi_valley_dl_C580, d_course_yoshi_valley_dl_C728,
d_course_yoshi_valley_dl_C668, d_course_yoshi_valley_dl_C838,
d_course_yoshi_valley_dl_C8F8, d_course_yoshi_valley_dl_CC80,
d_course_yoshi_valley_dl_CAD8, d_course_yoshi_valley_dl_CEC8,
d_course_yoshi_valley_dl_D018, d_course_yoshi_valley_dl_D3D0,
Gfx* yoshi_valley_dls[] = {
d_course_yoshi_valley_dl_40, d_course_yoshi_valley_dl_3F0, d_course_yoshi_valley_dl_290,
d_course_yoshi_valley_dl_4E8, d_course_yoshi_valley_dl_7A0, d_course_yoshi_valley_dl_BC0,
d_course_yoshi_valley_dl_9C8, d_course_yoshi_valley_dl_CC0, // <- No idea what this is supposed to be a pointer to
d_course_yoshi_valley_dl_FA0, d_course_yoshi_valley_dl_13F8, d_course_yoshi_valley_dl_1178,
d_course_yoshi_valley_dl_14D0, d_course_yoshi_valley_dl_17A8, d_course_yoshi_valley_dl_1C38,
d_course_yoshi_valley_dl_1968, d_course_yoshi_valley_dl_1D48, d_course_yoshi_valley_dl_2000,
d_course_yoshi_valley_dl_2408, d_course_yoshi_valley_dl_21B0, d_course_yoshi_valley_dl_25E8,
d_course_yoshi_valley_dl_2840, d_course_yoshi_valley_dl_2BC0, d_course_yoshi_valley_dl_2978,
d_course_yoshi_valley_dl_2D70, d_course_yoshi_valley_dl_2F48, d_course_yoshi_valley_dl_3258,
d_course_yoshi_valley_dl_3078, d_course_yoshi_valley_dl_3420, d_course_yoshi_valley_dl_3560,
d_course_yoshi_valley_dl_3880, d_course_yoshi_valley_dl_36D0, d_course_yoshi_valley_dl_3A38,
d_course_yoshi_valley_dl_3BA0, d_course_yoshi_valley_dl_3E30, d_course_yoshi_valley_dl_3D20,
d_course_yoshi_valley_dl_3F88, d_course_yoshi_valley_dl_40B8, d_course_yoshi_valley_dl_44C8,
d_course_yoshi_valley_dl_4320, d_course_yoshi_valley_dl_4718, d_course_yoshi_valley_dl_48C0,
d_course_yoshi_valley_dl_4C28, d_course_yoshi_valley_dl_4A98, d_course_yoshi_valley_dl_4E60,
d_course_yoshi_valley_dl_5018, d_course_yoshi_valley_dl_53E0, d_course_yoshi_valley_dl_51D0,
d_course_yoshi_valley_dl_5638, d_course_yoshi_valley_dl_5778, d_course_yoshi_valley_dl_5A80,
d_course_yoshi_valley_dl_5890, d_course_yoshi_valley_dl_5C70, d_course_yoshi_valley_dl_5D60,
d_course_yoshi_valley_dl_6070, d_course_yoshi_valley_dl_5ED8, d_course_yoshi_valley_dl_6268,
d_course_yoshi_valley_dl_6358, d_course_yoshi_valley_dl_66B0, d_course_yoshi_valley_dl_6530,
d_course_yoshi_valley_dl_68C8, d_course_yoshi_valley_dl_69C0, d_course_yoshi_valley_dl_6D78,
d_course_yoshi_valley_dl_6BF0, d_course_yoshi_valley_dl_6FB8, d_course_yoshi_valley_dl_7100,
d_course_yoshi_valley_dl_7400, d_course_yoshi_valley_dl_7310, d_course_yoshi_valley_dl_75C8,
d_course_yoshi_valley_dl_7770, d_course_yoshi_valley_dl_7A08, d_course_yoshi_valley_dl_7938,
d_course_yoshi_valley_dl_7BB8, d_course_yoshi_valley_dl_7CE8, d_course_yoshi_valley_dl_8030,
d_course_yoshi_valley_dl_7F80, d_course_yoshi_valley_dl_8218, d_course_yoshi_valley_dl_8420,
d_course_yoshi_valley_dl_8830, d_course_yoshi_valley_dl_8710, d_course_yoshi_valley_dl_8958,
d_course_yoshi_valley_dl_8C30, d_course_yoshi_valley_dl_8FD8, d_course_yoshi_valley_dl_8D58,
d_course_yoshi_valley_dl_91D8, d_course_yoshi_valley_dl_9340, d_course_yoshi_valley_dl_9780,
d_course_yoshi_valley_dl_9548, d_course_yoshi_valley_dl_9A00, d_course_yoshi_valley_dl_9BB0,
d_course_yoshi_valley_dl_9F70, d_course_yoshi_valley_dl_9DB8, d_course_yoshi_valley_dl_A188,
d_course_yoshi_valley_dl_A328, d_course_yoshi_valley_dl_A6B8, d_course_yoshi_valley_dl_A518,
d_course_yoshi_valley_dl_A8A0, d_course_yoshi_valley_dl_AAC0, d_course_yoshi_valley_dl_AE78,
d_course_yoshi_valley_dl_ACF0, d_course_yoshi_valley_dl_AFF8, d_course_yoshi_valley_dl_B220,
d_course_yoshi_valley_dl_B578, d_course_yoshi_valley_dl_B428, d_course_yoshi_valley_dl_B778,
d_course_yoshi_valley_dl_B970, d_course_yoshi_valley_dl_BC98, d_course_yoshi_valley_dl_BAF8,
d_course_yoshi_valley_dl_BE18, d_course_yoshi_valley_dl_BFC8, d_course_yoshi_valley_dl_C2D8,
d_course_yoshi_valley_dl_C140, d_course_yoshi_valley_dl_C470, d_course_yoshi_valley_dl_C580,
d_course_yoshi_valley_dl_C728, d_course_yoshi_valley_dl_C668, d_course_yoshi_valley_dl_C838,
d_course_yoshi_valley_dl_C8F8, d_course_yoshi_valley_dl_CC80, d_course_yoshi_valley_dl_CAD8,
d_course_yoshi_valley_dl_CEC8, d_course_yoshi_valley_dl_D018, d_course_yoshi_valley_dl_D3D0,
d_course_yoshi_valley_dl_D1E8, d_course_yoshi_valley_dl_D540,
};
// 0x060145E8 Flag animation?
s16 d_course_yoshi_valley_unk1[] = {
0x0000, 0x12e3,
0x0f43, 0x099f,
0x02d1, 0xfbb3,
0xf51b, 0xefe3,
0xecc0, 0xea97,
0xe905, 0xe817,
0xe7da, 0xe85a,
0xe9a5, 0xebc7,
0xef2b, 0xf51f,
0xfcd4, 0x053b,
0x0d49, 0x13ee,
0x181e, 0x1a24,
0x1b1b, 0x1b28,
0x1a71, 0x191c,
0x174f, 0x152f,
0x0dfd, 0x0b37,
0x064a, 0x006d,
0xfada, 0xf6c7,
0xf4d9, 0xf371,
0xf25d, 0xf1a3,
0xf148, 0xf152,
0xf1c6, 0xf2aa,
0xf404, 0xf622,
0xfa11, 0xff44,
0x04fd, 0x0a7d,
0x0f08, 0x11dd,
0x132a, 0x13b1,
0x1393, 0x12f3,
0x11f2, 0x10b2,
0x0f55, 0xf43f,
0xf376, 0xf2f2,
0xf2b7, 0xf2c3,
0xf319, 0xf3b9,
0xf4a5, 0xf64b,
0xf8e8, 0xfc2a,
0xffc5, 0x0367,
0x06c3, 0x098b,
0x0b73, 0x0c85,
0x0ce4, 0x0ca5,
0x0bdd, 0x0aa2,
0x08f8, 0x06a5,
0x03d3, 0x00b6,
0xfd87, 0xfa7a,
0xf7c5, 0xf59f,
0xf5bc, 0xf61a,
0xf722, 0xf8ba,
0xfac7, 0xfd30,
0xffd8, 0x02a6,
0x0580, 0x0829,
0x0a3a, 0x0bbc,
0x0cb9, 0x0d3f,
0x0d4c, 0x0c44,
0x0a3b, 0x0785,
0x0478, 0x0169,
0xfead, 0xfc97,
0xfb3e, 0xfa01,
0xf8db, 0xf7d5,
0xf6f8, 0xf64f,
0xf5e2, 0x04ea,
0x04b3, 0x0421,
0x034c, 0x0250,
0x0147, 0x004b,
0xff77, 0xfeaa,
0xfdc3, 0xfcd9,
0xfc02, 0xfb55,
0xfae7, 0xfad0,
0xfb25, 0xfbdc,
0xfcd6, 0xfdf4,
0xff17, 0x0020,
0x00f2, 0x01a2,
0x0253, 0x02fe,
0x039a, 0x0422,
0x048c, 0x04d1,
0x3fff, 0xc001,
0x3fff, 0x0000,
0x0000, 0x12e3, 0x0f43, 0x099f, 0x02d1, 0xfbb3, 0xf51b, 0xefe3, 0xecc0, 0xea97, 0xe905, 0xe817, 0xe7da, 0xe85a,
0xe9a5, 0xebc7, 0xef2b, 0xf51f, 0xfcd4, 0x053b, 0x0d49, 0x13ee, 0x181e, 0x1a24, 0x1b1b, 0x1b28, 0x1a71, 0x191c,
0x174f, 0x152f, 0x0dfd, 0x0b37, 0x064a, 0x006d, 0xfada, 0xf6c7, 0xf4d9, 0xf371, 0xf25d, 0xf1a3, 0xf148, 0xf152,
0xf1c6, 0xf2aa, 0xf404, 0xf622, 0xfa11, 0xff44, 0x04fd, 0x0a7d, 0x0f08, 0x11dd, 0x132a, 0x13b1, 0x1393, 0x12f3,
0x11f2, 0x10b2, 0x0f55, 0xf43f, 0xf376, 0xf2f2, 0xf2b7, 0xf2c3, 0xf319, 0xf3b9, 0xf4a5, 0xf64b, 0xf8e8, 0xfc2a,
0xffc5, 0x0367, 0x06c3, 0x098b, 0x0b73, 0x0c85, 0x0ce4, 0x0ca5, 0x0bdd, 0x0aa2, 0x08f8, 0x06a5, 0x03d3, 0x00b6,
0xfd87, 0xfa7a, 0xf7c5, 0xf59f, 0xf5bc, 0xf61a, 0xf722, 0xf8ba, 0xfac7, 0xfd30, 0xffd8, 0x02a6, 0x0580, 0x0829,
0x0a3a, 0x0bbc, 0x0cb9, 0x0d3f, 0x0d4c, 0x0c44, 0x0a3b, 0x0785, 0x0478, 0x0169, 0xfead, 0xfc97, 0xfb3e, 0xfa01,
0xf8db, 0xf7d5, 0xf6f8, 0xf64f, 0xf5e2, 0x04ea, 0x04b3, 0x0421, 0x034c, 0x0250, 0x0147, 0x004b, 0xff77, 0xfeaa,
0xfdc3, 0xfcd9, 0xfc02, 0xfb55, 0xfae7, 0xfad0, 0xfb25, 0xfbdc, 0xfcd6, 0xfdf4, 0xff17, 0x0020, 0x00f2, 0x01a2,
0x0253, 0x02fe, 0x039a, 0x0422, 0x048c, 0x04d1, 0x3fff, 0xc001, 0x3fff, 0x0000,
};
// 0x06014714
@ -216,139 +132,77 @@ AnimationLimbVector d_course_yoshi_valley_unk2[] = {
// 0x06014780
Animation d_course_yoshi_valley_unk3 = {
0x00010000,
0x00000000,
0x001d,
0x0008,
d_course_yoshi_valley_unk1,
d_course_yoshi_valley_unk2,
0x00010000, 0x00000000, 0x001d, 0x0008, d_course_yoshi_valley_unk1, d_course_yoshi_valley_unk2,
};
// 0x06014794
Animation *d_course_yoshi_valley_unk4[] = {
Animation* d_course_yoshi_valley_unk4[] = {
&d_course_yoshi_valley_unk3,
};
//! 0x06014798
uintptr_t d_course_yoshi_valley_unk5[] = {
0x00000001,
0x00000002,
0x00000001, 0x00000002,
0x00000000,
0x00000007,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000, 0x00000007, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000,
0x00000001,
0x00000002,
0x00000001, 0x00000002,
0x00000000,
0x00000007,
0x00000000,
d_course_yoshi_valley_dl_142C0,
0x00000000,
0x00000000,
0x00000000,
0x00000000, 0x00000007, 0x00000000, d_course_yoshi_valley_dl_142C0,
0x00000000, 0x00000000, 0x00000000,
0x00000001,
0x00000002,
0x00000001, 0x00000002,
0x00000000,
0x00000007,
0x00000000,
0x00000000,
0x000007f8,
0x00000000,
0x00000000,
0x00000000, 0x00000007, 0x00000000, 0x00000000,
0x000007f8, 0x00000000, 0x00000000,
0x00000001,
0x00000002,
0x00000001, 0x00000002,
0x00000000,
0x00000007,
0x00000000,
d_course_yoshi_valley_dl_143C8,
0x00000000,
0x00000000,
0x00000000,
0x00000000, 0x00000007, 0x00000000, d_course_yoshi_valley_dl_143C8,
0x00000000, 0x00000000, 0x00000000,
0x00000001,
0x00000002,
0x00000001, 0x00000002,
0x00000000,
0x00000007,
0x00000000,
d_course_yoshi_valley_dl_144A8,
0x000001cc,
0x00000000,
0x00000000,
0x00000000, 0x00000007, 0x00000000, d_course_yoshi_valley_dl_144A8,
0x000001cc, 0x00000000, 0x00000000,
0x00000001,
0x00000002,
0x00000001, 0x00000002,
0x00000000,
0x00000007,
0x00000000,
d_course_yoshi_valley_dl_14500,
0x000001cc,
0x00000000,
0x00000000,
0x00000000, 0x00000007, 0x00000000, d_course_yoshi_valley_dl_14500,
0x000001cc, 0x00000000, 0x00000000,
0x00000001,
0x00000002,
0x00000001, 0x00000002,
0x00000000,
0x00000007,
0x00000000,
d_course_yoshi_valley_dl_14558,
0x00000158,
0x00000000,
0x00000000,
0x00000000, 0x00000007, 0x00000000, d_course_yoshi_valley_dl_14558,
0x00000158, 0x00000000, 0x00000000,
0x00000001,
0x00000002,
0x00000001, 0x00000002,
0x00000000,
0x00000007,
0x00000000,
d_course_yoshi_valley_dl_145D0,
0x00000120,
0x00000000,
0x00000000,
0x00000000, 0x00000007, 0x00000000, d_course_yoshi_valley_dl_145D0,
0x00000120, 0x00000000, 0x00000000,
0x00000002,
0x00000002,
0x00000002, 0x00000002,
0x00000002,
0x00000002,
0x00000002, 0x00000002,
0x00000002,
0x00000002,
0x00000002, 0x00000002,
0x00000002,
0x00000002,
0x00000002, 0x00000002,
0x00000002,
0x00000002,
0x00000002, 0x00000002,
0x00000002,
0x00000002,
0x00000002, 0x00000002,
0x00000002,
0x00000002,
0x00000002, 0x00000002,
0x00000002,
0x00000002,
0x00000002, 0x00000002,
0x00000003,
0x00000002,
0x00000003, 0x00000002,
};
// No idea what this stuff is
u32 d_course_yoshi_valley_unk6[] = {
0x00000000,
0x00000001,
};
};

View File

@ -3,19 +3,17 @@
#include <libultra/abi.h>
typedef struct
{
u8 *offset;
typedef struct {
u8* offset;
s32 len;
} ALSeqData;
typedef struct
{
typedef struct {
s16 revision;
s16 seqCount;
ALSeqData seqArray[1];
} ALSeqFile;
void alSeqFileNew(ALSeqFile *f, u8 *base);
void alSeqFileNew(ALSeqFile* f, u8* base);
#endif

View File

@ -5,9 +5,9 @@
#include <macros.h>
#include <common_structs.h>
//#pragma GCC diagnostic push
//#pragma GCC diagnostic ignored "-Wmicrosoft-extension"
//#pragma GCC diagnostic ignored "-Wmissing-member-name-in-structure-/-union"
// #pragma GCC diagnostic push
// #pragma GCC diagnostic ignored "-Wmicrosoft-extension"
// #pragma GCC diagnostic ignored "-Wmissing-member-name-in-structure-/-union"
/**
* gActorList should be understood to be populated by generic Actor structs.
@ -90,16 +90,16 @@ enum ActorType {
// Actor shell->state (green, red and blue)
enum ShellState {
HELD_SHELL, // Single shell that has not been dropped. (probably holding Z).
RELEASED_SHELL, // This is the short window where single shells aren't being held or launched.
MOVING_SHELL, // Moving towards its target after being shot.
RED_SHELL_LOCK_ON, // Red shell is targeting.
TRIPLE_GREEN_SHELL, // Loses triple shell state when shot.
GREEN_SHELL_HIT_A_RACER, // A racer has been hit by a green shell.
TRIPLE_RED_SHELL, // Loses triple shell state when shot.
DESTROYED_SHELL, // Collision with the shell.
BLUE_SHELL_LOCK_ON, // A blue shell has found a target and is hastily approaching it.
BLUE_SHELL_TARGET_ELIMINATED // Mission completed, well done boss.
HELD_SHELL, // Single shell that has not been dropped. (probably holding Z).
RELEASED_SHELL, // This is the short window where single shells aren't being held or launched.
MOVING_SHELL, // Moving towards its target after being shot.
RED_SHELL_LOCK_ON, // Red shell is targeting.
TRIPLE_GREEN_SHELL, // Loses triple shell state when shot.
GREEN_SHELL_HIT_A_RACER, // A racer has been hit by a green shell.
TRIPLE_RED_SHELL, // Loses triple shell state when shot.
DESTROYED_SHELL, // Collision with the shell.
BLUE_SHELL_LOCK_ON, // A blue shell has found a target and is hastily approaching it.
BLUE_SHELL_TARGET_ELIMINATED // Mission completed, well done boss.
};
// Actor banana->state
@ -113,7 +113,7 @@ enum BananaState {
};
// Actor fakeItemBox->state
#define HELD_FAKE_ITEM_BOX 0 // Item box is being held be Z.
#define HELD_FAKE_ITEM_BOX 0 // Item box is being held be Z.
#define FAKE_ITEM_BOX_ON_GROUND 1 // Item box is on the ground.
#define DESTROYED_FAKE_ITEM_BOX 2 // Collision with fake item box.
@ -200,7 +200,7 @@ struct ActorSpawnData {
* So, this struct type acts as both spawn data AND a stripped down Actor for those trees.
* Give the tree a position, a byte for flags stuffed into an s16 used to indicate tree sub-type,
* and an s16 containing as the tree's original Y position.
**/
**/
struct UnkActorSpawnData {
/* 0x00 */ Vec3s pos;
// Techinically only the bottom byte of someId is the "id". The top byte is used for flags.
@ -230,9 +230,11 @@ struct YoshiValleyEgg {
struct KiwanoFruit {
/* 0x00 */ s16 type;
/* 0x02 */ s16 flags;
/* 0x04 */ s16 targetPlayer; // Id of the player this actor tracks. Each player has their own kiwano actor just for them
/* 0x04 */ s16
targetPlayer; // Id of the player this actor tracks. Each player has their own kiwano actor just for them
/* 0x06 */ s16 state;
/* 0x08 */ f32 bonkTimer; // bonkState? Not sure what this is tracking, but its some form of count down that starts after the fruit hits you
/* 0x08 */ f32 bonkTimer; // bonkState? Not sure what this is tracking, but its some form of count down that starts
// after the fruit hits you
/* 0x0C */ f32 boundingBoxSize;
/* 0x10 */ s16 animState;
/* 0x12 */ s16 animTimer;
@ -315,8 +317,9 @@ struct ShellActor {
/* 0x0C */ f32 boundingBoxSize;
/* 0x10 */ s16 rotVelocity; // Change in rotAngle on a per-update basis
union {
/* 0x12 */ s16 rotAngle; // Angle of rotation around player (or parent?), not the rotation of the shell itself
/* 0x12 */ u16 pathIndex; // Index in the set of points that make up the "path" the red/blue shell follows (may be GP mode exclusive)
/* 0x12 */ s16 rotAngle; // Angle of rotation around player (or parent?), not the rotation of the shell itself
/* 0x12 */ u16 pathIndex; // Index in the set of points that make up the "path" the red/blue shell follows (may
// be GP mode exclusive)
};
/* 0x14 */ s16 playerId; // Id of the player that "owns" the shell
/* 0x16 */ s16 unk_16;
@ -331,8 +334,8 @@ struct ItemBox {
/* 0x04 */ s16 someTimer;
/* 0x06 */ s16 state;
/* 0x08 */ f32 resetDistance; // Value added to the Y position when box is touched. Expected to be negative
// Distance at which a player can activate the item box
// Named "bounding box" to match the name used for the "size" of a kart
// Distance at which a player can activate the item box
// Named "bounding box" to match the name used for the "size" of a kart
/* 0x0C */ f32 boundingBoxSize;
/* 0x10 */ Vec3s rot;
/* 0x16 */ s16 unk_16;
@ -366,7 +369,7 @@ struct BananaBunchParent {
/* 0x06 */ s16 state;
/* 0x08 */ f32 unk_08;
/* 0x0C */ f32 unk_0C;
/* 0x10 */ s16 playerId; // Player that own the bananas
/* 0x10 */ s16 playerId; // Player that own the bananas
/* 0x12 */ s16 bananaIndices[5]; // Indices in gActorList for the bananas owned by this parent
/* 0x1C */ s16 bananasAvailable;
/* 0x1E */ s16 unk_1E;
@ -385,9 +388,9 @@ struct BananaActor {
union {
/* 0x10 */ Vec3s rot;
struct {
/* 0x10 */ s16 playerId; // Id of the player that owns this banana
/* 0x12 */ s16 elderIndex; // Index in gActorList of the next-oldest banana in the bunch
/* 0x14 */ s16 youngerIndex; // Index in gActorList of the next-youngest banana in the bunch
/* 0x10 */ s16 playerId; // Id of the player that owns this banana
/* 0x12 */ s16 elderIndex; // Index in gActorList of the next-oldest banana in the bunch
/* 0x14 */ s16 youngerIndex; // Index in gActorList of the next-youngest banana in the bunch
};
};
/* 0x16 */ s16 unk_16;
@ -396,6 +399,6 @@ struct BananaActor {
/* 0x30 */ Collision unk30;
}; // size = 0x70
//#pragma GCC diagnostic pop
// #pragma GCC diagnostic pop
#endif // ACTOR_TYPES_H

View File

@ -3,10 +3,12 @@
uint8_t GameEngine_OTRSigCheck(char* imgData);
#if defined(_WIN32)
#define ALIGN_ASSET(x) __declspec(align(x))
#define ALIGN_ASSET(x) __declspec(align(x))
#else
#define ALIGN_ASSET(x) __attribute__((aligned (x)))
#define ALIGN_ASSET(x) __attribute__((aligned(x)))
#endif
#define LOAD_ASSET(path) (path == NULL ? NULL : (GameEngine_OTRSigCheck((const char*) path) ? ResourceGetDataByName((const char*) path) : path))
#define LOAD_ASSET(path) \
(path == NULL ? NULL \
: (GameEngine_OTRSigCheck((const char*) path) ? ResourceGetDataByName((const char*) path) : path))
#define LOAD_ASSET_RAW(path) ResourceGetDataByName((const char*) path)

View File

@ -4,53 +4,53 @@
#include <common_structs.h>
#include <mk64.h>
#define NUM_BOMB_KARTS_MAX 7
#define NUM_BOMB_KARTS_MAX 7
#define NUM_BOMB_KARTS_VERSUS 7
#define NUM_BOMB_KARTS_BATTLE 4
#define BOMB_STATE_INACTIVE 0
#define BOMB_STATE_CCW 1
#define BOMB_STATE_CW 2
#define BOMB_STATE_INACTIVE 0
#define BOMB_STATE_CCW 1
#define BOMB_STATE_CW 2
#define BOMB_STATE_STATIONARY 3 // Paused?
#define BOMB_STATE_EXPLODED 4 // Or maybe exploding?
#define BOMB_STATE_UNKNOWN 5
#define BOMB_STATE_EXPLODED 4 // Or maybe exploding?
#define BOMB_STATE_UNKNOWN 5
typedef struct {
/* 0x00 */ u16 waypointIndex;
/* 0x02 */ u16 startingState;
/* 0x04 */ f32 unk_04; // Used to set the value of unk_3C in BombKart
/* 0x08 */ f32 startingXPos;
/* 0x0C */ f32 startingZPos;
/**
* These 2 never seem to get referenced. They also only have non-zero
* data for the Yoshi Valley set of spawns
**/
/* 0x10 */ f32 unk_10;
/* 0x14 */ f32 unk_14;
/* 0x00 */ u16 waypointIndex;
/* 0x02 */ u16 startingState;
/* 0x04 */ f32 unk_04; // Used to set the value of unk_3C in BombKart
/* 0x08 */ f32 startingXPos;
/* 0x0C */ f32 startingZPos;
/**
* These 2 never seem to get referenced. They also only have non-zero
* data for the Yoshi Valley set of spawns
**/
/* 0x10 */ f32 unk_10;
/* 0x14 */ f32 unk_14;
} BombKartSpawn; // size = 0x18
typedef struct {
/**
* This struct is in part representative of the
* bomb kart hazards in VS mode.
* There may be objects associated with them too
**/
/* 0x00 */ Vec3f bombPos;
/* 0x0C */ Vec3f wheel1Pos;
/* 0x18 */ Vec3f wheel2Pos;
/* 0x24 */ Vec3f wheel3Pos;
/* 0x30 */ Vec3f wheel4Pos;
/* 0x3C */ f32 unk_3C;
/* 0x40 */ u16 someRot; // seems like an angle of some variety, can't figure out its purpose
/* 0x42 */ u16 waypointIndex; // probably the waypoint that the bomb circles
/* 0x44 */ u16 state;
/* 0x46 */ u16 bounceTimer; // timer? state? height?
/* 0x48 */ u16 circleTimer; // timer? state? Somehow controls how it circles around
/* 0x4A */ u16 unk_4A;
/* 0x4C */ s16 unk_4C;
/* 0x4E */ // s16 compilerPadding;
/* 0x50 */ f32 yPos; // Y position of the center of the circle
} BombKart; // size = 0x54
/**
* This struct is in part representative of the
* bomb kart hazards in VS mode.
* There may be objects associated with them too
**/
/* 0x00 */ Vec3f bombPos;
/* 0x0C */ Vec3f wheel1Pos;
/* 0x18 */ Vec3f wheel2Pos;
/* 0x24 */ Vec3f wheel3Pos;
/* 0x30 */ Vec3f wheel4Pos;
/* 0x3C */ f32 unk_3C;
/* 0x40 */ u16 someRot; // seems like an angle of some variety, can't figure out its purpose
/* 0x42 */ u16 waypointIndex; // probably the waypoint that the bomb circles
/* 0x44 */ u16 state;
/* 0x46 */ u16 bounceTimer; // timer? state? height?
/* 0x48 */ u16 circleTimer; // timer? state? Somehow controls how it circles around
/* 0x4A */ u16 unk_4A;
/* 0x4C */ s16 unk_4C;
/* 0x4E */ // s16 compilerPadding;
/* 0x50 */ f32 yPos; // Y position of the center of the circle
} BombKart; // size = 0x54
//! Indexes for the objects associated with the Bomb Karts
extern s32 gIndexObjectBombKart[NUM_BOMB_KARTS_MAX];

View File

@ -16,20 +16,13 @@ typedef f32 Mat3[3][3];
typedef f32 Mat4[4][4];
// might not be real, used by func_8002C954
typedef struct
{
f32 x, y, z;
typedef struct {
f32 x, y, z;
} Vec3fs;
// This was added as a silly idea:
// In the data to use "A, B, Z, R" instead of hex numbers.
typedef enum {
A = 0x80,
B = 0x40,
Z = 0x20,
R = 0x10
} GhostController;
typedef enum { A = 0x80, B = 0x40, Z = 0x20, R = 0x10 } GhostController;
/*** types.h ***/
@ -47,17 +40,15 @@ enum SpTaskState {
SPTASK_STATE_FINISHED_DP
};
struct SPTask
{
struct SPTask {
/*0x00*/ OSTask task;
/*0x40*/ OSMesgQueue *msgqueue;
/*0x40*/ OSMesgQueue* msgqueue;
/*0x44*/ OSMesg msg;
/*0x48*/ enum SpTaskState state;
}; // size = 0x4C, align = 0x8
struct VblankHandler
{
OSMesgQueue *queue;
struct VblankHandler {
OSMesgQueue* queue;
OSMesg msg;
};
@ -75,8 +66,8 @@ struct Controller {
u16 buttonPressed; // OnTriggered
u16 buttonDepressed; // OffTriggered
u16 stickDirection;
u16 stickPressed; // OffTriggered
u16 stickDepressed; // OnTriggered
u16 stickPressed; // OffTriggered
u16 stickDepressed; // OnTriggered
};
// Camera path struct? Or something like that. For GP race won scene?
@ -119,14 +110,17 @@ struct UnkStruct_802B53C8 {
// end math util structs
struct UnkStruct_800DDB68 {
s32 *D_800ED600; s32 *D_800ED608; s32 *D_800ED610; s32 *D_800ED618;
s32 *D_800ED620; s32 *D_800ED628; s32 *D_800ED630; s32 *D_800ED638;
s32* D_800ED600;
s32* D_800ED608;
s32* D_800ED610;
s32* D_800ED618;
s32* D_800ED620;
s32* D_800ED628;
s32* D_800ED630;
s32* D_800ED638;
};
/*** Types.h end ***/
typedef struct {
u8 button;
s8 frameDuration;
@ -182,9 +176,9 @@ typedef struct {
// This struct is almost identical to the GBI Vtx_t type,
// except that its missing the "flag" member.
typedef struct {
s16 ob[3]; /* x, y, z */
s16 tc[2]; /* texture coord */
s8 ca[4]; /* color & alpha */
s16 ob[3]; /* x, y, z */
s16 tc[2]; /* texture coord */
s8 ca[4]; /* color & alpha */
} CourseVtx;
/*
@ -195,26 +189,25 @@ The original author is assumed to be RenaKunisaki
*/
typedef struct {
/* 0x00 */ u16 flags;
// Top bytes is a collections of flags, bottom byte is of unknown purpose
//bit 7: 1 = only tangible if landed on, not if driven onto?
// very weird. game crashes sometimes when playing with this.
//bit 6: 1 = Lakitu can drop you here (XXX verify)
//bit 4: 1 = out of bounds
//bit 3: 1 = player tumbles upon contact (may fall right through)
// Top bytes is a collections of flags, bottom byte is of unknown purpose
// bit 7: 1 = only tangible if landed on, not if driven onto?
// very weird. game crashes sometimes when playing with this.
// bit 6: 1 = Lakitu can drop you here (XXX verify)
// bit 4: 1 = out of bounds
// bit 3: 1 = player tumbles upon contact (may fall right through)
/* 0x02 */ u16 surfaceType;
// For AABB bounding-box style collision. Box style collision is cheaper than checking each vtx.
/* 0x04 */ s16 minX; // Minimum x coordinate
s16 minY; // Minimum y coordinate
s16 minZ; // Minimum z coordinate
s16 maxX; // Maximum x coordinate
s16 maxY; // Maximum y coordinate
/* 0x0A */ s16 maxZ; // Maximum z coordinate
// Three vertices to make a triangle
/* 0x10 */ Vtx *vtx1;
Vtx *vtx2;
Vtx *vtx3;
// Face normal. Should really be Vec3f normal
// For AABB bounding-box style collision. Box style collision is cheaper than checking each vtx.
/* 0x04 */ s16 minX; // Minimum x coordinate
s16 minY; // Minimum y coordinate
s16 minZ; // Minimum z coordinate
s16 maxX; // Maximum x coordinate
s16 maxY; // Maximum y coordinate
/* 0x0A */ s16 maxZ; // Maximum z coordinate
/* 0x10 */ Vtx* vtx1; // pointer to the 3 vertices of this poly
Vtx* vtx2;
Vtx* vtx3;
// Face normal. Should really be Vec3f normal
/* 0x1C */ f32 normalX;
/* 0x20 */ f32 normalY;
/* 0x24 */ f32 normalZ;
@ -223,20 +216,20 @@ typedef struct {
typedef struct {
/* 0x00 */ Vec3f pos;
/* 0x0C */ u8 surfaceType; // Surface type that the tyre is touching.
/* 0x0D */ u8 surfaceFlags;
/* 0x0C */ u8 surfaceType; // Surface type that the tyre is touching.
/* 0x0D */ u8 surfaceFlags;
/* 0x0E */ u16 collisionMeshIndex; // Index into gCollisionMesh
// Height of tyre attached to ground. When flying it floats with the kart.
// Height of tyre attached to ground. When flying it floats with the kart.
/* 0x10 */ f32 baseHeight;
// Something lighting related. 1 when in a shaded region, 2 when in a tree's shadow
// 3 when getting crushed by a whomp, but curiously only the front left tyre will ever have this value
/* 0x14 */ s32 unk_14;
} KartTyre; // size = 0x18
#define FRONT_LEFT 0
#define FRONT_LEFT 0
#define FRONT_RIGHT 1
#define BACK_LEFT 2
#define BACK_RIGHT 3
#define BACK_LEFT 2
#define BACK_RIGHT 3
struct UnkPlayerInner {
/* 0xDB4 */ s16 unk0;
@ -260,7 +253,7 @@ typedef struct {
/* 0x0006 */ u16 unk_006;
/* 0x0008 */ s16 lapCount;
/* 0x000A */ char unk_00A[0x2];
/* 0x000C */ s32 soundEffects; // Bitflag.
/* 0x000C */ s32 soundEffects; // Bitflag.
/* 0x0010 */ s16 currentItemCopy; // Has no effect on what item the players has, It is just a synced copy
/* 0x0012 */ s16 unk_012;
/* 0x0014 */ Vec3f pos;
@ -371,22 +364,32 @@ typedef struct {
/* 0x0DAC */ f32 unk_DAC;
/* 0x0DB0 */ f32 unk_DB0;
/* 0x0DB4 */ struct UnkPlayerInner unk_DB4;
u32 nControlFlags; // Is racer human, ai, or networked controlled?
s32 nCharacter; // Networked character choice
s32 nStartingRank;
u32 nHasAuthority;
/* 0x0DB6 */ // s16 unk_DB6;
/* 0x0DB8 */ // f32 unk_DB8;
/* 0x0DBC */ // f32 unk_DBC;
/* 0x0DC0 */ // f32 unk_DC0;
/* 0x0DC4 */ // f32 unk_DC4;
/* 0x0DC8 */ // f32 unk_DC8;
/* 0x0DCC */ // s16 unk_DCC;
/* 0x0DCE */ // s16 unk_DCE;
/* 0x0DD0 */ // s16 unk_DD0;
/* 0x0DD2 */ // s16 unk_DD2;
/* 0x0DD4 */ // s16 unk_DD4;
u32 nControlFlags; // Is racer human, ai, or networked controlled?
s32 nCharacter; // Networked character choice
s32 nStartingRank;
u32 nHasAuthority;
} Player; // size = 0xDD8
typedef struct
{
typedef struct {
// Something related to time trial ghost data?
/* 0x00 */ s32 unk_00;
/* 0x04 */ u8 ghostDataSaved;
/* 0x05 */ s8 courseIndex;
/* 0x06 */ u8 characterId;
/* 0x07 */ u8 unk_07[0x3C];
/* 0x43 */ u8 pad_43[0x7F-0x43];
/* 0x7F */ u8 checksum;
/* 0x04 */ u8 ghostDataSaved;
/* 0x05 */ s8 courseIndex;
/* 0x06 */ u8 characterId;
/* 0x07 */ u8 unk_07[0x3C];
/* 0x43 */ u8 pad_43[0x7F - 0x43];
/* 0x7F */ u8 checksum;
} struct_8018EE10_entry; // size = 0x80
typedef struct {
@ -400,9 +403,9 @@ typedef struct {
// Also might be used for the camera during the post race screens
typedef struct {
/* 0x00 */ f32 unknownScaling; // Looks to be some type of scaling, unknown use
/* 0x04 */ f32 rankScaling; // Scaling done on the rank text in the bottom left corner of the screen
// All time measurements are in centiseconds
/* 0x08 */ u32 someTimer; // The someTimers seem to always have the same value, the total time since race start
/* 0x04 */ f32 rankScaling; // Scaling done on the rank text in the bottom left corner of the screen
// All time measurements are in centiseconds
/* 0x08 */ u32 someTimer; // The someTimers seem to always have the same value, the total time since race start
/* 0x0C */ u32 someTimer1;
/* 0x10 */ u32 timeLastTouchedFinishLine; // Sum of time of all completed laps
// Times at which each lap was completed
@ -445,30 +448,33 @@ typedef struct {
// These 4 X coordinates are "slide" values
union {
struct {
/* 0x50 */ s16 lap1CompletionTimeX; // Pulls double-duty as timerAfterImage1X
/* 0x52 */ s16 lap2CompletionTimeX; // Pulls double-duty as timerAfterImage2X
/* 0x54 */ s16 lap3CompletionTimeX;
/* 0x50 */ s16 lap1CompletionTimeX; // Pulls double-duty as timerAfterImage1X
/* 0x52 */ s16 lap2CompletionTimeX; // Pulls double-duty as timerAfterImage2X
/* 0x54 */ s16 lap3CompletionTimeX;
};
/* 0x50 */ s16 lapCompletionTimeXs[3];
};
/* 0x56 */ s16 totalTimeX;
/* 0x58 */ s16 timerY; // Y coordinate of the on screen timer (used as Y coordinate for lap completion times in post-race screen)
/* 0x5A */ s16 lapX; // X coordinate of the on screen lap counter
// 0x5C and 0x5E seem to be relative to lapX
/* 0x58 */ s16 timerY; // Y coordinate of the on screen timer (used as Y coordinate for lap completion times in
// post-race screen)
/* 0x5A */ s16 lapX; // X coordinate of the on screen lap counter
// 0x5C and 0x5E seem to be relative to lapX
/* 0x5C */ s16 lapAfterImage1X;
/* 0x5E */ s16 lapAfterImage2X;
/* 0x60 */ s16 lapY; // Y coordinate of the on screen lap counter
/* 0x60 */ s16 lapY; // Y coordinate of the on screen lap counter
/* 0x62 */ s16 rankX; // X coordinate of the on screen rank indicator
/* 0x64 */ s16 rankY; // Y coordinate of the on screen rank indicator
/* 0x66 */ s16 slideRankX; // Adds with the other rankX, used during post race screen to make the rank "slide" into place
/* 0x68 */ s16 slideRankY; // Adds with the other rankY, used during post race screen to make the rank "slide" into place
/* 0x66 */ s16
slideRankX; // Adds with the other rankX, used during post race screen to make the rank "slide" into place
/* 0x68 */ s16
slideRankY; // Adds with the other rankY, used during post race screen to make the rank "slide" into place
/* 0x6A */ s16 stagingPosition; // Position to take during race staging
// These s16's occasionally have values, but I have yet to identify any places that read them
// They appear to have values when in 3/4 player split screen mode, otherwise they're 0
/* 0x6C */ s16 unk_6C;
/* 0x6E */ s16 unk_6E;
/* 0x70 */ s8 raceCompleteBool; // Indicates if race is over?
/* 0x71 */ s8 lapCount; // This increases to 3 when a race is over, while alsoLapCount stays at 2
/* 0x71 */ s8 lapCount; // This increases to 3 when a race is over, while alsoLapCount stays at 2
/* 0x72 */ s8 alsoLapCount;
// Related to the timer blinking on lap completion
// If blinkTimer is counting down:
@ -481,7 +487,8 @@ typedef struct {
/* 0x76 */ u8 itemOverride; // Something related to item generation. If non-zero, it determines the item you get
/* 0x77 */ s8 unk_77;
// 0x78 to 0x7F appear to be some type of "state" trackers for the lap and timer text during a race start
// When a race starts those texts (and their afterimages) slide in and "bounce" a bit. These states control the bouncing (somehow)
// When a race starts those texts (and their afterimages) slide in and "bounce" a bit. These states control the
// bouncing (somehow)
/* 0x78 */ u8 unk_78;
/* 0x79 */ u8 unk_79;
/* 0x7A */ u8 unk_7A;

View File

@ -7,7 +7,7 @@
/**
* @file Include for course gfx.inc.c.
*/
*/
typedef struct {
uintptr_t addr;

View File

@ -7,9 +7,8 @@
#include <assets/other_textures.h>
#include "animation.h"
typedef struct
{
u8 *addr; // segmented address texture file
typedef struct {
u8* addr; // segmented address texture file
u32 file_size; // compressed file size
u32 data_size; // uncompressed texture size
u32 padding; // always zero
@ -25,30 +24,30 @@ extern Animation d_course_sherbet_land_unk_data7;
extern s16 d_course_sherbet_land_unk_data8[];
extern AnimationLimbVector d_course_sherbet_land_unk_data9[];
extern Animation d_course_sherbet_land_unk_data10;
extern Animation *d_course_sherbet_land_unk_data11[];
extern Animation* d_course_sherbet_land_unk_data11[];
extern u32 d_course_sherbet_land_unk_data12[];
extern s16 d_rainbow_road_chomp_jaw_animation[];
extern AnimationLimbVector d_rainbow_road_unk1[];
extern Animation d_rainbow_road_unk2;
extern Animation *d_rainbow_road_unk3[];
extern Animation* d_rainbow_road_unk3[];
extern uintptr_t d_rainbow_road_unk4[];
extern u32 d_rainbow_road_unk5[];
extern Gfx *koopa_troopa_beach_dls1[];
extern Gfx *koopa_troopa_beach_dls2[];
extern Gfx* koopa_troopa_beach_dls1[];
extern Gfx* koopa_troopa_beach_dls2[];
extern u32 d_course_koopa_troopa_beach_unk_data1[];
extern s16 d_course_koopa_troopa_beach_unk_data2[];
extern AnimationLimbVector d_course_koopa_troopa_beach_unk_data3[];
extern Animation d_course_koopa_troopa_beach_unk_data4;
extern uintptr_t d_course_koopa_troopa_beach_unk4[];
extern Animation *d_course_koopa_troopa_beach_unk_data5[];
extern Animation* d_course_koopa_troopa_beach_unk_data5[];
extern u32 d_course_koopa_troopa_beach_unk_data6[];
extern s16 d_course_yoshi_valley_unk1[];
extern AnimationLimbVector d_course_yoshi_valley_unk2[];
extern Animation d_course_yoshi_valley_unk3;
extern Animation *d_course_yoshi_valley_unk4[];
extern Animation* d_course_yoshi_valley_unk4[];
extern uintptr_t d_course_yoshi_valley_unk5[];
extern u32 d_course_yoshi_valley_unk6[];
@ -62,28 +61,28 @@ extern Animation d_course_sherbet_land_unk_data7;
extern s16 d_course_sherbet_land_unk_data8[];
extern AnimationLimbVector d_course_sherbet_land_unk_data9[];
extern Animation d_course_sherbet_land_unk_data10;
extern Animation *d_course_sherbet_land_unk_data11[];
extern Animation* d_course_sherbet_land_unk_data11[];
extern u32 d_course_sherbet_land_unk_data12[];
extern s16 d_rainbow_road_chomp_jaw_animation[];
extern AnimationLimbVector d_rainbow_road_unk1[];
extern Animation d_rainbow_road_unk2;
extern Animation *d_rainbow_road_unk3[];
extern Animation* d_rainbow_road_unk3[];
extern u32 d_rainbow_road_unk5[];
extern Gfx *koopa_troopa_beach_dls1[];
extern Gfx *koopa_troopa_beach_dls2[];
extern Gfx* koopa_troopa_beach_dls1[];
extern Gfx* koopa_troopa_beach_dls2[];
extern u32 d_course_koopa_troopa_beach_unk_data1[];
extern s16 d_course_koopa_troopa_beach_unk_data2[];
extern AnimationLimbVector d_course_koopa_troopa_beach_unk_data3[];
extern Animation d_course_koopa_troopa_beach_unk_data4;
extern Animation *d_course_koopa_troopa_beach_unk_data5[];
extern Animation* d_course_koopa_troopa_beach_unk_data5[];
extern u32 d_course_koopa_troopa_beach_unk_data6[];
extern s16 d_course_yoshi_valley_unk1[];
extern AnimationLimbVector d_course_yoshi_valley_unk2[];
extern Animation d_course_yoshi_valley_unk3;
extern Animation *d_course_yoshi_valley_unk4[];
extern Animation* d_course_yoshi_valley_unk4[];
extern u32 d_course_yoshi_valley_unk6[];
#endif // COURSE_OFFSETS_H

View File

@ -27,14 +27,14 @@
#define TEXT_X_POSSITION -0x5
// flags
#define DISPLAY_DECIMAL_NUMBER 0x1
#define DISPLAY_HEXIDECIMAL_NUMBER 0x2
#define DISPLAY_OCTAL_NUMBER 0x4
#define DISPLAY_BINARY_NUMBER 0x8
#define DISPLAY_SIGNED_NUMBER 0x10
#define DISPLAY_FLOAT_AS_TYPE 0x20
#define DISPLAY_FLOAT_WITH_ROUNDING 0x40
#define DISPLAY_FLOAT_NUMBER 0x80
#define DISPLAY_DECIMAL_NUMBER 0x1
#define DISPLAY_HEXIDECIMAL_NUMBER 0x2
#define DISPLAY_OCTAL_NUMBER 0x4
#define DISPLAY_BINARY_NUMBER 0x8
#define DISPLAY_SIGNED_NUMBER 0x10
#define DISPLAY_FLOAT_AS_TYPE 0x20
#define DISPLAY_FLOAT_WITH_ROUNDING 0x40
#define DISPLAY_FLOAT_NUMBER 0x80
#define HEXIDECIMAL 16
#define DECIMAL 10
@ -45,14 +45,13 @@
* This structure is the heart of the DVDL.
* only the first 4 attributes should be set by the user, the other 2 are used by the program.
*/
typedef struct
{
char *variableName; // name of the variable to be displayed
void *variablePointer; // pointer to the variable so it can display it
u8 variableSize; // size of the variable to make up for templates from C++
u8 variableFlag; // flag to change how the variable is displayed
char buffer[CHARACTER_BUFFER_SIZE]; // when converting a variable to string this will be filled
char *characterBuffer; // silly pointer so i don't need to do stuff
typedef struct {
char* variableName; // name of the variable to be displayed
void* variablePointer; // pointer to the variable so it can display it
u8 variableSize; // size of the variable to make up for templates from C++
u8 variableFlag; // flag to change how the variable is displayed
char buffer[CHARACTER_BUFFER_SIZE]; // when converting a variable to string this will be filled
char* characterBuffer; // silly pointer so i don't need to do stuff
} variableWatchAttributes;
/**

View File

@ -1,7 +1,6 @@
#ifndef DEFINES_H
#define DEFINES_H
/**
* @brief Options for Controller Pak state
*/
@ -10,23 +9,23 @@
/**
* @brief Enable debug mode
*
*
* Press start to skip through menus
*
*
* Toggle resource meters by holding R and tapping B. L must not be held.
*
*
* Reset to start screen by holding A, B, R, and L.
*
*
* View player direction and currentPathPoint in a single player race during staging tap L while holding A and B.
* Turn off this UI by tapping R while holding A and B.
* @bug This looks like it should work at any point in the race.
*
*
* Set player 1 to the final lap by tapping D-pad up.
* Set player 1 and player 2 to the final lap by tapping D-pad right.
* Set player all players to the final lap by tapping D-pad down.
*
*
* Immediately start the race if any controller presses Z.
*
*
* As the ceremony cutscene starts hold a C or D-pad to switch characters.
* C UP = LUIGI
* C LEFT = YOSHI
@ -36,17 +35,18 @@
* D-pad LEFT = PEACH
* D-pad RIGHT = BOWSER
* D-pad DOWN = MARIO
*
*
*/
#if defined(GCC) || defined(DEBUG)
#define DEBUG_MODE 1
#define DEBUG_MENU 2
#define DEBUG_MODE 1
#define DEBUG_MENU 2
#else
#define DEBUG_MODE 1
#define DEBUG_MENU 2
#define DEBUG_MODE 1
#define DEBUG_MENU 2
#endif
#define HOLD_ALL_DPAD_AND_C_BUTTONS (U_JPAD | L_JPAD | R_JPAD | D_JPAD | U_CBUTTONS | L_CBUTTONS | R_CBUTTONS | D_CBUTTONS)
#define HOLD_ALL_DPAD_AND_C_BUTTONS \
(U_JPAD | L_JPAD | R_JPAD | D_JPAD | U_CBUTTONS | L_CBUTTONS | R_CBUTTONS | D_CBUTTONS)
/**
* @brief Options for gDebugMenuSelection
@ -75,11 +75,11 @@
#define DEMO_MODE_INACTIVE 0
#ifdef VERSION_EU
#define COURSE_TIMER_ITER 0.020041665999999999 // 1 / 50
#define COURSE_TIMER_ITER_f 0.020041665999999999f // 1 / 50
#define COURSE_TIMER_ITER 0.020041665999999999 // 1 / 50
#define COURSE_TIMER_ITER_f 0.020041665999999999f // 1 / 50
#else
#define COURSE_TIMER_ITER 0.01666666 // 1 / 60
#define COURSE_TIMER_ITER_f 0.01666666f // 1 / 60
#define COURSE_TIMER_ITER 0.01666666 // 1 / 60
#define COURSE_TIMER_ITER_f 0.01666666f // 1 / 60
#endif
#define V_BlANK_TIMER_ITER 0.01666666
@ -90,16 +90,16 @@
* Start sequence means waiting for the light to turn green.
* Used in the Player struct's 'type' member: player->type
*/
#define PLAYER_INACTIVE 0 // 0x0000
#define PLAYER_UNKNOWN_0x40 (1 << 6) // 0x0040
#define PLAYER_INVISIBLE_OR_BOMB (1 << 8) // 0x0100
#define PLAYER_STAGING (1 << 9) // 0x0200
#define PLAYER_UNKNOWN (1 << 10) // 0x0400 // unused ?
#define PLAYER_CINEMATIC_MODE (1 << 11) // 0x0800 // Also used to track eliminations in Battle mode.
#define PLAYER_KART_AI (1 << 12) // 0x1000
#define PLAYER_START_SEQUENCE (1 << 13) // 0x2000
#define PLAYER_HUMAN (1 << 14) // 0x4000
#define PLAYER_EXISTS (1 << 15) // 0x8000
#define PLAYER_INACTIVE 0 // 0x0000
#define PLAYER_UNKNOWN_0x40 (1 << 6) // 0x0040
#define PLAYER_INVISIBLE_OR_BOMB (1 << 8) // 0x0100
#define PLAYER_STAGING (1 << 9) // 0x0200
#define PLAYER_UNKNOWN (1 << 10) // 0x0400 // unused ?
#define PLAYER_CINEMATIC_MODE (1 << 11) // 0x0800 // Also used to track eliminations in Battle mode.
#define PLAYER_KART_AI (1 << 12) // 0x1000
#define PLAYER_START_SEQUENCE (1 << 13) // 0x2000
#define PLAYER_HUMAN (1 << 14) // 0x4000
#define PLAYER_EXISTS (1 << 15) // 0x8000
// Compiles to -0x1000 in diff.py
#define PLAYER_HUMAN_AND_KART_AI PLAYER_EXISTS | PLAYER_HUMAN | PLAYER_KART_AI | PLAYER_START_SEQUENCE
@ -125,13 +125,13 @@ enum PlayerId {
#define NUM_PLAYERS 8
#define MARIO_SIZE 0.75f
#define LUIGI_SIZE 0.75f
#define YOSHI_SIZE 0.75f
#define TOAD_SIZE 0.75f
#define DK_SIZE 0.75f
#define WARIO_SIZE 0.75f
#define PEACH_SIZE 0.75f
#define MARIO_SIZE 0.75f
#define LUIGI_SIZE 0.75f
#define YOSHI_SIZE 0.75f
#define TOAD_SIZE 0.75f
#define DK_SIZE 0.75f
#define WARIO_SIZE 0.75f
#define PEACH_SIZE 0.75f
#define BOWSER_SIZE 0.75f
// 2P Game has Grand Prix, VS, and Battle as available game types
@ -140,10 +140,10 @@ enum PlayerId {
/**
* @brief Options for gModeSelection
*/
#define GRAND_PRIX 0
#define GRAND_PRIX 0
#define TIME_TRIALS 1
#define VERSUS 2
#define BATTLE 3
#define VERSUS 2
#define BATTLE 3
/**
* @brief Options for gCCSelection
@ -153,11 +153,11 @@ enum PlayerId {
* Generally, the main determiner of horsepower output.
*/
#define CC_50 0
#define CC_100 1
#define CC_150 2
#define CC_EXTRA 3
#define CC_BATTLE 4
#define CC_50 0
#define CC_100 1
#define CC_150 2
#define CC_EXTRA 3
#define CC_BATTLE 4
/**
* @brief Options for gCupSelection
@ -166,11 +166,11 @@ enum PlayerId {
* way race courses are.
*/
#define MUSHROOM_CUP 0
#define FLOWER_CUP 1
#define STAR_CUP 2
#define SPECIAL_CUP 3
#define BATTLE_CUP 4
#define NUM_CUPS 5
#define FLOWER_CUP 1
#define STAR_CUP 2
#define SPECIAL_CUP 3
#define BATTLE_CUP 4
#define NUM_CUPS 5
/**
* @brief Character IDs
@ -178,13 +178,13 @@ enum PlayerId {
* found in gCharacterGridSelections as those are
* ordered by table
*/
#define MARIO 0
#define LUIGI 1
#define YOSHI 2
#define TOAD 3
#define DK 4
#define WARIO 5
#define PEACH 6
#define MARIO 0
#define LUIGI 1
#define YOSHI 2
#define TOAD 3
#define DK 4
#define WARIO 5
#define PEACH 6
#define BOWSER 7
/**
@ -220,7 +220,8 @@ enum PlayerId {
#define DATA_SELECTION 2
#define PLAYER_NUM_SELECTION 3
#define GAME_MODE_SELECTION 4
#define GAME_MODE_CC_OR_TIME_TRIALS_OPTIONS_SELECTION 5 // Selecting CC for GP and Versus. Selecting "Begin" or "Data" for Time Trials. Unused for Battle
#define GAME_MODE_CC_OR_TIME_TRIALS_OPTIONS_SELECTION \
5 // Selecting CC for GP and Versus. Selecting "Begin" or "Data" for Time Trials. Unused for Battle
#define CONFIRM_OK_SELECTION 6
#define CONFIRM_OK_SELECTION_FROM_BACK_OUT 7
#define TIME_TRIALS_DATA_SELECTION_FROM_BACK_OUT 8
@ -256,7 +257,7 @@ enum PlayerId {
#define TIME_TRIAL_3LAP_RECORD_3 2
#define TIME_TRIAL_3LAP_RECORD_4 3
#define TIME_TRIAL_3LAP_RECORD_5 4
#define TIME_TRIAL_1LAP_RECORD 5
#define TIME_TRIAL_1LAP_RECORD 5
/**
* @brief Text color options
@ -266,10 +267,10 @@ enum PlayerId {
* flashing between 2 colors, but also cause individual characters
* to be cutoff on their right side
*/
#define TEXT_BLUE 0
#define TEXT_GREEN 1
#define TEXT_RED 2
#define TEXT_YELLOW 3
#define TEXT_BLUE 0
#define TEXT_GREEN 1
#define TEXT_RED 2
#define TEXT_YELLOW 3
#define TEXT_BLUE_GREEN_RED_CYCLE_1 4
#define TEXT_BLUE_GREEN_RED_CYCLE_2 5
@ -278,28 +279,28 @@ enum PlayerId {
* Option 2 appears to be unused, as such its probably not
* a valid option
*/
#define SOUND_STEREO 0
#define SOUND_HEADPHONES 1
#define SOUND_UNUSED 2
#define SOUND_MONO 3
#define NUM_SOUND_MODES 4
#define SOUND_STEREO 0
#define SOUND_HEADPHONES 1
#define SOUND_UNUSED 2
#define SOUND_MONO 3
#define NUM_SOUND_MODES 4
/**
* @brief Title screen demo options
* All demos use 100 CC
*/
#define DEMO_ONE 0 // Mario, Mario Raceway, Grand Prix
#define DEMO_TWO 1 // Yoshi DK, Choco Mountain, Versus
#define DEMO_ONE 0 // Mario, Mario Raceway, Grand Prix
#define DEMO_TWO 1 // Yoshi DK, Choco Mountain, Versus
#define DEMO_THREE 2 // Luigi, Kalamari Desert, Grand Prix
#define DEMO_FOUR 3 // Wario Yoshi Bowser, Wario Stadium, Versus
#define DEMO_FIVE 4 // Bowser, Bowser Castle, Grand Prix
#define DEMO_SIX 5 // Mario Luigi Peach Toad, Sherbert Land, Versus
#define NUM_DEMOS 6
#define DEMO_FOUR 3 // Wario Yoshi Bowser, Wario Stadium, Versus
#define DEMO_FIVE 4 // Bowser, Bowser Castle, Grand Prix
#define DEMO_SIX 5 // Mario Luigi Peach Toad, Sherbert Land, Versus
#define NUM_DEMOS 6
#define CUP_COURSE_ONE 0
#define CUP_COURSE_TWO 1
#define CUP_COURSE_THREE 2
#define CUP_COURSE_FOUR 3
#define CUP_COURSE_ONE 0
#define CUP_COURSE_TWO 1
#define CUP_COURSE_THREE 2
#define CUP_COURSE_FOUR 3
#define NUM_COURSES_PER_CUP 4
/**
@ -343,9 +344,9 @@ enum KART_AI_BEHAVIOURS {
/**
* @brief Balloon status
*/
#define BALLOON_STATUS_GONE 0
#define BALLOON_STATUS_PRESENT 1
#define BALLOON_STATUS_DEPARTING 2
#define BALLOON_STATUS_GONE 0
#define BALLOON_STATUS_PRESENT 1
#define BALLOON_STATUS_DEPARTING 2
/**
* @brief Max representable time, 100 minutes measured in centiseconds
@ -356,33 +357,33 @@ enum KART_AI_BEHAVIOURS {
* @brief sound effect of player's
* for soundEffect
*/
#define HIT_SOUND_EFFECT 0x100 // hitting an object
#define BOOST_SOUND_EFFECT 0x200 // being boosted by trigger a mushroom
#define BOO_SOUND_EFFECT 0x800 // being a boo
#define STAR_SOUND_EFFECT 0x2000 // being a star
#define HIT_ROTATING_SOUND_EFFECT 0x4000 // hitting a rotating object
#define BOOST_RAMP_WOOD_SOUND_EFFECT 0x8000 // being boosted by a ramp
#define HOLD_BANANA_SOUND_EFFECT 0x40000 // holding a banana
#define REVERSE_SOUND_EFFECT 0x400000 // being in the wrong direction
#define BOOST_RAMP_ASPHALT_SOUND_EFFECT 0x800000 // being boosted by a boost pad
#define HIT_BY_ITEM_SOUND_EFFECT 0x1000000 // being hit by an item
#define HIT_SOUND_EFFECT 0x100 // hitting an object
#define BOOST_SOUND_EFFECT 0x200 // being boosted by trigger a mushroom
#define BOO_SOUND_EFFECT 0x800 // being a boo
#define STAR_SOUND_EFFECT 0x2000 // being a star
#define HIT_ROTATING_SOUND_EFFECT 0x4000 // hitting a rotating object
#define BOOST_RAMP_WOOD_SOUND_EFFECT 0x8000 // being boosted by a ramp
#define HOLD_BANANA_SOUND_EFFECT 0x40000 // holding a banana
#define REVERSE_SOUND_EFFECT 0x400000 // being in the wrong direction
#define BOOST_RAMP_ASPHALT_SOUND_EFFECT 0x800000 // being boosted by a boost pad
#define HIT_BY_ITEM_SOUND_EFFECT 0x1000000 // being hit by an item
/**
* @brief effect of player's
* for effects
*/
#define BOOST_RAMP_WOOD_EFFECT 0x4 // being boosted by a ramp
#define STAR_EFFECT 0x200 // being a star
#define BOOST_EFFECT 0x2000 // being boosted by trigger a mushroom
#define BOOST_RAMP_ASPHALT_EFFECT 0x100000 // being boosted by a boost pad
#define HIT_BY_ITEM_EFFECT 0x2000000 // being hit by an item
#define HIT_EFFECT 0x4000000 // hitting an object
#define LIGHTNING_EFFECT 0x40000000 // being hit by lightning
#define BOO_EFFECT 0x80000000 // being a boo
#define BOOST_RAMP_WOOD_EFFECT 0x4 // being boosted by a ramp
#define STAR_EFFECT 0x200 // being a star
#define BOOST_EFFECT 0x2000 // being boosted by trigger a mushroom
#define BOOST_RAMP_ASPHALT_EFFECT 0x100000 // being boosted by a boost pad
#define HIT_BY_ITEM_EFFECT 0x2000000 // being hit by an item
#define HIT_EFFECT 0x4000000 // hitting an object
#define LIGHTNING_EFFECT 0x40000000 // being hit by lightning
#define BOO_EFFECT 0x80000000 // being a boo
/**
* @brief shell state
*
*
*/
#define SPAWN_FIRST_SHELL 0
#define SPAWN_SECOND_SHELL 1
@ -390,17 +391,16 @@ enum KART_AI_BEHAVIOURS {
#define GPACK_RGB888(r, g, b) (((r) << 16) | ((g) << 8) | (b))
#define COLOR_LIGHT GPACK_RGB888(0x1C, 0x00, 0x00)
#define COLOR_LAVA GPACK_RGB888(0x34, 0x00, 0x00)
#define COLOR_BLACK GPACK_RGB888(0, 0, 0)
#define COLOR_LAVA GPACK_RGB888(0x34, 0x00, 0x00)
#define COLOR_BLACK GPACK_RGB888(0, 0, 0)
#endif // DEFINES_H
/**
*
*
* Collision mesh flags
*
*/
*
*/
#define GRID_SIZE 32

View File

@ -8,28 +8,28 @@ extern f32 D_800E2380[8];
extern f32 D_800E23A0[8];
extern f32 D_800E23C0[8];
extern f32 D_800E23E0[8];
extern f32 *D_800E2400[5];
extern f32* D_800E2400[5];
extern f32 D_800E2414[8];
extern f32 D_800E2434[8];
extern f32 D_800E2454[8];
extern f32 D_800E2474[8];
extern f32 D_800E2494[8];
extern f32 *D_800E24B4[5];
extern f32* D_800E24B4[5];
extern f32 D_800E24C8[8];
extern f32 D_800E24E8[8];
extern f32 D_800E2508[8];
extern f32 D_800E2528[8];
extern f32 D_800E2548[8];
extern f32 *D_800E2568[5];
extern f32* D_800E2568[5];
extern f32 gTopSpeed50cc[8];
extern f32 gTopSpeed100cc[8];
extern f32 gTopSpeed150cc[8];
extern f32 gTopSpeedExtra[8];
extern f32 gTopSpeedBattle[8];
extern f32 *gTopSpeedTable[5];
extern f32* gTopSpeedTable[5];
extern f32 gKartFrictionTable[8];
extern f32 gKartGravityTable[8];
@ -53,8 +53,8 @@ extern f32 D_800E29A0[15];
extern f32 D_800E29DC[15];
extern f32 D_800E2A18[15];
extern f32 D_800E2A54[15];
extern f32 *D_800E2A90[8];
extern f32 *D_800E2AB0[8];
extern f32* D_800E2A90[8];
extern f32* D_800E2AB0[8];
extern f32 D_800E2AD0[15];
extern f32 D_800E2B0C[15];
@ -72,8 +72,8 @@ extern f32 D_800E2DA0[15];
extern f32 D_800E2DDC[15];
extern f32 D_800E2E18[15];
extern f32 D_800E2E54[15];
extern f32 *D_800E2E90[8];
extern f32 *D_800E2EB0[8];
extern f32* D_800E2E90[8];
extern f32* D_800E2EB0[8];
extern f32 gKartAccelerationMario[10];
extern f32 gKartAccelerationLuigi[10];
@ -83,7 +83,7 @@ extern f32 gKartAccelerationDK[10];
extern f32 gKartAccelerationWario[10];
extern f32 gKartAccelerationPeach[10];
extern f32 gKartAccelerationBowser[10];
extern f32 *gKartAccelerationTables[8];
extern f32* gKartAccelerationTables[8];
extern f32 D_800E3030[15];
extern f32 D_800E306C[15];
@ -93,7 +93,7 @@ extern f32 D_800E3120[15];
extern f32 D_800E315C[15];
extern f32 D_800E3198[15];
extern f32 D_800E31D4[15];
extern f32 *D_800E3210[8];
extern f32* D_800E3210[8];
extern f32 D_800E3230[15];
extern f32 D_800E326C[15];
@ -103,7 +103,7 @@ extern f32 D_800E3320[15];
extern f32 D_800E335C[15];
extern f32 D_800E3398[15];
extern f32 D_800E33D4[15];
extern f32 *D_800E3410[8];
extern f32* D_800E3410[8];
extern f32 D_800E3430[15];
extern f32 D_800E346C[15];
@ -113,7 +113,7 @@ extern f32 D_800E3520[15];
extern f32 D_800E355C[15];
extern f32 D_800E3598[15];
extern f32 D_800E35D4[15];
extern f32 *D_800E3610[8];
extern f32* D_800E3610[8];
extern f32 gKartHandlingTable[8];
extern f32 gKartTable800E3650[8];

View File

@ -9,33 +9,30 @@
#define va_end __builtin_va_end
#else
typedef char *va_list;
typedef char* va_list;
#define _FP 1
#define _INT 0
#define _STRUCT 2
#define _VA_FP_SAVE_AREA 0x10
#define _VA_ALIGN(p, a) (((unsigned int)(((char *)p) + ((a) > 4 ? (a) : 4) - 1)) & -((a) > 4 ? (a) : 4))
#define va_start(vp, parmN) (vp = ((va_list)&parmN + sizeof(parmN)))
#define _VA_ALIGN(p, a) (((unsigned int) (((char*) p) + ((a) > 4 ? (a) : 4) - 1)) & -((a) > 4 ? (a) : 4))
#define va_start(vp, parmN) (vp = ((va_list) & parmN + sizeof(parmN)))
#define __va_stack_arg(list, mode) \
( \
((list) = (char *)_VA_ALIGN(list, __builtin_alignof(mode)) + \
_VA_ALIGN(sizeof(mode), 4)), \
(((char *)list) - (_VA_ALIGN(sizeof(mode), 4) - sizeof(mode))))
#define __va_stack_arg(list, mode) \
(((list) = (char*) _VA_ALIGN(list, __builtin_alignof(mode)) + _VA_ALIGN(sizeof(mode), 4)), \
(((char*) list) - (_VA_ALIGN(sizeof(mode), 4) - sizeof(mode))))
#define __va_double_arg(list, mode) \
( \
(((long)list & 0x1) /* 1 byte aligned? */ \
? (list = (char *)((long)list + 7), (char *)((long)list - 6 - _VA_FP_SAVE_AREA)) \
: (((long)list & 0x2) /* 2 byte aligned? */ \
? (list = (char *)((long)list + 10), (char *)((long)list - 24 - _VA_FP_SAVE_AREA)) \
: __va_stack_arg(list, mode))))
#define __va_double_arg(list, mode) \
((((long) list & 0x1) /* 1 byte aligned? */ \
? (list = (char*) ((long) list + 7), (char*) ((long) list - 6 - _VA_FP_SAVE_AREA)) \
: (((long) list & 0x2) /* 2 byte aligned? */ \
? (list = (char*) ((long) list + 10), (char*) ((long) list - 24 - _VA_FP_SAVE_AREA)) \
: __va_stack_arg(list, mode))))
#define va_arg(list, mode) ((mode *)(((__builtin_classof(mode) == _FP && \
__builtin_alignof(mode) == sizeof(double)) \
? __va_double_arg(list, mode) \
: __va_stack_arg(list, mode))))[-1]
#define va_arg(list, mode) \
((mode*) (((__builtin_classof(mode) == _FP && __builtin_alignof(mode) == sizeof(double)) \
? __va_double_arg(list, mode) \
: __va_stack_arg(list, mode))))[-1]
#define va_end(__list)
#endif

View File

@ -4,7 +4,7 @@
#include <libultra/types.h>
#ifndef offsetof
#define offsetof(st, m) ((size_t)&(((st *)0)->m))
#define offsetof(st, m) ((size_t) & (((st*) 0)->m))
#endif
#endif

View File

@ -1,6 +1,6 @@
#ifndef STDIO_H
#define STDIO_H
extern int sprintf(char *s, const char *fmt, ...);
extern int sprintf(char* s, const char* fmt, ...);
#endif

View File

@ -1,14 +1,12 @@
#ifndef STDLIB_H
#define STDLIB_H
typedef struct lldiv_t
{
typedef struct lldiv_t {
long long quot;
long long rem;
} lldiv_t;
typedef struct ldiv_t
{
typedef struct ldiv_t {
long quot;
long rem;
} ldiv_t;

View File

@ -3,8 +3,8 @@
#include <libultra/types.h>
void *memcpy(void *dst, const void *src, size_t size);
size_t strlen(const char *str);
char *strchr(const char *str, s32 ch);
void* memcpy(void* dst, const void* src, size_t size);
size_t strlen(const char* str);
char* strchr(const char* str, s32 ch);
#endif

View File

@ -11,12 +11,12 @@
#if !defined(__sgi) && (!defined(NON_MATCHING) || !defined(AVOID_UB))
// asm-process isn't supported outside of IDO, and undefined behavior causes
// crashes.
//#error Matching build is only possible on IDO; please build with NON_MATCHING=1.
// #error Matching build is only possible on IDO; please build with NON_MATCHING=1.
#endif
#define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0]))
#define GLUE(a, b) a ## b
#define GLUE(a, b) a##b
#define GLUE2(a, b) GLUE(a, b)
// Avoid compiler warnings for unused variables
@ -62,21 +62,29 @@
#endif
// Fixed point macros
#define FTOFIX(f) ((s32)((f) * 65536.0))
#define ITOFIX(i) ((s32)((i) << 16))
#define FIXTOF(x) ((double)((x) / 65536.0))
#define FIXTOI(x) ((s32)((x) >> 16))
#define FTOFIX(f) ((s32) ((f) * 65536.0))
#define ITOFIX(i) ((s32) ((i) << 16))
#define FIXTOF(x) ((double) ((x) / 65536.0))
#define FIXTOI(x) ((s32) ((x) >> 16))
// Split fixed-point values into its integer or fractional parts.
#define toFixedInt(f) (FTOFIX(f) >> 16)
#define toFrac(f) (FTOFIX(f) & 0xFFFF)
#define toFixedInt(f) (FTOFIX(f) >> 16)
#define toFrac(f) (FTOFIX(f) & 0xFFFF)
// Setup a fixed-point matrix using floats or doubles. Recommend using doubles for more precision.
#define toFixedPointMatrix(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16) \
{{((toFixedInt(x1)) << 16) | toFixedInt(x2), ((toFixedInt(x3)) << 16) | toFixedInt(x4), (toFixedInt(x5) << 16) | toFixedInt(x6), (toFixedInt(x7) << 16) | toFixedInt(x8)}, \
{((toFixedInt(x9)) << 16) | toFixedInt(x10), ((toFixedInt(x11)) << 16) | toFixedInt(x12), (toFixedInt(x13) << 16) | toFixedInt(x14), (toFixedInt(x15) << 16) | toFixedInt(x16)}, \
{((toFrac(x1)) << 16) | toFrac(x2), ((toFrac(x3)) << 16) | toFrac(x4), (toFrac(x5) << 16) | toFrac(x6), (toFrac(x7) << 16) | toFrac(x8)}, \
{((toFrac(x9)) << 16) | toFrac(x10), ((toFrac(x11)) << 16) | toFrac(x12), (toFrac(x13) << 16) | toFrac(x14), (toFrac(x15) << 16) | toFrac(x16)}}
#define toFixedPointMatrix(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16) \
{ \
{ ((toFixedInt(x1)) << 16) | toFixedInt(x2), ((toFixedInt(x3)) << 16) | toFixedInt(x4), \
(toFixedInt(x5) << 16) | toFixedInt(x6), (toFixedInt(x7) << 16) | toFixedInt(x8) }, \
{ ((toFixedInt(x9)) << 16) | toFixedInt(x10), ((toFixedInt(x11)) << 16) | toFixedInt(x12), \
(toFixedInt(x13) << 16) | toFixedInt(x14), (toFixedInt(x15) << 16) | toFixedInt(x16) }, \
{ ((toFrac(x1)) << 16) | toFrac(x2), ((toFrac(x3)) << 16) | toFrac(x4), (toFrac(x5) << 16) | toFrac(x6), \
(toFrac(x7) << 16) | toFrac(x8) }, \
{ \
((toFrac(x9)) << 16) | toFrac(x10), ((toFrac(x11)) << 16) | toFrac(x12), \
(toFrac(x13) << 16) | toFrac(x14), (toFrac(x15) << 16) | toFrac(x16) \
} \
}
// convert a virtual address to physical.
#define VIRTUAL_TO_PHYSICAL(addr) (addr)
@ -93,9 +101,9 @@
// Envelopes are always stored as big endian, to match sequence files which are
// byte blobs and can embed envelopes. Hence this byteswapping macro.
#if IS_BIG_ENDIAN
#define BSWAP16(x) (x)
#define BSWAP16(x) (x)
#else
#define BSWAP16(x) (((x) & 0xff) << 8 | (((x) >> 8) & 0xff))
#define BSWAP16(x) (((x) & 0xff) << 8 | (((x) >> 8) & 0xff))
#endif
/**
@ -104,6 +112,6 @@
* - 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)
#define GET_PACKED_END(dl) (((u8*) dl) + sizeof(dl) - sizeof(dl[0]) - 0x07000000)
#endif

View File

@ -14,11 +14,10 @@
Configuration
=======================*/
#define AUDIO_HEAP_SIZE 0x48C00
#define AUDIO_HEAP_INIT_SIZE 0x2600
#define DOUBLE_SIZE_ON_64_BIT(size) ((size) * (sizeof(void *) / 4))
#define DOUBLE_SIZE_ON_64_BIT(size) ((size) * (sizeof(void*) / 4))
#define SCREEN_WIDTH 320
#define SCREEN_HEIGHT 240
@ -77,54 +76,56 @@ typedef enum {
/**
* @brief The different types of surface in the game.
*/
*/
enum SURFACE_TYPE {
/* -0x1 */ SURFACE_DEFAULT = -1,
/* 0x00 */ AIRBORNE,
/* 0x01 */ ASPHALT, // Luigi's Raceway, Toad's Turnpike, Koopa Troop beach shortcut tunnel, Mario Raceway, Royal Raceway, Rainbow Road, Block Fort, Double Deck, Skyscraper
/* 0x02 */ DIRT, // Luigi's Raceway, Moo Moo Farm, Kalimiari Desert on course, Choco Mountain, Wario Stadium, DK Jungle on course, Yoshi Valley
/* 0x03 */ SAND, // Koopa Troopa Beach light color, Royal Raceway
/* 0x04 */ STONE, // Royal Raceway castle entrance, Bowser's Castle
/* 0x05 */ SNOW, // Frappe Snowland on course, Sherber Land tunnel
/* 0x06 */ BRIDGE, // Royal Raceway castle bridges (even the wooden one), Banshee's Boardwalk, Big Donut
/* 0x01 */ ASPHALT, // Luigi's Raceway, Toad's Turnpike, Koopa Troop beach shortcut tunnel, Mario Raceway, Royal
// Raceway, Rainbow Road, Block Fort, Double Deck, Skyscraper
/* 0x02 */ DIRT, // Luigi's Raceway, Moo Moo Farm, Kalimiari Desert on course, Choco Mountain, Wario Stadium, DK
// Jungle on course, Yoshi Valley
/* 0x03 */ SAND, // Koopa Troopa Beach light color, Royal Raceway
/* 0x04 */ STONE, // Royal Raceway castle entrance, Bowser's Castle
/* 0x05 */ SNOW, // Frappe Snowland on course, Sherber Land tunnel
/* 0x06 */ BRIDGE, // Royal Raceway castle bridges (even the wooden one), Banshee's Boardwalk, Big Donut
/* 0x07 */ SAND_OFFROAD, // Mario Raceway
/* 0x08 */ GRASS, // Luigi's Raceway, Mario Raceway, Royal Raceway, Bowser's Castle, DK Jungle, Yoshi Valley
/* 0x09 */ ICE, // Sherbert Land
/* 0x0A */ WET_SAND, // Koop Troopa Beach dark color
/* 0x08 */ GRASS, // Luigi's Raceway, Mario Raceway, Royal Raceway, Bowser's Castle, DK Jungle, Yoshi Valley
/* 0x09 */ ICE, // Sherbert Land
/* 0x0A */ WET_SAND, // Koop Troopa Beach dark color
/* 0x0B */ SNOW_OFFROAD, // Frappe Snowland off course
/* 0x0C */ CLIFF, // Koopa Troopa Beach, Choco Mountain
/* 0x0C */ CLIFF, // Koopa Troopa Beach, Choco Mountain
/* 0x0D */ DIRT_OFFROAD, // Kalimari Desert off course
/* 0x0E */ TRAIN_TRACK, // Kalimari Desert
/* 0x0F */ CAVE, // DK Jungle cave
/* 0x10 */ ROPE_BRIDGE, // Bowser's Castle bridge 2, DK Jungle bridge
/* 0x11 */ WOOD_BRIDGE, // Frappe Snowland bridge, Bowser's Castle bridge 1,3, Yoshi Valley bridge 2
/* 0x0E */ TRAIN_TRACK, // Kalimari Desert
/* 0x0F */ CAVE, // DK Jungle cave
/* 0x10 */ ROPE_BRIDGE, // Bowser's Castle bridge 2, DK Jungle bridge
/* 0x11 */ WOOD_BRIDGE, // Frappe Snowland bridge, Bowser's Castle bridge 1,3, Yoshi Valley bridge 2
/* 0xFC */ BOOST_RAMP_WOOD = 0xFC, // DK Jungle
/* 0xFD */ OUT_OF_BOUNDS, // DK Jungle river island
/* 0xFE */ BOOST_RAMP_ASPHALT, // Royal Raceway
/* 0xFF */ RAMP // Koopa Troopa beach
/* 0xFD */ OUT_OF_BOUNDS, // DK Jungle river island
/* 0xFE */ BOOST_RAMP_ASPHALT, // Royal Raceway
/* 0xFF */ RAMP // Koopa Troopa beach
};
#define GFX_GET_OPCODE(var) ((uint32_t)((var) & 0xFF000000))
#define GFX_GET_OPCODE(var) ((uint32_t) ((var) & 0xFF000000))
// Pointer casting is technically UB, and avoiding it gets rid of endian issues
// as well as a nice side effect.
#ifdef AVOID_UB
#define GET_HIGH_U16_OF_32(var) ((u16)((var) >> 16))
#define GET_HIGH_S16_OF_32(var) ((s16)((var) >> 16))
#define GET_LOW_U16_OF_32(var) ((u16)((var) & 0xFFFF))
#define GET_LOW_S16_OF_32(var) ((s16)((var) & 0xFFFF))
#define GET_HIGH_U16_OF_32(var) ((u16) ((var) >> 16))
#define GET_HIGH_S16_OF_32(var) ((s16) ((var) >> 16))
#define GET_LOW_U16_OF_32(var) ((u16) ((var) & 0xFFFF))
#define GET_LOW_S16_OF_32(var) ((s16) ((var) & 0xFFFF))
#define SET_HIGH_U16_OF_32(var, x) ((var) = ((var) & 0xFFFF) | ((x) << 16))
#define SET_HIGH_S16_OF_32(var, x) ((var) = ((var) & 0xFFFF) | ((x) << 16))
#else
#define GET_HIGH_U16_OF_32(var) (((u16 *)&(var))[0])
#define GET_HIGH_S16_OF_32(var) (((s16 *)&(var))[0])
#define GET_LOW_U16_OF_32(var) (((u16 *)&(var))[1])
#define GET_LOW_S16_OF_32(var) (((s16 *)&(var))[1])
#define SET_HIGH_U16_OF_32(var, x) ((((u16 *)&(var))[0]) = (x))
#define SET_HIGH_S16_OF_32(var, x) ((((s16 *)&(var))[0]) = (x))
#define GET_HIGH_U16_OF_32(var) (((u16*) &(var))[0])
#define GET_HIGH_S16_OF_32(var) (((s16*) &(var))[0])
#define GET_LOW_U16_OF_32(var) (((u16*) &(var))[1])
#define GET_LOW_S16_OF_32(var) (((s16*) &(var))[1])
#define SET_HIGH_U16_OF_32(var, x) ((((u16*) &(var))[0]) = (x))
#define SET_HIGH_S16_OF_32(var, x) ((((s16*) &(var))[0]) = (x))
#endif
#define MACRO_COLOR_FLAG(r, g, b, flag) (r&~0x3) | (flag & 0x3), (g&~0x3) | ((flag>>2) & 0x3), b
#define MACRO_COLOR_FLAG(r, g, b, flag) (r & ~0x3) | (flag & 0x3), (g & ~0x3) | ((flag >> 2) & 0x3), b
// Extra gbi commands
void gSPSegmentLoadRes(void* value, int segNum, uintptr_t target);

View File

@ -7,8 +7,7 @@
#define OBJECT_LIST_SIZE 0x226
#define SOME_OBJECT_INDEX_LIST_SIZE 32
typedef struct
{
typedef struct {
/* 0x00 */ f32 sizeScaling;
/* 0x04 */ Vec3f pos;
/* 0x10 */ Vec3f origin_pos;
@ -23,20 +22,20 @@ typedef struct
/* 0x54 */ s32 status;
/* 0x58 */ s32 unk_058;
/* 0x5C */ s32 unk_05C;
/* 0x60 */ const char *activeTLUT;
/* 0x64 */ const char *activeTexture;
/* 0x60 */ const char* activeTLUT;
/* 0x64 */ const char* activeTexture;
/**
* "list" is something of a misnomer for the names here
* they can be pointers to just 1 tlut/texture, but it is common for one or the other
* to be a pointer to an array of tluts/textures.
**/
/* 0x68 */ u8 *tlutList; // I feel like this should actually be `u8 (*tlutList)[512]`, but that causes mismatches
/* 0x6C */ const char **textureList;
/* 0x70 */ Gfx *model;
/* 0x74 */ Vtx *vertex;
/* 0x78 */ s8 unk_078[0x04];
/* 0x7C */ SplineControlPoint *controlPoints;
/* 0x80 */ SplineData *spline;
**/
/* 0x68 */ u8* tlutList; // I feel like this should actually be `u8 (*tlutList)[512]`, but that causes mismatches
/* 0x6C */ const char** textureList;
/* 0x70 */ Gfx* model;
/* 0x74 */ Vtx* vertex;
/* 0x78 */ s8 unk_078[0x04];
/* 0x7C */ SplineControlPoint* controlPoints;
/* 0x80 */ SplineData* spline;
/* 0x84 */ s16 unk_084[0xA];
/* 0x98 */ u16 timer;
/* 0x9A */ u16 unk_09A;
@ -57,34 +56,33 @@ typedef struct
/* 0xC4 */ u16 unk_0C4;
/* 0xC6 */ u16 unk_0C6;
/* 0xC8 */ u16 boundingBoxSize;
/* 0xCA */ s8 unk_0CA;
/* 0xCB */ s8 unk_0CB;
/* 0xCC */ s8 unk_0CC;
/* 0xCD */ s8 unk_0CD;
/* 0xCE */ s8 unk_0CE;
/* 0xCF */ s8 unk_0CF;
/* 0xD0 */ s8 unk_0D0;
/* 0xD1 */ s8 unk_0D1;
/* 0xD2 */ s8 itemDisplay;
/* 0xD3 */ s8 unk_0D3;
/* 0xD4 */ s8 unk_0D4;
/* 0xD5 */ u8 unk_0D5;
/* 0xD6 */ u8 unk_0D6;
/* 0xD7 */ u8 unk_0D7;
/* 0xD8 */ u8 unk_0D8;
/* 0xD9 */ u8 textureWidth;
/* 0xDA */ u8 textureHeight;
/* 0xDB */ u8 unk_0DB;
/* 0xDC */ u8 unk_0DC;
/* 0xDD */ u8 unk_0DD;
/* 0xDE */ s8 unk_0DE;
/* 0xDF */ u8 unk_0DF;
/* 0xCA */ s8 unk_0CA;
/* 0xCB */ s8 unk_0CB;
/* 0xCC */ s8 unk_0CC;
/* 0xCD */ s8 unk_0CD;
/* 0xCE */ s8 unk_0CE;
/* 0xCF */ s8 unk_0CF;
/* 0xD0 */ s8 unk_0D0;
/* 0xD1 */ s8 unk_0D1;
/* 0xD2 */ s8 itemDisplay;
/* 0xD3 */ s8 unk_0D3;
/* 0xD4 */ s8 unk_0D4;
/* 0xD5 */ u8 unk_0D5;
/* 0xD6 */ u8 unk_0D6;
/* 0xD7 */ u8 unk_0D7;
/* 0xD8 */ u8 unk_0D8;
/* 0xD9 */ u8 textureWidth;
/* 0xDA */ u8 textureHeight;
/* 0xDB */ u8 unk_0DB;
/* 0xDC */ u8 unk_0DC;
/* 0xDD */ u8 unk_0DD;
/* 0xDE */ s8 unk_0DE;
/* 0xDF */ u8 unk_0DF;
} Object; // size = 0xE0
extern Object gObjectList[];
typedef struct
{
typedef struct {
/* 0x00 */ f32 sizeScaling;
/* 0x04 */ Vec3f pos;
/* 0x10 */ Vec3f origin_pos;
@ -99,20 +97,20 @@ typedef struct
/* 0x54 */ s32 status;
/* 0x58 */ s32 unk_058;
/* 0x5C */ s32 unk_05C;
/* 0x60 */ u8 *activeTLUT;
/* 0x64 */ u8 *activeTexture;
/* 0x60 */ u8* activeTLUT;
/* 0x64 */ u8* activeTexture;
/**
* "list" is something of a misnomer for the names here
* they can be pointers to just 1 tlut/texture, but it is common for one or the other
* to be a pointer to an array of tluts/textures.
**/
/* 0x68 */ u8 *tlutList; // I feel like this should actually be `u8 (*tlutList)[512]`, but that causes mismatches
/* 0x6C */ u8 *textureList;
/* 0x70 */ Gfx *model;
/* 0x74 */ Vtx *vertex;
/* 0x78 */ s8 unk_078[0x04];
/* 0x7C */ Vec4s *unk_07C;
/* 0x80 */ Vec4s *unk_080; // unk_080[][4]?
**/
/* 0x68 */ u8* tlutList; // I feel like this should actually be `u8 (*tlutList)[512]`, but that causes mismatches
/* 0x6C */ u8* textureList;
/* 0x70 */ Gfx* model;
/* 0x74 */ Vtx* vertex;
/* 0x78 */ s8 unk_078[0x04];
/* 0x7C */ Vec4s* unk_07C;
/* 0x80 */ Vec4s* unk_080; // unk_080[][4]?
/* 0x84 */ s16 unk_084[0xA];
/* 0x98 */ u16 goldenMushroomTimer;
/* 0x9A */ u16 unk_09A;
@ -133,28 +131,28 @@ typedef struct
/* 0xC4 */ u16 unk_0C4;
/* 0xC6 */ u16 unk_0C6;
/* 0xC8 */ u16 unk_0C8;
/* 0xCA */ s8 unk_0CA;
/* 0xCB */ s8 unk_0CB;
/* 0xCC */ s8 unk_0CC;
/* 0xCD */ s8 unk_0CD;
/* 0xCE */ s8 unk_0CE;
/* 0xCF */ s8 unk_0CF;
/* 0xD0 */ s8 unk_0D0;
/* 0xD1 */ s8 unk_0D1;
/* 0xD2 */ s8 itemDisplay;
/* 0xD3 */ s8 unk_0D3;
/* 0xD4 */ s8 unk_0D4;
/* 0xD5 */ u8 unk_0D5;
/* 0xD6 */ u8 unk_0D6;
/* 0xD7 */ u8 unk_0D7;
/* 0xD8 */ u8 unk_0D8;
/* 0xD9 */ u8 textureWidth;
/* 0xDA */ u8 textureHeight;
/* 0xDB */ u8 unk_0DB;
/* 0xDC */ u8 unk_0DC;
/* 0xDD */ u8 unk_0DD;
/* 0xDE */ s8 unk_0DE;
/* 0xDF */ u8 unk_0DF;
/* 0xCA */ s8 unk_0CA;
/* 0xCB */ s8 unk_0CB;
/* 0xCC */ s8 unk_0CC;
/* 0xCD */ s8 unk_0CD;
/* 0xCE */ s8 unk_0CE;
/* 0xCF */ s8 unk_0CF;
/* 0xD0 */ s8 unk_0D0;
/* 0xD1 */ s8 unk_0D1;
/* 0xD2 */ s8 itemDisplay;
/* 0xD3 */ s8 unk_0D3;
/* 0xD4 */ s8 unk_0D4;
/* 0xD5 */ u8 unk_0D5;
/* 0xD6 */ u8 unk_0D6;
/* 0xD7 */ u8 unk_0D7;
/* 0xD8 */ u8 unk_0D8;
/* 0xD9 */ u8 textureWidth;
/* 0xDA */ u8 textureHeight;
/* 0xDB */ u8 unk_0DB;
/* 0xDC */ u8 unk_0DC;
/* 0xDD */ u8 unk_0DD;
/* 0xDE */ s8 unk_0DE;
/* 0xDF */ u8 unk_0DF;
} ItemWindowObjects; // size = 0xE0
// This are other lists of indices in gObjectList.
@ -199,10 +197,11 @@ extern Collision D_8018C0B0[];
/**
* indexObjectList1, indexObjectList2, indexObjectList3, and indexObjectList4 are all lists of indices in gObjectList.
* init_object_list_index initializes them in such a way that the indicies in each list are not adjacent.
* First indexObjectList1 gets an unused index, then indexObjectList2, then indexObjectList3, then indexObjectList4, and then it loops.
*
* First indexObjectList1 gets an unused index, then indexObjectList2, then indexObjectList3, then indexObjectList4, and
*then it loops.
*
* The objects found at the indices in each list appears to be course dependent
**/
**/
#define NUM_YV_FLAG_POLES 4
@ -235,12 +234,12 @@ typedef struct {
/* 0x2 */ s16 startZ;
/* 0x4 */ s16 unk_4; // Group Id?
/* 0x6 */ s16 unk_6; // Starting State?
} ThwompSpawn; // size = 0x8;
} ThwompSpawn; // size = 0x8;
extern ThwompSpawn gThomwpSpawns50CC[];
extern ThwompSpawn gThwompSpawns100CCExtra[];
extern ThwompSpawn gThomwpSpawns150CC[];
extern ThwompSpawn *gThowmpSpawnList;
extern ThwompSpawn* gThowmpSpawnList;
extern s16 gNumActiveThwomps;
@ -267,14 +266,14 @@ extern s32 indexObjectList1[];
typedef struct {
/* 0x0 */ Vec3s pos;
/* 0x6 */ s16 unk_6; // Group Id?
} SnowmanSpawn; // size = 0x8;
} SnowmanSpawn; // size = 0x8;
extern SnowmanSpawn gSnowmanSpawns[];
typedef struct {
/* 0x0 */ Vec3s pos;
/* 0x6 */ s16 unk_06; // Group Id?
} HegdehogSpawn; // size = 0x8;
} HegdehogSpawn; // size = 0x8;
extern HegdehogSpawn gHedgehogSpawns[];
extern Vec3s gHedgehogPatrolPoints[];
@ -311,15 +310,15 @@ extern s32 indexObjectList3[];
extern s32 indexObjectList4[];
#define gObjectParticle1_SIZE 128
#define NUM_GROUP1_MOLES 8
#define NUM_GROUP1_MOLES 8
#define NUM_GROUP2_MOLES 11
#define NUM_GROUP3_MOLES 12
#define NUM_TOTAL_MOLES (NUM_GROUP1_MOLES + NUM_GROUP2_MOLES + NUM_GROUP3_MOLES)
#define NUM_TOTAL_MOLES (NUM_GROUP1_MOLES + NUM_GROUP2_MOLES + NUM_GROUP3_MOLES)
#define NUM_SNOWFLAKES 0x32
typedef union {
Vec3s asVec3sList[NUM_TOTAL_MOLES];
s16 asFlatList[NUM_TOTAL_MOLES*3];
s16 asFlatList[NUM_TOTAL_MOLES * 3];
} MoleSpawnUnion;
extern MoleSpawnUnion gMoleSpawns;

View File

@ -35,7 +35,6 @@ typedef struct {
u8 unknownBytes[8];
} OnlyBestTimeTrialRecords; // size = 0x38
typedef struct {
// GP Points scored for each CC mode
// 1st place is 3 points, 2nd is 2, etc.
@ -58,13 +57,13 @@ typedef struct {
* Instead of 4 entries, one per cup. Or even just one big entry for all 4 cups
* Its also unknown why these are here when they're identical to the values found
* in allCourseTimeTrialRecords
**/
**/
/* 0x188 */ OnlyBestTimeTrialRecords onlyBestTimeTrialRecords[2];
/**
* If checksum[1] or checksum[2] does not match their expected value,
* the grandPrixPoints and soundMode are reset. Then if the backup data's
* checksums are valid, copy the backup data to the main data.
**/
**/
/* 0x1F8 */ Stuff backup;
} SaveData; // size = 0x200

View File

@ -38,80 +38,79 @@ extern u8 _startupLogoSegmentRomEnd[];
* main 0x80000400
* ending 0x80280000 size 0xDF00
* race 0x8028DF00 size 0x2C470
**/
#define SEG_START 0x80000000
**/
#define SEG_START 0x80000000
// Defines duplicated even if the same for both for easier readability
#ifdef AVOID_UB
#if 0
#define MEMORY_POOL_START (uintptr_t) & _memoryPoolSegmentNoloadStart[0]
#define MEMORY_POOL_END (uintptr_t) & _memoryPoolSegmentNoloadEnd[0]
// #define MEMORY_POOL_START (uintptr_t) &_memoryPoolSegmentNoloadStart[0]
// #define MEMORY_POOL_END (uintptr_t) &_memoryPoolSegmentNoloadEnd[0]
#define SEG_ENDING (uintptr_t) & _endingSegmentStart[0]
#define SEG_ENDING_ROM_START (uintptr_t) & _endingSegmentRomStart[0]
/**
* Ending segment original size is 0xDF00 but much of that remains unused.
* This auto fits the segment to its proper size.
*/
#define SEG_ENDING_SIZE (size_t) ALIGN16((ptrdiff_t) (&_endingSegmentNoloadEnd[0] - &_endingSegmentStart[0]))
#define SEG_ENDING_ROM_SIZE (size_t) ALIGN16((ptrdiff_t) (&_endingSegmentRomEnd[0] - &_endingSegmentRomStart[0]))
// #define SEG_ENDING (uintptr_t) &_endingSegmentStart[0]
// #define SEG_ENDING_ROM_START (uintptr_t) &_endingSegmentRomStart[0]
// /**
// * Ending segment original size is 0xDF00 but much of that remains unused.
// * This auto fits the segment to its proper size.
// */
// #define SEG_ENDING_SIZE (size_t) ALIGN16( (ptrdiff_t) (&_endingSegmentNoloadEnd[0] - &_endingSegmentStart[0]) )
// #define SEG_ENDING_ROM_SIZE (size_t) ALIGN16( (ptrdiff_t) (&_endingSegmentRomEnd[0] - &_endingSegmentRomStart[0]) )
#define SEG_RACING (uintptr_t) & _racingSegmentStart[0]
#define SEG_RACING_ROM_START (uintptr_t) & _racingSegmentRomStart[0]
#define SEG_RACING_SIZE (size_t) ALIGN16((ptrdiff_t) (&_racingSegmentNoloadEnd[0] - &_racingSegmentStart[0]))
#define SEG_RACING_ROM_SIZE (size_t) ALIGN16((ptrdiff_t) (&_racingSegmentRomEnd[0] - &_racingSegmentRomStart[0]))
// #define SEG_RACING (uintptr_t) &_racingSegmentStart[0]
// #define SEG_RACING_ROM_START (uintptr_t) &_racingSegmentRomStart[0]
// #define SEG_RACING_SIZE (size_t) ALIGN16( (ptrdiff_t) (&_racingSegmentNoloadEnd[0] - &_racingSegmentStart[0]) )
// #define SEG_RACING_ROM_SIZE (size_t) ALIGN16( (ptrdiff_t) (&_racingSegmentRomEnd[0] - &_racingSegmentRomStart[0]) )
#define TRIG_TABLES (uintptr_t) & _trigTablesSegmentStart[0]
#define TRIG_TABLES_ROM_START (uintptr_t) & _trigTablesSegmentRomStart[0]
#define TRIG_TABLES_SIZE (size_t) _trigTablesSegmentSize
// #define TRIG_TABLES (uintptr_t) &_trigTablesSegmentStart[0]
// #define TRIG_TABLES_ROM_START (uintptr_t) &_trigTablesSegmentRomStart[0]
// #define TRIG_TABLES_SIZE (size_t) _trigTablesSegmentSize
#define SEG_DATA_START (uintptr_t) & _data_segment2SegmentRomStart[0]
#define SEG_DATA_END (uintptr_t) & _data_segment2SegmentRomEnd[0]
// #define SEG_DATA_START (uintptr_t) &_data_segment2SegmentRomStart[0]
// #define SEG_DATA_END (uintptr_t) &_data_segment2SegmentRomEnd[0]
#define COMMON_TEXTURES_ROM_START (uintptr_t) & _common_texturesSegmentRomStart[0]
#define COMMON_TEXTURES_SIZE (ptrdiff_t)(&_common_texturesSegmentRomEnd[0] - &_common_texturesSegmentRomStart[0])
// #define COMMON_TEXTURES_ROM_START (uintptr_t) &_common_texturesSegmentRomStart[0]
// #define COMMON_TEXTURES_SIZE (ptrdiff_t) (&_common_texturesSegmentRomEnd[0] - &_common_texturesSegmentRomStart[0])
// #define CEREMONY_DATA_ROM_START &_ceremonyDataSegmentRomStart[0]
// #define CEREMONY_DATA_ROM_END &_ceremonyDataSegmentRomEnd[0]
// #define STARTUP_LOGO_ROM_START &_startupLogoSegmentRomStart[0]
// #define STARTUP_LOGO_ROM_END &_startupLogoSegmentRomEnd[0]
#define CEREMONY_DATA_ROM_START &_ceremonyDataSegmentRomStart[0]
#define CEREMONY_DATA_ROM_END &_ceremonyDataSegmentRomEnd[0]
#define STARTUP_LOGO_ROM_START &_startupLogoSegmentRomStart[0]
#define STARTUP_LOGO_ROM_END &_startupLogoSegmentRomEnd[0]
#endif
#else // Required for ok
#define MEMORY_POOL_START (uintptr_t) &_memoryPoolSegmentNoloadStart
#define MEMORY_POOL_END (uintptr_t) 0x80242F00
#define MEMORY_POOL_START (uintptr_t) & _memoryPoolSegmentNoloadStart
#define MEMORY_POOL_END (uintptr_t) 0x80242F00
#define SEG_ENDING (uintptr_t) 0x80280000
#define SEG_ENDING_ROM_START (u8 *) &_endingSegmentRomStart[0]
#define SEG_ENDING (uintptr_t) 0x80280000
#define SEG_ENDING_ROM_START (u8*) &_endingSegmentRomStart[0]
#define SEG_ENDING_SIZE (size_t) 0xDF00
#define SEG_ENDING_ROM_SIZE (size_t) ALIGN16( (ptrdiff_t) (&_endingSegmentRomEnd[0] - &_endingSegmentRomStart[0]) )
#define SEG_ENDING_SIZE (size_t) 0xDF00
#define SEG_ENDING_ROM_SIZE (size_t) ALIGN16((ptrdiff_t) (&_endingSegmentRomEnd[0] - &_endingSegmentRomStart[0]))
#define SEG_RACING (uintptr_t) 0x8028DF00
#define SEG_RACING_ROM_START (u8 *) &_racingSegmentRomStart[0]
#define SEG_RACING_SIZE (size_t) 0x2C470
#define SEG_RACING (uintptr_t) 0x8028DF00
#define SEG_RACING_ROM_START (u8*) &_racingSegmentRomStart[0]
#define SEG_RACING_SIZE (size_t) 0x2C470
#define SEG_RACING_ROM_SIZE (size_t) ALIGN16( (ptrdiff_t) (&_racingSegmentRomEnd[0] - &_racingSegmentRomStart[0]) )
#define SEG_RACING_ROM_SIZE (size_t) ALIGN16((ptrdiff_t) (&_racingSegmentRomEnd[0] - &_racingSegmentRomStart[0]))
#define TRIG_TABLES (uintptr_t) 0x802BA370
#define TRIG_TABLES_ROM_START (uintptr_t) &_trigTablesSegmentRomStart[0]
#define TRIG_TABLES_SIZE (size_t) 0x5810
#define TRIG_TABLES (uintptr_t) 0x802BA370
#define TRIG_TABLES_ROM_START (uintptr_t) & _trigTablesSegmentRomStart[0]
#define TRIG_TABLES_SIZE (size_t) 0x5810
#define SEG_DATA_START (uintptr_t) &_data_segment2SegmentRomStart[0]
#define SEG_DATA_END (uintptr_t) &_data_segment2SegmentRomEnd[0]
#define SEG_DATA_START (uintptr_t) & _data_segment2SegmentRomStart[0]
#define SEG_DATA_END (uintptr_t) & _data_segment2SegmentRomEnd[0]
#define COMMON_TEXTURES_ROM_START (uintptr_t) &_common_texturesSegmentRomStart[0]
#define COMMON_TEXTURES_SIZE (ptrdiff_t) ((uintptr_t)&_common_texturesSegmentRomEnd - (uintptr_t)&_common_texturesSegmentRomStart)
#define COMMON_TEXTURES_ROM_START (uintptr_t) & _common_texturesSegmentRomStart[0]
#define COMMON_TEXTURES_SIZE \
(ptrdiff_t)((uintptr_t) & _common_texturesSegmentRomEnd - (uintptr_t) & _common_texturesSegmentRomStart)
#define CEREMONY_DATA_ROM_START &_ceremonyDataSegmentRomStart[0]
#define CEREMONY_DATA_ROM_END &_ceremonyDataSegmentRomEnd[0]
#define CEREMONY_DATA_ROM_START &_ceremonyDataSegmentRomStart[0]
#define CEREMONY_DATA_ROM_END &_ceremonyDataSegmentRomEnd[0]
#define STARTUP_LOGO_ROM_START &_startupLogoSegmentRomStart[0]
#define STARTUP_LOGO_ROM_END &_startupLogoSegmentRomEnd[0]
#define STARTUP_LOGO_ROM_START &_startupLogoSegmentRomStart[0]
#define STARTUP_LOGO_ROM_END &_startupLogoSegmentRomEnd[0]
#endif /* AVOID_UB */

View File

@ -15,7 +15,7 @@
((sound_bank << 24) | (byte2 << 16) | (byte3 << 8) | sound_id)
/* Intro */
#define SOUND_INTRO_LOGO SOUND_ARG_LOAD(0x49, 0x01, 0x80, 0x08) //SOUND_ARG_LOAD(0x49, 0x01, 0x80, 0x08)
#define SOUND_INTRO_LOGO SOUND_ARG_LOAD(0x49, 0x01, 0x80, 0x08) // SOUND_ARG_LOAD(0x49, 0x01, 0x80, 0x08)
// Welcome to Mario Kart. Used in intro and credits.
#define SOUND_INTRO_WELCOME SOUND_ARG_LOAD(0x49, 0x00, 0x90, 0x09)
#define SOUND_INTRO_ENTER_MENU SOUND_ARG_LOAD(0x49, 0x00, 0x80, 0x1A)
@ -66,7 +66,6 @@
#define SOUND_MENU_HEADPHONES SOUND_ARG_LOAD(0x49, 0x00, 0x80, 0x25)
#define SOUND_MENU_MONO SOUND_ARG_LOAD(0x49, 0x00, 0x80, 0x29)
/* Staging */
// Red and orange staging lights that Lakitu holds.
#define SOUND_ACTION_COUNTDOWN_LIGHT SOUND_ARG_LOAD(0x49, 0x00, 0x80, 0x03)
@ -93,7 +92,6 @@
#define SOUND_ITEM_STAR SOUND_ARG_LOAD(0x31, 0x02, 0x90, 0x08)
#define SOUND_ITEM_THUNDERBOLT SOUND_ARG_LOAD(0x51, 0x01, 0xC0, 0x0C)
/* Score Screen */
// Coin pickup sound (perfect fourth; B to E)
#define SOUND_ACTION_COUNT_SCORE SOUND_ARG_LOAD(0x49, 0x00, 0x80, 0x17)
@ -101,7 +99,6 @@
// Same sound as ENTER_MENU
#define SOUND_ACTION_CONTINUE_UNKNOWN SOUND_ARG_LOAD(0x49, 0x00, 0x80, 0x1B)
/* Ceremony */
// Congratulation
#define SOUND_CEREMONY_CONGRATULATION SOUND_ARG_LOAD(0x49, 0x00, 0x90, 0x14)
@ -118,8 +115,4 @@
// Hey, you're very good. See you next time!
#define SOUND_CREDITS_FAREWELL SOUND_ARG_LOAD(0x49, 0x00, 0x80, 0x26)
#endif // SOUNDS_H

View File

@ -48,7 +48,6 @@ typedef struct {
// Seagulls in KoopaTroopaBeach x 1
// length of 24
// Ghosts in BansheeBoardwalk x 1
// Seagulls in KoopaTroopaBeach x 1
// Penguins in Sherbet Land x 1

View File

@ -1,7 +1,7 @@
#include <libultraship.h>
#ifdef _WIN32
#define bzero(b,len) (memset((b), '\0', (len)), (void) 0)
#define bzero(b, len) (memset((b), '\0', (len)), (void) 0)
#define bcopy(b1, b2, len) (memmove((b2), (b1), (len)), (void) 0)
#endif
@ -18,20 +18,21 @@ void mio0decode(u8* arg0, u8* arg1);
s32 mio0encode(s32 input, s32, s32);
void tkmk00decode(u8*, u8*, u8*, s32);
void osStartThread(OSThread* thread);
void osCreateThread(OSThread *thread, OSId id, void (*entry)(void *), void *arg, void *sp, OSPri pri);
void osCreateThread(OSThread* thread, OSId id, void (*entry)(void*), void* arg, void* sp, OSPri pri);
void osInitialize(void);
void osSetThreadPri(OSThread *thread, OSPri pri);
void osSpTaskLoad(OSTask *task);
void osSpTaskStartGo(OSTask *task);
void osSetThreadPri(OSThread* thread, OSPri pri);
void osSpTaskLoad(OSTask* task);
void osSpTaskStartGo(OSTask* task);
void osSpTaskYield(void);
OSYieldResult osSpTaskYielded(OSTask *task);
s32 osPfsDeleteFile(OSPfs *pfs, u16 company_code, u32 game_code, u8 *game_name, u8 *ext_name);
s32 osPfsReadWriteFile(OSPfs *pfs, s32 file_no, u8 flag, int offset, int size_in_bytes, u8 *data_buffer);
s32 osPfsAllocateFile(OSPfs *pfs, u16 company_code, u32 game_code, u8 *game_name, u8 *ext_name, int file_size_in_bytes, s32 *file_no);
OSYieldResult osSpTaskYielded(OSTask* task);
s32 osPfsDeleteFile(OSPfs* pfs, u16 company_code, u32 game_code, u8* game_name, u8* ext_name);
s32 osPfsReadWriteFile(OSPfs* pfs, s32 file_no, u8 flag, int offset, int size_in_bytes, u8* data_buffer);
s32 osPfsAllocateFile(OSPfs* pfs, u16 company_code, u32 game_code, u8* game_name, u8* ext_name, int file_size_in_bytes,
s32* file_no);
void osSetTime(OSTime time);
s32 osPfsIsPlug(OSMesgQueue *queue, u8 *pattern);
s32 osPfsInit(OSMesgQueue *queue, OSPfs *pfs, int channel);
s32 osPfsNumFiles(OSPfs *pfs, s32 *max_files, s32 *files_used);
s32 osPfsFileState(OSPfs *pfs, s32 file_no, OSPfsState *state);
s32 osPfsFreeBlocks(OSPfs *pfs, s32 *bytes_not_used);
s32 osPfsFindFile(OSPfs *pfs, u16 company_code, u32 game_code, u8 *game_name, u8 *ext_name, s32 *file_no);
s32 osPfsIsPlug(OSMesgQueue* queue, u8* pattern);
s32 osPfsInit(OSMesgQueue* queue, OSPfs* pfs, int channel);
s32 osPfsNumFiles(OSPfs* pfs, s32* max_files, s32* files_used);
s32 osPfsFileState(OSPfs* pfs, s32 file_no, OSPfsState* state);
s32 osPfsFreeBlocks(OSPfs* pfs, s32* bytes_not_used);
s32 osPfsFindFile(OSPfs* pfs, u16 company_code, u32 game_code, u8* game_name, u8* ext_name, s32* file_no);

View File

@ -3,12 +3,17 @@
#include <common_structs.h>
#define NUM_1P_PASSENGER_CARS 4
#define NUM_2P_PASSENGER_CARS 1
#define NUM_1P_PASSENGER_CARS 4
#define NUM_2P_PASSENGER_CARS 1
#define NUM_PASSENGER_CAR_ENTRIES 5 // Max 16
#define NUM_TENDERS 1
#define NUM_TRAINS 2
#define LOCOMOTIVE_ONLY 0
#define NUM_TENDERS 1
#define NUM_TRAINS 2
#define LOCOMOTIVE_ONLY 0
#define NUM_CROSSINGS 2
// This allows karts to jump the train despite the crossing being activated.
// but still stop for the train once it's close
#define FRAMES_SINCE_CROSSING_ACTIVATED 240
#define NUM_CROSSINGS 2
// This allows karts to jump the train despite the crossing being activated.
@ -19,15 +24,21 @@
#define NUM_ACTIVE_PADDLE_BOATS 1
#define NUM_PADDLE_BOATS 2
#define NUM_RACE_BOX_TRUCKS 7
#define NUM_RACE_SCHOOL_BUSES 7
#define NUM_RACE_BOX_TRUCKS 7
#define NUM_RACE_SCHOOL_BUSES 7
#define NUM_RACE_TANKER_TRUCKS 7
#define NUM_RACE_CARS 7
#define NUM_RACE_CARS 7
#define NUM_TIME_TRIAL_BOX_TRUCKS (NUM_RACE_BOX_TRUCKS + 1)
#define NUM_TIME_TRIAL_SCHOOL_BUSES (NUM_RACE_SCHOOL_BUSES + 1)
#define NUM_TIME_TRIAL_BOX_TRUCKS (NUM_RACE_BOX_TRUCKS + 1)
#define NUM_TIME_TRIAL_SCHOOL_BUSES (NUM_RACE_SCHOOL_BUSES + 1)
#define NUM_TIME_TRIAL_TANKER_TRUCKS (NUM_RACE_TANKER_TRUCKS + 1)
#define NUM_TIME_TRIAL_CARS (NUM_RACE_CARS + 1)
#define NUM_TIME_TRIAL_CARS (NUM_RACE_CARS + 1)
#define TRAIN_SMOKE_RENDER_DISTANCE 2000.0f
#define TRAIN_CROSSING_AI_DISTANCE 1000.0f
#define BOAT_SMOKE_RENDER_DISTANCE 2000.0f
#define RENDER_VEHICLE 1
#define TRAIN_SMOKE_RENDER_DISTANCE 2000.0f
#define TRAIN_CROSSING_AI_DISTANCE 1000.0f
@ -36,62 +47,62 @@
#define RENDER_VEHICLE 1
typedef struct {
/* 0x00 */ s16 isActive; // Only used for Tender and Passenger Cars, unused for Locomotives
/* 0x02 */ s16 compilerPadding;
/* 0x04 */ Vec3f position;
/* 0x10 */ Vec3f velocity;
/* 0x1C */ u16 waypointIndex;
/* 0x1E */ s16 actorIndex;
/* 0x20 */ s32 unused; // Not read or written. Could be padding?
} TrainCarStuff; // size = 0x24;
/* 0x00 */ s16 isActive; // Only used for Tender and Passenger Cars, unused for Locomotives
/* 0x02 */ s16 compilerPadding;
/* 0x04 */ Vec3f position;
/* 0x10 */ Vec3f velocity;
/* 0x1C */ u16 waypointIndex;
/* 0x1E */ s16 actorIndex;
/* 0x20 */ s32 unused; // Not read or written. Could be padding?
} TrainCarStuff; // size = 0x24;
typedef struct {
/* 0x000 */ TrainCarStuff locomotive;
/* 0x024 */ TrainCarStuff tender;
/* 0x048 */ TrainCarStuff passengerCars[NUM_PASSENGER_CAR_ENTRIES];
/* 0x0FC */ f32 speed;
/* 0x100 */ s32 someFlags;
/* 0x104 */ s32 numCars; // Non-locomotive car count?
/* 0x108 */ s32 unused; // Not read or written. Could be padding?
} TrainStuff; // size = 0x10C
/* 0x000 */ TrainCarStuff locomotive;
/* 0x024 */ TrainCarStuff tender;
/* 0x048 */ TrainCarStuff passengerCars[NUM_PASSENGER_CAR_ENTRIES];
/* 0x0FC */ f32 speed;
/* 0x100 */ s32 someFlags;
/* 0x104 */ s32 numCars; // Non-locomotive car count?
/* 0x108 */ s32 unused; // Not read or written. Could be padding?
} TrainStuff; // size = 0x10C
typedef struct {
/* 0x00 */ s16 isActive; // The paddle wheel boat only shows up if the number of players is < 3
/* 0x02 */ // s16 compilerPadding;
/* 0x04 */ Vec3f position; //
/* 0x10 */ Vec3f velocity; //
/* 0x1C */ u16 waypointIndex; //
/* 0x1E */ s16 actorIndex; //
/* 0x20 */ f32 speed; //
/* 0x24 */ s16 rotY; // Only Y rotation is tracked in this struct
/* 0x26 */ // s16 compilerPadding2;
/**
* Bit field that tracks whether a given human player is within a certain distance of the boat
* Probably audio related
**/
/* 0x28 */ s32 someFlags;
/* 0x00 */ s16 isActive; // The paddle wheel boat only shows up if the number of players is < 3
/* 0x02 */ // s16 compilerPadding;
/* 0x04 */ Vec3f position; //
/* 0x10 */ Vec3f velocity; //
/* 0x1C */ u16 waypointIndex; //
/* 0x1E */ s16 actorIndex; //
/* 0x20 */ f32 speed; //
/* 0x24 */ s16 rotY; // Only Y rotation is tracked in this struct
/* 0x26 */ // s16 compilerPadding2;
/**
* Bit field that tracks whether a given human player is within a certain distance of the boat
* Probably audio related
**/
/* 0x28 */ s32 someFlags;
} PaddleBoatStuff; // size = 0x2C
typedef struct {
/* 0x00 */ s16 unused; // Gets set to 0, but doesn't seem to have any purpose
/* 0x02 */ // s16 compilerPadding;
/* 0x04 */ Vec3f position;
/* 0x10 */ Vec3f velocity;
/* 0x1C */ u16 waypointIndex;
/* 0x1E */ s16 actorIndex;
/* 0x20 */ f32 speed; //
/* 0x24 */ f32 someMultiplierTheSequel; //
/* 0x28 */ Vec3s rotation;
/* 0x2E */ s16 someType; //
/**
* Each set of flags seems to be a bit field tracking whether a given human player
* is within a certain distance of the vehicle. Likely related to audio stuff
* Seems to turn on/off based on player distance from the vehicle
**/
/* 0x30 */ s8 someFlags; //
/* 0x31 */ s8 someFlagsTheSequel; //
/* 0x32 */ // s16 compilerPadding2;
} VehicleStuff; // size = 0x34
/* 0x00 */ s16 unused; // Gets set to 0, but doesn't seem to have any purpose
/* 0x02 */ // s16 compilerPadding;
/* 0x04 */ Vec3f position;
/* 0x10 */ Vec3f velocity;
/* 0x1C */ u16 waypointIndex;
/* 0x1E */ s16 actorIndex;
/* 0x20 */ f32 speed; //
/* 0x24 */ f32 someMultiplierTheSequel; //
/* 0x28 */ Vec3s rotation;
/* 0x2E */ s16 someType; //
/**
* Each set of flags seems to be a bit field tracking whether a given human player
* is within a certain distance of the vehicle. Likely related to audio stuff
* Seems to turn on/off based on player distance from the vehicle
**/
/* 0x30 */ s8 someFlags; //
/* 0x31 */ s8 someFlagsTheSequel; //
/* 0x32 */ // s16 compilerPadding2;
} VehicleStuff; // size = 0x34
extern TrainStuff gTrainList[];

View File

@ -13,24 +13,24 @@ typedef struct {
/**
* These are per-path arrays that contain some information relating to waypoints
* The arrays in D_80164550 contain X/Y/Z and track segment information
* The arrays in D_80164560 and D_80164570 track some other X/Y/Z, but the track segment is always 0 (so, untracked/unused)
* Its unclear how these arrays relate to each other
* The arrays in D_80164560 and D_80164570 track some other X/Y/Z, but the track segment is always 0 (so,
*untracked/unused) Its unclear how these arrays relate to each other
**/
extern TrackWaypoint *D_80164550[];
extern TrackWaypoint *D_80164560[];
extern TrackWaypoint *D_80164570[];
extern TrackWaypoint* D_80164550[];
extern TrackWaypoint* D_80164560[];
extern TrackWaypoint* D_80164570[];
/**
* Don't know what exactly these are, but like D_80164550, D_80164560, and D_80164570
* they track something about the waypoints on a per-path basis
**/
// Waypoint types?
extern s16 *D_80164580[];
extern s16* D_80164580[];
// Based on func_80010DBC this may be angles between waypoints
// D_80164590[i] = atan2(waypoint_i, waypoint_i+1)?
extern s16 *D_80164590[];
extern s16* D_80164590[];
// No idea. Adjacency list?
extern s16 *D_801645A0[];
extern s16* D_801645A0[];
/**
* Certain parts of the waypoint logic will copy some path/player specific data to a temporary variable.
@ -42,20 +42,19 @@ extern s16 sSomeNearestWaypoint;
// Shadows values from gPathIndexByPlayerId
extern s32 D_80163448;
// Shadows values from D_80164560
extern TrackWaypoint *D_801631D0;
extern TrackWaypoint* D_801631D0;
// Shadows values from D_80164570
extern TrackWaypoint *D_801631D4;
extern TrackWaypoint* D_801631D4;
// Shadows values from D_80164580
extern s16 *D_801631D8;
extern s16* D_801631D8;
// Shadows values from D_80164590
extern s16 *D_801631DC;
extern s16* D_801631DC;
// Shadowd values from gWaypointCountByPathIndex
extern u16 D_80164430;
// Shadows values from D_80164550
extern TrackWaypoint *D_80164490;
extern TrackWaypoint* D_80164490;
// Shadows values from D_801645A0
extern s16 *D_801645E0;
extern s16* D_801645E0;
extern u16 gNearestWaypointByPlayerId[]; // D_80164438
// Total waypoints passed by playerId?

@ -1 +1 @@
Subproject commit 9babd56c2a0f9aeb419c60abb9acc13d2a154517
Subproject commit b59bf87a625d952a14cd61b568e1a1228176be98

View File

@ -9,28 +9,29 @@
* @param arg1
* @param banana
*/
void render_actor_banana(Camera *camera, UNUSED Mat4 arg1, struct BananaActor *banana) {
void render_actor_banana(Camera* camera, UNUSED Mat4 arg1, struct BananaActor* banana) {
UNUSED s32 pad[2];
s32 maxObjectsReached;
Vec3s sp7C;
Mat4 sp3C;
f32 temp = is_within_render_distance(camera->pos, banana->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 490000.0f);
f32 temp = is_within_render_distance(camera->pos, banana->pos, camera->rot[1], 0, gCameraZoom[camera - camera1],
490000.0f);
if (temp < 0.0f) {
actor_not_rendered(camera, (struct Actor *) banana);
actor_not_rendered(camera, (struct Actor*) banana);
return;
}
if ((banana->pos[1] > gCourseMaxY + 800.0f)) {
actor_not_rendered(camera, (struct Actor *) banana);
actor_not_rendered(camera, (struct Actor*) banana);
return;
}
if (banana->pos[1] < (gCourseMinY - 800.0f)) {
actor_not_rendered(camera, (struct Actor *) banana);
actor_not_rendered(camera, (struct Actor*) banana);
return;
}
actor_rendered(camera, (struct Actor *) banana);
actor_rendered(camera, (struct Actor*) banana);
if (banana->state == 5) {
mtxf_pos_rotation_xyz(sp3C, banana->pos, banana->rot);
@ -42,7 +43,9 @@ void render_actor_banana(Camera *camera, UNUSED Mat4 arg1, struct BananaActor *b
}
maxObjectsReached = render_set_position(sp3C, 0) == 0;
if (maxObjectsReached) { return; }
if (maxObjectsReached) {
return;
}
if (banana->state != 5) {
gSPDisplayList(gDisplayListHead++, &common_model_banana);

View File

@ -5,14 +5,14 @@
/**
* @brief Update the banana actor
*
* @param banana
*
* @param banana
*/
void update_actor_banana(struct BananaActor *banana) {
void update_actor_banana(struct BananaActor* banana) {
UNUSED f32 pad;
Player *player;
struct BananaActor *elderBanana;
struct Controller *controller;
Player* player;
struct BananaActor* elderBanana;
struct Controller* controller;
Vec3f someOtherVelocity;
Vec3f someVelocity;
f32 temp_f0;
@ -30,157 +30,163 @@ void update_actor_banana(struct BananaActor *banana) {
player = &gPlayers[banana->rot[0]];
switch (banana->state) {
case HELD_BANANA:
temp_f2 = player->pos[0] - banana->pos[0];
temp_f14 = player->pos[1] - banana->pos[1];
temp_f16 = player->pos[2] - banana->pos[2];
temp_f12 = sqrtf((temp_f2 * temp_f2) + (temp_f14 * temp_f14) + (temp_f16 * temp_f16)) / 10.0f;
if (temp_f12 == 0.0f) {
banana->pos[0] = player->pos[0] + 0.2f;
banana->pos[1] = player->pos[1] + 0.2f;
banana->pos[2] = player->pos[2] + 0.2f;
} else {
temp_f2 /= temp_f12;
temp_f14 /= temp_f12;
temp_f16 /= temp_f12;
banana->pos[0] = player->pos[0] - temp_f2;
banana->pos[1] = player->pos[1] - temp_f14 - 2.0f;
banana->pos[2] = player->pos[2] - temp_f16;
}
check_bounding_collision(&banana->unk30, banana->boundingBoxSize + 1.0f, banana->pos[0], banana->pos[1], banana->pos[2]);
func_802B4E30((struct Actor *) banana);
if ((player->type & PLAYER_HUMAN) != 0) {
if (gDemoMode) {
controller = gControllerOne;
case HELD_BANANA:
temp_f2 = player->pos[0] - banana->pos[0];
temp_f14 = player->pos[1] - banana->pos[1];
temp_f16 = player->pos[2] - banana->pos[2];
temp_f12 = sqrtf((temp_f2 * temp_f2) + (temp_f14 * temp_f14) + (temp_f16 * temp_f16)) / 10.0f;
if (temp_f12 == 0.0f) {
banana->pos[0] = player->pos[0] + 0.2f;
banana->pos[1] = player->pos[1] + 0.2f;
banana->pos[2] = player->pos[2] + 0.2f;
} else {
controller = &gControllers[banana->rot[0]];
temp_f2 /= temp_f12;
temp_f14 /= temp_f12;
temp_f16 /= temp_f12;
banana->pos[0] = player->pos[0] - temp_f2;
banana->pos[1] = player->pos[1] - temp_f14 - 2.0f;
banana->pos[2] = player->pos[2] - temp_f16;
}
if ((controller->buttonDepressed & Z_TRIG) != 0) {
controller->buttonDepressed &= ~Z_TRIG;
banana->state = 1;
banana->unk_04 = 0x00B4;
player->soundEffects &= ~HOLD_BANANA_SOUND_EFFECT;
func_800C9060(player - gPlayerOne, SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x12));
pad3 = controller->rawStickY;
if ((pad3 > 30.0f) && (controller->rawStickX < 10) && (controller->rawStickX >= -9)) {
pad3 = pad3 - ((f32) 30);
pad3 = (pad3 / 20.0f) + 0.5f;
if (player->unk_094 < 2.0f) {
temp_f0 = 4.0f;
} else {
temp_f0 = (player->unk_094 * 0.75f) + 3.5f + pad3;
}
vec3f_set(someVelocity, 0, pad3, temp_f0);
func_802B64C4(someVelocity, player->rotation[1] + player->unk_0C0);
banana->velocity[0] = someVelocity[0];
banana->velocity[1] = someVelocity[1];
banana->velocity[2] = someVelocity[2];
check_bounding_collision(&banana->unk30, banana->boundingBoxSize + 1.0f, banana->pos[0], banana->pos[1],
banana->pos[2]);
func_802B4E30((struct Actor*) banana);
if ((player->type & PLAYER_HUMAN) != 0) {
if (gDemoMode) {
controller = gControllerOne;
} else {
banana->velocity[0] = 0;
banana->velocity[1] = 1.5f;
banana->velocity[2] = 0;
controller = &gControllers[banana->rot[0]];
}
if ((controller->buttonDepressed & Z_TRIG) != 0) {
controller->buttonDepressed &= ~Z_TRIG;
banana->state = 1;
banana->unk_04 = 0x00B4;
player->soundEffects &= ~HOLD_BANANA_SOUND_EFFECT;
func_800C9060(player - gPlayerOne, SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x12));
pad3 = controller->rawStickY;
if ((pad3 > 30.0f) && (controller->rawStickX < 10) && (controller->rawStickX >= -9)) {
pad3 = pad3 - ((f32) 30);
pad3 = (pad3 / 20.0f) + 0.5f;
if (player->unk_094 < 2.0f) {
temp_f0 = 4.0f;
} else {
temp_f0 = (player->unk_094 * 0.75f) + 3.5f + pad3;
}
vec3f_set(someVelocity, 0, pad3, temp_f0);
func_802B64C4(someVelocity, player->rotation[1] + player->unk_0C0);
banana->velocity[0] = someVelocity[0];
banana->velocity[1] = someVelocity[1];
banana->velocity[2] = someVelocity[2];
} else {
banana->velocity[0] = 0;
banana->velocity[1] = 1.5f;
banana->velocity[2] = 0;
}
}
}
}
break;
case DROPPED_BANANA:
if (banana->unk_04 != 0) {
break;
case DROPPED_BANANA:
if (banana->unk_04 != 0) {
banana->unk_04 -= 1;
if (banana->unk_04 == 0) {
banana->flags &= ~0x1000;
}
}
banana->pos[0] += banana->velocity[0];
banana->pos[2] += banana->velocity[2];
if (banana->velocity[1] > -1.0f) {
banana->velocity[1] -= 0.15f;
}
banana->pos[1] += banana->velocity[1];
if ((banana->pos[2] < (f32) gCourseMinZ) || ((f32) gCourseMaxZ < banana->pos[2]) ||
(banana->pos[0] < (f32) gCourseMinX) || ((f32) gCourseMaxX < banana->pos[0]) ||
(banana->pos[1] < (f32) gCourseMinY)) {
destroy_destructable_actor((struct Actor*) banana);
} else {
check_bounding_collision(&banana->unk30, banana->boundingBoxSize + 1.0f, banana->pos[0], banana->pos[1],
banana->pos[2]);
banana->unk30.unk34 = 1;
if ((banana->unk30.unk34 != 0) && (banana->unk30.surfaceDistance[2] < 0.0f)) {
someOtherVelocity[0] = -banana->unk30.orientationVector[0];
someOtherVelocity[1] = -banana->unk30.orientationVector[1];
someOtherVelocity[2] = -banana->unk30.orientationVector[2];
banana->pos[0] += someOtherVelocity[0] * banana->unk30.surfaceDistance[2];
banana->pos[1] += someOtherVelocity[1] * banana->unk30.surfaceDistance[2];
banana->pos[2] += someOtherVelocity[2] * banana->unk30.surfaceDistance[2];
banana->flags &= ~0x1000;
banana->state = 4;
}
}
break;
case FIRST_BANANA_BUNCH_BANANA:
someVelocity[0] = 0.0f;
someVelocity[1] = 0.0f;
someVelocity[2] = -5.0f;
func_802B64C4(someVelocity, player->rotation[1] + player->unk_0C0);
unkX = player->pos[0] + someVelocity[0];
unkY = player->pos[1] + someVelocity[1];
unkZ = player->pos[2] + someVelocity[2];
temp_f2 = unkX - banana->pos[0];
temp_f14 = unkY - banana->pos[1];
temp_f16 = unkZ - banana->pos[2];
temp_f0 = sqrtf((temp_f2 * temp_f2) + (temp_f14 * temp_f14) + (temp_f16 * temp_f16));
if (temp_f0 == 0.0f) {
banana->pos[0] = player->pos[0] + 0.2f;
banana->pos[1] = player->pos[1] + 0.2f;
banana->pos[2] = player->pos[2] + 0.2f;
} else {
temp_f2 /= temp_f0;
temp_f14 /= temp_f0;
temp_f16 /= temp_f0;
banana->pos[0] = someVelocity[0] + (unkX - temp_f2);
banana->pos[1] = unkY - temp_f14 - 2.0f;
banana->pos[2] = unkZ - temp_f16;
}
check_bounding_collision(&banana->unk30, banana->boundingBoxSize + 1.0f, banana->pos[0], banana->pos[1],
banana->pos[2]);
func_802B4E30((struct Actor*) banana);
break;
case BANANA_BUNCH_BANANA:
elderBanana = (struct BananaActor*) &gActorList[banana->elderIndex];
temp_f2 = elderBanana->pos[0] - banana->pos[0];
temp_f14 = elderBanana->pos[1] - banana->pos[1];
temp_f16 = elderBanana->pos[2] - banana->pos[2];
temp_f12 = sqrtf((temp_f2 * temp_f2) + (temp_f14 * temp_f14) + (temp_f16 * temp_f16)) / 5.0f;
if (temp_f12 == 0.0f) {
banana->pos[0] = elderBanana->pos[0] + 0.2f;
banana->pos[1] = elderBanana->pos[1] + 0.2f;
banana->pos[2] = elderBanana->pos[2] + 0.2f;
} else {
temp_f2 /= temp_f12;
temp_f14 /= temp_f12;
temp_f16 /= temp_f12;
banana->pos[0] = elderBanana->pos[0] - temp_f2;
banana->pos[1] = elderBanana->pos[1] - temp_f14 - 2.0f;
banana->pos[2] = elderBanana->pos[2] - temp_f16;
}
var_f8 = banana->pos[2];
check_bounding_collision(&banana->unk30, banana->boundingBoxSize + 1.0f, banana->pos[0], banana->pos[1],
banana->pos[2]);
func_802B4E30((struct Actor*) banana);
break;
case DESTROYED_BANANA:
banana->velocity[1] -= 0.3f;
if (banana->velocity[1] < -5.0f) {
banana->velocity[1] = -5.0f;
}
banana->pos[1] += banana->velocity[1];
banana->rot[0] += 0x16C;
banana->rot[1] -= 0x5B0;
banana->rot[2] += 0x38E;
banana->unk_04 -= 1;
if (banana->unk_04 == 0) {
banana->flags &= ~0x1000;
destroy_actor((struct Actor*) banana);
}
}
banana->pos[0] += banana->velocity[0];
banana->pos[2] += banana->velocity[2];
if (banana->velocity[1] > -1.0f) {
banana->velocity[1] -= 0.15f;
}
banana->pos[1] += banana->velocity[1];
if ((banana->pos[2] < (f32) gCourseMinZ) || ((f32) gCourseMaxZ < banana->pos[2]) || (banana->pos[0] < (f32) gCourseMinX) || ((f32) gCourseMaxX < banana->pos[0]) || (banana->pos[1] < (f32) gCourseMinY)) {
destroy_destructable_actor((struct Actor *) banana);
} else {
check_bounding_collision(&banana->unk30, banana->boundingBoxSize + 1.0f, banana->pos[0], banana->pos[1], banana->pos[2]);
banana->unk30.unk34 = 1;
if ((banana->unk30.unk34 != 0) && (banana->unk30.surfaceDistance[2] < 0.0f)) {
someOtherVelocity[0] = -banana->unk30.orientationVector[0];
someOtherVelocity[1] = -banana->unk30.orientationVector[1];
someOtherVelocity[2] = -banana->unk30.orientationVector[2];
banana->pos[0] += someOtherVelocity[0] * banana->unk30.surfaceDistance[2];
banana->pos[1] += someOtherVelocity[1] * banana->unk30.surfaceDistance[2];
banana->pos[2] += someOtherVelocity[2] * banana->unk30.surfaceDistance[2];
banana->flags &= ~0x1000;
banana->state = 4;
}
}
break;
case FIRST_BANANA_BUNCH_BANANA:
someVelocity[0] = 0.0f;
someVelocity[1] = 0.0f;
someVelocity[2] = -5.0f;
func_802B64C4(someVelocity, player->rotation[1] + player->unk_0C0);
unkX = player->pos[0] + someVelocity[0];
unkY = player->pos[1] + someVelocity[1];
unkZ = player->pos[2] + someVelocity[2];
temp_f2 = unkX - banana->pos[0];
temp_f14 = unkY - banana->pos[1];
temp_f16 = unkZ - banana->pos[2];
temp_f0 = sqrtf((temp_f2 * temp_f2) + (temp_f14 * temp_f14) + (temp_f16 * temp_f16));
if (temp_f0 == 0.0f) {
banana->pos[0] = player->pos[0] + 0.2f;
banana->pos[1] = player->pos[1] + 0.2f;
banana->pos[2] = player->pos[2] + 0.2f;
} else {
temp_f2 /= temp_f0;
temp_f14 /= temp_f0;
temp_f16 /= temp_f0;
banana->pos[0] = someVelocity[0] + (unkX - temp_f2);
banana->pos[1] = unkY - temp_f14 - 2.0f;
banana->pos[2] = unkZ - temp_f16;
}
check_bounding_collision(&banana->unk30, banana->boundingBoxSize + 1.0f, banana->pos[0], banana->pos[1], banana->pos[2]);
func_802B4E30((struct Actor *) banana);
break;
case BANANA_BUNCH_BANANA:
elderBanana = (struct BananaActor*)&gActorList[banana->elderIndex];
temp_f2 = elderBanana->pos[0] - banana->pos[0];
temp_f14 = elderBanana->pos[1] - banana->pos[1];
temp_f16 = elderBanana->pos[2] - banana->pos[2];
temp_f12 = sqrtf((temp_f2 * temp_f2) + (temp_f14 * temp_f14) + (temp_f16 * temp_f16)) / 5.0f;
if (temp_f12 == 0.0f) {
banana->pos[0] = elderBanana->pos[0] + 0.2f;
banana->pos[1] = elderBanana->pos[1] + 0.2f;
banana->pos[2] = elderBanana->pos[2] + 0.2f;
} else {
temp_f2 /= temp_f12;
temp_f14 /= temp_f12;
temp_f16 /= temp_f12;
banana->pos[0] = elderBanana->pos[0] - temp_f2;
banana->pos[1] = elderBanana->pos[1] - temp_f14 - 2.0f;
banana->pos[2] = elderBanana->pos[2] - temp_f16;
}
var_f8 = banana->pos[2];
check_bounding_collision(&banana->unk30, banana->boundingBoxSize + 1.0f, banana->pos[0], banana->pos[1], banana->pos[2]);
func_802B4E30((struct Actor *) banana);
break;
case DESTROYED_BANANA:
banana->velocity[1] -= 0.3f;
if (banana->velocity[1] < -5.0f) {
banana->velocity[1] = -5.0f;
}
banana->pos[1] += banana->velocity[1];
banana->rot[0] += 0x16C;
banana->rot[1] -= 0x5B0;
banana->rot[2] += 0x38E;
banana->unk_04 -= 1;
if (banana->unk_04 == 0) {
destroy_actor((struct Actor *) banana);
}
break;
case BANANA_ON_GROUND:
banana->flags |= 0xC000;
banana->flags &= ~0x1000;
break;
default:
break;
break;
case BANANA_ON_GROUND:
banana->flags |= 0xC000;
banana->flags &= ~0x1000;
break;
default:
break;
}
}

View File

@ -8,7 +8,7 @@
* @param matrix
* @param shell
*/
void render_actor_red_shell(Camera *camera, Mat4 matrix, struct ShellActor *shell) {
void render_actor_red_shell(Camera* camera, Mat4 matrix, struct ShellActor* shell) {
gDPLoadTLUT_pal256(gDisplayListHead++, &gTLUTRedShell); // set texture
render_actor_shell(camera, matrix, shell);
}
@ -20,7 +20,7 @@ void render_actor_red_shell(Camera *camera, Mat4 matrix, struct ShellActor *shel
* @param matrix
* @param shell
*/
void render_actor_blue_shell(Camera *camera, Mat4 matrix, struct ShellActor *shell) {
void render_actor_blue_shell(Camera* camera, Mat4 matrix, struct ShellActor* shell) {
gDPLoadTLUT_pal256(gDisplayListHead++, common_tlut_blue_shell); // set texture
render_actor_shell(camera, matrix, shell);
}

View File

@ -5,7 +5,7 @@
#include <actors_extended.h>
#include <code_800029B0.h>
void func_802B3B44(struct ShellActor *shell) {
void func_802B3B44(struct ShellActor* shell) {
u16 currentWaypoint;
u16 nextWaypoint;
f32 temp_f0;
@ -29,7 +29,7 @@ void func_802B3B44(struct ShellActor *shell) {
Vec3f origPos;
currentWaypoint = shell->pathIndex;
temp_f2 = D_80164490[currentWaypoint].posX;
temp_f2 = D_80164490[currentWaypoint].posX;
temp_f12 = D_80164490[currentWaypoint].posY;
temp_f28 = D_80164490[currentWaypoint].posZ;
nextWaypoint = currentWaypoint + 1;
@ -38,18 +38,18 @@ void func_802B3B44(struct ShellActor *shell) {
nextWaypoint -= D_80164430;
}
temp_f20 = temp_f2 - shell->pos[0];
temp_f20 = temp_f2 - shell->pos[0];
temp_f22 = temp_f12 - shell->pos[1];
temp_f24 = temp_f28 - shell->pos[2];
temp_f0 = (temp_f20 * temp_f20) + (temp_f22 * temp_f22) + (temp_f24 * temp_f24);
if (temp_f0 > 400.0f) {
temp_f18_3 = D_80164490[nextWaypoint].posX;
temp_f16_3 = D_80164490[nextWaypoint].posY;
temp_f26 = D_80164490[nextWaypoint].posZ;
temp_f26 = D_80164490[nextWaypoint].posZ;
temp_f12_0 = temp_f18_3 - shell->pos[0];
temp_f12_1 = temp_f16_3 - shell->pos[1];
temp_f12_2 = temp_f26 - shell->pos[2];
temp_f12_2 = temp_f26 - shell->pos[2];
temp_f0_3 = (temp_f12_0 * temp_f12_0) + (temp_f12_1 * temp_f12_1) + (temp_f12_2 * temp_f12_2);
if (temp_f0_3 < temp_f0) {
@ -85,8 +85,9 @@ void func_802B3B44(struct ShellActor *shell) {
shell->pos[0] += temp_f12_3;
shell->pos[1] += temp_f14_2;
shell->pos[2] += temp_f16_2;
actor_terrain_collision(&shell->unk30, 4.0f, shell->pos[0], shell->pos[1], shell->pos[2], origPos[0], origPos[1], origPos[2]);
func_802B4E30((struct Actor *) shell);
actor_terrain_collision(&shell->unk30, 4.0f, shell->pos[0], shell->pos[1], shell->pos[2], origPos[0],
origPos[1], origPos[2]);
func_802B4E30((struct Actor*) shell);
}
} else {
if (temp_f0 > 5.0f) {
@ -97,20 +98,20 @@ void func_802B3B44(struct ShellActor *shell) {
} else {
temp_f18_3 = D_80164490[nextWaypoint].posX;
temp_f16_3 = D_80164490[nextWaypoint].posY;
temp_f26 = D_80164490[nextWaypoint].posZ;
temp_f26 = D_80164490[nextWaypoint].posZ;
shell->pos[0] = (temp_f2 + temp_f18_3) * 0.5f;
shell->pos[0] = (temp_f2 + temp_f18_3) * 0.5f;
shell->pos[1] = ((temp_f12 + temp_f16_3) * 0.5f) + shell->boundingBoxSize;
shell->pos[2] = (temp_f28 + temp_f26) * 0.5f;
shell->pos[2] = (temp_f28 + temp_f26) * 0.5f;
shell->velocity[0] = (temp_f18_3 - temp_f2) * 0.5f;
shell->velocity[0] = (temp_f18_3 - temp_f2) * 0.5f;
shell->velocity[1] = (temp_f16_3 - temp_f12) * 0.5f;
shell->velocity[2] = (temp_f26 - temp_f28) * 0.5f;
shell->velocity[2] = (temp_f26 - temp_f28) * 0.5f;
}
}
}
void func_802B3E7C(struct ShellActor *shell, Player *player) {
void func_802B3E7C(struct ShellActor* shell, Player* player) {
f32 x_velocity;
f32 z_velocity;
f32 xz_dist;
@ -140,10 +141,11 @@ void func_802B3E7C(struct ShellActor *shell, Player *player) {
shell->velocity[2] = z_velocity;
if (player->effects & BOO_EFFECT) {
destroy_destructable_actor((struct Actor *) shell);
destroy_destructable_actor((struct Actor*) shell);
} else {
actor_terrain_collision(&shell->unk30, 4.0f, shell->pos[0], shell->pos[1], shell->pos[2], newPosition[0], newPosition[1], newPosition[2]);
func_802B4E30((struct Actor *) shell);
actor_terrain_collision(&shell->unk30, 4.0f, shell->pos[0], shell->pos[1], shell->pos[2], newPosition[0],
newPosition[1], newPosition[2]);
func_802B4E30((struct Actor*) shell);
func_802B4104(shell);
}
}
@ -151,9 +153,9 @@ void func_802B3E7C(struct ShellActor *shell, Player *player) {
/**
* Only used in Battle mode
* Likely trying to find the nearest player that is not the shell's owner and is not dead
**/
s16 func_802B3FD0(Player *owner, struct ShellActor *shell) {
Player *player;
**/
s16 func_802B3FD0(Player* owner, struct ShellActor* shell) {
Player* player;
s32 playerIndex;
f32 playerToShellDistance;
s16 playerId = -1;
@ -161,28 +163,36 @@ s16 func_802B3FD0(Player *owner, struct ShellActor *shell) {
for (playerIndex = 0; playerIndex < 4; playerIndex++) {
player = &gPlayers[playerIndex];
if ((player->type & PLAYER_EXISTS) == 0) {continue;}
if (player == owner) {continue; }
if (gPlayerBalloonCount[playerIndex] < 0) { continue; }
// func_802B51E8 is not quite a 3D distance function, it doubles (rather than squares) the Z difference of the positions
playerToShellDistance = func_802B51E8(player->pos, shell->pos);
if (playerToShellDistance < smallestDistance) {
smallestDistance = playerToShellDistance;
playerId = player - gPlayerOne;
}
if ((player->type & PLAYER_EXISTS) == 0) {
continue;
}
if (player == owner) {
continue;
}
if (gPlayerBalloonCount[playerIndex] < 0) {
continue;
}
// func_802B51E8 is not quite a 3D distance function, it doubles (rather than squares) the Z difference of the
// positions
playerToShellDistance = func_802B51E8(player->pos, shell->pos);
if (playerToShellDistance < smallestDistance) {
smallestDistance = playerToShellDistance;
playerId = player - gPlayerOne;
}
}
return playerId;
}
void func_802B4104(struct ShellActor *shell) {
if ((shell->unk30.surfaceDistance[0] < 0.0f) && ((shell->unk30.unk48[1] < 0.25f) || (shell->unk30.unk48[1] > -0.25f))) {
destroy_destructable_actor((struct Actor *) shell);
void func_802B4104(struct ShellActor* shell) {
if ((shell->unk30.surfaceDistance[0] < 0.0f) &&
((shell->unk30.unk48[1] < 0.25f) || (shell->unk30.unk48[1] > -0.25f))) {
destroy_destructable_actor((struct Actor*) shell);
func_800C98B8(shell->pos, shell->velocity, SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x54));
shell->flags |= 0x80;
} else if ((shell->unk30.surfaceDistance[1] < 0.0f) && ((shell->unk30.unk54[1] < 0.25f) || (shell->unk30.unk54[1] < -0.25f))) {
destroy_destructable_actor((struct Actor *) shell);
} else if ((shell->unk30.surfaceDistance[1] < 0.0f) &&
((shell->unk30.unk54[1] < 0.25f) || (shell->unk30.unk54[1] < -0.25f))) {
destroy_destructable_actor((struct Actor*) shell);
func_800C98B8(shell->pos, shell->velocity, SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x54));
shell->flags |= 0x80;
}
@ -190,20 +200,20 @@ void func_802B4104(struct ShellActor *shell) {
/**
* @brief Update the red and blue shell actors
*
* @param shell
*
* @param shell
*/
void update_actor_red_blue_shell(struct ShellActor *shell) {
void update_actor_red_blue_shell(struct ShellActor* shell) {
UNUSED f32 pad9;
Player *player;
Player* player;
f32 height;
UNUSED f32 temp_f14;
f32 temp_f2;
s16 temp_v0;
UNUSED s16 pad3;
Vec3f somePosVel;
struct Controller *controller;
TripleShellParent *parent;
struct Controller* controller;
TripleShellParent* parent;
UNUSED f32 pad0;
UNUSED f32 pad1;
UNUSED f32 pad2;
@ -227,241 +237,246 @@ void update_actor_red_blue_shell(struct ShellActor *shell) {
pad0 = shell->pos[2];
pad2 = shell->pos[1];
pad13 = shell->type;
if ((pad0 < (f32) gCourseMinZ) || ((f32) gCourseMaxZ < pad0) || (pad1 < (f32) gCourseMinX) || ((f32) gCourseMaxX < pad1) || (pad2 < (f32) gCourseMinY)) {
destroy_destructable_actor((struct Actor *) shell);
if ((pad0 < (f32) gCourseMinZ) || ((f32) gCourseMaxZ < pad0) || (pad1 < (f32) gCourseMinX) ||
((f32) gCourseMaxX < pad1) || (pad2 < (f32) gCourseMinY)) {
destroy_destructable_actor((struct Actor*) shell);
}
shell->rotVelocity += 0x71C;
switch (shell->state) {
case HELD_SHELL:
player = &gPlayers[shell->playerId];
copy_collision(&player->collision, &shell->unk30);
somePosVel[0] = 0.0f;
somePosVel[1] = player->boundingBoxSize;
somePosVel[2] = -(player->boundingBoxSize + shell->boundingBoxSize + 2.0f);
mtxf_translate_vec3f_mat3(somePosVel, player->orientationMatrix);
shell->pos[0] = player->pos[0] + somePosVel[0];
pad7 = player->pos[1] - somePosVel[1];
shell->pos[2] = player->pos[2] + somePosVel[2];
height = calculate_surface_height(shell->pos[0], pad7, shell->pos[2], player->collision.meshIndexZX);
temp_f2 = pad7 - height;
if ((temp_f2 < 5.0f) && (temp_f2 > -5.0f)) {
shell->pos[1] = shell->boundingBoxSize + height;
} else {
shell->pos[1] = pad7;
}
if ((player->type & PLAYER_HUMAN) != 0) {
if (gDemoMode) {
controller = gControllerOne;
} else {
controller = &gControllers[shell->playerId];
}
} else {
controller = gControllerOne;
}
if ((controller->buttonDepressed & Z_TRIG) != 0) {
controller->buttonDepressed &= ~Z_TRIG;
shell->state = RELEASED_SHELL;
if (player->unk_0C0 > 0) {
shell->rotAngle = 0x78E3;
} else {
shell->rotAngle = -0x78E4;
}
}
break;
case RELEASED_SHELL:
player = &gPlayers[shell->playerId];
if (shell->rotAngle > 0) {
shell->rotAngle -= 0x71C;
if (shell->rotAngle < 0) {
shell->state = MOVING_SHELL;
func_800C9060(shell->playerId, SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x04));
func_800C90F4(shell->playerId, (player->characterId * 0x10) + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x00));
if (pad13 == ACTOR_RED_SHELL) {
add_red_shell_in_unexpired_actor_list((struct Actor*)shell - gActorList);
} else {
add_blue_shell_in_unexpired_actor_list((struct Actor*)shell - gActorList);
func_800C9D80(shell->pos, shell->velocity, SOUND_ARG_LOAD(0x51, 0x01, 0x80, 0x08));
}
}
} else {
shell->rotAngle += 0x71C;
if (shell->rotAngle > 0) {
shell->state = MOVING_SHELL;
func_800C9060(shell->playerId, SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x04));
func_800C90F4(shell->playerId, (player->characterId * 0x10) + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x00));
if (pad13 == ACTOR_RED_SHELL) {
add_red_shell_in_unexpired_actor_list((struct Actor*)shell - gActorList);
} else {
add_blue_shell_in_unexpired_actor_list((struct Actor*)shell - gActorList);
func_800C9D80(shell->pos, shell->velocity, SOUND_ARG_LOAD(0x51, 0x01, 0x80, 0x08));
}
}
}
if (shell->state == MOVING_SHELL) {
shell->someTimer = 0x001E;
height = 8.0f;
if (player->unk_094 > 8.0f) {
height = player->unk_094 * 1.2f;
}
case HELD_SHELL:
player = &gPlayers[shell->playerId];
copy_collision(&player->collision, &shell->unk30);
somePosVel[0] = 0.0f;
somePosVel[1] = 0.0f;
somePosVel[2] = height;
func_802B64C4(somePosVel, (s16) (player->rotation[1] + player->unk_0C0));
shell->velocity[0] = somePosVel[0];
shell->velocity[1] = somePosVel[1];
shell->velocity[2] = somePosVel[2];
} else {
somePosVel[0] = sins(shell->rotAngle) * 8.0f;
somePosVel[1] = shell->boundingBoxSize - player->boundingBoxSize;
somePosVel[2] = coss(shell->rotAngle) * 8.0f;
somePosVel[1] = player->boundingBoxSize;
somePosVel[2] = -(player->boundingBoxSize + shell->boundingBoxSize + 2.0f);
mtxf_translate_vec3f_mat3(somePosVel, player->orientationMatrix);
shell->pos[0] = player->pos[0] + somePosVel[0];
shell->pos[1] = player->pos[1] + somePosVel[1];
pad7 = player->pos[1] - somePosVel[1];
shell->pos[2] = player->pos[2] + somePosVel[2];
}
break;
case MOVING_SHELL:
player = &gPlayers[shell->playerId];
shell->someTimer -= 1;
if (shell->someTimer == 0) {
shell->flags &= 0xEFFF;
if (shell->type == ACTOR_BLUE_SPINY_SHELL) {
shell->targetPlayer = gPlayerPositionLUT[0];
shell->state = BLUE_SHELL_LOCK_ON;
shell->shellId = 1000.0f;
temp_v0 = gNearestWaypointByPlayerId[player - gPlayerOne] + 8;
if ((s32) D_80164430 < temp_v0) {
temp_v0 -= D_80164430;
}
shell->pathIndex = temp_v0;
} else if (gModeSelection == BATTLE) {
shell->shellId = 1000.0f;
shell->targetPlayer = func_802B3FD0(player, shell);
if (shell->targetPlayer < 0) {
shell->flags = 0x8000;
shell->velocity[1] = 3.0f;
shell->pathIndex = 0;
shell->someTimer = 0x003C;
shell->state = DESTROYED_SHELL;
height = calculate_surface_height(shell->pos[0], pad7, shell->pos[2], player->collision.meshIndexZX);
temp_f2 = pad7 - height;
if ((temp_f2 < 5.0f) && (temp_f2 > -5.0f)) {
shell->pos[1] = shell->boundingBoxSize + height;
} else {
shell->pos[1] = pad7;
}
if ((player->type & PLAYER_HUMAN) != 0) {
if (gDemoMode) {
controller = gControllerOne;
} else {
shell->state = RED_SHELL_LOCK_ON;
controller = &gControllers[shell->playerId];
}
} else {
if (player->currentRank == 0) {
shell->state = TRIPLE_GREEN_SHELL;
shell->someTimer = 0x0258;
temp_v0 = gNearestWaypointByPlayerId[player - gPlayerOne] + 8;
if ((s32) D_80164430 < temp_v0) {
temp_v0 -= D_80164430;
controller = gControllerOne;
}
if ((controller->buttonDepressed & Z_TRIG) != 0) {
controller->buttonDepressed &= ~Z_TRIG;
shell->state = RELEASED_SHELL;
if (player->unk_0C0 > 0) {
shell->rotAngle = 0x78E3;
} else {
shell->rotAngle = -0x78E4;
}
}
break;
case RELEASED_SHELL:
player = &gPlayers[shell->playerId];
if (shell->rotAngle > 0) {
shell->rotAngle -= 0x71C;
if (shell->rotAngle < 0) {
shell->state = MOVING_SHELL;
func_800C9060(shell->playerId, SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x04));
func_800C90F4(shell->playerId,
(player->characterId * 0x10) + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x00));
if (pad13 == ACTOR_RED_SHELL) {
add_red_shell_in_unexpired_actor_list((struct Actor*) shell - gActorList);
} else {
add_blue_shell_in_unexpired_actor_list((struct Actor*) shell - gActorList);
func_800C9D80(shell->pos, shell->velocity, SOUND_ARG_LOAD(0x51, 0x01, 0x80, 0x08));
}
shell->pathIndex = temp_v0;
} else if (player->currentRank >= 5) {
shell->state = GREEN_SHELL_HIT_A_RACER;
}
} else {
shell->rotAngle += 0x71C;
if (shell->rotAngle > 0) {
shell->state = MOVING_SHELL;
func_800C9060(shell->playerId, SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x04));
func_800C90F4(shell->playerId,
(player->characterId * 0x10) + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x00));
if (pad13 == ACTOR_RED_SHELL) {
add_red_shell_in_unexpired_actor_list((struct Actor*) shell - gActorList);
} else {
add_blue_shell_in_unexpired_actor_list((struct Actor*) shell - gActorList);
func_800C9D80(shell->pos, shell->velocity, SOUND_ARG_LOAD(0x51, 0x01, 0x80, 0x08));
}
}
}
if (shell->state == MOVING_SHELL) {
shell->someTimer = 0x001E;
height = 8.0f;
if (player->unk_094 > 8.0f) {
height = player->unk_094 * 1.2f;
}
somePosVel[0] = 0.0f;
somePosVel[1] = 0.0f;
somePosVel[2] = height;
func_802B64C4(somePosVel, (s16) (player->rotation[1] + player->unk_0C0));
shell->velocity[0] = somePosVel[0];
shell->velocity[1] = somePosVel[1];
shell->velocity[2] = somePosVel[2];
} else {
somePosVel[0] = sins(shell->rotAngle) * 8.0f;
somePosVel[1] = shell->boundingBoxSize - player->boundingBoxSize;
somePosVel[2] = coss(shell->rotAngle) * 8.0f;
mtxf_translate_vec3f_mat3(somePosVel, player->orientationMatrix);
shell->pos[0] = player->pos[0] + somePosVel[0];
shell->pos[1] = player->pos[1] + somePosVel[1];
shell->pos[2] = player->pos[2] + somePosVel[2];
}
break;
case MOVING_SHELL:
player = &gPlayers[shell->playerId];
shell->someTimer -= 1;
if (shell->someTimer == 0) {
shell->flags &= 0xEFFF;
if (shell->type == ACTOR_BLUE_SPINY_SHELL) {
shell->targetPlayer = gPlayerPositionLUT[0];
shell->state = BLUE_SHELL_LOCK_ON;
shell->shellId = 1000.0f;
temp_v0 = gNearestWaypointByPlayerId[player - gPlayerOne] + 8;
if ((s32) D_80164430 < temp_v0) {
temp_v0 -= D_80164430;
}
shell->pathIndex = temp_v0;
shell->targetPlayer = gPlayerPositionLUT[player->currentRank - 1];
} else {
shell->state = RED_SHELL_LOCK_ON;
} else if (gModeSelection == BATTLE) {
shell->shellId = 1000.0f;
shell->targetPlayer = gPlayerPositionLUT[player->currentRank - 1];
shell->targetPlayer = func_802B3FD0(player, shell);
if (shell->targetPlayer < 0) {
shell->flags = 0x8000;
shell->velocity[1] = 3.0f;
shell->pathIndex = 0;
shell->someTimer = 0x003C;
shell->state = DESTROYED_SHELL;
} else {
shell->state = RED_SHELL_LOCK_ON;
}
} else {
if (player->currentRank == 0) {
shell->state = TRIPLE_GREEN_SHELL;
shell->someTimer = 0x0258;
temp_v0 = gNearestWaypointByPlayerId[player - gPlayerOne] + 8;
if ((s32) D_80164430 < temp_v0) {
temp_v0 -= D_80164430;
}
shell->pathIndex = temp_v0;
} else if (player->currentRank >= 5) {
shell->state = GREEN_SHELL_HIT_A_RACER;
shell->shellId = 1000.0f;
temp_v0 = gNearestWaypointByPlayerId[player - gPlayerOne] + 8;
if ((s32) D_80164430 < temp_v0) {
temp_v0 -= D_80164430;
}
shell->pathIndex = temp_v0;
shell->targetPlayer = gPlayerPositionLUT[player->currentRank - 1];
} else {
shell->state = RED_SHELL_LOCK_ON;
shell->shellId = 1000.0f;
shell->targetPlayer = gPlayerPositionLUT[player->currentRank - 1];
}
}
}
}
shell->velocity[1] -= 0.5;
if (shell->velocity[1] < -2.0f) {
shell->velocity[1] = -2.0f;
}
origPos[0] = shell->pos[0];
origPos[1] = shell->pos[1];
origPos[2] = shell->pos[2];
shell->pos[0] += shell->velocity[0];
shell->pos[1] += shell->velocity[1];
shell->pos[2] += shell->velocity[2];
actor_terrain_collision(&shell->unk30, 4.0f, shell->pos[0], shell->pos[1], shell->pos[2], origPos[0], origPos[1], origPos[2]);
func_802B4E30((struct Actor *) shell);
func_802B4104(shell);
break;
case RED_SHELL_LOCK_ON:
func_802B3E7C(shell, &gPlayers[shell->targetPlayer]);
break;
case TRIPLE_GREEN_SHELL:
func_802B3B44(shell);
if (shell->someTimer == 0) {
if ((shell->flags & 0xF) == 0) {
destroy_destructable_actor((struct Actor *) shell);
} else {
shell->someTimer -= 1;
shell->velocity[1] -= 0.5;
if (shell->velocity[1] < -2.0f) {
shell->velocity[1] = -2.0f;
}
}
break;
case GREEN_SHELL_HIT_A_RACER:
func_802B3B44(shell);
player = &gPlayers[shell->targetPlayer];
height = player->pos[0];
height -= shell->pos[0];
temp_f2 = player->pos[2];
temp_f2 -= shell->pos[2];
if (((height * height) + (temp_f2 * temp_f2)) < 40000.0f) {
shell->state = RED_SHELL_LOCK_ON;
}
break;
case TRIPLE_RED_SHELL:
player = &gPlayers[shell->playerId];
parent = (TripleShellParent *) &gActorList[shell->parentIndex];
if (parent->type != ACTOR_TRIPLE_RED_SHELL) {
destroy_destructable_actor((struct Actor *) shell);
} else {
shell->rotAngle += parent->rotVelocity;
somePosVel[0] = sins(shell->rotAngle) * 8.0f;
somePosVel[1] = shell->boundingBoxSize - player->boundingBoxSize;
somePosVel[2] = coss(shell->rotAngle) * 8.0f;
mtxf_translate_vec3f_mat3(somePosVel, player->orientationMatrix);
origPos[0] = shell->pos[0];
origPos[1] = shell->pos[1];
origPos[2] = shell->pos[2];
shell->pos[0] = player->pos[0] + somePosVel[0];
shell->pos[1] = player->pos[1] + somePosVel[1];
shell->pos[2] = player->pos[2] + somePosVel[2];
actor_terrain_collision(&shell->unk30, 4.0f, shell->pos[0], shell->pos[1], shell->pos[2], origPos[0], origPos[1], origPos[2]);
func_802B4E30((struct Actor *) shell);
}
break;
case DESTROYED_SHELL:
shell->velocity[1] -= 0.3f;
if (shell->velocity[1] < -5.0f) {
shell->velocity[1] = -5.0f;
}
shell->rotAngle += 0x5B0;
shell->someTimer -= 1;
shell->pos[1] += shell->velocity[1];
if (shell->someTimer == 0) {
destroy_actor((struct Actor *) shell);
}
break;
case BLUE_SHELL_LOCK_ON:
func_802B3B44(shell);
shell->targetPlayer = gPlayerPositionLUT[0];
player = &gPlayers[gPlayerPositionLUT[0]];
height = player->pos[0];
height -= shell->pos[0];
temp_f2 = player->pos[2];
temp_f2 -= shell->pos[2];
if (((height * height) + (temp_f2 * temp_f2)) < 40000.0f) {
shell->state = BLUE_SHELL_TARGET_ELIMINATED;
}
break;
case 9:
func_802B3E7C(shell, &gPlayers[shell->targetPlayer]);
break;
default:
break;
shell->pos[0] += shell->velocity[0];
shell->pos[1] += shell->velocity[1];
shell->pos[2] += shell->velocity[2];
actor_terrain_collision(&shell->unk30, 4.0f, shell->pos[0], shell->pos[1], shell->pos[2], origPos[0],
origPos[1], origPos[2]);
func_802B4E30((struct Actor*) shell);
func_802B4104(shell);
break;
case RED_SHELL_LOCK_ON:
func_802B3E7C(shell, &gPlayers[shell->targetPlayer]);
break;
case TRIPLE_GREEN_SHELL:
func_802B3B44(shell);
if (shell->someTimer == 0) {
if ((shell->flags & 0xF) == 0) {
destroy_destructable_actor((struct Actor*) shell);
} else {
shell->someTimer -= 1;
}
}
break;
case GREEN_SHELL_HIT_A_RACER:
func_802B3B44(shell);
player = &gPlayers[shell->targetPlayer];
height = player->pos[0];
height -= shell->pos[0];
temp_f2 = player->pos[2];
temp_f2 -= shell->pos[2];
if (((height * height) + (temp_f2 * temp_f2)) < 40000.0f) {
shell->state = RED_SHELL_LOCK_ON;
}
break;
case TRIPLE_RED_SHELL:
player = &gPlayers[shell->playerId];
parent = (TripleShellParent*) &gActorList[shell->parentIndex];
if (parent->type != ACTOR_TRIPLE_RED_SHELL) {
destroy_destructable_actor((struct Actor*) shell);
} else {
shell->rotAngle += parent->rotVelocity;
somePosVel[0] = sins(shell->rotAngle) * 8.0f;
somePosVel[1] = shell->boundingBoxSize - player->boundingBoxSize;
somePosVel[2] = coss(shell->rotAngle) * 8.0f;
mtxf_translate_vec3f_mat3(somePosVel, player->orientationMatrix);
origPos[0] = shell->pos[0];
origPos[1] = shell->pos[1];
origPos[2] = shell->pos[2];
shell->pos[0] = player->pos[0] + somePosVel[0];
shell->pos[1] = player->pos[1] + somePosVel[1];
shell->pos[2] = player->pos[2] + somePosVel[2];
actor_terrain_collision(&shell->unk30, 4.0f, shell->pos[0], shell->pos[1], shell->pos[2], origPos[0],
origPos[1], origPos[2]);
func_802B4E30((struct Actor*) shell);
}
break;
case DESTROYED_SHELL:
shell->velocity[1] -= 0.3f;
if (shell->velocity[1] < -5.0f) {
shell->velocity[1] = -5.0f;
}
shell->rotAngle += 0x5B0;
shell->someTimer -= 1;
shell->pos[1] += shell->velocity[1];
if (shell->someTimer == 0) {
destroy_actor((struct Actor*) shell);
}
break;
case BLUE_SHELL_LOCK_ON:
func_802B3B44(shell);
shell->targetPlayer = gPlayerPositionLUT[0];
player = &gPlayers[gPlayerPositionLUT[0]];
height = player->pos[0];
height -= shell->pos[0];
temp_f2 = player->pos[2];
temp_f2 -= shell->pos[2];
if (((height * height) + (temp_f2 * temp_f2)) < 40000.0f) {
shell->state = BLUE_SHELL_TARGET_ELIMINATED;
}
break;
case 9:
func_802B3E7C(shell, &gPlayers[shell->targetPlayer]);
break;
default:
break;
}
}

View File

@ -12,43 +12,46 @@
* @param arg0
* @param arg1
*/
void render_actor_box_truck(Camera *arg0, struct Actor *arg1) {
void render_actor_box_truck(Camera* arg0, struct Actor* arg1) {
UNUSED s32 pad[6];
Mat4 spD8;
UNUSED s32 pad2[32];
f32 temp_f0 = is_within_render_distance(arg0->pos, arg1->pos, arg0->rot[1], 2500.0f, gCameraZoom[arg0 - camera1], 9000000.0f);
if (temp_f0 < 0.0f) { return; }
f32 temp_f0 =
is_within_render_distance(arg0->pos, arg1->pos, arg0->rot[1], 2500.0f, gCameraZoom[arg0 - camera1], 9000000.0f);
if (temp_f0 < 0.0f) {
return;
}
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
mtxf_pos_rotation_xyz(spD8, arg1->pos, arg1->rot);
if (render_set_position(spD8, 0) != 0) {
mtxf_pos_rotation_xyz(spD8, arg1->pos, arg1->rot);
if (render_set_position(spD8, 0) != 0) {
switch(arg1->state) {
case 0:
gSPDisplayList(gDisplayListHead++, d_course_toads_turnpike_dl_23858);
break;
case 1:
gSPDisplayList(gDisplayListHead++, d_course_toads_turnpike_dl_238A0);
break;
case 2:
gSPDisplayList(gDisplayListHead++, d_course_toads_turnpike_dl_238E8);
break;
}
switch (arg1->state) {
case 0:
gSPDisplayList(gDisplayListHead++, &d_course_toads_turnpike_dl_23858);
break;
case 1:
gSPDisplayList(gDisplayListHead++, &d_course_toads_turnpike_dl_238A0);
break;
case 2:
gSPDisplayList(gDisplayListHead++, &d_course_toads_turnpike_dl_238E8);
break;
}
if (gActiveScreenMode == SCREEN_MODE_1P) {
if (temp_f0 < 160000.0f) {
gSPDisplayList(gDisplayListHead++, toads_turnpike_dl_0);
} else if (temp_f0 < 640000.0f) {
gSPDisplayList(gDisplayListHead++, toads_turnpike_dl_1);
} else {
gSPDisplayList(gDisplayListHead++, toads_turnpike_dl_2);
}
} else if (temp_f0 < 160000.0f) {
gSPDisplayList(gDisplayListHead++, toads_turnpike_dl_1);
if (gActiveScreenMode == SCREEN_MODE_1P) {
if (temp_f0 < 160000.0f) {
gSPDisplayList(gDisplayListHead++, &toads_turnpike_dl_0);
} else if (temp_f0 < 640000.0f) {
gSPDisplayList(gDisplayListHead++, &toads_turnpike_dl_1);
} else {
gSPDisplayList(gDisplayListHead++, toads_turnpike_dl_2);
}
} else if (temp_f0 < 160000.0f) {
gSPDisplayList(gDisplayListHead++, &toads_turnpike_dl_1);
} else {
gSPDisplayList(gDisplayListHead++, &toads_turnpike_dl_2);
}
}
}

View File

@ -7,22 +7,22 @@
* @brief Renders the car actor.
* Actor used in Toad's Turnpike.
* His update are made in vehicle.
*
* @param arg0
* @param arg1
*
* @param arg0
* @param arg1
*/
void render_actor_car(Camera *arg0, struct Actor *arg1) {
void render_actor_car(Camera* arg0, struct Actor* arg1) {
UNUSED s32 pad[6];
Mat4 spC8;
UNUSED s32 pad2[32];
f32 temp_f0 = is_within_render_distance(arg0->pos,arg1->pos, arg0->rot[1], 2500.0f, gCameraZoom[arg0 - camera1], 9000000.0f);
f32 temp_f0 =
is_within_render_distance(arg0->pos, arg1->pos, arg0->rot[1], 2500.0f, gCameraZoom[arg0 - camera1], 9000000.0f);
if (!(temp_f0 < 0.0f)) {
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
mtxf_pos_rotation_xyz(spC8, arg1->pos, arg1->rot);
mtxf_scale(spC8, 0.1f);
if (render_set_position(spC8, 0) != 0) {

View File

@ -12,8 +12,11 @@
* @param arg1
* @param arg2
*/
void render_actor_cow(Camera *camera, Mat4 arg1, struct Actor *arg2) {
if (is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 4000000.0f) < 0) { return; }
void render_actor_cow(Camera* camera, Mat4 arg1, struct Actor* arg2) {
if (is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1],
4000000.0f) < 0) {
return;
}
arg1[3][0] = arg2->pos[0];
arg1[3][1] = arg2->pos[1];
@ -21,21 +24,21 @@ void render_actor_cow(Camera *camera, Mat4 arg1, struct Actor *arg2) {
if (render_set_position(arg1, 0) != 0) {
switch (arg2->state) {
case 0:
gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_cow1);
break;
case 1:
gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_cow2);
break;
case 2:
gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_cow3);
break;
case 3:
gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_cow4);
break;
case 4:
gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_cow5);
break;
case 0:
gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_cow1);
break;
case 1:
gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_cow2);
break;
case 2:
gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_cow3);
break;
case 3:
gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_cow4);
break;
case 4:
gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_cow5);
break;
}
}
}

View File

@ -9,7 +9,7 @@
* @param camera
* @param fakeItemBox
*/
void render_actor_fake_item_box(Camera *camera, struct FakeItemBox *fakeItemBox) {
void render_actor_fake_item_box(Camera* camera, struct FakeItemBox* fakeItemBox) {
Vec3s someRot;
UNUSED s32 pad[3];
Vec3f someVec;
@ -24,20 +24,21 @@ void render_actor_fake_item_box(Camera *camera, struct FakeItemBox *fakeItemBox)
f32 temp_f2_2;
f32 someMultiplier;
if (is_within_render_distance(camera->pos, fakeItemBox->pos, camera->rot[1], 2500.0f, gCameraZoom[camera - camera1], 1000000.0f) < 0) {
actor_not_rendered(camera, (struct Actor *) fakeItemBox);
if (is_within_render_distance(camera->pos, fakeItemBox->pos, camera->rot[1], 2500.0f, gCameraZoom[camera - camera1],
1000000.0f) < 0) {
actor_not_rendered(camera, (struct Actor*) fakeItemBox);
return;
}
if (((f32) gCourseMaxY + 800.0f) < fakeItemBox->pos[1]) {
actor_not_rendered(camera, (struct Actor *) fakeItemBox);
actor_not_rendered(camera, (struct Actor*) fakeItemBox);
return;
}
if (fakeItemBox->pos[1] < ((f32) gCourseMinY - 800.0f)) {
actor_not_rendered(camera, (struct Actor *) fakeItemBox);
actor_not_rendered(camera, (struct Actor*) fakeItemBox);
return;
}
actor_rendered(camera, (struct Actor *) fakeItemBox);
actor_rendered(camera, (struct Actor*) fakeItemBox);
someRot[0] = 0;
someRot[1] = fakeItemBox->rot[1];
someRot[2] = 0;
@ -45,13 +46,17 @@ void render_actor_fake_item_box(Camera *camera, struct FakeItemBox *fakeItemBox)
mtxf_scale(someMatrix2, fakeItemBox->sizeScaling);
if (fakeItemBox->state != 2) {
if (!render_set_position(someMatrix2, 0)) { return; }
if (!render_set_position(someMatrix2, 0)) {
return;
}
gSPDisplayList(gDisplayListHead++, common_model_fake_itembox);
mtxf_pos_rotation_xyz(someMatrix2, fakeItemBox->pos, fakeItemBox->rot);
mtxf_scale(someMatrix2, fakeItemBox->sizeScaling);
if (!render_set_position(someMatrix2, 0)) { return; }
if (!render_set_position(someMatrix2, 0)) {
return;
}
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA);
@ -91,7 +96,9 @@ void render_actor_fake_item_box(Camera *camera, struct FakeItemBox *fakeItemBox)
someVec[2] = thing;
add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec);
if (!render_set_position(someMatrix3, 0)) { return; }
if (!render_set_position(someMatrix3, 0)) {
return;
}
gSPDisplayList(gDisplayListHead++, D_0D003158);
temp_f2_2 = 0.8f * thing;
@ -101,7 +108,9 @@ void render_actor_fake_item_box(Camera *camera, struct FakeItemBox *fakeItemBox)
someVec[2] = temp_f12;
add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec);
if (!render_set_position(someMatrix3, 0)) { return; }
if (!render_set_position(someMatrix3, 0)) {
return;
}
gSPDisplayList(gDisplayListHead++, D_0D0031B8);
temp_f0_2 = -0.5f * thing;
@ -110,7 +119,9 @@ void render_actor_fake_item_box(Camera *camera, struct FakeItemBox *fakeItemBox)
someVec[2] = temp_f0_2;
add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec);
if (!render_set_position(someMatrix3, 0)) { return; }
if (!render_set_position(someMatrix3, 0)) {
return;
}
gSPDisplayList(gDisplayListHead++, D_0D003128);
if (!(fakeItemBox->someTimer & 1)) {
@ -123,7 +134,9 @@ void render_actor_fake_item_box(Camera *camera, struct FakeItemBox *fakeItemBox)
someVec[2] = -1.0f * thing;
add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec);
if (!render_set_position(someMatrix3, 0)) { return; }
if (!render_set_position(someMatrix3, 0)) {
return;
}
gSPDisplayList(gDisplayListHead++, D_0D0031E8);
temp_f0_3 = -0.8f * thing;
@ -132,7 +145,9 @@ void render_actor_fake_item_box(Camera *camera, struct FakeItemBox *fakeItemBox)
someVec[2] = temp_f0_2;
add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec);
if (!render_set_position(someMatrix3, 0)) { return; }
if (!render_set_position(someMatrix3, 0)) {
return;
}
gSPDisplayList(gDisplayListHead++, D_0D003188);
someVec[0] = temp_f0_3;
@ -140,7 +155,9 @@ void render_actor_fake_item_box(Camera *camera, struct FakeItemBox *fakeItemBox)
someVec[2] = temp_f12;
add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec);
if (!render_set_position(someMatrix3, 0)) { return; }
if (!render_set_position(someMatrix3, 0)) {
return;
}
gSPDisplayList(gDisplayListHead++, D_0D0030F8);
gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);

View File

@ -3,13 +3,13 @@
/**
* @brief Updates the fake item box actor.
*
* @param fake_item_box
*
* @param fake_item_box
*/
void update_actor_fake_item_box(struct FakeItemBox *fake_item_box) {
void update_actor_fake_item_box(struct FakeItemBox* fake_item_box) {
u32 temp_v1 = fake_item_box->playerId;
Player *temp_v0_4 = &gPlayers[temp_v1];
struct Controller *temp_v1_3;
Player* temp_v0_4 = &gPlayers[temp_v1];
struct Controller* temp_v1_3;
UNUSED s32 pad[7];
f32 temp_f2_2;
@ -18,7 +18,7 @@ void update_actor_fake_item_box(struct FakeItemBox *fake_item_box) {
f32 temp_f18;
UNUSED s32 pad2[3];
switch(fake_item_box->state) {
switch (fake_item_box->state) {
case 0:
fake_item_box->boundingBoxSize = fake_item_box->sizeScaling * 5.5f;
fake_item_box->rot[0] -= 0xB6;
@ -36,8 +36,9 @@ void update_actor_fake_item_box(struct FakeItemBox *fake_item_box) {
fake_item_box->pos[0] = temp_v0_4->pos[0] - temp_f14;
fake_item_box->pos[1] = (temp_v0_4->pos[1] - temp_f16) - 1.0f;
fake_item_box->pos[2] = temp_v0_4->pos[2] - temp_f18;
check_bounding_collision(&fake_item_box->unk30, fake_item_box->boundingBoxSize, fake_item_box->pos[0], fake_item_box->pos[1], fake_item_box->pos[2]);
func_802B4E30((struct Actor *)fake_item_box);
check_bounding_collision(&fake_item_box->unk30, fake_item_box->boundingBoxSize, fake_item_box->pos[0],
fake_item_box->pos[1], fake_item_box->pos[2]);
func_802B4E30((struct Actor*) fake_item_box);
temp_v1_3 = &gControllers[temp_v1];
if ((temp_v0_4->type & 0x4000) != 0) {
@ -45,7 +46,7 @@ void update_actor_fake_item_box(struct FakeItemBox *fake_item_box) {
temp_v1_3->buttonDepressed &= 0xDFFF;
func_802A1064(fake_item_box);
temp_v0_4->soundEffects &= 0xFFFBFFFF;
func_800C9060((u8)(temp_v0_4 - gPlayerOne), SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x12));
func_800C9060((u8) (temp_v0_4 - gPlayerOne), SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x12));
}
}
break;
@ -77,7 +78,7 @@ void update_actor_fake_item_box(struct FakeItemBox *fake_item_box) {
case 2:
if ((fake_item_box->someTimer >= 0x14) || (fake_item_box->someTimer < 0)) {
destroy_actor((struct Actor *) fake_item_box);
destroy_actor((struct Actor*) fake_item_box);
} else {
fake_item_box->someTimer++;
fake_item_box->rot[0] += 0x444;
@ -86,7 +87,7 @@ void update_actor_fake_item_box(struct FakeItemBox *fake_item_box) {
}
break;
default:
destroy_actor((struct Actor *) fake_item_box);
break;
destroy_actor((struct Actor*) fake_item_box);
break;
}
}

View File

@ -5,22 +5,27 @@
/**
* @brief Renders the falling rock actor.
* Actor used in Choco Mountain.
*
* @param camera
* @param rock
*
* @param camera
* @param rock
*/
void render_actor_falling_rock(Camera *camera, struct FallingRock *rock) {
void render_actor_falling_rock(Camera* camera, struct FallingRock* rock) {
Vec3s sp98;
Vec3f sp8C;
Mat4 sp4C;
f32 height;
UNUSED s32 pad[4];
if (rock->respawnTimer != 0) { return; }
if (rock->respawnTimer != 0) {
return;
}
height = is_within_render_distance(camera->pos, rock->pos, camera->rot[1], 400.0f, gCameraZoom[camera - camera1], 4000000.0f);
height = is_within_render_distance(camera->pos, rock->pos, camera->rot[1], 400.0f, gCameraZoom[camera - camera1],
4000000.0f);
if (height < 0.0f) { return; }
if (height < 0.0f) {
return;
}
if (height < 250000.0f) {
@ -43,7 +48,7 @@ void render_actor_falling_rock(Camera *camera, struct FallingRock *rock) {
if (render_set_position(sp4C, 0) == 0) {
return;
}
//gSPDisplayList(gDisplayListHead++, d_course_choco_mountain_dl_falling_rock);
// gSPDisplayList(gDisplayListHead++, d_course_choco_mountain_dl_falling_rock);
//! @todo: Placeholder DLs weird vtx issues
gSPSetGeometryMode(gDisplayListHead++, G_LIGHTING);
gDPSetCycleType(gDisplayListHead++, G_CYC_2CYCLE);
@ -55,11 +60,13 @@ void render_actor_falling_rock(Camera *camera, struct FallingRock *rock) {
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
gDPPipeSync(gDisplayListHead++);
gDPTileSync(gDisplayListHead++);
gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD);
gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0,
G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD);
gDPSetTileSize(gDisplayListHead++, G_TX_RENDERTILE, 0, 0, 0x007C, 0x007C);
gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, d_course_choco_mountain_wall_texture);
gDPTileSync(gDisplayListHead++);
gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD);
gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP,
G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD);
gDPLoadSync(gDisplayListHead++);
gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 1023, 256);
gSPVertex(gDisplayListHead++, d_course_choco_mountain_falling_rock_model, 15, 0);
@ -89,11 +96,13 @@ void render_actor_falling_rock(Camera *camera, struct FallingRock *rock) {
gSP1Triangle(gDisplayListHead++, 2, 8, 9, 0);
gSP1Triangle(gDisplayListHead++, 3, 10, 11, 0);
gDPTileSync(gDisplayListHead++);
gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, G_TX_MIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_MIRROR | G_TX_WRAP, 5, G_TX_NOLOD);
gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, G_TX_MIRROR | G_TX_WRAP,
5, G_TX_NOLOD, G_TX_MIRROR | G_TX_WRAP, 5, G_TX_NOLOD);
gDPSetTileSize(gDisplayListHead++, G_TX_RENDERTILE, 0, 0, 0x007C, 0x007C);
gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, d_course_choco_mountain_rock_texture);
gDPTileSync(gDisplayListHead++);
gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD);
gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP,
G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD);
gDPLoadSync(gDisplayListHead++);
gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 1023, 256);
gSPVertex(gDisplayListHead++, d_course_choco_mountain_6006EC8, 3, 0);

View File

@ -3,9 +3,9 @@
#include <main.h>
#include <assets/choco_mountain_data.h>
void func_8029CF0C(struct ActorSpawnData *spawnData, struct FallingRock *rock) {
struct ActorSpawnData *temp_v0 = (struct ActorSpawnData *) LOAD_ASSET(spawnData);
Vec3s sp24 = {60, 120, 180};
void func_8029CF0C(struct ActorSpawnData* spawnData, struct FallingRock* rock) {
struct ActorSpawnData* temp_v0 = (struct ActorSpawnData*) LOAD_ASSET(spawnData);
Vec3s sp24 = { 60, 120, 180 };
rock->respawnTimer = sp24[rock->unk_06]; // * 2
rock->pos[0] = (f32) temp_v0[rock->unk_06].pos[0] * gCourseDirection;
rock->pos[1] = (f32) temp_v0[rock->unk_06].pos[1] + 10.0f;
@ -20,10 +20,9 @@ void func_8029CF0C(struct ActorSpawnData *spawnData, struct FallingRock *rock) {
*
* @param spawnData
*/
void spawn_falling_rocks(struct ActorSpawnData *spawnData) {
// Casting this to prevent warning does not work.
struct ActorSpawnData *temp_s0 = (struct ActorSpawnData *) LOAD_ASSET(spawnData);
struct FallingRock *temp_v1;
void spawn_falling_rocks(struct ActorSpawnData* spawnData) {
struct ActorSpawnData* temp_s0 = (struct ActorSpawnData*) LOAD_ASSET(spawnData);
struct FallingRock* temp_v1;
Vec3f startingPos;
Vec3f startingVelocity;
Vec3s startingRot;
@ -36,10 +35,10 @@ void spawn_falling_rocks(struct ActorSpawnData *spawnData) {
vec3f_set(startingVelocity, 0, 0, 0);
vec3s_set(startingRot, 0, 0, 0);
temp = add_actor_to_empty_slot(startingPos, startingRot, startingVelocity, ACTOR_FALLING_ROCK);
temp_v1 = (struct FallingRock *) &gActorList[temp];
temp_v1 = (struct FallingRock*) &gActorList[temp];
temp_v1->unk_06 = temp_s0->someId;
func_802AAAAC((Collision *) &temp_v1->unk30);
func_802AAAAC((Collision*) &temp_v1->unk30);
temp_s0++;
}
}
@ -50,7 +49,7 @@ void spawn_falling_rocks(struct ActorSpawnData *spawnData) {
*
* @param rock
*/
void update_actor_falling_rocks(struct FallingRock *rock) {
void update_actor_falling_rocks(struct FallingRock* rock) {
Vec3f unkVec;
f32 pad0;
f32 pad1;
@ -91,8 +90,7 @@ void update_actor_falling_rocks(struct FallingRock *rock) {
if (unkVec[1] == 0.0f) {
rock->velocity[1] *= -1.2f;
return;
}
else {
} else {
unkVec[0] = -rock->unk30.unk48[0];
unkVec[2] = -rock->unk30.unk48[2];
rock->pos[0] += unkVec[0] * rock->unk30.surfaceDistance[0];
@ -108,8 +106,7 @@ void update_actor_falling_rocks(struct FallingRock *rock) {
unkVec[1] = -rock->unk30.unk54[1];
if (unkVec[1] == 0.0f) {
rock->velocity[1] *= -1.2f;
}
else {
} else {
unkVec[0] = -rock->unk30.unk54[0];
unkVec[2] = -rock->unk30.unk54[2];
rock->pos[0] += unkVec[0] * rock->unk30.surfaceDistance[1];

View File

@ -10,7 +10,7 @@
* @param matrix
* @param shell
*/
void render_actor_green_shell(Camera *camera, Mat4 matrix, struct ShellActor *shell) {
void render_actor_green_shell(Camera* camera, Mat4 matrix, struct ShellActor* shell) {
gDPLoadTLUT_pal256(gDisplayListHead++, common_tlut_green_shell); // set texture
render_actor_shell(camera, matrix, shell);
}

View File

@ -6,18 +6,18 @@
/**
* @brief Updates the green shell actor.
*
* @param shell
*
* @param shell
*/
void update_actor_green_shell(struct ShellActor *shell) {
Player *player;
void update_actor_green_shell(struct ShellActor* shell) {
Player* player;
UNUSED f32 pad9;
UNUSED f32 padA;
Vec3f somePos2;
Vec3f somePosVel;
f32 var_f2;
struct Controller *controller;
TripleShellParent *parent;
struct Controller* controller;
TripleShellParent* parent;
f32 height;
f32 z;
UNUSED f32 pad2;
@ -31,8 +31,9 @@ void update_actor_green_shell(struct ShellActor *shell) {
height = shell->pos[0];
y = shell->pos[1];
z = shell->pos[2];
if ((z < gCourseMinZ) || (gCourseMaxZ < z) || (height < gCourseMinX) || (gCourseMaxX < height) || (y < gCourseMinY)) {
destroy_destructable_actor((struct Actor *) shell);
if ((z < gCourseMinZ) || (gCourseMaxZ < z) || (height < gCourseMinX) || (gCourseMaxX < height) ||
(y < gCourseMinY)) {
destroy_destructable_actor((struct Actor*) shell);
}
shell->rotVelocity += 0x71C;
switch (shell->state) {
@ -71,8 +72,9 @@ void update_actor_green_shell(struct ShellActor *shell) {
shell->velocity[2] = somePosVel[2];
shell->state = 2;
func_800C9060(shell->playerId, SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x04));
func_800C90F4(shell->playerId, (player->characterId * 0x10) + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x00));
add_green_shell_in_unexpired_actor_list((struct Actor*)shell - gActorList);
func_800C90F4(shell->playerId,
(player->characterId * 0x10) + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x00));
add_green_shell_in_unexpired_actor_list((struct Actor*) shell - gActorList);
return;
} else {
shell->state = 1;
@ -93,8 +95,9 @@ void update_actor_green_shell(struct ShellActor *shell) {
shell->state = 2;
shell->someTimer = 0x001E;
func_800C9060(shell->playerId, SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x04));
func_800C90F4(shell->playerId, (player->characterId * 0x10) + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x00));
add_green_shell_in_unexpired_actor_list((struct Actor*)shell - gActorList);
func_800C90F4(shell->playerId,
(player->characterId * 0x10) + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x00));
add_green_shell_in_unexpired_actor_list((struct Actor*) shell - gActorList);
}
} else {
shell->rotAngle += 0xE38;
@ -102,8 +105,9 @@ void update_actor_green_shell(struct ShellActor *shell) {
shell->state = 2;
shell->someTimer = 0x001E;
func_800C9060(shell->playerId, SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x04));
func_800C90F4(shell->playerId, (player->characterId * 0x10) + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x00));
add_green_shell_in_unexpired_actor_list((struct Actor*)shell - gActorList);
func_800C90F4(shell->playerId,
(player->characterId * 0x10) + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x00));
add_green_shell_in_unexpired_actor_list((struct Actor*) shell - gActorList);
}
}
if (shell->state == 2) {
@ -145,8 +149,9 @@ void update_actor_green_shell(struct ShellActor *shell) {
shell->pos[0] += shell->velocity[0];
shell->pos[1] += shell->velocity[1];
shell->pos[2] += shell->velocity[2];
actor_terrain_collision(&shell->unk30, 4.0f, shell->pos[0], shell->pos[1], shell->pos[2], somePos2[0], somePos2[1], somePos2[2]);
func_802B4E30((struct Actor *) shell);
actor_terrain_collision(&shell->unk30, 4.0f, shell->pos[0], shell->pos[1], shell->pos[2], somePos2[0],
somePos2[1], somePos2[2]);
func_802B4E30((struct Actor*) shell);
if ((shell->unk30.surfaceDistance[0] < 0.0f) || (shell->unk30.surfaceDistance[1] < 0.0f)) {
shell_collision(&shell->unk30, shell->velocity);
func_800C98B8(shell->pos, shell->velocity, SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x54));
@ -155,9 +160,9 @@ void update_actor_green_shell(struct ShellActor *shell) {
break;
case TRIPLE_GREEN_SHELL:
player = &gPlayers[shell->playerId];
parent = (TripleShellParent *) &gActorList[shell->parentIndex];
parent = (TripleShellParent*) &gActorList[shell->parentIndex];
if (parent->type != ACTOR_TRIPLE_GREEN_SHELL) {
destroy_destructable_actor((struct Actor *) shell);
destroy_destructable_actor((struct Actor*) shell);
} else {
shell->rotAngle += parent->rotVelocity;
somePosVel[0] = sins(shell->rotAngle) * 8.0f;
@ -170,8 +175,9 @@ void update_actor_green_shell(struct ShellActor *shell) {
shell->pos[0] = player->pos[0] + somePosVel[0];
shell->pos[1] = player->pos[1] + somePosVel[1];
shell->pos[2] = player->pos[2] + somePosVel[2];
actor_terrain_collision(&shell->unk30, 4.0f, shell->pos[0], shell->pos[1], shell->pos[2], somePos2[0], somePos2[1], somePos2[2]);
func_802B4E30((struct Actor *) shell);
actor_terrain_collision(&shell->unk30, 4.0f, shell->pos[0], shell->pos[1], shell->pos[2], somePos2[0],
somePos2[1], somePos2[2]);
func_802B4E30((struct Actor*) shell);
}
break;
case GREEN_SHELL_HIT_A_RACER:
@ -184,7 +190,7 @@ void update_actor_green_shell(struct ShellActor *shell) {
shell->someTimer -= 1;
shell->pos[1] += shell->velocity[1];
if (shell->someTimer == 0) {
destroy_actor((struct Actor *) shell);
destroy_actor((struct Actor*) shell);
}
break;
default:

View File

@ -4,11 +4,11 @@
/**
* @brief Renders the item box actor.
*
* @param camera
* @param item_box
*
* @param camera
* @param item_box
*/
void render_actor_item_box(Camera *camera, struct ItemBox *item_box) {
void render_actor_item_box(Camera* camera, struct ItemBox* item_box) {
UNUSED s32 pad[2];
Vec3f someVec1;
Vec3f someVec2;
@ -26,7 +26,8 @@ void render_actor_item_box(Camera *camera, struct ItemBox *item_box) {
f32 temp_f2_2;
f32 someMultiplier;
temp_f0 = is_within_render_distance(camera->pos, item_box->pos, camera->rot[1], 0.0f, gCameraZoom[camera - camera1], 4000000.0f);
temp_f0 = is_within_render_distance(camera->pos, item_box->pos, camera->rot[1], 0.0f, gCameraZoom[camera - camera1],
4000000.0f);
if (!(temp_f0 < 0.0f) && !(600000.0f < temp_f0)) {
if ((item_box->state == 2) && (temp_f0 < 100000.0f)) {
someRot[0] = 0;
@ -37,28 +38,36 @@ void render_actor_item_box(Camera *camera, struct ItemBox *item_box) {
someVec2[2] = item_box->pos[2];
mtxf_pos_rotation_xyz(someMatrix1, someVec2, someRot);
if (!render_set_position(someMatrix1, 0)) { return; }
if (!render_set_position(someMatrix1, 0)) {
return;
}
gSPDisplayList(gDisplayListHead++, D_0D002EE8);
someRot[1] = item_box->rot[1] * 2;
someVec2[1] = item_box->pos[1];
mtxf_pos_rotation_xyz(someMatrix1, someVec2, someRot);
if (!render_set_position(someMatrix1, 0)) { return; }
if (!render_set_position(someMatrix1, 0)) {
return;
}
gSPDisplayList(gDisplayListHead++, itemBoxQuestionMarkModel);
}
if (item_box->state == 5) {
mtxf_pos_rotation_xyz(someMatrix1, item_box->pos, item_box->rot);
if (!render_set_position(someMatrix1, 0)) { return; }
if (!render_set_position(someMatrix1, 0)) {
return;
}
gSPDisplayList(gDisplayListHead++, itemBoxQuestionMarkModel);
}
if (item_box->state != 3) {
mtxf_pos_rotation_xyz(someMatrix1, item_box->pos, item_box->rot);
if (!render_set_position(someMatrix1, 0)) { return; }
if (!render_set_position(someMatrix1, 0)) {
return;
}
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA);
@ -99,7 +108,9 @@ void render_actor_item_box(Camera *camera, struct ItemBox *item_box) {
someVec1[2] = thing;
add_translate_mat4_vec3f(someMatrix1, someMatrix2, someVec1);
if (!render_set_position(someMatrix2, 0)) { return; }
if (!render_set_position(someMatrix2, 0)) {
return;
}
gSPDisplayList(gDisplayListHead++, D_0D003158);
temp_f2_2 = 0.8f * thing;
@ -109,7 +120,9 @@ void render_actor_item_box(Camera *camera, struct ItemBox *item_box) {
someVec1[2] = temp_f12;
add_translate_mat4_vec3f(someMatrix1, someMatrix2, someVec1);
if (!render_set_position(someMatrix2, 0)) { return; }
if (!render_set_position(someMatrix2, 0)) {
return;
}
gSPDisplayList(gDisplayListHead++, D_0D0031B8);
temp_f0_2 = -0.5f * thing;
@ -118,7 +131,9 @@ void render_actor_item_box(Camera *camera, struct ItemBox *item_box) {
someVec1[2] = temp_f0_2;
add_translate_mat4_vec3f(someMatrix1, someMatrix2, someVec1);
if (!render_set_position(someMatrix2, 0)) { return; }
if (!render_set_position(someMatrix2, 0)) {
return;
}
gSPDisplayList(gDisplayListHead++, D_0D003128);
if (!(item_box->someTimer & 1)) {
@ -131,7 +146,9 @@ void render_actor_item_box(Camera *camera, struct ItemBox *item_box) {
someVec1[2] = -1.0f * thing;
add_translate_mat4_vec3f(someMatrix1, someMatrix2, someVec1);
if (!render_set_position(someMatrix2, 0)) { return; }
if (!render_set_position(someMatrix2, 0)) {
return;
}
gSPDisplayList(gDisplayListHead++, D_0D0031E8);
temp_f0_3 = -0.8f * thing;
@ -140,7 +157,9 @@ void render_actor_item_box(Camera *camera, struct ItemBox *item_box) {
someVec1[2] = temp_f0_2;
add_translate_mat4_vec3f(someMatrix1, someMatrix2, someVec1);
if (!render_set_position(someMatrix2, 0)) { return; }
if (!render_set_position(someMatrix2, 0)) {
return;
}
gSPDisplayList(gDisplayListHead++, D_0D003188);
someVec1[0] = temp_f0_3;
@ -148,7 +167,9 @@ void render_actor_item_box(Camera *camera, struct ItemBox *item_box) {
someVec1[2] = temp_f12;
add_translate_mat4_vec3f(someMatrix1, someMatrix2, someVec1);
if (!render_set_position(someMatrix2, 0)) { return; }
if (!render_set_position(someMatrix2, 0)) {
return;
}
gSPDisplayList(gDisplayListHead++, D_0D0030F8);
gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);

View File

@ -4,11 +4,11 @@
* @brief Updates the item box under the hot air balloon object.
* It used in Luigi Raceway.
* (here it's just update the rotation of the item box not the position, for the position it's in object)
*
* @param itemBox
*
* @param itemBox
*/
void update_actor_item_box_hot_air_balloon(struct ItemBox *itemBox) {
switch(itemBox->state) {
void update_actor_item_box_hot_air_balloon(struct ItemBox* itemBox) {
switch (itemBox->state) {
case 5:
itemBox->rot[0] += 0xB6;
itemBox->rot[1] -= 0x16C;
@ -30,10 +30,10 @@ void update_actor_item_box_hot_air_balloon(struct ItemBox *itemBox) {
/**
* @brief Updates the item box actor.
*
* @param itemBox
*
* @param itemBox
*/
void update_actor_item_box(struct ItemBox *itemBox) {
void update_actor_item_box(struct ItemBox* itemBox) {
switch (itemBox->state) {
case 0:
itemBox->state = 1;

View File

@ -1,7 +1,7 @@
#include <actors.h>
#include <libultra/gbi.h>
#include <main.h>
//#include <assets/dks_jungle_parkway_data.h>
// #include <assets/dks_jungle_parkway_data.h>
/**
* @brief Renders the kiwano fruit actor.
@ -11,22 +11,26 @@
* @param arg1
* @param actor
*/
void render_actor_kiwano_fruit(UNUSED Camera *camera, Mat4 arg1, struct Actor *actor) {
void render_actor_kiwano_fruit(UNUSED Camera* camera, Mat4 arg1, struct Actor* actor) {
uintptr_t addr;
s32 maxObjectsReached;
if (actor->state == 0) { return; }
if (actor->state == 0) {
return;
}
arg1[3][0] = actor->pos[0];
arg1[3][1] = actor->pos[1];
arg1[3][2] = actor->pos[2];
maxObjectsReached = render_set_position(arg1, 0) == 0;
if (maxObjectsReached) { return; }
if (maxObjectsReached) {
return;
}
addr = segmented_texture_to_virtual((actor->rot[0] << 0xA) + 0x03009000);
gDPLoadTextureBlock(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(addr),
G_IM_FMT_CI, G_IM_SIZ_8b, 32, 32, 0, G_TX_NOMIRROR | G_TX_CLAMP,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
gDPLoadTextureBlock(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(addr), G_IM_FMT_CI, G_IM_SIZ_8b, 32, 32, 0,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
G_TX_NOLOD);
gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_dl_kiwano_fruit);
}

View File

@ -6,11 +6,11 @@
/**
* @brief Updates the kiwano fruit actor.
* Actor used in DK's Jungle Parkway.
*
* @param fruit
*
* @param fruit
*/
void update_actor_kiwano_fruit(struct KiwanoFruit *fruit) {
Player *player;
void update_actor_kiwano_fruit(struct KiwanoFruit* fruit) {
Player* player;
f32 temp_f2;
f32 temp_f16;
f32 temp_f14;
@ -22,59 +22,59 @@ void update_actor_kiwano_fruit(struct KiwanoFruit *fruit) {
fruit->state = 0;
return;
}
switch (fruit->state) { /* irregular */
case 0:
if ((get_surface_type(player->collision.meshIndexZX) & 0xFF) != GRASS) {
return;
}
fruit->state = 1;
fruit->velocity[0] = 80.0f;
case 1:
nearestWaypoint = gNearestWaypointByPlayerId[(u16)(player - gPlayerOne)];
temp_f2 = player->pos[0] - D_80164490[nearestWaypoint].posX;
temp_f16 = player->pos[1] - D_80164490[nearestWaypoint].posY;
temp_f14 = player->pos[2] - D_80164490[nearestWaypoint].posZ;
temp_f12 = fruit->velocity[0] / sqrtf((temp_f2 * temp_f2) + (temp_f16 * temp_f16) + (temp_f14 * temp_f14));
temp_f2 *= temp_f12;
temp_f16 *= temp_f12;
temp_f14 *= temp_f12;
fruit->pos[0] = player->pos[0] + temp_f2;
fruit->pos[1] = player->pos[1] + temp_f16;
fruit->pos[2] = player->pos[2] + temp_f14;
fruit->velocity[0] -= 2.0f;
if (fruit->velocity[0] <= 0.0f) {
fruit->state = 2;
fruit->bonkTimer = 30.0f;
fruit->velocity[0] = 0.0f;
fruit->velocity[1] = 2.3f;
fruit->velocity[2] = 0.0f;
if ((player->effects & STAR_EFFECT) != 0) {
func_800C9060(player - gPlayerOne, SOUND_ARG_LOAD(0x19, 0x00, 0xA0, 0x52));
} else {
player->effects |= 0x8000;
player->pos[0] -= temp_f2 * 4.0f;
player->pos[2] -= temp_f14 * 4.0f;
player->velocity[0] -= temp_f2 * 0.7f;
player->velocity[2] -= temp_f14 * 0.7f;
func_800C9060(player - gPlayerOne, SOUND_ARG_LOAD(0x19, 0x00, 0x70, 0x18));
if (gModeSelection != GRAND_PRIX) {
D_80162DF8 = 1;
switch (fruit->state) { /* irregular */
case 0:
if ((get_surface_type(player->collision.meshIndexZX) & 0xFF) != GRASS) {
return;
}
fruit->state = 1;
fruit->velocity[0] = 80.0f;
case 1:
nearestWaypoint = gNearestWaypointByPlayerId[(u16) (player - gPlayerOne)];
temp_f2 = player->pos[0] - D_80164490[nearestWaypoint].posX;
temp_f16 = player->pos[1] - D_80164490[nearestWaypoint].posY;
temp_f14 = player->pos[2] - D_80164490[nearestWaypoint].posZ;
temp_f12 = fruit->velocity[0] / sqrtf((temp_f2 * temp_f2) + (temp_f16 * temp_f16) + (temp_f14 * temp_f14));
temp_f2 *= temp_f12;
temp_f16 *= temp_f12;
temp_f14 *= temp_f12;
fruit->pos[0] = player->pos[0] + temp_f2;
fruit->pos[1] = player->pos[1] + temp_f16;
fruit->pos[2] = player->pos[2] + temp_f14;
fruit->velocity[0] -= 2.0f;
if (fruit->velocity[0] <= 0.0f) {
fruit->state = 2;
fruit->bonkTimer = 30.0f;
fruit->velocity[0] = 0.0f;
fruit->velocity[1] = 2.3f;
fruit->velocity[2] = 0.0f;
if ((player->effects & STAR_EFFECT) != 0) {
func_800C9060(player - gPlayerOne, SOUND_ARG_LOAD(0x19, 0x00, 0xA0, 0x52));
} else {
player->effects |= 0x8000;
player->pos[0] -= temp_f2 * 4.0f;
player->pos[2] -= temp_f14 * 4.0f;
player->velocity[0] -= temp_f2 * 0.7f;
player->velocity[2] -= temp_f14 * 0.7f;
func_800C9060(player - gPlayerOne, SOUND_ARG_LOAD(0x19, 0x00, 0x70, 0x18));
if (gModeSelection != GRAND_PRIX) {
D_80162DF8 = 1;
}
}
}
}
break;
case 2:
fruit->velocity[1] -= 0.3f;
fruit->pos[0] += fruit->velocity[0];
fruit->pos[1] += fruit->velocity[1];
fruit->pos[2] += fruit->velocity[2];
fruit->bonkTimer -= 1.0f;
if (fruit->bonkTimer < 0.0f) {
fruit->state = 0;
}
break;
default:
break;
break;
case 2:
fruit->velocity[1] -= 0.3f;
fruit->pos[0] += fruit->velocity[0];
fruit->pos[1] += fruit->velocity[1];
fruit->pos[2] += fruit->velocity[2];
fruit->bonkTimer -= 1.0f;
if (fruit->bonkTimer < 0.0f) {
fruit->state = 0;
}
break;
default:
break;
}
if (fruit->state != 0) {
fruit->animTimer += 1;

View File

@ -5,17 +5,19 @@
/**
* @brief Renders the Mario sign actor.
* Actor used in Mario Raceway.
*
* @param arg0
* @param arg1
* @param arg2
*
* @param arg0
* @param arg1
* @param arg2
*/
void render_actor_mario_sign(Camera *arg0, UNUSED Mat4 arg1, struct Actor *arg2) {
void render_actor_mario_sign(Camera* arg0, UNUSED Mat4 arg1, struct Actor* arg2) {
Mat4 sp40;
f32 unk;
s16 temp = arg2->flags;
if (temp & 0x800) { return; }
if (temp & 0x800) {
return;
}
unk = is_within_render_distance(arg0->pos, arg2->pos, arg0->rot[1], 0, gCameraZoom[arg0 - camera1], 16000000.0f);
if (!(unk < 0.0f)) {

View File

@ -2,10 +2,10 @@
/**
* @brief Updates the Mario sign actor.
*
* @param arg0
*
* @param arg0
*/
void update_actor_mario_sign(struct Actor *arg0) {
void update_actor_mario_sign(struct Actor* arg0) {
if ((arg0->flags & 0x800) == 0) {
if ((arg0->flags & 0x400) != 0) {
arg0->pos[1] += 4.0f;

View File

@ -17,7 +17,7 @@
* @param arg2
* @param pathCounter
*/
void render_actor_paddle_boat(Camera *arg0, struct PaddleWheelBoat *boat, UNUSED Mat4 arg2, u16 pathCounter) {
void render_actor_paddle_boat(Camera* arg0, struct PaddleWheelBoat* boat, UNUSED Mat4 arg2, u16 pathCounter) {
UNUSED s32 pad[3];
Vec3f sp120;
Mat4 spE0;
@ -25,32 +25,37 @@ void render_actor_paddle_boat(Camera *arg0, struct PaddleWheelBoat *boat, UNUSED
Mat4 sp60;
f32 temp;
if ((pathCounter > 20) && (pathCounter < 25)) { return; }
if ((pathCounter > 20) && (pathCounter < 25)) {
return;
}
temp = is_within_render_distance(arg0->pos, boat->pos, arg0->rot[1], 90000.0f, gCameraZoom[arg0 - camera1], 9000000.0f);
temp = is_within_render_distance(arg0->pos, boat->pos, arg0->rot[1], 90000.0f, gCameraZoom[arg0 - camera1],
9000000.0f);
if (temp < 0.0f) { return; }
if (temp < 0.0f) {
return;
}
gSPSetLights1(gDisplayListHead++, D_800DC610[1]);
gSPSetGeometryMode(gDisplayListHead++, G_SHADE | G_LIGHTING | G_SHADING_SMOOTH);
gSPSetLights1(gDisplayListHead++, D_800DC610[1]);
gSPSetGeometryMode(gDisplayListHead++, G_SHADE | G_LIGHTING | G_SHADING_SMOOTH);
mtxf_pos_rotation_xyz(spE0, boat->pos, boat->boatRot);
if (render_set_position(spE0, 1) != 0) {
mtxf_pos_rotation_xyz(spE0, boat->pos, boat->boatRot);
if (render_set_position(spE0, 1) != 0) {
// Render the boat
gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_boat_dl);
gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_railings_dl);
// Render the boat
gSPDisplayList(gDisplayListHead++, &d_course_dks_jungle_parkway_boat_dl);
gSPDisplayList(gDisplayListHead++, &d_course_dks_jungle_parkway_railings_dl);
mtxf_rotate_x(spE0, boat->wheelRot);
vec3f_set(sp120, 0, 16.0f, -255.0f);
mtxf_translate(spA0, sp120);
mtxf_multiplication(sp60, spE0, spA0);
if (render_set_position(sp60, 3) != 0) {
// Render the paddle wheel
gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK);
gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_paddle_wheel_dl);
gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
}
mtxf_rotate_x(spE0, boat->wheelRot);
vec3f_set(sp120, 0, 16.0f, -255.0f);
mtxf_translate(spA0, sp120);
mtxf_multiplication(sp60, spE0, spA0);
if (render_set_position(sp60, 3) != 0) {
// Render the paddle wheel
gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK);
gSPDisplayList(gDisplayListHead++, &d_course_dks_jungle_parkway_paddle_wheel_dl);
gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
}
}
}

View File

@ -8,6 +8,6 @@
*
* @param boat
*/
void update_actor_paddle_boat(struct PaddleWheelBoat *boat) {
void update_actor_paddle_boat(struct PaddleWheelBoat* boat) {
boat->wheelRot += 0x38E;
}

View File

@ -5,13 +5,13 @@
/**
* @brief Renders the palm tree actor.
* Actor used in Koopa Troopa Beach.
*
* @param arg0
* @param arg1
* @param arg2
*
* @param arg0
* @param arg1
* @param arg2
*/
void render_actor_palm_tree(Camera *arg0, UNUSED Mat4 arg1, struct PalmTree *arg2) {
Vec3s spA8 = {0, 0, 0};
void render_actor_palm_tree(Camera* arg0, UNUSED Mat4 arg1, struct PalmTree* arg2) {
Vec3s spA8 = { 0, 0, 0 };
Mat4 sp68;
f32 temp_f0;
s16 temp_v0 = arg2->flags;
@ -20,7 +20,8 @@ void render_actor_palm_tree(Camera *arg0, UNUSED Mat4 arg1, struct PalmTree *arg
return;
}
temp_f0 = is_within_render_distance(arg0->pos, arg2->pos, arg0->rot[1], 0.0f, gCameraZoom[arg0 - camera1], 4000000.0f);
temp_f0 =
is_within_render_distance(arg0->pos, arg2->pos, arg0->rot[1], 0.0f, gCameraZoom[arg0 - camera1], 4000000.0f);
if (!(temp_f0 < 0.0f)) {
if (((temp_v0 & 0x400) == 0) && (temp_f0 < 250000.0f)) {
@ -32,7 +33,7 @@ void render_actor_palm_tree(Camera *arg0, UNUSED Mat4 arg1, struct PalmTree *arg
gDPSetTextureLUT(gDisplayListHead++, G_TT_NONE);
gSPSetGeometryMode(gDisplayListHead++, G_LIGHTING);
switch(arg2->variant) {
switch (arg2->variant) {
case 0:
gSPDisplayList(gDisplayListHead++, d_course_koopa_troopa_beach_dl_tree_trunk1);
gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK);
@ -53,7 +54,6 @@ void render_actor_palm_tree(Camera *arg0, UNUSED Mat4 arg1, struct PalmTree *arg
gSPDisplayList(gDisplayListHead++, d_course_koopa_troopa_beach_dl_tree_top3);
gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
break;
}
}
}

View File

@ -12,106 +12,109 @@
* @param arg1
* @param arg2
*/
void render_actor_piranha_plant(Camera *arg0, Mat4 arg1, struct PiranhaPlant *arg2) {
void render_actor_piranha_plant(Camera* arg0, Mat4 arg1, struct PiranhaPlant* arg2) {
UNUSED s32 pad;
u8 *addr;
u8* addr;
s16 temp_lo = arg0 - camera1;
s16 animationFrame; // unconfirmed
s16 temp = arg2->flags;
f32 temp_f0;
s32 maxObjectsReached;
if (temp & 0x800) { return; }
if (temp & 0x800) {
return;
}
temp_f0 = is_within_render_distance(arg0->pos, arg2->pos, arg0->rot[1], 0, gCameraZoom[arg0 - camera1], 1000000.0f);
temp_f0 = is_within_render_distance(arg0->pos, arg2->pos, arg0->rot[1], 0, gCameraZoom[arg0 - camera1], 1000000.0f);
if (temp_f0 < 0.0f) {
if (temp_f0 < 0.0f) {
switch(temp_lo) {
case 0:
arg2->visibilityStates[0] = -1;
break;
case 1:
arg2->visibilityStates[1] = -1;
break;
case 2:
arg2->visibilityStates[2] = -1;
break;
case 3:
arg2->visibilityStates[3] = -1;
break;
}
return;
switch (temp_lo) {
case 0:
arg2->visibilityStates[0] = -1;
break;
case 1:
arg2->visibilityStates[1] = -1;
break;
case 2:
arg2->visibilityStates[2] = -1;
break;
case 3:
arg2->visibilityStates[3] = -1;
break;
}
arg1[3][0] = arg2->pos[0];
arg1[3][1] = arg2->pos[1];
arg1[3][2] = arg2->pos[2];
maxObjectsReached = render_set_position(arg1, 0) == 0;
if (maxObjectsReached) { return; }
return;
}
arg1[3][0] = arg2->pos[0];
arg1[3][1] = arg2->pos[1];
arg1[3][2] = arg2->pos[2];
maxObjectsReached = render_set_position(arg1, 0) == 0;
if (maxObjectsReached) {
return;
}
if (90000.0f < temp_f0) {
if (90000.0f < temp_f0) {
switch(temp_lo) {
case 0:
arg2->visibilityStates[0] = 0;
break;
case 1:
arg2->visibilityStates[1] = 0;
break;
case 2:
arg2->visibilityStates[2] = 0;
break;
case 3:
arg2->visibilityStates[3] = 0;
break;
}
animationFrame = 0;
} else {
switch(temp_lo) {
case 0:
arg2->visibilityStates[0] = 1;
break;
case 1:
arg2->visibilityStates[1] = 1;
break;
case 2:
arg2->visibilityStates[2] = 1;
break;
case 3:
arg2->visibilityStates[3] = 1;
break;
}
switch(temp_lo) {
case 0:
animationFrame = arg2->timers[0];
break;
case 1:
animationFrame = arg2->timers[1];
break;
case 2:
animationFrame = arg2->timers[2];
break;
case 3:
animationFrame = arg2->timers[3];
break;
}
switch (temp_lo) {
case 0:
arg2->visibilityStates[0] = 0;
break;
case 1:
arg2->visibilityStates[1] = 0;
break;
case 2:
arg2->visibilityStates[2] = 0;
break;
case 3:
arg2->visibilityStates[3] = 0;
break;
}
animationFrame /= 6;
animationFrame = 0;
if (animationFrame > 8) {
animationFrame = 8;
} else {
switch (temp_lo) {
case 0:
arg2->visibilityStates[0] = 1;
break;
case 1:
arg2->visibilityStates[1] = 1;
break;
case 2:
arg2->visibilityStates[2] = 1;
break;
case 3:
arg2->visibilityStates[3] = 1;
break;
}
addr = D_802BA058 + (animationFrame << 0xB);
gDPLoadTextureBlock(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(addr), G_IM_FMT_CI, G_IM_SIZ_8b, 32, 64, 0,
G_TX_MIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
if (gCurrentCourseId == COURSE_MARIO_RACEWAY) {
gSPDisplayList(gDisplayListHead++, d_course_mario_raceway_dl_piranha_plant);
} else {
gSPDisplayList(gDisplayListHead++, &d_course_royal_raceway_dl_piranha_plant);
switch (temp_lo) {
case 0:
animationFrame = arg2->timers[0];
break;
case 1:
animationFrame = arg2->timers[1];
break;
case 2:
animationFrame = arg2->timers[2];
break;
case 3:
animationFrame = arg2->timers[3];
break;
}
}
animationFrame /= 6;
if (animationFrame > 8) {
animationFrame = 8;
}
addr = D_802BA058 + (animationFrame << 0xB);
gDPLoadTextureBlock(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(addr), G_IM_FMT_CI, G_IM_SIZ_8b, 32, 64, 0,
G_TX_MIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
G_TX_NOLOD);
if (gCurrentCourseId == COURSE_MARIO_RACEWAY) {
gSPDisplayList(gDisplayListHead++, &d_course_mario_raceway_dl_piranha_plant);
} else {
gSPDisplayList(gDisplayListHead++, &d_course_royal_raceway_dl_piranha_plant);
}
}

View File

@ -3,10 +3,10 @@
/**
* @brief Updates the piranha plant actor.
* Actor used in Mario Raceway and Royal Raceway.
*
* @param arg0
*
* @param arg0
*/
void update_actor_piranha_plant(struct PiranhaPlant *arg0) {
void update_actor_piranha_plant(struct PiranhaPlant* arg0) {
if ((arg0->flags & 0x800) == 0) {
if ((arg0->flags & 0x400) != 0) {
arg0->pos[1] += 4.0f;

View File

@ -10,10 +10,11 @@
* @param arg0
* @param rr_crossing
*/
void render_actor_railroad_crossing(Camera *arg0, struct RailroadCrossing *rr_crossing) {
UNUSED Vec3s sp80 = {0, 0, 0};
void render_actor_railroad_crossing(Camera* arg0, struct RailroadCrossing* rr_crossing) {
UNUSED Vec3s sp80 = { 0, 0, 0 };
Mat4 sp40;
f32 unk = is_within_render_distance(arg0->pos, rr_crossing->pos, arg0->rot[1], 0.0f, gCameraZoom[arg0 - camera1], 4000000.0f);
f32 unk = is_within_render_distance(arg0->pos, rr_crossing->pos, arg0->rot[1], 0.0f, gCameraZoom[arg0 - camera1],
4000000.0f);
if (!(unk < 0.0f)) {
mtxf_pos_rotation_xyz(sp40, rr_crossing->pos, rr_crossing->rot);

View File

@ -4,10 +4,10 @@
* @brief Updates the railroad crossing actor.
* Actor used in Kalimari Desert.
* Make the sound of the bell when the train is close.
*
* @param crossing
*
* @param crossing
*/
void update_actor_railroad_crossing(struct RailroadCrossing *crossing) {
void update_actor_railroad_crossing(struct RailroadCrossing* crossing) {
// If train close?
if (isCrossingTriggeredByIndex[crossing->crossingId] != 0) {
// Timer++

View File

@ -11,34 +11,36 @@
* @param arg0
* @param arg1
*/
void render_actor_school_bus(Camera *arg0, struct Actor *arg1) {
void render_actor_school_bus(Camera* arg0, struct Actor* arg1) {
UNUSED s32 pad[6];
Mat4 spC8;
UNUSED s32 pad2[32];
f32 temp_f0;
temp_f0 = is_within_render_distance(arg0->pos, arg1->pos, arg0->rot[1], 2500.0f, gCameraZoom[arg0 - camera1], 9000000.0f);
if (temp_f0 < 0.0f) { return; }
temp_f0 =
is_within_render_distance(arg0->pos, arg1->pos, arg0->rot[1], 2500.0f, gCameraZoom[arg0 - camera1], 9000000.0f);
if (temp_f0 < 0.0f) {
return;
}
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
mtxf_pos_rotation_xyz(spC8, arg1->pos, arg1->rot);
if (render_set_position(spC8, 0) != 0) {
mtxf_pos_rotation_xyz(spC8, arg1->pos, arg1->rot);
if (render_set_position(spC8, 0) != 0) {
if (gActiveScreenMode == SCREEN_MODE_1P) {
if (temp_f0 < 160000.0f) {
gSPDisplayList(gDisplayListHead++, toads_turnpike_dl_3);
} else if (temp_f0 < 640000.0f) {
gSPDisplayList(gDisplayListHead++, toads_turnpike_dl_4);
} else {
gSPDisplayList(gDisplayListHead++, toads_turnpike_dl_5);
}
} else if (temp_f0 < 160000.0f) {
gSPDisplayList(gDisplayListHead++, toads_turnpike_dl_4);
if (gActiveScreenMode == SCREEN_MODE_1P) {
if (temp_f0 < 160000.0f) {
gSPDisplayList(gDisplayListHead++, &toads_turnpike_dl_3);
} else if (temp_f0 < 640000.0f) {
gSPDisplayList(gDisplayListHead++, &toads_turnpike_dl_4);
} else {
gSPDisplayList(gDisplayListHead++, toads_turnpike_dl_5);
}
} else if (temp_f0 < 160000.0f) {
gSPDisplayList(gDisplayListHead++, &toads_turnpike_dl_4);
} else {
gSPDisplayList(gDisplayListHead++, &toads_turnpike_dl_5);
}
}
}

View File

@ -6,15 +6,16 @@
* @brief Renders the tanker truck actor.
* Actor used in Toad's Turnpike.
* His update are made in vehicle.
*
* @param camera
* @param arg1
*
* @param camera
* @param arg1
*/
void render_actor_tanker_truck(Camera *camera, struct Actor* arg1) {
void render_actor_tanker_truck(Camera* camera, struct Actor* arg1) {
UNUSED s32 pad[6];
Mat4 spC8;
UNUSED s32 pad2[32];
f32 temp_f0 = is_within_render_distance(camera->pos, arg1->pos, camera->rot[1], 2500.0f, gCameraZoom[camera - camera1], 9000000.0f);
f32 temp_f0 = is_within_render_distance(camera->pos, arg1->pos, camera->rot[1], 2500.0f,
gCameraZoom[camera - camera1], 9000000.0f);
if (!(temp_f0 < 0.0f)) {
@ -33,11 +34,11 @@ void render_actor_tanker_truck(Camera *camera, struct Actor* arg1) {
} else {
gSPDisplayList(gDisplayListHead++, toads_turnpike_dl_8);
}
} else if (temp_f0 < 160000.0f) {
gSPDisplayList(gDisplayListHead++, toads_turnpike_dl_7);
} else {
gSPDisplayList(gDisplayListHead++, toads_turnpike_dl_8);
}
} else if (temp_f0 < 160000.0f) {
gSPDisplayList(gDisplayListHead++, toads_turnpike_dl_7);
} else {
gSPDisplayList(gDisplayListHead++, toads_turnpike_dl_8);
}
}
}
}

View File

@ -11,7 +11,7 @@
* @param camera
* @param actor
*/
void render_actor_train_engine(Camera *camera, struct TrainCar *actor) {
void render_actor_train_engine(Camera* camera, struct TrainCar* actor) {
UNUSED s32 pad[2];
s32 maxObjectsReached;
Vec3f sp160;
@ -19,15 +19,20 @@ void render_actor_train_engine(Camera *camera, struct TrainCar *actor) {
Mat4 spE0;
Mat4 spA0;
f32 distance = is_within_render_distance(camera->pos, actor->pos, camera->rot[1], 2500.0f, gCameraZoom[camera - camera1], 9000000.0f);
f32 distance = is_within_render_distance(camera->pos, actor->pos, camera->rot[1], 2500.0f,
gCameraZoom[camera - camera1], 9000000.0f);
if (distance < 0.0f) { return; }
if (distance < 0.0f) {
return;
}
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
mtxf_pos_rotation_xyz(sp120, actor->pos, actor->rot);
maxObjectsReached = render_set_position(sp120, 0) == 0;
if (maxObjectsReached) { return; }
if (maxObjectsReached) {
return;
}
if (distance < 122500.0f) {
@ -37,12 +42,14 @@ void render_actor_train_engine(Camera *camera, struct TrainCar *actor) {
} else if (distance < 640000.0f) {
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_1D670);
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_1D160);
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_1D160);
} else {
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_1E910);
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_1E480);
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_1E910);
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_1E480);
}
if (1440000.0f < distance) {
return;
}
if (1440000.0f < distance) { return; }
gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK);
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22D28);
@ -53,7 +60,9 @@ void render_actor_train_engine(Camera *camera, struct TrainCar *actor) {
mtxf_multiplication(spA0, sp120, spE0);
maxObjectsReached = render_set_position(spA0, 3) == 0;
if (maxObjectsReached) { return; }
if (maxObjectsReached) {
return;
}
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22DB8);
gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
@ -64,7 +73,9 @@ void render_actor_train_engine(Camera *camera, struct TrainCar *actor) {
mtxf_multiplication(spA0, sp120, spE0);
maxObjectsReached = render_set_position(spA0, 3) == 0;
if (maxObjectsReached) { return; }
if (maxObjectsReached) {
return;
}
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22DB8);
gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
@ -75,7 +86,9 @@ void render_actor_train_engine(Camera *camera, struct TrainCar *actor) {
mtxf_multiplication(spA0, sp120, spE0);
maxObjectsReached = render_set_position(spA0, 3) == 0;
if (maxObjectsReached) { return; }
if (maxObjectsReached) {
return;
}
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22DB8);
gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
@ -86,7 +99,9 @@ void render_actor_train_engine(Camera *camera, struct TrainCar *actor) {
mtxf_multiplication(spA0, sp120, spE0);
maxObjectsReached = render_set_position(spA0, 3) == 0;
if (maxObjectsReached) { return; }
if (maxObjectsReached) {
return;
}
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22DB8);
gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
@ -97,7 +112,9 @@ void render_actor_train_engine(Camera *camera, struct TrainCar *actor) {
mtxf_multiplication(spA0, sp120, spE0);
maxObjectsReached = render_set_position(spA0, 3) == 0;
if (maxObjectsReached) { return; }
if (maxObjectsReached) {
return;
}
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22D70);
gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
@ -108,7 +125,9 @@ void render_actor_train_engine(Camera *camera, struct TrainCar *actor) {
mtxf_multiplication(spA0, sp120, spE0);
maxObjectsReached = render_set_position(spA0, 3) == 0;
if (maxObjectsReached) { return; }
if (maxObjectsReached) {
return;
}
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22D70);
gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
@ -119,7 +138,9 @@ void render_actor_train_engine(Camera *camera, struct TrainCar *actor) {
mtxf_multiplication(spA0, sp120, spE0);
maxObjectsReached = render_set_position(spA0, 3) == 0;
if (maxObjectsReached) { return; }
if (maxObjectsReached) {
return;
}
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22D70);
gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
@ -130,27 +151,34 @@ void render_actor_train_engine(Camera *camera, struct TrainCar *actor) {
mtxf_multiplication(spA0, sp120, spE0);
maxObjectsReached = render_set_position(spA0, 3) == 0;
if (maxObjectsReached) { return; }
if (maxObjectsReached) {
return;
}
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22D70);
gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
}
void render_actor_train_tender(Camera *camera, struct TrainCar *actor) {
void render_actor_train_tender(Camera* camera, struct TrainCar* actor) {
Mat4 sp120;
Vec3f sp160;
Mat4 spE0;
Mat4 spA0;
f32 temp_f0 = is_within_render_distance(camera->pos, actor->pos, camera->rot[1], 625.0f, gCameraZoom[camera - camera1], 9000000.0f);
f32 temp_f0 = is_within_render_distance(camera->pos, actor->pos, camera->rot[1], 625.0f,
gCameraZoom[camera - camera1], 9000000.0f);
if (temp_f0 < 0.0f) { return; }
if (temp_f0 < 0.0f) {
return;
}
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
mtxf_pos_rotation_xyz(sp120, actor->pos, actor->rot);
if (render_set_position(sp120, 0) == 0) { return; }
if (render_set_position(sp120, 0) == 0) {
return;
}
if (temp_f0 < 250000.0f) {
@ -161,7 +189,9 @@ void render_actor_train_tender(Camera *camera, struct TrainCar *actor) {
} else {
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_1FAF8);
}
if (1440000.0f < temp_f0) { return; }
if (1440000.0f < temp_f0) {
return;
}
gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK);
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22D28);
@ -171,7 +201,9 @@ void render_actor_train_tender(Camera *camera, struct TrainCar *actor) {
mtxf_translate(spE0, sp160);
mtxf_multiplication(spA0, sp120, spE0);
if (render_set_position(spA0, 3) == 0) { return; }
if (render_set_position(spA0, 3) == 0) {
return;
}
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22DB8);
gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
@ -181,7 +213,9 @@ void render_actor_train_tender(Camera *camera, struct TrainCar *actor) {
mtxf_translate(spE0, sp160);
mtxf_multiplication(spA0, sp120, spE0);
if (render_set_position(spA0, 3) == 0) { return; }
if (render_set_position(spA0, 3) == 0) {
return;
}
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22DB8);
gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
@ -191,7 +225,9 @@ void render_actor_train_tender(Camera *camera, struct TrainCar *actor) {
mtxf_translate(spE0, sp160);
mtxf_multiplication(spA0, sp120, spE0);
if (render_set_position(spA0, 3) == 0) { return; }
if (render_set_position(spA0, 3) == 0) {
return;
}
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22DB8);
gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
@ -201,27 +237,34 @@ void render_actor_train_tender(Camera *camera, struct TrainCar *actor) {
mtxf_translate(spE0, sp160);
mtxf_multiplication(spA0, sp120, spE0);
if (render_set_position(spA0, 3) == 0) { return; }
if (render_set_position(spA0, 3) == 0) {
return;
}
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22DB8);
gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
}
void render_actor_train_passenger_car(Camera *camera, struct TrainCar *actor) {
void render_actor_train_passenger_car(Camera* camera, struct TrainCar* actor) {
Mat4 sp120;
Vec3f sp160;
Mat4 spE0;
Mat4 spA0;
f32 temp_f0 = is_within_render_distance(camera->pos, actor->pos, camera->rot[1], 2025.0f, gCameraZoom[camera - camera1], 9000000.0f);
f32 temp_f0 = is_within_render_distance(camera->pos, actor->pos, camera->rot[1], 2025.0f,
gCameraZoom[camera - camera1], 9000000.0f);
if (temp_f0 < 0.0f) { return; }
if (temp_f0 < 0.0f) {
return;
}
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
mtxf_pos_rotation_xyz(sp120, actor->pos, actor->rot);
if (render_set_position(sp120, 0) == 0) { return; }
if (render_set_position(sp120, 0) == 0) {
return;
}
if (temp_f0 < 250000.0f) {
@ -236,7 +279,9 @@ void render_actor_train_passenger_car(Camera *camera, struct TrainCar *actor) {
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_21C90);
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_21A80);
}
if (1440000.0f < temp_f0) { return; }
if (1440000.0f < temp_f0) {
return;
}
gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK);
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22D28);
@ -246,7 +291,9 @@ void render_actor_train_passenger_car(Camera *camera, struct TrainCar *actor) {
mtxf_translate(spE0, sp160);
mtxf_multiplication(spA0, sp120, spE0);
if (render_set_position(spA0, 3) == 0) { return; }
if (render_set_position(spA0, 3) == 0) {
return;
}
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22DB8);
gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
@ -256,7 +303,9 @@ void render_actor_train_passenger_car(Camera *camera, struct TrainCar *actor) {
mtxf_translate(spE0, sp160);
mtxf_multiplication(spA0, sp120, spE0);
if (render_set_position(spA0, 3) == 0) { return; }
if (render_set_position(spA0, 3) == 0) {
return;
}
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22DB8);
gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
@ -266,7 +315,9 @@ void render_actor_train_passenger_car(Camera *camera, struct TrainCar *actor) {
mtxf_translate(spE0, sp160);
mtxf_multiplication(spA0, sp120, spE0);
if (render_set_position(spA0, 3) == 0) { return; }
if (render_set_position(spA0, 3) == 0) {
return;
}
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22DB8);
gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
@ -276,7 +327,9 @@ void render_actor_train_passenger_car(Camera *camera, struct TrainCar *actor) {
mtxf_translate(spE0, sp160);
mtxf_multiplication(spA0, sp120, spE0);
if (render_set_position(spA0, 3) == 0) { return; }
if (render_set_position(spA0, 3) == 0) {
return;
}
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22DB8);
gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
@ -286,7 +339,9 @@ void render_actor_train_passenger_car(Camera *camera, struct TrainCar *actor) {
mtxf_translate(spE0, sp160);
mtxf_multiplication(spA0, sp120, spE0);
if (render_set_position(spA0, 3) == 0) { return; }
if (render_set_position(spA0, 3) == 0) {
return;
}
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22DB8);
gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
@ -296,7 +351,9 @@ void render_actor_train_passenger_car(Camera *camera, struct TrainCar *actor) {
mtxf_translate(spE0, sp160);
mtxf_multiplication(spA0, sp120, spE0);
if (render_set_position(spA0, 3) == 0) { return; }
if (render_set_position(spA0, 3) == 0) {
return;
}
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22DB8);
gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
@ -306,7 +363,9 @@ void render_actor_train_passenger_car(Camera *camera, struct TrainCar *actor) {
mtxf_translate(spE0, sp160);
mtxf_multiplication(spA0, sp120, spE0);
if (render_set_position(spA0, 3) == 0) { return; }
if (render_set_position(spA0, 3) == 0) {
return;
}
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22DB8);
gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
@ -316,7 +375,9 @@ void render_actor_train_passenger_car(Camera *camera, struct TrainCar *actor) {
mtxf_translate(spE0, sp160);
mtxf_multiplication(spA0, sp120, spE0);
if (render_set_position(spA0, 3) == 0) { return; }
if (render_set_position(spA0, 3) == 0) {
return;
}
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22DB8);
gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);

View File

@ -4,15 +4,15 @@
* @brief Updates the train engine actor.
* Used in Kalimari Desert.
* Update wheels and make sound, for his update position it's in vehicle.
*
* @param arg0
*
* @param arg0
*/
void update_actor_train_engine(struct TrainCar *arg0) {
void update_actor_train_engine(struct TrainCar* arg0) {
arg0->wheelRot -= 0x666;
if (arg0->unk_08 != 0.0f) {
arg0->unk_08 = 0.0f;
func_800C9D80(arg0->pos, arg0->velocity, SOUND_ARG_LOAD(0x51,0x01,0x80,0x00));
func_800C9D80(arg0->pos, arg0->velocity, SOUND_ARG_LOAD(0x51, 0x01, 0x80, 0x00));
}
}
@ -20,9 +20,9 @@ void update_actor_train_engine(struct TrainCar *arg0) {
* @brief Updates the train tender actor.
* Used in Kalimari Desert.
* Update wheels, for his update position it's in vehicle.
* @param tender
* @param tender
*/
void update_actor_train_tender(struct TrainCar *tender) {
void update_actor_train_tender(struct TrainCar* tender) {
tender->wheelRot -= 0x4FA;
}
@ -30,9 +30,9 @@ void update_actor_train_tender(struct TrainCar *tender) {
* @brief Updates the train passenger car actor.
* Used in Kalimari Desert.
* Update wheels, for his update position it's in vehicle.
*
* @param arg0
*
* @param arg0
*/
void update_actor_train_passenger_car(struct TrainCar *arg0) {
void update_actor_train_passenger_car(struct TrainCar* arg0) {
arg0->wheelRot -= 0x666;
}

View File

@ -13,15 +13,20 @@
* @param arg1
* @param arg2
*/
void render_actor_tree_mario_raceway(Camera *camera, Mat4 arg1, struct Actor *arg2) {
void render_actor_tree_mario_raceway(Camera* camera, Mat4 arg1, struct Actor* arg2) {
f32 temp_f0;
s16 temp_v0 = arg2->flags;
if ((temp_v0 & 0x800) != 0) { return; }
if ((temp_v0 & 0x800) != 0) {
return;
}
temp_f0 = is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 16000000.0f);
temp_f0 = is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1],
16000000.0f);
if (temp_f0 < 0.0f) { return; }
if (temp_f0 < 0.0f) {
return;
}
if (((temp_v0 & 0x400) == 0) && (temp_f0 < 250000.0f)) {
func_8029794C(arg2->pos, arg2->rot, 3.0f);
@ -43,15 +48,20 @@ void render_actor_tree_mario_raceway(Camera *camera, Mat4 arg1, struct Actor *ar
* @param arg1
* @param arg2
*/
void render_actor_tree_yoshi_valley(Camera *camera, Mat4 arg1, struct Actor *arg2) {
void render_actor_tree_yoshi_valley(Camera* camera, Mat4 arg1, struct Actor* arg2) {
f32 temp_f0;
s16 temp_v0 = arg2->flags;
if ((temp_v0 & 0x800) != 0) { return; }
if ((temp_v0 & 0x800) != 0) {
return;
}
temp_f0 = is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 4000000.0f);
temp_f0 =
is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 4000000.0f);
if (temp_f0 < 0.0f) { return; }
if (temp_f0 < 0.0f) {
return;
}
if (((temp_v0 & 0x400) == 0) && (temp_f0 < 250000.0f)) {
func_8029794C(arg2->pos, arg2->rot, 2.79999995f);
@ -73,15 +83,20 @@ void render_actor_tree_yoshi_valley(Camera *camera, Mat4 arg1, struct Actor *arg
* @param arg1
* @param arg2
*/
void render_actor_tree_royal_raceway(Camera *camera, Mat4 arg1, struct Actor *arg2) {
void render_actor_tree_royal_raceway(Camera* camera, Mat4 arg1, struct Actor* arg2) {
f32 temp_f0;
s16 temp_v0 = arg2->flags;
if ((temp_v0 & 0x800) != 0) { return; }
if ((temp_v0 & 0x800) != 0) {
return;
}
temp_f0 = is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 4000000.0f);
temp_f0 =
is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 4000000.0f);
if (temp_f0 < 0.0f) { return; }
if (temp_f0 < 0.0f) {
return;
}
if (((temp_v0 & 0x400) == 0) && (temp_f0 < 250000.0f)) {
func_8029794C(arg2->pos, arg2->rot, 2.79999995f);
@ -103,15 +118,20 @@ void render_actor_tree_royal_raceway(Camera *camera, Mat4 arg1, struct Actor *ar
* @param arg1
* @param arg2
*/
void render_actor_tree_moo_moo_farm(Camera *camera, Mat4 arg1, struct Actor *arg2) {
void render_actor_tree_moo_moo_farm(Camera* camera, Mat4 arg1, struct Actor* arg2) {
f32 temp_f0;
s16 temp_v0 = arg2->flags;
if ((temp_v0 & 0x800) != 0) { return; }
if ((temp_v0 & 0x800) != 0) {
return;
}
temp_f0 = is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 6250000.0f);
temp_f0 =
is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 6250000.0f);
if (temp_f0 < 0.0f) { return; }
if (temp_f0 < 0.0f) {
return;
}
if (((temp_v0 & 0x400) == 0) && (temp_f0 < 600.0f)) {
func_8029794C(arg2->pos, arg2->rot, 5.0f);
@ -127,15 +147,20 @@ void render_actor_tree_moo_moo_farm(Camera *camera, Mat4 arg1, struct Actor *arg
}
// have all the properties of the tree
void func_80299864(Camera *camera, Mat4 arg1, struct Actor *arg2) {
void func_80299864(Camera* camera, Mat4 arg1, struct Actor* arg2) {
f32 temp_f0;
s16 temp_v0 = arg2->flags;
if ((temp_v0 & 0x800) != 0) { return; }
if ((temp_v0 & 0x800) != 0) {
return;
}
temp_f0 = is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 4000000.0f);
temp_f0 =
is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 4000000.0f);
if (temp_f0 < 0.0f) { return; }
if (temp_f0 < 0.0f) {
return;
}
if (((temp_v0 & 0x400) == 0) && (temp_f0 < 250000.0f)) {
func_8029794C(arg2->pos, arg2->rot, 2.79999995f);
@ -158,7 +183,7 @@ void func_80299864(Camera *camera, Mat4 arg1, struct Actor *arg2) {
// Just in-case changed the code into a switch to prevent future crashes.
// This comment can be removed when this is confirmed to work.
switch(gCurrentCourseId) {
switch (gCurrentCourseId) {
case COURSE_LUIGI_RACEWAY:
gSPDisplayList(gDisplayListHead++, d_course_luigi_raceway_dl_FC70);
break;
@ -176,15 +201,20 @@ void func_80299864(Camera *camera, Mat4 arg1, struct Actor *arg2) {
* @param arg1
* @param arg2
*/
void render_actor_tree_bowser_castle(Camera *camera, Mat4 arg1, struct Actor *arg2) {
void render_actor_tree_bowser_castle(Camera* camera, Mat4 arg1, struct Actor* arg2) {
f32 temp_f0;
s16 temp_v0 = arg2->flags;
if ((temp_v0 & 0x800) != 0) { return; }
if ((temp_v0 & 0x800) != 0) {
return;
}
temp_f0 = is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 4000000.0f);
temp_f0 =
is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 4000000.0f);
if (temp_f0 < 0.0f) { return; }
if (temp_f0 < 0.0f) {
return;
}
if (((temp_v0 & 0x400) == 0) && (temp_f0 < 250000.0f)) {
func_8029794C(arg2->pos, arg2->rot, 2.79999995f);
@ -206,15 +236,20 @@ void render_actor_tree_bowser_castle(Camera *camera, Mat4 arg1, struct Actor *ar
* @param arg1
* @param arg2
*/
void render_actor_bush_bowser_castle(Camera *camera, Mat4 arg1, struct Actor *arg2) {
void render_actor_bush_bowser_castle(Camera* camera, Mat4 arg1, struct Actor* arg2) {
f32 temp_f0;
s16 temp_v0 = arg2->flags;
if ((temp_v0 & 0x800) != 0) { return; }
if ((temp_v0 & 0x800) != 0) {
return;
}
temp_f0 = is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 640000.0f);
temp_f0 =
is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 640000.0f);
if (temp_f0 < 0.0f) { return; }
if (temp_f0 < 0.0f) {
return;
}
if (((temp_v0 & 0x400) == 0) && (temp_f0 < 250000.0f)) {
func_8029794C(arg2->pos, arg2->rot, 2.79999995f);
@ -236,15 +271,20 @@ void render_actor_bush_bowser_castle(Camera *camera, Mat4 arg1, struct Actor *ar
* @param arg1
* @param arg2
*/
void render_actor_tree_frappe_snowland(Camera *camera, Mat4 arg1, struct Actor *arg2) {
void render_actor_tree_frappe_snowland(Camera* camera, Mat4 arg1, struct Actor* arg2) {
f32 temp_f0;
s16 temp_v0 = arg2->flags;
if ((temp_v0 & 0x800) != 0) { return; }
if ((temp_v0 & 0x800) != 0) {
return;
}
temp_f0 = is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 4000000.0f);
temp_f0 =
is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 4000000.0f);
if (temp_f0 < 0.0f) { return; }
if (temp_f0 < 0.0f) {
return;
}
if (((temp_v0 & 0x400) == 0) && (temp_f0 < 250000.0f)) {
func_8029794C(arg2->pos, arg2->rot, 2.79999995f);
@ -265,15 +305,20 @@ void render_actor_tree_frappe_snowland(Camera *camera, Mat4 arg1, struct Actor *
* @param arg1
* @param arg2
*/
void render_actor_tree_cactus1_kalimari_desert(Camera *camera, Mat4 arg1, struct Actor *arg2) {
void render_actor_tree_cactus1_kalimari_desert(Camera* camera, Mat4 arg1, struct Actor* arg2) {
f32 temp_f0;
s16 temp_v0 = arg2->flags;
if ((temp_v0 & 0x800) != 0) { return; }
if ((temp_v0 & 0x800) != 0) {
return;
}
temp_f0 = is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 4000000.0f);
temp_f0 =
is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 4000000.0f);
if (temp_f0 < 0.0f) { return; }
if (temp_f0 < 0.0f) {
return;
}
if (((temp_v0 & 0x400) == 0) && (temp_f0 < 40000.0f)) {
func_8029794C(arg2->pos, arg2->rot, 1.0f);
@ -294,15 +339,20 @@ void render_actor_tree_cactus1_kalimari_desert(Camera *camera, Mat4 arg1, struct
* @param arg1
* @param arg2
*/
void render_actor_tree_cactus2_kalimari_desert(Camera *camera, Mat4 arg1, struct Actor *arg2) {
void render_actor_tree_cactus2_kalimari_desert(Camera* camera, Mat4 arg1, struct Actor* arg2) {
f32 temp_f0;
s16 temp_v0 = arg2->flags;
if ((temp_v0 & 0x800) != 0) { return; }
if ((temp_v0 & 0x800) != 0) {
return;
}
temp_f0 = is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 4000000.0f);
temp_f0 =
is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 4000000.0f);
if (temp_f0 < 0.0f) { return; }
if (temp_f0 < 0.0f) {
return;
}
if (((temp_v0 & 0x400) == 0) && (temp_f0 < 40000.0f)) {
func_8029794C(arg2->pos, arg2->rot, 1.0f);
@ -323,15 +373,20 @@ void render_actor_tree_cactus2_kalimari_desert(Camera *camera, Mat4 arg1, struct
* @param arg1
* @param arg2
*/
void render_actor_tree_cactus3_kalimari_desert(Camera *camera, Mat4 arg1, struct Actor *arg2) {
void render_actor_tree_cactus3_kalimari_desert(Camera* camera, Mat4 arg1, struct Actor* arg2) {
f32 temp_f0;
s16 temp_v0 = arg2->flags;
if ((temp_v0 & 0x800) != 0) { return; }
if ((temp_v0 & 0x800) != 0) {
return;
}
temp_f0 = is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 4000000.0f);
temp_f0 =
is_within_render_distance(camera->pos, arg2->pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 4000000.0f);
if (temp_f0 < 0.0f) { return; }
if (temp_f0 < 0.0f) {
return;
}
if (((temp_v0 & 0x400) == 0) && (temp_f0 < 40000.0f)) {
func_8029794C(arg2->pos, arg2->rot, 0.80000001f);

View File

@ -10,9 +10,10 @@
* @param arg0
* @param arg1
*/
void render_actor_wario_sign(Camera *arg0, struct Actor *arg1) {
void render_actor_wario_sign(Camera* arg0, struct Actor* arg1) {
Mat4 sp38;
f32 unk = is_within_render_distance(arg0->pos, arg1->pos, arg0->rot[1], 0, gCameraZoom[arg0 - camera1], 16000000.0f);
f32 unk =
is_within_render_distance(arg0->pos, arg1->pos, arg0->rot[1], 0, gCameraZoom[arg0 - camera1], 16000000.0f);
if (!(unk < 0.0f)) {
gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH);

View File

@ -3,9 +3,9 @@
/**
* @brief Updates the Wario sign actor.
* Used in Wario Stadium.
*
* @param arg0
*
* @param arg0
*/
void update_actor_wario_sign(struct Actor *arg0) {
void update_actor_wario_sign(struct Actor* arg0) {
arg0->rot[1] += 0xB6;
}

View File

@ -6,20 +6,21 @@
/**
* @brief Renders the Yoshi egg actor.
* Actor used in Yoshi Valley.
*
* @param arg0
* @param arg1
* @param egg
* @param arg3
*
* @param arg0
* @param arg1
* @param egg
* @param arg3
*/
void render_actor_yoshi_egg(Camera *arg0, Mat4 arg1, struct YoshiValleyEgg *egg, u16 arg3) {
void render_actor_yoshi_egg(Camera* arg0, Mat4 arg1, struct YoshiValleyEgg* egg, u16 arg3) {
Mat4 sp60;
Vec3s sp5C;
Vec3f sp54;
f32 temp_f0;
if (gGamestate != CREDITS_SEQUENCE) {
temp_f0 = is_within_render_distance(arg0->pos, egg->pos, arg0->rot[1], 200.0f, gCameraZoom[arg0 - camera1], 16000000.0f);
temp_f0 = is_within_render_distance(arg0->pos, egg->pos, arg0->rot[1], 200.0f, gCameraZoom[arg0 - camera1],
16000000.0f);
if (temp_f0 < 0.0f) {
return;
}
@ -41,7 +42,9 @@ void render_actor_yoshi_egg(Camera *arg0, Mat4 arg1, struct YoshiValleyEgg *egg,
sp5C[1] = egg->eggRot;
sp5C[2] = 0;
mtxf_pos_rotation_xyz(sp60, egg->pos, sp5C);
if (render_set_position(sp60, 0) == 0) { return; }
if (render_set_position(sp60, 0) == 0) {
return;
}
gSPSetGeometryMode(gDisplayListHead++, G_LIGHTING);
gSPDisplayList(gDisplayListHead++, d_course_yoshi_valley_dl_16D70);

View File

@ -2,10 +2,10 @@
/**
* @brief Updates the Yoshi egg actor.
*
* @param egg
*
* @param egg
*/
void update_actor_yoshi_egg(struct YoshiValleyEgg *egg) {
void update_actor_yoshi_egg(struct YoshiValleyEgg* egg) {
egg->pathRot += 0x5B;
egg->pos[0] = egg->pathCenter[0] + (sins(egg->pathRot) * egg->pathRadius);
egg->pos[2] = egg->pathCenter[2] + (coss(egg->pathRot) * egg->pathRadius);

View File

@ -13,7 +13,7 @@ s16 isNotTheFirst;
s16 sMatrixShouldNotPop;
s16 sMatrixStackSize;
void convert_to_fixed_point_matrix_animation(Mtx *dest, Mat4 src) {
void convert_to_fixed_point_matrix_animation(Mtx* dest, Mat4 src) {
#ifdef AVOID_UB
// Avoid type-casting which is technically UB by calling the equivalent
// guMtxF2L function. This helps little-endian systems, as well.
@ -21,12 +21,12 @@ void convert_to_fixed_point_matrix_animation(Mtx *dest, Mat4 src) {
#else
s32 asFixedPoint;
register s32 i;
register s16 *a3 = (s16 *) dest; // all integer parts stored in first 16 bytes
register s16 *t0 = (s16 *) dest + 16; // all fraction parts stored in last 16 bytes
register f32 *t1 = (f32 *) src;
register s16* a3 = (s16*) dest; // all integer parts stored in first 16 bytes
register s16* t0 = (s16*) dest + 16; // all fraction parts stored in last 16 bytes
register f32* t1 = (f32*) src;
for (i = 0; i < 16; i++) {
asFixedPoint = *t1++ * (1 << 16); //! float-to-integer conversion responsible for PU crashes
asFixedPoint = *t1++ * (1 << 16); //! float-to-integer conversion responsible for PU crashes
*a3++ = GET_HIGH_S16_OF_32(asFixedPoint); // integer part
*t0++ = GET_LOW_S16_OF_32(asFixedPoint); // fraction part
}
@ -64,14 +64,14 @@ void mtxf_translate_rotate2(Mat4 dest, Vec3f pos, Vec3s angle) {
dest[3][3] = 1.0f;
}
void render_limb_or_add_mtx(Armature *arg0, s16 *arg1, AnimationLimbVector arg2, s32 timeCycle) {
void render_limb_or_add_mtx(Armature* arg0, s16* arg1, AnimationLimbVector arg2, s32 timeCycle) {
Vec3f pos;
Vec3s angle;
Mat4 modelMatrix;
s32 i;
s32 some_offset;
Gfx *model;
Gfx *virtualModel;
Gfx* model;
Gfx* virtualModel;
virtualModel = arg0->model;
if (isNotTheFirst == 0) {
for (i = 0; i < 3; i++) {
@ -91,22 +91,23 @@ void render_limb_or_add_mtx(Armature *arg0, s16 *arg1, AnimationLimbVector arg2,
}
angle[i] = arg1[arg2[i].indexCycle + some_offset];
}
mtxf_translate_rotate2(modelMatrix, pos, angle);
convert_to_fixed_point_matrix_animation(&gGfxPool->mtxHud[gMatrixHudCount], modelMatrix);
sMatrixStackSize += 1;
gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL2(&gGfxPool->mtxHud[gMatrixHudCount++]), G_MTX_PUSH | G_MTX_MUL | G_MTX_MODELVIEW);
gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL2(&gGfxPool->mtxHud[gMatrixHudCount++]),
G_MTX_PUSH | G_MTX_MUL | G_MTX_MODELVIEW);
if (virtualModel != NULL) {
model = segmented_to_virtual(virtualModel);
gSPDisplayList(gDisplayListHead++, model);
}
}
void render_armature(Armature *animation, Animation *arg1, s16 timeCycle) {
UNUSED u32 *temp;
s16 *angle_array;
void render_armature(Armature* animation, Animation* arg1, s16 timeCycle) {
UNUSED u32* temp;
s16* angle_array;
s32 some_offset;
AnimationLimbVector *animation_cycle_list;
AnimationLimbVector* animation_cycle_list;
s32 animation_type;
s32 someIndex;
@ -126,37 +127,38 @@ void render_armature(Armature *animation, Animation *arg1, s16 timeCycle) {
sMatrixShouldNotPop = 0;
do {
animation_type = animation->type;
switch (animation_type) { /* irregular */
case STOP_ANIMATION:
break;
case DISABLE_AUTOMATIC_POP_MATRIX:
sMatrixShouldNotPop = 1;
break;
case POP_MATRIX:
gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
sMatrixStackSize -= 1;
break;
case RENDER_MODEL_OR_ADD_POS:
if (sMatrixShouldNotPop == 0) {
switch (animation_type) { /* irregular */
case STOP_ANIMATION:
break;
case DISABLE_AUTOMATIC_POP_MATRIX:
sMatrixShouldNotPop = 1;
break;
case POP_MATRIX:
gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
sMatrixStackSize -= 1;
}
render_limb_or_add_mtx(animation, angle_array, *animation_cycle_list, (s32) timeCycle);
sMatrixShouldNotPop = 0;
animation_cycle_list++;
break;
break;
case RENDER_MODEL_OR_ADD_POS:
if (sMatrixShouldNotPop == 0) {
gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
sMatrixStackSize -= 1;
}
render_limb_or_add_mtx(animation, angle_array, *animation_cycle_list, (s32) timeCycle);
sMatrixShouldNotPop = 0;
animation_cycle_list++;
break;
}
animation = (Armature *) ((uintptr_t *) animation + animation->size);
animation = (Armature*) ((uintptr_t*) animation + animation->size);
} while (animation_type != STOP_ANIMATION);
}
s16 render_animated_model(Armature *virtualArmature, Animation **virtualListAnimation, s16 animationIndex, s16 timeCycle) {
Armature *armature;
Animation *animation;
Animation **listAnimation;
s16 render_animated_model(Armature* virtualArmature, Animation** virtualListAnimation, s16 animationIndex,
s16 timeCycle) {
Armature* armature;
Animation* animation;
Animation** listAnimation;
armature = segmented_to_virtual(virtualArmature);
listAnimation = segmented_to_virtual(virtualListAnimation); // Convert the array's address
listAnimation = segmented_to_virtual(virtualListAnimation); // Convert the array's address
animation = segmented_to_virtual(listAnimation[animationIndex]); // Convert an array element's address
if (timeCycle >= animation->animation_length) {
timeCycle = 0;
@ -169,9 +171,9 @@ s16 render_animated_model(Armature *virtualArmature, Animation **virtualListAnim
return timeCycle;
}
s16 get_animation_length(Animation **addr, s16 offset) {
Animation **item = segmented_to_virtual(addr);
Animation *temp = (Animation *) segmented_to_virtual((void *) item[offset]);
s16 get_animation_length(Animation** addr, s16 offset) {
Animation** item = segmented_to_virtual(addr);
Animation* temp = (Animation*) segmented_to_virtual((void*) item[offset]);
return temp->animation_length - 1;
}

View File

@ -6,10 +6,10 @@
/*
What I know about animation stuff so far
Its not clear to me exactly what animations even are in MK64, my speculation is that their some form of matrix manipulation sequence.
Presumably the "models" of the objects that are getting animated are a bunch of matrices and the animations somehow change them.
animation appears to be responsible for the handling of animations.
Animation seem to be reserved for objects, namely: seagulls in KTB, flags in YV, chain chomps in RR, and penguins in SL.
Its not clear to me exactly what animations even are in MK64, my speculation is that their some form of matrix
manipulation sequence. Presumably the "models" of the objects that are getting animated are a bunch of matrices and the
animations somehow change them. animation appears to be responsible for the handling of animations. Animation seem to be
reserved for objects, namely: seagulls in KTB, flags in YV, chain chomps in RR, and penguins in SL.
Each object has 2 pointers of interest, at offsets 0x70 and 0x74 (unk_070 and unk_074).
These are passed to render_animated_model, along with what appears to be an index and a timer.
@ -37,7 +37,8 @@ Each "type" indicates a different action to take while iterating over the array.
Type 1: Only used to modify Type 0's behaviour
Type 2: Pop a matrix
Type 3: End of array, stop processing
Type 0: Always handles some part of the animation. If preceded by a Type 1 entry it will pop a matrix prior to the animation handling.
Type 0: Always handles some part of the animation. If preceded by a Type 1 entry it will pop a matrix prior to the
animation handling.
The "size" entry is used in a weird way. If you have a set of entries like:
@ -91,12 +92,12 @@ This is why I don't think referring to this as an "array" is really correct.
Iterating over this data not like iterating over a proper array at all.
I don't really understand the "thing" entries yet.
They seem to be used in render_limb_or_add_mtx to set some values in Vec3f which is then used to set some values in a Mat4.
This, I assume, is related to the matrix maniplation stuff that's used to actually accomplish the animation.
They seem to be used in render_limb_or_add_mtx to set some values in Vec3f which is then used to set some values in a
Mat4. This, I assume, is related to the matrix maniplation stuff that's used to actually accomplish the animation.
The unk_074 pointer points to a list of other pointers.
As best as I can tell only the penguins actually have multiple entries in this list, all the other animated objects have just 1 entry.
The pointers in this list have entires that look like this struct:
As best as I can tell only the penguins actually have multiple entries in this list, all the other animated objects have
just 1 entry. The pointers in this list have entires that look like this struct:
struct {
s32 always_set_to_something_but_never_used;
@ -136,7 +137,8 @@ So, for example, if you have a Struct 2 like:
d_course_koopa_troopa_beach_unk_data2,
d_course_koopa_troopa_beach_unk_data3,
d_course_koopa_troopa_beach_unk_data2 should be a Type 2 array while d_course_koopa_troopa_beach_unk_data3 is a Type 3 array.
d_course_koopa_troopa_beach_unk_data2 should be a Type 2 array while d_course_koopa_troopa_beach_unk_data3 is a Type 3
array.
d_course_koopa_troopa_beach_unk_data3 has entries that look like:
//limiter //offset
@ -144,17 +146,19 @@ d_course_koopa_troopa_beach_unk_data3 has entries that look like:
0x0037, 0x0001,
0x0001, 0x0000,
In practice the limiter value is always 1 or the animation length, meaning that you either choose 0 or the current animation timer.
There's never a situation where you will choose the animation timer until it hits X and then swap to 0.
In practice the limiter value is always 1 or the animation length, meaning that you either choose 0 or the current
animation timer. There's never a situation where you will choose the animation timer until it hits X and then swap to 0.
Its always one or the other, never swapping.
The first triplet is used in render_armature to access the Type 2 array and the values accessed is placed into sOriginalPosAnimation.
sOriginalPosAnimation is a Vec3s is then used to set the values of some Vec3f in render_limb_or_add_mtx.
All further triplets are used in render_limb_or_add_mtx to collect Type 2 values to another Vec3s local to the function.
Both the local Vec3s and Vec3f are used to create a Mat4, which is then converted to a Mtx, which is then pushed into the matrix pool.
The first triplet is used in render_armature to access the Type 2 array and the values accessed is placed into
sOriginalPosAnimation. sOriginalPosAnimation is a Vec3s is then used to set the values of some Vec3f in
render_limb_or_add_mtx. All further triplets are used in render_limb_or_add_mtx to collect Type 2 values to another
Vec3s local to the function. Both the local Vec3s and Vec3f are used to create a Mat4, which is then converted to a Mtx,
which is then pushed into the matrix pool.
The chosen values are then used to access the Type 2 array and the value accessed is placed into sOriginalPosAnimation.
sOriginalPosAnimation is a Vec3s that is used to set values in the some Vec3f that goes on to be used to modify the same Mat4 that the `thing` values are placed into.
sOriginalPosAnimation is a Vec3s that is used to set values in the some Vec3f that goes on to be used to modify the same
Mat4 that the `thing` values are placed into.
*/
@ -164,27 +168,23 @@ sOriginalPosAnimation is a Vec3s that is used to set values in the some Vec3f th
#define ANIMATION_POP_MATRIX SIMPLE_ANIMATION_INSTRUCTION(POP_MATRIX)
#define ANIMATION_STOP SIMPLE_ANIMATION_INSTRUCTION(STOP_ANIMATION)
//! the pos is relative to the previous RENDER_MODEL_OR_ADD_POS if ANIMATION_DISABLE_AUTOMATIC_POP is used
#define ANIMATION_RENDER_MODEL_AT(model, x, y, z) RENDER_MODEL_OR_ADD_POS, 0x00000007, 0x00000000, (u32) model, x, y, z
#define ANIMATION_RENDER_MODEL_AT(model, x, y, z) RENDER_MODEL_OR_ADD_POS, 0x00000007, 0x00000000, (s64) model, x, y, z
//! use RENDER_MODEL_OR_ADD_POS
#define ANIMATION_RENDER_MODEL(model) ANIMATION_RENDER_MODEL_AT(model, 0x00000000, 0x00000000, 0x00000000)
//! use RENDER_MODEL_OR_ADD_POS
#define ANIMATION_ADD_POS(x,y,z) ANIMATION_RENDER_MODEL_AT((u32)NULL, x, y, z)
#define ANIMATION_ADD_POS(x, y, z) ANIMATION_RENDER_MODEL_AT((s64) NULL, x, y, z)
enum animation_type {
RENDER_MODEL_OR_ADD_POS,
DISABLE_AUTOMATIC_POP_MATRIX,
POP_MATRIX,
STOP_ANIMATION
};
enum animation_type { RENDER_MODEL_OR_ADD_POS, DISABLE_AUTOMATIC_POP_MATRIX, POP_MATRIX, STOP_ANIMATION };
/**
* @brief The armature is associated with an AnimationLimbVector which is equal to the number of RENDER_MODEL_OR_ADD_POS in the armature
* @brief The armature is associated with an AnimationLimbVector which is equal to the number of RENDER_MODEL_OR_ADD_POS
* in the armature
*/
typedef struct {
/* 0x00 */ s64 type;
/* 0x04 */ s64 size;
/* 0x08 */ s64 always_zero_never_used;
/* 0x0C */ Gfx *model;
/* 0x0C */ Gfx* model;
/* 0x10 */ s64 pos[3];
} Armature;
@ -193,7 +193,8 @@ typedef struct {
/* 0x02 */ u16 indexCycle;
} AnimationCycleSpec;
//! the first are the original position and other are animation specification for each "limb" who correspond to each RENDER_MODEL_OR_ADD_POS so ANIMATION_RENDER_MODEL and ANIMATION_ADD_POS
//! the first are the original position and other are animation specification for each "limb" who correspond to each
//! RENDER_MODEL_OR_ADD_POS so ANIMATION_RENDER_MODEL and ANIMATION_ADD_POS
typedef AnimationCycleSpec AnimationLimbVector[3];
typedef struct {
@ -201,17 +202,17 @@ typedef struct {
/* 0x04 */ s32 always_zero_never_used;
/* 0x08 */ s16 animation_length;
/* 0x0A */ u16 has_value_but_never_used;
/* 0x0C */ s16 *angle_array;
/* 0x10 */ AnimationLimbVector *animation_cycle_spec_vector;
/* 0x0C */ s16* angle_array;
/* 0x10 */ AnimationLimbVector* animation_cycle_spec_vector;
} Animation;
/* Function Prototypes */
void convert_to_fixed_point_matrix_animation(Mtx *dest, Mat4 src);
void mtxf_translate_rotate2(Mat4 dest, Vec3f b, Vec3s c);
s16 get_animation_length(Animation **, s16);
void convert_to_fixed_point_matrix_animation(Mtx* dest, Mat4 src);
void mtxf_translate_rotate2(Mat4 dest, Vec3f pos, Vec3s angle);
s16 get_animation_length(Animation**, s16);
void render_limb_or_add_mtx(Armature*, s16*, AnimationLimbVector, s32);
void render_armature(Armature*, Animation*, s16);
s16 render_animated_model(Armature*, Animation**, s16, s16);
s16 render_animated_model(Armature*, Animation**, s16, s16);
#endif

View File

@ -6,32 +6,30 @@
#include "../buffers/audio_heap.h"
struct ReverbSettingsEU sReverbSettings[] = {
{0x01, 0x28, 0x4fff},
{0x01, 0x14, 0x5fff},
{ 0x01, 0x28, 0x4fff },
{ 0x01, 0x14, 0x5fff },
};
struct AudioSessionSettingsEU gAudioSessionPresets[] = {
{ 0x000068b0, 0x01, 0x18, 0x01, 0x00, &sReverbSettings[0], 0x7fff, 0x0000, 0x00002a00, 0x00004600,
0x00000000, 0x00005800, 0x00002800, 0x00000000 },
{ 0x000068b0, 0x01, 0x18, 0x01, 0x00, &sReverbSettings[0], 0x7fff, 0x0000, 0x00002a00, 0x00004600, 0x00000000,
0x00005800, 0x00002800, 0x00000000 },
{ 0x000068b0, 0x01, 0x14, 0x01, 0x00, &sReverbSettings[0], 0x7fff, 0x0000, 0x00002a00, 0x00004600,
0x00000000, 0x00005800, 0x00002800, 0x00000000 },
{ 0x000068b0, 0x01, 0x14, 0x01, 0x00, &sReverbSettings[0], 0x7fff, 0x0000, 0x00002a00, 0x00004600, 0x00000000,
0x00005800, 0x00002800, 0x00000000 },
{ 0x000068b0, 0x01, 0x1c, 0x01, 0x00, &sReverbSettings[0], 0x7fff, 0x0000, 0x00002a00, 0x00004600,
0x00000000, 0x00005800, 0x00002800, 0x00000000 },
{ 0x000068b0, 0x01, 0x1c, 0x01, 0x00, &sReverbSettings[0], 0x7fff, 0x0000, 0x00002a00, 0x00004600, 0x00000000,
0x00005800, 0x00002800, 0x00000000 },
{ 0x000068b0, 0x01, 0x1c, 0x01, 0x00, &sReverbSettings[0], 0x7fff, 0x0000, 0x00002a00, 0x00004600,
0x00000000, 0x00005800, 0x00002800, 0x00000000 },
{ 0x000068b0, 0x01, 0x1c, 0x01, 0x00, &sReverbSettings[0], 0x7fff, 0x0000, 0x00002a00, 0x00004600, 0x00000000,
0x00005800, 0x00002800, 0x00000000 },
{ 0x000068b0, 0x01, 0x10, 0x01, 0x00, &sReverbSettings[0], 0x7fff, 0x0000, 0x00002a00, 0x00004600,
0x00000000, 0x00004800, 0x00002000, 0x00000000 },
{ 0x000068b0, 0x01, 0x10, 0x01, 0x00, &sReverbSettings[0], 0x7fff, 0x0000, 0x00002a00, 0x00004600, 0x00000000,
0x00004800, 0x00002000, 0x00000000 },
{ 0x000068b0, 0x01, 0x10, 0x01, 0x00, &sReverbSettings[1], 0x7fff, 0x0000, 0x00002a00, 0x00004600,
0x00000000, 0x00004800, 0x00002000, 0x00000000 },
{ 0x000068b0, 0x01, 0x10, 0x01, 0x00, &sReverbSettings[1], 0x7fff, 0x0000, 0x00002a00, 0x00004600, 0x00000000,
0x00004800, 0x00002000, 0x00000000 },
};
s8 gUnusedCount800EA5C8 = 0x1c;
s16 gTatumsPerBeat = TATUMS_PER_BEAT;
s32 gAudioHeapSize = AUDIO_HEAP_SIZE;

View File

@ -6,286 +6,170 @@
#include "effects.h"
s16 sSawtoothWaves[256] = {
0, 1023, 2047, 3071, 4095, 5119, 6143, 7167,
8191, 9215, 10239, 11263, 12287, 13311, 14335, 15359,
16383, 17407, 18431, 19455, 20479, 21503, 22527, 23551,
24575, 25599, 26623, 27647, 28671, 29695, 30719, 31743,
-32767, -31743, -30719, -29695, -28671, -27647, -26623, -25599,
-24575, -23551, -22527, -21503, -20479, -19455, -18431, -17407,
-16383, -15359, -14335, -13311, -12287, -11263, -10239, -9215,
-8191, -7167, -6143, -5119, -4095, -3071, -2047, -1023,
0, 2047, 4095, 6143, 8191, 10239, 12287, 14335,
16383, 18431, 20479, 22527, 24575, 26623, 28671, 30719,
-32767, -30719, -28671, -26623, -24575, -22527, -20479, -18431,
-16383, -14335, -12287, -10239, -8191, -6143, -4095, -2047,
0, 2047, 4095, 6143, 8191, 10239, 12287, 14335,
16383, 18431, 20479, 22527, 24575, 26623, 28671, 30719,
-32767, -30719, -28671, -26623, -24575, -22527, -20479, -18431,
-16383, -14335, -12287, -10239, -8191, -6143, -4095, -2047,
0, 4095, 8191, 12287, 16383, 20479, 24575, 28671,
-32767, -28671, -24575, -20479, -16383, -12287, -8191, -4095,
0, 4095, 8191, 12287, 16383, 20479, 24575, 28671,
-32767, -28671, -24575, -20479, -16383, -12287, -8191, -4095,
0, 4095, 8191, 12287, 16383, 20479, 24575, 28671,
-32767, -28671, -24575, -20479, -16383, -12287, -8191, -4095,
0, 4095, 8191, 12287, 16383, 20479, 24575, 28671,
-32767, -28671, -24575, -20479, -16383, -12287, -8191, -4095,
0, 8191, 16383, 24575, -32767, -24575, -16383, -8191,
0, 8191, 16383, 24575, -32767, -24575, -16383, -8191,
0, 8191, 16383, 24575, -32767, -24575, -16383, -8191,
0, 8191, 16383, 24575, -32767, -24575, -16383, -8191,
0, 8191, 16383, 24575, -32767, -24575, -16383, -8191,
0, 8191, 16383, 24575, -32767, -24575, -16383, -8191,
0, 8191, 16383, 24575, -32767, -24575, -16383, -8191,
0, 8191, 16383, 24575, -32767, -24575, -16383, -8191,
0, 1023, 2047, 3071, 4095, 5119, 6143, 7167, 8191, 9215, 10239, 11263, 12287, 13311,
14335, 15359, 16383, 17407, 18431, 19455, 20479, 21503, 22527, 23551, 24575, 25599, 26623, 27647,
28671, 29695, 30719, 31743, -32767, -31743, -30719, -29695, -28671, -27647, -26623, -25599, -24575, -23551,
-22527, -21503, -20479, -19455, -18431, -17407, -16383, -15359, -14335, -13311, -12287, -11263, -10239, -9215,
-8191, -7167, -6143, -5119, -4095, -3071, -2047, -1023, 0, 2047, 4095, 6143, 8191, 10239,
12287, 14335, 16383, 18431, 20479, 22527, 24575, 26623, 28671, 30719, -32767, -30719, -28671, -26623,
-24575, -22527, -20479, -18431, -16383, -14335, -12287, -10239, -8191, -6143, -4095, -2047, 0, 2047,
4095, 6143, 8191, 10239, 12287, 14335, 16383, 18431, 20479, 22527, 24575, 26623, 28671, 30719,
-32767, -30719, -28671, -26623, -24575, -22527, -20479, -18431, -16383, -14335, -12287, -10239, -8191, -6143,
-4095, -2047, 0, 4095, 8191, 12287, 16383, 20479, 24575, 28671, -32767, -28671, -24575, -20479,
-16383, -12287, -8191, -4095, 0, 4095, 8191, 12287, 16383, 20479, 24575, 28671, -32767, -28671,
-24575, -20479, -16383, -12287, -8191, -4095, 0, 4095, 8191, 12287, 16383, 20479, 24575, 28671,
-32767, -28671, -24575, -20479, -16383, -12287, -8191, -4095, 0, 4095, 8191, 12287, 16383, 20479,
24575, 28671, -32767, -28671, -24575, -20479, -16383, -12287, -8191, -4095, 0, 8191, 16383, 24575,
-32767, -24575, -16383, -8191, 0, 8191, 16383, 24575, -32767, -24575, -16383, -8191, 0, 8191,
16383, 24575, -32767, -24575, -16383, -8191, 0, 8191, 16383, 24575, -32767, -24575, -16383, -8191,
0, 8191, 16383, 24575, -32767, -24575, -16383, -8191, 0, 8191, 16383, 24575, -32767, -24575,
-16383, -8191, 0, 8191, 16383, 24575, -32767, -24575, -16383, -8191, 0, 8191, 16383, 24575,
-32767, -24575, -16383, -8191,
};
s16 sTriangleWaves[256] = {
0, 2047, 4095, 6143, 8191, 10239, 12287, 14335,
16383, 18431, 20479, 22527, 24575, 26623, 28671, 30719,
32767, 30719, 28671, 26623, 24575, 22527, 20479, 18431,
16383, 14335, 12287, 10239, 8191, 6143, 4095, 2047,
0, -2047, -4095, -6143, -8191, -10239, -12287, -14335,
-16383, -18431, -20479, -22527, -24575, -26623, -28671, -30719,
-32767, -30719, -28671, -26623, -24575, -22527, -20479, -18431,
-16383, -14335, -12287, -10239, -8191, -6143, -4095, -2047,
0, 4095, 8191, 12287, 16383, 20479, 24575, 28671,
32767, 28671, 24575, 20479, 16383, 12287, 8191, 4095,
0, -4095, -8191, -12287, -16383, -20479, -24575, -28671,
-32767, -28671, -24575, -20479, -16383, -12287, -8191, -4095,
0, 4095, 8191, 12287, 16383, 20479, 24575, 28671,
32767, 28671, 24575, 20479, 16383, 12287, 8191, 4095,
0, -4095, -8191, -12287, -16383, -20479, -24575, -28671,
-32767, -28671, -24575, -20479, -16383, -12287, -8191, -4095,
0, 8191, 16383, 24575, 32767, 24575, 16383, 8191,
0, -8191, -16383, -24575, -32767, -24575, -16383, -8191,
0, 8191, 16383, 24575, 32767, 24575, 16383, 8191,
0, -8191, -16383, -24575, -32767, -24575, -16383, -8191,
0, 8191, 16383, 24575, 32767, 24575, 16383, 8191,
0, -8191, -16383, -24575, -32767, -24575, -16383, -8191,
0, 8191, 16383, 24575, 32767, 24575, 16383, 8191,
0, -8191, -16383, -24575, -32767, -24575, -16383, -8191,
0, 16383, 32767, 16383, 0, -16383, -32767, -16383,
0, 16383, 32767, 16383, 0, -16383, -32767, -16383,
0, 16383, 32767, 16383, 0, -16383, -32767, -16383,
0, 16383, 32767, 16383, 0, -16383, -32767, -16383,
0, 16383, 32767, 16383, 0, -16383, -32767, -16383,
0, 16383, 32767, 16383, 0, -16383, -32767, -16383,
0, 16383, 32767, 16383, 0, -16383, -32767, -16383,
0, 16383, 32767, 16383, 0, -16383, -32767, -16383,
0, 2047, 4095, 6143, 8191, 10239, 12287, 14335, 16383, 18431, 20479, 22527, 24575, 26623,
28671, 30719, 32767, 30719, 28671, 26623, 24575, 22527, 20479, 18431, 16383, 14335, 12287, 10239,
8191, 6143, 4095, 2047, 0, -2047, -4095, -6143, -8191, -10239, -12287, -14335, -16383, -18431,
-20479, -22527, -24575, -26623, -28671, -30719, -32767, -30719, -28671, -26623, -24575, -22527, -20479, -18431,
-16383, -14335, -12287, -10239, -8191, -6143, -4095, -2047, 0, 4095, 8191, 12287, 16383, 20479,
24575, 28671, 32767, 28671, 24575, 20479, 16383, 12287, 8191, 4095, 0, -4095, -8191, -12287,
-16383, -20479, -24575, -28671, -32767, -28671, -24575, -20479, -16383, -12287, -8191, -4095, 0, 4095,
8191, 12287, 16383, 20479, 24575, 28671, 32767, 28671, 24575, 20479, 16383, 12287, 8191, 4095,
0, -4095, -8191, -12287, -16383, -20479, -24575, -28671, -32767, -28671, -24575, -20479, -16383, -12287,
-8191, -4095, 0, 8191, 16383, 24575, 32767, 24575, 16383, 8191, 0, -8191, -16383, -24575,
-32767, -24575, -16383, -8191, 0, 8191, 16383, 24575, 32767, 24575, 16383, 8191, 0, -8191,
-16383, -24575, -32767, -24575, -16383, -8191, 0, 8191, 16383, 24575, 32767, 24575, 16383, 8191,
0, -8191, -16383, -24575, -32767, -24575, -16383, -8191, 0, 8191, 16383, 24575, 32767, 24575,
16383, 8191, 0, -8191, -16383, -24575, -32767, -24575, -16383, -8191, 0, 16383, 32767, 16383,
0, -16383, -32767, -16383, 0, 16383, 32767, 16383, 0, -16383, -32767, -16383, 0, 16383,
32767, 16383, 0, -16383, -32767, -16383, 0, 16383, 32767, 16383, 0, -16383, -32767, -16383,
0, 16383, 32767, 16383, 0, -16383, -32767, -16383, 0, 16383, 32767, 16383, 0, -16383,
-32767, -16383, 0, 16383, 32767, 16383, 0, -16383, -32767, -16383, 0, 16383, 32767, 16383,
0, -16383, -32767, -16383,
};
s16 sSineWaves[256] = {
0, 3211, 6392, 9511, 12539, 15446, 18204, 20787,
23169, 25329, 27244, 28897, 30272, 31356, 32137, 32609,
32767, 32609, 32137, 31356, 30272, 28897, 27244, 25329,
23169, 20787, 18204, 15446, 12539, 9511, 6392, 3211,
0, -3211, -6392, -9511, -12539, -15446, -18204, -20787,
-23169, -25329, -27244, -28897, -30272, -31356, -32137, -32609,
-32767, -32609, -32137, -31356, -30272, -28897, -27244, -25329,
-23169, -20787, -18204, -15446, -12539, -9511, -6392, -3211,
0, 6392, 12539, 18204, 23169, 27244, 30272, 32137,
32767, 32137, 30272, 27244, 23169, 18204, 12539, 6392,
0, -6392, -12539, -18204, -23169, -27244, -30272, -32137,
-32767, -32137, -30272, -27244, -23169, -18204, -12539, -6392,
0, 6392, 12539, 18204, 23169, 27244, 30272, 32137,
32767, 32137, 30272, 27244, 23169, 18204, 12539, 6392,
0, -6392, -12539, -18204, -23169, -27244, -30272, -32137,
-32767, -32137, -30272, -27244, -23169, -18204, -12539, -6392,
0, 12539, 23169, 30272, 32767, 30272, 23169, 12539,
0, -12539, -23169, -30272, -32767, -30272, -23169, -12539,
0, 12539, 23169, 30272, 32767, 30272, 23169, 12539,
0, -12539, -23169, -30272, -32767, -30272, -23169, -12539,
0, 12539, 23169, 30272, 32767, 30272, 23169, 12539,
0, -12539, -23169, -30272, -32767, -30272, -23169, -12539,
0, 12539, 23169, 30272, 32767, 30272, 23169, 12539,
0, -12539, -23169, -30272, -32767, -30272, -23169, -12539,
0, 23169, 32767, 23169, 0, -23169, -32767, -23169,
0, 23169, 32767, 23169, 0, -23169, -32767, -23169,
0, 23169, 32767, 23169, 0, -23169, -32767, -23169,
0, 23169, 32767, 23169, 0, -23169, -32767, -23169,
0, 23169, 32767, 23169, 0, -23169, -32767, -23169,
0, 23169, 32767, 23169, 0, -23169, -32767, -23169,
0, 23169, 32767, 23169, 0, -23169, -32767, -23169,
0, 23169, 32767, 23169, 0, -23169, -32767, -23169,
0, 3211, 6392, 9511, 12539, 15446, 18204, 20787, 23169, 25329, 27244, 28897, 30272, 31356,
32137, 32609, 32767, 32609, 32137, 31356, 30272, 28897, 27244, 25329, 23169, 20787, 18204, 15446,
12539, 9511, 6392, 3211, 0, -3211, -6392, -9511, -12539, -15446, -18204, -20787, -23169, -25329,
-27244, -28897, -30272, -31356, -32137, -32609, -32767, -32609, -32137, -31356, -30272, -28897, -27244, -25329,
-23169, -20787, -18204, -15446, -12539, -9511, -6392, -3211, 0, 6392, 12539, 18204, 23169, 27244,
30272, 32137, 32767, 32137, 30272, 27244, 23169, 18204, 12539, 6392, 0, -6392, -12539, -18204,
-23169, -27244, -30272, -32137, -32767, -32137, -30272, -27244, -23169, -18204, -12539, -6392, 0, 6392,
12539, 18204, 23169, 27244, 30272, 32137, 32767, 32137, 30272, 27244, 23169, 18204, 12539, 6392,
0, -6392, -12539, -18204, -23169, -27244, -30272, -32137, -32767, -32137, -30272, -27244, -23169, -18204,
-12539, -6392, 0, 12539, 23169, 30272, 32767, 30272, 23169, 12539, 0, -12539, -23169, -30272,
-32767, -30272, -23169, -12539, 0, 12539, 23169, 30272, 32767, 30272, 23169, 12539, 0, -12539,
-23169, -30272, -32767, -30272, -23169, -12539, 0, 12539, 23169, 30272, 32767, 30272, 23169, 12539,
0, -12539, -23169, -30272, -32767, -30272, -23169, -12539, 0, 12539, 23169, 30272, 32767, 30272,
23169, 12539, 0, -12539, -23169, -30272, -32767, -30272, -23169, -12539, 0, 23169, 32767, 23169,
0, -23169, -32767, -23169, 0, 23169, 32767, 23169, 0, -23169, -32767, -23169, 0, 23169,
32767, 23169, 0, -23169, -32767, -23169, 0, 23169, 32767, 23169, 0, -23169, -32767, -23169,
0, 23169, 32767, 23169, 0, -23169, -32767, -23169, 0, 23169, 32767, 23169, 0, -23169,
-32767, -23169, 0, 23169, 32767, 23169, 0, -23169, -32767, -23169, 0, 23169, 32767, 23169,
0, -23169, -32767, -23169,
};
s16 sSquareWaves[256] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
-32767, -32767, -32767, -32767, -32767, -32767, -32767, -32767,
-32767, -32767, -32767, -32767, -32767, -32767, -32767, -32767,
0, 0, 0, 0, 0, 0, 0, 0,
32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
0, 0, 0, 0, 0, 0, 0, 0,
-32767, -32767, -32767, -32767, -32767, -32767, -32767, -32767,
0, 0, 0, 0, 0, 0, 0, 0,
32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
0, 0, 0, 0, 0, 0, 0, 0,
-32767, -32767, -32767, -32767, -32767, -32767, -32767, -32767,
0, 0, 0, 0, 32767, 32767, 32767, 32767,
0, 0, 0, 0, -32767, -32767, -32767, -32767,
0, 0, 0, 0, 32767, 32767, 32767, 32767,
0, 0, 0, 0, -32767, -32767, -32767, -32767,
0, 0, 0, 0, 32767, 32767, 32767, 32767,
0, 0, 0, 0, -32767, -32767, -32767, -32767,
0, 0, 0, 0, 32767, 32767, 32767, 32767,
0, 0, 0, 0, -32767, -32767, -32767, -32767,
0, 0, 32767, 32767, 0, 0, -32767, -32767,
0, 0, 32767, 32767, 0, 0, -32767, -32767,
0, 0, 32767, 32767, 0, 0, -32767, -32767,
0, 0, 32767, 32767, 0, 0, -32767, -32767,
0, 0, 32767, 32767, 0, 0, -32767, -32767,
0, 0, 32767, 32767, 0, 0, -32767, -32767,
0, 0, 32767, 32767, 0, 0, -32767, -32767,
0, 0, 32767, 32767, 0, 0, -32767, -32767,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
32767, 32767, 32767, 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, -32767, -32767, -32767, -32767, -32767, -32767, -32767, -32767,
-32767, -32767, -32767, -32767, -32767, -32767, -32767, -32767, 0, 0, 0, 0, 0, 0,
0, 0, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 0, 0, 0,
0, 0, 0, 0, -32767, -32767, -32767, -32767, -32767, -32767, -32767, -32767, 0, 0,
0, 0, 0, 0, 0, 0, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
0, 0, 0, 0, 0, 0, 0, 0, -32767, -32767, -32767, -32767, -32767, -32767,
-32767, -32767, 0, 0, 0, 0, 32767, 32767, 32767, 32767, 0, 0, 0, 0,
-32767, -32767, -32767, -32767, 0, 0, 0, 0, 32767, 32767, 32767, 32767, 0, 0,
0, 0, -32767, -32767, -32767, -32767, 0, 0, 0, 0, 32767, 32767, 32767, 32767,
0, 0, 0, 0, -32767, -32767, -32767, -32767, 0, 0, 0, 0, 32767, 32767,
32767, 32767, 0, 0, 0, 0, -32767, -32767, -32767, -32767, 0, 0, 32767, 32767,
0, 0, -32767, -32767, 0, 0, 32767, 32767, 0, 0, -32767, -32767, 0, 0,
32767, 32767, 0, 0, -32767, -32767, 0, 0, 32767, 32767, 0, 0, -32767, -32767,
0, 0, 32767, 32767, 0, 0, -32767, -32767, 0, 0, 32767, 32767, 0, 0,
-32767, -32767, 0, 0, 32767, 32767, 0, 0, -32767, -32767, 0, 0, 32767, 32767,
0, 0, -32767, -32767,
};
s16 sUnknownWave6[256] = {
0, -25689, -25791, 27803, -27568, -21030, 22174, 6298,
27071, -18531, 28649, 2284, 3380, 6890, -12682, -21114,
10000, -24520, 32296, 12248, 15096, 15354, -12021, -31545,
-12929, 6388, -11064, 30456, -30316, -21999, 29691, 27649,
0, -27649, -29691, 21999, 30316, -30457, 11064, -6387,
12929, 31544, 12021, -15353, -15096, -12249, -32296, 24521,
-10000, 21113, 12682, -6889, -3380, -2285, -28649, 18532,
-27071, -6299, -22174, 21031, 27568, -27804, 25791, 25690,
0, -25791, -27568, 22174, 27071, 28649, 3380, -12682,
10000, 32296, 15096, -12021, -12929, -11064, -30316, 29691,
0, -29691, 30316, 11064, 12929, 12021, -15096, -32296,
-10000, 12682, -3380, -28649, -27071, -22174, 27568, 25791,
0, -25791, -27568, 22174, 27071, 28649, 3380, -12682,
10000, 32296, 15096, -12021, -12929, -11064, -30316, 29691,
0, -29691, 30316, 11064, 12929, 12021, -15096, -32296,
-10000, 12682, -3380, -28649, -27071, -22174, 27568, 25791,
0, -27568, 27071, 3380, 10000, 15096, -12929, -30316,
0, 30316, 12929, -15096, -10000, -3380, -27071, 27568,
0, -27568, 27071, 3380, 10000, 15096, -12929, -30316,
0, 30316, 12929, -15096, -10000, -3380, -27071, 27568,
0, -27568, 27071, 3380, 10000, 15096, -12929, -30316,
0, 30316, 12929, -15096, -10000, -3380, -27071, 27568,
0, -27568, 27071, 3380, 10000, 15096, -12929, -30316,
0, 30316, 12929, -15096, -10000, -3380, -27071, 27568,
0, 27071, 10000, -12929, 0, 12929, -10000, -27071,
0, 27071, 10000, -12929, 0, 12929, -10000, -27071,
0, 27071, 10000, -12929, 0, 12929, -10000, -27071,
0, 27071, 10000, -12929, 0, 12929, -10000, -27071,
0, 27071, 10000, -12929, 0, 12929, -10000, -27071,
0, 27071, 10000, -12929, 0, 12929, -10000, -27071,
0, 27071, 10000, -12929, 0, 12929, -10000, -27071,
0, 27071, 10000, -12929, 0, 12929, -10000, -27071,
0, -25689, -25791, 27803, -27568, -21030, 22174, 6298, 27071, -18531, 28649, 2284, 3380, 6890,
-12682, -21114, 10000, -24520, 32296, 12248, 15096, 15354, -12021, -31545, -12929, 6388, -11064, 30456,
-30316, -21999, 29691, 27649, 0, -27649, -29691, 21999, 30316, -30457, 11064, -6387, 12929, 31544,
12021, -15353, -15096, -12249, -32296, 24521, -10000, 21113, 12682, -6889, -3380, -2285, -28649, 18532,
-27071, -6299, -22174, 21031, 27568, -27804, 25791, 25690, 0, -25791, -27568, 22174, 27071, 28649,
3380, -12682, 10000, 32296, 15096, -12021, -12929, -11064, -30316, 29691, 0, -29691, 30316, 11064,
12929, 12021, -15096, -32296, -10000, 12682, -3380, -28649, -27071, -22174, 27568, 25791, 0, -25791,
-27568, 22174, 27071, 28649, 3380, -12682, 10000, 32296, 15096, -12021, -12929, -11064, -30316, 29691,
0, -29691, 30316, 11064, 12929, 12021, -15096, -32296, -10000, 12682, -3380, -28649, -27071, -22174,
27568, 25791, 0, -27568, 27071, 3380, 10000, 15096, -12929, -30316, 0, 30316, 12929, -15096,
-10000, -3380, -27071, 27568, 0, -27568, 27071, 3380, 10000, 15096, -12929, -30316, 0, 30316,
12929, -15096, -10000, -3380, -27071, 27568, 0, -27568, 27071, 3380, 10000, 15096, -12929, -30316,
0, 30316, 12929, -15096, -10000, -3380, -27071, 27568, 0, -27568, 27071, 3380, 10000, 15096,
-12929, -30316, 0, 30316, 12929, -15096, -10000, -3380, -27071, 27568, 0, 27071, 10000, -12929,
0, 12929, -10000, -27071, 0, 27071, 10000, -12929, 0, 12929, -10000, -27071, 0, 27071,
10000, -12929, 0, 12929, -10000, -27071, 0, 27071, 10000, -12929, 0, 12929, -10000, -27071,
0, 27071, 10000, -12929, 0, 12929, -10000, -27071, 0, 27071, 10000, -12929, 0, 12929,
-10000, -27071, 0, 27071, 10000, -12929, 0, 12929, -10000, -27071, 0, 27071, 10000, -12929,
0, 12929, -10000, -27071,
};
s16 gUnknownWave7[256] = {
0, 16316, 20148, 20257, 27209, -32657, 29264, 27259,
-29394, -21494, -26410, 30770, 30033, 29130, 20206, 14129,
20000, 25677, 19024, 9146, 6921, 4506, -5868, -13122,
-7858, -1885, -7042, -14025, -11903, -8647, -12346, -12396,
0, 12396, 12346, 8647, 11903, 14024, 7042, 1886,
7858, 13121, 5868, -4505, -6921, -9147, -19024, -25676,
-20000, -14130, -20206, -29129, -30033, -30771, 26410, 21495,
29394, -27260, -29264, 32658, -27209, -20258, -20148, -16315,
0, 20148, 27209, 29264, -29394, -26410, 30033, 20206,
20000, 19024, 6921, -5868, -7858, -7042, -11903, -12346,
0, 12346, 11903, 7042, 7858, 5868, -6921, -19024,
-20000, -20206, -30033, 26410, 29394, -29264, -27209, -20148,
0, 20148, 27209, 29264, -29394, -26410, 30033, 20206,
20000, 19024, 6921, -5868, -7858, -7042, -11903, -12346,
0, 12346, 11903, 7042, 7858, 5868, -6921, -19024,
-20000, -20206, -30033, 26410, 29394, -29264, -27209, -20148,
0, 27209, -29394, 30033, 20000, 6921, -7858, -11903,
0, 11903, 7858, -6921, -20000, -30033, 29394, -27209,
0, 27209, -29394, 30033, 20000, 6921, -7858, -11903,
0, 11903, 7858, -6921, -20000, -30033, 29394, -27209,
0, 27209, -29394, 30033, 20000, 6921, -7858, -11903,
0, 11903, 7858, -6921, -20000, -30033, 29394, -27209,
0, 27209, -29394, 30033, 20000, 6921, -7858, -11903,
0, 11903, 7858, -6921, -20000, -30033, 29394, -27209,
0, -29394, 20000, -7858, 0, 7858, -20000, 29394,
0, -29394, 20000, -7858, 0, 7858, -20000, 29394,
0, -29394, 20000, -7858, 0, 7858, -20000, 29394,
0, -29394, 20000, -7858, 0, 7858, -20000, 29394,
0, -29394, 20000, -7858, 0, 7858, -20000, 29394,
0, -29394, 20000, -7858, 0, 7858, -20000, 29394,
0, -29394, 20000, -7858, 0, 7858, -20000, 29394,
0, -29394, 20000, -7858, 0, 7858, -20000, 29394,
0, 16316, 20148, 20257, 27209, -32657, 29264, 27259, -29394, -21494, -26410, 30770, 30033, 29130,
20206, 14129, 20000, 25677, 19024, 9146, 6921, 4506, -5868, -13122, -7858, -1885, -7042, -14025,
-11903, -8647, -12346, -12396, 0, 12396, 12346, 8647, 11903, 14024, 7042, 1886, 7858, 13121,
5868, -4505, -6921, -9147, -19024, -25676, -20000, -14130, -20206, -29129, -30033, -30771, 26410, 21495,
29394, -27260, -29264, 32658, -27209, -20258, -20148, -16315, 0, 20148, 27209, 29264, -29394, -26410,
30033, 20206, 20000, 19024, 6921, -5868, -7858, -7042, -11903, -12346, 0, 12346, 11903, 7042,
7858, 5868, -6921, -19024, -20000, -20206, -30033, 26410, 29394, -29264, -27209, -20148, 0, 20148,
27209, 29264, -29394, -26410, 30033, 20206, 20000, 19024, 6921, -5868, -7858, -7042, -11903, -12346,
0, 12346, 11903, 7042, 7858, 5868, -6921, -19024, -20000, -20206, -30033, 26410, 29394, -29264,
-27209, -20148, 0, 27209, -29394, 30033, 20000, 6921, -7858, -11903, 0, 11903, 7858, -6921,
-20000, -30033, 29394, -27209, 0, 27209, -29394, 30033, 20000, 6921, -7858, -11903, 0, 11903,
7858, -6921, -20000, -30033, 29394, -27209, 0, 27209, -29394, 30033, 20000, 6921, -7858, -11903,
0, 11903, 7858, -6921, -20000, -30033, 29394, -27209, 0, 27209, -29394, 30033, 20000, 6921,
-7858, -11903, 0, 11903, 7858, -6921, -20000, -30033, 29394, -27209, 0, -29394, 20000, -7858,
0, 7858, -20000, 29394, 0, -29394, 20000, -7858, 0, 7858, -20000, 29394, 0, -29394,
20000, -7858, 0, 7858, -20000, 29394, 0, -29394, 20000, -7858, 0, 7858, -20000, 29394,
0, -29394, 20000, -7858, 0, 7858, -20000, 29394, 0, -29394, 20000, -7858, 0, 7858,
-20000, 29394, 0, -29394, 20000, -7858, 0, 7858, -20000, 29394, 0, -29394, 20000, -7858,
0, 7858, -20000, 29394,
};
s16 *gWaveSamples[6] = { sSawtoothWaves, sTriangleWaves, sSineWaves, sSquareWaves, sUnknownWave6, gUnknownWave7 };
s16* gWaveSamples[6] = { sSawtoothWaves, sTriangleWaves, sSineWaves, sSquareWaves, sUnknownWave6, gUnknownWave7 };
//! @todo file boundary?
u32 fill[2] = {0x00000000, 0x00000000};
u32 fill[2] = { 0x00000000, 0x00000000 };
// Transforms a pitch scale factor in -127..127 into a frequency scale factor
// between -1 and +1 octave.
// gPitchBendFrequencyScale[k] = 0.5 * 2^(k/127)
f32 gPitchBendFrequencyScale[256] = {
0.5f, 0.5f, 0.502736f, 0.505488f,
0.508254f, 0.511036f, 0.513833f, 0.516645f,
0.519472f, 0.522315f, 0.525174f, 0.528048f,
0.530938f, 0.533843f, 0.536765f, 0.539702f,
0.542656f, 0.545626f, 0.548612f, 0.551614f,
0.554633f, 0.557669f, 0.560721f, 0.563789f,
0.566875f, 0.569977f, 0.573097f, 0.576233f,
0.579387f, 0.582558f, 0.585746f, 0.588951f,
0.592175f, 0.595415f, 0.598674f, 0.60195f,
0.605245f, 0.608557f, 0.611888f, 0.615236f,
0.618603f, 0.621989f, 0.625393f, 0.628815f,
0.632257f, 0.635717f, 0.639196f, 0.642694f,
0.646212f, 0.649748f, 0.653304f, 0.65688f,
0.660475f, 0.664089f, 0.667724f, 0.671378f,
0.675052f, 0.678747f, 0.682461f, 0.686196f,
0.689952f, 0.693727f, 0.697524f, 0.701341f,
0.70518f, 0.709039f, 0.712919f, 0.716821f,
0.720744f, 0.724689f, 0.728655f, 0.732642f,
0.736652f, 0.740684f, 0.744737f, 0.748813f,
0.752911f, 0.757031f, 0.761175f, 0.76534f,
0.769529f, 0.77374f, 0.777975f, 0.782232f,
0.786513f, 0.790818f, 0.795146f, 0.799497f,
0.803873f, 0.808272f, 0.812696f, 0.817144f,
0.821616f, 0.826112f, 0.830633f, 0.835179f,
0.83975f, 0.844346f, 0.848966f, 0.853613f,
0.858284f, 0.862982f, 0.867704f, 0.872453f,
0.877228f, 0.882029f, 0.886856f, 0.891709f,
0.89659f, 0.901496f, 0.90643f, 0.911391f,
0.916379f, 0.921394f, 0.926436f, 0.931507f,
0.936604f, 0.94173f, 0.946884f, 0.952066f,
0.957277f, 0.962516f, 0.967783f, 0.97308f,
0.978405f, 0.98376f, 0.989144f, 0.994557f,
1.0f, 1.005473f, 1.010975f, 1.016508f,
1.022071f, 1.027665f, 1.033289f, 1.038944f,
1.04463f, 1.050347f, 1.056095f, 1.061875f,
1.067687f, 1.07353f, 1.079405f, 1.085312f,
1.091252f, 1.097224f, 1.103229f, 1.109267f,
1.115337f, 1.121441f, 1.127579f, 1.13375f,
1.139955f, 1.146193f, 1.152466f, 1.158773f,
1.165115f, 1.171491f, 1.177903f, 1.184349f,
1.190831f, 1.197348f, 1.203901f, 1.210489f,
1.217114f, 1.223775f, 1.230473f, 1.237207f,
1.243978f, 1.250786f, 1.257631f, 1.264514f,
1.271434f, 1.278392f, 1.285389f, 1.292423f,
1.299497f, 1.306608f, 1.313759f, 1.320949f,
1.328178f, 1.335447f, 1.342756f, 1.350104f,
1.357493f, 1.364922f, 1.372392f, 1.379903f,
1.387455f, 1.395048f, 1.402683f, 1.41036f,
1.418078f, 1.425839f, 1.433642f, 1.441488f,
1.449377f, 1.457309f, 1.465285f, 1.473304f,
1.481367f, 1.489474f, 1.497626f, 1.505822f,
1.514063f, 1.522349f, 1.530681f, 1.539058f,
1.547481f, 1.55595f, 1.564465f, 1.573027f,
1.581636f, 1.590292f, 1.598995f, 1.607746f,
1.616545f, 1.625392f, 1.634287f, 1.643231f,
1.652224f, 1.661266f, 1.670358f, 1.6795f,
1.688691f, 1.697933f, 1.707225f, 1.716569f,
1.725963f, 1.735409f, 1.744906f, 1.754456f,
1.764058f, 1.773712f, 1.783419f, 1.793179f,
1.802993f, 1.81286f, 1.822782f, 1.832757f,
1.842788f, 1.852873f, 1.863013f, 1.873209f,
1.883461f, 1.893768f, 1.904132f, 1.914553f,
1.925031f, 1.935567f, 1.946159f, 1.95681f,
1.96752f, 1.978287f, 1.989114f, 2.0f
0.5f, 0.5f, 0.502736f, 0.505488f, 0.508254f, 0.511036f, 0.513833f, 0.516645f, 0.519472f, 0.522315f,
0.525174f, 0.528048f, 0.530938f, 0.533843f, 0.536765f, 0.539702f, 0.542656f, 0.545626f, 0.548612f, 0.551614f,
0.554633f, 0.557669f, 0.560721f, 0.563789f, 0.566875f, 0.569977f, 0.573097f, 0.576233f, 0.579387f, 0.582558f,
0.585746f, 0.588951f, 0.592175f, 0.595415f, 0.598674f, 0.60195f, 0.605245f, 0.608557f, 0.611888f, 0.615236f,
0.618603f, 0.621989f, 0.625393f, 0.628815f, 0.632257f, 0.635717f, 0.639196f, 0.642694f, 0.646212f, 0.649748f,
0.653304f, 0.65688f, 0.660475f, 0.664089f, 0.667724f, 0.671378f, 0.675052f, 0.678747f, 0.682461f, 0.686196f,
0.689952f, 0.693727f, 0.697524f, 0.701341f, 0.70518f, 0.709039f, 0.712919f, 0.716821f, 0.720744f, 0.724689f,
0.728655f, 0.732642f, 0.736652f, 0.740684f, 0.744737f, 0.748813f, 0.752911f, 0.757031f, 0.761175f, 0.76534f,
0.769529f, 0.77374f, 0.777975f, 0.782232f, 0.786513f, 0.790818f, 0.795146f, 0.799497f, 0.803873f, 0.808272f,
0.812696f, 0.817144f, 0.821616f, 0.826112f, 0.830633f, 0.835179f, 0.83975f, 0.844346f, 0.848966f, 0.853613f,
0.858284f, 0.862982f, 0.867704f, 0.872453f, 0.877228f, 0.882029f, 0.886856f, 0.891709f, 0.89659f, 0.901496f,
0.90643f, 0.911391f, 0.916379f, 0.921394f, 0.926436f, 0.931507f, 0.936604f, 0.94173f, 0.946884f, 0.952066f,
0.957277f, 0.962516f, 0.967783f, 0.97308f, 0.978405f, 0.98376f, 0.989144f, 0.994557f, 1.0f, 1.005473f,
1.010975f, 1.016508f, 1.022071f, 1.027665f, 1.033289f, 1.038944f, 1.04463f, 1.050347f, 1.056095f, 1.061875f,
1.067687f, 1.07353f, 1.079405f, 1.085312f, 1.091252f, 1.097224f, 1.103229f, 1.109267f, 1.115337f, 1.121441f,
1.127579f, 1.13375f, 1.139955f, 1.146193f, 1.152466f, 1.158773f, 1.165115f, 1.171491f, 1.177903f, 1.184349f,
1.190831f, 1.197348f, 1.203901f, 1.210489f, 1.217114f, 1.223775f, 1.230473f, 1.237207f, 1.243978f, 1.250786f,
1.257631f, 1.264514f, 1.271434f, 1.278392f, 1.285389f, 1.292423f, 1.299497f, 1.306608f, 1.313759f, 1.320949f,
1.328178f, 1.335447f, 1.342756f, 1.350104f, 1.357493f, 1.364922f, 1.372392f, 1.379903f, 1.387455f, 1.395048f,
1.402683f, 1.41036f, 1.418078f, 1.425839f, 1.433642f, 1.441488f, 1.449377f, 1.457309f, 1.465285f, 1.473304f,
1.481367f, 1.489474f, 1.497626f, 1.505822f, 1.514063f, 1.522349f, 1.530681f, 1.539058f, 1.547481f, 1.55595f,
1.564465f, 1.573027f, 1.581636f, 1.590292f, 1.598995f, 1.607746f, 1.616545f, 1.625392f, 1.634287f, 1.643231f,
1.652224f, 1.661266f, 1.670358f, 1.6795f, 1.688691f, 1.697933f, 1.707225f, 1.716569f, 1.725963f, 1.735409f,
1.744906f, 1.754456f, 1.764058f, 1.773712f, 1.783419f, 1.793179f, 1.802993f, 1.81286f, 1.822782f, 1.832757f,
1.842788f, 1.852873f, 1.863013f, 1.873209f, 1.883461f, 1.893768f, 1.904132f, 1.914553f, 1.925031f, 1.935567f,
1.946159f, 1.95681f, 1.96752f, 1.978287f, 1.989114f, 2.0f
};
// Frequencies for notes using the standard twelve-tone equal temperament scale.

Some files were not shown because too many files have changed in this diff Show More