[MIRROR] Restores drone holiday headwear and extends it to assistants [MDB IGNORE] (#23813)

* Restores drone holiday headwear and extends it to assistants (#78347)

## About The Pull Request

drone_hat defined a piece of headwear that drones would spawn with when
the corresponding holiday is active. While peeking at holiday code for
my own amusement, I noticed that it wasn't actually used anywhere and
must have become deprecated at some point. I have re-implemented that
functionality, and extended it to assistants.

Now, all drones/assistants spawning without headwear during a holiday
will receive the holiday's defined holiday_hat (if there is one). This
modifies a few of the holiday_hat entries, particularly the mask entries
since the new system is head-only, and adds a few more in there as well.

![image](https://github.com/tgstation/tgstation/assets/28870487/f44d8499-957c-4b71-843b-26ab77f46ff4)

There's probably some balance implications to, say, spawning all the
assistants with fire helmets or pirate bandanas, but I see that as being
balanced out by the infrequency of these cases.
## Why It's Good For The Game

Restores an piece of drone code that fell off the wagon somewhere
amongst the removals and reworks.

As for implementing it for assistants, seeing assistants in funny hats
makes me laugh a lil bit :)
## Changelog
🆑 Rhials
qol: Restores holiday hats for drones.
qol: Extends holiday hat behavior to assistants. Get festive!
/🆑

* Restores drone holiday headwear and extends it to assistants

---------

Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
This commit is contained in:
SkyratBot
2023-09-20 06:27:47 +02:00
committed by GitHub
parent 0ed207ef02
commit f7346e2a1f
7 changed files with 51 additions and 33 deletions

View File

@@ -0,0 +1 @@
#define HOLIDAY_HAT_CHANCE 20

View File

@@ -18,8 +18,8 @@
var/year_offset = 0 var/year_offset = 0
///Timezones this holiday is celebrated in (defaults to three timezones spanning a 50 hour window covering all timezones) ///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) 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 ///If this is defined, drones/assistants without a default hat will spawn with this item in their head clothing slot.
var/obj/item/drone_hat var/obj/item/holiday_hat
///When this holiday is active, does this prevent mail from arriving to cargo? Try not to use this for longer holidays. ///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/mail_holiday = FALSE
var/poster_name = "generic celebration poster" var/poster_name = "generic celebration poster"
@@ -109,6 +109,7 @@
name = "Fleet Day" name = "Fleet Day"
begin_month = JANUARY begin_month = JANUARY
begin_day = 19 begin_day = 19
holiday_hat = /obj/item/clothing/head/mothcap
/datum/holiday/fleet_day/greet() /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." 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."
@@ -155,7 +156,7 @@
name = "Birthday of Space Station 13" name = "Birthday of Space Station 13"
begin_day = 16 begin_day = 16
begin_month = FEBRUARY begin_month = FEBRUARY
drone_hat = /obj/item/clothing/head/costume/festive holiday_hat = /obj/item/clothing/head/costume/festive
poster_name = "station birthday poster" 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_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 poster_icon = "holiday_cake" // is a lie
@@ -220,7 +221,7 @@
name = "St. Patrick's Day" name = "St. Patrick's Day"
begin_day = 17 begin_day = 17
begin_month = MARCH begin_month = MARCH
drone_hat = /obj/item/clothing/head/soft/green holiday_hat = /obj/item/clothing/head/soft/green
/datum/holiday/no_this_is_patrick/getStationPrefix() /datum/holiday/no_this_is_patrick/getStationPrefix()
return pick("Blarney","Green","Leprechaun","Booze") return pick("Blarney","Green","Leprechaun","Booze")
@@ -235,6 +236,7 @@
begin_month = APRIL begin_month = APRIL
begin_day = 1 begin_day = 1
end_day = 2 end_day = 2
holiday_hat = /obj/item/clothing/head/chameleon/broken
/datum/holiday/april_fools/celebrate() /datum/holiday/april_fools/celebrate()
. = ..() . = ..()
@@ -252,7 +254,7 @@
name = "Cosmonautics Day" name = "Cosmonautics Day"
begin_day = 12 begin_day = 12
begin_month = APRIL begin_month = APRIL
drone_hat = /obj/item/clothing/head/syndicatefake holiday_hat = /obj/item/clothing/head/syndicatefake
/datum/holiday/spess/greet() /datum/holiday/spess/greet()
return "On this day over 600 years ago, Comrade Yuri Gagarin first ventured into space!" return "On this day over 600 years ago, Comrade Yuri Gagarin first ventured into space!"
@@ -261,6 +263,7 @@
name = "Four-Twenty" name = "Four-Twenty"
begin_day = 20 begin_day = 20
begin_month = APRIL begin_month = APRIL
holiday_hat = /obj/item/clothing/head/rasta
/datum/holiday/fourtwenty/getStationPrefix() /datum/holiday/fourtwenty/getStationPrefix()
return pick("Snoop","Blunt","Toke","Dank","Cheech","Chong") return pick("Snoop","Blunt","Toke","Dank","Cheech","Chong")
@@ -283,7 +286,7 @@
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) 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_day = 25
begin_month = APRIL begin_month = APRIL
drone_hat = /obj/item/food/grown/poppy holiday_hat = /obj/item/food/grown/poppy
/datum/holiday/anz/getStationPrefix() /datum/holiday/anz/getStationPrefix()
return pick("Australian","New Zealand","Poppy", "Southern Cross") return pick("Australian","New Zealand","Poppy", "Southern Cross")
@@ -294,7 +297,7 @@
name = "Labor Day" name = "Labor Day"
begin_day = 1 begin_day = 1
begin_month = MAY begin_month = MAY
drone_hat = /obj/item/clothing/head/utility/hardhat holiday_hat = /obj/item/clothing/head/utility/hardhat
mail_holiday = TRUE mail_holiday = TRUE
//Draconic Day is celebrated on May 3rd, the date on which the Draconic language was merged (#26780) //Draconic Day is celebrated on May 3rd, the date on which the Draconic language was merged (#26780)
@@ -313,7 +316,7 @@
name = "Firefighter's Day" name = "Firefighter's Day"
begin_day = 4 begin_day = 4
begin_month = MAY begin_month = MAY
drone_hat = /obj/item/clothing/head/utility/hardhat/red holiday_hat = /obj/item/clothing/head/utility/hardhat/red
/datum/holiday/firefighter/getStationPrefix() /datum/holiday/firefighter/getStationPrefix()
return pick("Burning","Blazing","Plasma","Fire") return pick("Burning","Blazing","Plasma","Fire")
@@ -322,7 +325,6 @@
name = "Bee Day" name = "Bee Day"
begin_day = 20 begin_day = 20
begin_month = MAY begin_month = MAY
drone_hat = /obj/item/clothing/mask/animal/small/bee
/datum/holiday/bee/getStationPrefix() /datum/holiday/bee/getStationPrefix()
return pick("Bee","Honey","Hive","Africanized","Mead","Buzz") return pick("Bee","Honey","Hive","Africanized","Mead","Buzz")
@@ -355,6 +357,7 @@
name = "Summer Solstice" name = "Summer Solstice"
begin_day = 21 begin_day = 21
begin_month = JUNE begin_month = JUNE
holiday_hat = /obj/item/clothing/head/costume/garland
/datum/holiday/pride_week /datum/holiday/pride_week
name = PRIDE_WEEK name = PRIDE_WEEK
@@ -377,13 +380,13 @@
name = "Doctor's Day" name = "Doctor's Day"
begin_day = 1 begin_day = 1
begin_month = JULY begin_month = JULY
drone_hat = /obj/item/clothing/head/costume/nursehat holiday_hat = /obj/item/clothing/head/costume/nursehat
/datum/holiday/ufo /datum/holiday/ufo
name = "UFO Day" name = "UFO Day"
begin_day = 2 begin_day = 2
begin_month = JULY begin_month = JULY
drone_hat = /obj/item/clothing/mask/facehugger/dead holiday_hat = /obj/item/clothing/head/collectable/xenom
/datum/holiday/ufo/getStationPrefix() //Is such a thing even possible? /datum/holiday/ufo/getStationPrefix() //Is such a thing even possible?
return pick("Ayy","Truth","Tsoukalos","Mulder","Scully") //Yes it is! return pick("Ayy","Truth","Tsoukalos","Mulder","Scully") //Yes it is!
@@ -394,6 +397,7 @@
begin_day = 4 begin_day = 4
begin_month = JULY begin_month = JULY
mail_holiday = TRUE mail_holiday = TRUE
holiday_hat = /obj/item/clothing/head/cowboy/brown
/datum/holiday/usa/getStationPrefix() /datum/holiday/usa/getStationPrefix()
return pick("Independent","American","Burger","Bald Eagle","Star-Spangled", "Fireworks") return pick("Independent","American","Burger","Bald Eagle","Star-Spangled", "Fireworks")
@@ -408,7 +412,7 @@
timezones = list(TIMEZONE_CEST) timezones = list(TIMEZONE_CEST)
begin_day = 14 begin_day = 14
begin_month = JULY begin_month = JULY
drone_hat = /obj/item/clothing/head/beret holiday_hat = /obj/item/clothing/head/beret
mail_holiday = TRUE mail_holiday = TRUE
/datum/holiday/france/getStationPrefix() /datum/holiday/france/getStationPrefix()
@@ -430,7 +434,7 @@
name = "Wizard's Day" name = "Wizard's Day"
begin_month = JULY begin_month = JULY
begin_day = 27 begin_day = 27
drone_hat = /obj/item/clothing/head/wizard holiday_hat = /obj/item/clothing/head/wizard
/datum/holiday/wizards_day/getStationPrefix() /datum/holiday/wizards_day/getStationPrefix()
return pick("Dungeon", "Elf", "Magic", "D20", "Edition") return pick("Dungeon", "Elf", "Magic", "D20", "Edition")
@@ -470,6 +474,7 @@
name = "Tiziran Unification Day" name = "Tiziran Unification Day"
begin_month = SEPTEMBER begin_month = SEPTEMBER
begin_day = 1 begin_day = 1
holiday_hat = /obj/item/clothing/head/costume/lizard
/datum/holiday/tiziran_unification/greet() /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." return "On this day over 400 years ago, Lizardkind first united under a single banner, ready to face the stars as one unified people."
@@ -493,7 +498,7 @@
name = "Talk-Like-a-Pirate Day" name = "Talk-Like-a-Pirate Day"
begin_day = 19 begin_day = 19
begin_month = SEPTEMBER begin_month = SEPTEMBER
drone_hat = /obj/item/clothing/head/costume/pirate holiday_hat = /obj/item/clothing/head/costume/pirate
/datum/holiday/pirate/greet() /datum/holiday/pirate/greet()
return "Ye be talkin' like a pirate today or else ye'r walkin' tha plank, matey!" return "Ye be talkin' like a pirate today or else ye'r walkin' tha plank, matey!"
@@ -523,13 +528,13 @@
name = "Smiling Day" name = "Smiling Day"
begin_day = 7 begin_day = 7
begin_month = OCTOBER begin_month = OCTOBER
drone_hat = /obj/item/clothing/head/costume/papersack/smiley holiday_hat = /obj/item/clothing/head/costume/papersack/smiley
/datum/holiday/boss /datum/holiday/boss
name = "Boss' Day" name = "Boss' Day"
begin_day = 16 begin_day = 16
begin_month = OCTOBER begin_month = OCTOBER
drone_hat = /obj/item/clothing/head/hats/tophat holiday_hat = /obj/item/clothing/head/hats/tophat
/datum/holiday/un_day /datum/holiday/un_day
name = "Anniversary of the Foundation of the United Nations" name = "Anniversary of the Foundation of the United Nations"
@@ -578,7 +583,7 @@
name = "Remembrance Day" name = "Remembrance Day"
begin_month = NOVEMBER begin_month = NOVEMBER
begin_day = 11 begin_day = 11
drone_hat = /obj/item/food/grown/poppy holiday_hat = /obj/item/food/grown/poppy
/datum/holiday/remembrance_day/getStationPrefix() /datum/holiday/remembrance_day/getStationPrefix()
return pick("Peace", "Armistice", "Poppy") return pick("Peace", "Armistice", "Poppy")
@@ -600,7 +605,7 @@
name = "Flowers Day" name = "Flowers Day"
begin_day = 19 begin_day = 19
begin_month = NOVEMBER begin_month = NOVEMBER
drone_hat = /obj/item/food/grown/moonflower holiday_hat = /obj/item/food/grown/moonflower
/datum/holiday/hello /datum/holiday/hello
name = "Saying-'Hello' Day" name = "Saying-'Hello' Day"
@@ -629,7 +634,7 @@
begin_day = 1 begin_day = 1
begin_month = DECEMBER begin_month = DECEMBER
end_day = 31 end_day = 31
drone_hat = /obj/item/clothing/head/costume/santa holiday_hat = /obj/item/clothing/head/costume/santa
/datum/holiday/festive_season/greet() /datum/holiday/festive_season/greet()
return "Have a nice festive season!" return "Have a nice festive season!"
@@ -643,20 +648,18 @@
name = MONKEYDAY name = MONKEYDAY
begin_day = 14 begin_day = 14
begin_month = DECEMBER begin_month = DECEMBER
drone_hat = /obj/item/clothing/mask/gas/monkeymask
/datum/holiday/doomsday /datum/holiday/doomsday
name = "Mayan Doomsday Anniversary" name = "Mayan Doomsday Anniversary"
begin_day = 21 begin_day = 21
begin_month = DECEMBER begin_month = DECEMBER
drone_hat = /obj/item/clothing/mask/animal/small/tribal
/datum/holiday/xmas /datum/holiday/xmas
name = CHRISTMAS name = CHRISTMAS
begin_day = 23 begin_day = 23
begin_month = DECEMBER begin_month = DECEMBER
end_day = 27 end_day = 27
drone_hat = /obj/item/clothing/head/costume/santa holiday_hat = /obj/item/clothing/head/costume/santa
mail_holiday = TRUE mail_holiday = TRUE
/datum/holiday/xmas/getStationPrefix() /datum/holiday/xmas/getStationPrefix()
@@ -693,7 +696,7 @@
begin_month = DECEMBER begin_month = DECEMBER
end_day = 2 end_day = 2
end_month = JANUARY end_month = JANUARY
drone_hat = /obj/item/clothing/head/costume/festive holiday_hat = /obj/item/clothing/head/costume/festive
mail_holiday = TRUE mail_holiday = TRUE
/datum/holiday/new_year/getStationPrefix() /datum/holiday/new_year/getStationPrefix()
@@ -808,7 +811,7 @@
/datum/holiday/easter /datum/holiday/easter
name = EASTER name = EASTER
drone_hat = /obj/item/clothing/head/costume/rabbitears holiday_hat = /obj/item/clothing/head/costume/rabbitears
var/const/days_early = 1 //to make editing the holiday easier var/const/days_early = 1 //to make editing the holiday easier
var/const/days_extra = 1 var/const/days_extra = 1

View File

@@ -35,7 +35,7 @@
begin_week = 4 begin_week = 4
begin_month = NOVEMBER begin_month = NOVEMBER
begin_weekday = THURSDAY begin_weekday = THURSDAY
drone_hat = /obj/item/clothing/head/hats/tophat //This is the closest we can get to a pilgrim's hat holiday_hat = /obj/item/clothing/head/hats/tophat //This is the closest we can get to a pilgrim's hat
/datum/holiday/nth_week/thanksgiving/canada /datum/holiday/nth_week/thanksgiving/canada
name = "Thanksgiving in Canada" name = "Thanksgiving in Canada"

View File

@@ -48,6 +48,12 @@ Assistant
/datum/outfit/job/assistant/pre_equip(mob/living/carbon/human/target) /datum/outfit/job/assistant/pre_equip(mob/living/carbon/human/target)
..() ..()
for(var/holidayname in GLOB.holidays)
var/datum/holiday/holiday_today = GLOB.holidays[holidayname]
var/obj/item/special_hat = holiday_today.holiday_hat
if(prob(HOLIDAY_HAT_CHANCE) && !isnull(special_hat) && isnull(head))
head = special_hat
give_jumpsuit(target) give_jumpsuit(target)
/datum/outfit/job/assistant/proc/give_jumpsuit(mob/living/carbon/human/target) /datum/outfit/job/assistant/proc/give_jumpsuit(mob/living/carbon/human/target)

View File

@@ -74,7 +74,7 @@
/// Default [/mob/living/simple_animal/drone/var/internal_storage] item /// Default [/mob/living/simple_animal/drone/var/internal_storage] item
var/obj/item/default_storage = /obj/item/storage/drone_tools var/obj/item/default_storage = /obj/item/storage/drone_tools
/// Default [/mob/living/simple_animal/drone/var/head] item /// Default [/mob/living/simple_animal/drone/var/head] item
var/obj/item/default_hatmask var/obj/item/default_headwear
/** /**
* icon_state of drone from icons/mobs/drone.dmi * icon_state of drone from icons/mobs/drone.dmi
* *
@@ -181,9 +181,16 @@
if(default_storage) if(default_storage)
var/obj/item/I = new default_storage(src) var/obj/item/I = new default_storage(src)
equip_to_slot_or_del(I, ITEM_SLOT_DEX_STORAGE) equip_to_slot_or_del(I, ITEM_SLOT_DEX_STORAGE)
if(default_hatmask)
var/obj/item/I = new default_hatmask(src) for(var/holiday_name in GLOB.holidays)
equip_to_slot_or_del(I, ITEM_SLOT_HEAD) var/datum/holiday/holiday_today = GLOB.holidays[holiday_name]
var/obj/item/potential_hat = holiday_today.holiday_hat
if(!isnull(potential_hat) && isnull(default_headwear)) //If our drone type doesn't start with a hat, we take the holiday one.
default_headwear = potential_hat
if(default_headwear)
var/obj/item/new_hat = new default_headwear(src)
equip_to_slot_or_del(new_hat, ITEM_SLOT_HEAD)
ADD_TRAIT(access_card, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT) ADD_TRAIT(access_card, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT)

View File

@@ -27,7 +27,7 @@
"2. Kill.\n"+\ "2. Kill.\n"+\
"3. Destroy." "3. Destroy."
default_storage = /obj/item/uplink default_storage = /obj/item/uplink
default_hatmask = /obj/item/clothing/head/helmet/swat default_headwear = /obj/item/clothing/head/helmet/swat
hacked = TRUE hacked = TRUE
shy = FALSE shy = FALSE
flavortext = null flavortext = null
@@ -49,7 +49,7 @@
W.implant(src, force = TRUE) W.implant(src, force = TRUE)
/mob/living/simple_animal/drone/snowflake /mob/living/simple_animal/drone/snowflake
default_hatmask = /obj/item/clothing/head/chameleon/drone default_headwear = /obj/item/clothing/head/chameleon/drone
/mob/living/simple_animal/drone/snowflake/Initialize(mapload) /mob/living/simple_animal/drone/snowflake/Initialize(mapload)
. = ..() . = ..()
@@ -87,7 +87,7 @@
/mob/living/simple_animal/drone/polymorphed /mob/living/simple_animal/drone/polymorphed
default_storage = null default_storage = null
default_hatmask = null default_headwear = null
picked = TRUE picked = TRUE
flavortext = null flavortext = null
@@ -132,7 +132,7 @@
/mob/living/simple_animal/drone/derelict /mob/living/simple_animal/drone/derelict
name = "derelict drone" name = "derelict drone"
default_hatmask = /obj/item/clothing/head/costume/ushanka default_headwear = /obj/item/clothing/head/costume/ushanka
laws = \ laws = \
"1. You may not involve yourself in the matters of another sentient being outside the station that housed your activation, even if such matters conflict with Law Two or Law Three, unless the other being is another Drone.\n"+\ "1. You may not involve yourself in the matters of another sentient being outside the station that housed your activation, even if such matters conflict with Law Two or Law Three, unless the other being is another Drone.\n"+\
"2. You may not harm any sentient being, regardless of intent or circumstance.\n"+\ "2. You may not harm any sentient being, regardless of intent or circumstance.\n"+\

View File

@@ -104,6 +104,7 @@
#include "code\__DEFINES\ghost.dm" #include "code\__DEFINES\ghost.dm"
#include "code\__DEFINES\gravity.dm" #include "code\__DEFINES\gravity.dm"
#include "code\__DEFINES\guardian_defines.dm" #include "code\__DEFINES\guardian_defines.dm"
#include "code\__DEFINES\holiday.dm"
#include "code\__DEFINES\holopads.dm" #include "code\__DEFINES\holopads.dm"
#include "code\__DEFINES\hud.dm" #include "code\__DEFINES\hud.dm"
#include "code\__DEFINES\icon_smoothing.dm" #include "code\__DEFINES\icon_smoothing.dm"