From df047409bbc841c8648141954e317eea78e00838 Mon Sep 17 00:00:00 2001 From: MysterD Date: Sat, 26 Feb 2022 16:53:31 -0800 Subject: [PATCH 01/10] Update credits --- credits.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/credits.txt b/credits.txt index caef83173..d7e0c0c5e 100644 --- a/credits.txt +++ b/credits.txt @@ -31,6 +31,7 @@ Contributors: s4ys sm64rise snuffysasa + SonicDarkYT steven. SunlitSpace542 Super Keeberghrh From 0ea1eec2ed8dc72731a31bb1a730b70e70f06dfb Mon Sep 17 00:00:00 2001 From: MysterD Date: Sat, 26 Feb 2022 18:19:43 -0800 Subject: [PATCH 02/10] Revert "Prevent multiple star cutscenes from causing a rare softlock" This reverts commit ebcaddede413a93af8c63ba5a2a855282844be1f. --- src/game/camera.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/game/camera.c b/src/game/camera.c index bbd45b62f..8c82adf64 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -394,7 +394,6 @@ struct CameraStoredInfo sCameraStoreCutscene; // first iteration of data u32 unused8032CFC0 = 0; struct Object *gCutsceneFocus = NULL; -const BehaviorScript *gCutsceneFocusBehavior = NULL; // other camera focuses? u32 unused8032CFC8 = 0; u32 unused8032CFCC = 0; @@ -3278,7 +3277,6 @@ void reset_camera(struct Camera *c) { gCutsceneObjSpawn = 0; gObjCutsceneDone = FALSE; gCutsceneFocus = NULL; - gCutsceneFocusBehavior = NULL; unused8032CFC8 = 0; unused8032CFCC = 0; gSecondCameraFocus = NULL; @@ -6946,7 +6944,6 @@ void start_object_cutscene(u8 cutscene, struct Object *o) { sObjectCutscene = cutscene; gRecentCutscene = 0; gCutsceneFocus = o; - gCutsceneFocusBehavior = o->behavior; gObjCutsceneDone = FALSE; } @@ -11298,14 +11295,9 @@ void play_cutscene(struct Camera *c) { gCameraMovementFlags &= ~CAM_MOVING_INTO_MODE; if (gCutsceneFocus != NULL) { - if (gCutsceneFocus->activeFlags == ACTIVE_FLAG_DEACTIVATED || gCutsceneFocus->behavior != gCutsceneFocusBehavior) { + if (gCutsceneFocus->activeFlags == ACTIVE_FLAG_DEACTIVATED) { gObjCutsceneDone = true; gTimeStopState = 0; - - sStatusFlags |= CAM_FLAG_SMOOTH_MOVEMENT; - gCutsceneTimer = CUTSCENE_STOP; - c->cutscene = 0; - return; } } From f92c956ea2c59bba85cbd0bdd9c01a58a3ad3ad5 Mon Sep 17 00:00:00 2001 From: MysterD Date: Sat, 26 Feb 2022 21:28:55 -0800 Subject: [PATCH 03/10] Fix exclamation box outline --- src/game/behaviors/exclamation_box.inc.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/game/behaviors/exclamation_box.inc.c b/src/game/behaviors/exclamation_box.inc.c index 9b1e746fd..4c81aac75 100644 --- a/src/game/behaviors/exclamation_box.inc.c +++ b/src/game/behaviors/exclamation_box.inc.c @@ -53,9 +53,8 @@ void exclamation_box_act_0(void) { void exclamation_box_act_1(void) { cur_obj_become_intangible(); if (o->oTimer == 0) { - u8 loadedModelId = smlua_model_util_load(E_MODEL_EXCLAMATION_POINT); - spawn_object(o, loadedModelId, bhvRotatingExclamationMark); - cur_obj_set_model(loadedModelId); + spawn_object(o, smlua_model_util_load(E_MODEL_EXCLAMATION_POINT), bhvRotatingExclamationMark); + cur_obj_set_model(smlua_model_util_load(E_MODEL_EXCLAMATION_BOX_OUTLINE)); } if ((save_file_get_flags() & D_8032F0C0[o->oBehParams2ndByte]) || ((o->oBehParams >> 24) & 0xFF) != 0) { From e16f3eb0758c51a9e7681b58bee42b22d246fc25 Mon Sep 17 00:00:00 2001 From: MysterD Date: Sat, 26 Feb 2022 21:30:26 -0800 Subject: [PATCH 04/10] Fix blue coin in boo value --- src/game/behaviors/coin.inc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/game/behaviors/coin.inc.c b/src/game/behaviors/coin.inc.c index bac90a304..27e77de5e 100644 --- a/src/game/behaviors/coin.inc.c +++ b/src/game/behaviors/coin.inc.c @@ -213,7 +213,7 @@ void coin_inside_boo_act_1(void) { } cur_obj_move_standard(-30); bhv_coin_sparkles_init(); - if (cur_obj_has_model(MODEL_BLUE_COIN)) + if (cur_obj_has_model(smlua_model_util_load(E_MODEL_BLUE_COIN))) o->oDamageOrCoinValue = 5; if (cur_obj_wait_then_blink(400, 20)) obj_mark_for_deletion(o); From a35d759a463ffee3acda5c735fc4d6ae16bb7115 Mon Sep 17 00:00:00 2001 From: MysterD Date: Sun, 27 Feb 2022 00:53:58 -0800 Subject: [PATCH 05/10] Fix crash when surfaces fail to allocate --- src/engine/surface_load.c | 2 ++ src/pc/lua/smlua_obj_utils.c | 1 + 2 files changed, 3 insertions(+) diff --git a/src/engine/surface_load.c b/src/engine/surface_load.c index 3bf7a9c4f..0645f3110 100644 --- a/src/engine/surface_load.c +++ b/src/engine/surface_load.c @@ -71,6 +71,7 @@ static struct Surface *alloc_surface(void) { // we, um... // Perhaps originally just debug feedback? if (gSurfacesAllocated >= sSurfacePoolSize) { + return NULL; } surface->type = 0; @@ -363,6 +364,7 @@ static struct Surface *read_surface_data(s16 *vertexData, s16 **vertexIndices) { nz *= mag; surface = alloc_surface(); + if (surface == NULL) { return NULL; } vec3s_copy(surface->prevVertex1, surface->vertex1); vec3s_copy(surface->prevVertex2, surface->vertex2); diff --git a/src/pc/lua/smlua_obj_utils.c b/src/pc/lua/smlua_obj_utils.c index 387709417..74dfba9bf 100644 --- a/src/pc/lua/smlua_obj_utils.c +++ b/src/pc/lua/smlua_obj_utils.c @@ -22,6 +22,7 @@ static struct Object* spawn_object_internal(enum BehaviorId behaviorId, enum Mod } struct Object* obj = spawn_object(gMarioStates[0].marioObj, loadedModelId, behavior); + if (obj == NULL) { LOG_ERROR("failed to allocate object"); return NULL; From 0f86018bfed42e21adfc2261144ef2350a50ffdf Mon Sep 17 00:00:00 2001 From: MysterD Date: Sun, 27 Feb 2022 01:02:32 -0800 Subject: [PATCH 06/10] Fixed crash in configfile_save --- src/pc/configfile.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pc/configfile.c b/src/pc/configfile.c index 2ff4c30d1..49356f5a2 100644 --- a/src/pc/configfile.c +++ b/src/pc/configfile.c @@ -423,6 +423,7 @@ void configfile_save(const char *filename) { // save enabled mods for (unsigned int i = 0; i < gModTableLocal.entryCount; i++) { struct ModListEntry* entry = &gModTableLocal.entries[i]; + if (entry == NULL) { continue; } if (!entry->enabled) { continue; } fprintf(file, "%s %s\n", "enable-mod:", entry->name); } From c60f9f3e46b71e1a93bf9dc9d0166bfe77bdb8d2 Mon Sep 17 00:00:00 2001 From: MysterD Date: Sun, 27 Feb 2022 01:05:36 -0800 Subject: [PATCH 07/10] Prevent crash in anim_spline_poll --- src/engine/math_util.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/engine/math_util.c b/src/engine/math_util.c index af3fd82f2..ca8b6ce1f 100644 --- a/src/engine/math_util.c +++ b/src/engine/math_util.c @@ -889,6 +889,9 @@ s32 anim_spline_poll(struct MarioState* m, Vec3f result) { vec3f_copy(result, gVec3fZero); spline_get_weights(m, weights, m->splineKeyframeFraction, m->splineState); + + if (m->splineKeyframe == NULL) { return FALSE; } + for (i = 0; i < 4; i++) { result[0] += weights[i] * m->splineKeyframe[i][1]; result[1] += weights[i] * m->splineKeyframe[i][2]; From 0ddb59c87c26eab600af1fefb2c57f58064af4d8 Mon Sep 17 00:00:00 2001 From: MysterD Date: Sun, 27 Feb 2022 01:23:35 -0800 Subject: [PATCH 08/10] Fix crash in djui_interactable_update --- src/pc/djui/djui_base.c | 5 +++++ src/pc/djui/djui_interactable.c | 12 ++++++------ src/pc/djui/djui_interactable.h | 1 + 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/pc/djui/djui_base.c b/src/pc/djui/djui_base.c index 56203073e..d86cd7881 100644 --- a/src/pc/djui/djui_base.c +++ b/src/pc/djui/djui_base.c @@ -329,6 +329,11 @@ void djui_base_destroy(struct DjuiBase* base) { gDjuiHovered = NULL; } + // remove binding + if (gInteractableBinding == base) { + gInteractableBinding = NULL; + } + // remove myself from parent's linked list if (base->parent != NULL) { struct DjuiBaseChild* child = base->parent->child; diff --git a/src/pc/djui/djui_interactable.c b/src/pc/djui/djui_interactable.c index 50a007899..7bbc98edc 100644 --- a/src/pc/djui/djui_interactable.c +++ b/src/pc/djui/djui_interactable.c @@ -21,7 +21,7 @@ static bool sIgnoreInteractableUntilCursorReleased = false; struct DjuiBase* gDjuiHovered = NULL; struct DjuiBase* gDjuiCursorDownOn = NULL; struct DjuiBase* gInteractableFocus = NULL; -static struct DjuiBase* sInteractableBinding = NULL; +struct DjuiBase* gInteractableBinding = NULL; static struct DjuiBase* sMouseDown = NULL; bool gInteractableOverridePad = false; OSContPad gInteractablePad = { 0 }; @@ -163,11 +163,11 @@ static void djui_interactable_cursor_update_active(struct DjuiBase* base) { } bool djui_interactable_is_binding(void) { - return sInteractableBinding != NULL; + return gInteractableBinding != NULL; } void djui_interactable_set_binding(struct DjuiBase* base) { - sInteractableBinding = base; + gInteractableBinding = base; djui_cursor_set_visible(base == NULL); if (base == NULL) { sIgnoreInteractableUntilCursorReleased = true; @@ -186,7 +186,7 @@ bool djui_interactable_is_input_focus(struct DjuiBase* base) { } bool djui_interactable_on_key_down(int scancode) { - if (sInteractableBinding != NULL) { + if (gInteractableBinding != NULL) { return true; } @@ -377,8 +377,8 @@ void djui_interactable_update(void) { if (gDjuiPanelPauseCreated) { djui_panel_shutdown(); } } - if (sInteractableBinding != NULL) { - djui_interactable_on_bind(sInteractableBinding); + if (gInteractableBinding != NULL) { + djui_interactable_on_bind(gInteractableBinding); } else if ((padButtons & PAD_BUTTON_A) || (mouseButtons & MOUSE_BUTTON_1)) { // cursor down events if (gDjuiHovered != NULL) { diff --git a/src/pc/djui/djui_interactable.h b/src/pc/djui/djui_interactable.h index 82c7caa2b..e24e01613 100644 --- a/src/pc/djui/djui_interactable.h +++ b/src/pc/djui/djui_interactable.h @@ -45,6 +45,7 @@ extern OSContPad gInteractablePad; extern struct DjuiBase* gDjuiHovered; extern struct DjuiBase* gDjuiCursorDownOn; extern struct DjuiBase* gInteractableFocus; +extern struct DjuiBase* gInteractableBinding; bool djui_interactable_is_binding(void); void djui_interactable_set_binding(struct DjuiBase* base); From 1774544896824edcdbee911dcfc455ca4e6ba54c Mon Sep 17 00:00:00 2001 From: Isaac <62234577+Isaac0-dev@users.noreply.github.com> Date: Sun, 27 Feb 2022 19:29:32 +1000 Subject: [PATCH 09/10] Prevented the game from closing when Discord has an error (#4) * Update discord.c * Update discord.c --- src/pc/network/discord/discord.c | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/src/pc/network/discord/discord.c b/src/pc/network/discord/discord.c index 1030b26a8..55d2872a1 100644 --- a/src/pc/network/discord/discord.c +++ b/src/pc/network/discord/discord.c @@ -21,26 +21,24 @@ static int64_t applicationId = 752700005210390568; struct DiscordApplication app = { 0 }; bool gDiscordInitialized = false; bool gDiscordFailed = false; +static int already_run = 0; static void discord_sdk_log_callback(UNUSED void* hook_data, enum EDiscordLogLevel level, const char* message) { LOGFILE_INFO(LFT_DISCORD, "callback (%d): %s", level, message); } -void discord_fatal(int rc) { -#if defined(_WIN32) || defined(_WIN64) +void discord_fatal_message(int rc) { char errorMessage[132] = { 0 }; - snprintf(errorMessage, 132, "Discord threw an error.\r\n\r\nTo fix: \r\n1. Close the game.\r\n2. Restart Discord.\r\n3. Start the game.\r\n\r\nRC: %d", rc); - fflush(stdout); - fflush(stderr); - LOGFILE_ERROR(LFT_DISCORD, "discord fatal %d", rc); - logfile_close(LFT_DISCORD); - MessageBox(NULL, - errorMessage, - "Fatal Discord Error", - MB_ICONERROR | MB_OK | MB_DEFBUTTON1 - ); - exit(1); -#else + snprintf(errorMessage, 132, "Discord threw an error.\nTo fix: \n1. Close the game.\n2. Restart Discord.\n3. Start the game.\nRC: %d", rc); + djui_popup_create(errorMessage, 6); +} + +void discord_fatal(int rc) { + if (already_run == 0) { + already_run = 1; + discord_fatal_message(rc); + } + SOFT_ASSERT(rc != DiscordResult_ServiceUnavailable); SOFT_ASSERT(rc != DiscordResult_InvalidVersion); SOFT_ASSERT(rc != DiscordResult_LockFailed); @@ -83,7 +81,6 @@ void discord_fatal(int rc) { SOFT_ASSERT(rc != DiscordResult_PurchaseError); SOFT_ASSERT(rc != DiscordResult_TransactionAborted); SOFT_ASSERT(rc == DiscordResult_Ok); -#endif } static void set_instance_env_variable(void) { From 02b3e19e1266f07c40d364fde91f59181617ab39 Mon Sep 17 00:00:00 2001 From: MysterD Date: Sun, 27 Feb 2022 01:33:06 -0800 Subject: [PATCH 10/10] Update credits --- credits.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/credits.txt b/credits.txt index d7e0c0c5e..710d42dd2 100644 --- a/credits.txt +++ b/credits.txt @@ -2,6 +2,7 @@ Developers: djoslin0 fgsfds FluffaLuigi + Isaac0-dev kebabstorm MegaMech theclashingfritz @@ -22,7 +23,6 @@ Contributors: Filipianosol GammaTendonNine gunvalk - IsaacBrumby jkcoxson Llennpie LuigiNoodle