Port: Merge pull request 6900 from VOREStation/vplk-overmap-events

Overmap Events
This commit is contained in:
Aronai Sieyes
2020-03-19 21:39:41 -04:00
committed by Leshana
parent 8a8cd93db5
commit b3be065ae4
20 changed files with 818 additions and 202 deletions

View File

@@ -7,27 +7,57 @@ No command report on the common version of this event.
The "dust" will damage the hull of the station causin minor hull breaches.
*/
/proc/dust_swarm(var/strength = "weak")
/proc/dust_swarm(var/strength = "weak", var/list/affecting_z)
var/numbers = 1
var/dust_type = /obj/effect/space_dust
switch(strength)
if("weak")
numbers = rand(2,4)
for(var/i = 0 to numbers)
new/obj/effect/space_dust/weak()
numbers = rand(2,4)
dust_type = /obj/effect/space_dust/weak
if("norm")
numbers = rand(5,10)
for(var/i = 0 to numbers)
new/obj/effect/space_dust()
numbers = rand(5,10)
dust_type = /obj/effect/space_dust
if("strong")
numbers = rand(10,15)
for(var/i = 0 to numbers)
new/obj/effect/space_dust/strong()
numbers = rand(10,15)
dust_type = /obj/effect/space_dust/strong
if("super")
numbers = rand(15,25)
for(var/i = 0 to numbers)
new/obj/effect/space_dust/super()
return
numbers = rand(15,25)
dust_type = /obj/effect/space_dust/super
var/startside = pick(cardinal)
for(var/i = 0 to numbers)
var/startx = 0
var/starty = 0
var/endy = 0
var/endx = 0
switch(startside)
if(NORTH)
starty = world.maxy-TRANSITIONEDGE-1
startx = rand(TRANSITIONEDGE+1, world.maxx-TRANSITIONEDGE-1)
endy = TRANSITIONEDGE
endx = rand(TRANSITIONEDGE+1, world.maxx-TRANSITIONEDGE-1)
if(EAST)
starty = rand(TRANSITIONEDGE+1, world.maxy-TRANSITIONEDGE-1)
startx = world.maxx-TRANSITIONEDGE-1
endy = rand(TRANSITIONEDGE, world.maxy-TRANSITIONEDGE)
endx = TRANSITIONEDGE
if(SOUTH)
starty = TRANSITIONEDGE+1
startx = rand(TRANSITIONEDGE+1, world.maxx-TRANSITIONEDGE-1)
endy = world.maxy-TRANSITIONEDGE
endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE)
if(WEST)
starty = rand(TRANSITIONEDGE+1, world.maxy-TRANSITIONEDGE-1)
startx = TRANSITIONEDGE+1
endy = rand(TRANSITIONEDGE, world.maxy-TRANSITIONEDGE)
endx = world.maxx-TRANSITIONEDGE
var/randomz = pick(affecting_z)
var/turf/startloc = locate(startx, starty, randomz)
var/turf/endloc = locate(endx, endy, randomz)
var/obj/effect/space_dust/D = new dust_type(startloc)
D.set_dir(GLOB.reverse_dir[startside])
walk_towards(D, endloc, 1)
/obj/effect/space_dust
name = "Space Dust"
@@ -39,91 +69,51 @@ The "dust" will damage the hull of the station causin minor hull breaches.
var/strength = 2 //ex_act severity number
var/life = 2 //how many things we hit before qdel(src)
weak
strength = 3
life = 1
/obj/effect/space_dust/weak
strength = 3
life = 1
strong
strength = 1
life = 6
/obj/effect/space_dust/strong
strength = 1
life = 6
super
strength = 1
life = 40
/obj/effect/space_dust/super
strength = 1
life = 40
/obj/effect/space_dust/Destroy()
walk(src, 0) // Because we might have called walk_towards, we must stop the walk loop or BYOND keeps an internal reference to us forever.
return ..()
/obj/effect/space_dust/touch_map_edge()
qdel(src)
/obj/effect/space_dust/Bump(atom/A)
spawn(0)
if(prob(50))
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)
if(ismob(A))
A.ex_act(strength)//This should work for now I guess
else if(!istype(A,/obj/machinery/power/emitter) && !istype(A,/obj/machinery/field_generator)) //Protect the singularity from getting released every round!
A.ex_act(strength) //Changing emitter/field gen ex_act would make it immune to bombs and C4
life--
if(life <= 0)
walk(src,0)
qdel(src)
return 0
return
New()
..()
var/startx = 0
var/starty = 0
var/endy = 0
var/endx = 0
var/startside = pick(cardinal)
/obj/effect/space_dust/Bumped(atom/A)
Bump(A)
return
switch(startside)
if(NORTH)
starty = world.maxy-(TRANSITIONEDGE+1)
startx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1))
endy = TRANSITIONEDGE
endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE)
if(EAST)
starty = rand((TRANSITIONEDGE+1),world.maxy-(TRANSITIONEDGE+1))
startx = world.maxx-(TRANSITIONEDGE+1)
endy = rand(TRANSITIONEDGE, world.maxy-TRANSITIONEDGE)
endx = TRANSITIONEDGE
if(SOUTH)
starty = (TRANSITIONEDGE+1)
startx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1))
endy = world.maxy-TRANSITIONEDGE
endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE)
if(WEST)
starty = rand((TRANSITIONEDGE+1), world.maxy-(TRANSITIONEDGE+1))
startx = (TRANSITIONEDGE+1)
endy = rand(TRANSITIONEDGE,world.maxy-TRANSITIONEDGE)
endx = world.maxx-TRANSITIONEDGE
var/z_level = pick(using_map.station_levels)
var/goal = locate(endx, endy, z_level)
src.x = startx
src.y = starty
src.z = z_level
spawn(0)
walk_towards(src, goal, 1)
return
Destroy()
walk(src, 0) // Because we might have called walk_towards, we must stop the walk loop or BYOND keeps an internal reference to us forever.
return ..()
touch_map_edge()
qdel(src)
Bump(atom/A)
spawn(0)
if(prob(50))
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)
if(ismob(A))
A.ex_act(strength)//This should work for now I guess
else if(!istype(A,/obj/machinery/power/emitter) && !istype(A,/obj/machinery/field_generator)) //Protect the singularity from getting released every round!
A.ex_act(strength) //Changing emitter/field gen ex_act would make it immune to bombs and C4
life--
if(life <= 0)
walk(src,0)
qdel(src)
return 0
return
Bumped(atom/A)
Bump(A)
return
ex_act(severity)
qdel(src)
return
/obj/effect/space_dust/ex_act(severity)
qdel(src)
return

