mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-22 11:37:40 +01:00
More event tweaks
This commit is contained in:
@@ -2,22 +2,18 @@
|
||||
|
||||
/datum/event/alien_infestation
|
||||
announceWhen = 400
|
||||
|
||||
var/spawncount = 1
|
||||
var/successSpawn = 0 //So we don't make a command report if nothing gets spawned.
|
||||
|
||||
|
||||
/datum/event/alien_infestation/setup()
|
||||
announceWhen = rand(announceWhen, announceWhen + 50)
|
||||
spawncount = rand(1, 2)
|
||||
sent_aliens_to_station = 1
|
||||
|
||||
|
||||
/datum/event/alien_infestation/announce()
|
||||
if(successSpawn)
|
||||
command_announcement.Announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", new_sound = 'sound/AI/aliens.ogg')
|
||||
|
||||
|
||||
/datum/event/alien_infestation/start()
|
||||
var/list/vents = list()
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in world)
|
||||
@@ -36,4 +32,5 @@
|
||||
new_xeno.key = C.key
|
||||
|
||||
spawncount--
|
||||
successSpawn = 1
|
||||
successSpawn = 1
|
||||
|
||||
@@ -6,13 +6,11 @@
|
||||
/datum/event/anomaly/anomaly_bluespace/announce()
|
||||
command_announcement.Announce("Unstable bluespace anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
|
||||
|
||||
|
||||
/datum/event/anomaly/anomaly_bluespace/start()
|
||||
var/turf/T = pick(get_area_turfs(impact_area))
|
||||
if(T)
|
||||
newAnomaly = new /obj/effect/anomaly/bluespace(T.loc)
|
||||
|
||||
|
||||
/datum/event/anomaly/anomaly_bluespace/end()
|
||||
if(newAnomaly)//If it hasn't been neutralized, it's time to warp half the station away jeez
|
||||
var/turf/T = pick(get_area_turfs(impact_area))
|
||||
@@ -67,4 +65,5 @@
|
||||
sleep(20)
|
||||
M.client.screen -= blueeffect
|
||||
qdel(blueeffect)
|
||||
qdel(newAnomaly)
|
||||
qdel(newAnomaly)
|
||||
|
||||
@@ -1,179 +0,0 @@
|
||||
// BIOMASS (Note that this code is very similar to Space Vine code)
|
||||
/obj/effect/biomass
|
||||
name = "biomass"
|
||||
desc = "Space barf from another dimension. It just keeps spreading!"
|
||||
icon = 'icons/obj/biomass.dmi'
|
||||
icon_state = "stage1"
|
||||
anchored = 1
|
||||
density = 0
|
||||
layer = 5
|
||||
pass_flags = PASSTABLE | PASSGRILLE
|
||||
var/energy = 0
|
||||
var/obj/effect/biomass_controller/master = null
|
||||
|
||||
New()
|
||||
return
|
||||
|
||||
Destroy()
|
||||
if(master)
|
||||
master.vines -= src
|
||||
master.growth_queue -= src
|
||||
return ..()
|
||||
|
||||
/obj/effect/biomass/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
|
||||
if (!W || !user || !W.type) return
|
||||
switch(W.type)
|
||||
if(/obj/item/weapon/circular_saw) qdel(src)
|
||||
if(/obj/item/weapon/kitchen/utensil/knife) qdel(src)
|
||||
if(/obj/item/weapon/scalpel) qdel(src)
|
||||
if(/obj/item/weapon/twohanded/fireaxe) qdel(src)
|
||||
if(/obj/item/weapon/hatchet) qdel(src)
|
||||
if(/obj/item/weapon/melee/energy) qdel(src)
|
||||
|
||||
//less effective weapons
|
||||
if(/obj/item/weapon/wirecutters)
|
||||
if(prob(25)) qdel(src)
|
||||
if(/obj/item/weapon/shard)
|
||||
if(prob(25)) qdel(src)
|
||||
|
||||
else //weapons with subtypes
|
||||
if(istype(W, /obj/item/weapon/melee/energy/sword)) qdel(src)
|
||||
else if(istype(W, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if(WT.remove_fuel(0, user)) qdel(src)
|
||||
else
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/effect/biomass_controller
|
||||
var/list/obj/effect/biomass/vines = list()
|
||||
var/list/growth_queue = list()
|
||||
var/reached_collapse_size
|
||||
var/reached_slowdown_size
|
||||
//What this does is that instead of having the grow minimum of 1, required to start growing, the minimum will be 0,
|
||||
//meaning if you get the biomasssss..s' size to something less than 20 plots, it won't grow anymore.
|
||||
|
||||
New()
|
||||
if(!istype(src.loc,/turf/simulated/floor))
|
||||
qdel(src)
|
||||
|
||||
spawn_biomass_piece(src.loc)
|
||||
processing_objects.Add(src)
|
||||
|
||||
Destroy()
|
||||
processing_objects.Remove(src)
|
||||
..()
|
||||
|
||||
proc/spawn_biomass_piece(var/turf/location)
|
||||
var/obj/effect/biomass/BM = new(location)
|
||||
growth_queue += BM
|
||||
vines += BM
|
||||
BM.master = src
|
||||
|
||||
process()
|
||||
if(!vines)
|
||||
qdel(src) //space vines exterminated. Remove the controller
|
||||
return
|
||||
if(!growth_queue)
|
||||
qdel(src) //Sanity check
|
||||
return
|
||||
if(vines.len >= 250 && !reached_collapse_size)
|
||||
reached_collapse_size = 1
|
||||
if(vines.len >= 30 && !reached_slowdown_size )
|
||||
reached_slowdown_size = 1
|
||||
|
||||
var/maxgrowth = 0
|
||||
if(reached_collapse_size)
|
||||
maxgrowth = 0
|
||||
else if(reached_slowdown_size)
|
||||
if(prob(25))
|
||||
maxgrowth = 1
|
||||
else
|
||||
maxgrowth = 0
|
||||
else
|
||||
maxgrowth = 4
|
||||
var/length = min( 30 , vines.len / 5 )
|
||||
var/i = 0
|
||||
var/growth = 0
|
||||
var/list/obj/effect/biomass/queue_end = list()
|
||||
|
||||
for( var/obj/effect/biomass/BM in growth_queue )
|
||||
i++
|
||||
queue_end += BM
|
||||
growth_queue -= BM
|
||||
if(BM.energy < 2) //If tile isn't fully grown
|
||||
if(prob(20))
|
||||
BM.grow()
|
||||
|
||||
if(BM.spread())
|
||||
growth++
|
||||
if(growth >= maxgrowth)
|
||||
break
|
||||
if(i >= length)
|
||||
break
|
||||
|
||||
growth_queue = growth_queue + queue_end
|
||||
|
||||
/obj/effect/biomass/proc/grow()
|
||||
if(!energy)
|
||||
src.icon_state = "stage2"
|
||||
energy = 1
|
||||
src.opacity = 0
|
||||
src.density = 0
|
||||
layer = 5
|
||||
else
|
||||
src.icon_state = "stage3"
|
||||
src.opacity = 0
|
||||
src.density = 1
|
||||
energy = 2
|
||||
|
||||
/obj/effect/biomass/proc/spread()
|
||||
var/direction = pick(cardinal)
|
||||
var/step = get_step(src,direction)
|
||||
if(istype(step,/turf/simulated/floor))
|
||||
var/turf/simulated/floor/F = step
|
||||
if(!locate(/obj/effect/biomass,F))
|
||||
if(F.Enter(src))
|
||||
if(master)
|
||||
master.spawn_biomass_piece( F )
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/effect/biomass/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
qdel(src)
|
||||
return
|
||||
if(2.0)
|
||||
if (prob(90))
|
||||
qdel(src)
|
||||
return
|
||||
if(3.0)
|
||||
if (prob(50))
|
||||
qdel(src)
|
||||
return
|
||||
return
|
||||
|
||||
/obj/effect/biomass/fire_act(null, temp, volume) //hotspots kill biomass
|
||||
qdel(src)
|
||||
|
||||
/datum/event/biomass/start()
|
||||
biomass_infestation()
|
||||
|
||||
/proc/biomass_infestation()
|
||||
|
||||
spawn() //to stop the secrets panel hanging
|
||||
var/list/turf/simulated/floor/turfs = list() //list of all the empty floor turfs in the hallway areas
|
||||
for(var/areapath in typesof(/area/hallway))
|
||||
var/area/A = locate(areapath)
|
||||
for(var/turf/simulated/floor/F in A.contents)
|
||||
if(!F.contents.len)
|
||||
turfs += F
|
||||
|
||||
if(turfs.len) //Pick a turf to spawn at if we can
|
||||
var/turf/simulated/floor/T = pick(turfs)
|
||||
new/obj/effect/biomass_controller(T) //spawn a controller at turf
|
||||
message_admins("\blue Event: Biomass spawned at [T.loc.loc] ([T.x],[T.y],[T.z])")
|
||||
|
||||
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
/datum/event/blob/announce()
|
||||
command_announcement.Announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/AI/outbreak5.ogg')
|
||||
|
||||
|
||||
/datum/event/blob/start()
|
||||
var/turf/T = pick(blobstart)
|
||||
if(!T)
|
||||
@@ -15,7 +14,6 @@
|
||||
for(var/i = 1; i < rand(3, 6), i++)
|
||||
Blob.process()
|
||||
|
||||
|
||||
/datum/event/blob/tick()
|
||||
if(!Blob)
|
||||
kill()
|
||||
|
||||
@@ -31,4 +31,5 @@
|
||||
new_borer.key = C.key
|
||||
|
||||
spawncount--
|
||||
successSpawn = 1
|
||||
successSpawn = 1
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
/datum/event/brand_intelligence/announce()
|
||||
command_announcement.Announce("Rampant brand intelligence has been detected aboard [station_name()], please stand-by. The origin is believed to be \a [originMachine.name].", "Machine Learning Alert")
|
||||
|
||||
|
||||
/datum/event/brand_intelligence/start()
|
||||
for(var/obj/machinery/vending/V in machines)
|
||||
if(V.z != 1) continue
|
||||
@@ -31,7 +30,6 @@
|
||||
originMachine.shut_up = 0
|
||||
originMachine.shoot_inventory = 1
|
||||
|
||||
|
||||
/datum/event/brand_intelligence/tick()
|
||||
if(!originMachine || !isnull(originMachine.gcDestroyed) || originMachine.shut_up || originMachine.wires.IsAllCut()) //if the original vending machine is missing or has it's voice switch flipped
|
||||
for(var/obj/machinery/vending/saved in infectedMachines)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/event/carp_migration
|
||||
announceWhen = 50
|
||||
endWhen = 900
|
||||
endWhen = 900
|
||||
|
||||
var/list/spawned_carp = list()
|
||||
|
||||
/datum/event/carp_migration/setup()
|
||||
@@ -8,15 +9,39 @@
|
||||
endWhen = rand(600,1200)
|
||||
|
||||
/datum/event/carp_migration/announce()
|
||||
command_announcement.Announce("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert")
|
||||
var/announcement = ""
|
||||
if(severity == EVENT_LEVEL_MAJOR)
|
||||
announcement = "Massive migration of unknown biological entities has been detected near [station_name()], please stand-by."
|
||||
else
|
||||
announcement = "Unknown biological [spawned_carp.len == 1 ? "entity has" : "entities have"] been detected near [station_name()], please stand-by."
|
||||
command_announcement.Announce(announcement, "Lifesign Alert")
|
||||
|
||||
/datum/event/carp_migration/start()
|
||||
if(severity == EVENT_LEVEL_MAJOR)
|
||||
spawn_fish(landmarks_list.len)
|
||||
else if(severity == EVENT_LEVEL_MODERATE)
|
||||
spawn_fish(rand(4, 6)) //12 to 30 carp, in small groups
|
||||
else
|
||||
spawn_fish(rand(1, 3), 1, 2) //1 to 6 carp, alone or in pairs
|
||||
|
||||
/datum/event/carp_migration/proc/spawn_fish(var/num_groups, var/group_size_min=3, var/group_size_max=5)
|
||||
var/list/spawn_locations = list()
|
||||
|
||||
for(var/obj/effect/landmark/C in landmarks_list)
|
||||
if(C.name == "carpspawn")
|
||||
if(prob(95))
|
||||
new /mob/living/simple_animal/hostile/carp(C.loc)
|
||||
else
|
||||
new /mob/living/simple_animal/hostile/carp/megacarp(C.loc)
|
||||
spawn_locations.Add(C.loc)
|
||||
spawn_locations = shuffle(spawn_locations)
|
||||
num_groups = min(num_groups, spawn_locations.len)
|
||||
|
||||
var/i = 1
|
||||
while (i <= num_groups)
|
||||
var/group_size = rand(group_size_min, group_size_max)
|
||||
for (var/j = 1, j <= group_size, j++)
|
||||
var/carptype = /mob/living/simple_animal/hostile/carp
|
||||
if(prob(5))
|
||||
carptype = /mob/living/simple_animal/hostile/carp/megacarp
|
||||
spawned_carp.Add(new carptype(spawn_locations[i]))
|
||||
i++
|
||||
|
||||
/datum/event/carp_migration/end()
|
||||
for(var/mob/living/simple_animal/hostile/carp/C in spawned_carp)
|
||||
|
||||
@@ -1,89 +0,0 @@
|
||||
/*
|
||||
Immovable rod random event.
|
||||
The rod will spawn at some location outside the station, and travel in a straight line to the opposite side of the station
|
||||
Everything solid in the way will be ex_act()'d
|
||||
In my current plan for it, 'solid' will be defined as anything with density == 1
|
||||
|
||||
--NEOFite
|
||||
*/
|
||||
|
||||
/obj/effect/immovablerod
|
||||
name = "Immovable Rod"
|
||||
desc = "What the fuck is that?"
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "immrod"
|
||||
throwforce = 100
|
||||
density = 1
|
||||
anchored = 1
|
||||
|
||||
Bump(atom/clong)
|
||||
if(istype(clong, /turf/simulated/shuttle)) //Skip shuttles without actually deleting the rod
|
||||
return
|
||||
|
||||
else if (istype(clong, /turf) && !istype(clong, /turf/unsimulated))
|
||||
if(clong.density)
|
||||
clong.ex_act(2)
|
||||
for (var/mob/O in hearers(src, null))
|
||||
O.show_message("CLANG", 2)
|
||||
|
||||
else if (istype(clong, /obj))
|
||||
if(clong.density)
|
||||
clong.ex_act(2)
|
||||
for (var/mob/O in hearers(src, null))
|
||||
O.show_message("CLANG", 2)
|
||||
|
||||
else if (istype(clong, /mob))
|
||||
if(clong.density || prob(10))
|
||||
clong.ex_act(2)
|
||||
else
|
||||
qdel(src)
|
||||
|
||||
if(clong && prob(25))
|
||||
src.loc = clong.loc
|
||||
|
||||
/proc/immovablerod()
|
||||
var/startx = 0
|
||||
var/starty = 0
|
||||
var/endy = 0
|
||||
var/endx = 0
|
||||
var/startside = pick(cardinal)
|
||||
|
||||
switch(startside)
|
||||
if(NORTH)
|
||||
starty = 187
|
||||
startx = rand(41, 199)
|
||||
endy = 38
|
||||
endx = rand(41, 199)
|
||||
if(EAST)
|
||||
starty = rand(38, 187)
|
||||
startx = 199
|
||||
endy = rand(38, 187)
|
||||
endx = 41
|
||||
if(SOUTH)
|
||||
starty = 38
|
||||
startx = rand(41, 199)
|
||||
endy = 187
|
||||
endx = rand(41, 199)
|
||||
if(WEST)
|
||||
starty = rand(38, 187)
|
||||
startx = 41
|
||||
endy = rand(38, 187)
|
||||
endx = 199
|
||||
|
||||
//rod time!
|
||||
var/obj/effect/immovablerod/immrod = new /obj/effect/immovablerod(locate(startx, starty, 1))
|
||||
// world << "Rod in play, starting at [start.loc.x],[start.loc.y] and going to [end.loc.x],[end.loc.y]"
|
||||
var/end = locate(endx, endy, 1)
|
||||
spawn(0)
|
||||
walk_towards(immrod, end,1)
|
||||
sleep(1)
|
||||
while (immrod)
|
||||
if ((immrod.z in config.station_levels))
|
||||
immrod.z = 1
|
||||
if(immrod.loc == end)
|
||||
qdel(immrod)
|
||||
sleep(10)
|
||||
for(var/obj/effect/immovablerod/imm in world)
|
||||
return
|
||||
sleep(50)
|
||||
command_announcement.Announce("What the fuck was that?!", "General Alert")
|
||||
@@ -1,10 +0,0 @@
|
||||
/proc/communications_blackout(var/silent = 1)
|
||||
if(!silent)
|
||||
command_announcement.Announce("Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you-BZZT")
|
||||
else // AIs will always know if there's a comm blackout, rogue AIs could then lie about comm blackouts in the future while they shutdown comms
|
||||
for(var/mob/living/silicon/ai/A in player_list)
|
||||
A << "<br>"
|
||||
A << "<span class='warning'><b>Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you-BZZT<b></span>"
|
||||
A << "<br>"
|
||||
for(var/obj/machinery/telecomms/T in telecomms_list)
|
||||
T.emp_act(1)
|
||||
@@ -17,3 +17,14 @@
|
||||
/datum/event/communications_blackout/start()
|
||||
for(var/obj/machinery/telecomms/T in telecomms_list)
|
||||
T.emp_act(1)
|
||||
|
||||
/proc/communications_blackout(var/silent = 1)
|
||||
if(!silent)
|
||||
command_announcement.Announce("Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you-BZZT", new_sound = 'sound/misc/interference.ogg')
|
||||
else // AIs will always know if there's a comm blackout, rogue AIs could then lie about comm blackouts in the future while they shutdown comms
|
||||
for(var/mob/living/silicon/ai/A in player_list)
|
||||
A << "<br>"
|
||||
A << "<span class='warning'><b>Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you-BZZT<b></span>"
|
||||
A << "<br>"
|
||||
for(var/obj/machinery/telecomms/T in telecomms_list)
|
||||
T.emp_act(1)
|
||||
|
||||
@@ -67,7 +67,6 @@
|
||||
walk_towards(src, goal, 1)
|
||||
return
|
||||
|
||||
|
||||
/obj/effect/space_dust/Bump(atom/A)
|
||||
spawn(0)
|
||||
if(prob(50))
|
||||
@@ -90,12 +89,10 @@
|
||||
return 0
|
||||
return
|
||||
|
||||
|
||||
/obj/effect/space_dust/Bumped(atom/A)
|
||||
Bump(A)
|
||||
return
|
||||
|
||||
|
||||
/obj/effect/space_dust/ex_act(severity)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
@@ -23,4 +23,5 @@
|
||||
|
||||
for(var/obj/effect/landmark/epicentre in epicentreList)
|
||||
for(var/obj/machinery/power/apc/apc in range(epicentre,lightsoutRange))
|
||||
apc.overload_lighting()
|
||||
apc.overload_lighting()
|
||||
|
||||
@@ -133,7 +133,6 @@ var/list/event_last_fired = list()
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Mundane News", /datum/event/mundane_news, 300),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Vermin Infestation",/datum/event/infestation, 100, list(ASSIGNMENT_JANITOR = 100)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Wallrot", /datum/event/wallrot, 0, list(ASSIGNMENT_ENGINEER = 30, ASSIGNMENT_GARDENER = 50)),
|
||||
// NON-BAY EVENTS
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Cargo Bonus", /datum/event/cargo_bonus, 100)
|
||||
)
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
endWhen = 1
|
||||
|
||||
/datum/event/falsealarm/announce()
|
||||
var/weight = pick(EVENT_LEVEL_MUNDANE,EVENT_LEVEL_MUNDANE,EVENT_LEVEL_MUNDANE,EVENT_LEVEL_MODERATE,EVENT_LEVEL_MODERATE,EVENT_LEVEL_MAJOR)
|
||||
var/weight = pickweight(list(EVENT_LEVEL_MUNDANE = 60, EVENT_LEVEL_MODERATE = 30, EVENT_LEVEL_MAJOR = 10))
|
||||
var/datum/event_container/container = event_manager.event_containers[weight]
|
||||
var/datum/event/E = container.acquire_event()
|
||||
var/datum/event/Event = new E
|
||||
|
||||
@@ -7,7 +7,6 @@ In my current plan for it, 'solid' will be defined as anything with density == 1
|
||||
--NEOFite
|
||||
*/
|
||||
|
||||
|
||||
/datum/event/immovable_rod
|
||||
announceWhen = 5
|
||||
|
||||
@@ -15,37 +14,10 @@ In my current plan for it, 'solid' will be defined as anything with density == 1
|
||||
command_announcement.Announce("What the fuck was that?!", "General Alert")
|
||||
|
||||
/datum/event/immovable_rod/start()
|
||||
var/startx = 0
|
||||
var/starty = 0
|
||||
var/endy = 0
|
||||
var/endx = 0
|
||||
var/startside = pick(cardinal)
|
||||
|
||||
switch(startside)
|
||||
if(NORTH)
|
||||
starty = 187
|
||||
startx = rand(41, 199)
|
||||
endy = 38
|
||||
endx = rand(41, 199)
|
||||
if(EAST)
|
||||
starty = rand(38, 187)
|
||||
startx = 199
|
||||
endy = rand(38, 187)
|
||||
endx = 41
|
||||
if(SOUTH)
|
||||
starty = 38
|
||||
startx = rand(41, 199)
|
||||
endy = 187
|
||||
endx = rand(41, 199)
|
||||
else
|
||||
starty = rand(38, 187)
|
||||
startx = 41
|
||||
endy = rand(38, 187)
|
||||
endx = 199
|
||||
|
||||
//rod time!
|
||||
new /obj/effect/immovablerod(locate(startx, starty, 1), locate(endx, endy, 1))
|
||||
|
||||
var/turf/startT = spaceDebrisStartLoc(startside, 1)
|
||||
var/turf/endT = spaceDebrisFinishLoc(startside, 1)
|
||||
new /obj/effect/immovablerod(startT, endT)
|
||||
|
||||
/obj/effect/immovablerod
|
||||
name = "Immovable Rod"
|
||||
@@ -58,36 +30,39 @@ In my current plan for it, 'solid' will be defined as anything with density == 1
|
||||
var/z_original = 0
|
||||
var/destination
|
||||
|
||||
New(atom/start, atom/end)
|
||||
loc = start
|
||||
z_original = z
|
||||
destination = end
|
||||
if(end && end.z==z_original)
|
||||
walk_towards(src, destination, 1)
|
||||
/obj/effect/immovablerod/New(atom/start, atom/end)
|
||||
loc = start
|
||||
z_original = z
|
||||
destination = end
|
||||
if(end && end.z==z_original)
|
||||
walk_towards(src, destination, 1)
|
||||
|
||||
Move()
|
||||
if(z != z_original || loc == destination)
|
||||
spawn(0) qdel(src)
|
||||
return ..()
|
||||
/obj/effect/immovablerod/Move()
|
||||
if(z != z_original || loc == destination)
|
||||
qdel(src)
|
||||
return ..()
|
||||
|
||||
Bump(atom/clong)
|
||||
if (istype(clong, /turf) && !istype(clong, /turf/unsimulated))
|
||||
if(clong.density)
|
||||
clong.ex_act(2)
|
||||
for (var/mob/O in hearers(src, null))
|
||||
O.show_message("CLANG", 2)
|
||||
/obj/effect/immovablerod/ex_act(test)
|
||||
return 0
|
||||
|
||||
else if (istype(clong, /obj))
|
||||
if(clong.density)
|
||||
clong.ex_act(2)
|
||||
for (var/mob/O in hearers(src, null))
|
||||
O.show_message("CLANG", 2)
|
||||
/obj/effect/immovablerod/Bump(atom/clong)
|
||||
if(prob(10))
|
||||
playsound(src, 'sound/effects/bang.ogg', 50, 1)
|
||||
audible_message("CLANG")
|
||||
|
||||
else if (istype(clong, /mob))
|
||||
if(clong.density || prob(10))
|
||||
clong.ex_act(2)
|
||||
else
|
||||
qdel(src)
|
||||
if(clong && prob(25))
|
||||
x = clong.x
|
||||
y = clong.y
|
||||
|
||||
if(clong && prob(25))
|
||||
src.loc = clong.loc
|
||||
if (istype(clong, /turf) || istype(clong, /obj))
|
||||
if(clong.density)
|
||||
clong.ex_act(2)
|
||||
|
||||
else if (istype(clong, /mob))
|
||||
if(istype(clong, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = clong
|
||||
H.visible_message("<span class='danger'>[H.name] is penetrated by an immovable rod!</span>" , "<span class='userdanger'>The rod penetrates you!</span>" , "<span class ='danger'>You hear a CLANG!</span>")
|
||||
H.adjustBruteLoss(160)
|
||||
if(clong.density || prob(10))
|
||||
clong.ex_act(2)
|
||||
return
|
||||
|
||||
@@ -2,8 +2,11 @@
|
||||
announceWhen = rand(0, 20)
|
||||
|
||||
/datum/event/mass_hallucination/start()
|
||||
for(var/mob/living/carbon/human/C in living_mob_list)
|
||||
if(!(C.species.flags & NO_DNA_RAD))
|
||||
C.hallucination += rand(50, 100)
|
||||
for(var/mob/living/carbon/human/H in living_mob_list)
|
||||
var/armor = H.getarmor(attack_flag = "rad")
|
||||
if((H.species.flags & NO_DNA_RAD) || armor >= 75) // Leave DNA-less species/rad armored players completely unaffected
|
||||
continue
|
||||
H.hallucination += rand(50, 100)
|
||||
|
||||
/datum/event/mass_hallucination/announce()
|
||||
command_announcement.Announce("It seems that station [station_name()] is passing through a minor radiation field, this may cause some hallucination, but no further damage")
|
||||
@@ -2,7 +2,7 @@
|
||||
if(prob(16))
|
||||
command_announcement.Announce("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert")
|
||||
else
|
||||
command_announcement.Announce("Meaty ores have been detected on collision course with the station.", "Meaty Ore Alert",new_sound = 'sound/AI/meteors.ogg')
|
||||
command_announcement.Announce("Meaty ores have been detected on collision course with the station.", "Meaty Ore Alert", new_sound = 'sound/AI/meteors.ogg')
|
||||
|
||||
/datum/event/dust/meaty/setup()
|
||||
qnty = rand(45,125)
|
||||
@@ -20,34 +20,34 @@
|
||||
strength = 1
|
||||
life = 3
|
||||
|
||||
Bump(atom/A)
|
||||
if(prob(20))
|
||||
spawn(1)
|
||||
for(var/mob/M in range(10, src))
|
||||
if(!M.stat && !istype(M, /mob/living/silicon/ai))
|
||||
shake_camera(M, 3, 1)
|
||||
if (A)
|
||||
playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1)
|
||||
walk(src,0)
|
||||
invisibility = 101
|
||||
new /obj/effect/decal/cleanable/blood(get_turf(A))
|
||||
if(ismob(A))
|
||||
A.ex_act(strength)
|
||||
/obj/effect/space_dust/meaty/Bump(atom/A)
|
||||
if(prob(20))
|
||||
spawn(1)
|
||||
for(var/mob/M in range(10, src))
|
||||
if(!M.stat && !istype(M, /mob/living/silicon/ai))
|
||||
shake_camera(M, 3, 1)
|
||||
if (A)
|
||||
playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1)
|
||||
walk(src,0)
|
||||
invisibility = 101
|
||||
new /obj/effect/decal/cleanable/blood(get_turf(A))
|
||||
if(ismob(A))
|
||||
A.ex_act(strength)
|
||||
else
|
||||
spawn(0)
|
||||
if(A)
|
||||
A.ex_act(strength)
|
||||
if(src)
|
||||
walk_towards(src,goal,1)
|
||||
life--
|
||||
if(!life)
|
||||
if(prob(80))
|
||||
gibs(loc)
|
||||
if(prob(45))
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/meat(loc)
|
||||
else if(prob(10))
|
||||
explosion(get_turf(loc), 0, pick(0,1), pick(2,3), 0)
|
||||
else
|
||||
spawn(0)
|
||||
if(A)
|
||||
A.ex_act(strength)
|
||||
if(src)
|
||||
walk_towards(src,goal,1)
|
||||
life--
|
||||
if(!life)
|
||||
if(prob(80))
|
||||
gibs(loc)
|
||||
if(prob(45))
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/meat(loc)
|
||||
else if(prob(10))
|
||||
explosion(get_turf(loc), 0, pick(0,1), pick(2,3), 0)
|
||||
else
|
||||
new /mob/living/simple_animal/cow(loc)
|
||||
new /mob/living/simple_animal/cow(loc)
|
||||
|
||||
qdel(src)
|
||||
qdel(src)
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
/proc/power_failure(var/announce = 1)
|
||||
if(announce)
|
||||
command_announcement.Announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Critical Power Failure", new_sound = 'sound/AI/poweroff.ogg')
|
||||
@@ -19,7 +18,6 @@
|
||||
S.update_icon()
|
||||
S.power_change()
|
||||
|
||||
|
||||
for(var/obj/machinery/power/apc/C in world)
|
||||
var/area/current_area = get_area(C)
|
||||
if(current_area.type in skipped_areas_apc || !(C.z in config.station_levels))
|
||||
@@ -50,7 +48,6 @@
|
||||
S.power_change()
|
||||
|
||||
/proc/power_restore_quick(var/announce = 1)
|
||||
|
||||
if(announce)
|
||||
command_announcement.Announce("All SMESs on [station_name()] have been recharged. We apologize for the inconvenience.", "Power Systems Nominal", new_sound = 'sound/AI/poweron.ogg')
|
||||
for(var/obj/machinery/power/smes/S in machines)
|
||||
|
||||
@@ -39,7 +39,6 @@
|
||||
if(areas && areas.len > 0)
|
||||
command_announcement.Announce("[pick("Gr3y.T1d3 virus","Malignant trojan")] detected in [station_name()] [(eventDept == "Security")? "imprisonment":"containment"] subroutines. Secure any compromised areas immediately. Station AI involvement is recommended.", "[eventDept] Alert")
|
||||
|
||||
|
||||
/datum/event/prison_break/start()
|
||||
for(var/area/A in world)
|
||||
if(is_type_in_list(A,areaType) && !is_type_in_list(A,areaNotType))
|
||||
@@ -57,7 +56,6 @@
|
||||
log_to_dd("ERROR: Could not initate grey-tide. Unable to find suitable containment area.")
|
||||
kill()
|
||||
|
||||
|
||||
/datum/event/prison_break/tick()
|
||||
if(activeFor == releaseWhen)
|
||||
if(areas && areas.len > 0)
|
||||
@@ -65,7 +63,6 @@
|
||||
for(var/obj/machinery/light/L in A)
|
||||
L.flicker(10)
|
||||
|
||||
|
||||
/datum/event/prison_break/end()
|
||||
for(var/area/A in shuffle(areas))
|
||||
A.prison_break()
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
/datum/event/radiation_storm/start()
|
||||
spawn()
|
||||
command_announcement.Announce("High levels of radiation detected near the station. Please evacuate into one of the shielded maintenance tunnels.", "Anomaly Alert", new_sound = 'sound/AI/radiation.ogg')
|
||||
@@ -31,10 +30,8 @@
|
||||
|
||||
make_maint_all_access()
|
||||
|
||||
|
||||
sleep(600)
|
||||
|
||||
|
||||
command_announcement.Announce("The station has entered the radiation belt. Please remain in a sheltered area until we have passed the radiation belt.", "Anomaly Alert")
|
||||
|
||||
for(var/i = 0, i < 10, i++)
|
||||
@@ -61,7 +58,6 @@
|
||||
|
||||
sleep(100)
|
||||
|
||||
|
||||
command_announcement.Announce("The station has passed the radiation belt. Please report to medbay if you experience any unusual symptoms. Maintenance will lose all access again shortly.", "Anomaly Alert")
|
||||
|
||||
for(var/area/A in world)
|
||||
@@ -71,5 +67,4 @@
|
||||
|
||||
sleep(600) // Want to give them time to get out of maintenance.
|
||||
|
||||
|
||||
revoke_maint_all_access()
|
||||
|
||||
@@ -32,7 +32,6 @@
|
||||
msg = "Unidentified hackers have targetted a combat drone wing deployed from the NMV Icarus. If any are sighted in the area, approach with caution."
|
||||
command_announcement.Announce(msg, "Rogue drone alert")
|
||||
|
||||
|
||||
/datum/event/rogue_drone/tick()
|
||||
return
|
||||
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
|
||||
/datum/event/spawn_slaughter
|
||||
var/key_of_slaughter
|
||||
|
||||
|
||||
|
||||
/datum/event/spawn_slaughter/proc/get_slaughter(var/end_if_fail = 0)
|
||||
key_of_slaughter = null
|
||||
if(!key_of_slaughter)
|
||||
@@ -46,13 +43,9 @@
|
||||
log_game("[key_of_slaughter] was spawned as a Slaughter Demon by an event.")
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
/datum/event/spawn_slaughter/start()
|
||||
get_slaughter()
|
||||
|
||||
|
||||
|
||||
/datum/event/spawn_slaughter/proc/find_slaughter()
|
||||
message_admins("Attempted to spawn a Slaughter Demon but there was no players available. Will try again momentarily.")
|
||||
spawn(50)
|
||||
@@ -61,4 +54,5 @@
|
||||
log_game("[key_of_slaughter] was spawned as a Slaughter Demon by an event.")
|
||||
return 0
|
||||
message_admins("Unfortunately, no candidates were available for becoming a Slaugter Demon. Shutting down.")
|
||||
kill()
|
||||
kill()
|
||||
|
||||
@@ -2,10 +2,8 @@
|
||||
|
||||
/datum/event/spider_infestation
|
||||
announceWhen = 400
|
||||
|
||||
var/spawncount = 1
|
||||
|
||||
|
||||
/datum/event/spider_infestation/setup()
|
||||
announceWhen = rand(announceWhen, announceWhen + 50)
|
||||
spawncount = round(num_players() * 0.8)
|
||||
|
||||
@@ -7,13 +7,11 @@
|
||||
/datum/event/tear/announce()
|
||||
command_announcement.Announce("A tear in the fabric of space and time has opened. Expected location: [impact_area.name].", "Anomaly Alert")
|
||||
|
||||
|
||||
/datum/event/tear/start()
|
||||
var/turf/T = pick(get_area_turfs(impact_area))
|
||||
if(T)
|
||||
TE = new /obj/effect/tear(T.loc)
|
||||
|
||||
|
||||
/datum/event/tear/setup()
|
||||
impact_area = findEventArea()
|
||||
|
||||
@@ -42,7 +40,6 @@
|
||||
spawn(15)
|
||||
if(animation) qdel(animation)
|
||||
|
||||
|
||||
spawn(rand(30,120))
|
||||
var/blocked = blocked_mobs //global variable for blocked mobs
|
||||
|
||||
|
||||
@@ -2,37 +2,39 @@
|
||||
var/spawn_prob = 10
|
||||
startWhen = 2
|
||||
announceWhen = 3
|
||||
start()
|
||||
var/datum/event/electrical_storm/RS = new
|
||||
RS.lightsoutAmount = pick(2,2,3)
|
||||
RS.start()
|
||||
RS.kill()
|
||||
for(var/area/A)
|
||||
if(!(A.z in config.station_levels)) continue //Spook on main station only.
|
||||
if(A.luminosity) continue
|
||||
|
||||
/datum/event/undead/start()
|
||||
var/datum/event/electrical_storm/RS = new
|
||||
RS.lightsoutAmount = pick(2,2,3)
|
||||
RS.start()
|
||||
RS.kill()
|
||||
for(var/area/A)
|
||||
if(!(A.z in config.station_levels)) continue //Spook on main station only.
|
||||
if(A.luminosity) continue
|
||||
// if(A.lighting_space) continue
|
||||
if(A.type == /area) continue
|
||||
var/list/turflist = list()
|
||||
for(var/turf/T in A)
|
||||
if(istype(T,/turf/space) || T.density) continue
|
||||
if(locate(/mob/living) in T) continue
|
||||
var/okay = 1
|
||||
for(var/obj/O in T)
|
||||
if(O.density)
|
||||
okay = 0
|
||||
break
|
||||
if(okay)
|
||||
turflist += T
|
||||
if(A.type == /area) continue
|
||||
var/list/turflist = list()
|
||||
for(var/turf/T in A)
|
||||
if(istype(T,/turf/space) || T.density) continue
|
||||
if(locate(/mob/living) in T) continue
|
||||
var/okay = 1
|
||||
for(var/obj/O in T)
|
||||
if(O.density)
|
||||
okay = 0
|
||||
break
|
||||
if(okay)
|
||||
turflist += T
|
||||
|
||||
if(!turflist.len) continue
|
||||
var/turfs = round(turflist.len * spawn_prob/100,1)
|
||||
while(turfs > 0 && turflist.len) // safety
|
||||
turfs--
|
||||
var/turf/T = pick_n_take(turflist)
|
||||
var/undeadtype = pick(/mob/living/simple_animal/hostile/retaliate/skeleton,
|
||||
80;/mob/living/simple_animal/hostile/retaliate/zombie,
|
||||
60;/mob/living/simple_animal/hostile/retaliate/ghost)
|
||||
new undeadtype(T)
|
||||
announce()
|
||||
for(var/mob/living/M in player_list)
|
||||
M << "You feel [pick("a chill","a deathly chill","the undead","dirty", "creeped out","afraid","fear")]!"
|
||||
if(!turflist.len) continue
|
||||
var/turfs = round(turflist.len * spawn_prob/100,1)
|
||||
while(turfs > 0 && turflist.len) // safety
|
||||
turfs--
|
||||
var/turf/T = pick_n_take(turflist)
|
||||
var/undeadtype = pick(/mob/living/simple_animal/hostile/retaliate/skeleton,
|
||||
80;/mob/living/simple_animal/hostile/retaliate/zombie,
|
||||
60;/mob/living/simple_animal/hostile/retaliate/ghost)
|
||||
new undeadtype(T)
|
||||
|
||||
/datum/event/undead/announce()
|
||||
for(var/mob/living/M in player_list)
|
||||
M << "You feel [pick("a chill","a deathly chill","the undead","dirty", "creeped out","afraid","fear")]!"
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
/datum/event/vent_clog/announce()
|
||||
command_announcement.Announce("The scrubbers network is experiencing a backpressure surge. Some ejection of contents may occur.", "Atmospherics alert")
|
||||
|
||||
|
||||
/datum/event/vent_clog/setup()
|
||||
endWhen = rand(25, 100)
|
||||
for(var/obj/machinery/atmospherics/unary/vent_scrubber/temp_vent in machines)
|
||||
|
||||
@@ -1,16 +1,15 @@
|
||||
|
||||
datum/event/viral_infection
|
||||
/datum/event/viral_infection
|
||||
severity = 1
|
||||
|
||||
datum/event/viral_infection/setup()
|
||||
/datum/event/viral_infection/setup()
|
||||
announceWhen = rand(0, 3000)
|
||||
endWhen = announceWhen + 1
|
||||
severity = rand(1, 3)
|
||||
|
||||
datum/event/viral_infection/announce()
|
||||
/datum/event/viral_infection/announce()
|
||||
command_announcement.Announce("Confirmed outbreak of level five viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak5.ogg')
|
||||
|
||||
datum/event/viral_infection/start()
|
||||
/datum/event/viral_infection/start()
|
||||
var/list/candidates = list() //list of candidate keys
|
||||
for(var/mob/living/carbon/human/G in player_list)
|
||||
if(G.client && G.stat != DEAD)
|
||||
|
||||
@@ -1,16 +1,15 @@
|
||||
|
||||
datum/event/viral_outbreak
|
||||
/datum/event/viral_outbreak
|
||||
severity = 1
|
||||
|
||||
datum/event/viral_outbreak/setup()
|
||||
/datum/event/viral_outbreak/setup()
|
||||
announceWhen = rand(0, 3000)
|
||||
endWhen = announceWhen + 1
|
||||
severity = rand(2, 4)
|
||||
|
||||
datum/event/viral_outbreak/announce()
|
||||
/datum/event/viral_outbreak/announce()
|
||||
command_announcement.Announce("Confirmed outbreak of level 7 viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak7.ogg')
|
||||
|
||||
datum/event/viral_outbreak/start()
|
||||
/datum/event/viral_outbreak/start()
|
||||
var/list/candidates = list() //list of candidate keys
|
||||
for(var/mob/living/carbon/human/G in player_list)
|
||||
if(G.client && G.stat != DEAD)
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
datum/event/wallrot/setup()
|
||||
/datum/event/wallrot/setup()
|
||||
announceWhen = rand(0, 300)
|
||||
endWhen = announceWhen + 1
|
||||
|
||||
datum/event/wallrot/announce()
|
||||
/datum/event/wallrot/announce()
|
||||
command_announcement.Announce("Harmful fungi detected on station. Station structures may be contaminated.", "Biohazard Alert")
|
||||
|
||||
datum/event/wallrot/start()
|
||||
/datum/event/wallrot/start()
|
||||
spawn()
|
||||
var/turf/simulated/wall/center = null
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
for(var/areapath in typesof(/area/hallway))
|
||||
var/area/A = locate(areapath)
|
||||
for(var/turf/simulated/floor/F in A.contents)
|
||||
if(!F.contents.len)
|
||||
if(!F.contents.len <= 1) // Floors always have a lighting overlay
|
||||
turfs += F
|
||||
|
||||
if(turfs.len) //Pick a turf to spawn at if we can
|
||||
|
||||
Reference in New Issue
Block a user