Files
Bubberstation/code/modules/holiday/holidays.dm
T
norsvenska 952d2cfa89 Adds station prefixes for Christmas (#76225)
## About The Pull Request

Adds 15 different station prefixes for Christmas, because there were
none previously (why?)

## Why It's Good For The Game


![image](https://github.com/tgstation/tgstation/assets/73006946/4fd9823b-8cd8-48af-a4ec-99e706136c4f)
that's right, why doesn't christmas have special prefixes?
well now it does

## Changelog

🆑
add: Christmas now has special station prefixes.
/🆑
2023-06-24 11:47:18 +02:00

871 lines
25 KiB
Plaintext

/datum/holiday
///Name of the holiday itself. Visible to players.
var/name = "If you see this the holiday calendar code is broken"
///What day of begin_month does the holiday begin on?
var/begin_day = 1
///What month does the holiday begin on?
var/begin_month = 0
/// What day of end_month does the holiday end? Default of 0 means the holiday lasts a single.
var/end_day = 0
/// What month does the holiday end on?
var/end_month = 0
/// for christmas neverending, or testing. Forces a holiday to be celebrated.
var/always_celebrate = FALSE
/// Held variable to better calculate when certain holidays may fall on, like easter.
var/current_year = 0
/// How many years are you offsetting your calculations for begin_day and end_day on. Used for holidays like easter.
var/year_offset = 0
///Timezones this holiday is celebrated in (defaults to three timezones spanning a 50 hour window covering all timezones)
var/list/timezones = list(TIMEZONE_LINT, TIMEZONE_UTC, TIMEZONE_ANYWHERE_ON_EARTH)
///If this is defined, drones without a default hat will spawn with this one during the holiday; check drones_as_items.dm to see this used
var/obj/item/drone_hat
///When this holiday is active, does this prevent mail from arriving to cargo? Try not to use this for longer holidays.
var/mail_holiday = FALSE
var/poster_name = "generic celebration poster"
var/poster_desc = "A poster for celebrating some holiday. Unfortunately, its unfinished, so you can't see what the holiday is."
var/poster_icon = "holiday_unfinished"
/// Color scheme for this holiday
var/list/holiday_colors
// This proc gets run before the game starts when the holiday is activated. Do festive shit here.
/datum/holiday/proc/celebrate()
if(mail_holiday)
SSeconomy.mail_blocked = TRUE
return
// When the round starts, this proc is ran to get a text message to display to everyone to wish them a happy holiday
/datum/holiday/proc/greet()
return "Have a happy [name]!"
// Returns special prefixes for the station name on certain days. You wind up with names like "Christmas Object Epsilon". See new_station_name()
/datum/holiday/proc/getStationPrefix()
//get the first word of the Holiday and use that
var/i = findtext(name, " ")
return copytext(name, 1, i)
// Return 1 if this holidy should be celebrated today
/datum/holiday/proc/shouldCelebrate(dd, mm, yyyy, ddd)
if(always_celebrate)
return TRUE
if(!end_day)
end_day = begin_day
if(!end_month)
end_month = begin_month
if(end_month > begin_month) //holiday spans multiple months in one year
if(mm == end_month) //in final month
if(dd <= end_day)
return TRUE
else if(mm == begin_month)//in first month
if(dd >= begin_day)
return TRUE
else if(mm in begin_month to end_month) //holiday spans 3+ months and we're in the middle, day doesn't matter at all
return TRUE
else if(end_month == begin_month) // starts and stops in same month, simplest case
if(mm == begin_month && (dd in begin_day to end_day))
return TRUE
else // starts in one year, ends in the next
if(mm >= begin_month && dd >= begin_day) // Holiday ends next year
return TRUE
if(mm <= end_month && dd <= end_day) // Holiday started last year
return TRUE
return FALSE
/// Procs to return holiday themed colors for recoloring atoms
/datum/holiday/proc/get_holiday_colors(atom/thing_to_color, pattern = PATTERN_DEFAULT)
if(!holiday_colors)
return
switch(pattern)
if(PATTERN_DEFAULT)
return holiday_colors[(thing_to_color.y % holiday_colors.len) + 1]
if(PATTERN_VERTICAL_STRIPE)
return holiday_colors[(thing_to_color.x % holiday_colors.len) + 1]
/proc/request_holiday_colors(atom/thing_to_color, pattern = PATTERN_DEFAULT)
switch(pattern)
if(PATTERN_RANDOM)
return "#[random_short_color()]"
if(PATTERN_RAINBOW)
var/datum/holiday/pride_week/rainbow_datum = new()
return rainbow_datum.get_holiday_colors(thing_to_color, PATTERN_DEFAULT)
if(!length(GLOB.holidays))
return
for(var/holiday_key in GLOB.holidays)
var/datum/holiday/holiday_real = GLOB.holidays[holiday_key]
return holiday_real.get_holiday_colors(thing_to_color, pattern)
// The actual holidays
// JANUARY
//Fleet Day is celebrated on Jan 19th, the date on which moths were merged (#34498)
/datum/holiday/fleet_day
name = "Fleet Day"
begin_month = JANUARY
begin_day = 19
/datum/holiday/fleet_day/greet()
return "This day commemorates another year of successful survival aboard the Mothic Grand Nomad Fleet. Moths galaxywide are encouraged to eat, drink, and be merry."
/datum/holiday/fleet_day/getStationPrefix()
return pick("Moth", "Fleet", "Nomadic")
// FEBRUARY
/datum/holiday/groundhog
name = "Groundhog Day"
begin_day = 2
begin_month = FEBRUARY
/datum/holiday/groundhog/getStationPrefix()
return pick("Deja Vu") //I have been to this place before
/datum/holiday/nz
name = "Waitangi Day"
timezones = list(TIMEZONE_NZDT, TIMEZONE_CHADT)
begin_day = 6
begin_month = FEBRUARY
/datum/holiday/nz/getStationPrefix()
return pick("Aotearoa","Kiwi","Fish 'n' Chips","Kākāpō","Southern Cross")
/datum/holiday/nz/greet()
var/nz_age = text2num(time2text(world.timeofday, "YYYY")) - 1840
return "On this day [nz_age] years ago, New Zealand's Treaty of Waitangi, the founding document of the nation, was signed!"
/datum/holiday/valentines
name = VALENTINES
begin_day = 13
end_day = 15
begin_month = FEBRUARY
poster_name = "lovey poster"
poster_desc = "A poster celebrating all the relationships built today. Of course, you probably don't have one."
poster_icon = "holiday_love"
/datum/holiday/valentines/getStationPrefix()
return pick("Love","Amore","Single","Smootch","Hug")
/datum/holiday/birthday
name = "Birthday of Space Station 13"
begin_day = 16
begin_month = FEBRUARY
drone_hat = /obj/item/clothing/head/costume/festive
poster_name = "station birthday poster"
poster_desc = "A poster celebrating another year of the station's operation. Why anyone would be happy to be here is byond you."
poster_icon = "holiday_cake" // is a lie
/datum/holiday/birthday/greet()
var/game_age = text2num(time2text(world.timeofday, "YYYY")) - 2003
var/Fact
switch(game_age)
if(16)
Fact = " SS13 is now old enough to drive!"
if(18)
Fact = " SS13 is now legal!"
if(21)
Fact = " SS13 can now drink!"
if(26)
Fact = " SS13 can now rent a car!"
if(30)
Fact = " SS13 can now go home and be a family man!"
if(35)
Fact = " SS13 can now run for President of the United States!"
if(40)
Fact = " SS13 can now suffer a midlife crisis!"
if(50)
Fact = " Happy golden anniversary!"
if(65)
Fact = " SS13 can now start thinking about retirement!"
if(!Fact)
Fact = " SS13 is now [game_age] years old!"
return "Say 'Happy Birthday' to Space Station 13, first publicly playable on February 16th, 2003![Fact]"
/datum/holiday/random_kindness
name = "Random Acts of Kindness Day"
begin_day = 17
begin_month = FEBRUARY
poster_name = "act of kindness poster"
poster_desc = "A poster notifying the reader today is 'Act of Kindness' day. What a nice thing to do."
poster_icon = "holiday_kind"
/datum/holiday/random_kindness/greet()
return "Go do some random acts of kindness for a stranger!" //haha yeah right
/datum/holiday/leap
name = "Leap Day"
begin_day = 29
begin_month = FEBRUARY
// MARCH
/datum/holiday/pi
name = "Pi Day"
begin_day = 14
begin_month = MARCH
poster_name = "pi day poster"
poster_desc = "A poster celebrating the 3.141529th day of the year. At least theres free pie."
poster_icon = "holiday_pi"
/datum/holiday/pi/getStationPrefix()
return pick("Sine","Cosine","Tangent","Secant", "Cosecant", "Cotangent")
/datum/holiday/no_this_is_patrick
name = "St. Patrick's Day"
begin_day = 17
begin_month = MARCH
drone_hat = /obj/item/clothing/head/soft/green
/datum/holiday/no_this_is_patrick/getStationPrefix()
return pick("Blarney","Green","Leprechaun","Booze")
/datum/holiday/no_this_is_patrick/greet()
return "Happy National Inebriation Day!"
// APRIL
/datum/holiday/april_fools
name = APRIL_FOOLS
begin_month = APRIL
begin_day = 1
end_day = 2
/datum/holiday/april_fools/celebrate()
. = ..()
SSjob.set_overflow_role(/datum/job/clown)
SSticker.login_music = 'sound/ambience/clown.ogg'
for(var/i in GLOB.new_player_list)
var/mob/dead/new_player/P = i
if(P.client)
P.client.playtitlemusic()
/datum/holiday/april_fools/get_holiday_colors(atom/thing_to_color)
return "#[random_short_color()]"
/datum/holiday/spess
name = "Cosmonautics Day"
begin_day = 12
begin_month = APRIL
drone_hat = /obj/item/clothing/head/syndicatefake
/datum/holiday/spess/greet()
return "On this day over 600 years ago, Comrade Yuri Gagarin first ventured into space!"
/datum/holiday/fourtwenty
name = "Four-Twenty"
begin_day = 20
begin_month = APRIL
/datum/holiday/fourtwenty/getStationPrefix()
return pick("Snoop","Blunt","Toke","Dank","Cheech","Chong")
/datum/holiday/tea
name = "National Tea Day"
begin_day = 21
begin_month = APRIL
/datum/holiday/tea/getStationPrefix()
return pick("Crumpet","Assam","Oolong","Pu-erh","Sweet Tea","Green","Black")
/datum/holiday/earth
name = "Earth Day"
begin_day = 22
begin_month = APRIL
/datum/holiday/anz
name = "ANZAC Day"
timezones = list(TIMEZONE_TKT, TIMEZONE_TOT, TIMEZONE_NZST, TIMEZONE_NFT, TIMEZONE_LHST, TIMEZONE_AEST, TIMEZONE_ACST, TIMEZONE_ACWST, TIMEZONE_AWST, TIMEZONE_CXT, TIMEZONE_CCT, TIMEZONE_CKT, TIMEZONE_NUT)
begin_day = 25
begin_month = APRIL
drone_hat = /obj/item/food/grown/poppy
/datum/holiday/anz/getStationPrefix()
return pick("Australian","New Zealand","Poppy", "Southern Cross")
// MAY
/datum/holiday/labor
name = "Labor Day"
begin_day = 1
begin_month = MAY
drone_hat = /obj/item/clothing/head/utility/hardhat
mail_holiday = TRUE
//Draconic Day is celebrated on May 3rd, the date on which the Draconic language was merged (#26780)
/datum/holiday/draconic_day
name = "Draconic Language Day"
begin_month = MAY
begin_day = 3
/datum/holiday/draconic_day/greet()
return "On this day, Lizardkind celebrates their language with literature and other cultural works."
/datum/holiday/draconic_day/getStationPrefix()
return pick("Draconic", "Literature", "Reading")
/datum/holiday/firefighter
name = "Firefighter's Day"
begin_day = 4
begin_month = MAY
drone_hat = /obj/item/clothing/head/utility/hardhat/red
/datum/holiday/firefighter/getStationPrefix()
return pick("Burning","Blazing","Plasma","Fire")
/datum/holiday/bee
name = "Bee Day"
begin_day = 20
begin_month = MAY
drone_hat = /obj/item/clothing/mask/animal/small/bee
/datum/holiday/bee/getStationPrefix()
return pick("Bee","Honey","Hive","Africanized","Mead","Buzz")
// JUNE
//The Festival of Atrakor's Might (Tizira's Moon) is celebrated on June 15th, the date on which the lizard visual revamp was merged (#9808)
/datum/holiday/atrakor_festival
name = "Festival of Atrakor's Might"
begin_month = JUNE
begin_day = 15
/datum/holiday/atrakor_festival/greet()
return "On this day, the Lizards traditionally celebrate the Festival of Atrakor's Might, where they honour the moon god with lavishly adorned clothing, large portions of food, and a massive celebration into the night."
/datum/holiday/atrakor_festival/getStationPrefix()
return pick("Moon", "Night Sky", "Celebration")
/// Garbage DAYYYYY
/// Huh?.... NOOOO
/// *GUNSHOT*
/// AHHHGHHHHHHH
/datum/holiday/garbageday
name = GARBAGEDAY
begin_day = 17
end_day = 17
begin_month = JUNE
/datum/holiday/summersolstice
name = "Summer Solstice"
begin_day = 21
begin_month = JUNE
/datum/holiday/pride_week
name = PRIDE_WEEK
begin_month = JUNE
// Stonewall was June 28th, this captures its week.
begin_day = 23
end_day = 29
holiday_colors = list(
COLOR_PRIDE_PURPLE,
COLOR_PRIDE_BLUE,
COLOR_PRIDE_GREEN,
COLOR_PRIDE_YELLOW,
COLOR_PRIDE_ORANGE,
COLOR_PRIDE_RED,
)
// JULY
/datum/holiday/doctor
name = "Doctor's Day"
begin_day = 1
begin_month = JULY
drone_hat = /obj/item/clothing/head/costume/nursehat
/datum/holiday/ufo
name = "UFO Day"
begin_day = 2
begin_month = JULY
drone_hat = /obj/item/clothing/mask/facehugger/dead
/datum/holiday/ufo/getStationPrefix() //Is such a thing even possible?
return pick("Ayy","Truth","Tsoukalos","Mulder","Scully") //Yes it is!
/datum/holiday/usa
name = "US Independence Day"
timezones = list(TIMEZONE_EDT, TIMEZONE_CDT, TIMEZONE_MDT, TIMEZONE_MST, TIMEZONE_PDT, TIMEZONE_AKDT, TIMEZONE_HDT, TIMEZONE_HST)
begin_day = 4
begin_month = JULY
mail_holiday = TRUE
/datum/holiday/usa/getStationPrefix()
return pick("Independent","American","Burger","Bald Eagle","Star-Spangled", "Fireworks")
/datum/holiday/writer
name = "Writer's Day"
begin_day = 8
begin_month = JULY
/datum/holiday/france
name = "Bastille Day"
timezones = list(TIMEZONE_CEST)
begin_day = 14
begin_month = JULY
drone_hat = /obj/item/clothing/head/beret
mail_holiday = TRUE
/datum/holiday/france/getStationPrefix()
return pick("Francais","Fromage", "Zut", "Merde")
/datum/holiday/france/greet()
return "Do you hear the people sing?"
/datum/holiday/hotdogday //I have plans for this.
name = "National Hot Dog Day"
begin_day = 17
begin_month = JULY
/datum/holiday/hotdogday/greet()
return "Happy National Hot Dog Day!"
//Gary Gygax's birthday, a fitting day for Wizard's Day
/datum/holiday/wizards_day
name = "Wizard's Day"
begin_month = JULY
begin_day = 27
drone_hat = /obj/item/clothing/head/wizard
/datum/holiday/wizards_day/getStationPrefix()
return pick("Dungeon", "Elf", "Magic", "D20", "Edition")
/datum/holiday/friendship
name = "Friendship Day"
begin_day = 30
begin_month = JULY
/datum/holiday/friendship/greet()
return "Have a magical [name]!"
// AUGUST
/datum/holiday/indigenous //Indigenous Peoples' Day from Earth!
name = "International Day of the World's Indigenous Peoples"
begin_month = AUGUST
begin_day = 9
/datum/holiday/indigenous/getStationPrefix()
return pick("Endangered language", "Word", "Language", "Language revitalization", "Potato", "Corn")
// AUGUST
/datum/holiday/ukraine
name = "Independence Day of Ukraine"
begin_month = AUGUST
begin_day = 24
/datum/holiday/indigenous/getStationPrefix()
return pick("Kyiv", "Ukraine")
// SEPTEMBER
//Tiziran Unification Day is celebrated on Sept 1st, the day on which lizards were made a roundstart race
/datum/holiday/tiziran_unification
name = "Tiziran Unification Day"
begin_month = SEPTEMBER
begin_day = 1
/datum/holiday/tiziran_unification/greet()
return "On this day over 400 years ago, Lizardkind first united under a single banner, ready to face the stars as one unified people."
/datum/holiday/tiziran_unification/getStationPrefix()
return pick("Tizira", "Lizard", "Imperial")
/datum/holiday/ianbirthday
name = "Ian's Birthday" //github.com/tgstation/tgstation/commit/de7e4f0de0d568cd6e1f0d7bcc3fd34700598acb
begin_month = SEPTEMBER
begin_day = 9
end_day = 10
/datum/holiday/ianbirthday/greet()
return "Happy birthday, Ian!"
/datum/holiday/ianbirthday/getStationPrefix()
return pick("Ian", "Corgi", "Erro")
/datum/holiday/pirate
name = "Talk-Like-a-Pirate Day"
begin_day = 19
begin_month = SEPTEMBER
drone_hat = /obj/item/clothing/head/costume/pirate
/datum/holiday/pirate/greet()
return "Ye be talkin' like a pirate today or else ye'r walkin' tha plank, matey!"
/datum/holiday/pirate/getStationPrefix()
return pick("Yarr","Scurvy","Yo-ho-ho")
/datum/holiday/questions
name = "Stupid-Questions Day"
begin_day = 28
begin_month = SEPTEMBER
/datum/holiday/questions/greet()
return "Are you having a happy [name]?"
// OCTOBER
/datum/holiday/animal
name = "Animal's Day"
begin_day = 4
begin_month = OCTOBER
/datum/holiday/animal/getStationPrefix()
return pick("Parrot","Corgi","Cat","Pug","Goat","Fox")
/datum/holiday/smile
name = "Smiling Day"
begin_day = 7
begin_month = OCTOBER
drone_hat = /obj/item/clothing/head/costume/papersack/smiley
/datum/holiday/boss
name = "Boss' Day"
begin_day = 16
begin_month = OCTOBER
drone_hat = /obj/item/clothing/head/hats/tophat
/datum/holiday/un_day
name = "Anniversary of the Foundation of the United Nations"
begin_month = OCTOBER
begin_day = 24
/datum/holiday/un_day/greet()
return "On this day in 1945, the United Nations was founded, laying the foundation for humanity's united government!"
/datum/holiday/un_day/getStationPrefix()
return pick("United", "Cooperation", "Humanitarian")
/datum/holiday/halloween
name = HALLOWEEN
begin_day = 29
begin_month = OCTOBER
end_day = 2
end_month = NOVEMBER
/datum/holiday/halloween/greet()
return "Have a spooky Halloween!"
/datum/holiday/halloween/getStationPrefix()
return pick("Bone-Rattling","Mr. Bones' Own","2SPOOKY","Spooky","Scary","Skeletons")
// NOVEMBER
/datum/holiday/vegan
name = "Vegan Day"
begin_day = 1
begin_month = NOVEMBER
/datum/holiday/vegan/getStationPrefix()
return pick("Tofu", "Tempeh", "Seitan", "Tofurkey")
/datum/holiday/october_revolution
name = "October Revolution"
begin_day = 6
begin_month = NOVEMBER
end_day = 7
/datum/holiday/october_revolution/getStationPrefix()
return pick("Communist", "Soviet", "Bolshevik", "Socialist", "Red", "Workers'")
/datum/holiday/remembrance_day
name = "Remembrance Day"
begin_month = NOVEMBER
begin_day = 11
drone_hat = /obj/item/food/grown/poppy
/datum/holiday/remembrance_day/getStationPrefix()
return pick("Peace", "Armistice", "Poppy")
/datum/holiday/lifeday
name = "Life Day"
begin_day = 17
begin_month = NOVEMBER
/datum/holiday/lifeday/getStationPrefix()
return pick("Itchy", "Lumpy", "Malla", "Kazook") //he really pronounced it "Kazook", I wish I was making shit up
/datum/holiday/kindness
name = "Kindness Day"
begin_day = 13
begin_month = NOVEMBER
/datum/holiday/flowers
name = "Flowers Day"
begin_day = 19
begin_month = NOVEMBER
drone_hat = /obj/item/food/grown/moonflower
/datum/holiday/hello
name = "Saying-'Hello' Day"
begin_day = 21
begin_month = NOVEMBER
/datum/holiday/hello/greet()
return "[pick(list("Aloha", "Bonjour", "Hello", "Hi", "Greetings", "Salutations", "Bienvenidos", "Hola", "Howdy", "Ni hao", "Guten Tag", "Konnichiwa", "G'day cunt"))]! " + ..()
//The Festival of Holy Lights is celebrated on Nov 28th, the date on which ethereals were merged (#40995)
/datum/holiday/holy_lights
name = "Festival of Holy Lights"
begin_month = NOVEMBER
begin_day = 28
/datum/holiday/holy_lights/greet()
return "The Festival of Holy Lights is the final day of the Ethereal calendar. It is typically a day of prayer followed by celebration to close out the year in style."
/datum/holiday/holy_lights/getStationPrefix()
return pick("Ethereal", "Lantern", "Holy")
// DECEMBER
/datum/holiday/festive_season
name = FESTIVE_SEASON
begin_day = 1
begin_month = DECEMBER
end_day = 31
drone_hat = /obj/item/clothing/head/costume/santa
/datum/holiday/festive_season/greet()
return "Have a nice festive season!"
/datum/holiday/human_rights
name = "Human-Rights Day"
begin_day = 10
begin_month = DECEMBER
/datum/holiday/monkey
name = MONKEYDAY
begin_day = 14
begin_month = DECEMBER
drone_hat = /obj/item/clothing/mask/gas/monkeymask
/datum/holiday/doomsday
name = "Mayan Doomsday Anniversary"
begin_day = 21
begin_month = DECEMBER
drone_hat = /obj/item/clothing/mask/animal/small/tribal
/datum/holiday/xmas
name = CHRISTMAS
begin_day = 23
begin_month = DECEMBER
end_day = 27
drone_hat = /obj/item/clothing/head/costume/santa
mail_holiday = TRUE
/datum/holiday/xmas/getStationPrefix()
return pick(
"Bible",
"Birthday",
"Chimney",
"Claus",
"Crucifixion",
"Elf",
"Fir",
"Ho Ho Ho",
"Jesus",
"Jolly",
"Merry",
"Present",
"Sack",
"Santa",
"Sleigh",
"Yule",
)
/datum/holiday/xmas/greet()
return "Have a merry Christmas!"
/datum/holiday/boxing
name = "Boxing Day"
begin_day = 26
begin_month = DECEMBER
/datum/holiday/new_year
name = NEW_YEAR
begin_day = 31
begin_month = DECEMBER
end_day = 2
end_month = JANUARY
drone_hat = /obj/item/clothing/head/costume/festive
mail_holiday = TRUE
/datum/holiday/new_year/getStationPrefix()
return pick("Party","New","Hangover","Resolution", "Auld")
// MOVING DATES
/datum/holiday/friday_thirteenth
name = "Friday the 13th"
/datum/holiday/friday_thirteenth/shouldCelebrate(dd, mm, yyyy, ddd)
if(dd == 13 && ddd == FRIDAY)
return TRUE
return FALSE
/datum/holiday/friday_thirteenth/getStationPrefix()
return pick("Mike","Friday","Evil","Myers","Murder","Deathly","Stabby")
/datum/holiday/programmers
name = "Programmers' Day"
/datum/holiday/programmers/shouldCelebrate(dd, mm, yyyy, ddd) //Programmer's day falls on the 2^8th day of the year
if(mm == 9)
if(yyyy/4 == round(yyyy/4)) //Note: Won't work right on September 12th, 2200 (at least it's a Friday!)
if(dd == 12)
return TRUE
else
if(dd == 13)
return TRUE
return FALSE
/datum/holiday/programmers/getStationPrefix()
return pick("span>","DEBUG: ","null","/list","EVENT PREFIX NOT FOUND") //Portability
// ISLAMIC
/datum/holiday/islamic
name = "Islamic calendar code broken"
/datum/holiday/islamic/shouldCelebrate(dd, mm, yyyy, ddd)
var/datum/foreign_calendar/islamic/cal = new(yyyy, mm, dd)
return ..(cal.dd, cal.mm, cal.yyyy, ddd)
/datum/holiday/islamic/ramadan
name = "Start of Ramadan"
begin_month = 9
begin_day = 1
end_day = 3
/datum/holiday/islamic/ramadan/getStationPrefix()
return pick("Haram","Halaal","Jihad","Muslim", "Al", "Mohammad", "Rashidun", "Umayyad", "Abbasid", "Abdul", "Fatimid", "Ayyubid", "Almohad", "Abu")
/datum/holiday/islamic/ramadan/end
name = "End of Ramadan"
end_month = 10
begin_day = 28
end_day = 1
// HEBREW
/datum/holiday/hebrew
name = "If you see this the Hebrew holiday calendar code is broken"
/datum/holiday/hebrew/shouldCelebrate(dd, mm, yyyy, ddd)
var/datum/foreign_calendar/hebrew/cal = new(yyyy, mm, dd)
return ..(cal.dd, cal.mm, cal.yyyy, ddd)
/datum/holiday/hebrew/hanukkah
name = "Hanukkah"
begin_day = 25
begin_month = 9
end_day = 2
end_month = 10
/datum/holiday/hebrew/hanukkah/greet()
return "Happy [pick("Hanukkah", "Chanukah")]!"
/datum/holiday/hebrew/hanukkah/getStationPrefix()
return pick("Dreidel", "Menorah", "Latkes", "Gelt")
/datum/holiday/hebrew/passover
name = "Passover"
begin_day = 15
begin_month = 1
end_day = 22
/datum/holiday/hebrew/passover/getStationPrefix()
return pick("Matzah", "Moses", "Red Sea")
// HOLIDAY ADDONS
/datum/holiday/xmas/celebrate()
. = ..()
SSticker.OnRoundstart(CALLBACK(src, PROC_REF(roundstart_celebrate)))
GLOB.maintenance_loot += list(
list(
/obj/item/toy/xmas_cracker = 3,
/obj/item/clothing/head/costume/santa = 1,
/obj/item/a_gift/anything = 1
) = maint_holiday_weight,
)
/datum/holiday/xmas/proc/roundstart_celebrate()
for(var/obj/machinery/computer/security/telescreen/entertainment/Monitor in GLOB.machines)
Monitor.icon_state_on = "entertainment_xmas"
for(var/mob/living/basic/pet/dog/corgi/ian/Ian in GLOB.mob_living_list)
Ian.place_on_head(new /obj/item/clothing/head/helmet/space/santahat(Ian))
// EASTER (this having it's own spot should be understandable)
/datum/holiday/easter
name = EASTER
drone_hat = /obj/item/clothing/head/costume/rabbitears
var/const/days_early = 1 //to make editing the holiday easier
var/const/days_extra = 1
/datum/holiday/easter/shouldCelebrate(dd, mm, yyyy, ddd)
if(!begin_month)
current_year = text2num(time2text(world.timeofday, "YYYY"))
var/list/easterResults = EasterDate(current_year+year_offset)
begin_day = easterResults["day"]
begin_month = easterResults["month"]
end_day = begin_day + days_extra
end_month = begin_month
if(end_day >= 32 && end_month == MARCH) //begins in march, ends in april
end_day -= 31
end_month++
if(end_day >= 31 && end_month == APRIL) //begins in april, ends in june
end_day -= 30
end_month++
begin_day -= days_early
if(begin_day <= 0)
if(begin_month == APRIL)
begin_day += 31
begin_month-- //begins in march, ends in april
return ..()
/datum/holiday/easter/celebrate()
. = ..()
GLOB.maintenance_loot += list(
list(
/obj/item/surprise_egg = 15,
/obj/item/storage/basket/easter = 15
) = maint_holiday_weight,
)
/datum/holiday/easter/greet()
return "Greetings! Have a Happy Easter and keep an eye out for Easter Bunnies!"
/datum/holiday/easter/getStationPrefix()
return pick("Fluffy","Bunny","Easter","Egg")
/// Takes a holiday datum, a starting month, ending month, max amount of days to test in, and min/max year as input
/// Returns a list in the form list("yyyy/m/d", ...) representing all days the holiday runs on in the tested range
/proc/poll_holiday(datum/holiday/path, min_month, max_month, min_year, max_year, max_day)
var/list/deets = list()
for(var/year in min_year to max_year)
for(var/month in min_month to max_month)
for(var/day in 1 to max_day)
var/datum/holiday/new_day = new path()
if(new_day.shouldCelebrate(day, month, year, iso_to_weekday(day_of_month(year, month, day))))
deets += "[year]/[month]/[day]"
return deets
/// Does the same as [/proc/poll_holiday], but prints the output to admins instead of returning it
/proc/print_holiday(datum/holiday/path, min_month, max_month, min_year, max_year, max_day)
var/list/deets = poll_holiday(path, min_month, max_month, min_year, max_year, max_day)
message_admins("The accepted dates for [path] in the input range [min_year]-[max_year]/[min_month]-[max_month]/1-[max_day] are [deets.Join("\n")]")