diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 14cbe2b54e0..def0345f035 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -771,6 +771,7 @@ /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 1 }, +/obj/effect/spawner/random/bureaucracy/birthday_wrap, /turf/open/floor/iron, /area/station/cargo/storage) "aiF" = ( @@ -95909,6 +95910,7 @@ /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 1 }, +/obj/effect/spawner/random/bureaucracy/birthday_wrap, /turf/open/floor/iron, /area/station/cargo/lobby) "xsr" = ( @@ -98773,6 +98775,7 @@ /obj/item/food/pie/cream, /obj/structure/table, /obj/machinery/duct, +/obj/effect/spawner/random/food_or_drink/cake_ingredients, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) "ycb" = ( diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index 8b4ba903a57..89316f2eb65 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -27123,6 +27123,7 @@ /obj/item/reagent_containers/condiment/peppermill{ pixel_x = 3 }, +/obj/effect/spawner/random/food_or_drink/cake_ingredients, /turf/open/floor/iron/kitchen/diagonal, /area/station/service/kitchen) "iot" = ( @@ -45264,6 +45265,7 @@ dir = 8 }, /obj/structure/closet/crate, +/obj/effect/spawner/random/bureaucracy/birthday_wrap, /turf/open/floor/iron, /area/station/cargo/office) "nRu" = ( @@ -50824,6 +50826,7 @@ /obj/item/storage/box, /obj/item/storage/box, /obj/effect/turf_decal/tile/brown, +/obj/effect/spawner/random/bureaucracy/birthday_wrap, /turf/open/floor/iron, /area/station/cargo/lobby) "pFl" = ( diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index 8c637a3ed98..72ee1b29343 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -4595,6 +4595,7 @@ req_access = list("shipping") }, /obj/item/flashlight, +/obj/effect/spawner/random/bureaucracy/birthday_wrap, /turf/open/floor/plating, /area/station/cargo/office) "bsJ" = ( @@ -18753,6 +18754,7 @@ }, /obj/effect/turf_decal/tile/neutral, /obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/food_or_drink/cake_ingredients, /turf/open/floor/iron/dark, /area/station/service/kitchen) "fxQ" = ( @@ -26660,6 +26662,7 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/item/radio/intercom/directional/north, /obj/item/storage/box/shipping, +/obj/effect/spawner/random/bureaucracy/birthday_wrap, /turf/open/floor/iron/dark, /area/station/cargo/sorting) "hEw" = ( diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index d774edd2667..ae875a6f5b4 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -2556,6 +2556,7 @@ /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 8 }, +/obj/effect/spawner/random/bureaucracy/birthday_wrap, /turf/open/floor/iron, /area/station/construction/storage_wing) "aUk" = ( @@ -25525,6 +25526,7 @@ /obj/effect/turf_decal/tile/brown/anticorner/contrasted{ dir = 8 }, +/obj/effect/spawner/random/bureaucracy/birthday_wrap, /turf/open/floor/iron, /area/station/cargo/sorting) "jgT" = ( @@ -68773,6 +68775,7 @@ "ykj" = ( /obj/structure/table, /obj/structure/cable, +/obj/effect/spawner/random/food_or_drink/cake_ingredients, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) "ykn" = ( diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm index 6ec6f829f8e..8dc542f6ee3 100644 --- a/_maps/map_files/tramstation/tramstation.dmm +++ b/_maps/map_files/tramstation/tramstation.dmm @@ -16731,6 +16731,7 @@ }, /obj/structure/table, /obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/spawner/random/bureaucracy/birthday_wrap, /turf/open/floor/iron/dark, /area/station/hallway/secondary/exit) "efT" = ( @@ -33066,6 +33067,7 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/table, /obj/item/radio/intercom/directional/north, +/obj/effect/spawner/random/bureaucracy/birthday_wrap, /turf/open/floor/iron, /area/station/cargo/warehouse) "kye" = ( @@ -37645,6 +37647,11 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/foyer) +"mdt" = ( +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/cake_ingredients, +/turf/open/floor/iron/white, +/area/station/service/kitchen) "mdx" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced, @@ -167115,7 +167122,7 @@ eSx qfs tJg vuD -mdp +mdt qTs guL omc diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 799238aba94..292f35cab2f 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -935,6 +935,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define STATION_TRAIT_CYBERNETIC_REVOLUTION "station_trait_cybernetic_revolution" #define STATION_TRAIT_BIGGER_PODS "station_trait_bigger_pods" #define STATION_TRAIT_SMALLER_PODS "station_trait_smaller_pods" +#define STATION_TRAIT_BIRTHDAY "station_trait_birthday" ///From the market_crash event #define MARKET_CRASH_EVENT_TRAIT "crashed_market_event" diff --git a/code/datums/greyscale/config_types/greyscale_configs.dm b/code/datums/greyscale/config_types/greyscale_configs.dm index b856ffb65b4..ad96a5ceb23 100644 --- a/code/datums/greyscale/config_types/greyscale_configs.dm +++ b/code/datums/greyscale/config_types/greyscale_configs.dm @@ -1010,3 +1010,23 @@ name = "Transmutation Rune" icon_file = 'icons/effects/96x96.dmi' json_config = 'code/datums/greyscale/json_configs/heretic_rune.json' + +/datum/greyscale_config/festive_hat + name = "Festive Hat" + icon_file = 'icons/obj/clothing/head/costume.dmi' + json_config = 'code/datums/greyscale/json_configs/festive_hat.json' + +/datum/greyscale_config/festive_hat_worn + name = "Festive Hat Worn" + icon_file = 'icons/mob/clothing/head/costume.dmi' + json_config = 'code/datums/greyscale/json_configs/festive_hat.json' + +/datum/greyscale_config/party_hat + name = "Party Hat" + icon_file = 'icons/obj/clothing/head/costume.dmi' + json_config = 'code/datums/greyscale/json_configs/party_hat.json' + +/datum/greyscale_config/party_hat_worn + name = "Party Hat Worn" + icon_file = 'icons/mob/clothing/head/costume.dmi' + json_config = 'code/datums/greyscale/json_configs/party_hat.json' diff --git a/code/datums/greyscale/json_configs/festive_hat.json b/code/datums/greyscale/json_configs/festive_hat.json new file mode 100644 index 00000000000..15556411479 --- /dev/null +++ b/code/datums/greyscale/json_configs/festive_hat.json @@ -0,0 +1,10 @@ +{ + "xmashat_grey": [ + { + "type": "icon_state", + "icon_state": "xmashat_grey", + "blend_mode": "overlay", + "color_ids": [ 1 ] + } + ] +} diff --git a/code/datums/greyscale/json_configs/party_hat.json b/code/datums/greyscale/json_configs/party_hat.json new file mode 100644 index 00000000000..8a83eb04101 --- /dev/null +++ b/code/datums/greyscale/json_configs/party_hat.json @@ -0,0 +1,10 @@ +{ + "party_hat": [ + { + "type": "icon_state", + "icon_state": "party_hat", + "blend_mode": "overlay", + "color_ids": [ 1 ] + } + ] +} diff --git a/code/datums/mood_events/generic_positive_events.dm b/code/datums/mood_events/generic_positive_events.dm index e54c036f708..7e1d927ef91 100644 --- a/code/datums/mood_events/generic_positive_events.dm +++ b/code/datums/mood_events/generic_positive_events.dm @@ -353,3 +353,9 @@ description = "I saw someone pop the cork off a champagne bottle in quite a radical fashion." mood_change = 1 timeout = 2 MINUTES + +/datum/mood_event/birthday + description = "Its my birthday!" + mood_change = 2 + special_screen_obj = "birthday" + special_screen_replace = FALSE diff --git a/code/datums/station_traits/negative_traits.dm b/code/datums/station_traits/negative_traits.dm index d7dbb127b4d..9ce18e08efe 100644 --- a/code/datums/station_traits/negative_traits.dm +++ b/code/datums/station_traits/negative_traits.dm @@ -50,7 +50,7 @@ /datum/station_trait/hangover/revert() for (var/obj/effect/landmark/start/hangover/hangover_spot in GLOB.start_landmarks_list) - QDEL_LIST(hangover_spot.debris) + QDEL_LIST(hangover_spot.hangover_debris) return ..() diff --git a/code/datums/station_traits/neutral_traits.dm b/code/datums/station_traits/neutral_traits.dm index 6eeafa607d8..6a5df29adbf 100644 --- a/code/datums/station_traits/neutral_traits.dm +++ b/code/datums/station_traits/neutral_traits.dm @@ -103,7 +103,7 @@ weight = 1 show_in_report = TRUE report_message = "Please be nice to him." - blacklist = list(/datum/station_trait/announcement_medbot) + blacklist = list(/datum/station_trait/announcement_medbot, /datum/station_trait/birthday) /datum/station_trait/announcement_intern/New() . = ..() @@ -115,7 +115,7 @@ weight = 1 show_in_report = TRUE report_message = "Our announcement system is under scheduled maintanance at the moment. Thankfully, we have a backup." - blacklist = list(/datum/station_trait/announcement_intern) + blacklist = list(/datum/station_trait/announcement_intern, /datum/station_trait/birthday) /datum/station_trait/announcement_medbot/New() . = ..() @@ -189,3 +189,124 @@ return gorilla.poll_for_gorilla() + +/datum/station_trait/birthday + name = "Employee Birthday" + trait_type = STATION_TRAIT_NEUTRAL + weight = 2 + show_in_report = TRUE + report_message = "We here at Nanotrasen would all like to wish Employee Name a very happy birthday" + trait_to_give = STATION_TRAIT_BIRTHDAY + blacklist = list(/datum/station_trait/announcement_intern, /datum/station_trait/announcement_medbot) //Overiding the annoucer hides the birthday person in the annoucement message. + ///Variable that stores a reference to the person selected to have their birthday celebrated. + var/mob/living/carbon/human/birthday_person + ///Variable that admins can override with a player's ckey in order to set them as the birthday person when the round starts. + var/birthday_override_ckey + +/datum/station_trait/birthday/New() + . = ..() + RegisterSignals(SSdcs, list(COMSIG_GLOB_JOB_AFTER_SPAWN), PROC_REF(on_job_after_spawn)) + +/datum/station_trait/birthday/revert() + for (var/obj/effect/landmark/start/hangover/party_spot in GLOB.start_landmarks_list) + QDEL_LIST(party_spot.party_debris) + return ..() + +/datum/station_trait/birthday/on_round_start() + . = ..() + if(birthday_override_ckey) + if(!check_valid_override()) + message_admins("Attempted to make [birthday_override_ckey] the birthday person but they are not a valid station role. A random birthday person has be selected instead.") + + if(!birthday_person) + var/list/birthday_options + for(var/mob/living/carbon/human/human in GLOB.human_list) + if(human.mind?.assigned_role.job_flags & JOB_CREW_MEMBER) + birthday_options += human + birthday_person = pick(birthday_options) + addtimer(CALLBACK(src, PROC_REF(announce_birthday)), 10 SECONDS) + +/datum/station_trait/birthday/proc/check_valid_override() + + var/mob/living/carbon/human/birthday_override_mob = get_mob_by_ckey(birthday_override_ckey) + + if(isnull(birthday_override_mob)) + return FALSE + + if(birthday_override_mob.mind?.assigned_role.job_flags & JOB_CREW_MEMBER) + birthday_person = birthday_override_mob + return TRUE + else + return FALSE + + +/datum/station_trait/birthday/proc/announce_birthday() + report_message = "We here at Nanotrasen would all like to wish [birthday_person ? birthday_person.name : "Employee Name"] a very happy birthday" + priority_announce("Happy birthday to [birthday_person ? birthday_person.name : "Employee Name"]! Nanotrasen wishes you a very happy [birthday_person ? thtotext(birthday_person.age + 1) : "255th"] birthday.") + if(birthday_person) + playsound(birthday_person, 'sound/items/party_horn.ogg', 50) + birthday_person.add_mood_event("birthday", /datum/mood_event/birthday) + +/datum/station_trait/birthday/proc/on_job_after_spawn(datum/source, datum/job/job, mob/living/spawned_mob) + SIGNAL_HANDLER + + var/obj/item/hat = pick_weight(list( + /obj/item/clothing/head/costume/party/festive = 12, + /obj/item/clothing/head/costume/party = 12, + /obj/item/clothing/head/costume/festive = 2, + /obj/item/clothing/head/utility/hardhat/cakehat = 1, + )) + hat = new hat(spawned_mob) + if(!spawned_mob.equip_to_slot_if_possible(hat, ITEM_SLOT_HEAD, disable_warning = TRUE)) + spawned_mob.equip_to_slot_or_del(hat, ITEM_SLOT_BACKPACK) + var/obj/item/toy = pick_weight(list( + /obj/item/reagent_containers/spray/chemsprayer/party = 4, + /obj/item/toy/balloon = 2, + /obj/item/sparkler = 2, + /obj/item/clothing/mask/party_horn = 2, + /obj/item/storage/box/tail_pin = 1, + )) + toy = new toy(spawned_mob) + spawned_mob.equip_to_slot_or_del(toy, ITEM_SLOT_BACKPACK) + if(birthday_person) //Anyone who joins after the annoucement gets one of these. + var/obj/item/birthday_invite/birthday_invite = new(spawned_mob) + birthday_invite.setup_card(birthday_person.name) + spawned_mob.equip_to_slot_or_del(birthday_invite, ITEM_SLOT_HANDS) + +/obj/item/birthday_invite + name = "birthday invitation" + desc = "A card stating that it's someone's birthday today." + resistance_flags = FLAMMABLE + w_class = WEIGHT_CLASS_TINY + +/obj/item/birthday_invite/proc/setup_card(birthday_name) + desc = "A card stating that its [birthday_name]'s birthday today." + icon_state = "paperslip_words" + icon = 'icons/obj/bureaucracy.dmi' + +/obj/item/clothing/head/costume/party + name = "party hat" + desc = "A crappy paper hat that you are REQUIRED to wear." + icon_state = "party_hat" + greyscale_config = /datum/greyscale_config/party_hat + greyscale_config_worn = /datum/greyscale_config/party_hat_worn + flags_inv = 0 + armor_type = /datum/armor/none + var/static/list/hat_colors = list( + COLOR_PRIDE_RED, + COLOR_PRIDE_ORANGE, + COLOR_PRIDE_YELLOW, + COLOR_PRIDE_GREEN, + COLOR_PRIDE_BLUE, + COLOR_PRIDE_PURPLE, + ) + +/obj/item/clothing/head/costume/party/Initialize(mapload) + set_greyscale(colors = list(pick(hat_colors))) + return ..() + +/obj/item/clothing/head/costume/party/festive + name = "festive paper hat" + icon_state = "xmashat_grey" + greyscale_config = /datum/greyscale_config/festive_hat + greyscale_config_worn = /datum/greyscale_config/festive_hat_worn diff --git a/code/game/machinery/computer/arcade/arcade.dm b/code/game/machinery/computer/arcade/arcade.dm index 55453cc4f65..cc07e01a3a8 100644 --- a/code/game/machinery/computer/arcade/arcade.dm +++ b/code/game/machinery/computer/arcade/arcade.dm @@ -65,7 +65,9 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list( /obj/item/toy/eldritch_book = 2, /obj/item/storage/box/heretic_box = 1, /obj/item/toy/foamfinger = 2, - /obj/item/clothing/glasses/trickblindfold = 2)) + /obj/item/clothing/glasses/trickblindfold = 2, + /obj/item/clothing/mask/party_horn = 2, + /obj/item/storage/box/party_poppers = 2)) /obj/machinery/computer/arcade name = "random arcade" diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index 7fff1267cfe..a9db2f57f75 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -458,23 +458,45 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player) name = "hangover spawn" icon_state = "hangover_spawn" - /// A list of everything this hangover spawn created - var/list/debris = list() + /// A list of everything this hangover spawn created as part of the hangover station trait + var/list/hangover_debris = list() + + /// A list of everything this hangover spawn created as part of the birthday station trait + var/list/party_debris = list() /obj/effect/landmark/start/hangover/Initialize(mapload) . = ..() return INITIALIZE_HINT_LATELOAD /obj/effect/landmark/start/hangover/Destroy() - debris = null + hangover_debris = null + party_debris = null return ..() /obj/effect/landmark/start/hangover/LateInitialize() . = ..() + if(HAS_TRAIT(SSstation, STATION_TRAIT_BIRTHDAY)) + party_debris += new /obj/effect/decal/cleanable/confetti(get_turf(src)) //a birthday celebration can also be a hangover + var/list/bonus_confetti = GLOB.alldirs + for(var/confettis in bonus_confetti) + var/party_turf_to_spawn_on = get_step(src, confettis) + if(!isopenturf(party_turf_to_spawn_on)) + continue + var/dense_object = FALSE + for(var/atom/content in party_turf_to_spawn_on) + if(content.density) + dense_object = TRUE + break + if(dense_object) + continue + if(prob(50)) + party_debris += new /obj/effect/decal/cleanable/confetti(party_turf_to_spawn_on) + if(prob(10)) + party_debris += new /obj/item/toy/balloon(party_turf_to_spawn_on) if(!HAS_TRAIT(SSstation, STATION_TRAIT_HANGOVER)) return if(prob(60)) - debris += new /obj/effect/decal/cleanable/vomit(get_turf(src)) + hangover_debris += new /obj/effect/decal/cleanable/vomit(get_turf(src)) if(prob(70)) var/bottle_count = rand(1, 3) for(var/index in 1 to bottle_count) @@ -488,7 +510,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player) break if(dense_object) continue - debris += new /obj/item/reagent_containers/cup/glass/bottle/beer/almost_empty(turf_to_spawn_on) + hangover_debris += new /obj/item/reagent_containers/cup/glass/bottle/beer/almost_empty(turf_to_spawn_on) ///Spawns the mob with some drugginess/drunkeness, and some disgust. /obj/effect/landmark/start/hangover/proc/make_hungover(mob/hangover_mob) diff --git a/code/game/objects/effects/spawners/random/bureaucracy.dm b/code/game/objects/effects/spawners/random/bureaucracy.dm index 08a84ceb15a..af33169ff15 100644 --- a/code/game/objects/effects/spawners/random/bureaucracy.dm +++ b/code/game/objects/effects/spawners/random/bureaucracy.dm @@ -67,3 +67,18 @@ /obj/item/folder/white, /obj/item/folder, ) + +/obj/effect/spawner/random/bureaucracy/birthday_wrap + name = "additional wrapping paper spawner" + icon_state = "wrapping_paper" + spawn_all_loot = TRUE + loot = list( + /obj/item/stack/wrapping_paper, + /obj/item/stack/wrapping_paper, + /obj/item/stack/wrapping_paper, + ) + +/obj/effect/spawner/random/bureaucracy/birthday_wrap/Initialize(mapload) + if(!HAS_TRAIT(SSstation, STATION_TRAIT_BIRTHDAY)) + spawn_loot_chance = 0 + return ..() diff --git a/code/game/objects/effects/spawners/random/food_or_drink.dm b/code/game/objects/effects/spawners/random/food_or_drink.dm index 2454bb87bbd..8753c2cfff8 100644 --- a/code/game/objects/effects/spawners/random/food_or_drink.dm +++ b/code/game/objects/effects/spawners/random/food_or_drink.dm @@ -254,3 +254,21 @@ /obj/item/storage/box/cups, /obj/item/storage/box/condimentbottles, ) + +///Used for the employee birthday station trait +/obj/effect/spawner/random/food_or_drink/cake_ingredients + name = "cake ingredients spawner" + icon_state = "cake" + spawn_all_loot = TRUE + loot = list( + /obj/item/food/cakebatter, + /obj/item/flashlight/flare/candle, + /obj/item/reagent_containers/condiment/sugar, + /obj/item/reagent_containers/cup/bottle/caramel, + ) + +/obj/effect/spawner/random/food_or_drink/cake_ingredients/Initialize(mapload) + if(!HAS_TRAIT(SSstation, STATION_TRAIT_BIRTHDAY)) + spawn_loot_chance = 0 + return ..() + diff --git a/code/game/objects/items/storage/boxes/service_boxes.dm b/code/game/objects/items/storage/boxes/service_boxes.dm index 37ae7be7474..2791d3e8c62 100644 --- a/code/game/objects/items/storage/boxes/service_boxes.dm +++ b/code/game/objects/items/storage/boxes/service_boxes.dm @@ -195,3 +195,11 @@ for(var/i in 1 to 3) new /obj/item/poster/tail_board(src) new /obj/item/tail_pin(src) + +/obj/item/storage/box/party_poppers + name = "box of party_poppers" + desc = "Turn any event into a celebration and ensure the janitor stays busy." + +/obj/item/storage/box/party_poppers/PopulateContents() + for(var/i in 1 to 5) + new /obj/item/reagent_containers/spray/chemsprayer/party(src) diff --git a/code/modules/clothing/masks/hailer.dm b/code/modules/clothing/masks/hailer.dm index 8166e0650e5..00081134201 100644 --- a/code/modules/clothing/masks/hailer.dm +++ b/code/modules/clothing/masks/hailer.dm @@ -203,6 +203,25 @@ GLOBAL_LIST_INIT(hailer_phrases, list( /datum/action/item_action/halt name = "HALT!" +/obj/item/clothing/mask/party_horn + name = "party horn" + desc = "A paper tube used at parties that makes a noise when blown into." + icon_state = "party_horn" + inhand_icon_state = null + w_class = WEIGHT_CLASS_SMALL + actions_types = list(/datum/action/item_action/toot) + COOLDOWN_DECLARE(horn_cooldown) + +/obj/item/clothing/mask/party_horn/ui_action_click(mob/user, action) + if(!COOLDOWN_FINISHED(src, horn_cooldown)) + return + COOLDOWN_START(src, horn_cooldown, 10 SECONDS) + playsound(src, 'sound/items/party_horn.ogg', 75, FALSE) + flick("party_horn_animated", src) + +/datum/action/item_action/toot + name = "TOOT!" + #undef PHRASE_COOLDOWN #undef OVERUSE_COOLDOWN #undef AGGR_GOOD_COP diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 9f70444a43a..08df49034ce 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -2426,6 +2426,13 @@ glitter_type = /obj/effect/decal/cleanable/glitter/blue chemical_flags = REAGENT_CAN_BE_SYNTHESIZED +/datum/reagent/glitter/confetti + name = "Confetti" + description = "Tiny plastic flakes that are impossible to sweep up." + color = "#7dd87b" + glitter_type = /obj/effect/decal/cleanable/confetti + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + /datum/reagent/pax name = "Pax" description = "A colorless liquid that suppresses violence in its subjects." diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index fddb4e856e4..77cd49db4de 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -24,6 +24,7 @@ amount_per_transfer_from_this = 5 volume = 250 possible_transfer_amounts = list(5,10) + var/spray_sound = 'sound/effects/spray2.ogg' /obj/item/reagent_containers/spray/afterattack(atom/target, mob/user, proximity_flag, click_parameters) . = ..() @@ -51,7 +52,7 @@ spray(target, user) - playsound(src.loc, 'sound/effects/spray2.ogg', 50, TRUE, -6) + playsound(src.loc, spray_sound, 50, TRUE, -6) user.changeNext_move(CLICK_CD_RANGE*2) user.newtonian_move(get_dir(target, user)) return @@ -359,6 +360,30 @@ last_generate = world.time reagents.add_reagent(generate_type, generate_amount) +/obj/item/reagent_containers/spray/chemsprayer/party + name = "party popper" + desc = "A small device used for celebrations and annoying the janitor." + icon = 'icons/obj/toys/toy.dmi' + icon_state = "party_popper" + inhand_icon_state = "party_popper" + lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items_righthand.dmi' + w_class = WEIGHT_CLASS_TINY + reagent_flags = NONE + list_reagents = list(/datum/reagent/glitter/confetti = 15) + volume = 15 + amount_per_transfer_from_this = 5 + can_toggle_range = FALSE + stream_mode = FALSE + current_range = 2 + spray_range = 2 + spray_sound = 'sound/effects/snap.ogg' + +/obj/item/reagent_containers/spray/chemsprayer/party/spray(atom/A, mob/user) + . = ..() + icon_state = "[icon_state]_used" + + // Plant-B-Gone /obj/item/reagent_containers/spray/plantbgone // -- Skie name = "Plant-B-Gone" diff --git a/icons/effects/random_spawners.dmi b/icons/effects/random_spawners.dmi index 6a22c6706e3..36441b461d7 100644 Binary files a/icons/effects/random_spawners.dmi and b/icons/effects/random_spawners.dmi differ diff --git a/icons/hud/screen_gen.dmi b/icons/hud/screen_gen.dmi index 81d4dec5a7e..d80a2dbe762 100644 Binary files a/icons/hud/screen_gen.dmi and b/icons/hud/screen_gen.dmi differ diff --git a/icons/mob/clothing/head/costume.dmi b/icons/mob/clothing/head/costume.dmi index 1e53e42cadf..f34bd252ab5 100644 Binary files a/icons/mob/clothing/head/costume.dmi and b/icons/mob/clothing/head/costume.dmi differ diff --git a/icons/mob/clothing/mask.dmi b/icons/mob/clothing/mask.dmi index 6f7981cdd25..1a1a1c78d59 100644 Binary files a/icons/mob/clothing/mask.dmi and b/icons/mob/clothing/mask.dmi differ diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi index 7c74900f55e..aedbf62c3ed 100644 Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi index 5f5ff748e12..f10ba006ec1 100644 Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ diff --git a/icons/obj/clothing/head/costume.dmi b/icons/obj/clothing/head/costume.dmi index 3b7710d53bc..9f48f49e2c2 100644 Binary files a/icons/obj/clothing/head/costume.dmi and b/icons/obj/clothing/head/costume.dmi differ diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi index 7b4333e8db0..5c003d0999f 100644 Binary files a/icons/obj/clothing/masks.dmi and b/icons/obj/clothing/masks.dmi differ diff --git a/icons/obj/toys/toy.dmi b/icons/obj/toys/toy.dmi index ea545d7132c..69d5705d2af 100644 Binary files a/icons/obj/toys/toy.dmi and b/icons/obj/toys/toy.dmi differ