mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-12 11:13:16 +00:00
155 lines
4.0 KiB
Plaintext
155 lines
4.0 KiB
Plaintext
/var/const/meteor_wave_delay = 625 //minimum wait between waves in tenths of seconds
|
|
//set to at least 100 unless you want evarr ruining every round
|
|
|
|
/var/const/meteors_in_wave = 50
|
|
/var/const/meteors_in_small_wave = 10
|
|
|
|
/proc/meteor_wave(var/number = meteors_in_wave)
|
|
if(!ticker || wavesecret)
|
|
return
|
|
|
|
wavesecret = 1
|
|
for(var/i = 0 to number)
|
|
spawn(rand(10,100))
|
|
spawn_meteor()
|
|
spawn(meteor_wave_delay)
|
|
wavesecret = 0
|
|
|
|
/proc/spawn_meteors(var/number = meteors_in_small_wave)
|
|
for(var/i = 0; i < number; i++)
|
|
spawn(0)
|
|
spawn_meteor()
|
|
|
|
/proc/spawn_meteor()
|
|
|
|
var/startx
|
|
var/starty
|
|
var/endx
|
|
var/endy
|
|
var/turf/pickedstart
|
|
var/turf/pickedgoal
|
|
var/max_i = 10//number of tries to spawn meteor.
|
|
|
|
|
|
do
|
|
switch(pick(1,2,3,4))
|
|
if(1) //NORTH
|
|
starty = world.maxy-(TRANSITIONEDGE+1)
|
|
startx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1))
|
|
endy = TRANSITIONEDGE
|
|
endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE)
|
|
if(2) //EAST
|
|
starty = rand((TRANSITIONEDGE+1),world.maxy-(TRANSITIONEDGE+1))
|
|
startx = world.maxx-(TRANSITIONEDGE+1)
|
|
endy = rand(TRANSITIONEDGE, world.maxy-TRANSITIONEDGE)
|
|
endx = TRANSITIONEDGE
|
|
if(3) //SOUTH
|
|
starty = (TRANSITIONEDGE+1)
|
|
startx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1))
|
|
endy = world.maxy-TRANSITIONEDGE
|
|
endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE)
|
|
if(4) //WEST
|
|
starty = rand((TRANSITIONEDGE+1), world.maxy-(TRANSITIONEDGE+1))
|
|
startx = (TRANSITIONEDGE+1)
|
|
endy = rand(TRANSITIONEDGE,world.maxy-TRANSITIONEDGE)
|
|
endx = world.maxx-TRANSITIONEDGE
|
|
|
|
pickedstart = locate(startx, starty, 1)
|
|
pickedgoal = locate(endx, endy, 1)
|
|
max_i--
|
|
if(max_i<=0) return
|
|
|
|
while (!istype(pickedstart, /turf/space)) //FUUUCK, should never happen.
|
|
|
|
|
|
var/obj/effect/meteor/M
|
|
switch(rand(1, 100))
|
|
|
|
if(1 to 10)
|
|
M = new /obj/effect/meteor/big( pickedstart )
|
|
if(11 to 75)
|
|
M = new /obj/effect/meteor( pickedstart )
|
|
if(76 to 100)
|
|
M = new /obj/effect/meteor/small( pickedstart )
|
|
|
|
M.dest = pickedgoal
|
|
spawn(0)
|
|
walk_towards(M, M.dest, 1)
|
|
|
|
return
|
|
|
|
/obj/effect/meteor
|
|
name = "meteor"
|
|
icon = 'icons/obj/meteor.dmi'
|
|
icon_state = "flaming"
|
|
density = 1
|
|
anchored = 1.0
|
|
var/hits = 1
|
|
var/dest
|
|
pass_flags = PASSTABLE
|
|
|
|
/obj/effect/meteor/small
|
|
name = "small meteor"
|
|
icon_state = "smallf"
|
|
pass_flags = PASSTABLE | PASSGRILLE
|
|
|
|
/obj/effect/meteor/Bump(atom/A)
|
|
spawn(0)
|
|
|
|
if (A)
|
|
A.meteorhit(src)
|
|
playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1)
|
|
if (--src.hits <= 0)
|
|
|
|
//Prevent meteors from blowing up the singularity's containment.
|
|
//Changing emitter and generator ex_act would result in them being bomb and C4 proof.
|
|
if(!istype(A,/obj/machinery/power/emitter) && \
|
|
!istype(A,/obj/machinery/field_generator) && \
|
|
prob(15))
|
|
explosion(src.loc, 4, 5, 6, 7, 0)
|
|
del(src)
|
|
return
|
|
|
|
|
|
/obj/effect/meteor/ex_act(severity)
|
|
|
|
if (severity < 4)
|
|
del(src)
|
|
return
|
|
|
|
/obj/effect/meteor/big
|
|
name = "big meteor"
|
|
hits = 5
|
|
|
|
ex_act(severity)
|
|
return
|
|
|
|
Bump(atom/A)
|
|
spawn(0)
|
|
//Prevent meteors from blowing up the singularity's containment.
|
|
//Changing emitter and generator ex_act would result in them being bomb and C4 proof
|
|
if(!istype(A,/obj/machinery/power/emitter) && \
|
|
!istype(A,/obj/machinery/field_generator))
|
|
if(--src.hits <= 0)
|
|
del(src) //Dont blow up singularity containment if we get stuck there.
|
|
|
|
if (A)
|
|
for(var/mob/M in player_list)
|
|
var/turf/T = get_turf(M)
|
|
if(!T || T.z != src.z)
|
|
continue
|
|
shake_camera(M, 3, get_dist(M.loc, src.loc) > 20 ? 1 : 3)
|
|
playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1)
|
|
explosion(src.loc, 0, 1, 2, 3, 0)
|
|
|
|
if (--src.hits <= 0)
|
|
if(prob(15) && !istype(A, /obj/structure/grille))
|
|
explosion(src.loc, 1, 2, 3, 4, 0)
|
|
del(src)
|
|
return
|
|
|
|
/obj/effect/meteor/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
|
if(istype(W, /obj/item/weapon/pickaxe))
|
|
del(src)
|
|
return
|
|
..() |