From 43a5e42feb7116c86950045d3f619084a48c57ac Mon Sep 17 00:00:00 2001 From: Rhials Date: Thu, 1 Sep 2022 16:10:36 -0400 Subject: [PATCH] Stray Meteor event, five new special meteors, and another reason to build meteor shields (#69550) Adds the Stray Meteor random event, as well as a few new special meteors to be featured in it (as well as to meteor waves, but to a lesser degree). Other than these special meteors being a part of meteor waves, the meteor wave event itself is unchanged by this new event. A single meteor is thrown somewhere in the vicinity of the station, accompanied by a brief warning announcement. To make things more interesting, five new special meteor types have been created to accompany the original three (flaming/irradiated/tunguska). The special meteors have been added to the meteor wave pools, but have lesser weight than the standard meteors. Enough about that though... --- code/datums/helper_datums/teleport.dm | 1 + code/modules/events/stray_meteor.dm | 40 ++++++++ code/modules/meteors/meteors.dm | 136 +++++++++++++++++++++++++- code/modules/station_goals/shield.dm | 2 + icons/obj/meteor.dmi | Bin 11786 -> 15536 bytes tgstation.dme | 1 + 6 files changed, 175 insertions(+), 5 deletions(-) create mode 100644 code/modules/events/stray_meteor.dm diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index 8e7603714b9..ddfbbbb62c9 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -15,6 +15,7 @@ /obj/effect/wisp = FALSE, /obj/effect/mob_spawn = FALSE, /obj/effect/immovablerod = FALSE, + /obj/effect/meteor = FALSE, )) if(delete_atoms[teleatom.type]) qdel(teleatom) diff --git a/code/modules/events/stray_meteor.dm b/code/modules/events/stray_meteor.dm new file mode 100644 index 00000000000..00cac4cf082 --- /dev/null +++ b/code/modules/events/stray_meteor.dm @@ -0,0 +1,40 @@ +/datum/round_event_control/stray_meteor + name = "Stray Meteor" + typepath = /datum/round_event/stray_meteor + weight = 15 //Number subject to change based on how often meteors actually collide with the station + min_players = 15 + max_occurrences = 3 + earliest_start = 20 MINUTES + category = EVENT_CATEGORY_SPACE + description = "Throw a random meteor somewhere near the station." + ///The selected meteor type if chosen through admin setup. + var/chosen_meteor + +/datum/round_event_control/stray_meteor/admin_setup() + if(!check_rights(R_FUN)) + return + + var/list/meteor_list = list() + meteor_list += subtypesof(/obj/effect/meteor) + chosen_meteor = tgui_input_list(usr, "Too lazy for buildmode?","Throw meteor", meteor_list) + + +/datum/round_event/stray_meteor + announceWhen = 1 + fakeable = FALSE //Already faked by meteors that miss + +/datum/round_event/stray_meteor/start() + var/datum/round_event_control/stray_meteor/meteor_event = control + if(meteor_event.chosen_meteor) + var/chosen_meteor = meteor_event.chosen_meteor + var/list/passed_meteor = list() + passed_meteor[chosen_meteor] = 1 + spawn_meteor(passed_meteor) + else + spawn_meteor(GLOB.meteorsD) + +/datum/round_event/stray_meteor/announce(fake) + if(GLOB.meteor_list) + var/obj/effect/meteor/detected_meteor = pick(GLOB.meteor_list) //If we accidentally pick a meteor not spawned by the event, we're still technically not wrong + var/sensor_name = detected_meteor.signature + priority_announce("Our [sensor_name] sensors have detected an incoming signature approaching [GLOB.station_name]. Please brace for impact.", "Meteor Alert") diff --git a/code/modules/meteors/meteors.dm b/code/modules/meteors/meteors.dm index e8d2308f8e4..754e2ccb084 100644 --- a/code/modules/meteors/meteors.dm +++ b/code/modules/meteors/meteors.dm @@ -7,18 +7,24 @@ GLOBAL_VAR_INIT(meteor_wave_delay, 625) //minimum wait between waves in tenths o //Meteors probability of spawning during a given wave GLOBAL_LIST_INIT(meteors_normal, list(/obj/effect/meteor/dust=3, /obj/effect/meteor/medium=8, /obj/effect/meteor/big=3, \ - /obj/effect/meteor/flaming=1, /obj/effect/meteor/irradiated=3)) //for normal meteor event + /obj/effect/meteor/flaming=1, /obj/effect/meteor/irradiated=3, /obj/effect/meteor/carp=1, /obj/effect/meteor/bluespace=1, \ + /obj/effect/meteor/banana=1, /obj/effect/meteor/emp = 1)) //for normal meteor event -GLOBAL_LIST_INIT(meteors_threatening, list(/obj/effect/meteor/medium=4, /obj/effect/meteor/big=8, \ - /obj/effect/meteor/flaming=3, /obj/effect/meteor/irradiated=3)) //for threatening meteor event +GLOBAL_LIST_INIT(meteors_threatening, list(/obj/effect/meteor/medium=4, /obj/effect/meteor/big=8, /obj/effect/meteor/flaming=3, \ + /obj/effect/meteor/irradiated=3, /obj/effect/meteor/cluster=1, /obj/effect/meteor/carp=1, /obj/effect/meteor/bluespace=2, /obj/effect/meteor/emp = 2)) //for threatening meteor event GLOBAL_LIST_INIT(meteors_catastrophic, list(/obj/effect/meteor/medium=5, /obj/effect/meteor/big=75, \ - /obj/effect/meteor/flaming=10, /obj/effect/meteor/irradiated=10, /obj/effect/meteor/tunguska = 1)) //for catastrophic meteor event + /obj/effect/meteor/flaming=10, /obj/effect/meteor/irradiated=10, /obj/effect/meteor/cluster=8, /obj/effect/meteor/tunguska=1, \ + /obj/effect/meteor/carp=2, /obj/effect/meteor/bluespace=10, /obj/effect/meteor/emp = 8)) //for catastrophic meteor event GLOBAL_LIST_INIT(meteorsB, list(/obj/effect/meteor/meaty=5, /obj/effect/meteor/meaty/xeno=1)) //for meaty ore event GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust=1)) //for space dust event +GLOBAL_LIST_INIT(meteorsD, list(/obj/effect/meteor/medium=15, /obj/effect/meteor/big=10, \ + /obj/effect/meteor/flaming=25, /obj/effect/meteor/irradiated=30, /obj/effect/meteor/carp=25, /obj/effect/meteor/bluespace=30, \ + /obj/effect/meteor/banana=25, /obj/effect/meteor/meaty=10, /obj/effect/meteor/meaty/xeno=8, /obj/effect/meteor/emp = 30, \ + /obj/effect/meteor/cluster=20, /obj/effect/meteor/tunguska=1)) //for stray meteor event (bigger numbers for a bit finer weighting) /////////////////////////////// //Meteor spawning global procs @@ -115,6 +121,9 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust=1)) //for space dust eve ///Lifetime in seconds var/lifetime = DEFAULT_METEOR_LIFETIME + ///Used by Stray Meteor event to indicate meteor type (the type of sensor that "detected" it) in announcement + var/signature = "motion" + /obj/effect/meteor/Initialize(mapload, turf/target) . = ..() z_original = z @@ -264,12 +273,14 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust=1)) //for space dust eve //Flaming meteor /obj/effect/meteor/flaming name = "flaming meteor" + desc = "An veritable shooting star, both beautiful and frightening. You should probably keep your distance from this." icon_state = "flaming" hits = 5 heavy = TRUE meteorsound = 'sound/effects/bamf.ogg' meteordrop = list(/obj/item/stack/ore/plasma) threat = 20 + signature = "thermal" /obj/effect/meteor/flaming/meteor_effect() ..() @@ -278,11 +289,12 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust=1)) //for space dust eve //Radiation meteor /obj/effect/meteor/irradiated name = "glowing meteor" + desc = "An irradiated chunk of space rock. You could probably stop and appreciate its incandescent green glow, if it weren't moving so fast." icon_state = "glowing" heavy = TRUE meteordrop = list(/obj/item/stack/ore/uranium) threat = 15 - + signature = "radiation" /obj/effect/meteor/irradiated/meteor_effect() ..() @@ -290,6 +302,117 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust=1)) //for space dust eve new /obj/effect/decal/cleanable/greenglow(get_turf(src)) radiation_pulse(src, max_range = 3, threshold = RAD_MEDIUM_INSULATION, chance = 80) +//Cluster meteor +/obj/effect/meteor/cluster + name = "cluster meteor" + desc = "A cluster of densely packed rocks, with a volatile core. You should probably get out of the way." + icon_state = "sharp" + hits = 9 + heavy = TRUE + meteorsound = 'sound/effects/break_stone.ogg' + threat = 25 + signature = "ordnance" + ///Number of fragmentation meteors to be spawned + var/cluster_count = 8 + +/obj/effect/meteor/cluster/meteor_effect() + ..() + + var/start_turf = get_turf(src) + + while(cluster_count > 0) + var/startSide = pick(GLOB.cardinals) + var/turf/destination = spaceDebrisStartLoc(startSide, z) + new /obj/effect/meteor/cluster_fragment(start_turf, destination) + cluster_count-- + + explosion(src, heavy_impact_range = 2, light_impact_range = 3, flash_range = 4, adminlog = FALSE) + +/obj/effect/meteor/cluster_fragment + name = "cluster meteor fragment" + desc = "A fast-moving fragment of exploded cluster-rock." + icon_state = "dust" + +//frozen carp "meteor" +/obj/effect/meteor/carp + name = "frozen carp" + icon_state = "carp" + desc = "Am I glad he's frozen in there, and that we're out here." + hits = 4 + meteorsound = 'sound/effects/ethereal_revive_fail.ogg' + meteordrop = list(/mob/living/simple_animal/hostile/carp) + dropamt = 1 + threat = 5 + signature = "fishing and trawling" + +/obj/effect/meteor/carp/Initialize(mapload) + if(prob(2)) + meteordrop = list(/mob/living/simple_animal/hostile/carp/megacarp) //hehe + return ..() + +//bluespace meteor +/obj/effect/meteor/bluespace + name = "bluespace meteor" + desc = "A large geode containing bluespace dust at its core, hurtling through space. That's the stuff the crew are here to research. How convenient for them." + icon_state = "bluespace" + dropamt = 3 + hits = 12 + meteordrop = list(/obj/item/stack/ore/bluespace_crystal) + threat = 15 + signature = "bluespace flux" + +/obj/effect/meteor/bluespace/Bump() + ..() + if(prob(35)) + do_teleport(src, get_turf(src), 6, asoundin = 'sound/effects/phasein.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) + +/obj/effect/meteor/banana + name = "bananium meteor" + desc = "Maybe it's a chunk blasted off of the legendary Clown Planet... How annoying." + icon_state = "bananium" + dropamt = 4 + hits = 175 //Honks everything, including space tiles. Depending on the angle/how much stuff it hits, there's a fair chance that it will spare the station from the actual explosion + meteordrop = list(/obj/item/stack/ore/bananium) + meteorsound = 'sound/items/bikehorn.ogg' + threat = 15 + movement_type = PHASING + signature = "comedy" + +/obj/effect/meteor/banana/meteor_effect() + ..() + playsound(src, 'sound/items/AirHorn.ogg', 100, TRUE, -1) + for(var/atom/movable/object in view(4, get_turf(src))) + var/turf/throwtarget = get_edge_target_turf(get_turf(src), get_dir(get_turf(src), get_step_away(object, get_turf(src)))) + object.safe_throw_at(throwtarget, 5, 1, force = MOVE_FORCE_STRONG) + +/obj/effect/meteor/banana/ram_turf(turf/bumped) + for(var/mob/living/slipped in get_turf(bumped)) + slipped.slip(100, slipped.loc,- GALOSHES_DONT_HELP|SLIDE, 0, FALSE) + slipped.visible_message(span_warning("[src] honks [slipped] to the floor!"), span_userdanger("[src] harmlessly passes through you, knocking you over.")) + get_hit() + +/obj/effect/meteor/banana/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE) + ..() + return + +/obj/effect/meteor/emp + name = "electromagnetically charged meteor" + desc = "It radiates with captive energy, ready to be let loose upon the world." + icon_state = "bluespace" + hits = 6 + threat = 10 + signature = "electromagnetic interference" + +/obj/effect/meteor/emp/Move() + . = ..() + if(.) + new /obj/effect/temp_visual/impact_effect/ion(get_turf(src)) + +/obj/effect/meteor/emp/meteor_effect() + ..() + playsound(src, 'sound/weapons/zapbang.ogg', 100, TRUE, -1) + empulse(src, 3, 8) + //Meaty Ore /obj/effect/meteor/meaty name = "meaty ore" @@ -301,6 +424,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust=1)) //for space dust eve meteordrop = list(/obj/item/food/meat/slab/human, /obj/item/food/meat/slab/human/mutant, /obj/item/organ/internal/heart, /obj/item/organ/internal/lungs, /obj/item/organ/internal/tongue, /obj/item/organ/internal/appendix/) var/meteorgibs = /obj/effect/gibspawner/generic threat = 2 + signature = "culinary material" /obj/effect/meteor/meaty/Initialize(mapload) for(var/path in meteordrop) @@ -332,6 +456,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust=1)) //for space dust eve color = "#5EFF00" meteordrop = list(/obj/item/food/meat/slab/xeno, /obj/item/organ/internal/tongue/alien) meteorgibs = /obj/effect/gibspawner/xeno + signature = "exotic culinary material" /obj/effect/meteor/meaty/xeno/Initialize(mapload) meteordrop += subtypesof(/obj/item/organ/internal/alien) @@ -352,6 +477,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust=1)) //for space dust eve meteorsound = 'sound/effects/bamf.ogg' meteordrop = list(/obj/item/stack/ore/plasma) threat = 50 + signature = "armageddon" /obj/effect/meteor/tunguska/Move() . = ..() diff --git a/code/modules/station_goals/shield.dm b/code/modules/station_goals/shield.dm index dd0490e8882..6b68a07c222 100644 --- a/code/modules/station_goals/shield.dm +++ b/code/modules/station_goals/shield.dm @@ -180,6 +180,8 @@ // Update the weight of all meteor events for(var/datum/round_event_control/meteor_wave/meteors in SSevents.control) meteors.weight *= mod + for(var/datum/round_event_control/stray_meteor/stray_meteor in SSevents.control) + stray_meteor.weight *= mod /obj/machinery/satellite/meteor_shield/Destroy() . = ..() diff --git a/icons/obj/meteor.dmi b/icons/obj/meteor.dmi index 84faabcc18817abe79524e1abecb573f5a915db6..6ac1109bf4c1bf7fc8d2384005cfea4b07d06fc7 100644 GIT binary patch literal 15536 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 RkL*Gq?O_g{tv{k2jBnz literal 11786 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 diff --git a/tgstation.dme b/tgstation.dme index b6fdaaa91a6..6d083392fb0 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -2906,6 +2906,7 @@ #include "code\modules\events\spacevine.dm" #include "code\modules\events\spider_infestation.dm" #include "code\modules\events\stray_cargo.dm" +#include "code\modules\events\stray_meteor.dm" #include "code\modules\events\wisdomcow.dm" #include "code\modules\events\wormholes.dm" #include "code\modules\events\holiday\halloween.dm"