mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-04 14:01:22 +00:00
495 lines
12 KiB
Plaintext
495 lines
12 KiB
Plaintext
/datum/holiday
|
|
var/name = "Bugsgiving"
|
|
|
|
var/begin_day = 1
|
|
var/begin_month = 0
|
|
var/end_day = 0 // Default of 0 means the holiday lasts a single day
|
|
var/end_month = 0
|
|
var/begin_week = FALSE //If set to a number, then this holiday will begin on certain week
|
|
var/begin_weekday = FALSE //If set to a weekday, then this will trigger the holiday on the above week
|
|
var/always_celebrate = FALSE // for christmas neverending, or testing.
|
|
|
|
// This proc gets run before the game starts when the holiday is activated. Do festive shit here.
|
|
/datum/holiday/proc/celebrate()
|
|
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," ",1,0)
|
|
return copytext(name,1,i)
|
|
|
|
// Return 1 if this holidy should be celebrated today
|
|
/datum/holiday/proc/shouldCelebrate(dd, mm, yy, ww, ddd)
|
|
if(always_celebrate)
|
|
return TRUE
|
|
|
|
if(!end_day)
|
|
end_day = begin_day
|
|
if(!end_month)
|
|
end_month = begin_month
|
|
if(begin_week && begin_weekday)
|
|
if(begin_week == ww && begin_weekday == ddd)
|
|
return TRUE
|
|
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
|
|
|
|
// The actual holidays
|
|
|
|
/datum/holiday/new_year
|
|
name = NEW_YEAR
|
|
begin_day = 30
|
|
begin_month = DECEMBER
|
|
end_day = 2
|
|
end_month = JANUARY
|
|
|
|
/datum/holiday/new_year/getStationPrefix()
|
|
return pick("Party","New","Hangover","Resolution")
|
|
|
|
/datum/holiday/groundhog
|
|
name = "Groundhog Day"
|
|
begin_day = 2
|
|
begin_month = FEBRUARY
|
|
|
|
/datum/holiday/valentines
|
|
name = VALENTINES
|
|
begin_day = 13
|
|
end_day = 15
|
|
begin_month = FEBRUARY
|
|
|
|
/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
|
|
|
|
/datum/holiday/birthday/greet()
|
|
var/game_age = text2num(time2text(world.timeofday, "YY")) - 3
|
|
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(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(96)
|
|
Fact = " Please send a time machine back to pick me up, I need to update the time formatting for this feature!" //See you later suckers
|
|
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
|
|
|
|
/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
|
|
|
|
/datum/holiday/pi
|
|
name = "Pi Day"
|
|
begin_day = 14
|
|
begin_month = MARCH
|
|
|
|
/datum/holiday/no_this_is_patrick
|
|
name = "St. Patrick's Day"
|
|
begin_day = 17
|
|
begin_month = MARCH
|
|
|
|
/datum/holiday/no_this_is_patrick/getStationPrefix()
|
|
return pick("Blarney","Green","Leprechaun","Booze")
|
|
|
|
/datum/holiday/april_fools
|
|
name = APRIL_FOOLS
|
|
begin_day = 1
|
|
end_day = 2
|
|
begin_month = APRIL
|
|
|
|
/datum/holiday/april_fools/celebrate()
|
|
SSticker.login_music = 'sound/ambience/clown.ogg'
|
|
for(var/mob/dead/new_player/P in GLOB.mob_list)
|
|
if(P.client)
|
|
P.client.playtitlemusic()
|
|
|
|
/datum/holiday/fourtwenty
|
|
name = "Four-Twenty"
|
|
begin_day = 20
|
|
begin_month = APRIL
|
|
|
|
/datum/holiday/fourtwenty/getStationPrefix()
|
|
return pick("Snoop","Blunt","Toke","Dank")
|
|
|
|
/datum/holiday/earth
|
|
name = "Earth Day"
|
|
begin_day = 22
|
|
begin_month = APRIL
|
|
|
|
/datum/holiday/labor
|
|
name = "Labor Day"
|
|
begin_day = 1
|
|
begin_month = MAY
|
|
|
|
/datum/holiday/firefighter
|
|
name = "Firefighter's Day"
|
|
begin_day = 4
|
|
begin_month = MAY
|
|
|
|
/datum/holiday/firefighter/getStationPrefix()
|
|
return pick("Burning","Blazing","Plasma","Fire")
|
|
|
|
/datum/holiday/summersolstice
|
|
name = "Summer Solstice"
|
|
begin_day = 21
|
|
begin_month = JUNE
|
|
|
|
/datum/holiday/doctor
|
|
name = "Doctor's Day"
|
|
begin_day = 1
|
|
begin_month = JULY
|
|
|
|
/datum/holiday/UFO
|
|
name = "UFO Day"
|
|
begin_day = 2
|
|
begin_month = JULY
|
|
|
|
/datum/holiday/UFO/getStationPrefix() //Is such a thing even possible?
|
|
return pick("Ayy","Truth","Tsoukalos","Mulder") //Yes it is!
|
|
|
|
/datum/holiday/writer
|
|
name = "Writer's Day"
|
|
begin_day = 8
|
|
begin_month = JULY
|
|
|
|
/datum/holiday/friendship
|
|
name = "Friendship Day"
|
|
begin_day = 30
|
|
begin_month = JULY
|
|
|
|
/datum/holiday/friendship/greet()
|
|
return "Have a magical [name]!"
|
|
|
|
/datum/holiday/beer
|
|
name = "Beer Day"
|
|
begin_day = 5
|
|
begin_month = AUGUST
|
|
|
|
/datum/holiday/pirate
|
|
name = "Talk-Like-a-Pirate Day"
|
|
begin_day = 19
|
|
begin_month = SEPTEMBER
|
|
|
|
/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/programmers
|
|
name = "Programmers' Day"
|
|
|
|
/datum/holiday/programmers/shouldCelebrate(dd, mm, yy, ww, ddd) //Programmer's day falls on the 2^8th day of the year
|
|
if(mm == 9)
|
|
if(yy/4 == round(yy/4)) //Note: Won't work right on September 12th, 2200 (at least it's a Friday!)
|
|
if(dd == 12)
|
|
return 1
|
|
else
|
|
if(dd == 13)
|
|
return 1
|
|
return 0
|
|
|
|
/datum/holiday/programmers/getStationPrefix()
|
|
return pick("span>","DEBUG: ","null","/list","EVENT PREFIX NOT FOUND") //Portability
|
|
|
|
/datum/holiday/questions
|
|
name = "Stupid-Questions Day"
|
|
begin_day = 28
|
|
begin_month = SEPTEMBER
|
|
|
|
/datum/holiday/questions/greet()
|
|
return "Are you having a happy [name]?"
|
|
|
|
/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
|
|
|
|
/datum/holiday/boss
|
|
name = "Boss' Day"
|
|
begin_day = 16
|
|
begin_month = OCTOBER
|
|
|
|
/datum/holiday/halloween
|
|
name = HALLOWEEN
|
|
begin_day = 30
|
|
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")
|
|
|
|
/datum/holiday/vegan
|
|
name = "Vegan Day"
|
|
begin_day = 1
|
|
begin_month = NOVEMBER
|
|
|
|
/datum/holiday/kindness
|
|
name = "Kindness Day"
|
|
begin_day = 13
|
|
begin_month = NOVEMBER
|
|
|
|
/datum/holiday/flowers
|
|
name = "Flowers Day"
|
|
begin_day = 19
|
|
begin_month = NOVEMBER
|
|
|
|
/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"))]! " + ..()
|
|
|
|
/datum/holiday/human_rights
|
|
name = "Human-Rights Day"
|
|
begin_day = 10
|
|
begin_month = DECEMBER
|
|
|
|
/datum/holiday/monkey
|
|
name = "Monkey Day"
|
|
begin_day = 14
|
|
begin_month = DECEMBER
|
|
|
|
/datum/holiday/thanksgiving
|
|
name = "Thanksgiving in the United States"
|
|
begin_week = 4
|
|
begin_month = NOVEMBER
|
|
begin_weekday = THURSDAY
|
|
|
|
/datum/holiday/thanksgiving/canada
|
|
name = "Thanksgiving in Canada"
|
|
begin_week = 2
|
|
begin_month = OCTOBER
|
|
begin_weekday = MONDAY
|
|
|
|
/datum/holiday/columbus
|
|
name = "Columbus Day"
|
|
begin_week = 2
|
|
begin_month = OCTOBER
|
|
begin_weekday = MONDAY
|
|
|
|
/datum/holiday/mother
|
|
name = "Mother's Day"
|
|
begin_week = 2
|
|
begin_month = MAY
|
|
begin_weekday = SUNDAY
|
|
|
|
/datum/holiday/mother/greet()
|
|
return "Happy Mother's Day in most of the Americas, Asia, and Oceania!"
|
|
|
|
/datum/holiday/father
|
|
name = "Father's Day"
|
|
begin_week = 3
|
|
begin_month = JUNE
|
|
begin_weekday = SUNDAY
|
|
|
|
/datum/holiday/ramadan
|
|
name = "Start of Ramadan"
|
|
|
|
/*
|
|
|
|
For anyone who stumbles on this some time in the future: this was calibrated to 2017
|
|
Calculated based on the start and end of Ramadan in 2000 (First year of the Gregorian Calendar supported by BYOND)
|
|
This is going to be accurate for at least a decade, likely a lot longer
|
|
Since the date fluctuates, it may be inaccurate one year and then accurate for several after
|
|
Inaccuracies will never be by more than one day for at least a hundred years
|
|
Finds the number of days since the day in 2000 and gets the modulo of that and the average length of a Muslim year since the first one (622 AD, Gregorian)
|
|
Since Ramadan is an entire month that lasts 29.5 days on average, the start and end are holidays and are calculated from the two dates in 2000
|
|
|
|
*/
|
|
|
|
/datum/holiday/ramadan/shouldCelebrate(dd, mm, yy, ww, ddd)
|
|
if (round(((world.realtime - 285984000) / 864000) % 354.373435326843) == 0)
|
|
return TRUE
|
|
return FALSE
|
|
|
|
/datum/holiday/ramadan/getStationPrefix()
|
|
return pick("Harm","Halaal","Jihad","Muslim")
|
|
|
|
/datum/holiday/ramadan/end
|
|
name = "End of Ramadan"
|
|
|
|
/datum/holiday/ramadan/end/shouldCelebrate(dd, mm, yy, ww, ddd)
|
|
if (round(((world.realtime - 312768000) / 864000) % 354.373435326843) == 0)
|
|
return TRUE
|
|
return FALSE
|
|
|
|
/datum/holiday/doomsday
|
|
name = "Mayan Doomsday Anniversary"
|
|
begin_day = 21
|
|
begin_month = DECEMBER
|
|
|
|
/datum/holiday/xmas
|
|
name = CHRISTMAS
|
|
begin_day = 23
|
|
begin_month = DECEMBER
|
|
end_day = 25
|
|
|
|
/datum/holiday/xmas/greet()
|
|
return "Have a merry Christmas!"
|
|
|
|
/datum/holiday/festive_season
|
|
name = FESTIVE_SEASON
|
|
begin_day = 1
|
|
begin_month = DECEMBER
|
|
end_day = 31
|
|
|
|
/datum/holiday/festive_season/greet()
|
|
return "Have a nice festive season!"
|
|
|
|
/datum/holiday/boxing
|
|
name = "Boxing Day"
|
|
begin_day = 26
|
|
begin_month = DECEMBER
|
|
|
|
/datum/holiday/friday_thirteenth
|
|
name = "Friday the 13th"
|
|
|
|
/datum/holiday/friday_thirteenth/shouldCelebrate(dd, mm, yy, ww, 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/easter
|
|
name = EASTER
|
|
var/const/days_early = 1 //to make editing the holiday easier
|
|
var/const/days_extra = 1
|
|
|
|
/datum/holiday/easter/shouldCelebrate(dd, mm, yy, ww, ddd)
|
|
// Easter's celebration day is as snowflakey as Uhangi's code
|
|
|
|
if(!begin_month)
|
|
|
|
var/yy_string = "[yy]"
|
|
// year = days after March 22that Easter falls on that year.
|
|
// For 2015 Easter is on April 5th, so 2015 = 14 since the 5th is 14 days past the 22nd
|
|
// If it's 2040 and this is still in use, invent a time machine and teach me a better way to do this. Also tell us about HL3.
|
|
var/list/easters = list(
|
|
"15" = 14,\
|
|
"16" = 6,\
|
|
"17" = 25,\
|
|
"18" = 10,\
|
|
"19" = 30,\
|
|
"20" = 22,\
|
|
"21" = 13,\
|
|
"22" = 26,\
|
|
"23" = 18,\
|
|
"24" = 9,\
|
|
"25" = 29,\
|
|
"26" = 14,\
|
|
"27" = 6,\
|
|
"28" = 25,\
|
|
"29" = 10,\
|
|
"30" = 30,\
|
|
"31" = 23,\
|
|
"32" = 6,\
|
|
"33" = 26,\
|
|
"34" = 18,\
|
|
"35" = 3,\
|
|
"36" = 22,\
|
|
"37" = 14,\
|
|
"38" = 34,\
|
|
"39" = 19,\
|
|
"40" = 9,\
|
|
)
|
|
|
|
begin_day = easters[yy_string]
|
|
if(begin_day <= 9)
|
|
begin_day += 22
|
|
begin_month = MARCH
|
|
else
|
|
begin_day -= 9
|
|
begin_month = APRIL
|
|
|
|
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
|
|
|
|
// to_chat(world, "Easter calculates to be on [begin_day] of [begin_month] ([days_early] early) to [end_day] of [end_month] ([days_extra] extra) for 20[yy]")
|
|
return ..()
|
|
|
|
/datum/holiday/easter/celebrate()
|
|
GLOB.maintenance_loot += list(
|
|
/obj/item/reagent_containers/food/snacks/egg/loaded = 15,
|
|
/obj/item/storage/bag/easterbasket = 15)
|