diff --git a/code/game/objects/effects/anomalies.dm b/code/game/objects/effects/anomalies.dm index b96937bfb9f..903ca6910ea 100644 --- a/code/game/objects/effects/anomalies.dm +++ b/code/game/objects/effects/anomalies.dm @@ -3,11 +3,12 @@ /obj/effect/anomaly name = "anomaly" icon = 'icons/effects/effects.dmi' - desc = "A mysterious anomaly seen in the region of space that the station orbits." + desc = "A mysterious anomaly, seen commonly only in the region of space that the station orbits..." icon_state = "bhole3" unacidable = 1 density = 0 anchored = 1 + luminosity = 3 var/obj/item/device/assembly/signaler/anomaly/aSignal = null /obj/effect/anomaly/New() @@ -45,7 +46,7 @@ density = 1 var/boing = 0 -obj/effect/anomaly/grav/New() +/obj/effect/anomaly/grav/New() ..() aSignal.origin_tech = "magnets=5;powerstorage=4" @@ -77,25 +78,42 @@ obj/effect/anomaly/grav/New() ///////////////////// -obj/effect/anomaly/flux +/obj/effect/anomaly/flux name = "flux wave anomaly" - icon_state = "electricity" + icon_state = "electricity2" -obj/effect/anomaly/flux/New() +/obj/effect/anomaly/flux/New() ..() aSignal.origin_tech = "powerstorage=5;programming=3;plasmatech=2" ///////////////////// -obj/effect/anomaly/pyro +/obj/effect/anomaly/bluespace + name = "bluespace anomaly" + icon = 'icons/obj/projectiles.dmi' + icon_state = "bluespace" + density = 1 + +/obj/effect/anomaly/bluespace/New() + ..() + aSignal.origin_tech = "bluespace=5;magnets=3;powerstorage=2" + +/obj/effect/anomaly/bluespace/Bumped(atom/A) + if(isliving(A)) + do_teleport(A, locate(A.x, A.y, A.z), 10) + return + +///////////////////// + +/obj/effect/anomaly/pyro name = "pyroclastic anomaly" icon_state = "mustard" -obj/effect/anomaly/pyro/New() +/obj/effect/anomaly/pyro/New() ..() aSignal.origin_tech = "plasmatech=5;powerstorage=3;biotech=3" -obj/effect/anomaly/pyro/anomalyEffect() +/obj/effect/anomaly/pyro/anomalyEffect() ..() var/turf/simulated/T = get_turf(src) if(istype(T)) @@ -107,9 +125,8 @@ obj/effect/anomaly/pyro/anomalyEffect() name = "vortex anomaly" icon_state = "bhole3" desc = "That's a nice station you have there. It'd be a shame if something happened to it." -// var/blow = 0 -obj/effect/anomaly/bhole/New() +/obj/effect/anomaly/bhole/New() ..() aSignal.origin_tech = "materials=5;combat=4;engineering=3" @@ -119,21 +136,18 @@ obj/effect/anomaly/bhole/New() del(src) return - //blow = 3 + grav(rand(0,3), rand(2,3), 50, 25) //Throwing stuff around! for(var/obj/O in orange(1,src)) if(!O.anchored) - // var/atom/target = get_edge_target_turf(O, get_dir(src, get_step_away(O, src))) - var/mob/living/target = locate() in view(7,src) + var/mob/living/target = locate() in view(5,src) if(!target) - return 0 - O.throw_at(target, 6, 10) - // blow-- + return + O.throw_at(target, 5, 10) + return else - O.ex_act(1) - - grav(rand(0,3), rand(2,3), 50, 25)//10, 75 // 0,25 + O.ex_act(2) /obj/effect/anomaly/bhole/proc/grav(var/r, var/ex_act_force, var/pull_chance, var/turf_removal_chance) for(var/t = -r, t < r, t++) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index b9995eb11d9..b8a6fca011e 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -436,14 +436,14 @@ var/global/floorIsLava = 0 Spawn a wave of meteors (aka lagocolyptic shower)
Spawn a vortex anomaly
Spawn a gravitational anomaly
- Spawn wormholes
Spawn a pyroclastic anomaly
Spawn a flux wave anomaly
+ Spawn a bluespace anomaly
+ Spawn wormholes
Spawn blob
Trigger an Alien infestation
Spawn an Alien silently
Trigger a Spider infestation
- Trigger a Bluespace Anomaly
Send in a space ninja
Trigger an Carp migration
Irradiate the station
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index dfed8fb4544..d54d2821a50 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1718,7 +1718,7 @@ feedback_add_details("admin_secrets_fun_used","SL") message_admins("[key_name_admin(usr)] has spawned spiders", 1) if("bluespaceanomaly") - E = new /datum/round_event/bluespace_anomaly() + E = new /datum/round_event/anomaly_bluespace() feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","BA") message_admins("[key_name_admin(usr)] has triggered a bluespace anomaly", 1) diff --git a/code/modules/events/anomaly_bluespace.dm b/code/modules/events/anomaly_bluespace.dm new file mode 100644 index 00000000000..0fc1ff7a97c --- /dev/null +++ b/code/modules/events/anomaly_bluespace.dm @@ -0,0 +1,111 @@ +/datum/round_event_control/anomaly_bluespace + name = "Bluespace Anomaly" + typepath = /datum/round_event/anomaly_bluespace + max_occurrences = 1 + weight = 5 + +/datum/round_event/anomaly_bluespace + startWhen = 3 + announceWhen = 10 + endWhen = 55 + + var/area/impact_area + var/obj/effect/anomaly/bluespace/newblue + + +/datum/round_event/anomaly_bluespace/setup() + var/list/safe_areas = list( + /area/turret_protected/ai, + /area/turret_protected/ai_upload, + /area/engine, + /area/solar, + /area/holodeck, + /area/shuttle/arrival, + /area/shuttle/escape/station, + /area/shuttle/escape_pod1/station, + /area/shuttle/escape_pod2/station, + /area/shuttle/escape_pod3/station, + /area/shuttle/escape_pod5/station, + /area/shuttle/mining/station, + /area/shuttle/transport1/station, + /area/shuttle/specops/station) + + //These are needed because /area/engine has to be removed from the list, but we still want these areas to get fucked up. + var/list/danger_areas = list( + /area/engine/break_room, + /area/engine/chiefs_office) + + + impact_area = locate(pick((the_station_areas - safe_areas) + danger_areas)) //need to locate() as it's just a list of paths. + + +/datum/round_event/anomaly_bluespace/announce() + command_alert("Unstable bluespace anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert") + + +/datum/round_event/anomaly_bluespace/start() + var/turf/T = pick(get_area_turfs(impact_area)) + if(T) + newblue = new /obj/effect/anomaly/bluespace(T.loc) + +/datum/round_event/anomaly_bluespace/tick() + if(!newblue) + kill() + return + +/datum/round_event/anomaly_bluespace/end() + if(newblue) + var/turf/T = pick(get_area_turfs(impact_area)) + if(T) + // Calculate new position (searches through beacons in world) + var/obj/item/device/radio/beacon/chosen + var/list/possible = list() + for(var/obj/item/device/radio/beacon/W in world) + possible += W + + if(possible.len > 0) + chosen = pick(possible) + + if(chosen) + // Calculate previous position for transition + + var/turf/FROM = T // the turf of origin we're travelling FROM + var/turf/TO = get_turf(chosen) // the turf of origin we're travelling TO + + playsound(TO, 'sound/effects/phasein.ogg', 100, 1) + + var/list/flashers = list() + for(var/mob/living/carbon/human/M in viewers(TO, null)) + if(M:eyecheck() <= 0) + flick("e_flash", M.flash) // flash dose faggots + flashers += M + + var/y_distance = TO.y - FROM.y + var/x_distance = TO.x - FROM.x + for (var/atom/movable/A in range(12, FROM )) // iterate thru list of mobs in the area + if(istype(A, /obj/item/device/radio/beacon)) continue // don't teleport beacons because that's just insanely stupid + if(A.anchored && istype(A, /obj/machinery)) continue + if(istype(A, /obj/structure/disposalpipe )) continue + if(istype(A, /obj/structure/cable )) continue + + var/turf/newloc = locate(A.x + x_distance, A.y + y_distance, TO.z) // calculate the new place + if(!A.Move(newloc)) // if the atom, for some reason, can't move, FORCE them to move! :) We try Move() first to invoke any movement-related checks the atom needs to perform after moving + A.loc = locate(A.x + x_distance, A.y + y_distance, TO.z) + + command_alert("Massive bluespace translocation detected.", "Anomaly Alert") + + spawn() + if(ismob(A) && !(A in flashers)) // don't flash if we're already doing an effect + var/mob/M = A + if(M.client) + var/obj/blueeffect = new /obj(src) + blueeffect.screen_loc = "WEST,SOUTH to EAST,NORTH" + blueeffect.icon = 'icons/effects/effects.dmi' + blueeffect.icon_state = "shieldsparkles" + blueeffect.layer = 17 + blueeffect.mouse_opacity = 0 + M.client.screen += blueeffect + sleep(20) + M.client.screen -= blueeffect + del(blueeffect) + del(newblue) \ No newline at end of file diff --git a/code/modules/events/anomaly_flux.dm b/code/modules/events/anomaly_flux.dm index d24937e7e83..f08e12d3414 100644 --- a/code/modules/events/anomaly_flux.dm +++ b/code/modules/events/anomaly_flux.dm @@ -5,7 +5,7 @@ weight = 15 /datum/round_event/anomaly_flux - startWhen = 5 + startWhen = 3 announceWhen = 20 endWhen = 60 diff --git a/code/modules/events/anomaly_grav.dm b/code/modules/events/anomaly_grav.dm index fb8576d16bd..b4131ebdac8 100644 --- a/code/modules/events/anomaly_grav.dm +++ b/code/modules/events/anomaly_grav.dm @@ -5,15 +5,15 @@ weight = 15 /datum/round_event/anomaly_grav - startWhen = 5 + startWhen = 3 announceWhen = 20 - endWhen = 100 + endWhen = 50 var/area/impact_area var/obj/effect/anomaly/grav/newgrav -/datum/round_event/anomaly_grav/setup()//TODO: Make this location stuff into a helper proc to be used in other events. +/datum/round_event/anomaly_grav/setup() var/list/safe_areas = list( /area/turret_protected/ai, /area/turret_protected/ai_upload, diff --git a/code/modules/events/anomaly_pyro.dm b/code/modules/events/anomaly_pyro.dm index b979689080d..aea48f651b3 100644 --- a/code/modules/events/anomaly_pyro.dm +++ b/code/modules/events/anomaly_pyro.dm @@ -5,7 +5,7 @@ weight = 15 /datum/round_event/anomaly_pyro - startWhen = 5 + startWhen = 10 announceWhen = 3 endWhen = 70 diff --git a/code/modules/events/anomaly_vortex.dm b/code/modules/events/anomaly_vortex.dm index f983eefe61a..1bd6e7e75e6 100644 --- a/code/modules/events/anomaly_vortex.dm +++ b/code/modules/events/anomaly_vortex.dm @@ -7,14 +7,13 @@ /datum/round_event/anomaly_vortex startWhen = 10 announceWhen = 3 - endWhen = 70 + endWhen = 80 var/area/impact_area var/obj/effect/anomaly/bhole/vortex /datum/round_event/anomaly_vortex/setup() -// endWhen = rand(20, 30) var/list/safe_areas = list( /area/turret_protected/ai, /area/turret_protected/ai_upload, diff --git a/code/modules/events/bluespaceanomaly.dm b/code/modules/events/bluespaceanomaly.dm deleted file mode 100644 index a2956717d2b..00000000000 --- a/code/modules/events/bluespaceanomaly.dm +++ /dev/null @@ -1,94 +0,0 @@ -/datum/round_event_control/bluespace_anomaly - name = "Bluespace Anomaly" - typepath = /datum/round_event/bluespace_anomaly - weight = 5 - max_occurrences = 1 - -/datum/round_event/bluespace_anomaly - announceWhen = 20 - - var/area/impact_area - - -/datum/round_event/bluespace_anomaly/setup() - var/list/safe_areas = list( - /area/turret_protected/ai, - /area/turret_protected/ai_upload, - /area/engine, - /area/solar, - /area/holodeck, - /area/shuttle/arrival, - /area/shuttle/escape/station, - /area/shuttle/escape_pod1/station, - /area/shuttle/escape_pod2/station, - /area/shuttle/escape_pod3/station, - /area/shuttle/escape_pod5/station, - /area/shuttle/mining/station, - /area/shuttle/transport1/station, - /area/shuttle/specops/station) - - //These are needed because /area/engine has to be removed from the list, but we still want these areas to get fucked up. - var/list/danger_areas = list( - /area/engine/break_room, - /area/engine/chiefs_office) - - - impact_area = locate(pick((the_station_areas - safe_areas) + danger_areas)) //need to locate() as it's just a list of paths. - - -/datum/round_event/bluespace_anomaly/announce() - command_alert("Bluespace anomaly detected in the vicinity of [station_name()]. [impact_area.name] has gone missing.", "Anomaly Alert") - - -/datum/round_event/bluespace_anomaly/start() - var/turf/T = pick(get_area_turfs(impact_area)) - if(T) - // Calculate new position (searches through beacons in world) - var/obj/item/device/radio/beacon/chosen - var/list/possible = list() - for(var/obj/item/device/radio/beacon/W in world) - possible += W - - if(possible.len > 0) - chosen = pick(possible) - - if(chosen) - // Calculate previous position for transition - - var/turf/FROM = T // the turf of origin we're travelling FROM - var/turf/TO = get_turf(chosen) // the turf of origin we're travelling TO - - playsound(TO, 'sound/effects/phasein.ogg', 100, 1) - - var/list/flashers = list() - for(var/mob/living/carbon/human/M in viewers(TO, null)) - if(M:eyecheck() <= 0) - flick("e_flash", M.flash) // flash dose faggots - flashers += M - - var/y_distance = TO.y - FROM.y - var/x_distance = TO.x - FROM.x - for (var/atom/movable/A in range(12, FROM )) // iterate thru list of mobs in the area - if(istype(A, /obj/item/device/radio/beacon)) continue // don't teleport beacons because that's just insanely stupid - if(A.anchored && istype(A, /obj/machinery)) continue - if(istype(A, /obj/structure/disposalpipe )) continue - if(istype(A, /obj/structure/cable )) continue - - var/turf/newloc = locate(A.x + x_distance, A.y + y_distance, TO.z) // calculate the new place - if(!A.Move(newloc)) // if the atom, for some reason, can't move, FORCE them to move! :) We try Move() first to invoke any movement-related checks the atom needs to perform after moving - A.loc = locate(A.x + x_distance, A.y + y_distance, TO.z) - - spawn() - if(ismob(A) && !(A in flashers)) // don't flash if we're already doing an effect - var/mob/M = A - if(M.client) - var/obj/blueeffect = new /obj(src) - blueeffect.screen_loc = "WEST,SOUTH to EAST,NORTH" - blueeffect.icon = 'icons/effects/effects.dmi' - blueeffect.icon_state = "shieldsparkles" - blueeffect.layer = 17 - blueeffect.mouse_opacity = 0 - M.client.screen += blueeffect - sleep(20) - M.client.screen -= blueeffect - del(blueeffect) \ No newline at end of file diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index 29953fe3a16..e99e87a425d 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 98a622dd931..883121ba7b7 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -755,12 +755,12 @@ #include "code\modules\detectivework\footprints_and_rag.dm" #include "code\modules\detectivework\scanner.dm" #include "code\modules\events\alien_infestation.dm" +#include "code\modules\events\anomaly_bluespace.dm" #include "code\modules\events\anomaly_flux.dm" #include "code\modules\events\anomaly_grav.dm" #include "code\modules\events\anomaly_pyro.dm" #include "code\modules\events\anomaly_vortex.dm" #include "code\modules\events\blob.dm" -#include "code\modules\events\bluespaceanomaly.dm" #include "code\modules\events\brand_intelligence.dm" #include "code\modules\events\carp_migration.dm" #include "code\modules\events\communications_blackout.dm"