diff --git a/src/game/interaction.c b/src/game/interaction.c index 338abe8e8..92e5a94d4 100644 --- a/src/game/interaction.c +++ b/src/game/interaction.c @@ -945,7 +945,9 @@ u32 interact_star_or_key(struct MarioState *m, UNUSED u32 interactType, struct O return set_mario_action(m, ACT_JUMBO_STAR_CUTSCENE, 0); } - return set_mario_action(m, starGrabAction, noExit + 2 * grandStar); + if (!noExit || gServerSettings.stayInLevelAfterStar != 2) { + return set_mario_action(m, starGrabAction, noExit + 2 * grandStar); + } } return FALSE; diff --git a/src/pc/configfile.c b/src/pc/configfile.c index 6d978904f..81a29e204 100644 --- a/src/pc/configfile.c +++ b/src/pc/configfile.c @@ -126,7 +126,7 @@ unsigned int configHostPort = DEFAULT_PORT; unsigned int configHostSaveSlot = 1; unsigned int configPlayerInteraction = 1; unsigned int configPlayerKnockbackStrength = 25; -bool configStayInLevelAfterStar = 0; +unsigned int configStayInLevelAfterStar = 0; unsigned int configNetworkSystem = 0; char configPlayerName[MAX_PLAYER_STRING] = ""; unsigned int configPlayerModel = 0; @@ -208,7 +208,7 @@ static const struct ConfigOption options[] = { {.name = "coop_player_model", .type = CONFIG_TYPE_UINT , .uintValue = &configPlayerModel}, {.name = "coop_player_name", .type = CONFIG_TYPE_STRING, .stringValue = (char*)&configPlayerName, .maxStringLength = MAX_PLAYER_STRING}, {.name = "coop_player_palette", .type = CONFIG_TYPE_UINT , .uintValue = &configPlayerPalette}, - {.name = "coop_stay_in_level_after_star", .type = CONFIG_TYPE_UINT , .boolValue = &configStayInLevelAfterStar}, + {.name = "coop_stay_in_level_after_star", .type = CONFIG_TYPE_UINT , .uintValue = &configStayInLevelAfterStar}, {.name = "share_lives", .type = CONFIG_TYPE_BOOL , .boolValue = &configShareLives}, }; diff --git a/src/pc/configfile.h b/src/pc/configfile.h index 3f1fb4161..4bc21f469 100644 --- a/src/pc/configfile.h +++ b/src/pc/configfile.h @@ -82,7 +82,7 @@ extern unsigned int configHostPort; extern unsigned int configHostSaveSlot; extern unsigned int configPlayerInteraction; extern unsigned int configPlayerKnockbackStrength; -extern bool configStayInLevelAfterStar; +extern unsigned int configStayInLevelAfterStar; extern unsigned int configNetworkSystem; extern char configPlayerName[]; extern unsigned int configPlayerModel; diff --git a/src/pc/controller/controller_keyboard_debug.c b/src/pc/controller/controller_keyboard_debug.c index 7f57c8c2b..393ea1959 100644 --- a/src/pc/controller/controller_keyboard_debug.c +++ b/src/pc/controller/controller_keyboard_debug.c @@ -45,7 +45,7 @@ static void debug_warp_level1() { } static void debug_warp_level2() { - dynos_warp_to_level(LEVEL_WF, 1, 1); + dynos_warp_to_level(LEVEL_BOWSER_1, 1, 1); } static void debug_grand_star(void) { diff --git a/src/pc/djui/djui_panel_host_settings.c b/src/pc/djui/djui_panel_host_settings.c index a2748366b..77d9455d1 100644 --- a/src/pc/djui/djui_panel_host_settings.c +++ b/src/pc/djui/djui_panel_host_settings.c @@ -63,9 +63,10 @@ void djui_panel_host_settings_create(struct DjuiBase* caller) { djui_base_set_size(&selectionbox2->base, 1.0f, 32); djui_interactable_hook_value_change(&selectionbox2->base, djui_panel_host_settings_knockback_change); - struct DjuiCheckbox* checkbox1 = djui_checkbox_create(&body->base, "Stay in level after star", &configStayInLevelAfterStar); - djui_base_set_size_type(&checkbox1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&checkbox1->base, 1.0f, 32); + char* lChoices[3] = { "Leave level", "Stay in level", "Non-stop" }; + struct DjuiSelectionbox* selectionbox3 = djui_selectionbox_create(&body->base, "On star collection", lChoices, 3, &configStayInLevelAfterStar); + djui_base_set_size_type(&selectionbox3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); + djui_base_set_size(&selectionbox3->base, 1.0f, 32); struct DjuiCheckbox* checkbox2 = djui_checkbox_create(&body->base, "Skip intro cutscene", &configSkipIntro); djui_base_set_size_type(&checkbox2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);