mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-23 12:08:28 +01:00
Merge remote-tracking branch 'remotes/git-svn' into bs12_with_tgport
Conflicts: code/game/gamemodes/events.dm code/game/gamemodes/wizard/veilrender.dm code/game/jobs/job/captain.dm code/game/machinery/computer/HolodeckControl.dm code/game/objects/items/stacks/sheets/sheet_types.dm code/game/objects/structures/grille.dm code/modules/mob/living/simple_animal/life.dm code/setup.dm Signed-off-by: Cael_Aislinn <cael_aislinn@yahoo.com.au>
This commit is contained in:
@@ -155,6 +155,13 @@
|
||||
|
||||
return
|
||||
|
||||
/obj/structure/closet/attack_animal(mob/living/simple_animal/user as mob)
|
||||
if(user.wall_smash)
|
||||
visible_message("\red [user] destroys the [src]. ")
|
||||
for(var/atom/movable/A as mob|obj in src)
|
||||
A.loc = src.loc
|
||||
del(src)
|
||||
|
||||
// this should probably use dump_contents()
|
||||
/obj/structure/closet/blob_act()
|
||||
if(prob(75))
|
||||
|
||||
@@ -14,212 +14,209 @@
|
||||
var/destroyed = 0
|
||||
explosion_resistance = 5
|
||||
|
||||
ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
/obj/structure/grille/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
del(src)
|
||||
return
|
||||
if(2.0)
|
||||
if(prob(50))
|
||||
del(src)
|
||||
return
|
||||
if(2.0)
|
||||
if(prob(50))
|
||||
del(src)
|
||||
return
|
||||
if(3.0)
|
||||
if(prob(25))
|
||||
src.health -= 11
|
||||
healthcheck()
|
||||
return
|
||||
if(3.0)
|
||||
if(prob(25))
|
||||
src.health -= 11
|
||||
healthcheck()
|
||||
return
|
||||
|
||||
/obj/structure/grille/blob_act()
|
||||
del(src)
|
||||
return
|
||||
|
||||
/obj/structure/grille/Bumped(atom/user)
|
||||
if(ismob(user)) shock(user, 70)
|
||||
|
||||
|
||||
blob_act()
|
||||
del(src)
|
||||
return
|
||||
|
||||
Bumped(atom/user)
|
||||
if(ismob(user)) shock(user, 70)
|
||||
/obj/structure/grille/meteorhit(var/obj/M)
|
||||
if (M.icon_state == "flaming")
|
||||
src.health -= 2
|
||||
healthcheck()
|
||||
return
|
||||
|
||||
|
||||
meteorhit(var/obj/M)
|
||||
if (M.icon_state == "flaming")
|
||||
src.health -= 2
|
||||
healthcheck()
|
||||
return
|
||||
/obj/structure/grille/attack_hand(var/mob/user)
|
||||
playsound(src.loc, 'sound/effects/grillehit.ogg', 80, 1)
|
||||
user.visible_message("[user.name] kicks the [src.name].", \
|
||||
"You kick the [src.name].", \
|
||||
"You hear a noise")
|
||||
if((HULK in usr.mutations) || (SUPRSTR in usr.augmentations))
|
||||
src.health -= 5
|
||||
else if(!shock(user, 70))
|
||||
src.health -= 3
|
||||
healthcheck()
|
||||
return
|
||||
|
||||
|
||||
attack_hand(var/mob/user)
|
||||
playsound(src.loc, 'sound/effects/grillehit.ogg', 80, 1)
|
||||
user.visible_message("[user.name] kicks the [src.name].", \
|
||||
"You kick the [src.name].", \
|
||||
"You hear a noise")
|
||||
if((HULK in usr.mutations) || (SUPRSTR in usr.augmentations))
|
||||
src.health -= 5
|
||||
else if(!shock(user, 70))
|
||||
src.health -= 3
|
||||
/obj/structure/grille/attack_paw(var/mob/user)
|
||||
attack_hand(user)
|
||||
|
||||
|
||||
/obj/structure/grille/attack_alien(var/mob/user)
|
||||
if (istype(usr, /mob/living/carbon/alien/larva)) return
|
||||
playsound(src.loc, 'sound/effects/grillehit.ogg', 80, 1)
|
||||
user.visible_message("[user.name] mangles the [src.name].", \
|
||||
"You mangle the [src.name].", \
|
||||
"You hear a noise")
|
||||
if(!shock(usr, 70))
|
||||
src.health -= 5
|
||||
healthcheck()
|
||||
return
|
||||
|
||||
/obj/structure/grille/attack_metroid(var/mob/user)
|
||||
if(!istype(usr, /mob/living/carbon/metroid/adult)) return
|
||||
playsound(src.loc, 'sound/effects/grillehit.ogg', 80, 1)
|
||||
user.visible_message("[user.name] smashes against the [src.name].", \
|
||||
"You smash against the [src.name].", \
|
||||
"You hear a noise")
|
||||
src.health -= rand(2,3)
|
||||
healthcheck()
|
||||
return
|
||||
|
||||
attack_paw(var/mob/user)
|
||||
attack_hand(user)
|
||||
/obj/structure/grille/attack_animal(var/mob/living/simple_animal/M as mob)
|
||||
if(M.melee_damage_upper == 0) return
|
||||
playsound(src.loc, 'sound/effects/grillehit.ogg', 80, 1)
|
||||
M.visible_message("[M.name] smashes against the [src.name].", \
|
||||
"You smash against the [src.name].", \
|
||||
"You hear a noise")
|
||||
src.health -= M.melee_damage_upper
|
||||
healthcheck()
|
||||
return
|
||||
|
||||
|
||||
attack_alien(var/mob/user)
|
||||
if (istype(usr, /mob/living/carbon/alien/larva)) return
|
||||
playsound(src.loc, 'sound/effects/grillehit.ogg', 80, 1)
|
||||
user.visible_message("[user.name] mangles the [src.name].", \
|
||||
"You mangle the [src.name].", \
|
||||
"You hear a noise")
|
||||
if(!shock(usr, 70))
|
||||
src.health -= 5
|
||||
healthcheck()
|
||||
return
|
||||
|
||||
attack_metroid(var/mob/user)
|
||||
if(!istype(usr, /mob/living/carbon/metroid/adult)) return
|
||||
playsound(src.loc, 'sound/effects/grillehit.ogg', 80, 1)
|
||||
user.visible_message("[user.name] smashes against the [src.name].", \
|
||||
"You smash against the [src.name].", \
|
||||
"You hear a noise")
|
||||
src.health -= rand(2,3)
|
||||
healthcheck()
|
||||
return
|
||||
|
||||
attack_animal(var/mob/living/simple_animal/M as mob)
|
||||
if(M.melee_damage_upper == 0) return
|
||||
playsound(src.loc, 'sound/effects/grillehit.ogg', 80, 1)
|
||||
M.visible_message("[M.name] smashes against the [src.name].", \
|
||||
"You smash against the [src.name].", \
|
||||
"You hear a noise")
|
||||
src.health -= M.melee_damage_upper
|
||||
healthcheck()
|
||||
return
|
||||
|
||||
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(air_group || (height==0)) return 1
|
||||
if(istype(mover) && mover.checkpass(PASSGRILLE))
|
||||
return 1
|
||||
/obj/structure/grille/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(air_group || (height==0)) return 1
|
||||
if(istype(mover) && mover.checkpass(PASSGRILLE))
|
||||
return 1
|
||||
else
|
||||
if (istype(mover, /obj/item/projectile))
|
||||
return prob(30)
|
||||
else
|
||||
if (istype(mover, /obj/item/projectile))
|
||||
return prob(30)
|
||||
else
|
||||
var/turf/T = get_turf(src)
|
||||
var/obj/structure/cable/C = T.get_cable_node()
|
||||
if(C)
|
||||
if (C.powernet.avail)
|
||||
if (istype(mover, /obj/item))
|
||||
var/obj/item/i = mover
|
||||
if (i.m_amt)
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(5, 1, src)
|
||||
s.start()
|
||||
return !src.density
|
||||
return !src.density
|
||||
|
||||
|
||||
attackby(obj/item/weapon/W, mob/user)
|
||||
if(iswirecutter(W))
|
||||
if(!shock(user, 100))
|
||||
playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
|
||||
src.health = 0
|
||||
if(!destroyed)
|
||||
src.health = -100
|
||||
else if ((isscrewdriver(W)) && (istype(src.loc, /turf/simulated) || src.anchored))
|
||||
if(!shock(user, 90))
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1)
|
||||
src.anchored = !( src.anchored )
|
||||
user << (src.anchored ? "You have fastened the grille to the floor." : "You have unfastened the grill.")
|
||||
for(var/mob/O in oviewers())
|
||||
O << text("\red [user] [src.anchored ? "fastens" : "unfastens"] the grille.")
|
||||
return
|
||||
else if( istype(W,/obj/item/stack/sheet/rglass) || istype(W,/obj/item/stack/sheet/glass) )
|
||||
var/dir_to_set = 1
|
||||
if(src.loc == usr.loc)
|
||||
dir_to_set = usr.dir
|
||||
/obj/structure/grille/attackby(obj/item/weapon/W, mob/user)
|
||||
if(iswirecutter(W))
|
||||
if(!shock(user, 100))
|
||||
playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
|
||||
src.health = 0
|
||||
if(!destroyed)
|
||||
src.health = -100
|
||||
else if ((isscrewdriver(W)) && (istype(src.loc, /turf/simulated) || src.anchored))
|
||||
if(!shock(user, 90))
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1)
|
||||
src.anchored = !( src.anchored )
|
||||
user << (src.anchored ? "You have fastened the grille to the floor." : "You have unfastened the grill.")
|
||||
for(var/mob/O in oviewers())
|
||||
O << text("\red [user] [src.anchored ? "fastens" : "unfastens"] the grille.")
|
||||
return
|
||||
else if( istype(W,/obj/item/stack/sheet/rglass) || istype(W,/obj/item/stack/sheet/glass) )
|
||||
var/dir_to_set = 1
|
||||
if(src.loc == usr.loc)
|
||||
dir_to_set = usr.dir
|
||||
else
|
||||
if( ( src.x == usr.x ) || (src.y == usr.y) ) //Only supposed to work for cardinal directions.
|
||||
if( src.x == usr.x )
|
||||
if( src.y > usr.y )
|
||||
dir_to_set = 2
|
||||
else
|
||||
dir_to_set = 1
|
||||
else if( src.y == usr.y )
|
||||
if( src.x > usr.x )
|
||||
dir_to_set = 8
|
||||
else
|
||||
dir_to_set = 4
|
||||
else
|
||||
if( ( src.x == usr.x ) || (src.y == usr.y) ) //Only supposed to work for cardinal directions.
|
||||
if( src.x == usr.x )
|
||||
if( src.y > usr.y )
|
||||
dir_to_set = 2
|
||||
else
|
||||
dir_to_set = 1
|
||||
else if( src.y == usr.y )
|
||||
if( src.x > usr.x )
|
||||
dir_to_set = 8
|
||||
else
|
||||
dir_to_set = 4
|
||||
else
|
||||
usr << "\red You can't reach there.."
|
||||
return //Only works for cardinal direcitons, diagonals aren't supposed to work like this.
|
||||
usr << "\red You can't reach there.."
|
||||
return //Only works for cardinal direcitons, diagonals aren't supposed to work like this.
|
||||
for(var/obj/structure/window/WINDOW in src.loc)
|
||||
if(WINDOW.dir == dir_to_set)
|
||||
usr << "\red There is already a window facing this way there."
|
||||
return
|
||||
usr << "\blue You start placing the window"
|
||||
if(do_after(user,20))
|
||||
if(!src) return //Grille destroyed while waiting
|
||||
for(var/obj/structure/window/WINDOW in src.loc)
|
||||
if(WINDOW.dir == dir_to_set)
|
||||
if(WINDOW.dir == dir_to_set)//checking this for a 2nd time to check if a window was made while we were waiting.
|
||||
usr << "\red There is already a window facing this way there."
|
||||
return
|
||||
usr << "\blue You start placing the window"
|
||||
if(do_after(user,20))
|
||||
if(!src) return //Grille destroyed while waiting
|
||||
for(var/obj/structure/window/WINDOW in src.loc)
|
||||
if(WINDOW.dir == dir_to_set)//checking this for a 2nd time to check if a window was made while we were waiting.
|
||||
usr << "\red There is already a window facing this way there."
|
||||
return
|
||||
var/obj/structure/window/WD
|
||||
if(istype(W,/obj/item/stack/sheet/rglass))
|
||||
WD = new/obj/structure/window(src.loc,1) //reinforced window
|
||||
else
|
||||
WD = new/obj/structure/window(src.loc,0) //normal window
|
||||
WD.dir = dir_to_set
|
||||
WD.ini_dir = dir_to_set
|
||||
WD.anchored = 0
|
||||
WD.state = 0
|
||||
var/obj/item/stack/ST = W
|
||||
ST.use(1)
|
||||
usr << "\blue You place the [WD] on the [src]"
|
||||
return
|
||||
else if(istype(W, /obj/item/weapon/shard))
|
||||
src.health -= W.force * 0.1
|
||||
else if(!shock(user, 70))
|
||||
playsound(src.loc, 'sound/effects/grillehit.ogg', 80, 1)
|
||||
switch(W.damtype)
|
||||
if("fire")
|
||||
src.health -= W.force
|
||||
if("brute")
|
||||
src.health -= W.force * 0.1
|
||||
src.healthcheck()
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
proc/healthcheck()
|
||||
if (src.health <= 0)
|
||||
if (!( src.destroyed ))
|
||||
src.icon_state = "brokengrille"
|
||||
src.density = 0
|
||||
src.destroyed = 1
|
||||
new /obj/item/stack/rods( src.loc )
|
||||
|
||||
var/obj/structure/window/WD
|
||||
if(istype(W,/obj/item/stack/sheet/rglass))
|
||||
WD = new/obj/structure/window(src.loc,1) //reinforced window
|
||||
else
|
||||
if (src.health <= -10.0)
|
||||
new /obj/item/stack/rods( src.loc )
|
||||
//SN src = null
|
||||
del(src)
|
||||
return
|
||||
WD = new/obj/structure/window(src.loc,0) //normal window
|
||||
WD.dir = dir_to_set
|
||||
WD.ini_dir = dir_to_set
|
||||
WD.anchored = 0
|
||||
WD.state = 0
|
||||
var/obj/item/stack/ST = W
|
||||
ST.use(1)
|
||||
usr << "\blue You place the [WD] on the [src]"
|
||||
return
|
||||
else if(istype(W, /obj/item/weapon/shard))
|
||||
src.health -= W.force * 0.1
|
||||
else if(!shock(user, 70))
|
||||
playsound(src.loc, 'sound/effects/grillehit.ogg', 80, 1)
|
||||
switch(W.damtype)
|
||||
if("fire")
|
||||
src.health -= W.force
|
||||
if("brute")
|
||||
src.health -= W.force * 0.1
|
||||
src.healthcheck()
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
/obj/structure/grille/proc/healthcheck()
|
||||
if (src.health <= 0)
|
||||
if (!( src.destroyed ))
|
||||
src.icon_state = "brokengrille"
|
||||
src.density = 0
|
||||
src.destroyed = 1
|
||||
new /obj/item/stack/rods( src.loc )
|
||||
|
||||
else
|
||||
if (src.health <= -10.0)
|
||||
new /obj/item/stack/rods( src.loc )
|
||||
//SN src = null
|
||||
del(src)
|
||||
return
|
||||
return
|
||||
|
||||
// shock user with probability prb (if all connections & power are working)
|
||||
// returns 1 if shocked, 0 otherwise
|
||||
|
||||
proc/shock(mob/user, prb)
|
||||
if(!anchored || destroyed) // anchored/destroyed grilles are never connected
|
||||
return 0
|
||||
if(!prob(prb))
|
||||
return 0
|
||||
if(!in_range(src, usr))//To prevent TK and mech users from getting shocked
|
||||
return 0
|
||||
var/turf/T = get_turf(src)
|
||||
var/obj/structure/cable/C = T.get_cable_node()
|
||||
if(C)
|
||||
if (electrocute_mob(user, C, src))
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(5, 1, src)
|
||||
s.start()
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
/obj/structure/grille/proc/shock(mob/user, prb)
|
||||
if(!anchored || destroyed) // anchored/destroyed grilles are never connected
|
||||
return 0
|
||||
if(!prob(prb))
|
||||
return 0
|
||||
if(!in_range(src, usr))//To prevent TK and mech users from getting shocked
|
||||
return 0
|
||||
var/turf/T = get_turf(src)
|
||||
var/obj/structure/cable/C = T.get_cable_node()
|
||||
if(C)
|
||||
if (electrocute_mob(user, C, src))
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(5, 1, src)
|
||||
s.start()
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
return 0
|
||||
|
||||
/obj/structure/grille/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
if(!destroyed)
|
||||
if(exposed_temperature > T0C + 1500)
|
||||
src.health -= 1
|
||||
healthcheck()
|
||||
..()
|
||||
@@ -243,9 +243,7 @@
|
||||
/obj/structure/table/attack_paw(mob/user as mob)
|
||||
if ((HULK in usr.mutations))
|
||||
usr << "\blue You destroy the table."
|
||||
for(var/mob/O in oviewers())
|
||||
if ((O.client && !( O.blinded )))
|
||||
O << "\red [user] smashes the table apart!"
|
||||
visible_message("\red [user] smashes the table apart!")
|
||||
if(istype(src, /obj/structure/table/reinforced))
|
||||
new /obj/item/weapon/table_parts/reinforced( src.loc )
|
||||
else if(istype(src, /obj/structure/table/woodentable))
|
||||
@@ -258,18 +256,14 @@
|
||||
step(user, get_dir(user, src))
|
||||
if (user.loc == src.loc)
|
||||
user.layer = TURF_LAYER
|
||||
for(var/mob/O in oviewers())
|
||||
if ((O.client && !( O.blinded )))
|
||||
O << "[user] hides under the table!"
|
||||
visible_message("[user] hides under the table!")
|
||||
//Foreach goto(69)
|
||||
return
|
||||
|
||||
|
||||
/obj/structure/table/attack_alien(mob/user as mob) //Removed code for larva since it doesn't work. Previous code is now a larva ability. /N
|
||||
usr << "\green You destroy the table."
|
||||
for(var/mob/O in oviewers())
|
||||
if ((O.client && !( O.blinded )))
|
||||
O << "\red [user] slices the table apart!"
|
||||
visible_message("\red [user] slices the table apart!")
|
||||
if(istype(src, /obj/structure/table/reinforced))
|
||||
new /obj/item/weapon/table_parts/reinforced( src.loc )
|
||||
else if(istype(src, /obj/structure/table/woodentable))
|
||||
@@ -281,12 +275,10 @@
|
||||
return
|
||||
|
||||
|
||||
/obj/structure/table/attack_animal(mob/living/simple_animal/user as mob) //Removed code for larva since it doesn't work. Previous code is now a larva ability. /N
|
||||
/obj/structure/table/attack_animal(mob/living/simple_animal/user as mob)
|
||||
if(user.wall_smash)
|
||||
usr << "\red You destroy the table."
|
||||
for(var/mob/O in oviewers())
|
||||
if ((O.client && !( O.blinded )))
|
||||
O << "\red [user] smashes the table apart!"
|
||||
visible_message("\red [user] smahes the table apart!")
|
||||
if(istype(src, /obj/structure/table/reinforced))
|
||||
new /obj/item/weapon/table_parts/reinforced( src.loc )
|
||||
else if(istype(src, /obj/structure/table/woodentable))
|
||||
@@ -303,9 +295,7 @@
|
||||
/obj/structure/table/attack_hand(mob/user as mob)
|
||||
if ((HULK in usr.mutations) || (SUPRSTR in usr.augmentations))
|
||||
usr << "\blue You destroy the table."
|
||||
for(var/mob/O in oviewers())
|
||||
if ((O.client && !( O.blinded )))
|
||||
O << "\red [user] smashes the table apart!"
|
||||
visible_message("\red [user] smahes the table apart!")
|
||||
if(istype(src, /obj/structure/table/reinforced))
|
||||
new /obj/item/weapon/table_parts/reinforced( src.loc )
|
||||
else if(istype(src, /obj/structure/table/woodentable))
|
||||
@@ -346,9 +336,7 @@
|
||||
return
|
||||
G.affecting.loc = src.loc
|
||||
G.affecting.Weaken(5)
|
||||
for(var/mob/O in viewers(world.view, src))
|
||||
if (O.client)
|
||||
O << "\red [G.assailant] puts [G.affecting] on the table."
|
||||
visible_message("\red [G.assailant] puts [G.affecting] on the table.")
|
||||
del(W)
|
||||
return
|
||||
|
||||
@@ -400,9 +388,7 @@
|
||||
return
|
||||
G.affecting.loc = src.loc
|
||||
G.affecting.Weaken(5)
|
||||
for(var/mob/O in viewers(world.view, src))
|
||||
if (O.client)
|
||||
O << "\red [G.assailant] puts [G.affecting] on the wooden table."
|
||||
visible_message("\red [G.assailant] puts [G.affecting] on the table.")
|
||||
del(W)
|
||||
return
|
||||
if (istype(W, /obj/item/weapon/wrench))
|
||||
@@ -451,9 +437,7 @@
|
||||
return
|
||||
G.affecting.loc = src.loc
|
||||
G.affecting.Weaken(5)
|
||||
for(var/mob/O in viewers(world.view, src))
|
||||
if (O.client)
|
||||
O << "\red [G.assailant] puts [G.affecting] on the reinforced table."
|
||||
visible_message("\red [G.assailant] puts [G.affecting] on the table.")
|
||||
del(W)
|
||||
return
|
||||
|
||||
|
||||
Reference in New Issue
Block a user