mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-29 16:18:01 +01:00
@@ -1,3 +1,17 @@
|
||||
/matrix/proc/TurnTo(old_angle, new_angle)
|
||||
. = new_angle - old_angle
|
||||
Turn(.) //BYOND handles cases such as -270, 360, 540 etc. DOES NOT HANDLE 180 TURNS WELL, THEY TWEEN AND LOOK LIKE SHIT
|
||||
|
||||
|
||||
/atom/proc/SpinAnimation(speed = 10)
|
||||
var/matrix/m120 = matrix(transform)
|
||||
m120.Turn(120)
|
||||
var/matrix/m240 = matrix(transform)
|
||||
m240.Turn(240)
|
||||
var/matrix/m360 = matrix(transform)
|
||||
speed /= 3 //Gives us 3 equal time segments for our three turns.
|
||||
//Why not one turn? Because byond will see that the start and finish are the same place and do nothing
|
||||
//Why not two turns? Because byond will do a flip instead of a turn
|
||||
animate(src, transform = m120, time = speed, loop = -1)
|
||||
animate(transform = m240, time = speed)
|
||||
animate(transform = m360, time = speed)
|
||||
@@ -80,9 +80,6 @@
|
||||
*/
|
||||
|
||||
|
||||
/atom/proc/meteorhit(obj/meteor as obj)
|
||||
return
|
||||
|
||||
/atom/proc/allow_drop()
|
||||
return 1
|
||||
|
||||
|
||||
@@ -1,10 +1,15 @@
|
||||
/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
|
||||
/var/list/meteorsA = list(/obj/effect/meteor/dust=3, /obj/effect/meteor/medium=8, /obj/effect/meteor/big=3, \
|
||||
/obj/effect/meteor/flaming=1, /obj/effect/meteor/irradiated=3)
|
||||
|
||||
/proc/meteor_wave(var/number = meteors_in_wave)
|
||||
/var/list/meteorsB = list(/obj/effect/meteor/meaty=5, /obj/effect/meteor/meaty/xeno=1)
|
||||
|
||||
/var/list/meteorsC = list(/obj/effect/meteor/dust) //for space dust event
|
||||
|
||||
|
||||
/proc/meteor_wave(var/number = 50) //this proc's unused now.
|
||||
if(!ticker || wavesecret)
|
||||
return
|
||||
|
||||
@@ -15,12 +20,13 @@
|
||||
spawn(meteor_wave_delay)
|
||||
wavesecret = 0
|
||||
|
||||
/proc/spawn_meteors(var/number = meteors_in_small_wave)
|
||||
|
||||
/proc/spawn_meteors(var/number = 10, var/list/meteortypes)
|
||||
for(var/i = 0; i < number; i++)
|
||||
spawn(0)
|
||||
spawn_meteor()
|
||||
spawn_meteor(meteortypes)
|
||||
|
||||
/proc/spawn_meteor()
|
||||
/proc/spawn_meteor(var/list/meteortypes)
|
||||
|
||||
var/startx
|
||||
var/starty
|
||||
@@ -30,7 +36,6 @@
|
||||
var/turf/pickedgoal
|
||||
var/max_i = 10//number of tries to spawn meteor.
|
||||
|
||||
|
||||
do
|
||||
switch(pick(1,2,3,4))
|
||||
if(1) //NORTH
|
||||
@@ -58,90 +63,149 @@
|
||||
pickedgoal = locate(endx, endy, 1)
|
||||
max_i--
|
||||
if(max_i<=0) return
|
||||
|
||||
while (!istype(pickedstart, /turf/space) || pickedstart.loc.name != "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 )
|
||||
var/Me = pickweight(meteortypes)
|
||||
var/obj/effect/meteor/M = new Me(pickedstart)
|
||||
|
||||
M.dest = pickedgoal
|
||||
spawn(0)
|
||||
walk_towards(M, M.dest, 1)
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/effect/meteor
|
||||
name = "meteor"
|
||||
name = "the concept of meteor"
|
||||
desc = "You should probably run instead of gawking at this."
|
||||
icon = 'icons/obj/meteor.dmi'
|
||||
icon_state = "flaming"
|
||||
icon_state = "small"
|
||||
density = 1
|
||||
anchored = 1.0
|
||||
var/hits = 1
|
||||
anchored = 1
|
||||
var/hits = 4
|
||||
var/hitpwr = 2 //Level of ex_act to be called on hit.
|
||||
var/dest
|
||||
pass_flags = PASSTABLE
|
||||
var/heavy = 0
|
||||
var/meteorsound = 'sound/effects/meteorimpact.ogg'
|
||||
|
||||
/obj/effect/meteor/small
|
||||
name = "small meteor"
|
||||
icon_state = "smallf"
|
||||
var/meteordrop = /obj/item/weapon/ore/iron
|
||||
var/dropamt = 2
|
||||
|
||||
/obj/effect/meteor/dust
|
||||
name = "space dust"
|
||||
icon_state = "dust"
|
||||
pass_flags = PASSTABLE | PASSGRILLE
|
||||
hits = 1
|
||||
hitpwr = 3
|
||||
meteorsound = 'sound/weapons/throwtap.ogg'
|
||||
meteordrop = /obj/item/weapon/ore/glass
|
||||
|
||||
/obj/effect/meteor/Bump(atom/A)
|
||||
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)
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/effect/meteor/ex_act(severity)
|
||||
if (severity < 4)
|
||||
qdel(src)
|
||||
return
|
||||
/obj/effect/meteor/medium
|
||||
name = "meteor"
|
||||
dropamt = 3
|
||||
|
||||
/obj/effect/meteor/big
|
||||
name = "big meteor"
|
||||
hits = 5
|
||||
icon_state = "large"
|
||||
hits = 7
|
||||
heavy = 1
|
||||
dropamt = 4
|
||||
|
||||
ex_act(severity)
|
||||
return
|
||||
/obj/effect/meteor/flaming
|
||||
name = "flaming meteor"
|
||||
icon_state = "flaming"
|
||||
hits = 3
|
||||
heavy = 1
|
||||
meteorsound = 'sound/effects/bamf.ogg'
|
||||
meteordrop = /obj/item/weapon/ore/plasma
|
||||
|
||||
Bump(atom/A)
|
||||
//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)
|
||||
qdel(src) //Dont blow up singularity containment if we get stuck there.
|
||||
/obj/effect/meteor/irradiated
|
||||
name = "glowing meteor"
|
||||
icon_state = "glowing"
|
||||
hits = 4
|
||||
heavy = 1
|
||||
meteordrop = /obj/item/weapon/ore/uranium
|
||||
|
||||
if (A)
|
||||
for(var/mob/M in player_list)
|
||||
var/turf/T = get_turf(M)
|
||||
if(!T || T.z != src.z)
|
||||
continue
|
||||
var/dist = get_dist(M.loc, src.loc)
|
||||
shake_camera(M, dist > 20 ? 3 : 5, dist > 20 ? 1 : 3)
|
||||
M.playsound_local(src.loc, 'sound/effects/meteorimpact.ogg', 50, 1, get_rand_frequency(), 10)
|
||||
explosion(src.loc, 0, 1, 2, 3, 0)
|
||||
/obj/effect/meteor/meaty
|
||||
name = "meaty ore"
|
||||
icon_state = "meateor"
|
||||
desc = "Just... don't think too hard about where this thing came from."
|
||||
hits = 2
|
||||
heavy = 1
|
||||
meteorsound = 'sound/effects/blobattack.ogg'
|
||||
meteordrop = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||
var/meteorgibs = /obj/effect/gibspawner/generic
|
||||
|
||||
/obj/effect/meteor/meaty/xeno
|
||||
color = "#5EFF00"
|
||||
meteordrop = /obj/item/weapon/reagent_containers/food/snacks/xenomeat
|
||||
meteorgibs = /obj/effect/gibspawner/xeno
|
||||
|
||||
|
||||
/obj/effect/meteor/New()
|
||||
..()
|
||||
SpinAnimation()
|
||||
|
||||
/obj/effect/meteor/Bump(atom/A)
|
||||
if(A)
|
||||
A.ex_act(hitpwr)
|
||||
playsound(src.loc, meteorsound, 40, 1)
|
||||
if(--src.hits <= 0)
|
||||
make_debris()
|
||||
meteor_effect(heavy)
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/effect/meteor/ex_act()
|
||||
return
|
||||
|
||||
|
||||
/obj/effect/meteor/proc/meteor_effect(var/sound=1)
|
||||
if(sound)
|
||||
for(var/mob/M in player_list)
|
||||
var/turf/T = get_turf(M)
|
||||
if(!T || T.z != src.z)
|
||||
continue
|
||||
var/dist = get_dist(M.loc, src.loc)
|
||||
shake_camera(M, dist > 20 ? 3 : 5, dist > 20 ? 1 : 3)
|
||||
M.playsound_local(src.loc, meteorsound, 50, 1, get_rand_frequency(), 10)
|
||||
|
||||
|
||||
/obj/effect/meteor/medium/meteor_effect()
|
||||
..(heavy)
|
||||
explosion(src.loc, 1, 2, 3, 4, 0)
|
||||
|
||||
|
||||
/obj/effect/meteor/big/meteor_effect()
|
||||
..(heavy)
|
||||
explosion(src.loc, 0, 1, 2, 3, 0)
|
||||
|
||||
|
||||
/obj/effect/meteor/flaming/meteor_effect()
|
||||
..(heavy)
|
||||
explosion(src.loc, 0, 1, 2, 3, 0, 0, 5)
|
||||
|
||||
|
||||
/obj/effect/meteor/irradiated/meteor_effect()
|
||||
..(heavy)
|
||||
explosion(src.loc, 0, 0, 4, 3, 0)
|
||||
new /obj/effect/decal/cleanable/greenglow(get_turf(src))
|
||||
for(var/mob/living/L in view(5, src))
|
||||
L.apply_effect(40, IRRADIATE)
|
||||
|
||||
|
||||
|
||||
/obj/effect/meteor/proc/make_debris()
|
||||
for(var/throws = dropamt, throws > 0, throws--)
|
||||
var/obj/item/O = new meteordrop(get_turf(src))
|
||||
O.throw_at(dest, 5, 10)
|
||||
|
||||
/obj/effect/meteor/meaty/make_debris()
|
||||
..()
|
||||
new meteorgibs(get_turf(src))
|
||||
|
||||
if (--src.hits <= 0)
|
||||
if(prob(15) && !istype(A, /obj/structure/grille))
|
||||
explosion(src.loc, 1, 2, 3, 4, 0)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/meteor/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/pickaxe))
|
||||
|
||||
@@ -204,11 +204,6 @@ update_flag
|
||||
healthcheck()
|
||||
..()
|
||||
|
||||
/obj/machinery/portable_atmospherics/canister/meteorhit(var/obj/O as obj)
|
||||
src.health = 0
|
||||
healthcheck()
|
||||
return
|
||||
|
||||
/obj/machinery/portable_atmospherics/canister/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
|
||||
@@ -108,10 +108,6 @@
|
||||
healthcheck()
|
||||
return
|
||||
|
||||
/obj/machinery/bot/meteorhit()
|
||||
src.explode()
|
||||
return
|
||||
|
||||
/obj/machinery/bot/blob_act()
|
||||
src.health -= rand(20,40)*fire_dam_coeff
|
||||
healthcheck()
|
||||
|
||||
@@ -140,10 +140,6 @@
|
||||
emergencyShutdown()
|
||||
..()
|
||||
|
||||
/obj/machinery/computer/HolodeckControl/meteorhit(var/obj/O as obj)
|
||||
emergencyShutdown()
|
||||
..()
|
||||
|
||||
|
||||
/obj/machinery/computer/HolodeckControl/emp_act(severity)
|
||||
emergencyShutdown()
|
||||
|
||||
@@ -21,15 +21,6 @@
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/obj/machinery/computer/meteorhit(var/obj/O as obj)
|
||||
verbs.Cut()
|
||||
set_broken()
|
||||
var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread()
|
||||
smoke.set_up(5, 0, src)
|
||||
smoke.start()
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/computer/emp_act(severity)
|
||||
if(prob(20/severity)) set_broken()
|
||||
..()
|
||||
|
||||
@@ -106,14 +106,6 @@ for reference:
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
meteorhit()
|
||||
visible_message("\red <B>The barricade is smashed apart!</B>")
|
||||
new /obj/item/stack/sheet/mineral/wood(get_turf(src))
|
||||
new /obj/item/stack/sheet/mineral/wood(get_turf(src))
|
||||
new /obj/item/stack/sheet/mineral/wood(get_turf(src))
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
blob_act()
|
||||
src.health -= 25
|
||||
if (src.health <= 0)
|
||||
@@ -235,10 +227,6 @@ for reference:
|
||||
anchored = !anchored
|
||||
icon_state = "barrier[src.locked]"
|
||||
|
||||
meteorhit()
|
||||
src.explode()
|
||||
return
|
||||
|
||||
blob_act()
|
||||
src.health -= 25
|
||||
if (src.health <= 0)
|
||||
|
||||
@@ -92,10 +92,6 @@
|
||||
else flick("door_deny", src)
|
||||
return
|
||||
|
||||
/obj/machinery/door/meteorhit(obj/M as obj)
|
||||
src.open()
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/door/attack_ai(mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
|
||||
@@ -174,10 +174,6 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/machinery/hologram/meteorhit()
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/machinery/hologram/holopad/Destroy()
|
||||
if(hologram)
|
||||
clear_holo()
|
||||
|
||||
@@ -52,21 +52,8 @@
|
||||
|
||||
opacity = 1
|
||||
spawn(20) if(src) opacity = 0
|
||||
|
||||
..()
|
||||
|
||||
/obj/machinery/shield/meteorhit()
|
||||
src.health -= max_health*0.75 //3/4 health as damage
|
||||
|
||||
if(src.health <= 0)
|
||||
visible_message("\blue The [src] dissapates")
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
opacity = 1
|
||||
spawn(20) if(src) opacity = 0
|
||||
return
|
||||
|
||||
/obj/machinery/shield/bullet_act(var/obj/item/projectile/Proj)
|
||||
health -= Proj.damage
|
||||
..()
|
||||
@@ -194,13 +181,6 @@
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/machinery/shieldgen/meteorhit(obj/O as obj)
|
||||
src.health -= max_health*0.25 //A quarter of the machine's health
|
||||
if (prob(5))
|
||||
src.malfunction = 1
|
||||
src.checkhp()
|
||||
return
|
||||
|
||||
/obj/machinery/shieldgen/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
|
||||
@@ -503,10 +503,6 @@
|
||||
/obj/machinery/gun_turret/emp_act() //Can't emp an mechanical turret.
|
||||
return
|
||||
|
||||
/obj/machinery/gun_turret/meteorhit()
|
||||
die()
|
||||
return
|
||||
|
||||
/obj/machinery/gun_turret/update_icon()
|
||||
if(state > 2 || state < 0) //someone fucked up the vars so fix them
|
||||
take_damage(0)
|
||||
|
||||
@@ -613,10 +613,6 @@
|
||||
take_damage(30, "brute")
|
||||
return
|
||||
|
||||
//TODO
|
||||
/obj/mecha/meteorhit()
|
||||
return ex_act(rand(1,3))//should do for now
|
||||
|
||||
/obj/mecha/emp_act(severity)
|
||||
if(get_charge())
|
||||
use_power((cell.charge/2)/severity)
|
||||
|
||||
@@ -17,11 +17,15 @@
|
||||
anchored = 1
|
||||
|
||||
/obj/effect/decal/cleanable/greenglow
|
||||
name = "green glow"
|
||||
|
||||
New()
|
||||
..()
|
||||
spawn(1200)// 2 minutes
|
||||
qdel(src)
|
||||
/obj/effect/decal/cleanable/greenglow/New()
|
||||
..()
|
||||
spawn(1200)// 2 minutes
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/decal/cleanable/greenglow/ex_act()
|
||||
return
|
||||
|
||||
/obj/effect/decal/cleanable/dirt
|
||||
name = "dirt"
|
||||
|
||||
@@ -15,14 +15,4 @@ obj/structure/ex_act(severity)
|
||||
qdel(src)
|
||||
return
|
||||
if(3.0)
|
||||
return
|
||||
|
||||
obj/structure/meteorhit(obj/O as obj)
|
||||
qdel(src)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
return
|
||||
@@ -163,12 +163,6 @@
|
||||
A.loc = src.loc
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/closet/meteorhit(obj/O as obj)
|
||||
if(O.icon_state == "flaming")
|
||||
for(var/mob/M in src)
|
||||
M.meteorhit(O)
|
||||
src.dump_contents()
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/closet/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(src.opened)
|
||||
|
||||
@@ -121,12 +121,6 @@
|
||||
for(var/mob/M in src)
|
||||
shatter(M)
|
||||
|
||||
/obj/structure/closet/statue/meteorhit(obj/O as obj)
|
||||
if(O.icon_state == "flaming")
|
||||
for(var/mob/M in src)
|
||||
M.meteorhit(O)
|
||||
shatter(M)
|
||||
|
||||
/obj/structure/closet/statue/attackby(obj/item/I as obj, mob/user as mob)
|
||||
health -= I.force
|
||||
visible_message("\red [user] strikes [src] with [I].")
|
||||
|
||||
@@ -45,12 +45,6 @@
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/structure/displaycase/meteorhit(obj/O as obj)
|
||||
new /obj/item/weapon/shard( src.loc )
|
||||
new /obj/item/weapon/gun/energy/laser/captain( src.loc )
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/structure/displaycase/proc/healthcheck()
|
||||
if (src.health <= 0)
|
||||
if (!( src.destroyed ))
|
||||
|
||||
@@ -18,10 +18,6 @@
|
||||
/obj/structure/grille/blob_act()
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/grille/meteorhit(var/obj/M)
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/structure/grille/Bumped(atom/user)
|
||||
if(ismob(user)) shock(user, 70)
|
||||
|
||||
|
||||
@@ -40,12 +40,6 @@
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/structure/lamarr/meteorhit(obj/O as obj)
|
||||
new /obj/item/weapon/shard( src.loc )
|
||||
Break()
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/structure/lamarr/proc/healthcheck()
|
||||
if (src.health <= 0)
|
||||
if (!( src.destroyed ))
|
||||
|
||||
@@ -165,15 +165,10 @@ FLOOR SAFES
|
||||
obj/structure/safe/blob_act()
|
||||
return
|
||||
|
||||
|
||||
obj/structure/safe/ex_act(severity)
|
||||
return
|
||||
|
||||
|
||||
obj/structure/safe/meteorhit(obj/O as obj)
|
||||
return
|
||||
|
||||
|
||||
//FLOOR SAFES
|
||||
/obj/structure/safe/floor
|
||||
name = "floor safe"
|
||||
|
||||
@@ -730,9 +730,6 @@ Destroy type values:
|
||||
if(W && W.loc) W.loc = src.loc
|
||||
return 1
|
||||
|
||||
/obj/structure/rack/meteorhit(obj/O as obj)
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/structure/rack/attack_hand(mob/user)
|
||||
if(HULK in user.mutations)
|
||||
|
||||
@@ -50,12 +50,6 @@
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/structure/window/meteorhit()
|
||||
//world << "glass at [x],[y],[z] Mhit"
|
||||
new /obj/item/weapon/shard( loc )
|
||||
if(reinf) new /obj/item/stack/rods( loc)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/window/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(istype(mover) && mover.checkpass(PASSGLASS))
|
||||
return 1
|
||||
|
||||
@@ -313,13 +313,4 @@
|
||||
thermite = 0
|
||||
spawn(50)
|
||||
if(O) qdel(O)
|
||||
return
|
||||
|
||||
/turf/simulated/wall/meteorhit(obj/M as obj)
|
||||
if (prob(15))
|
||||
dismantle_wall()
|
||||
else if(prob(70))
|
||||
ChangeTurf(/turf/simulated/floor/plating)
|
||||
else
|
||||
ReplaceWithLattice()
|
||||
return 0
|
||||
return
|
||||
@@ -58,7 +58,7 @@
|
||||
// if(ticker.mode.name == "nuclear emergency") return
|
||||
if(A.z > 6) return
|
||||
if (A.x <= TRANSITIONEDGE || A.x >= (world.maxx - TRANSITIONEDGE - 1) || A.y <= TRANSITIONEDGE || A.y >= (world.maxy - TRANSITIONEDGE - 1))
|
||||
if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust))
|
||||
if(istype(A, /obj/effect/meteor))
|
||||
qdel(A)
|
||||
return
|
||||
|
||||
@@ -135,7 +135,7 @@
|
||||
var/list/y_arr
|
||||
|
||||
if(src.x <= 1)
|
||||
if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust))
|
||||
if(istype(A, /obj/effect/meteor))
|
||||
qdel(A)
|
||||
return
|
||||
|
||||
@@ -210,7 +210,7 @@
|
||||
A.loc.Entered(A)
|
||||
|
||||
else if (src.y >= world.maxy)
|
||||
if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust))
|
||||
if(istype(A, /obj/effect/meteor))
|
||||
qdel(A)
|
||||
return
|
||||
var/list/cur_pos = src.get_global_map_pos()
|
||||
|
||||
+13
-102
@@ -1,108 +1,19 @@
|
||||
/datum/round_event_control/dust
|
||||
/datum/round_event_control/meteor_wave/dust
|
||||
name = "Minor Space Dust"
|
||||
typepath = /datum/round_event/dust
|
||||
weight = 600
|
||||
max_occurrences = 10000
|
||||
typepath = /datum/round_event/meteor_wave/dust
|
||||
weight = 300
|
||||
max_occurrences = 1000
|
||||
earliest_start = 0
|
||||
|
||||
/datum/round_event/dust
|
||||
var/qnty = 1
|
||||
/datum/round_event/meteor_wave/dust
|
||||
startWhen = 1
|
||||
endWhen = 2
|
||||
|
||||
/datum/round_event/dust/setup()
|
||||
qnty = rand(1,5)
|
||||
/datum/round_event/meteor_wave/dust/announce()
|
||||
return
|
||||
|
||||
/datum/round_event/dust/start()
|
||||
while(qnty-- > 0)
|
||||
new /obj/effect/space_dust/weak()
|
||||
/datum/round_event/meteor_wave/dust/start()
|
||||
spawn_meteors(1, meteorsC)
|
||||
|
||||
|
||||
/obj/effect/space_dust
|
||||
name = "Space Dust"
|
||||
desc = "Dust in space."
|
||||
icon = 'icons/obj/meteor.dmi'
|
||||
icon_state = "space_dust"
|
||||
density = 1
|
||||
anchored = 1
|
||||
var/strength = 2 //ex_act severity number
|
||||
var/life = 2 //how many things we hit before qdel(src)
|
||||
|
||||
weak
|
||||
strength = 3
|
||||
life = 1
|
||||
|
||||
strong
|
||||
strength = 1
|
||||
life = 6
|
||||
|
||||
super
|
||||
strength = 1
|
||||
life = 40
|
||||
|
||||
|
||||
New()
|
||||
var/startx = 0
|
||||
var/starty = 0
|
||||
var/endy = 0
|
||||
var/endx = 0
|
||||
var/startside = pick(cardinal)
|
||||
|
||||
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/goal = locate(endx, endy, 1)
|
||||
src.x = startx
|
||||
src.y = starty
|
||||
src.z = 1
|
||||
spawn(0)
|
||||
walk_towards(src, goal, 1)
|
||||
return
|
||||
|
||||
|
||||
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.meteorhit(src)//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
|
||||
/datum/round_event/meteor_wave/dust/tick()
|
||||
return
|
||||
@@ -89,7 +89,7 @@ In my current plan for it, 'solid' will be defined as anything with density == 1
|
||||
|
||||
else if (istype(clong, /mob))
|
||||
if(clong.density || prob(10))
|
||||
clong.meteorhit(src)
|
||||
clong.ex_act(2)
|
||||
else
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
/datum/round_event_control/meteor_wave/meaty
|
||||
name = "Meaty Ore Wave"
|
||||
typepath = /datum/round_event/meteor_wave/meaty
|
||||
weight = 1
|
||||
max_occurrences = 1
|
||||
|
||||
/datum/round_event/meteor_wave/meaty/announce()
|
||||
command_alert("Meaty ores have been detected on collision course with the station.", "Oh Crap, Get The Mop.")
|
||||
world << sound('sound/AI/meteors.ogg')
|
||||
|
||||
|
||||
/datum/round_event/meteor_wave/meaty/tick()
|
||||
if(IsMultiple(activeFor, 3))
|
||||
spawn_meteors(5, meteorsB) //meteor list types defined in gamemode/meteor/meteors.dm
|
||||
@@ -15,4 +15,4 @@
|
||||
|
||||
/datum/round_event/meteor_wave/tick()
|
||||
if(IsMultiple(activeFor, 3))
|
||||
spawn_meteors(5)
|
||||
spawn_meteors(5, meteorsA) //meteor list types defined in gamemode/meteor/meteors.dm
|
||||
@@ -2740,11 +2740,6 @@ It is possible to destroy the net by the occupant or someone else.
|
||||
healthcheck()
|
||||
return
|
||||
|
||||
meteorhit()
|
||||
health-=50
|
||||
healthcheck()
|
||||
return
|
||||
|
||||
hitby(AM as mob|obj)
|
||||
..()
|
||||
for(var/mob/O in viewers(src, null))
|
||||
|
||||
@@ -94,25 +94,11 @@
|
||||
if(shielded)
|
||||
damage /= 4
|
||||
|
||||
|
||||
show_message("\red The blob attacks!")
|
||||
|
||||
adjustFireLoss(damage)
|
||||
|
||||
return
|
||||
|
||||
|
||||
/mob/living/carbon/alien/humanoid/meteorhit(O as obj)
|
||||
for(var/mob/M in viewers(src, null))
|
||||
if ((M.client && !( M.blinded )))
|
||||
M.show_message(text("\red [] has been hit by []", src, O), 1)
|
||||
if (health > 0)
|
||||
adjustFireLoss((istype(O, /obj/effect/meteor/small) ? 10 : 25))
|
||||
adjustFireLoss(30)
|
||||
|
||||
updatehealth()
|
||||
return
|
||||
|
||||
/mob/living/carbon/alien/humanoid/attack_paw(mob/living/carbon/monkey/M as mob)
|
||||
if(!ismonkey(M)) return//Fix for aliens receiving double messages when attacking other aliens.
|
||||
|
||||
|
||||
@@ -113,17 +113,6 @@
|
||||
/mob/living/carbon/alien/larva/attack_ui(slot_id)
|
||||
return
|
||||
|
||||
/mob/living/carbon/alien/larva/meteorhit(O as obj)
|
||||
for(var/mob/M in viewers(src, null))
|
||||
if ((M.client && !( M.blinded )))
|
||||
M.show_message(text("\red [] has been hit by []", src, O), 1)
|
||||
if (health > 0)
|
||||
adjustBruteLoss((istype(O, /obj/effect/meteor/small) ? 10 : 25))
|
||||
adjustFireLoss(30)
|
||||
|
||||
updatehealth()
|
||||
return
|
||||
|
||||
/mob/living/carbon/alien/larva/attack_animal(mob/living/simple_animal/M as mob)
|
||||
if(M.melee_damage_upper == 0)
|
||||
M.emote("[M.friendly] [src]")
|
||||
@@ -136,7 +125,6 @@
|
||||
updatehealth()
|
||||
|
||||
|
||||
|
||||
/mob/living/carbon/alien/larva/attack_paw(mob/living/carbon/monkey/M as mob)
|
||||
if(!(istype(M, /mob/living/carbon/monkey))) return//Fix for aliens receiving double messages when attacking other aliens.
|
||||
|
||||
|
||||
@@ -204,22 +204,6 @@
|
||||
apply_damage(rand(20,30), BRUTE, affecting, run_armor_check(affecting, "melee"))
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/meteorhit(O as obj)
|
||||
for(var/mob/M in viewers(src, null))
|
||||
if ((M.client && !( M.blinded )))
|
||||
M.show_message("\red [src] has been hit by [O]", 1)
|
||||
if (health > 0)
|
||||
var/obj/item/organ/limb/affecting = get_organ(pick("chest", "chest", "chest", "head"))
|
||||
if(!affecting) return
|
||||
if (istype(O, /obj/effect/immovablerod))
|
||||
if(affecting.take_damage(101, 0))
|
||||
update_damage_overlays(0)
|
||||
else
|
||||
if(affecting.take_damage((istype(O, /obj/effect/meteor/small) ? 10 : 25), 30))
|
||||
update_damage_overlays(0)
|
||||
updatehealth()
|
||||
return
|
||||
|
||||
|
||||
/mob/living/carbon/human/attack_animal(mob/living/simple_animal/M as mob)
|
||||
if(M.melee_damage_upper == 0)
|
||||
|
||||
@@ -248,17 +248,6 @@
|
||||
/mob/living/carbon/slime/attack_ui(slot)
|
||||
return
|
||||
|
||||
/mob/living/carbon/slime/meteorhit(O as obj)
|
||||
for(var/mob/M in viewers(src, null))
|
||||
if ((M.client && !( M.blinded )))
|
||||
M.show_message(text("<span class='warning'> [] has been hit by []</span>", src, O), 1)
|
||||
if (health > 0)
|
||||
adjustBruteLoss((istype(O, /obj/effect/meteor/small) ? 10 : 25))
|
||||
adjustFireLoss(30)
|
||||
|
||||
updatehealth()
|
||||
return
|
||||
|
||||
|
||||
/mob/living/carbon/slime/attack_slime(mob/living/carbon/slime/M as mob)
|
||||
if (!ticker)
|
||||
|
||||
@@ -68,19 +68,6 @@
|
||||
now_pushing = null
|
||||
|
||||
|
||||
/mob/living/carbon/monkey/meteorhit(obj/O as obj)
|
||||
for(var/mob/M in viewers(src, null))
|
||||
M.show_message(text("\red [] has been hit by []", src, O), 1)
|
||||
if (health > 0)
|
||||
var/shielded = 0
|
||||
adjustBruteLoss(30)
|
||||
if ((O.icon_state == "flaming" && !( shielded )))
|
||||
adjustFireLoss(40)
|
||||
health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss()
|
||||
return
|
||||
|
||||
//mob/living/carbon/monkey/bullet_act(var/obj/item/projectile/Proj)taken care of in living
|
||||
|
||||
/mob/living/carbon/monkey/attack_paw(mob/M as mob)
|
||||
..()
|
||||
|
||||
@@ -373,4 +360,4 @@
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/monkey/canBeHandcuffed()
|
||||
return 1
|
||||
return 1
|
||||
|
||||
@@ -376,27 +376,16 @@ var/list/ai_list = list()
|
||||
usr << "Target is not on or near any active cameras on the station. We'll check again in 5 seconds (unless you use the cancel-camera verb)."
|
||||
sleep(40)
|
||||
continue
|
||||
|
||||
return
|
||||
|
||||
return
|
||||
|
||||
/mob/living/silicon/ai/meteorhit(obj/O as obj)
|
||||
for(var/mob/M in viewers(src, null))
|
||||
M.show_message(text("\red [] has been hit by []", src, O), 1)
|
||||
//Foreach goto(19)
|
||||
if (health > 0)
|
||||
adjustBruteLoss(30)
|
||||
if ((O.icon_state == "flaming"))
|
||||
adjustFireLoss(40)
|
||||
updatehealth()
|
||||
return
|
||||
|
||||
/mob/living/silicon/ai/bullet_act(var/obj/item/projectile/Proj)
|
||||
..(Proj)
|
||||
updatehealth()
|
||||
return 2
|
||||
|
||||
|
||||
/mob/living/silicon/ai/attack_alien(mob/living/carbon/alien/humanoid/M as mob)
|
||||
if (!ticker)
|
||||
M << "You cannot attack people before the game has started."
|
||||
|
||||
@@ -336,21 +336,9 @@
|
||||
if(3.0)
|
||||
if (stat != 2)
|
||||
adjustBruteLoss(30)
|
||||
|
||||
return
|
||||
|
||||
|
||||
/mob/living/silicon/robot/meteorhit(obj/O as obj)
|
||||
for(var/mob/M in viewers(src, null))
|
||||
M.show_message(text("\red [src] has been hit by [O]"), 1)
|
||||
//Foreach goto(19)
|
||||
if (health > 0)
|
||||
adjustBruteLoss(30)
|
||||
if ((O.icon_state == "flaming"))
|
||||
adjustFireLoss(40)
|
||||
updatehealth()
|
||||
return
|
||||
|
||||
|
||||
/mob/living/silicon/robot/bullet_act(var/obj/item/projectile/Proj)
|
||||
..(Proj)
|
||||
|
||||
@@ -1183,13 +1183,8 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on)
|
||||
|
||||
return val
|
||||
|
||||
|
||||
// damage and destruction acts
|
||||
|
||||
/obj/machinery/power/apc/meteorhit(var/obj/O as obj)
|
||||
|
||||
set_broken()
|
||||
return
|
||||
|
||||
/obj/machinery/power/apc/emp_act(severity)
|
||||
if(cell)
|
||||
cell.emp_act(severity)
|
||||
|
||||
@@ -32,9 +32,6 @@ var/const/GRAV_NEEDS_WRENCH = 3
|
||||
if(severity == 1) // Very sturdy.
|
||||
set_broken()
|
||||
|
||||
/obj/machinery/gravity_generator/meteorhit()
|
||||
return
|
||||
|
||||
/obj/machinery/gravity_generator/update_icon()
|
||||
..()
|
||||
icon_state = "[get_status()]_[sprite_number]"
|
||||
|
||||
@@ -36,8 +36,6 @@
|
||||
/obj/machinery/field/containment/ex_act(severity)
|
||||
return 0
|
||||
|
||||
/obj/machinery/field/containment/meteorhit()
|
||||
return 0
|
||||
|
||||
/obj/machinery/field/containment/Crossed(atom/movable/mover)
|
||||
if(isliving(mover))
|
||||
|
||||
@@ -88,8 +88,6 @@
|
||||
src.use_power = 1 */
|
||||
return 1
|
||||
|
||||
/obj/machinery/field/containment/meteorhit()
|
||||
return 0
|
||||
|
||||
/obj/machinery/power/emitter/process()
|
||||
if(stat & (BROKEN))
|
||||
|
||||
@@ -163,11 +163,6 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
|
||||
return
|
||||
|
||||
|
||||
/obj/structure/particle_accelerator/meteorhit()
|
||||
if(prob(50))
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/structure/particle_accelerator/update_icon()
|
||||
switch(construction_state)
|
||||
if(0,1)
|
||||
@@ -350,12 +345,6 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/particle_accelerator/meteorhit()
|
||||
if(prob(50))
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/particle_accelerator/proc/update_state()
|
||||
return 0
|
||||
|
||||
|
||||
@@ -138,13 +138,6 @@ var/list/solars_list = list()
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/power/solar/meteorhit()
|
||||
if(stat & !BROKEN)
|
||||
broken()
|
||||
else
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/machinery/power/solar/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
@@ -459,11 +452,6 @@ var/list/solars_list = list()
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/machinery/power/solar_control/meteorhit()
|
||||
broken()
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/power/solar_control/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
if(src)//Do not add to this if() statement, otherwise the meteor won't delete them
|
||||
if(A)
|
||||
|
||||
A.meteorhit(src)
|
||||
A.ex_act(2)
|
||||
playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1)
|
||||
|
||||
for(var/mob/M in range(10, src))
|
||||
|
||||
@@ -64,10 +64,6 @@
|
||||
if (prob(50))
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/chem_dispenser/meteorhit()
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/**
|
||||
* The ui_interact proc is used to open and update Nano UIs
|
||||
* If ui_interact is not used then the UI will not update correctly
|
||||
@@ -276,10 +272,6 @@
|
||||
if (prob(50))
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/chem_master/meteorhit()
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/machinery/chem_master/power_change()
|
||||
if(powered())
|
||||
stat &= ~NOPOWER
|
||||
|
||||
@@ -43,9 +43,6 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
|
||||
if (prob(50))
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/r_n_d/circuit_imprinter/meteorhit()
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/machinery/r_n_d/circuit_imprinter/proc/check_mat(datum/design/being_built, var/M)
|
||||
switch(M)
|
||||
|
||||
@@ -28,9 +28,6 @@ Note: Must be placed within 3 tiles of the R&D Console
|
||||
T += S.rating
|
||||
decon_mod = T
|
||||
|
||||
/obj/machinery/r_n_d/destructive_analyzer/meteorhit()
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/machinery/r_n_d/destructive_analyzer/proc/ConvertReqString2List(var/list/source_list)
|
||||
var/list/temp_list = params2list(source_list)
|
||||
|
||||
@@ -74,10 +74,6 @@
|
||||
produce_heat(heat_gen)
|
||||
delay = initial(delay)
|
||||
|
||||
/obj/machinery/r_n_d/server/meteorhit(var/obj/O as obj)
|
||||
griefProtection()
|
||||
..()
|
||||
|
||||
|
||||
/obj/machinery/r_n_d/server/emp_act(severity)
|
||||
griefProtection()
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 12 KiB |
@@ -835,6 +835,7 @@
|
||||
#include "code\modules\events\immovable_rod.dm"
|
||||
#include "code\modules\events\ion_storm.dm"
|
||||
#include "code\modules\events\mass_hallucination.dm"
|
||||
#include "code\modules\events\meateor_wave.dm"
|
||||
#include "code\modules\events\meteor_wave.dm"
|
||||
#include "code\modules\events\ninja.dm"
|
||||
#include "code\modules\events\prison_break.dm"
|
||||
|
||||
Reference in New Issue
Block a user