diff --git a/GainStation13/code/machinery/doors/airlock_types.dm b/GainStation13/code/machinery/doors/airlock_types.dm index 7e2d83ab6c..91f2108c3c 100644 --- a/GainStation13/code/machinery/doors/airlock_types.dm +++ b/GainStation13/code/machinery/doors/airlock_types.dm @@ -7,6 +7,17 @@ if(isnull(stuckage_weight) || (stuckage_weight < 10)) return ..() // They aren't able to get stuck + var/chance_to_get_stuck = L?.client?.prefs?.stuckage_chance * 100 + if(chance_to_get_stuck && L.fatness > stuckage_weight) + if(prob(chance_to_get_stuck)) + L.doorstuck = 1 + L.visible_message("[L] gets stuck in the doorway!") + to_chat(L, "As you attempt to pass through \the [src], your ample curves get wedged in the narrow opening. You find yourself stuck in the [src] frame, struggling to free yourself from the tight squeeze.") + L.Stun(55, updating = TRUE, ignore_canstun = TRUE) + addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/door/airlock/, AsyncDoorstuckCall), L), 55) + return ..() + + if(L.fatness > (stuckage_weight * 2)) if(rand(1, 3) == 1) L.doorstuck = 1 diff --git a/GainStation13/code/modules/client/preferences/preferences.dm b/GainStation13/code/modules/client/preferences/preferences.dm index 4919d3703e..3ad11a65e4 100644 --- a/GainStation13/code/modules/client/preferences/preferences.dm +++ b/GainStation13/code/modules/client/preferences/preferences.dm @@ -27,6 +27,8 @@ var/weight_gain_permanent = FALSE /// At what weight will you start to get stuck in airlocks? var/stuckage = FALSE + // Percentage chance to get stuck in doors. Setting this to 0 will make the chance depend on the person's weight + var/stuckage_chance = 0 /// At what weight will you start to break chairs? var/chair_breakage = FALSE /// Are items that only affect those at high weights able to affect the player? diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 0c86d86668..00af91d8b9 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -328,6 +328,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) wl_rate = 0.5 if(isnull(stuckage)) stuckage = 0 + if (stuckage_chance == null) + stuckage_chance = 0 if(isnull(max_weight)) max_weight = 0 if(isnull(chair_breakage)) @@ -1422,6 +1424,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat +="" dat += "

GS13 Gameplay Preferences

" dat += "Stuckage (at what weight will you get stuck in doors?):[stuckage == FALSE ? "Disabled" : stuckage]
" + if(stuckage) + dat += "Stuckage Chance : [stuckage_chance]
" dat += "Chair Breakage (at what weight will you break chairs?):[chair_breakage == FALSE ? "Disabled" : chair_breakage]
" dat += "

" dat += "This preference will allow items that work based on weight to work to you, usually to your detriment.
" @@ -3021,6 +3025,13 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/new_wl_rate = input(user, "Choose your weight loss rate from 0.1 (10%) to 2 (200%).\n Decimals such as 0.2 indicate 20% rate.\nDefault recommended rate is 0.5 (50%)", "Character Preference", wl_rate) as num|null if (new_wl_rate) wl_rate = max(min(round(text2num(new_wl_rate),0.01),2),0) + + if("stuckage_chance") + var/new_stuckage_chance = input(user, "Choose your chance to get stuck in doors from 0.1 (10%) to 1 (100%).\nDecimals such as 0.2 indicate 20% chance.\nSetting this to 0 restores default values.", "Character Preference", stuckage_chance) as num|null + if(new_stuckage_chance) + stuckage_chance = clamp(new_stuckage_chance, 0.1, 1) + else + stuckage_chance = 0 if("marking_down") // move the specified marking down diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 20278d34de..4bf91a6e0f 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -952,6 +952,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["helplessness_clothing_back"] >> helplessness_clothing_back S["helplessness_no_buckle"] >> helplessness_no_buckle S["stuckage"] >> stuckage + S["stuckage_chance"] >> stuckage_chance S["chair_breakage"] >> chair_breakage S["fatness_vulnerable"] >> fatness_vulnerable S["extreme_fatness_vulnerable"] >> extreme_fatness_vulnerable @@ -1247,6 +1248,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["helplessness_clothing_back"], helplessness_clothing_back) WRITE_FILE(S["helplessness_no_buckle"], helplessness_no_buckle) WRITE_FILE(S["stuckage"], stuckage) + WRITE_FILE(S["stuckage_chance"], stuckage_chance) WRITE_FILE(S["chair_breakage"], chair_breakage) WRITE_FILE(S["fatness_vulnerable"], fatness_vulnerable) WRITE_FILE(S["extreme_fatness_vulnerable"], extreme_fatness_vulnerable)