Match func_80092188 (#475)

* Match func_80092188

* Update score
This commit is contained in:
Ryan Myers
2025-03-07 13:33:51 -05:00
committed by GitHub
parent b13aa33b64
commit d6569b249b
4 changed files with 299 additions and 757 deletions
+5 -5
View File
@@ -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:
&emsp;&emsp;&emsp;&emsp;Decomp progress: 73.56%
&emsp;&emsp;&emsp;&emsp;Decomp progress: 73.86%
&emsp;&emsp;&emsp;&emsp;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
View File
@@ -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
View File
@@ -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);