diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm
index dd45f3d4..d5820d52 100644
--- a/code/game/objects/items/stacks/sheets/mineral.dm
+++ b/code/game/objects/items/stacks/sheets/mineral.dm
@@ -290,13 +290,14 @@ GLOBAL_LIST_INIT(bananium_recipes, list ( \
sheettype = "calorite"
materials = list(MAT_CALORITE=MINERAL_MATERIAL_AMOUNT)
novariants = TRUE
- grind_results = list(/datum/reagent/consumable/lipoifier = 5)
+ grind_results = list(/datum/reagent/consumable/lipoifier = 3)
point_value = 40
merge_type = /obj/item/stack/sheet/mineral/calorite
GLOBAL_LIST_INIT(calorite_recipes, list ( \
- new/datum/stack_recipe("calorite tile", /obj/item/stack/tile/mineral/calorite, 1, 4, 20), \
- new/datum/stack_recipe("Fatty Statue", /obj/structure/statue/calorite/fatty, 5, one_per_turf = 1, on_floor = 1),
+ new/datum/stack_recipe("Calorite tile", /obj/item/stack/tile/mineral/calorite, 1, 4, 20), \
+ new/datum/stack_recipe("Fatty statue", /obj/structure/statue/calorite/fatty, 5, one_per_turf = 1, on_floor = 1),
+ new/datum/stack_recipe("Calorite doors", /obj/structure/statue/calorite/fatty, 5, one_per_turf = 1, on_floor = 1),
))
/obj/item/stack/sheet/mineral/calorite/Initialize(mapload, new_amount, merge = TRUE)
diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm
index 5c6bd48f..3718be66 100644
--- a/code/game/objects/structures/mineral_doors.dm
+++ b/code/game/objects/structures/mineral_doors.dm
@@ -167,6 +167,97 @@
/obj/structure/mineral_door/uranium/ComponentInitialize()
return
+
+/obj/structure/mineral_door/calorite //GS13
+ name = "calorite door"
+ icon_state = "paperframe"
+ sheetType = /obj/item/stack/sheet/mineral/calorite
+ max_integrity = 200
+ light_range = 1
+ var/fatten = FALSE // whether player will be fattened
+ var/fatten_delay = 1 // ticks per periodic loop
+ var/fat_to_add = 2 // fatness per tick stunned
+ var/stuck = FALSE // whether player is stuck
+ var/stuck_delay = 0 // set in proc/Fatten
+ var/blocked = FALSE // whether door is blocked
+
+// override /obj/structure/mineral_door/proc/Open()
+/obj/structure/mineral_door/calorite/Open() //GS13
+ isSwitchingStates = 1
+ playsound(src, openSound, 100, 1)
+ set_opacity(FALSE)
+ flick("[initial_state]opening",src)
+ sleep(10)
+ density = FALSE
+ state = 1
+ air_update_turf(1)
+ update_icon()
+ isSwitchingStates = 0
+
+ if(close_delay != -1)
+ addtimer(CALLBACK(src, .proc/Close), close_delay)
+
+ // start periodic loop
+ stuck = FALSE
+ addtimer(CALLBACK(src, .proc/Fatten), fatten_delay)
+
+/obj/structure/mineral_door/calorite/proc/Fatten() //GS13
+ if(state == 1) // door must be open
+ // check periodically
+ addtimer(CALLBACK(src, .proc/Fatten), fatten_delay)
+ // check for mobs in open door
+ var/turf/T = get_turf(src)
+ blocked = FALSE
+ for(var/mob/living/carbon/M in T)
+ blocked = TRUE
+ // determine if mob should get stuck and be fattened
+ if(M.fatness >= FATNESS_LEVEL_BARELYMOBILE)
+ fatten = TRUE
+ if (!stuck)
+ stuck_delay = 120
+ M.visible_message(
+ "[M] gets stuck in the doorway!",
+ "You feel yourself get stuck in the doorway!")
+ else if(M.fatness >= FATNESS_LEVEL_MORBIDLY_OBESE)
+ fatten = TRUE
+ if (!stuck)
+ stuck_delay = 50
+ M.visible_message(
+ "[M] barely squeezes through the doorway!",
+ "You feel your sides barely squeeze through the doorway!")
+ else if(M.fatness >= FATNESS_LEVEL_FATTER)
+ fatten = TRUE
+ if (!stuck)
+ stuck_delay = 15
+ M.visible_message(
+ "[M]'s sides briefly brush against the doorway.",
+ "You feel your sides smush against the doorway!.")
+ else if(M.fatness >= FATNESS_LEVEL_FAT)
+ fatten = TRUE
+ if (!stuck)
+ stuck_delay = 5
+ M.visible_message(
+ "[M]'s sides briefly brush against the doorway.",
+ "You feel your sides briefly brush against the doorway!")
+ else
+ fatten = FALSE
+ stuck = FALSE
+ stuck_delay = 0
+
+ if (fatten) // get stuck
+ if (!stuck)
+ M.Stun(stuck_delay/2) // give player time to escape
+ stuck = TRUE
+ if (stuck_delay > 0) // wait for stun to end
+ stuck_delay = stuck_delay - fatten_delay
+ if (stuck_delay <= 0)
+ stuck_delay = 0
+ // gain weight while stuck
+ M.adjust_fatness(fat_to_add, FATTENING_TYPE_ITEM)
+
+ if (!blocked)
+ stuck = FALSE // ready to go again
+
/obj/structure/mineral_door/sandstone
name = "sandstone door"
icon_state = "sandstone"
diff --git a/code/game/turfs/simulated/minerals.dm b/code/game/turfs/simulated/minerals.dm
index 69f21035..ad4dd87a 100644
--- a/code/game/turfs/simulated/minerals.dm
+++ b/code/game/turfs/simulated/minerals.dm
@@ -173,7 +173,7 @@
initial_gas_mix = LAVALAND_DEFAULT_ATMOS
defer_change = 1
mineralSpawnChanceList = list(
- /turf/closed/mineral/uranium/volcanic = 35, /turf/closed/mineral/diamond/volcanic = 30, /turf/closed/mineral/gold/volcanic = 45, /turf/closed/mineral/titanium/volcanic = 45,
+ /turf/closed/mineral/uranium/volcanic = 35, /turf/closed/mineral/diamond/volcanic = 30, /turf/closed/mineral/calorite = 30, /turf/closed/mineral/gold/volcanic = 45, /turf/closed/mineral/titanium/volcanic = 45,
/turf/closed/mineral/silver/volcanic = 50, /turf/closed/mineral/plasma/volcanic = 50, /turf/closed/mineral/bscrystal/volcanic = 20)
diff --git a/code/modules/cargo/exports/large_objects.dm b/code/modules/cargo/exports/large_objects.dm
index 26e8f34b..0ef733d0 100644
--- a/code/modules/cargo/exports/large_objects.dm
+++ b/code/modules/cargo/exports/large_objects.dm
@@ -275,7 +275,7 @@
export_types = list(/obj/structure/statue/bananium/clown)
/datum/export/large/fattystatue //GS13
- cost = 2000
+ cost = 1500
unit_name = "Fatty statue"
export_types = list(/obj/structure/statue/calorite/fatty)