diff --git a/code/__defines/misc_vr.dm b/code/__defines/misc_vr.dm index 94600a0d8af..67edbeb1bf0 100644 --- a/code/__defines/misc_vr.dm +++ b/code/__defines/misc_vr.dm @@ -65,4 +65,14 @@ #define MAT_PLASTITANIUM "plastitanium" #define MAT_PLASTITANIUMHULL "plastitanium hull" #define MAT_PLASTITANIUMGLASS "plastitanium glass" -#define MAT_GOLDHULL "gold hull" \ No newline at end of file +#define MAT_GOLDHULL "gold hull" + +#define RESIZE_HUGE = 2 +#define RESIZE_BIG = 1.5 +#define RESIZE_NORMAL = 1 +#define RESIZE_SMALL = 0.5 +#define RESIZE_TINY = 0.25 +#define RESIZE_A_HUGEBIG = (RESIZE_HUGE + RESIZE_BIG) / 2 +#define RESIZE_A_BIGNORMAL = (RESIZE_BIG + RESIZE_NORMAL) / 2 +#define RESIZE_A_NORMALSMALL = (RESIZE_NORMAL + RESIZE_SMALL) / 2 +#define RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2 \ No newline at end of file diff --git a/code/game/area/Space Station 13 areas_vr.dm b/code/game/area/Space Station 13 areas_vr.dm index 816e6f6aa9a..500ba1bc167 100644 --- a/code/game/area/Space Station 13 areas_vr.dm +++ b/code/game/area/Space Station 13 areas_vr.dm @@ -2,13 +2,6 @@ /area var/limit_mob_size = TRUE //If mob size is limited in the area. -/area/Entered(mob/living/H, oldLoc) - //Clamps mob size when entering a new area that has size limit. - //Mobs with size_uncapped set to TRUE or 1 will be ignored. - . = ..() - if (src.limit_mob_size && isliving(H) && !H.size_uncapped) - H.resize(H.size_multiplier) - /area/shuttle/belter name = "Belter Shuttle" icon_state = "shuttle2" diff --git a/code/modules/admin/verbs/resize.dm b/code/modules/admin/verbs/resize.dm index e07fc5f2bee..7fa1d40d847 100644 --- a/code/modules/admin/verbs/resize.dm +++ b/code/modules/admin/verbs/resize.dm @@ -1,4 +1,4 @@ -/client/proc/resize(var/mob/living/L in player_list) +/client/proc/resize(var/mob/living/L in mob_list) set name = "Resize" set desc = "Resizes any living mob without any restrictions on size." set category = "Fun" @@ -7,7 +7,10 @@ var/size_multiplier = input(usr, "Input size multiplier.", "Resize", 1) L.resize(size_multiplier, TRUE, TRUE) - L.size_uncapped = TRUE + if(size_multiplier in range(RESIZE_TINY, RESIZE_HUGE)) + L.size_uncapped = FALSE + else + L.size_uncapped = TRUE log_and_message_admins("has changed [key_name(L)]'s size multiplier to [size_multiplier].") feedback_add_details("admin_verb","RESIZE") \ No newline at end of file diff --git a/code/modules/vore/resizing/resize_vr.dm b/code/modules/vore/resizing/resize_vr.dm index dfd620134bc..5beb108d387 100644 --- a/code/modules/vore/resizing/resize_vr.dm +++ b/code/modules/vore/resizing/resize_vr.dm @@ -1,16 +1,5 @@ - -//these aren't defines so they can stay in this file -var/const/RESIZE_HUGE = 2 -var/const/RESIZE_BIG = 1.5 -var/const/RESIZE_NORMAL = 1 -var/const/RESIZE_SMALL = 0.5 -var/const/RESIZE_TINY = 0.25 - -//average -var/const/RESIZE_A_HUGEBIG = (RESIZE_HUGE + RESIZE_BIG) / 2 -var/const/RESIZE_A_BIGNORMAL = (RESIZE_BIG + RESIZE_NORMAL) / 2 -var/const/RESIZE_A_NORMALSMALL = (RESIZE_NORMAL + RESIZE_SMALL) / 2 -var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2 +GLOBAL_LIST_EMPTY(size_uncapped_mobs) +GLOBAL_VAR(size_uncapped_mobs_timer) // Adding needed defines to /mob/living // Note: Polaris had this on /mob/living/carbon/human We need it higher up for animals and stuff. @@ -71,11 +60,42 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2 return FALSE return TRUE +/proc/add_to_uncapped_list(var/mob/living/L) + if(!GLOB.size_uncapped_mobs.len) + GLOB.size_uncapped_mobs_timer = addtimer(CALLBACK(GLOBAL_PROC, .check_uncapped_list), 2 SECONDS, TIMER_LOOP | TIMER_UNIQUE | TIMER_STOPPABLE) + GLOB.size_uncapped_mobs |= weakref(L) + +/proc/remove_from_uncapped_list(var/mob/living/L) + if(!GLOB.size_uncapped_mobs.len) + return + + GLOB.size_uncapped_mobs -= weakref(L) + + if(!GLOB.size_uncapped_mobs.len) + deltimer(GLOB.size_uncapped_mobs_timer) + +/proc/check_uncapped_list() + for(var/weakref/wr in GLOB.size_uncapped_mobs) + var/mob/living/L = wr.resolve() + var/area/A = get_area(L) + if(!istype(L)) + GLOB.size_uncapped_mobs -= wr + continue + + if((A.limit_mob_size && !L.size_uncapped) && (L.size_multiplier <= RESIZE_TINY || L.size_multiplier >= RESIZE_HUGE)) + L.resize(L.size_multiplier) + GLOB.size_uncapped_mobs -= wr + + if(!GLOB.size_uncapped_mobs.len) + deltimer(GLOB.size_uncapped_mobs_timer) + /mob/living/proc/resize(var/new_size, var/animate = TRUE, var/uncapped = FALSE) if(!uncapped) new_size = clamp(new_size, RESIZE_TINY, RESIZE_HUGE) src.size_uncapped = FALSE - + remove_from_uncapped_list(src) + else + add_to_uncapped_list(src) if(size_multiplier == new_size) return 1