View File

@@ -18,21 +18,18 @@
//Meteor spawning global procs
///////////////////////////////
/proc/pick_meteor_start(var/startSide = pick(cardinal))
var/startLevel = pick(using_map.station_levels - using_map.sealed_levels)
var/pickedstart = spaceDebrisStartLoc(startSide, startLevel)
return list(startLevel, pickedstart)
/proc/spawn_meteors(var/number = 10, var/list/meteortypes, var/startSide)
/proc/spawn_meteors(var/number = 10, var/list/meteortypes, var/startSide, var/zlevel)
log_debug("Spawning [number] meteors on the [dir2text(startSide)] of [zlevel]")
for(var/i = 0; i < number; i++)
spawn_meteor(meteortypes, startSide)
spawn_meteor(meteortypes, startSide, zlevel)
/proc/spawn_meteor(var/list/meteortypes, var/startSide)
var/start = pick_meteor_start(startSide)
/proc/spawn_meteor(var/list/meteortypes, var/startSide, var/startLevel)
if(isnull(startSide))
startSide = pick(cardinal)
if(isnull(startLevel))
startLevel = pick(using_map.station_levels - using_map.sealed_levels)
var/startLevel = start[1]
var/turf/pickedstart = start[2]
var/turf/pickedstart = spaceDebrisStartLoc(startSide, startLevel)
var/turf/pickedgoal = spaceDebrisFinishLoc(startSide, startLevel)
var/Me = pickweight(meteortypes)

View File

@@ -266,20 +266,23 @@ var/const/enterloopsanity = 100
for(var/obj/O in src)
O.hide(O.hides_under_flooring() && !is_plating())
/turf/proc/AdjacentTurfs()
var/L[] = new()
for(var/turf/simulated/t in oview(src,1))
if(!t.density)
if(!LinkBlocked(src, t) && !TurfBlockedNonWindow(t))
L.Add(t)
return L
/turf/proc/AdjacentTurfs(var/check_blockage = TRUE)
. = list()
for(var/t in (trange(1,src) - src))
var/turf/T = t
if(check_blockage)
if(!T.density)
if(!LinkBlocked(src, T) && !TurfBlockedNonWindow(T))
. += t
else
. += t
/turf/proc/CardinalTurfs()
var/L[] = new()
for(var/turf/simulated/T in AdjacentTurfs())
/turf/proc/CardinalTurfs(var/check_blockage = TRUE)
. = list()
for(var/ad in AdjacentTurfs(check_blockage))
var/turf/T = ad
if(T.x == src.x || T.y == src.y)
L.Add(T)
return L
. += T
/turf/proc/Distance(turf/t)
if(get_dist(src,t) == 1)