From 66a169fa1af497499b3ea284458b44bed7f24bdf Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Sat, 20 Nov 2021 03:03:12 -0500 Subject: [PATCH] Updates Meteors (#17138) * Updates Meteors * nitpicks --- code/game/gamemodes/meteor/meteors.dm | 275 +++++++++++++++----------- code/modules/events/dust.dm | 2 +- icons/obj/meteor.dmi | Bin 4771 -> 11786 bytes icons/obj/meteor_spooky.dmi | Bin 0 -> 860 bytes 4 files changed, 164 insertions(+), 113 deletions(-) create mode 100644 icons/obj/meteor_spooky.dmi diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index d156c97266b..ff62b7495f9 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -1,23 +1,27 @@ +#define DEFAULT_METEOR_LIFETIME 3 MINUTES +#define MAP_EDGE_PAD 5 + //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 +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 -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)) //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 +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 + +GLOBAL_LIST_INIT(meteors_gore, list(/obj/effect/meteor/meaty = 5, /obj/effect/meteor/meaty/xeno = 1)) //for meaty ore event GLOBAL_LIST_INIT(meteors_dust, list(/obj/effect/meteor/dust)) //for space dust event -GLOBAL_LIST_INIT(meteors_gore, list(/obj/effect/meteor/gore)) //Meaty Gore - GLOBAL_LIST_INIT(meteors_ops, list(/obj/effect/meteor/goreops)) //Meaty Ops /////////////////////////////// //Meteor spawning global procs /////////////////////////////// + /proc/spawn_meteors(number = 10, list/meteortypes) for(var/i = 0; i < number; i++) spawn_meteor(meteortypes) @@ -25,86 +29,82 @@ GLOBAL_LIST_INIT(meteors_ops, list(/obj/effect/meteor/goreops)) //Meaty Ops /proc/spawn_meteor(list/meteortypes) var/turf/pickedstart var/turf/pickedgoal - var/max_i = 10//number of tries to spawn meteor. - while(!istype(pickedstart, /turf/space)) + var/max_i = 10 //number of tries to spawn meteor. + while(!isspaceturf(pickedstart)) var/startSide = pick(GLOB.cardinal) - pickedstart = spaceDebrisStartLoc(startSide, level_name_to_num(MAIN_STATION)) - pickedgoal = spaceDebrisFinishLoc(startSide, level_name_to_num(MAIN_STATION)) + var/startZ = level_name_to_num(MAIN_STATION) + pickedstart = spaceDebrisStartLoc(startSide, startZ) + pickedgoal = spaceDebrisFinishLoc(startSide, startZ) max_i-- - if(max_i<=0) + if(max_i <= 0) return var/Me = pickweight(meteortypes) - var/obj/effect/meteor/M = new Me(pickedstart) + var/obj/effect/meteor/M = new Me(pickedstart, pickedgoal) M.dest = pickedgoal - M.z_original = level_name_to_num(MAIN_STATION) - spawn(0) - walk_towards(M, M.dest, 1) - return /proc/spaceDebrisStartLoc(startSide, Z) var/starty var/startx switch(startSide) if(NORTH) - starty = world.maxy-(TRANSITIONEDGE+1) - startx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1)) + starty = world.maxy-(TRANSITIONEDGE + MAP_EDGE_PAD) + startx = rand((TRANSITIONEDGE + MAP_EDGE_PAD), world.maxx-(TRANSITIONEDGE + MAP_EDGE_PAD)) if(EAST) - starty = rand((TRANSITIONEDGE+1),world.maxy-(TRANSITIONEDGE+1)) - startx = world.maxx-(TRANSITIONEDGE+1) + starty = rand((TRANSITIONEDGE + MAP_EDGE_PAD),world.maxy-(TRANSITIONEDGE + MAP_EDGE_PAD)) + startx = world.maxx-(TRANSITIONEDGE + MAP_EDGE_PAD) if(SOUTH) - starty = (TRANSITIONEDGE+1) - startx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1)) + starty = (TRANSITIONEDGE + MAP_EDGE_PAD) + startx = rand((TRANSITIONEDGE + MAP_EDGE_PAD), world.maxx-(TRANSITIONEDGE + MAP_EDGE_PAD)) if(WEST) - starty = rand((TRANSITIONEDGE+1), world.maxy-(TRANSITIONEDGE+1)) - startx = (TRANSITIONEDGE+1) - var/turf/T = locate(startx, starty, Z) - return T + starty = rand((TRANSITIONEDGE + MAP_EDGE_PAD), world.maxy-(TRANSITIONEDGE + MAP_EDGE_PAD)) + startx = (TRANSITIONEDGE + MAP_EDGE_PAD) + . = locate(startx, starty, Z) /proc/spaceDebrisFinishLoc(startSide, Z) var/endy var/endx switch(startSide) if(NORTH) - endy = TRANSITIONEDGE - endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE) + endy = (TRANSITIONEDGE + MAP_EDGE_PAD) + endx = rand((TRANSITIONEDGE + MAP_EDGE_PAD), world.maxx-(TRANSITIONEDGE + MAP_EDGE_PAD)) if(EAST) - endy = rand(TRANSITIONEDGE, world.maxy-TRANSITIONEDGE) - endx = TRANSITIONEDGE + endy = rand((TRANSITIONEDGE + MAP_EDGE_PAD), world.maxy-(TRANSITIONEDGE + MAP_EDGE_PAD)) + endx = (TRANSITIONEDGE + MAP_EDGE_PAD) if(SOUTH) - endy = world.maxy-TRANSITIONEDGE - endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE) + endy = world.maxy-(TRANSITIONEDGE + MAP_EDGE_PAD) + endx = rand((TRANSITIONEDGE + MAP_EDGE_PAD), world.maxx-(TRANSITIONEDGE + MAP_EDGE_PAD)) if(WEST) - endy = rand(TRANSITIONEDGE,world.maxy-TRANSITIONEDGE) - endx = world.maxx-TRANSITIONEDGE - var/turf/T = locate(endx, endy, Z) - return T + endy = rand((TRANSITIONEDGE + MAP_EDGE_PAD),world.maxy-(TRANSITIONEDGE + MAP_EDGE_PAD)) + endx = world.maxx-(TRANSITIONEDGE + MAP_EDGE_PAD) + . = locate(endx, endy, Z) /////////////////////// //The meteor effect ////////////////////// /obj/effect/meteor - name = "the concept of meteor" + name = "\proper the concept of meteor" desc = "You should probably run instead of gawking at this." icon = 'icons/obj/meteor.dmi' icon_state = "small" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE var/hits = 4 - var/hitpwr = 2 //Level of ex_act to be called on hit. + var/hitpwr = EXPLODE_HEAVY //Level of ex_act to be called on hit. var/dest pass_flags = PASSTABLE - var/heavy = 0 + var/heavy = FALSE var/meteorsound = 'sound/effects/meteorimpact.ogg' - var/z_original = 1 - - var/meteordrop = /obj/item/stack/ore/iron + var/z_original + var/lifetime = DEFAULT_METEOR_LIFETIME + var/timerid = null + var/list/meteordrop = list(/obj/item/stack/ore/iron) var/dropamt = 2 /obj/effect/meteor/Move() if(z != z_original || loc == dest) qdel(src) - return + return FALSE . = ..() //process movement... @@ -112,35 +112,40 @@ GLOBAL_LIST_INIT(meteors_ops, list(/obj/effect/meteor/goreops)) //Meaty Ops var/turf/T = get_turf(loc) ram_turf(T) - if(prob(10) && !istype(T, /turf/space))//randomly takes a 'hit' from ramming + if(prob(10) && !isspaceturf(T))//randomly takes a 'hit' from ramming get_hit() - return . - /obj/effect/meteor/Destroy() + if(timerid) + deltimer(timerid) GLOB.meteor_list -= src - walk(src,0) //this cancels the walk_towards() proc + walk(src, 0) //this cancels the walk_towards() proc return ..() -/obj/effect/meteor/New() - ..() +/obj/effect/meteor/Initialize(mapload, target) + . = ..() + z_original = z GLOB.meteor_list += src SpinAnimation() + timerid = QDEL_IN(src, lifetime) + chase_target(target) /obj/effect/meteor/Bump(atom/A) if(A) ram_turf(get_turf(A)) - playsound(src.loc, meteorsound, 40, 1) + playsound(loc, meteorsound, 40, TRUE) get_hit() -/obj/effect/meteor/CanPass(atom/movable/mover, turf/target, height=0) - return istype(mover, /obj/effect/meteor) ? 1 : ..() - /obj/effect/meteor/proc/ram_turf(turf/T) //first bust whatever is in the turf - for(var/atom/A in T) - if(A != src) - A.ex_act(hitpwr) + for(var/thing in T) + var/atom/A = thing + if(thing == src) + continue + if(isliving(thing)) + var/mob/living/living_thing = thing + living_thing.visible_message("[src] slams into [living_thing].", "[src] slams into you!") + A.ex_act(hitpwr) //then, ram the turf if it still exists if(T) @@ -152,14 +157,14 @@ GLOBAL_LIST_INIT(meteors_ops, list(/obj/effect/meteor/goreops)) //Meaty Ops hits-- if(hits <= 0) make_debris() - meteor_effect(heavy) + meteor_effect() qdel(src) /obj/effect/meteor/ex_act() return -/obj/effect/meteor/attackby(obj/item/W as obj, mob/user as mob, params) - if(istype(W, /obj/item/pickaxe)) +/obj/effect/meteor/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/pickaxe)) make_debris() qdel(src) return @@ -167,23 +172,27 @@ GLOBAL_LIST_INIT(meteors_ops, list(/obj/effect/meteor/goreops)) //Meaty Ops /obj/effect/meteor/proc/make_debris() for(var/throws = dropamt, throws > 0, throws--) - var/obj/item/O = new meteordrop(get_turf(src)) - O.throw_at(dest, 5, 10) + var/thing_to_spawn = pick(meteordrop) + new thing_to_spawn(get_turf(src)) -/obj/effect/meteor/proc/meteor_effect(sound=1) - if(sound) +/obj/effect/meteor/proc/chase_target(atom/chasing, delay = 1) + set waitfor = FALSE + if(chasing) + walk_towards(src, chasing, delay) + +/obj/effect/meteor/proc/meteor_effect() + if(heavy) var/sound/meteor_sound = sound(meteorsound) var/random_frequency = get_rand_frequency() for(var/P in GLOB.player_list) var/mob/M = P var/turf/T = get_turf(M) - if(!T || T.z != src.z) + if(!T || T.z != z) continue - var/dist = get_dist(M.loc, src.loc) - if(prob(50)) - shake_camera(M, dist > 20 ? 3 : 5, dist > 20 ? 1 : 3) - M.playsound_local(src.loc, null, 50, 1, random_frequency, 10, S = meteor_sound) + var/dist = get_dist(M.loc, loc) + shake_camera(M, dist > 20 ? 2 : 4, dist > 20 ? 1 : 3) + M.playsound_local(loc, null, 50, TRUE, random_frequency, 10, S = meteor_sound) /////////////////////// //Meteor types @@ -195,9 +204,9 @@ GLOBAL_LIST_INIT(meteors_ops, list(/obj/effect/meteor/goreops)) //Meaty Ops icon_state = "dust" pass_flags = PASSTABLE | PASSGRILLE hits = 1 - hitpwr = 3 - meteorsound = 'sound/weapons/tap.ogg' - meteordrop = /obj/item/stack/ore/glass + hitpwr = EXPLODE_LIGHT + meteorsound = 'sound/weapons/gunshots/gunshot_smg.ogg' + meteordrop = list(/obj/item/stack/ore/glass) //Medium-sized /obj/effect/meteor/medium @@ -205,45 +214,45 @@ GLOBAL_LIST_INIT(meteors_ops, list(/obj/effect/meteor/goreops)) //Meaty Ops dropamt = 3 /obj/effect/meteor/medium/meteor_effect() - ..(heavy) - explosion(src.loc, 0, 1, 2, 3, 0) + ..() + explosion(loc, 0, 1, 2, 3, 0) //Large-sized /obj/effect/meteor/big - name = "large meteor" + name = "big meteor" icon_state = "large" hits = 6 - heavy = 1 + heavy = TRUE dropamt = 4 /obj/effect/meteor/big/meteor_effect() - ..(heavy) - explosion(src.loc, 1, 2, 3, 4, 0) + ..() + explosion(loc, 1, 2, 3, 4, 0) //Flaming meteor /obj/effect/meteor/flaming name = "flaming meteor" icon_state = "flaming" hits = 5 - heavy = 1 + heavy = TRUE meteorsound = 'sound/effects/bamf.ogg' - meteordrop = /obj/item/stack/ore/plasma + meteordrop = list(/obj/item/stack/ore/plasma) /obj/effect/meteor/flaming/meteor_effect() - ..(heavy) - explosion(src.loc, 1, 2, 3, 4, 0, 0, flame_range = 5) + ..() + explosion(loc, 1, 2, 3, 4, 0, 0, 5) //Radiation meteor /obj/effect/meteor/irradiated name = "glowing meteor" icon_state = "glowing" - heavy = 1 - meteordrop = /obj/item/stack/ore/uranium + heavy = TRUE + meteordrop = list(/obj/item/stack/ore/uranium) /obj/effect/meteor/irradiated/meteor_effect() - ..(heavy) - explosion(src.loc, 0, 0, 4, 3, 0) + ..() + explosion(loc, 0, 0, 4, 3, 0) new /obj/effect/decal/cleanable/greenglow(get_turf(src)) radiation_pulse(src, 500) @@ -251,56 +260,74 @@ GLOBAL_LIST_INIT(meteors_ops, list(/obj/effect/meteor/goreops)) //Meaty Ops /obj/effect/meteor/tunguska name = "tunguska meteor" icon_state = "flaming" - desc = "Your life briefly passes before your eyes the moment you lay them on this monstruosity." + desc = "Your life briefly passes before your eyes the moment you lay them on this monstrosity." hits = 30 - hitpwr = 1 - heavy = 1 + hitpwr = EXPLODE_DEVASTATE + heavy = TRUE meteorsound = 'sound/effects/bamf.ogg' - meteordrop = /obj/item/stack/ore/plasma + meteordrop = list(/obj/item/stack/ore/plasma) + +/obj/effect/meteor/tunguska/Move() + . = ..() + if(.) + new /obj/effect/temp_visual/revenant(get_turf(src)) /obj/effect/meteor/tunguska/meteor_effect() - ..(heavy) - explosion(src.loc, 5, 10, 15, 20, 0) + ..() + explosion(loc, 5, 10, 15, 20, 0) /obj/effect/meteor/tunguska/Bump() ..() if(prob(20)) - explosion(src.loc,2,4,6,8) + explosion(loc, 2, 4, 6, 8) - -//Gore -/obj/effect/meteor/gore - name = "Oraganic Debris" - icon = 'icons/mob/human.dmi' - icon_state = "body_m_s" - hits = 1 - hitpwr = 0 +//Meaty Ore +/obj/effect/meteor/meaty + name = "meaty ore" + icon_state = "meateor" + desc = "Just... don't think too hard about where this thing came from." + hits = 2 + heavy = TRUE meteorsound = 'sound/effects/blobattack.ogg' - meteordrop = /obj/item/reagent_containers/food/snacks/meat + meteordrop = list(/obj/item/reagent_containers/food/snacks/meat/human, /obj/item/organ/internal/heart, /obj/item/organ/internal/lungs, /obj/item/organ/internal/appendix) var/meteorgibs = /obj/effect/gibspawner/generic -/obj/effect/meteor/gore/make_debris() +/obj/effect/meteor/meaty/make_debris() ..() new meteorgibs(get_turf(src)) -/obj/effect/meteor/gore/ram_turf(turf/T) - if(!istype(T, /turf/space)) +/obj/effect/meteor/meaty/ram_turf(turf/T) + if(!isspaceturf(T)) new /obj/effect/decal/cleanable/blood(T) -/obj/effect/meteor/gore/Bump(atom/A) +/obj/effect/meteor/meaty/Bump(atom/A) A.ex_act(hitpwr) get_hit() +//Meaty Ore Xeno edition +/obj/effect/meteor/meaty/xeno + color = "#5EFF00" + meteordrop = list(/obj/item/reagent_containers/food/snacks/monstermeat/xenomeat) + meteorgibs = /obj/effect/gibspawner/xeno + +/obj/effect/meteor/meaty/xeno/Initialize(mapload, target) + meteordrop += subtypesof(/obj/item/organ/internal/xenos) + return ..() + +/obj/effect/meteor/meaty/xeno/ram_turf(turf/T) + if(!isspaceturf(T)) + new /obj/effect/decal/cleanable/blood/xeno(T) + //Meteor Ops /obj/effect/meteor/goreops name = "MeteorOps" icon = 'icons/mob/animal.dmi' icon_state = "syndicaterangedpsace" hits = 10 - hitpwr = 1 + hitpwr = EXPLODE_DEVASTATE meteorsound = 'sound/effects/blobattack.ogg' - meteordrop = /obj/item/reagent_containers/food/snacks/meat + meteordrop = list(/obj/item/reagent_containers/food/snacks/meat) var/meteorgibs = /obj/effect/gibspawner/generic /obj/effect/meteor/goreops/make_debris() @@ -309,9 +336,33 @@ GLOBAL_LIST_INIT(meteors_ops, list(/obj/effect/meteor/goreops)) //Meaty Ops /obj/effect/meteor/goreops/ram_turf(turf/T) - if(!istype(T, /turf/space)) + if(!isspaceturf(T)) new /obj/effect/decal/cleanable/blood(T) /obj/effect/meteor/goreops/Bump(atom/A) A.ex_act(hitpwr) get_hit() + +////////////////////////// +//Spookoween meteors +///////////////////////// + +GLOBAL_LIST_INIT(meteorsSPOOKY, list(/obj/effect/meteor/pumpkin)) + +/obj/effect/meteor/pumpkin + name = "PUMPKING" + desc = "THE PUMPKING'S COMING!" + icon = 'icons/obj/meteor_spooky.dmi' + icon_state = "pumpkin" + hits = 10 + heavy = TRUE + dropamt = 1 + meteordrop = list(/obj/item/clothing/head/hardhat/pumpkinhead, /obj/item/reagent_containers/food/snacks/grown/pumpkin) + +/obj/effect/meteor/pumpkin/Initialize(mapload, target) + . = ..() + meteorsound = pick('sound/hallucinations/im_here1.ogg','sound/hallucinations/im_here2.ogg') + +////////////////////////// +#undef DEFAULT_METEOR_LIFETIME +#undef MAP_EDGE_PAD diff --git a/code/modules/events/dust.dm b/code/modules/events/dust.dm index 4654a09ba72..596e3e31b5a 100644 --- a/code/modules/events/dust.dm +++ b/code/modules/events/dust.dm @@ -12,7 +12,7 @@ name = "Space Dust" desc = "Dust in space." icon = 'icons/obj/meteor.dmi' - icon_state = "space_dust" + icon_state = "dust" density = 1 anchored = 1 var/strength = 2 //ex_act severity number diff --git a/icons/obj/meteor.dmi b/icons/obj/meteor.dmi index 83a0a98a49a10e4049c64ab8bc6c60f76f503855..84faabcc18817abe79524e1abecb573f5a915db6 100644 GIT binary patch literal 11786 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 literal 4771 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 diff --git a/icons/obj/meteor_spooky.dmi b/icons/obj/meteor_spooky.dmi new file mode 100644 index 0000000000000000000000000000000000000000..287d5b47bd0f72686e1737de311a3761bdf75901 GIT binary patch literal 860 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvE8Azrw%`pX1P60k4t_Kbr*m_|_$|S$(ds}{A zZ~uML?B{BYuiN~8ovZwP+WhCP;9t8#ejZF&qc3!Ny3YUC&Oder9ZHmcHi_-q_JEx} zlE?bBRx3=K0W^)VB*-tA!Qt7BG$1FZDkP%BCAB!YD6^m>Ge3`kp<+&OSV2+g_bFNHaeCLNg+q7b}tfys6S zYh(Y;Ze!KWD;ZS{e>PY@^^lg?E$>ij-|(uA;p$%ozbp0YZF)Kz9Vf85h4~`mC83HUHC^C)Q8@>U+h^)Xdu4Sg!&M2L^@&^@gwewDOas7<@ZT?T-FR zf8DvVSMca>MzCzd{2z0^8}{;=s9vkl_$m2~>4ykdoZ*4Kg5Jvj!w)N;1V3^<_=l%# zDf5LHOb|Jh{wZajF8Y1=vOiSK3#Ui#R8dkN<6-k3k#h72Nz zfZ?uO?{b%oVU;;Uz+T3NSG){=-2R)qu6*D8_sNd~f4^N+g*b1+%J6O}{dFC7z8~v1 zyuF%VDhqL4f_cN&bJvU`diPc-t=nPve*5$wld?0AfH*LfImeG(!RnUNX)?SuNJ*k6C|K&&~yb`m29)ZhJQ XJDj7SmA2c-5Twe})z4*}Q$iB}_&#m5 literal 0 HcmV?d00001