Files
GhomandGitHub adf838c32a Holidays content: Kitchen has more ingredients on some holidays, more mail items, special bar kegs on St Patrick Day, Beer Day and Talk-Like-a-Pirate Day. (#96509)
## About The Pull Request
This PR adds a simple holiday spawner type that can be used for objects
that are only spawned if the holiday they're associated with is being
celebrated. Right now it has three subtypes, all related to the kitchen
(liquid ingredient, powdered ingredient, meat ingredient).

The involved holidays are the fictional tiziran and mothic festivities
Atrakor's Might and Fleet Day. Extra stuff is also spawned on Bee Day
and Beer Day. On Vegan Day, the monkey meat slabs in the meat fridges
are replaced with plant-based meat slabs (killer tomato slices and pod
people meat, plus veggies) and the fridge is renamed from "meat fridge"
to "vegan fridge".

This PR also adds a few more holiday-specific mail objects such as
Speak-Like-a-Pirate Day, Fleet Day, Atrakor's Might, Chernobyl's
Disaster Anniversary (it's just a geiger counter), Monkey Day and
Draconic Language Day.

EDIT: I've decided to make the bar backroom beer keg into a spawner that
will spawn special kegs on specific days (otherwise it's a 1 in 25
chance). These kegs can contain drinks a little more refined than the
average beer keg. Also it comes with a resprite of kegs because the old
one was starting to look a little ass compared to other reagent
dispensers.

## Why It's Good For The Game
For being fictional festivities revolving around food and culture, and
despite the lot of recipes for moths and lizard people, we aren't
offering anything to chef players to let them cook said recipes beside
what's given on any bog-generic round. This is a step toward a slightly
less lackluster implementation of those festivities and recipes into the
game. Also chance for cooler kegs for the bartender.

## Changelog

🆑
add: The kitchen fridges may have additional ingredients on certain
holidays, in particular Atrakor's Might (lizardpeople) and Fleet Day
(mothpeople), and Vegan Day.
add: Added a few more holyday-specific mail items.
add: Replaces the beer keg in the bar backroom with special kegs on St.
Patrick's Day, Beer Day and Speak-Like-a-Pirate day. On any other day,
there's a chance that the beer keg will be replaced with one containing
whiskey or rum, or in rare cases, one of those special kegs.
imageadd: resprited the keg as well.
/🆑
2026-07-01 10:26:56 +12:00

159 lines
5.2 KiB
Plaintext

/obj/structure/closet/secure_closet/freezer
icon_state = "freezer"
base_icon_state = "freezer"
flags_1 = PREVENT_CONTENTS_EXPLOSION_1
door_anim_squish = 0.22
door_anim_angle = 123
door_anim_time = 4
custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 5.3, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3.5)
/// If FALSE, we will protect the first person in the freezer from an explosion / nuclear blast.
var/jones = FALSE
paint_jobs = null
sealed = TRUE
/// The rate at which the internal air mixture cools
var/cooling_rate_per_second = 4
/// Minimum temperature of the internal air mixture
var/minimum_temperature = T0C - 60
/obj/structure/closet/secure_closet/freezer/process_internal_air(seconds_per_tick)
if(opened)
var/datum/gas_mixture/current_exposed_air = loc.return_air()
if(!current_exposed_air)
return
// The internal air won't cool down the external air when the freezer is opened.
internal_air.temperature = max(current_exposed_air.temperature, internal_air.temperature)
return ..()
else
if(internal_air.temperature <= minimum_temperature)
return
var/temperature_decrease_this_tick = min(cooling_rate_per_second * seconds_per_tick, internal_air.temperature - minimum_temperature)
internal_air.temperature -= temperature_decrease_this_tick
/obj/structure/closet/secure_closet/freezer/ex_act()
if(jones)
return ..()
jones = TRUE
flags_1 &= ~PREVENT_CONTENTS_EXPLOSION_1
return FALSE
/obj/structure/closet/secure_closet/freezer/atom_deconstruct(disassembled)
new /obj/item/assembly/igniter/condenser(drop_location())
/obj/structure/closet/secure_closet/freezer/empty
name = "freezer"
/obj/structure/closet/secure_closet/freezer/empty/open
req_access = null
locked = FALSE
/obj/structure/closet/secure_closet/freezer/kitchen
name = "kitchen cabinet"
req_access = list(ACCESS_KITCHEN)
/obj/structure/closet/secure_closet/freezer/kitchen/PopulateContents()
..()
for(var/i in 1 to 3)
new /obj/item/reagent_containers/condiment/flour(src)
new /obj/item/reagent_containers/condiment/rice(src)
new /obj/item/reagent_containers/condiment/sugar(src)
new /obj/effect/spawner/holiday/powdered_ingredient(src)
/obj/structure/closet/secure_closet/freezer/kitchen/all_access
req_access = null
/obj/structure/closet/secure_closet/freezer/kitchen/maintenance
name = "maintenance refrigerator"
desc = "This refrigerator looks quite dusty, is there anything edible still inside?"
req_access = null
/obj/structure/closet/secure_closet/freezer/kitchen/maintenance/PopulateContents()
..()
for(var/i in 1 to 5)
new /obj/item/reagent_containers/condiment/milk(src)
new /obj/item/reagent_containers/condiment/soymilk(src)
for(var/i in 1 to 2)
new /obj/item/storage/fancy/egg_box(src)
new /obj/effect/spawner/holiday/liquid_ingredient(src)
/obj/structure/closet/secure_closet/freezer/kitchen/mining
req_access = null
/obj/structure/closet/secure_closet/freezer/meat
name = "meat fridge"
req_access = list(ACCESS_KITCHEN)
/obj/structure/closet/secure_closet/freezer/meat/update_name()
name = check_holidays(VEGAN_DAY) ? "vegan fridge" : "meat fridge"
return ..()
/obj/structure/closet/secure_closet/freezer/meat/PopulateContents()
..()
if(!check_holidays(VEGAN_DAY))
for(var/i in 1 to 4)
new /obj/item/food/meat/slab/monkey(src)
new /obj/effect/spawner/holiday/meat_ingredient(src) //this contains holiday specials (and vegan day stuff)
/obj/structure/closet/secure_closet/freezer/meat/open
locked = FALSE
req_access = null
/obj/structure/closet/secure_closet/freezer/meat/all_access
req_access = null
/obj/structure/closet/secure_closet/freezer/gulag_fridge
name = "refrigerator"
/obj/structure/closet/secure_closet/freezer/gulag_fridge/PopulateContents()
..()
for(var/i in 1 to 3)
new /obj/item/reagent_containers/cup/glass/bottle/beer/light(src)
/obj/structure/closet/secure_closet/freezer/fridge
name = "refrigerator"
req_access = list(ACCESS_KITCHEN)
/obj/structure/closet/secure_closet/freezer/fridge/PopulateContents()
..()
for(var/i in 1 to 5)
new /obj/item/reagent_containers/condiment/milk(src)
new /obj/item/reagent_containers/condiment/soymilk(src)
for(var/i in 1 to 2)
new /obj/item/storage/fancy/egg_box(src)
new /obj/effect/spawner/holiday/liquid_ingredient(src)
/obj/structure/closet/secure_closet/freezer/fridge/all_access
req_access = null
/obj/structure/closet/secure_closet/freezer/fridge/open
req_access = null
locked = FALSE
/obj/structure/closet/secure_closet/freezer/fridge/preopen
req_access = null
locked = FALSE
opened = TRUE
/obj/structure/closet/secure_closet/freezer/money
name = "freezer"
desc = "This contains cold hard cash."
req_access = list(ACCESS_VAULT)
/obj/structure/closet/secure_closet/freezer/money/PopulateContents()
..()
for(var/i in 1 to 3)
new /obj/item/stack/spacecash/c1000(src)
for(var/i in 1 to 5)
new /obj/item/stack/spacecash/c500(src)
for(var/i in 1 to 6)
new /obj/item/stack/spacecash/c200(src)
/obj/structure/closet/secure_closet/freezer/cream_pie
name = "cream pie closet"
desc = "Contains pies filled with cream and/or custard, you sickos."
req_access = list(ACCESS_THEATRE)
/obj/structure/closet/secure_closet/freezer/cream_pie/PopulateContents()
..()
new /obj/item/food/pie/cream(src)