From 04f41aadb76ceedf508626bc0df183ed1b13cfbc Mon Sep 17 00:00:00 2001 From: Casey Date: Sun, 25 Dec 2022 21:04:31 -0500 Subject: [PATCH] Adds fireworks and their launchers --- code/__defines/planets.dm | 2 + code/modules/admin/verbs/debug.dm | 15 ++ code/modules/fireworks/firework_launcher.dm | 124 +++++++++++++++ code/modules/fireworks/firework_stars.dm | 142 ++++++++++++++++++ .../fireworks/launcher_construction.dm | 8 + code/modules/planet/virgo3b_vr.dm | 44 ++++-- code/modules/planet/virgo3c_vr.dm | 28 +++- code/modules/planet/virgo4_vr.dm | 28 +++- code/modules/planet/weather_vr.dm | 3 + .../research/designs/circuits/circuits_vr.dm | 7 + .../research/designs/firework_stars.dm | 112 ++++++++++++++ icons/effects/weather_vr.dmi | Bin 468 -> 992 bytes icons/obj/firework_stars.dmi | Bin 0 -> 1458 bytes icons/obj/machines/firework_launcher.dmi | Bin 0 -> 478 bytes maps/groundbase/gb-z2.dmm | 21 ++- maps/tether/tether-01-surface1.dmm | 119 ++++++++++++++- vorestation.dme | 4 + 17 files changed, 641 insertions(+), 16 deletions(-) create mode 100644 code/modules/fireworks/firework_launcher.dm create mode 100644 code/modules/fireworks/firework_stars.dm create mode 100644 code/modules/fireworks/launcher_construction.dm create mode 100644 code/modules/research/designs/firework_stars.dm create mode 100644 icons/obj/firework_stars.dmi create mode 100644 icons/obj/machines/firework_launcher.dmi diff --git a/code/__defines/planets.dm b/code/__defines/planets.dm index 3579cc804d..0217a0ef1e 100644 --- a/code/__defines/planets.dm +++ b/code/__defines/planets.dm @@ -13,6 +13,8 @@ #define WEATHER_ASH_STORM "ash storm" // Ripped from TG, like the above. Less harmless. #define WEATHER_ASH_STORM_SAFE "light ash storm" //Safe version of the ash storm. Dimmer. #define WEATHER_FALLOUT "fallout" // Modified emberfall, actually harmful. Admin only. +#define WEATHER_FALLOUT_TEMP "short-term fallout" // Nuclear fallout that actually ends. Firework-only +#define WEATHER_CONFETTI "confetti" // Firework-only #define MOON_PHASE_NEW_MOON "new moon" #define MOON_PHASE_WAXING_CRESCENT "waxing crescent" diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index e453842124..10b4bc7cc9 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -652,6 +652,21 @@ message_admins(log) log_admin(log) +/datum/admins/proc/toggle_firework_override() + set category = "Fun" + set name = "Toggle Weather Firework Override" + set desc = "Toggles ability for weather fireworks to affect weather on planet of choice." + + if(!check_rights(R_DEBUG)) + return + + var/datum/planet/planet = tgui_input_list(usr, "Which planet do you want to toggle firework effects on?", "Change Weather", SSplanets.planets) + if(istype(planet) && planet.weather_holder) + planet.weather_holder.firework_override = !(planet.weather_holder.firework_override) + var/log = "[key_name(src)] toggled [planet.name]'s firework override to [planet.weather_holder.firework_override ? "on" : "off"]." + message_admins(log) + log_admin(log) + /datum/admins/proc/change_time() set category = "Debug" set name = "Change Planet Time" diff --git a/code/modules/fireworks/firework_launcher.dm b/code/modules/fireworks/firework_launcher.dm new file mode 100644 index 0000000000..26044f2445 --- /dev/null +++ b/code/modules/fireworks/firework_launcher.dm @@ -0,0 +1,124 @@ +/obj/machinery/firework_launcher + name = "firework launcher" + desc = "A machine for launching fireworks of varying practicality." + icon = 'icons/obj/machines/firework_launcher.dmi' + icon_state = "launcher01" + density = TRUE + anchored = TRUE + + circuit = /obj/item/weapon/circuitboard/firework_launcher + var/obj/item/weapon/firework_star/loaded_star + var/last_launch + var/launch_cooldown = 5 MINUTES + +/obj/machinery/firework_launcher/Initialize() + . = ..() + + default_apply_parts() + last_launch = world.time // Prevents cheesing cooldown by deconstructing and reconstructing + update_icon() + +/obj/machinery/firework_launcher/RefreshParts() + launch_cooldown = 5 MINUTES + var/rating = 0 + for(var/obj/item/weapon/stock_parts/micro_laser/laser in component_parts) + rating += laser.rating - 1 + launch_cooldown = max(0, (launch_cooldown - ((rating*30) SECONDS))) // For every part tier above 1 on the two lasers, reduce cooldown by 30 seconds. 1 minute cooldown on the tier 5 parts, 3 minutes on tier 3. + + . = ..() + +/obj/machinery/firework_launcher/update_icon() + icon_state = "launcher[loaded_star ? "1" : "0"][anchored ? "1" : "0"][panel_open ? "_open" : ""]" + +/obj/machinery/firework_launcher/attackby(var/obj/item/O, var/mob/user) + if(default_deconstruction_screwdriver(user, O)) + update_icon() + return + + if(default_deconstruction_crowbar(user, O)) + return + + if(default_part_replacement(user, O)) + return + + if(default_unfasten_wrench(user, O, 20)) + update_icon() + return + + if(istype(O, /obj/item/weapon/firework_star)) + loaded_star = O + user.drop_item() + O.forceMove(src) + to_chat(user, "You insert the firework star into the launcher.") + add_fingerprint(user) + update_icon() + return + + return ..() + +/obj/machinery/firework_launcher/verb/eject() + set category = "Object" + set name = "Eject Firework Star" + set src in oview(1) + + var/mob/living/user = usr + if(!user || user.stat != 0) + return + if(!loaded_star) + to_chat(user, "There is no firework star loaded in the launcher.") + return + else + loaded_star.forceMove(get_turf(src)) + loaded_star = null + add_fingerprint(user) + update_icon() + +/obj/machinery/firework_launcher/attack_hand(mob/user) // Maybe this proc could be better as entirely its own proc, called from attack_hand, but also I don't really see the point + if(panel_open) + to_chat(user, "Close the panel first!") + return + + if(!loaded_star) + to_chat(user, "There is no firework star loaded in the launcher.") + return + + if((world.time - last_launch) <= launch_cooldown) + to_chat(user, "The launcher is still re-priming for launch.") + return + + if(!anchored) + to_chat(user, "Launcher must be firmly secured to the ground before firework can be launched!") + return + + var/datum/planet/P = get_planet() + if(!P || !(P.weather_holder)) // There are potential cases of being outside but not on planet. And checking whether planet has weather at all is more sanity thing than anything. + to_chat(user, "Launcher beeps as its safeties seem to prevent launch in the current location.") + return + + var/datum/weather_holder/WH = P.weather_holder + if(WH.firework_override && istype(loaded_star, /obj/item/weapon/firework_star/weather)) // Enable weather-based events to not be ruined + to_chat(user, "Launcher beeps as it seems some interference is preventing launch of this type of firework.") + return + + to_chat(user, "You launch the firework!") + playsound(get_turf(src), 'sound/weapons/rpg.ogg', 75, 1) + loaded_star.trigger_firework(WH) + qdel(loaded_star) + loaded_star = null + last_launch = world.time + add_fingerprint(user) + update_icon() + flick("launcher_launch", src) + +/obj/machinery/firework_launcher/proc/get_planet() + var/turf/T = get_turf(src) + if(!T) + return + + if(!T.is_outdoors()) + return + + var/datum/planet/P = SSplanets.z_to_planet[T.z] + if(!P) + return + return P \ No newline at end of file diff --git a/code/modules/fireworks/firework_stars.dm b/code/modules/fireworks/firework_stars.dm new file mode 100644 index 0000000000..a276539424 --- /dev/null +++ b/code/modules/fireworks/firework_stars.dm @@ -0,0 +1,142 @@ +#define T_FIREWORK_WEATHER_STAR(name) "weather firework star (" + (name) + ")" + +/obj/item/weapon/firework_star + icon = 'icons/obj/firework_stars.dmi' + name = "firework star" + desc = "A very tightly compacted ball of chemicals for use with firework launcher." + icon_state = "star" + w_class = ITEMSIZE_SMALL + origin_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 1) + +/obj/item/weapon/firework_star/proc/trigger_firework(var/datum/weather_holder/w_holder) + return + + +/obj/item/weapon/firework_star/weather + name = "weather firework star" + desc = "A firework star designed to alter a weather, rather than put on a show." + var/weather_type + origin_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 2) + +/obj/item/weapon/firework_star/weather/trigger_firework(var/datum/weather_holder/w_holder) + if(!w_holder) // Sanity + return + if(w_holder.firework_override) // Make sure weather-based events can't be interfered with + return + if(weather_type && (weather_type in w_holder.allowed_weather_types)) + w_holder.message_all_outdoor_players("Something seems to flash in the sky, as weather suddenly shifts!") + w_holder.change_weather(weather_type) + w_holder.rebuild_forecast() + +/obj/item/weapon/firework_star/weather/clear + name = T_FIREWORK_WEATHER_STAR("CLEAR SKY") + weather_type = WEATHER_CLEAR + icon_state = "clear" + +/obj/item/weapon/firework_star/weather/overcast + name = T_FIREWORK_WEATHER_STAR("CLOUDY") + weather_type = WEATHER_OVERCAST + icon_state = "cloudy" + +/obj/item/weapon/firework_star/weather/rain + name = T_FIREWORK_WEATHER_STAR("RAIN") + weather_type = WEATHER_RAIN + icon_state = "rain" + +/obj/item/weapon/firework_star/weather/storm + name = T_FIREWORK_WEATHER_STAR("STORM") + weather_type = WEATHER_STORM + icon_state = "rain" + +/obj/item/weapon/firework_star/weather/light_snow + name = T_FIREWORK_WEATHER_STAR("SNOW - LIGHT") + weather_type = WEATHER_LIGHT_SNOW + icon_state = "snow" + +/obj/item/weapon/firework_star/weather/snow + name = T_FIREWORK_WEATHER_STAR("SNOW - MEDIUM") + weather_type = WEATHER_SNOW + icon_state = "snow" + +/obj/item/weapon/firework_star/weather/blizzard + name = T_FIREWORK_WEATHER_STAR("SNOW - HEAVY") + weather_type = WEATHER_BLIZZARD + icon_state = "snow" + +/obj/item/weapon/firework_star/weather/hail + name = T_FIREWORK_WEATHER_STAR("HAIL") + weather_type = WEATHER_HAIL + icon_state = "snow" + origin_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 2, TECH_ILLEGAL = 1) + +/obj/item/weapon/firework_star/weather/fallout + name = T_FIREWORK_WEATHER_STAR("NUCLEAR") + desc = "This is the worst idea ever." + weather_type = WEATHER_FALLOUT_TEMP + icon_state = "nuclear" + origin_tech = list(TECH_MATERIAL = 7, TECH_ENGINEERING = 3, TECH_ILLEGAL = 5) + +/obj/item/weapon/firework_star/weather/confetti + name = T_FIREWORK_WEATHER_STAR("CONFETTI") + desc = "A firework star designed to alter a weather, rather than put on a show. This one makes colorful confetti rain from the sky." + weather_type = WEATHER_CONFETTI + icon_state = "confetti" + + +/obj/item/weapon/firework_star/aesthetic + name = "aesthetic firework star" + desc = "A firework star designed to paint the sky with pretty lights." + var/list/firework_adjectives = list("beautiful", "pretty", "fancy", "colorful", "bright", "shimmering") + var/list/firework_colors = list("red", "orange", "yellow", "green", "cyan", "blue", "purple", "pink", "beige", "white") + +/obj/item/weapon/firework_star/aesthetic/trigger_firework(var/datum/weather_holder/w_holder) + if(!w_holder) + return + w_holder.message_all_outdoor_players(get_firework_message()) + +/obj/item/weapon/firework_star/aesthetic/proc/get_firework_message() + return "You see a [pick(firework_adjectives)] explosion of [pick(firework_colors)] sparks in the sky!" + +/obj/item/weapon/firework_star/aesthetic/configurable + name = "configurable aesthetic firework star" + desc = "A firework star designed to paint the sky with pretty lights. This one's advanced and can be configured to specific shapes or colors." + icon_state = "config" + var/current_color = "white" + var/current_shape = "Random" + var/list/firework_shapes = list("none", "Random", + "a circle", "an oval", "a triangle", "a square", "a pentagon", "a hexagon", "an octagon", "a plus sign", "an x", "a star", "a spiral", "a heart", "a teardrop", + "a smiling face", "a winking face", "a mouse", "a cat", "a dog", "a fox", "a bird", "a fish", "a lizard", "a bug", "a butterfly", "a robot", "a dragon", "a teppi", "a catslug", + "a tree", "a leaf", "a flower", "a lightning bolt", "a cloud", "a sun", "a gemstone", "a flame", "a wrench", "a beaker", "a syringe", "a pickaxe", "a pair of handcuffs", "a crown", + "a bottle", "a boat", "a spaceship", + "Nanotrasen logo", "a geometric-looking letter S", "a dodecahedron") + +/obj/item/weapon/firework_star/aesthetic/configurable/attack_self(var/mob/user) + var/choice = tgui_alert(usr, "What setting do you want to adjust?", "Firework Star", list("Color", "Shape", "Nothing")) + if(src.loc != user) + return + + if(choice == "Color") + var/color_choice = tgui_input_list(user, "What color would you like firework to be?", "Firework Star", firework_colors) + if(src.loc != user) + return + if(color_choice) + current_color = color_choice + + if(choice == "Shape") + var/shape_choice = tgui_input_list(user, "What shape would you like firework to be?", "Firework Star", firework_shapes) + if(src.loc != user) + return + if(shape_choice) + current_shape = shape_choice + +/obj/item/weapon/firework_star/aesthetic/configurable/get_firework_message() + var/temp_shape = current_shape + if(temp_shape == "Random") + var/list/shapes_copy = firework_shapes.Copy() + shapes_copy -= "Random" + temp_shape = pick(shapes_copy) + + if(temp_shape == "none" || !temp_shape) + return "You see a [pick(firework_adjectives)] explosion of [current_color] sparks in the sky!" + else + return "You see a [pick(firework_adjectives)] explosion of [current_color] sparks in the sky, forming into shape of [current_shape]!" \ No newline at end of file diff --git a/code/modules/fireworks/launcher_construction.dm b/code/modules/fireworks/launcher_construction.dm new file mode 100644 index 0000000000..6ee8178694 --- /dev/null +++ b/code/modules/fireworks/launcher_construction.dm @@ -0,0 +1,8 @@ +/obj/item/weapon/circuitboard/firework_launcher + name = T_BOARD("firework launcher") + board_type = new /datum/frame/frame_types/machine + build_path = /obj/machinery/firework_launcher + origin_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 2) + req_components = list ( + /obj/item/weapon/stock_parts/micro_laser = 2 + ) \ No newline at end of file diff --git a/code/modules/planet/virgo3b_vr.dm b/code/modules/planet/virgo3b_vr.dm index b3e6d136fb..ffeaf4f253 100644 --- a/code/modules/planet/virgo3b_vr.dm +++ b/code/modules/planet/virgo3b_vr.dm @@ -111,17 +111,19 @@ var/datum/planet/virgo3b/planet_virgo3b = null WEATHER_EMBERFALL = new /datum/weather/virgo3b/emberfall(), WEATHER_ASH_STORM = new /datum/weather/virgo3b/ash_storm(), WEATHER_ASH_STORM_SAFE = new /datum/weather/virgo3b/ash_storm_safe(), - WEATHER_FALLOUT = new /datum/weather/virgo3b/fallout() + WEATHER_FALLOUT = new /datum/weather/virgo3b/fallout(), + WEATHER_FALLOUT_TEMP = new /datum/weather/virgo3b/fallout/temp(), + WEATHER_CONFETTI = new /datum/weather/virgo3b/confetti() ) roundstart_weather_chances = list( - WEATHER_CLEAR = 30, - WEATHER_OVERCAST = 30, - WEATHER_LIGHT_SNOW = 20, - WEATHER_SNOW = 5, - WEATHER_BLIZZARD = 5, - WEATHER_RAIN = 5, - WEATHER_STORM = 2.5, - WEATHER_HAIL = 2.5 + WEATHER_CLEAR = 60, + WEATHER_OVERCAST = 60, + WEATHER_LIGHT_SNOW = 40, + WEATHER_SNOW = 10, + WEATHER_BLIZZARD = 10, + WEATHER_RAIN = 10, + WEATHER_STORM = 5, + WEATHER_HAIL = 5 ) /datum/weather/virgo3b @@ -550,3 +552,27 @@ var/datum/planet/virgo3b/planet_virgo3b = null if(T.is_outdoors()) SSradiation.radiate(T, rand(fallout_rad_low, fallout_rad_high)) +/datum/weather/virgo3b/fallout/temp + name = "short-term fallout" + transition_chances = list( + WEATHER_FALLOUT = 10, + WEATHER_RAIN = 50, + WEATHER_STORM = 20, + WEATHER_OVERCAST = 5 + ) + +/datum/weather/virgo3b/confetti + name = "confetti" + icon = 'icons/effects/weather_vr.dmi' + icon_state = "confetti" + + transition_chances = list( + WEATHER_CLEAR = 50, + WEATHER_OVERCAST = 20, + WEATHER_CONFETTI = 5 + ) + observed_message = "Confetti is raining from the sky." + transition_messages = list( + "Suddenly, colorful confetti starts raining from the sky." + ) + diff --git a/code/modules/planet/virgo3c_vr.dm b/code/modules/planet/virgo3c_vr.dm index 9786602f1a..705fcba2b0 100644 --- a/code/modules/planet/virgo3c_vr.dm +++ b/code/modules/planet/virgo3c_vr.dm @@ -131,7 +131,9 @@ var/datum/planet/virgo3c/planet_virgo3c = null WEATHER_EMBERFALL = new /datum/weather/virgo3c/emberfall(), WEATHER_ASH_STORM = new /datum/weather/virgo3c/ash_storm(), WEATHER_ASH_STORM_SAFE = new /datum/weather/virgo3c/ash_storm_safe(), - WEATHER_FALLOUT = new /datum/weather/virgo3c/fallout() + WEATHER_FALLOUT = new /datum/weather/virgo3c/fallout(), + WEATHER_FALLOUT_TEMP = new /datum/weather/virgo3c/fallout/temp(), + WEATHER_CONFETTI = new /datum/weather/virgo3c/confetti() ) roundstart_weather_chances = list( WEATHER_CLEAR = 50, @@ -548,6 +550,30 @@ var/datum/planet/virgo3c/planet_virgo3c = null if(T.is_outdoors()) SSradiation.radiate(T, rand(fallout_rad_low, fallout_rad_high)) +/datum/weather/virgo3c/fallout/temp + name = "short-term fallout" + transition_chances = list( + WEATHER_FALLOUT = 10, + WEATHER_RAIN = 50, + WEATHER_STORM = 20, + WEATHER_OVERCAST = 5 + ) + +/datum/weather/virgo3c/confetti + name = "confetti" + icon = 'icons/effects/weather_vr.dmi' + icon_state = "confetti" + + transition_chances = list( + WEATHER_CLEAR = 50, + WEATHER_OVERCAST = 20, + WEATHER_CONFETTI = 5 + ) + observed_message = "Confetti is raining from the sky." + transition_messages = list( + "Suddenly, colorful confetti starts raining from the sky." + ) + /turf/unsimulated/wall/planetary/virgo3c name = "impassable rock" desc = "It's quite impassable" diff --git a/code/modules/planet/virgo4_vr.dm b/code/modules/planet/virgo4_vr.dm index 9cb88591ad..46de03a2c7 100644 --- a/code/modules/planet/virgo4_vr.dm +++ b/code/modules/planet/virgo4_vr.dm @@ -110,7 +110,9 @@ var/datum/planet/virgo4/planet_virgo4 = null WEATHER_EMBERFALL = new /datum/weather/virgo4/emberfall(), WEATHER_ASH_STORM = new /datum/weather/virgo4/ash_storm(), WEATHER_ASH_STORM_SAFE = new /datum/weather/virgo4/ash_storm_safe(), - WEATHER_FALLOUT = new /datum/weather/virgo4/fallout() + WEATHER_FALLOUT = new /datum/weather/virgo4/fallout(), + WEATHER_FALLOUT_TEMP = new /datum/weather/virgo4/fallout/temp(), + WEATHER_CONFETTI = new /datum/weather/virgo4/confetti() ) roundstart_weather_chances = list( WEATHER_CLEAR = 50, @@ -524,6 +526,30 @@ var/datum/planet/virgo4/planet_virgo4 = null if(T.is_outdoors()) SSradiation.radiate(T, rand(fallout_rad_low, fallout_rad_high)) +/datum/weather/virgo4/fallout/temp + name = "short-term fallout" + transition_chances = list( + WEATHER_FALLOUT = 10, + WEATHER_RAIN = 50, + WEATHER_STORM = 20, + WEATHER_OVERCAST = 5 + ) + +/datum/weather/virgo4/confetti + name = "confetti" + icon = 'icons/effects/weather_vr.dmi' + icon_state = "confetti" + + transition_chances = list( + WEATHER_CLEAR = 50, + WEATHER_OVERCAST = 20, + WEATHER_CONFETTI = 5 + ) + observed_message = "Confetti is raining from the sky." + transition_messages = list( + "Suddenly, colorful confetti starts raining from the sky." + ) + /turf/unsimulated/wall/planetary/normal/virgo4 name = "deep ocean" alpha = 0 diff --git a/code/modules/planet/weather_vr.dm b/code/modules/planet/weather_vr.dm index ebee725478..71b3cd8fe1 100644 --- a/code/modules/planet/weather_vr.dm +++ b/code/modules/planet/weather_vr.dm @@ -1,3 +1,6 @@ +/datum/weather_holder + var/firework_override = FALSE + /datum/weather_holder/update_icon_effects() ..() if(current_weather.icon) diff --git a/code/modules/research/designs/circuits/circuits_vr.dm b/code/modules/research/designs/circuits/circuits_vr.dm index 56405580fe..2224d6e190 100644 --- a/code/modules/research/designs/circuits/circuits_vr.dm +++ b/code/modules/research/designs/circuits/circuits_vr.dm @@ -170,6 +170,13 @@ build_path = /obj/item/weapon/circuitboard/machine/vitals_monitor sort_string = "HAAF" +/datum/design/circuit/firework_launcher + name = "firework launcher" + id = "fireworklauncher" + req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2) + build_path = /obj/item/weapon/circuitboard/firework_launcher + sort_string = "KBAAB" + /datum/design/circuit/pointdefense name = "point defense battery" id = "pointdefense" diff --git a/code/modules/research/designs/firework_stars.dm b/code/modules/research/designs/firework_stars.dm new file mode 100644 index 0000000000..6fb4e6f70f --- /dev/null +++ b/code/modules/research/designs/firework_stars.dm @@ -0,0 +1,112 @@ +// Firework Stars + +/datum/design/item/firework_star/AssembleDesignName() + name = "Firework star prototype ([item_name])" + +/datum/design/item/firework_star/aesthetic + name = "aesthetic" + desc = "A firework star, designed for use with launcher. Produces variable amount of joy." + id = "fireworkaesthetic" + req_tech = list(TECH_MATERIAL = 2) + materials = list(MAT_PLASTIC = 500, MAT_GLASS = 500) + build_path = /obj/item/weapon/firework_star/aesthetic + sort_string = "IFAAA" + +/datum/design/item/firework_star/aesthetic_config + name = "aesthetic - configurable" + desc = "A firework star, designed for use with launcher. Produces variable amount of joy. Can be modified to produce specific forms." + id = "fireworkaestheticconfig" + req_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 2) + materials = list(MAT_PLASTIC = 1000, MAT_GLASS = 1000) + build_path = /obj/item/weapon/firework_star/aesthetic/configurable + sort_string = "IFAAB" + +/datum/design/item/firework_star/weather_clear + name = "weather - CLEAR" + desc = "A firework star, designed for use with launcher. Modifies current planetary weather effects. This one clears the sky." + id = "fireworkclearsky" + req_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3) + materials = list(MAT_PLASTIC = 2000, MAT_GLASS = 2000, MAT_STEEL = 4000) + build_path = /obj/item/weapon/firework_star/weather/clear + sort_string = "IFABA" + +/datum/design/item/firework_star/weather_overcast + name = "weather - CLOUDY" + desc = "A firework star, designed for use with launcher. Modifies current planetary weather effects. This one creates some clouds." + id = "fireworkcloudy" + req_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3) + materials = list(MAT_PLASTIC = 2000, MAT_GLASS = 2000, MAT_SILVER = 1000) + build_path = /obj/item/weapon/firework_star/weather/overcast + sort_string = "IFABB" + +/datum/design/item/firework_star/weather_rain + name = "weather - RAIN" + desc = "A firework star, designed for use with launcher. Modifies current planetary weather effects. This one creates rain." + id = "fireworkrain" + req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 4) + materials = list(MAT_PLASTIC = 2000, MAT_GLASS = 2000, MAT_SILVER = 4000) + build_path = /obj/item/weapon/firework_star/weather/rain + sort_string = "IFABC" + +/datum/design/item/firework_star/weather_storm + name = "weather - STORM" + desc = "A firework star, designed for use with launcher. Modifies current planetary weather effects. This one creates a rainstorm." + id = "fireworkstorm" + req_tech = list(TECH_MATERIAL = 6, TECH_ENGINEERING = 5) + materials = list(MAT_PLASTIC = 2000, MAT_GLASS = 2000, MAT_SILVER = 3000, MAT_GOLD = 1000) + build_path = /obj/item/weapon/firework_star/weather/storm + sort_string = "IFABD" + +/datum/design/item/firework_star/weather_light_snow + name = "weather - LIGHT SNOW" + desc = "A firework star, designed for use with launcher. Modifies current planetary weather effects. This one creates a light snowfall." + id = "fireworklightsnow" + req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 4) + materials = list(MAT_PLASTIC = 2000, MAT_GLASS = 2000, MAT_SILVER = 2000, MAT_LEAD = 2000) + build_path = /obj/item/weapon/firework_star/weather/light_snow + sort_string = "IFABE" + +/datum/design/item/firework_star/weather_snow + name = "weather - MODERATE SNOW" + desc = "A firework star, designed for use with launcher. Modifies current planetary weather effects. This one creates a moderate snowfall." + id = "fireworksnow" + req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 4) + materials = list(MAT_PLASTIC = 2000, MAT_GLASS = 2000, MAT_SILVER = 3000, MAT_LEAD = 2000) + build_path = /obj/item/weapon/firework_star/weather/snow + sort_string = "IFABF" + +/datum/design/item/firework_star/weather_blizzard + name = "weather - HEAVY SNOW" + desc = "A firework star, designed for use with launcher. Modifies current planetary weather effects. This one creates a blizzard." + id = "fireworkblizzard" + req_tech = list(TECH_MATERIAL = 6, TECH_ENGINEERING = 5) + materials = list(MAT_PLASTIC = 2000, MAT_GLASS = 2000, MAT_SILVER = 3000, MAT_LEAD = 3000) + build_path = /obj/item/weapon/firework_star/weather/blizzard + sort_string = "IFABG" + +/datum/design/item/firework_star/weather_hail + name = "weather - HAIL" + desc = "A firework star, designed for use with launcher. Modifies current planetary weather effects. This one creates a hailstorm. DANGEROUS." + id = "fireworkhail" + req_tech = list(TECH_MATERIAL = 6, TECH_ENGINEERING = 5, TECH_ILLEGAL = 2) + materials = list(MAT_PLASTIC = 2000, MAT_GLASS = 2000, MAT_SILVER = 3000, MAT_LEAD = 3000, MAT_PLASTEEL = 4000) + build_path = /obj/item/weapon/firework_star/weather/hail + sort_string = "IFABH" + +/datum/design/item/firework_star/weather_fallout + name = "weather - NUCLEAR" + desc = "A firework star, designed for use with launcher. Modifies current planetary weather effects. This one creates a heavy cloud of nuclear fallout. DANGEROUS." + id = "fireworkfallout" + req_tech = list(TECH_MATERIAL = 8, TECH_ENGINEERING = 6, TECH_ILLEGAL = 7) + materials = list(MAT_PLASTIC = 2000, MAT_GLASS = 2000, MAT_URANIUM = 12000) + build_path = /obj/item/weapon/firework_star/weather/fallout + sort_string = "IFABI" + +/datum/design/item/firework_star/weather_confetti + name = "weather - CONFETTI" + desc = "A firework star, designed for use with launcher. Modifies current planetary weather effects. This one clears the sky and rains colorful confetti from it." + id = "fireworkconfetti" + req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 4) + materials = list(MAT_PLASTIC = 10000, MAT_GLASS = 10000) + build_path = /obj/item/weapon/firework_star/weather/confetti + sort_string = "IFABJ" diff --git a/icons/effects/weather_vr.dmi b/icons/effects/weather_vr.dmi index a72ff3b7b1b3347c5a613ca83318abdb7c2dff8b..0d977a2f15b4a19b0d5a50882ba90b9d530fbcb1 100644 GIT binary patch literal 992 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRS6RScZN?cNllZ!G7N;32F7#J$% zwDxS|I%FW?`h3s&9b2*mf>~qlDQQkx__sYFNP5Fs75=65?-i8%ik2DA34VNKUM&A@ z%c>(WmyDV>-p}#04W1y_6YHGS^U~^6bXP@ZLP+`i)U_V1Q@ADCu1xqV!Y$z*qkJIcT%InDAr*7p-aQz4 z$3Ubtab{W&!<(gImsmn3GX=FqPx$W17?NxzGs*Zy!tcy4DtG@!Z*oYh>95JXC+VME z@kdm~_hJ9@Pl`6b_4eD@?OgZ&!7i&if((T$4l;}a?hHq$#JnR?w|?Dy{tf&7e2ua5 zdENc`*Xq}=-Y|UPXs}>X=ws+mW_Uy;X5J~wYWe2fGal`E@^tz4!iofT4#fz+I-irj zt>t{|m=b7-QK3v$NO@*%Mwb*k*U;N7SgT3_qS<<_pN0t=T)dUVc6kkaf^9 zPIk#}ArJPAr4#b38ny>ocVx2fnDtG+UR`#{sz=rhpGtiD%gP&8U-#KM`F=I~Lgtc3 zKpn4lGgx)pUCD5z>RIiTYxQz#FPmnacl2XjaLxF=zzYTUNb3_*ikI!=uI6y8*1MO~ z!k47ixcB_g=$;FXJ9zI1#$Vp^M`FK#S)ud`OY!~g51+JO@L+hMaDB=P1@-yNJ?7%| z$2w$N_%5u7l3mj2?ZCfg_wmTBRve!h*bVs$1pGyRAF^o>{LHYTsj`8$M8NtPV_yC9 z1*!S`pBd&R%Q2{(VU_?|G=tqhVqtTE^p57rhOQaxA1=FqtT5mQx^KIEvRs0|8Rn2B zcN{q!F1%CNqkmwHq)$ literal 468 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoja4BLB`&GO$wiq3C7Jno3=9=> zOpkBmI%FWg_Tc9`&AMBr9V_|twtIA?WZYMrkinFtYN=EEn@{Qfm#;he%>Q*`2c#EqHw_r@CK@pT*`YP%=ND^!1FSmAp)+OV&S}D#aqcY{tCA<^+TK zYZ1vik6T#pIQf}RHb{O^O?r?n0|O(Ur;B4q#hkZy9eJG`1y~PCHYwXQGL$GV_}BP$ z_v|W>te9Q$Y)|#GkCGYB)t{%&EBlxBJeXk(Lj>anrUcdlTn(ZO+6-Z&3EX|YdVa#( z>#pB-lco=gRktm_{clh{o}Tu->hxbd(w%~4O|wzyv2}U5aBc*x!VaFaG_~4Nu=iJyQJPFFU(5CZbzN2+>#ev-fKCp!Zj1GMQI4+Z;M zofmn)J}cU71B-vl(1iU7uE>L}lXCT`g?E~aIeqW^+9=N0lR0~qJR8ZlzOgbe6!Noh zW8p3j@kT|r5V2S+eqU1uE_v*zPaot)XI)vLJwPZC#o4$bq9PbHS!->`_OPAXcR^74m7=bV|K73R+-xze!7x*eE zYpqh2Fc;Wk%_a!lYet>PI|202t%>m5%`LHcg58wZENk3=Q%9l%e3E^lOxFXeN=f&= zrwKc$B=TbX%!(D52Pf8aXhi;@G%WL!keBJT!xKnl%7u;Wiuh>kzO^ZZP@}X$yy?j0Kij$;7)gU_cGL3>OEeps2joCE!P)vU+6{Y%J>#I ztLV76zA%N}Hq!5B8P+XOs;O;+vHZw6-j$Oym(G93ChnYKt(0|^*|+amwweM%9zCvL>RS>i8VX>h zam@QqZ2v#Z|GBDOwqWauN|;ltg4c1DkE;bEjfL2{YIP^&J6LSs+$g@BhdBF$X~a5T zJ1C=+esR7)aRld7I|8nxi6$xz+V|r|JHUtEY%Lq(gx6FOszPeA96>gj)u4oU0BR== zJ_{y8SI@Uv2Ik8BIC)&_i=E~ihD#)B=Y5=uUMvpPUY?Cbil84rcDI@F8m~X0PCPW_ zMB()<@0}x24;IM~>1nBUd@g6GpMPx_O5!?)VQIriBou$HGv%@*HJ`jy1TFX>5{x{t zd@$|9e^x+0S8^r~Qy z)E8vVRtyNX9UI+ma(`+dQ@0+L}hbh za%pgMX>V=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex6#a*U0*I5Sc+ z(=$pSoZ^zil2jm5DJQWsFF7N%$iP5}i!&v&s2C_{$ioVoe11V{9tjR6O}!zB<{Oe|emsPMUA+ZRG&Lu&5+tmH42`*z6l0002RNklap^nAWzZ3FJYehx$VF8l7oF7i+4l-xz<~5(1oNe2p5E;M1&07*qoM6N<$f`M(xBme*a literal 0 HcmV?d00001 diff --git a/maps/groundbase/gb-z2.dmm b/maps/groundbase/gb-z2.dmm index a5a10c1c5d..ca82cb206c 100644 --- a/maps/groundbase/gb-z2.dmm +++ b/maps/groundbase/gb-z2.dmm @@ -132,6 +132,25 @@ }, /turf/simulated/floor/tiled/white, /area/groundbase/medical/lobby) +<<<<<<< HEAD +======= +"av" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/alarm{ + dir = 1 + }, +/obj/structure/bed/chair/office/light{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/groundbase/science/robotics) +"aw" = ( +/obj/machinery/firework_launcher, +/turf/simulated/floor/tiled, +/area/groundbase/science/hall) +>>>>>>> 5dad1cf58a... Merge pull request #14245 from Heroman3003/firework-stuff "ax" = ( /obj/structure/closet/secure_closet/personal, /obj/item/weapon/towel/random, @@ -23017,7 +23036,7 @@ aB PR lw Vr -Vr +aw Bl ag ag diff --git a/maps/tether/tether-01-surface1.dmm b/maps/tether/tether-01-surface1.dmm index c632e6626f..5cf93fed90 100644 --- a/maps/tether/tether-01-surface1.dmm +++ b/maps/tether/tether-01-surface1.dmm @@ -9043,6 +9043,11 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_one_hall) +"aoR" = ( +/obj/machinery/light/small, +/obj/machinery/firework_launcher, +/turf/simulated/floor/tiled, +/area/rnd/hardstorage) "aoS" = ( /obj/structure/flora/ausbushes/ppflowers, /turf/simulated/floor/grass, @@ -33190,10 +33195,6 @@ /obj/effect/floor_decal/corner/red/border, /turf/simulated/floor/tiled, /area/tether/surfacebase/security/lowerhall) -"fna" = ( -/obj/machinery/light/small, -/turf/simulated/floor/tiled, -/area/rnd/hardstorage) "fpU" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/manifold/hidden/green, @@ -45294,6 +45295,116 @@ aad aad aad aad +<<<<<<< HEAD +======= +aah +aah +aah +aah +aah +aah +aah +aah +aah +aah +aah +bqI +pZb +rBG +mhu +xFG +bqI +txZ +uge +gCa +aXs +aXD +gCa +fCk +fCk +exW +bJz +lTn +aah +aah +aah +aah +aah +aah +aah +ahl +ahL +acV +adF +ahl +apj +apj +apj +apl +apl +apl +apl +apl +apj +apj +apj +apj +auK +avh +abm +abn +abn +abn +acx +afg +aoR +abm +aCm +akg +aDy +akj +aCV +aCV +szT +jSU +alW +amd +alW +ams +amy +amL +amL +amW +adn +adn +adn +aah +aah +aah +aah +aah +aah +aah +aah +aah +aah +aah +aah +aah +aah +aah +aah +aah +aah +aah +aah +aah +aah +aah +aah +aah +aah +>>>>>>> 5dad1cf58a... Merge pull request #14245 from Heroman3003/firework-stuff aad aad aad diff --git a/vorestation.dme b/vorestation.dme index 90330f2645..8befc3ef3d 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -2410,6 +2410,9 @@ #include "code\modules\examine\descriptions\weapons.dm" #include "code\modules\ext_scripts\irc.dm" #include "code\modules\ext_scripts\python.dm" +#include "code\modules\fireworks\firework_launcher.dm" +#include "code\modules\fireworks\firework_stars.dm" +#include "code\modules\fireworks\launcher_construction.dm" #include "code\modules\fishing\fishing.dm" #include "code\modules\fishing\fishing_net.dm" #include "code\modules\fishing\fishing_rod.dm" @@ -4027,6 +4030,7 @@ #include "code\modules\research\designs\bio_devices_vr.dm" #include "code\modules\research\designs\circuit_assembly.dm" #include "code\modules\research\designs\engineering.dm" +#include "code\modules\research\designs\firework_stars.dm" #include "code\modules\research\designs\HUDs.dm" #include "code\modules\research\designs\HUDs_vr.dm" #include "code\modules\research\designs\implants.dm"