mirror of
https://github.com/izzy2lost/Diddy-Kong-Racing.git
synced 2026-06-19 01:16:26 -07:00
@@ -7,7 +7,7 @@ Currently, only the US 1.0 version (SHA1 = 0cb115d8716dbbc2922fda38e533b9fe63bb9
|
||||
<!-- README_SCORE_SUMMARY_BEGIN -->
|
||||
As of March 7, 2025, this is our current score:
|
||||
|
||||
    Decomp progress: 73.56%
|
||||
    Decomp progress: 73.86%
|
||||
|
||||
    Documentation progress: 49.99%
|
||||
<!-- README_SCORE_SUMMARY_END -->
|
||||
@@ -130,16 +130,16 @@ As of March 7, 2025, this is our current score:
|
||||
```
|
||||
==========================================================
|
||||
ADVENTURE ONE (ASM -> C Decompilation)
|
||||
--------- 73.56% Complete (76.05% NON_MATCHING) ----------
|
||||
# Decompiled functions: 1818
|
||||
# GLOBAL_ASM remaining: 123
|
||||
--------- 73.86% Complete (76.35% NON_MATCHING) ----------
|
||||
# Decompiled functions: 1819
|
||||
# GLOBAL_ASM remaining: 122
|
||||
# NON_MATCHING functions: 14
|
||||
# NON_EQUIVALENT WIP functions: 43
|
||||
---------------------- Game Status -----------------------
|
||||
Balloons: 35/47, Keys: 4/4, Trophies: 3/5
|
||||
T.T. Amulets: 3/4, Wizpig Amulets: 3/4
|
||||
----------------------------------------------------------
|
||||
We are collecting bananas in Smokey Castle. (5/10 Bananas)
|
||||
We are collecting bananas in Smokey Castle. (7/10 Bananas)
|
||||
==========================================================
|
||||
ADVENTURE TWO (Cleanup & Documentation)
|
||||
-------------------- 49.99% Complete ---------------------
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+280
-14
@@ -7297,7 +7297,7 @@ void menu_track_select_init(void) {
|
||||
gTrackmenuLoadedLevel = -1;
|
||||
gOpacityDecayTimer = 32;
|
||||
gOptionBlinkTimer = 0;
|
||||
gTrackmenuType = -1;
|
||||
gTrackmenuType = TRACKMENU_TYPE_INIT;
|
||||
trackmenu_assets(0);
|
||||
transition_begin(&sMenuTransitionFadeOut);
|
||||
enable_new_screen_transitions();
|
||||
@@ -7426,26 +7426,28 @@ GLOBAL_ASM("asm/non_matchings/menu/menu_track_select_init.s")
|
||||
* If type is -1, allocate and initialise all the track setup elements.
|
||||
* If type is 0, reset the cursor target to the current position.
|
||||
* If type is 1, free the assetgroup for the track setup.
|
||||
* If type is 2, to load the race
|
||||
*/
|
||||
void trackmenu_assets(s32 type) {
|
||||
Vehicle vehicle;
|
||||
s32 i;
|
||||
s32 newType;
|
||||
|
||||
if (gTrackmenuType != -1 && gTrackmenuType != 0 && gTrackmenuType == 1) {
|
||||
if (gTrackmenuType != TRACKMENU_TYPE_INIT && gTrackmenuType != TRACKMENU_TYPE_RESET_CURSOR &&
|
||||
gTrackmenuType == TRACKMENU_TYPE_FREE) {
|
||||
menu_assetgroup_free(gTrackSelectPreviewObjectIndices);
|
||||
}
|
||||
|
||||
gTrackmenuType = type;
|
||||
newType = gTrackmenuType;
|
||||
|
||||
if (newType > -1 && newType < 2) {
|
||||
if (newType > TRACKMENU_TYPE_INIT && newType <= TRACKMENU_TYPE_FREE) {
|
||||
switch (gTrackmenuType) {
|
||||
case 0:
|
||||
case TRACKMENU_TYPE_RESET_CURSOR:
|
||||
gTrackSelectTargetX = gTrackSelectX;
|
||||
gTrackSelectTargetY = gTrackSelectY;
|
||||
break;
|
||||
case 1:
|
||||
case TRACKMENU_TYPE_FREE:
|
||||
vehicle = get_map_default_vehicle(gTrackIdForPreview);
|
||||
for (i = 0; i < gNumberOfActivePlayers; i++) {
|
||||
gPlayerSelectConfirm[i] = 0;
|
||||
@@ -7507,12 +7509,12 @@ s32 menu_track_select_loop(s32 updateRate) {
|
||||
gSPClearGeometryMode(sMenuCurrDisplayList++, G_CULL_FRONT);
|
||||
|
||||
switch (gTrackmenuType) {
|
||||
case 0:
|
||||
case TRACKMENU_TYPE_RESET_CURSOR:
|
||||
func_8008FF1C(updateRate);
|
||||
trackmenu_track_view(updateRate);
|
||||
trackmenu_input(updateRate);
|
||||
break;
|
||||
case 1:
|
||||
case TRACKMENU_TYPE_FREE:
|
||||
trackmenu_timetrial_sound(updateRate);
|
||||
trackmenu_setup_render(updateRate);
|
||||
func_80092188(updateRate);
|
||||
@@ -7528,7 +7530,7 @@ s32 menu_track_select_loop(s32 updateRate) {
|
||||
}
|
||||
music_volume_set(sMenuMusicVolume);
|
||||
}
|
||||
if (gTrackmenuType < 0) {
|
||||
if (gTrackmenuType <= TRACKMENU_TYPE_INIT) {
|
||||
menu_track_select_unload();
|
||||
gTrackSpecifiedWithTrackIdToLoad = 0;
|
||||
if (gNumberOfActivePlayers >= 3 ||
|
||||
@@ -7549,7 +7551,7 @@ s32 menu_track_select_loop(s32 updateRate) {
|
||||
menu_init(MENU_GAME_SELECT);
|
||||
return MENU_RESULT_CONTINUE;
|
||||
}
|
||||
if (gTrackmenuType >= 2) {
|
||||
if (gTrackmenuType >= TRACKMENU_TYPE_LOAD_LEVEL) {
|
||||
menu_track_select_unload();
|
||||
if (gMultiplayerSelectedNumberOfRacersCopy != gMultiplayerSelectedNumberOfRacers) {
|
||||
for (cutsceneId = 0; cutsceneId < 8; cutsceneId++) {
|
||||
@@ -8040,11 +8042,11 @@ void trackmenu_input(s32 updateRate) {
|
||||
} else {
|
||||
gMenuStage = TRACKMENU_OPT_1;
|
||||
}
|
||||
trackmenu_assets(1);
|
||||
trackmenu_assets(TRACKMENU_TYPE_FREE);
|
||||
} else if (gMenuDelay < -30) {
|
||||
disable_new_screen_transitions();
|
||||
camDisableUserView(0, FALSE);
|
||||
trackmenu_assets(-1);
|
||||
trackmenu_assets(TRACKMENU_TYPE_INIT);
|
||||
}
|
||||
}
|
||||
if (menuDelay == 0) {
|
||||
@@ -8425,7 +8427,271 @@ void trackmenu_setup_render(UNUSED s32 updateRate) {
|
||||
}
|
||||
}
|
||||
|
||||
GLOBAL_ASM("asm/non_matchings/menu/func_80092188.s")
|
||||
void func_80092188(s32 updateRate) {
|
||||
s32 yOffset2;
|
||||
s32 origVehicle;
|
||||
s32 avaliableVehicles;
|
||||
s32 xOffset;
|
||||
s32 yOffset;
|
||||
s32 i;
|
||||
s32 menuBackedOut;
|
||||
s32 menuSelected;
|
||||
s32 menuChanged;
|
||||
s32 menuDelay;
|
||||
Settings *settings;
|
||||
|
||||
menuDelay = gMenuDelay;
|
||||
settings = get_settings();
|
||||
if (gTrackNameVoiceDelay != 0) {
|
||||
gTrackNameVoiceDelay += updateRate;
|
||||
}
|
||||
// Challenge Races
|
||||
if (gTrackSelectCursorX == 5 && gMenuStage != 2) {
|
||||
gMenuStage = 2;
|
||||
if (gTrackSelectCursorX == 5) {
|
||||
// One of the following three text messages
|
||||
// THE FIRST PLAYER TO HATCH // THE LAST PLAYER REMAINING // THE FIRST PLAYER TO GET 10
|
||||
// THREE EGGS WILL WIN! // WILL WIN!! // BANANAS INTO THEIR TREASURE
|
||||
// // CHEST WILL WIN!!
|
||||
set_current_text(gTrackSelectCursorY + ASSET_GAME_TEXT_60);
|
||||
}
|
||||
}
|
||||
// Trophy Races
|
||||
if (gTrackSelectCursorX == 4 && gMenuStage != -1 && gMenuStage != 2) {
|
||||
gMenuStage = 2;
|
||||
}
|
||||
if (gTTVoiceLines[gTrackIdForPreview] != -1 && gTrackNameVoiceDelay >= 7) {
|
||||
sound_play(gTTVoiceLines[gTrackIdForPreview], NULL);
|
||||
gTrackNameVoiceDelay = 0;
|
||||
}
|
||||
xOffset = gMenuDelay + 25;
|
||||
if (gMenuDelay < 0) {
|
||||
if (xOffset > 20) {
|
||||
xOffset = 20;
|
||||
}
|
||||
if (xOffset < 0) {
|
||||
xOffset = 0;
|
||||
}
|
||||
yOffset = ((xOffset + 20) * gTrackSelectViewPortHalfY) / 40;
|
||||
yOffset2 = yOffset + gTrackSelectViewPortHalfY;
|
||||
viewport_menu_set(0, 80 - (xOffset * 4), gTrackSelectViewPortHalfY - yOffset, (xOffset * 4) + 240, yOffset2);
|
||||
// TODO: gMenuImages is not just an array of MenuAsset?
|
||||
((f32 *) gMenuImages)[34] = (f32) (sMenuImageProperties[4].scale * (1.0f + ((f32) xOffset / 20.0f)));
|
||||
((f32 *) gMenuImages)[42] = (f32) (sMenuImageProperties[5].scale * (1.0f + ((f32) xOffset / 20.0f)));
|
||||
((f32 *) gMenuImages)[50] = (f32) (sMenuImageProperties[6].scale * (1.0f + ((f32) xOffset / 20.0f)));
|
||||
}
|
||||
if (gMenuDelay > 0) {
|
||||
sMenuMusicVolume -= updateRate * 4;
|
||||
}
|
||||
if (gMenuDelay > 40) {
|
||||
trackmenu_assets(TRACKMENU_TYPE_LOAD_LEVEL);
|
||||
} else if (gMenuDelay < -30) {
|
||||
gOpacityDecayTimer = 0;
|
||||
trackmenu_assets(TRACKMENU_TYPE_RESET_CURSOR);
|
||||
viewport_menu_set(0, 80, gTrackSelectViewPortHalfY - (gTrackSelectViewPortHalfY >> 1), 240,
|
||||
(gTrackSelectViewPortHalfY >> 1) + gTrackSelectViewPortHalfY);
|
||||
}
|
||||
camEnableUserView(0, TRUE);
|
||||
if (menuDelay == 0) {
|
||||
avaliableVehicles = get_map_available_vehicles(gTrackIdForPreview);
|
||||
menuBackedOut = FALSE;
|
||||
menuSelected = FALSE;
|
||||
menuChanged = FALSE;
|
||||
switch (gMenuStage) {
|
||||
case -1:
|
||||
if (gMenuButtons[4] & (A_BUTTON | START_BUTTON)) {
|
||||
if (gTrackSelectCursorX == 4) {
|
||||
gMenuStage = 2;
|
||||
} else {
|
||||
gMenuStage = 0;
|
||||
}
|
||||
menuSelected = TRUE;
|
||||
} else if (gMenuButtons[4] & B_BUTTON) {
|
||||
gMenuDelay = -1;
|
||||
menuBackedOut = TRUE;
|
||||
} else {
|
||||
if (gMenuStickY[4] > 0 && gTracksMenuAdventureHighlightIndex != 0) {
|
||||
gTracksMenuAdventureHighlightIndex = 0;
|
||||
menuChanged = TRUE;
|
||||
} else if ((gMenuStickY[4] < 0) && (gTracksMenuAdventureHighlightIndex == 0)) {
|
||||
gTracksMenuAdventureHighlightIndex = 1;
|
||||
menuChanged = TRUE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 0:
|
||||
for (i = 0; i < gNumberOfActivePlayers; i++) {
|
||||
if (gMenuButtons[i] & B_BUTTON) {
|
||||
menuBackedOut = TRUE;
|
||||
if (gNumberOfReadyPlayers == 0) {
|
||||
if (is_adventure_two_unlocked()) {
|
||||
gMenuStage = -1;
|
||||
} else {
|
||||
gMenuDelay = -1;
|
||||
}
|
||||
} else if (gPlayerSelectConfirm[i] != 0) {
|
||||
gNumberOfReadyPlayers--;
|
||||
gPlayerSelectConfirm[i] = 0;
|
||||
}
|
||||
} else {
|
||||
if (gMenuButtons[i] & (A_BUTTON | START_BUTTON)) {
|
||||
if (gPlayerSelectConfirm[i] == 0) {
|
||||
gPlayerSelectConfirm[i] = 1;
|
||||
gNumberOfReadyPlayers++;
|
||||
menuSelected = TRUE;
|
||||
}
|
||||
} else if (gPlayerSelectConfirm[i] == 0 && settings->courseFlagsPtr[gTrackIdForPreview] & 2) {
|
||||
origVehicle = gPlayerSelectVehicle[i];
|
||||
if (gMenuStickY[i] > 0) {
|
||||
do {
|
||||
gPlayerSelectVehicle[i]--;
|
||||
} while (((1 << gPlayerSelectVehicle[i]) & avaliableVehicles) == 0 &&
|
||||
gPlayerSelectVehicle[i] >= 0);
|
||||
}
|
||||
if (gMenuStickY[i] < 0) {
|
||||
do {
|
||||
gPlayerSelectVehicle[i]++;
|
||||
} while (((1 << gPlayerSelectVehicle[i]) & avaliableVehicles) == 0 &&
|
||||
gPlayerSelectVehicle[i] < 3);
|
||||
}
|
||||
if (origVehicle != gPlayerSelectVehicle[i]) {
|
||||
if (gPlayerSelectVehicle[i] < 0 || gPlayerSelectVehicle[i] >= 3) {
|
||||
gPlayerSelectVehicle[i] = origVehicle;
|
||||
} else {
|
||||
menuChanged = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (gNumberOfReadyPlayers == gNumberOfActivePlayers) {
|
||||
menuBackedOut = FALSE;
|
||||
menuSelected = FALSE;
|
||||
menuChanged = FALSE;
|
||||
if (gNumberOfActivePlayers >= 2) {
|
||||
gMenuStage = 2;
|
||||
} else {
|
||||
gMenuStage = 1;
|
||||
}
|
||||
sound_play(SOUND_CAR_REV2, NULL);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (gMenuButtons[0] & (A_BUTTON | START_BUTTON)) {
|
||||
gMenuStage = 2;
|
||||
menuSelected = TRUE;
|
||||
} else if (gMenuButtons[0] & B_BUTTON) {
|
||||
gPlayerSelectConfirm[0] = 0;
|
||||
gNumberOfReadyPlayers = 0;
|
||||
gMenuStage = 0;
|
||||
menuBackedOut = TRUE;
|
||||
}
|
||||
if (gMenuStickY[0] > 0 && gTracksMenuTimeTrialHighlightIndex > 0) {
|
||||
if (D_80126848 != NULL) {
|
||||
sound_stop((u8 *) D_80126848);
|
||||
}
|
||||
gTracksMenuTimeTrialHighlightIndex--;
|
||||
menuChanged = TRUE;
|
||||
}
|
||||
if (gMenuStickY[0] < 0) {
|
||||
if (gTracksMenuTimeTrialHighlightIndex <= 0) {
|
||||
menuChanged = TRUE;
|
||||
if (gTrackTTSoundMask != NULL) {
|
||||
sound_stop((u8 *) gTrackTTSoundMask);
|
||||
}
|
||||
if (get_random_number_from_range(0, 255) >= 128) {
|
||||
sound_play(SOUND_VOICE_TT_INTRO, (s32 *) &D_80126848);
|
||||
} else {
|
||||
sound_play(SOUND_VOICE_TT_GO_FOR_IT, (s32 *) &D_80126848);
|
||||
}
|
||||
gTracksMenuTimeTrialHighlightIndex++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 2: /* fall through */
|
||||
case 3:
|
||||
if (gMenuStage == 2 && gNumberOfActivePlayers == 2 && gTrackSelectCursorX < 4) {
|
||||
if (gMenuButtons[4] & (A_BUTTON | START_BUTTON)) {
|
||||
gMenuStage = 3;
|
||||
menuSelected = TRUE;
|
||||
} else if (gMenuButtons[4] & B_BUTTON) {
|
||||
gMenuStage = 0;
|
||||
gNumberOfReadyPlayers--;
|
||||
if (gMenuButtons[0] & B_BUTTON) {
|
||||
gPlayerSelectConfirm[0] = 0;
|
||||
} else {
|
||||
gPlayerSelectConfirm[1] = 0;
|
||||
}
|
||||
menuBackedOut = TRUE;
|
||||
} else {
|
||||
if (gMenuStickX[4] < 0 && gMultiplayerSelectedNumberOfRacers > 0) {
|
||||
menuChanged = TRUE;
|
||||
gMultiplayerSelectedNumberOfRacers--;
|
||||
} else if (gMenuStickX[4] > 0 && gMultiplayerSelectedNumberOfRacers < 2) {
|
||||
menuChanged = TRUE;
|
||||
gMultiplayerSelectedNumberOfRacers++;
|
||||
}
|
||||
}
|
||||
} else if (gMenuButtons[4] & (A_BUTTON | START_BUTTON)) {
|
||||
gMenuDelay = 1;
|
||||
bgdraw_set_func(NULL);
|
||||
gIsInTracksMenu = 0;
|
||||
disable_new_screen_transitions();
|
||||
transition_begin(&sMenuTransitionFadeIn);
|
||||
if (gTrackSelectCursorX == 5) {
|
||||
set_current_text(10000); // Nonsense value. No text.
|
||||
}
|
||||
menuSelected = TRUE;
|
||||
} else if (gTrackSelectCursorX >= 4) {
|
||||
if (gMenuButtons[4] & B_BUTTON) {
|
||||
menuBackedOut = TRUE;
|
||||
if ((gTrackSelectCursorX == 4) && (is_adventure_two_unlocked())) {
|
||||
gMenuStage = -1;
|
||||
} else {
|
||||
gMenuDelay = -1;
|
||||
}
|
||||
if (gTrackSelectCursorX == 5) {
|
||||
set_current_text(10000); // Nonsense value. No text.
|
||||
}
|
||||
}
|
||||
} else if (gNumberOfActivePlayers == 1) {
|
||||
if (gMenuButtons[0] & B_BUTTON) {
|
||||
gMenuStage = 1;
|
||||
menuBackedOut = TRUE;
|
||||
}
|
||||
} else if (gNumberOfActivePlayers == 2) {
|
||||
if (gMenuButtons[4] & B_BUTTON) {
|
||||
gMenuStage = 2;
|
||||
menuBackedOut = TRUE;
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < gNumberOfActivePlayers; i++) {
|
||||
if (gMenuButtons[i] & B_BUTTON) {
|
||||
gNumberOfReadyPlayers--;
|
||||
gPlayerSelectConfirm[i] = 0;
|
||||
gMenuStage = 0;
|
||||
menuBackedOut = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (menuBackedOut) {
|
||||
sound_play(SOUND_MENU_BACK3, NULL);
|
||||
} else if (menuSelected) {
|
||||
sound_play(SOUND_SELECT2, NULL);
|
||||
} else if (menuChanged) {
|
||||
sound_play(SOUND_MENU_PICK2, NULL);
|
||||
}
|
||||
set_level_default_vehicle((enum Vehicle) * gPlayerSelectVehicle);
|
||||
if (gNumberOfActivePlayers >= 2 || gTrackSelectCursorX >= 4) {
|
||||
set_time_trial_enabled(FALSE);
|
||||
} else {
|
||||
set_time_trial_enabled(gTracksMenuTimeTrialHighlightIndex);
|
||||
}
|
||||
gIsInAdventureTwo = gTracksMenuAdventureHighlightIndex;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return whether the staff time has been beaten for this level.
|
||||
@@ -8700,7 +8966,7 @@ s32 menu_adventure_track_loop(s32 updateRate) {
|
||||
if (gMenuStage != ADVENTURESETUP_VEHICLE || sp20 || challenge) {
|
||||
if (gMenuButtons[PLAYER_ONE] & (A_BUTTON | START_BUTTON)) {
|
||||
if (challenge) {
|
||||
set_current_text(0x2710);
|
||||
set_current_text(10000);
|
||||
}
|
||||
gMenuDelay = 1;
|
||||
transition_begin(&sMenuTransitionFadeIn);
|
||||
@@ -8709,7 +8975,7 @@ s32 menu_adventure_track_loop(s32 updateRate) {
|
||||
sound_play(SOUND_MENU_BACK3, NULL);
|
||||
if (sp20 || challenge) {
|
||||
if (challenge) {
|
||||
set_current_text(0x2710);
|
||||
set_current_text(10000);
|
||||
}
|
||||
transition_begin(&sMenuTransitionFadeIn);
|
||||
gMenuDelay = -1;
|
||||
|
||||
+14
-1
@@ -170,6 +170,19 @@ enum DialogIDsTaj {
|
||||
DIALOGUEPAGE_TAJ_CHALLENGES_2
|
||||
};
|
||||
|
||||
/**
|
||||
* If type is -1, allocate and initialise all the track setup elements.
|
||||
* If type is 0, reset the cursor target to the current position.
|
||||
* If type is 1, free the assetgroup for the track setup.
|
||||
* If type is 2, to load the race
|
||||
*/
|
||||
enum TrackMenuTypes {
|
||||
TRACKMENU_TYPE_INIT = -1,
|
||||
TRACKMENU_TYPE_RESET_CURSOR,
|
||||
TRACKMENU_TYPE_FREE,
|
||||
TRACKMENU_TYPE_LOAD_LEVEL
|
||||
};
|
||||
|
||||
#define CHEAT(index) 1 << index
|
||||
|
||||
typedef enum Cheats {
|
||||
@@ -654,6 +667,7 @@ SIDeviceStatus savemenu_write(void);
|
||||
void trackmenu_setup_render(s32 updateRate);
|
||||
void rankings_render_order(s32 updateRate);
|
||||
void results_render(UNUSED s32 updateRate, f32 opacity);
|
||||
void func_80092188(s32 updateRate);
|
||||
|
||||
// Non Matching functions below here
|
||||
void load_menu_text(s32 language); // Non Matching
|
||||
@@ -661,7 +675,6 @@ s32 menu_controller_pak_loop(s32 updateRate);
|
||||
void menu_game_select_init(void);
|
||||
void func_8008FF1C(s32 updateRate);
|
||||
void trackmenu_input(s32 updateRate);
|
||||
void func_80092188(s32 updateRate);
|
||||
void filename_trim(char *input, char *output);
|
||||
void menu_ghost_data_init(void);
|
||||
void update_controller_sticks(void);
|
||||
|
||||
Reference in New Issue
Block a user