mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2025-12-29 19:43:16 +00:00
Port: Merge pull request 6900 from VOREStation/vplk-overmap-events
Overmap Events
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user