Merge remote-tracking branch 'upstream/master' into poolit

Conflicts:
	code/game/objects/structures/displaycase.dm
	code/game/objects/structures/grille.dm
	code/game/objects/structures/lamarr_cage.dm
This commit is contained in:
Tigercat2000
2015-06-22 13:40:07 -07:00
104 changed files with 541 additions and 624 deletions
@@ -5432,7 +5432,7 @@
"cax" = (/obj/structure/noticeboard{pixel_y = 32},/obj/structure/table,/obj/item/weapon/reagent_containers/glass/beaker/large{pixel_y = 3},/obj/item/weapon/reagent_containers/glass/beaker{pixel_x = 8; pixel_y = 2},/obj/item/weapon/reagent_containers/glass/bottle/charcoal{pixel_x = -5; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/bottle/morphine,/obj/item/weapon/reagent_containers/syringe/epinephrine{pixel_x = 3; pixel_y = -2},/obj/item/weapon/reagent_containers/dropper,/turf/simulated/floor{dir = 1; icon_state = "whiteblue"},/area/medical/medbay2{name = "Medbay Storage"})
"cay" = (/obj/structure/closet/secure_closet/medical3,/obj/item/weapon/screwdriver{pixel_y = 6},/obj/structure/sign/nosmoking_2{pixel_x = 0; pixel_y = 30},/turf/simulated/floor{dir = 1; icon_state = "whiteblue"},/area/medical/medbay2{name = "Medbay Storage"})
"caz" = (/obj/structure/closet/secure_closet/medical3,/obj/machinery/light{dir = 1},/obj/machinery/alarm{pixel_y = 24},/obj/item/weapon/screwdriver{pixel_y = 6},/turf/simulated/floor{dir = 1; icon_state = "whiteblue"},/area/medical/medbay2{name = "Medbay Storage"})
"caA" = (/obj/item/device/radio/intercom{broadcasting = 1; freerange = 0; frequency = 1485; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = 30},/obj/structure/closet/wardrobe/white/medical,/turf/simulated/floor{dir = 1; icon_state = "whiteblue"},/area/medical/medbay2{name = "Medbay Storage"})
"caA" = (/obj/item/device/radio/intercom{broadcasting = 1; freerange = 0; frequency = 1485; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = 30},/obj/structure/closet/wardrobe/medical_white,/turf/simulated/floor{dir = 1; icon_state = "whiteblue"},/area/medical/medbay2{name = "Medbay Storage"})
"caB" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor{dir = 5; icon_state = "whiteblue"},/area/medical/medbay2{name = "Medbay Storage"})
"caC" = (/obj/machinery/power/apc{dir = 8; name = "Medical Security Checkpoint APC"; pixel_x = -24; pixel_y = 0},/obj/machinery/alarm{pixel_y = 28},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/structure/closet/secure_closet/security/med,/turf/simulated/floor{icon_state = "red"; dir = 9},/area/security/checkpoint/medical)
"caD" = (/obj/machinery/recharger{pixel_y = 4},/obj/structure/table/reinforced,/obj/machinery/requests_console{department = "Security"; departmentType = 5; pixel_y = 30},/obj/machinery/light{dir = 1},/obj/machinery/camera{c_tag = "Security Post - Medbay"; dir = 2; network = list("SS13","Medbay")},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/checkpoint/medical)
@@ -7978,7 +7978,7 @@
"cXv" = (/obj/machinery/smartfridge,/turf/simulated/wall,/area/crew_quarters/bar)
"cXw" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor/preopen{id_tag = "Xenolab"; name = "test chamber blast door"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"})
"cXx" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id_tag = "Xenolab"; name = "test chamber blast door"},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"})
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+1 -1
View File
@@ -593,7 +593,7 @@
"lS" = (/obj/structure/closet/wardrobe/orange,/turf/simulated/floor/plating/airless,/area/space)
"lT" = (/obj/structure/window/basic{dir = 4},/turf/space,/area/space)
"lU" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/derelict/arrival)
"lV" = (/obj/structure/closet/wardrobe,/turf/simulated/floor,/area/derelict/arrival)
"lV" = (/obj/structure/closet/wardrobe/generic,/turf/simulated/floor,/area/derelict/arrival)
"lW" = (/turf/simulated/floor/plating/airless{icon_state = "floorscorched1"},/area/derelict/hallway/primary)
"lX" = (/obj/structure/closet,/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary)
"lY" = (/turf/simulated/floor,/area/derelict/atmospherics)
@@ -317,7 +317,7 @@
"ge" = (/obj/item/weapon/storage/secure/safe/sc_ssafe{pixel_x = 4; pixel_y = -26},/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/northblock)
"gf" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/captain,/obj/item/clothing/under/rank/captain,/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/blood/splatter,/obj/item/weapon/gun/energy/laser/retro/sc_retro,/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/northblock)
"gg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/awaymission/midblock)
"gh" = (/obj/structure/closet/wardrobe,/turf/simulated/floor,/area/awaymission/midblock)
"gh" = (/obj/structure/closet/wardrobe/generic,/turf/simulated/floor,/area/awaymission/midblock)
"gi" = (/turf/simulated/floor,/area/awaymission/midblock)
"gj" = (/obj/structure/closet/wardrobe/pjs,/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"; tag = ""},/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"; tag = ""},/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/awaymission/midblock)
"gk" = (/obj/structure/closet/wardrobe/pink,/turf/simulated/floor,/area/awaymission/midblock)
+1 -1
View File
@@ -4614,7 +4614,7 @@
"bKL" = (/turf/simulated/floor{dir = 1; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/medical/medbay2)
"bKM" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 4; level = 2},/obj/machinery/atmospherics/pipe/simple/visible/cyan{level = 2},/turf/simulated/floor/plating,/area/atmos)
"bKN" = (/obj/structure/table,/obj/item/clothing/suit/straight_jacket,/obj/item/clothing/mask/muzzle,/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; freerange = 0; frequency = 1485; listening = 1; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -27},/obj/machinery/light,/obj/item/weapon/gun/syringe,/turf/simulated/floor{tag = "icon-whiteblue (SOUTHWEST)"; icon_state = "whiteblue"; dir = 10},/area/medical/medbay3)
"bKO" = (/obj/machinery/camera{c_tag = "Medbay Equipment"; dir = 1; network = list("SS13")},/obj/structure/closet/wardrobe/white/medical,/turf/simulated/floor{dir = 2; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/medbay3)
"bKO" = (/obj/machinery/camera{c_tag = "Medbay Equipment"; dir = 1; network = list("SS13")},/obj/structure/closet/wardrobe/medical_white,/turf/simulated/floor{dir = 2; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/medbay3)
"bKP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor{dir = 2; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/medbay3)
"bKQ" = (/obj/structure/table,/obj/item/weapon/storage/box/gloves{pixel_y = 8},/obj/item/weapon/storage/box/masks{pixel_y = -3},/obj/machinery/light,/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/item/weapon/wirecutters{desc = "This cuts gloves."; name = "Glove Snippers"},/turf/simulated/floor{tag = "icon-whiteblue (SOUTHEAST)"; icon_state = "whiteblue"; dir = 6},/area/medical/medbay3)
"bKR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/medical/medbay2)
+1 -1
View File
@@ -498,7 +498,7 @@
"jM" = (/obj/structure/closet/wardrobe/orange,/turf/simulated/floor/airless,/area/space)
"jN" = (/obj/structure/window/basic{dir = 4},/turf/space,/area/space)
"jO" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/derelict/arrival)
"jP" = (/obj/structure/closet/wardrobe,/turf/simulated/floor,/area/derelict/arrival)
"jP" = (/obj/structure/closet/wardrobe/generic,/turf/simulated/floor,/area/derelict/arrival)
"jQ" = (/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/derelict/hallway/primary)
"jR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/window/reinforced,/turf/simulated/floor/airless,/area/space)
"jS" = (/obj/structure/window/reinforced,/turf/simulated/floor/airless,/area/space)
+1 -2
View File
@@ -28,12 +28,11 @@ var/Debug = 0 // global debug switch
var/Debug2 = 1 // enables detailed job debug file in secrets
//This was a define, but I changed it to a variable so it can be changed in-game.(kept the all-caps definition because... code...) -Errorage
var/MAX_EXPLOSION_RANGE = 14
var/MAX_EX_DEVESTATION_RANGE = 3
var/MAX_EX_HEAVY_RANGE = 7
var/MAX_EX_LIGHT_RANGE = 14
var/MAX_EX_FLASH_RANGE = 14
//#define MAX_EXPLOSION_RANGE 14 // Defaults to 12 (was 8) -- TLE
var/MAX_EX_FLAME_RANGE = 14
var/list/be_special_flags = list(
"traitor" = BE_TRAITOR,
+16 -3
View File
@@ -346,9 +346,6 @@
if("protect_roles_from_antagonist")
config.protect_roles_from_antagonist = 1
if("reactionary_explosions")
config.reactionary_explosions = 1
if ("probability")
var/prob_pos = findtext(value, " ")
var/prob_name = null
@@ -561,6 +558,22 @@
config.bones_can_break = value
if("limbs_can_break")
config.limbs_can_break = value
if("reactionary_explosions")
config.reactionary_explosions = 1
if("bombcap")
var/BombCap = text2num(value)
if (!BombCap)
continue
if (BombCap < 4)
BombCap = 4
if (BombCap > 128)
BombCap = 128
MAX_EX_DEVESTATION_RANGE = round(BombCap/4)
MAX_EX_HEAVY_RANGE = round(BombCap/2)
MAX_EX_LIGHT_RANGE = BombCap
MAX_EX_FLASH_RANGE = BombCap
MAX_EX_FLAME_RANGE = BombCap
if("default_laws")
config.default_laws = text2num(value)
else
+1 -1
View File
@@ -54,7 +54,7 @@
return
src.audible_message("\icon[src] <b>[src]</b> beeps, \"Enjoy the pizza!\"")
src.visible_message("<span class='userdanger'>\The [src] violently explodes!</span>")
explosion(src.loc,1,2,4) //Identical to a minibomb
explosion(src.loc,1,2,4,flame_range = 2) //Identical to a minibomb
qdel(src)
/obj/item/device/pizza_bomb/attackby(var/obj/item/I, var/mob/user, params)
+2 -1
View File
@@ -5,10 +5,11 @@
var/ex_severe = 1
var/ex_heavy = 2
var/ex_light = 3
var/ex_flash = 4
/obj/effect/proc_holder/spell/wizard/targeted/explosion/cast(list/targets)
for(var/mob/living/target in targets)
explosion(target.loc,ex_severe,ex_heavy,ex_light)
explosion(target.loc,ex_severe,ex_heavy,ex_light,ex_flash)
return
+1 -1
View File
@@ -272,7 +272,7 @@
action_icon_state = "fireball"
/obj/effect/proc_holder/spell/wizard/turf/fireball/cast(var/turf/T)
explosion(T, -1, 0, 2, 3, 0)
explosion(T, -1, 0, 2, 3, 0, flame_range = 2)
/obj/effect/proc_holder/spell/wizard/targeted/inflict_handler/fireball
-2
View File
@@ -89,8 +89,6 @@ var/global/list/ghdel_profiling = list()
*/
/atom/proc/meteorhit(obj/meteor as obj)
return
/atom/proc/allow_drop()
return 1
+1 -1
View File
@@ -34,7 +34,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
del(src)
+1 -1
View File
@@ -99,7 +99,7 @@ The "dust" will damage the hull of the station causin minor hull breaches.
playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1)
if(ismob(A))
A.meteorhit(src)//This should work for now I guess
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
@@ -196,7 +196,7 @@ rcd light flash thingy on matter drain
V.show_message("<span class='notice'>You hear a loud electrical buzzing sound!</span>", 2)
spawn(50)
explosion(get_turf(M), 0,1,1,0)
del(M)
qdel(M)
else src << "<span class='notice'>Out of uses.</span>"
else src << "<span class='notice'>That's not a machine.</span>"
+1 -1
View File
@@ -37,7 +37,7 @@
var/waitduration = rand(3000,9000)
while(waveduration - world.time > 0)
sleep(20)
spawn() spawn_meteors(6)
spawn() spawn_meteors(6, meteors_normal)
sleep(waitduration)
nometeors = 0
+225 -120
View File
@@ -1,149 +1,254 @@
/*/proc/meteor_wave(var/number = meteors_in_wave)
if(!ticker || wavesecret)
return
//Meteors probability of spawning during a given wave
/var/list/meteors_normal = 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) //for normal meteor event
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)
/var/list/meteors_threatening = list(/obj/effect/meteor/medium=4, /obj/effect/meteor/big=8, \
/obj/effect/meteor/flaming=3, /obj/effect/meteor/irradiated=3) //for threatening meteor event
/var/list/meteors_catastrophic = list(/obj/effect/meteor/medium=5, /obj/effect/meteor/big=75, \
/obj/effect/meteor/flaming=10, /obj/effect/meteor/irradiated=10, /obj/effect/meteor/tunguska = 1) //for catastrophic meteor event
/var/list/meteors_dust = list(/obj/effect/meteor/dust) //for space dust event
///////////////////////////////
//Meteor spawning global procs
///////////////////////////////
/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()
var/startx
var/starty
var/endx
var/endy
/proc/spawn_meteor(var/list/meteortypes)
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)
while (!istype(pickedstart, /turf/space))
var/startSide = pick(cardinal)
pickedstart = spaceDebrisStartLoc(startSide, 1)
pickedgoal = spaceDebrisFinishLoc(startSide, 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 )
if(max_i<=0)
return
var/Me = pickweight(meteortypes)
var/obj/effect/meteor/M = new Me(pickedstart)
M.dest = pickedgoal
M.z_original = 1
spawn(0)
walk_towards(M, M.dest, 1)
return
/proc/spaceDebrisStartLoc(startSide, Z)
var/starty
var/startx
switch(startSide)
if(NORTH)
starty = world.maxy-(TRANSITIONEDGE+1)
startx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1))
if(EAST)
starty = rand((TRANSITIONEDGE+1),world.maxy-(TRANSITIONEDGE+1))
startx = world.maxx-(TRANSITIONEDGE+1)
if(SOUTH)
starty = (TRANSITIONEDGE+1)
startx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1))
if(WEST)
starty = rand((TRANSITIONEDGE+1), world.maxy-(TRANSITIONEDGE+1))
startx = (TRANSITIONEDGE+1)
var/turf/T = locate(startx, starty, Z)
return T
/proc/spaceDebrisFinishLoc(startSide, Z)
var/endy
var/endx
switch(startSide)
if(NORTH)
endy = TRANSITIONEDGE
endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE)
if(EAST)
endy = rand(TRANSITIONEDGE, world.maxy-TRANSITIONEDGE)
endx = TRANSITIONEDGE
if(SOUTH)
endy = world.maxy-TRANSITIONEDGE
endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE)
if(WEST)
endy = rand(TRANSITIONEDGE,world.maxy-TRANSITIONEDGE)
endx = world.maxx-TRANSITIONEDGE
var/turf/T = locate(endx, endy, Z)
return T
///////////////////////
//The meteor effect
//////////////////////
/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'
var/z_original = 1
/obj/effect/meteor/small
name = "small meteor"
icon_state = "smallf"
pass_flags = PASSTABLE | PASSGRILLE
var/meteordrop = /obj/item/weapon/ore/iron
var/dropamt = 2
/obj/effect/meteor/Move()
if(z != z_original || loc == dest)
qdel(src)
return
. = ..() //process movement...
if(.)//.. if did move, ram the turf we get in
var/turf/T = get_turf(loc)
ram_turf(T)
if(prob(10) && !istype(T, /turf/space))//randomly takes a 'hit' from ramming
get_hit()
return .
/obj/effect/meteor/Destroy()
walk(src,0) //this cancels the walk_towards() proc
..()
/obj/effect/meteor/New()
..()
SpinAnimation()
/obj/effect/meteor/Bump(atom/A)
spawn(0)
if(A)
ram_turf(get_turf(A))
playsound(src.loc, meteorsound, 40, 1)
get_hit()
if (A)
A.meteorhit(src)
playsound(get_turf(src), 'sound/effects/meteorimpact.ogg', 40, 1)
if (--src.hits <= 0)
/obj/effect/meteor/proc/ram_turf(var/turf/T)
//first bust whatever is in the turf
for(var/atom/A in T)
if(A != src)
A.ex_act(hitpwr)
//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
//then, ram the turf if it still exists
if(T)
T.ex_act(hitpwr)
/obj/effect/meteor/ex_act(severity)
if (severity < 4)
//process getting 'hit' by colliding with a dense object
//or randomly when ramming turfs
/obj/effect/meteor/proc/get_hit()
hits--
if(hits <= 0)
make_debris()
meteor_effect(heavy)
qdel(src)
/obj/effect/meteor/ex_act()
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)
M.playsound_local(src.loc, 'sound/effects/meteorimpact.ogg', 50, 1, get_rand_frequency(), 10)
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, params)
if(istype(W, /obj/item/weapon/pickaxe))
del(src)
qdel(src)
return
..()
..()
/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/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)
///////////////////////
//Meteor types
///////////////////////
//Dust
/obj/effect/meteor/dust
name = "space dust"
icon_state = "dust"
pass_flags = PASSTABLE | PASSGRILLE
hits = 1
hitpwr = 3
meteorsound = 'sound/weapons/tap.ogg'
meteordrop = /obj/item/weapon/ore/glass
//Medium-sized
/obj/effect/meteor/medium
name = "meteor"
dropamt = 3
/obj/effect/meteor/medium/meteor_effect()
..(heavy)
explosion(src.loc, 0, 1, 2, 3, 0)
//Large-sized
/obj/effect/meteor/big
name = "big meteor"
icon_state = "large"
hits = 6
heavy = 1
dropamt = 4
/obj/effect/meteor/big/meteor_effect()
..(heavy)
explosion(src.loc, 1, 2, 3, 4, 0)
//Flaming meteor
/obj/effect/meteor/flaming
name = "flaming meteor"
icon_state = "flaming"
hits = 5
heavy = 1
meteorsound = 'sound/effects/bamf.ogg'
meteordrop = /obj/item/weapon/ore/plasma
/obj/effect/meteor/flaming/meteor_effect()
..(heavy)
explosion(src.loc, 1, 2, 3, 4, 0, 0, flame_range = 5)
//Radiation meteor
/obj/effect/meteor/irradiated
name = "glowing meteor"
icon_state = "glowing"
heavy = 1
meteordrop = /obj/item/weapon/ore/uranium
/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)
//Station buster Tunguska
/obj/effect/meteor/tunguska
name = "tunguska meteor"
icon_state = "flaming"
desc = "Your life briefly passes before your eyes the moment you lay them on this monstruosity."
hits = 30
hitpwr = 1
heavy = 1
meteorsound = 'sound/effects/bamf.ogg'
meteordrop = /obj/item/weapon/ore/plasma
/obj/effect/meteor/tunguska/meteor_effect()
..(heavy)
explosion(src.loc, 5, 10, 15, 20, 0)
/obj/effect/meteor/tunguska/Bump()
..()
if(prob(20))
explosion(src.loc,2,4,6,8)
+2 -2
View File
@@ -555,8 +555,8 @@
/obj/item/weapon/spellbook/oneuse/fireball/recoil(mob/user as mob)
..()
explosion(user.loc, -1, 0, 2, 3, 0)
del(src)
explosion(user.loc, -1, 0, 2, 3, 0, flame_range = 2)
qdel(src)
/obj/item/weapon/spellbook/oneuse/smoke
spell = /obj/effect/proc_holder/spell/wizard/targeted/smoke
@@ -334,11 +334,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/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob, params)
if(iswelder(W) && src.destroyed)
if(weld(W, user))
@@ -184,11 +184,6 @@
emergencyShutdown()
return ..()
/obj/machinery/computer/HolodeckControl/meteorhit(var/obj/O as obj)
emergencyShutdown()
..()
/obj/machinery/computer/HolodeckControl/emp_act(severity)
emergencyShutdown()
..()
-12
View File
@@ -22,21 +22,9 @@
/obj/machinery/computer/process()
if(stat & (NOPOWER|BROKEN))
luminosity = 0
return 0
luminosity = 2
return 1
/obj/machinery/computer/meteorhit(var/obj/O as obj)
for(var/x in verbs)
verbs -= x
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()
..()
+1 -13
View File
@@ -108,14 +108,6 @@ for reference:
qdel(src)
return
meteorhit()
visible_message("\red <B>The barricade is smashed apart!</B>")
new /obj/item/stack/sheet/wood(get_turf(src))
new /obj/item/stack/sheet/wood(get_turf(src))
new /obj/item/stack/sheet/wood(get_turf(src))
del(src)
return
blob_act()
src.health -= 25
if (src.health <= 0)
@@ -200,7 +192,7 @@ for reference:
if (src.health <= 0)
src.explode()
..()
emag_act(user as mob)
if (!emagged)
emagged = 1
@@ -236,10 +228,6 @@ for reference:
anchored = !anchored
icon_state = "barrier[src.locked]"
meteorhit()
src.explode()
return
blob_act()
src.health -= 25
if (src.health <= 0)
+1
View File
@@ -97,6 +97,7 @@
icon = 'icons/obj/doors/vault.dmi'
opacity = 1
assembly_type = /obj/structure/door_assembly/door_assembly_highsecurity //Until somebody makes better sprites.
explosion_block = 2
/obj/machinery/door/airlock/freezer
name = "Freezer Airlock"
-5
View File
@@ -123,11 +123,6 @@
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)
-1
View File
@@ -175,7 +175,6 @@
/obj/machinery/door/window/hitby(AM as mob|obj)
..()
visible_message("<span class='danger'>\The [src] was hit by \the [AM].</span>")
var/tforce = 0
if(ismob(AM))
tforce = 40
+21 -7
View File
@@ -21,10 +21,15 @@ var/list/doppler_arrays = list()
/obj/machinery/doppler_array/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(istype(O, /obj/item/weapon/wrench))
if(!anchored && !isinspace())
anchored = 1
power_change()
user << "<span class='notice'>You fasten [src].</span>"
else if(anchored)
anchored = 0
power_change()
user << "<span class='notice'>You unfasten [src].</span>"
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
anchored = !anchored
power_change()
user << "You [anchored ? "wrench" : "unwrench"] [src]."
/obj/machinery/doppler_array/verb/rotate()
set name = "Rotate Tachyon-doppler Dish"
@@ -33,12 +38,13 @@ var/list/doppler_arrays = list()
if(!usr || !isturf(usr.loc))
return
if(usr.stat || usr.restrained())
if(usr.stat || usr.restrained() || !usr.canmove)
return
src.dir = turn(src.dir, 90)
return
/obj/machinery/doppler_array/proc/sense_explosion(var/x0,var/y0,var/z0,var/devastation_range,var/heavy_impact_range,var/light_impact_range,var/took)
/obj/machinery/doppler_array/proc/sense_explosion(var/x0,var/y0,var/z0,var/devastation_range,var/heavy_impact_range,var/light_impact_range,
var/took,var/orig_dev_range,var/orig_heavy_range,var/orig_light_range)
if(stat & NOPOWER) return
if(z != z0) return
@@ -59,10 +65,18 @@ var/list/doppler_arrays = list()
if(distance > 100) return
if(!(direct & dir)) return
var/message = "Explosive disturbance detected - Epicenter at: grid ([x0],[y0]). Epicenter radius: [devastation_range]. Outer radius: [heavy_impact_range]. Shockwave radius: [light_impact_range]. Temporal displacement of tachyons: [took] seconds."
var/list/messages = list("Explosive disturbance detected.", \
"Epicenter at: grid ([x0],[y0]). Temporal displacement of tachyons: [took] seconds.", \
"Factual: Epicenter radius: [devastation_range]. Outer radius: [heavy_impact_range]. Shockwave radius: [light_impact_range].")
// If the bomb was capped, say it's theoretical size.
if(devastation_range < orig_dev_range || heavy_impact_range < orig_heavy_range || light_impact_range < orig_light_range)
messages += "Theoretical: Epicenter radius: [orig_dev_range]. Outer radius: [orig_heavy_range]. Shockwave radius: [orig_light_range]."
for(var/mob/O in hearers(src, null))
O.show_message("<span class='game say'><span class='name'>[src]</span> states coldly, \"[message]\"",2)
for(var/message in messages)
O.show_message("<span class='game say'><span class='name'>[src]</span> states coldly, \"[message]\"",2)
/obj/machinery/doppler_array/power_change()
+3 -7
View File
@@ -183,23 +183,19 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
/obj/machinery/hologram/ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
if(2.0)
if (prob(50))
del(src)
qdel(src)
if(3.0)
if (prob(5))
del(src)
qdel(src)
return
/obj/machinery/hologram/blob_act()
del(src)
return
/obj/machinery/hologram/meteorhit()
del(src)
return
/obj/machinery/hologram/Del()
if(hologram)
src:clear_holo()
-21
View File
@@ -55,18 +55,6 @@
..()
/obj/machinery/shield/meteorhit()
src.health -= max_health*0.75 //3/4 health as damage
if(src.health <= 0)
visible_message("\blue The [src] dissipates")
del(src)
return
opacity = 1
spawn(20) if(src) opacity = 0
return
/obj/machinery/shield/bullet_act(var/obj/item/projectile/Proj)
health -= Proj.damage
..()
@@ -103,8 +91,6 @@
/obj/machinery/shield/hitby(AM as mob|obj)
//Let everyone know we've been hit!
visible_message("\red <B>[src] was hit by [AM].</B>")
//Super realistic, resource-intensive, real-time damage calculations.
var/tforce = 0
@@ -192,13 +178,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)
+7 -4
View File
@@ -187,8 +187,10 @@
if(adminlog)
message_admins(adminlog)
log_game(adminlog)
explosion(get_turf(src),2,5,11)
del(src)
explosion(get_turf(src),2,5,11, flame_range = 11)
if(src.loc && istype(src.loc,/obj/machinery/syndicatebomb/))
qdel(src.loc)
qdel(src)
/obj/item/weapon/bombcore/proc/defuse()
//Note: Because of how var/defused is used you shouldn't override this UNLESS you intend to set the var to 0 or
@@ -269,16 +271,17 @@
var/HeavyExplosion = 2
var/MediumExplosion = 5
var/LightExplosion = 11
var/Flames = 11
/obj/item/weapon/bombcore/badmin/explosion/detonate()
explosion(get_turf(src),HeavyExplosion,MediumExplosion,LightExplosion)
explosion(get_turf(src),HeavyExplosion,MediumExplosion,LightExplosion, flame_range = Flames)
/obj/item/weapon/bombcore/miniature
name = "small bomb core"
w_class = 2
/obj/item/weapon/bombcore/miniature/detonate()
explosion(src.loc,1,2,4) //Identical to a minibomb
explosion(src.loc,1,2,4,flame_range = 2) //Identical to a minibomb
qdel(src)
///Syndicate Detonator (aka the big red button)///
-4
View File
@@ -422,10 +422,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)
+2 -2
View File
@@ -363,8 +363,8 @@
throw_impact(atom/hit_atom)
if(primed)
explosion(hit_atom, 0, 0, 2, 4)
del(src)
explosion(hit_atom, 0, 0, 2, 4, 0)
qdel(src)
else
..()
return
+1 -4
View File
@@ -632,7 +632,7 @@
T.Entered(O)
if(prob(30))
explosion(T, 0, 0, 1, 3)
explosion(get_turf(loc), 0, 0, 1, 3)
spawn(0)
if(wreckage)
var/obj/effect/decal/mecha_wreckage/WR = new wreckage(T)
@@ -709,9 +709,6 @@
take_damage(30, "brute")
return
/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)
+2 -2
View File
@@ -91,11 +91,11 @@
return answer
emp_act()
del src
qdel(src)
return
ex_act()
del src
qdel(src)
return
proc/in_mecha()
+2 -3
View File
@@ -99,7 +99,6 @@
/obj/structure/alien/resin/hitby(atom/movable/AM)
..()
visible_message("<span class='danger'>[src] was hit by [AM].</span>")
var/tforce = 0
if(!isobj(AM))
tforce = 10
@@ -209,8 +208,8 @@
new /obj/structure/alien/weeds(T, linked_node)
/obj/structure/alien/weeds/ex_act(severity, target)
del(src)
/obj/structure/alien/weeds/ex_act(severity)
qdel(src)
/obj/structure/alien/weeds/attackby(obj/item/I, mob/user, params)
+6 -6
View File
@@ -1100,11 +1100,11 @@ steam.start() -- spawns the effect
qdel(src)
blob_act()
del(src)
qdel(src)
bullet_act()
if(metal==1 || prob(50))
del(src)
qdel(src)
attack_hand(var/mob/user)
if ((HULK in user.mutations) || (prob(75 - metal*25)))
@@ -1113,7 +1113,7 @@ steam.start() -- spawns the effect
if ((O.client && !( O.blinded )))
O << "\red [user] smashes through the foamed metal."
del(src)
qdel(src)
else
user << "\blue You hit the metal foam but bounce off it."
return
@@ -1127,8 +1127,8 @@ steam.start() -- spawns the effect
for(var/mob/O in viewers(src))
if (O.client)
O << "\red [G.assailant] smashes [G.affecting] through the foamed metal wall."
del(I)
del(src)
qdel(I)
qdel(src)
return
if(prob(I.force*20 - metal*25))
@@ -1136,7 +1136,7 @@ steam.start() -- spawns the effect
for(var/mob/O in oviewers(user))
if ((O.client && !( O.blinded )))
O << "\red [user] smashes through the foamed metal."
del(src)
qdel(src)
else
user << "\blue You hit the metal foam to no effect."
+4 -4
View File
@@ -156,15 +156,15 @@
/obj/effect/supermatter_crystal/ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
return
if(2.0)
if (prob(50))
del(src)
qdel(src)
return
if(3.0)
if (prob(5))
del(src)
qdel(src)
return
else
return
@@ -176,4 +176,4 @@
/obj/effect/supermatter_crystal/proc/CheckEndurance()
if(endurance <= 0)
del(src)
qdel(src)
+65 -38
View File
@@ -6,7 +6,7 @@
if(dx>=dy) return dx + (0.5*dy) //The longest side add half the shortest side approximates the hypotenuse
else return dy + (0.5*dx)
proc/trange(var/Dist=0,var/turf/Center=null)//alternative to range (ONLY processes turfs and thus less intensive)
/proc/trange(var/Dist=0,var/turf/Center=null)//alternative to range (ONLY processes turfs and thus less intensive)
if(Center==null) return
//var/x1=((Center.x-Dist)<1 ? 1 : Center.x-Dist)
@@ -19,42 +19,60 @@ proc/trange(var/Dist=0,var/turf/Center=null)//alternative to range (ONLY process
return block(x1y1,x2y2)
proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, adminlog = 1)
/proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, ignorecap = 0, flame_range = 0 ,silent = 0)
src = null //so we don't abort once src is deleted
epicenter = get_turf(epicenter)
// Archive the uncapped explosion for the doppler array
var/orig_dev_range = devastation_range
var/orig_heavy_range = heavy_impact_range
var/orig_light_range = light_impact_range
if(!ignorecap)
// Clamp all values to MAX_EXPLOSION_RANGE
devastation_range = min (MAX_EX_DEVESTATION_RANGE, devastation_range)
heavy_impact_range = min (MAX_EX_HEAVY_RANGE, heavy_impact_range)
light_impact_range = min (MAX_EX_LIGHT_RANGE, light_impact_range)
flash_range = min (MAX_EX_FLASH_RANGE, flash_range)
flame_range = min (MAX_EX_FLAME_RANGE, flame_range)
spawn(0)
var/start = world.timeofday
epicenter = get_turf(epicenter)
if(!epicenter) return
var/max_range = max(devastation_range, heavy_impact_range, light_impact_range)
var/max_range = max(devastation_range, heavy_impact_range, light_impact_range, flame_range)
// Play sounds; since playsound uses range() for each use, we'll try doing it through the player list.
// Playsound_local will also have an extra bonus of panning the sound, depending on the source. So stereo users will hear the direction of the explosion
for(var/mob/M in player_list)
// Double check for client
if(M && M.client)
var/turf/M_turf = get_turf(M)
if(M_turf && M_turf.z == epicenter.z)
var/dist = get_dist(M_turf, epicenter)
// If inside the blast radius + world.view - 2
if(dist <= round(max_range + world.view - 2, 1))
M.playsound_local(epicenter, "explosion", 100, 1)
// You hear a far explosion if you're outside the blast radius (*5) Small bombs shouldn't be heard all over the station.
else if(dist <= round(max_range * 10, 1))
var/far_volume = Clamp(max_range * 10, 30, 60) // Volume is based on explosion size and dist
far_volume += (dist > max_range * 2 ? 0 : 40) // add 40 volume if the mob is pretty close to the explosion
M.playsound_local(epicenter, 'sound/effects/explosionfar.ogg', far_volume, 1)
var/close = range(world.view+round(devastation_range,1), epicenter)
// to all distanced mobs play a different sound
for(var/mob/M in world) if(M.z == epicenter.z) if(!(M in close))
// check if the mob can hear
if(M.ear_deaf <= 0 || !M.ear_deaf) if(!istype(M.loc,/turf/space))
M << 'sound/effects/explosionfar.ogg'
if(adminlog)
msg_admin_attack("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[epicenter.x];Y=[epicenter.y];Z=[epicenter.z]'>JMP</a>)")
log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ")
message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[epicenter.x];Y=[epicenter.y];Z=[epicenter.z]'>JMP</a>)")
log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z])")
// Play sounds; we want sounds to be different depending on distance so we will manually do it ourselves.
// Stereo users will also hear the direction of the explosion!
// Calculate far explosion sound range. Only allow the sound effect for heavy/devastating explosions.
// 3/7/14 will calculate to 80 + 35
var/far_dist = 0
far_dist += heavy_impact_range * 5
far_dist += devastation_range * 20
if(!silent)
var/frequency = get_rand_frequency()
for(var/mob/M in player_list)
// Double check for client
if(M && M.client)
var/turf/M_turf = get_turf(M)
if(M_turf && M_turf.z == epicenter.z)
var/dist = get_dist(M_turf, epicenter)
// If inside the blast radius + world.view - 2
if(dist <= round(max_range + world.view - 2, 1))
M.playsound_local(epicenter, get_sfx("explosion"), 100, 1, frequency, falloff = 5) // get_sfx() is so that everyone gets the same sound
// You hear a far explosion if you're outside the blast radius. Small bombs shouldn't be heard all over the station.
else if(dist <= far_dist)
var/far_volume = Clamp(far_dist, 30, 50) // Volume is based on explosion size and dist
far_volume += (dist <= far_dist * 0.5 ? 50 : 0) // add 50 volume if the mob is pretty close to the explosion
M.playsound_local(epicenter, 'sound/effects/explosionfar.ogg', far_volume, 1, frequency, falloff = 5)
//Pause the lighting updates for a bit
var/datum/controller/process/lighting = processScheduler.getProcess("lighting")
@@ -74,7 +92,8 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
var/z0 = epicenter.z
for(var/turf/T in trange(max_range, epicenter))
var/dist = sqrt((T.x - x0)**2 + (T.y - y0)**2)
var/dist = cheap_pythag(T.x - x0,T.y - y0)
if(config.reactionary_explosions)
var/turf/Trajectory = T
@@ -87,19 +106,25 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
if(D.density && D.explosion_block)
dist += D.explosion_block
var/flame_dist = 0
var/throw_dist = dist
if(dist < flame_range)
flame_dist = 1
if(dist < devastation_range) dist = 1
else if(dist < heavy_impact_range) dist = 2
else if(dist < light_impact_range) dist = 3
else dist = 0
else dist = 0
//------- TURF FIRES -------
if(T)
for(var/atom_movable in T.contents) //bypass type checking since only atom/movable can be contained by turfs anyway
var/atom/movable/AM = atom_movable
if(AM && AM.simulated) AM.ex_act(dist)
// if(flame_dist && prob(40) && !istype(T, /turf/space) && !T.density)
// PoolOrNew(/obj/effect/hotspot, T) //Mostly for ambience!
if(AM) AM.ex_act(dist)
if(flame_dist && prob(40) && !istype(T, /turf/space) && !T.density)
new/obj/effect/hotspot(T) //Mostly for ambience!
if(dist > 0)
T.ex_act(dist)
@@ -122,7 +147,7 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
for(var/i,i<=doppler_arrays.len,i++)
var/obj/machinery/doppler_array/Array = doppler_arrays[i]
if(Array)
Array.sense_explosion(x0,y0,z0,devastation_range,heavy_impact_range,light_impact_range,took)
Array.sense_explosion(x0,y0,z0,devastation_range,heavy_impact_range,light_impact_range,took,orig_dev_range,orig_heavy_range,orig_light_range)
sleep(8)
@@ -136,7 +161,7 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
proc/secondaryexplosion(turf/epicenter, range)
/proc/secondaryexplosion(turf/epicenter, range)
for(var/turf/tile in trange(range, epicenter))
tile.ex_act(2)
@@ -145,8 +170,10 @@ proc/secondaryexplosion(turf/epicenter, range)
set category = "Debug"
var/newmode = alert("Use reactionary explosions?","Check Bomb Impact", "Yes", "No")
var/turf/epicenter = get_turf(mob)
if(!epicenter)
return
var/turf/epicenter = get_turf(usr)
var/dev = 0
var/heavy = 0
var/light = 0
+1 -1
View File
@@ -1293,7 +1293,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
if (ismob(loc))
var/mob/M = loc
M.show_message("\red Your [src] explodes!", 1)
M.show_message("<span class='danger'>Your [src] explodes!</span>", 1)
if(T)
T.hotspot_expose(700,125)
+2 -2
View File
@@ -134,6 +134,6 @@
if(1.0)
del(src)
if(2.0)
if(prob(50)) del(src)
if(prob(50)) qdel(src)
if(3.0)
if(prob(25)) del(src)
if(prob(25)) qdel(src)
+1 -1
View File
@@ -317,4 +317,4 @@
if(pai)
pai.ex_act(severity)
else
del(src)
qdel(src)
@@ -35,7 +35,7 @@
return
/obj/item/weapon/a_gift/ex_act()
del(src)
qdel(src)
return
/obj/effect/spresent/relaymove(mob/user as mob)
@@ -122,7 +122,7 @@
/obj/item/weapon/grenade/iedcasing/prime() //Blowing that can up
update_mob()
explosion(src.loc,0,0,2,2) //explosion(src.loc,-1,-1,-1, flame_range = range)
explosion(src.loc,-1,-1,-1, flame_range = range) // no explosive damage, only a large fireball.
qdel(src)
/obj/item/weapon/grenade/iedcasing/examine(mob/user)
@@ -9,5 +9,5 @@
/obj/item/weapon/grenade/syndieminibomb/prime()
update_mob()
explosion(src.loc,1,2,4)
del(src)
explosion(src.loc,1,2,4,flame_range = 2)
qdel(src)
@@ -248,13 +248,15 @@
air_contents.react()
pressure = air_contents.return_pressure()
var/range = (pressure-TANK_FRAGMENT_PRESSURE)/TANK_FRAGMENT_SCALE
range = min(range, MAX_EXPLOSION_RANGE) // was 8 - - - Changed to a configurable define -- TLE
var/turf/epicenter = get_turf(loc)
//world << "\blue Exploding Pressure: [pressure] kPa, intensity: [range]"
explosion(epicenter, round(range*0.25), round(range*0.5), round(range), round(range*1.5))
del(src)
if(istype(src.loc,/obj/item/device/transfer_valve))
qdel(src.loc)
else
qdel(src)
else if(pressure > TANK_RUPTURE_PRESSURE)
//world << "\blue[x],[y] tank is rupturing: [pressure] kPa, integrity [integrity]"
@@ -264,7 +266,7 @@
return
T.assume_air(air_contents)
playsound(src.loc, 'sound/effects/spray.ogg', 10, 1, -3)
del(src)
qdel(src)
else
integrity--
-4
View File
@@ -19,10 +19,6 @@
if(3.0)
return
/obj/structure/meteorhit(obj/O as obj)
del(src)
/obj/structure/Destroy()
if(hascall(src, "unbuckle"))
src:unbuckle()
@@ -175,13 +175,6 @@
A.loc = src.loc
del(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()
del(src)
/obj/structure/closet/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/weapon/rcs) && !src.opened)
var/obj/item/weapon/rcs/E = W
@@ -99,12 +99,15 @@
/obj/structure/closet/statue/toggle()
return
/obj/structure/closet/statue/bullet_act(var/obj/item/projectile/Proj)
health -= Proj.damage
/obj/structure/closet/statue/proc/check_health()
if(health <= 0)
for(var/mob/M in src)
shatter(M)
/obj/structure/closet/statue/bullet_act(var/obj/item/projectile/Proj)
health -= Proj.damage
check_health()
return
/obj/structure/closet/statue/attack_animal(mob/living/simple_animal/user as mob)
@@ -116,21 +119,17 @@
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/ex_act(severity)
for(var/mob/M in src)
M.ex_act(severity)
health -= 60 / severity
check_health()
/obj/structure/closet/statue/attackby(obj/item/I as obj, mob/user as mob, params)
user.changeNext_move(CLICK_CD_MELEE)
health -= I.force
visible_message("\red [user] strikes [src] with [I].")
if(health <= 0)
for(var/mob/M in src)
shatter(M)
check_health()
/obj/structure/closet/statue/MouseDrop_T()
return
@@ -4,7 +4,10 @@
icon_state = "blue"
icon_closed = "blue"
/obj/structure/closet/wardrobe/New()
/obj/structure/closet/wardrobe/generic
// Identical to the base wardrobe, aside from containing some stuff.
/obj/structure/closet/wardrobe/generic/New()
..()
sleep(2)
new /obj/item/clothing/under/color/blue(src)
@@ -267,10 +270,12 @@
new /obj/item/clothing/shoes/white(src)
return
/obj/structure/closet/wardrobe/white/medical
/obj/structure/closet/wardrobe/medical_white
name = "medical doctor's wardrobe"
icon_state = "white"
icon_closed = "white"
/obj/structure/closet/wardrobe/white/medical/New()
/obj/structure/closet/wardrobe/medical_white/New()
..()
sleep(2)
new /obj/item/clothing/under/rank/nursesuit (src)
@@ -181,13 +181,13 @@
switch(severity)
if(1.0)
for(var/obj/O in src.contents)
del(O)
qdel(O)
qdel(src)
return
if(2.0)
for(var/obj/O in src.contents)
if(prob(50))
del(O)
qdel(O)
qdel(src)
return
if(3.0)
+2 -9
View File
@@ -101,7 +101,7 @@
PoolOrNew(/obj/item/weapon/shard, loc)
if (occupant)
dump()
del(src)
qdel(src)
if (2)
if (prob(50))
src.health -= 15
@@ -124,14 +124,7 @@
PoolOrNew(/obj/item/weapon/shard, loc)
if(occupant) dump()
del(src)
/obj/structure/displaycase/meteorhit(obj/O as obj)
PoolOrNew(/obj/item/weapon/shard, loc)
if(occupant) dump()
del(src)
/obj/structure/displaycase/proc/healthcheck()
if (src.health <= 0)
if (!( src.destroyed ))
+1 -5
View File
@@ -44,11 +44,7 @@
/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)
@@ -62,11 +62,6 @@
blob_act()
deflate(1)
meteorhit()
//world << "glass at [x],[y],[z] Mhit"
deflate(1)
attack_hand(mob/user as mob)
add_fingerprint(user)
return
+1 -8
View File
@@ -38,14 +38,7 @@
PoolOrNew(/obj/item/weapon/shard, loc)
Break()
qdel(src)
/obj/structure/lamarr/meteorhit(obj/O as obj)
PoolOrNew(/obj/item/weapon/shard, loc)
Break()
qdel(src)
/obj/structure/lamarr/proc/healthcheck()
if (src.health <= 0)
if (!( src.destroyed ))
-4
View File
@@ -168,10 +168,6 @@ 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"
@@ -905,10 +905,6 @@
W.Move(loc)
return
/obj/structure/rack/meteorhit(obj/O as obj)
del(src)
/obj/structure/table/attack_hand(mob/user)
if(HULK in user.mutations)
visible_message("<span class='danger'>[user] smashes [src] apart!</span>")
-4
View File
@@ -76,9 +76,6 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f
/obj/structure/window/blob_act()
destroy()
/obj/structure/window/meteorhit()
destroy()
/obj/structure/window/singularity_pull(S, current_size)
if(current_size >= STAGE_FIVE)
destroy()
@@ -102,7 +99,6 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f
/obj/structure/window/hitby(AM as mob|obj)
..()
visible_message("<span class='danger'>[src] was hit by [AM].</span>")
var/tforce = 0
if(isobj(AM))
var/obj/item/I = AM
-9
View File
@@ -241,15 +241,6 @@
// F.sd_LumReset() //TODO: ~Carn
return
/turf/simulated/wall/meteorhit(obj/M as obj)
if (prob(15) && !rotting)
dismantle_wall()
else if(prob(70) && !rotting)
ChangeTurf(/turf/simulated/floor/plating)
else
ReplaceWithLattice()
return 0
//Interactions
/turf/simulated/wall/attack_animal(var/mob/living/simple_animal/M)
@@ -53,7 +53,6 @@
icon_state = "uranium0"
walltype = "uranium"
mineral = "uranium"
explosion_block = 0
/turf/simulated/wall/mineral/uranium/proc/radiate()
if(!active)
+2
View File
@@ -19,6 +19,8 @@
update_starlight() //MC will initialize all the space turfs that get created before config
/turf/space/proc/update_starlight()
. = ..()
if(!config) return
if(!config.starlight)
return
+3 -2
View File
@@ -38,7 +38,8 @@
src.Entered(AM)
return
if(!dynamic_lighting)
var/area/A = loc
if(!dynamic_lighting || !A.lighting_use_dynamic)
luminosity = 1
// Adds the adjacent turfs to the current atmos processing
@@ -431,4 +432,4 @@
if(O.invisibility == 101)
O.singularity_act()
ChangeTurf(/turf/space)
return(2)
return(2)
+2 -2
View File
@@ -179,8 +179,8 @@
H2.forceMove(get_turf(src))
H2.ex_act(severity + 1)
H2 << "<span class='warning'>You are forcefully thrown from \the [src]!</span>"
del(ion_trail)
del(src)
qdel(ion_trail)
qdel(src)
if(2)
deal_damage(100)
if(3)
+17 -8
View File
@@ -384,17 +384,26 @@ var/list/admin_verbs_mentor = list(
if(null)
return 0
if("Small Bomb")
explosion(epicenter, 1, 2, 3)
explosion(epicenter, 1, 2, 3, 3)
if("Medium Bomb")
explosion(epicenter, 2, 3, 4)
explosion(epicenter, 2, 3, 4, 4)
if("Big Bomb")
explosion(epicenter, 3, 5, 7)
explosion(epicenter, 3, 5, 7, 5)
if("Custom Bomb")
var/devastation_range = input("Devastation range (in tiles):") as num
var/heavy_impact_range = input("Heavy impact range (in tiles):") as num
var/light_impact_range = input("Light impact range (in tiles):") as num
explosion(epicenter, devastation_range, heavy_impact_range, light_impact_range)
message_admins("\blue [ckey] creating an admin explosion at [epicenter.loc].")
var/devastation_range = input("Devastation range (in tiles):") as null|num
if(devastation_range == null)
return
var/heavy_impact_range = input("Heavy impact range (in tiles):") as null|num
if(heavy_impact_range == null)
return
var/light_impact_range = input("Light impact range (in tiles):") as null|num
if(light_impact_range == null)
return
var/flash_range = input("Flash range (in tiles):") as null|num
if(flash_range == null)
return
explosion(epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, 1, 1)
message_admins("<span class='adminnotice'>[ckey] creating an admin explosion at [epicenter.loc].</span>")
feedback_add_details("admin_verb","DB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/give_spell(mob/T as mob in mob_list) // -- Urist
+16 -12
View File
@@ -2332,18 +2332,22 @@
if("togglebombcap")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","BC")
switch(MAX_EXPLOSION_RANGE)
if(14) MAX_EXPLOSION_RANGE = 16
if(16) MAX_EXPLOSION_RANGE = 20
if(20) MAX_EXPLOSION_RANGE = 28
if(28) MAX_EXPLOSION_RANGE = 56
if(56) MAX_EXPLOSION_RANGE = 128
else MAX_EXPLOSION_RANGE = 14
var/range_dev = MAX_EXPLOSION_RANGE *0.25
var/range_high = MAX_EXPLOSION_RANGE *0.5
var/range_low = MAX_EXPLOSION_RANGE
message_admins("\red <b> [key_name_admin(usr)] changed the bomb cap to [range_dev], [range_high], [range_low]</b>", 1)
log_admin("[key_name_admin(usr)] changed the bomb cap to [MAX_EXPLOSION_RANGE]")
var/newBombCap = input(usr,"What would you like the new bomb cap to be. (entered as the light damage range (the 3rd number in common (1,2,3) notation)) Must be between 4 and 128)", "New Bomb Cap", MAX_EX_LIGHT_RANGE) as num|null
if (newBombCap < 4)
return
if (newBombCap > 128)
newBombCap = 128
MAX_EX_DEVESTATION_RANGE = round(newBombCap/4)
MAX_EX_HEAVY_RANGE = round(newBombCap/2)
MAX_EX_LIGHT_RANGE = newBombCap
//I don't know why these are their own variables, but fuck it, they are.
MAX_EX_FLASH_RANGE = newBombCap
MAX_EX_FLAME_RANGE = newBombCap
message_admins("<span class='boldannounce'>[key_name_admin(usr)] changed the bomb cap to [MAX_EX_DEVESTATION_RANGE], [MAX_EX_HEAVY_RANGE], [MAX_EX_LIGHT_RANGE]</span>")
log_admin("[key_name(usr)] changed the bomb cap to [MAX_EX_DEVESTATION_RANGE], [MAX_EX_HEAVY_RANGE], [MAX_EX_LIGHT_RANGE]")
if("flicklights")
feedback_inc("admin_secrets_fun_used",1)
+7 -5
View File
@@ -698,15 +698,17 @@ Traitors and the like can also be revived with the previous role mostly intact.
if(light == null) return
var/flash = input("Range of flash. -1 to none", text("Input")) as num|null
if(flash == null) return
var/flames = input("Range of flames. -1 to none", text("Input")) as num|null
if(flames == null) return
if ((devastation != -1) || (heavy != -1) || (light != -1) || (flash != -1))
if ((devastation > 20) || (heavy > 20) || (light > 20))
if ((devastation != -1) || (heavy != -1) || (light != -1) || (flash != -1) || (flames != -1))
if ((devastation > 20) || (heavy > 20) || (light > 20) || (flames > 20))
if (alert(src, "Are you sure you want to do this? It will laaag.", "Confirmation", "Yes", "No") == "No")
return
explosion(O, devastation, heavy, light, flash)
log_admin("[key_name(usr)] created an explosion ([devastation],[heavy],[light],[flash]) at ([O.x],[O.y],[O.z])")
message_admins("[key_name_admin(usr)] created an explosion ([devastation],[heavy],[light],[flash]) at ([O.x],[O.y],[O.z])", 1)
explosion(O, devastation, heavy, light, flash, null, null,flames)
log_admin("[key_name(usr)] created an explosion ([devastation],[heavy],[light],[flames]) at ([O.x],[O.y],[O.z])")
message_admins("[key_name_admin(usr)] created an explosion ([devastation],[heavy],[light],[flames]) at ([O.x],[O.y],[O.z])")
feedback_add_details("admin_verb","EXPL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return
else
+3 -3
View File
@@ -192,15 +192,15 @@
ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
return
if(2.0)
if (prob(50))
del(src)
qdel(src)
return
if(3.0)
if (prob(25))
del(src)
qdel(src)
return
return
+2 -10
View File
@@ -201,14 +201,6 @@
// todo does this do enough
meteorhit(var/obj/O as obj)
for(var/x in verbs)
verbs -= x
set_broken()
return
emp_act(severity)
if(prob(20/severity)) set_broken()
..()
@@ -217,11 +209,11 @@
ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
return
if(2.0)
if (prob(25))
del(src)
qdel(src)
return
if (prob(50))
for(var/x in verbs)
+1 -1
View File
@@ -144,7 +144,7 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Carp School", /datum/event/carp_migration, 100, list(ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_SECURITY = 20), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Rogue Drones", /datum/event/rogue_drone, 20, list(ASSIGNMENT_SECURITY = 20)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Space Vines", /datum/event/spacevine, 250, list(ASSIGNMENT_ENGINEER = 10)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Meteor Shower", /datum/event/meteor_shower, 0, list(ASSIGNMENT_ENGINEER = 20)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Meteor Shower", /datum/event/meteor_wave, 0, list(ASSIGNMENT_ENGINEER = 20)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Meaty Ores", /datum/event/dust/meaty, 0, list(ASSIGNMENT_ENGINEER = 30)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Communication Blackout", /datum/event/communications_blackout, 500, list(ASSIGNMENT_AI = 150, ASSIGNMENT_SECURITY = 120)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Prison Break", /datum/event/prison_break, 0, list(ASSIGNMENT_SECURITY = 100)),
-1
View File
@@ -86,7 +86,6 @@ var/global/list/possibleEvents = list()
possibleEvents[/datum/event/anomaly/anomaly_flux] = 50 + 50 * active_with_role["Engineer"]
possibleEvents[/datum/event/meteor_wave] = 10 * active_with_role["Engineer"]
possibleEvents[/datum/event/meteor_shower] = 20 * active_with_role["Engineer"]
possibleEvents[/datum/event/blob] = 10 * active_with_role["Engineer"]
if(active_with_role["Medical"] > 0)
+28 -35
View File
@@ -1,46 +1,39 @@
//cael - two events here
//meteor storms are much heavier
/datum/event/meteor_wave
startWhen = 6
endWhen = 33
/datum/event/meteor_wave/setup()
endWhen = rand(10,25) * 3
/datum/event/meteor_wave/announce()
command_announcement.Announce("Meteors have been detected on collision course with the station.", "Meteor Alert", new_sound = 'sound/AI/meteors.ogg')
/datum/event/meteor_wave/tick()
if(IsMultiple(activeFor, 3))
spawn_meteors(rand(2,5))
/datum/event/meteor_wave/end()
command_announcement.Announce("The station has cleared the meteor storm.", "Meteor Alert")
//
/datum/event/meteor_shower
startWhen = 5
endWhen = 7
var/next_meteor = 6
var/waves = 1
/datum/event/meteor_shower/setup()
waves = rand(1,4)
/datum/event/meteor_wave/setup()
waves = severity * rand(1,3)
/datum/event/meteor_shower/announce()
command_announcement.Announce("The station is now in a meteor shower.", "Meteor Alert")
/datum/event/meteor_wave/announce()
switch(severity)
if(EVENT_LEVEL_MAJOR)
command_announcement.Announce("Meteors have been detected on collision course with the station.", "Meteor Alert", new_sound = 'sound/AI/meteors.ogg')
else
command_announcement.Announce("The station is now in a meteor shower.", "Meteor Alert")
//meteor showers are lighter and more common,
/datum/event/meteor_shower/tick()
if(activeFor >= next_meteor)
spawn_meteors(rand(1,4))
next_meteor += rand(20,100)
/datum/event/meteor_wave/tick()
if(waves && activeFor >= next_meteor)
spawn() spawn_meteors(severity * rand(1,2), get_meteors())
next_meteor += rand(15, 30) / severity
waves--
if(waves <= 0)
endWhen = activeFor + 1
else
endWhen = next_meteor + 1
endWhen = (waves ? next_meteor + 1 : activeFor + 15)
/datum/event/meteor_shower/end()
command_announcement.Announce("The station has cleared the meteor shower", "Meteor Alert")
/datum/event/meteor_wave/end()
switch(severity)
if(EVENT_LEVEL_MAJOR)
command_announcement.Announce("The station has cleared the meteor storm.", "Meteor Alert")
else
command_announcement.Announce("The station has cleared the meteor shower", "Meteor Alert")
/datum/event/meteor_wave/proc/get_meteors()
switch(severity)
if(EVENT_LEVEL_MAJOR)
return meteors_catastrophic
if(EVENT_LEVEL_MODERATE)
return meteors_threatening
else
return meteors_normal
+1 -1
View File
@@ -32,7 +32,7 @@
invisibility = 101
new /obj/effect/decal/cleanable/blood(get_turf(A))
if(ismob(A))
A.meteorhit(src)
A.ex_act(strength)
else
spawn(0)
if(A)
+2 -2
View File
@@ -12,6 +12,6 @@
newAnomaly = new /obj/effect/anomaly/flux(T.loc)
/datum/event/anomaly/anomaly_flux/end()
if(newAnomaly)//If it hasn't been neutralized, it's time to blow up.
explosion(newAnomaly.loc, 0, 4, 6, 5)
if(newAnomaly.loc)//If it hasn't been neutralized, it's time to blow up.
explosion(newAnomaly, -1, 3, 5, 5)
qdel(newAnomaly)
+1 -1
View File
@@ -20,7 +20,7 @@
/datum/event/anomaly/anomaly_pyro/end()
if(newAnomaly.loc)
explosion(get_turf(newAnomaly), -1,0,3)
explosion(get_turf(newAnomaly), -1,0,3, flame_range = 4)
var/mob/living/carbon/slime/S = new/mob/living/carbon/slime(get_turf(newAnomaly))
S.colour = pick("red", "orange")
@@ -50,7 +50,7 @@
M.speak = rampant_speeches.Copy()
M.speak_chance = 15
else
explosion(upriser.loc, -1, 1, 2)
explosion(upriser.loc, -1, 1, 2, 4, 0)
qdel(upriser)
kill()
+2 -2
View File
@@ -80,7 +80,7 @@
playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1)
if(ismob(A))
A.meteorhit(src)//This should work for now I guess
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
@@ -99,5 +99,5 @@
ex_act(severity)
del(src)
qdel(src)
return
@@ -85,7 +85,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
del(src)
+2 -2
View File
@@ -82,8 +82,8 @@
if (attempts == 0)
user << "<span class='danger'>The crate's anti-tamper system activates!</span>"
var/turf/T = get_turf(src.loc)
explosion(T, 0, 0, 0, 1)
del(src)
explosion(T, -1, -1, 1, 1)
qdel(src)
return
else
user << "<span class='notice'>You attempt to interact with the device using a hand gesture, but it appears this crate is from before the DECANECT came out.</span>"
+1 -1
View File
@@ -264,7 +264,7 @@
s.set_up(5, 1, src)
s.start()
if(prob(50 / severity) && severity < 3)
del(src)
qdel(src)
/**********************Mining Equipment Locker Items**************************/
+1 -5
View File
@@ -43,7 +43,7 @@
ex_act(severity)
switch(severity)
if(1.0) del(src)
if(1.0) qdel(src)
if(2.0)
if (prob(60)) stat |= BROKEN
if(3.0)
@@ -54,10 +54,6 @@
if (prob(25)) del src
return
meteorhit()
if (prob(50)) del src
return
power_change()
if(stat & BROKEN) icon_state = "fab-broken"
else
@@ -125,18 +125,6 @@
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_slime(mob/living/carbon/slime/M as mob)
if (!ticker)
M << "You cannot attack people before the game has started."
@@ -129,17 +129,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]")
@@ -382,22 +382,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/external/affecting = get_organ(pick("chest", "chest", "chest", "head"))
if(!affecting) return
if (istype(O, /obj/effect/immovablerod))
if(affecting.take_damage(101, 0))
UpdateDamageIcon()
else
if(affecting.take_damage((istype(O, /obj/effect/meteor/small) ? 10 : 25), 30))
UpdateDamageIcon()
updatehealth()
return
/mob/living/carbon/human/attack_animal(mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0)
M.emote("[M.friendly] [src]")
@@ -239,17 +239,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("\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/slime/attack_slime(mob/living/carbon/slime/M as mob)
if (!ticker)
M << "You cannot attack people before the game has started."
-11
View File
@@ -591,17 +591,6 @@ var/list/ai_verbs_default = list(
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()
@@ -203,16 +203,6 @@
// See software.dm for Topic()
/mob/living/silicon/pai/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 (src.health > 0)
src.adjustBruteLoss(30)
if ((O.icon_state == "flaming"))
src.adjustFireLoss(40)
src.updatehealth()
return
/mob/living/silicon/pai/attack_animal(mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0)
M.emote("[M.friendly] [src]")
+1 -13
View File
@@ -528,18 +528,6 @@ var/list/robot_verbs_default = list(
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)
updatehealth()
@@ -1236,7 +1224,7 @@ var/list/robot_verbs_default = list(
if(emagged)
if(mmi)
qdel(mmi)
explosion(src.loc,1,2,4)
explosion(src.loc,1,2,4,flame_range = 2)
else
explosion(src.loc,-1,0,2)
gib()
@@ -140,7 +140,7 @@ var/global/totaltribbles = 0 //global variable so it updates for all tribbles,
if (1)
new /obj/item/weapon/shard( src.loc )
Break()
del(src)
qdel(src)
if (2)
if (prob(50))
src.health -= 15
@@ -165,12 +165,6 @@ var/global/totaltribbles = 0 //global variable so it updates for all tribbles,
del(src)
/obj/structure/tribble_cage/meteorhit(obj/O as obj)
new /obj/item/weapon/shard( src.loc )
Break()
del(src)
/obj/structure/tribble_cage/proc/healthcheck()
if (src.health <= 0)
if (!( src.destroyed ))
+3 -3
View File
@@ -132,10 +132,10 @@
/obj/machinery/photocopier/ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
if(2.0)
if(prob(50))
del(src)
qdel(src)
else
if(toner > 0)
new /obj/effect/decal/cleanable/blood/oil(get_turf(src))
@@ -149,7 +149,7 @@
/obj/machinery/photocopier/blob_act()
if(prob(50))
del(src)
qdel(src)
else
if(toner > 0)
new /obj/effect/decal/cleanable/blood/oil(get_turf(src))
-5
View File
@@ -1254,11 +1254,6 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on)
// 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)
+1 -3
View File
@@ -110,9 +110,7 @@
message_admins("LOG: Rigged power cell explosion, last touched by [fingerprintslast]")
explosion(T, devastation_range, heavy_impact_range, light_impact_range, flash_range)
spawn(1)
del(src)
qdel(src)
/obj/item/weapon/stock_parts/cell/proc/corrupt()
charge /= 2
@@ -36,8 +36,6 @@
/obj/machinery/containment_field/ex_act(severity)
return 0
/obj/machinery/containment_field/meteorhit()
return 0
/obj/machinery/containment_field/HasProximity(atom/movable/AM as mob|obj)
if(istype(AM,/mob/living/silicon) && prob(40))
@@ -135,8 +135,6 @@
src.use_power = 1 */
return 1
/obj/machinery/containment_field/meteorhit()
return 0
/obj/machinery/power/emitter/process()
if(stat & (BROKEN))
@@ -163,8 +163,6 @@ field_generator power level display
else
..()
/obj/machinery/containment_field/meteorhit()
return 0
/obj/machinery/field_generator/bullet_act(var/obj/item/projectile/Proj)
if(Proj.flag != "bullet")
@@ -157,11 +157,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))
del(src)
return
/obj/structure/particle_accelerator/update_icon()
switch(construction_state)
if(0,1)
@@ -344,12 +339,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))
del(src)
return
/obj/machinery/particle_accelerator/proc/update_state()
return 0
+1 -1
View File
@@ -148,6 +148,6 @@
/obj/item/weapon/gun/magic/wand/fireball/zap_self(mob/living/user as mob)
if(alert(user, "Zapping yourself with a wand of fireball is probably a bad idea, do it anyway?",, "Yes", "No") == "Yes" && charges && user.get_active_hand() == src && isliving(user))
explosion(user.loc, -1, 0, 2, 3, 0)
explosion(user.loc, -1, 0, 2, 3, 0, flame_range = 2)
charges--
..()
+1 -1
View File
@@ -24,7 +24,7 @@
/obj/item/projectile/magic/fireball/on_hit(var/target)
var/turf/T = get_turf(target)
explosion(T, -1, 0, 2, 3, 0)
explosion(T, -1, 0, 2, 3, 0, flame_range = 2)
if(ismob(target)) //multiple flavors of pain
var/mob/living/M = target
M.take_overall_damage(0,10) //between this 10 burn, the 10 brute, the explosion brute, and the onfire burn, your at about 65 damage if you stop drop and roll immediately
@@ -38,7 +38,8 @@
flag = "bullet"
/obj/item/projectile/bullet/a40mm/on_hit(atom/target, blocked = 0)
explosion(target, -1, 0, 2, 1, 0)
..()
explosion(target, -1, 0, 2, 1, 0, flame_range = 3)
return 1
/obj/item/projectile/temp
@@ -75,7 +76,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))
@@ -217,6 +218,7 @@ obj/item/projectile/kinetic/New()
weaken = 5
/obj/item/projectile/bullet/frag12/on_hit(atom/target, blocked = 0)
..()
explosion(target, -1, 0, 1)
return 1
@@ -97,10 +97,6 @@
if (prob(50))
del(src)
/obj/machinery/chem_dispenser/meteorhit()
del(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
@@ -401,10 +397,6 @@
if (prob(50))
qdel(src)
/obj/machinery/chem_master/meteorhit()
qdel(src)
return
/obj/machinery/chem_master/power_change()
if(powered())
stat &= ~NOPOWER
+6 -7
View File
@@ -103,7 +103,7 @@
explode()
blob_act()
explode()
explosion(src.loc,0,1,5,7,10, flame_range = 5)
ex_act()
explode()
@@ -150,14 +150,13 @@
return ..()
/obj/structure/reagent_dispensers/fueltank/proc/explode()
explosion(src.loc,0,1,4)
explosion(src.loc,-1,0,2, flame_range = 2)
if(src)
del(src)
qdel(src)
/obj/structure/reagent_dispensers/fueltank/fire_act(datum/gas_mixture/air, temperature, volume)
if(temperature > T0C+500)
explode()
return ..()
blob_act() //saving a few lines of copypasta
/obj/structure/reagent_dispensers/fueltank/Move()
..()
@@ -219,7 +218,7 @@
/obj/structure/reagent_dispensers/beerkeg/blob_act()
explosion(src.loc,0,3,5,7,10)
del(src)
qdel(src)
/obj/structure/reagent_dispensers/virusfood
name = "Virus Food Dispenser"
-5
View File
@@ -70,11 +70,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()
..()
@@ -56,4 +56,4 @@ datum/chemical_reaction/coolant
sleep(10)
if(src)
del(src)
qdel(src)
-5
View File
@@ -18,11 +18,6 @@
/obj/effect/energy_field/bullet_act(var/obj/item/projectile/Proj)
Stress(Proj.damage / 10)
/obj/effect/energy_field/meteorhit(obj/effect/meteor/M as obj)
if(M)
walk(M,0)
Stress(2)
/obj/effect/energy_field/proc/Stress(var/severity)
strength -= severity

Some files were not shown because too many files have changed in this diff Show More