mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2026-07-21 05:02:40 +01:00
Merge branch 'dev' into ofChemistryAndStuff
Conflicts: code/game/objects/effects/chem/chemsmoke.dm code/modules/customitems/item_defines.dm code/modules/projectiles/guns/launcher/syringe_gun.dm code/modules/reagents/Chemistry-Holder.dm code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm code/modules/reagents/reagent_containers/food/drinks.dm code/modules/reagents/reagent_containers/pill.dm maps/exodus-1.dmm
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
icon = 'icons/obj/coatrack.dmi'
|
||||
icon_state = "coatrack0"
|
||||
var/obj/item/clothing/suit/coat
|
||||
var/list/allowed = list(/obj/item/clothing/suit/storage/labcoat, /obj/item/clothing/suit/storage/toggle/labcoat, /obj/item/clothing/suit/storage/det_suit)
|
||||
var/list/allowed = list(/obj/item/clothing/suit/storage/toggle/labcoat, /obj/item/clothing/suit/storage/det_suit)
|
||||
|
||||
/obj/structure/coatrack/attack_hand(mob/user as mob)
|
||||
user.visible_message("[user] takes [coat] off \the [src].", "You take [coat] off the \the [src]")
|
||||
|
||||
@@ -23,44 +23,7 @@
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/structure/largecrate/mule
|
||||
icon_state = "mulecrate"
|
||||
|
||||
/obj/structure/largecrate/lisa
|
||||
icon_state = "lisacrate"
|
||||
|
||||
/obj/structure/largecrate/lisa/attackby(obj/item/weapon/W as obj, mob/user as mob) //ugly but oh well
|
||||
if(istype(W, /obj/item/weapon/crowbar))
|
||||
new /mob/living/simple_animal/corgi/Lisa(loc)
|
||||
..()
|
||||
|
||||
/obj/structure/largecrate/cow
|
||||
name = "cow crate"
|
||||
icon_state = "lisacrate"
|
||||
|
||||
/obj/structure/largecrate/cow/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/crowbar))
|
||||
new /mob/living/simple_animal/cow(loc)
|
||||
..()
|
||||
|
||||
/obj/structure/largecrate/goat
|
||||
name = "goat crate"
|
||||
icon_state = "lisacrate"
|
||||
|
||||
/obj/structure/largecrate/goat/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/crowbar))
|
||||
new /mob/living/simple_animal/hostile/retaliate/goat(loc)
|
||||
..()
|
||||
|
||||
/obj/structure/largecrate/chick
|
||||
name = "chicken crate"
|
||||
icon_state = "lisacrate"
|
||||
|
||||
/obj/structure/largecrate/chick/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/crowbar))
|
||||
var/num = rand(4, 6)
|
||||
for(var/i = 0, i < num, i++)
|
||||
new /mob/living/simple_animal/chick(loc)
|
||||
..()
|
||||
name = "MULE crate"
|
||||
|
||||
/obj/structure/largecrate/hoverpod
|
||||
name = "\improper Hoverpod assembly crate"
|
||||
@@ -71,9 +34,43 @@
|
||||
if(istype(W, /obj/item/weapon/crowbar))
|
||||
var/obj/item/mecha_parts/mecha_equipment/ME
|
||||
var/obj/mecha/working/hoverpod/H = new (loc)
|
||||
|
||||
|
||||
ME = new /obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp
|
||||
ME.attach(H)
|
||||
ME = new /obj/item/mecha_parts/mecha_equipment/tool/passenger
|
||||
ME.attach(H)
|
||||
..()
|
||||
|
||||
/obj/structure/largecrate/animal
|
||||
icon_state = "mulecrate"
|
||||
var/held_count = 1
|
||||
var/held_type
|
||||
|
||||
/obj/structure/largecrate/animal/New()
|
||||
..()
|
||||
for(var/i = 1;i<=held_count;i++)
|
||||
new held_type(src)
|
||||
|
||||
/obj/structure/largecrate/animal/corgi
|
||||
name = "corgi carrier"
|
||||
held_type = /mob/living/simple_animal/corgi
|
||||
|
||||
/obj/structure/largecrate/animal/cow
|
||||
name = "cow crate"
|
||||
held_type = /mob/living/simple_animal/cow
|
||||
|
||||
/obj/structure/largecrate/animal/goat
|
||||
name = "goat crate"
|
||||
held_type = /mob/living/simple_animal/hostile/retaliate/goat
|
||||
|
||||
/obj/structure/largecrate/animal/cat
|
||||
name = "cat carrier"
|
||||
held_type = /mob/living/simple_animal/cat
|
||||
|
||||
/obj/structure/largecrate/animal/cat/bones
|
||||
held_type = /mob/living/simple_animal/cat/fluff/bones
|
||||
|
||||
/obj/structure/largecrate/animal/chick
|
||||
name = "chicken crate"
|
||||
held_count = 5
|
||||
held_type = /mob/living/simple_animal/chick
|
||||
@@ -1,5 +1,5 @@
|
||||
#define SHOWER_OPEN_LAYER MOB_LAYER + 0.1
|
||||
#define SHOWER_CLOSED_LAYER OBJ_LAYER + 0.4
|
||||
#define SHOWER_OPEN_LAYER OBJ_LAYER + 0.4
|
||||
#define SHOWER_CLOSED_LAYER MOB_LAYER + 0.1
|
||||
|
||||
/obj/structure/curtain
|
||||
name = "curtain"
|
||||
|
||||
@@ -1,333 +0,0 @@
|
||||
/*
|
||||
* False Walls
|
||||
*/
|
||||
/obj/structure/falsewall
|
||||
name = "wall"
|
||||
desc = "A huge chunk of metal used to seperate rooms."
|
||||
anchored = 1
|
||||
icon = 'icons/turf/walls.dmi'
|
||||
var/mineral = "metal"
|
||||
var/opening = 0
|
||||
|
||||
/obj/structure/falsewall/New()
|
||||
relativewall_neighbours()
|
||||
..()
|
||||
|
||||
/obj/structure/falsewall/Destroy()
|
||||
|
||||
var/temploc = src.loc
|
||||
|
||||
spawn(10)
|
||||
for(var/turf/simulated/wall/W in range(temploc,1))
|
||||
W.relativewall()
|
||||
|
||||
for(var/obj/structure/falsewall/W in range(temploc,1))
|
||||
W.relativewall()
|
||||
|
||||
for(var/obj/structure/falserwall/W in range(temploc,1))
|
||||
W.relativewall()
|
||||
..()
|
||||
|
||||
|
||||
/obj/structure/falsewall/relativewall()
|
||||
|
||||
if(!density)
|
||||
icon_state = "[mineral]fwall_open"
|
||||
return
|
||||
|
||||
var/junction = 0 //will be used to determine from which side the wall is connected to other walls
|
||||
|
||||
for(var/turf/simulated/wall/W in orange(src,1))
|
||||
if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls
|
||||
if(src.mineral == W.mineral)//Only 'like' walls connect -Sieve
|
||||
junction |= get_dir(src,W)
|
||||
for(var/obj/structure/falsewall/W in orange(src,1))
|
||||
if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls
|
||||
if(src.mineral == W.mineral)
|
||||
junction |= get_dir(src,W)
|
||||
for(var/obj/structure/falserwall/W in orange(src,1))
|
||||
if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls
|
||||
if(src.mineral == W.mineral)
|
||||
junction |= get_dir(src,W)
|
||||
icon_state = "[mineral][junction]"
|
||||
return
|
||||
|
||||
/obj/structure/falsewall/attack_hand(mob/user as mob)
|
||||
if(opening)
|
||||
return
|
||||
|
||||
if(density)
|
||||
opening = 1
|
||||
icon_state = "[mineral]fwall_open"
|
||||
flick("[mineral]fwall_opening", src)
|
||||
sleep(15)
|
||||
src.density = 0
|
||||
SetOpacity(0)
|
||||
opening = 0
|
||||
else
|
||||
opening = 1
|
||||
flick("[mineral]fwall_closing", src)
|
||||
icon_state = "[mineral]0"
|
||||
density = 1
|
||||
sleep(15)
|
||||
SetOpacity(1)
|
||||
src.relativewall()
|
||||
opening = 0
|
||||
|
||||
/obj/structure/falsewall/update_icon()//Calling icon_update will refresh the smoothwalls if it's closed, otherwise it will make sure the icon is correct if it's open
|
||||
..()
|
||||
if(density)
|
||||
icon_state = "[mineral]0"
|
||||
src.relativewall()
|
||||
else
|
||||
icon_state = "[mineral]fwall_open"
|
||||
|
||||
/obj/structure/falsewall/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(opening)
|
||||
user << "\red You must wait until the door has stopped moving."
|
||||
return
|
||||
|
||||
if(density)
|
||||
var/turf/T = get_turf(src)
|
||||
if(T.density)
|
||||
user << "\red The wall is blocked!"
|
||||
return
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
user.visible_message("[user] tightens some bolts on the wall.", "You tighten the bolts on the wall.")
|
||||
if(!mineral || mineral == "metal")
|
||||
T.ChangeTurf(/turf/simulated/wall)
|
||||
else
|
||||
T.ChangeTurf(text2path("/turf/simulated/wall/mineral/[mineral]"))
|
||||
qdel(src)
|
||||
|
||||
if( istype(W, /obj/item/weapon/weldingtool) )
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if( WT:welding )
|
||||
if(!mineral)
|
||||
T.ChangeTurf(/turf/simulated/wall)
|
||||
else
|
||||
T.ChangeTurf(text2path("/turf/simulated/wall/mineral/[mineral]"))
|
||||
if(mineral != "phoron")//Stupid shit keeps me from pushing the attackby() to phoron walls -Sieve
|
||||
T = get_turf(src)
|
||||
T.attackby(W,user)
|
||||
qdel(src)
|
||||
else
|
||||
user << "\blue You can't reach, close it first!"
|
||||
|
||||
if( istype(W, /obj/item/weapon/pickaxe/plasmacutter) )
|
||||
var/turf/T = get_turf(src)
|
||||
if(!mineral)
|
||||
T.ChangeTurf(/turf/simulated/wall)
|
||||
else
|
||||
T.ChangeTurf(text2path("/turf/simulated/wall/mineral/[mineral]"))
|
||||
if(mineral != "phoron")
|
||||
T = get_turf(src)
|
||||
T.attackby(W,user)
|
||||
qdel(src)
|
||||
|
||||
//DRILLING
|
||||
else if (istype(W, /obj/item/weapon/pickaxe/diamonddrill))
|
||||
var/turf/T = get_turf(src)
|
||||
if(!mineral)
|
||||
T.ChangeTurf(/turf/simulated/wall)
|
||||
else
|
||||
T.ChangeTurf(text2path("/turf/simulated/wall/mineral/[mineral]"))
|
||||
T = get_turf(src)
|
||||
T.attackby(W,user)
|
||||
qdel(src)
|
||||
|
||||
else if( istype(W, /obj/item/weapon/melee/energy/blade) )
|
||||
var/turf/T = get_turf(src)
|
||||
if(!mineral)
|
||||
T.ChangeTurf(/turf/simulated/wall)
|
||||
else
|
||||
T.ChangeTurf(text2path("/turf/simulated/wall/mineral/[mineral]"))
|
||||
if(mineral != "phoron")
|
||||
T = get_turf(src)
|
||||
T.attackby(W,user)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/falsewall/update_icon()//Calling icon_update will refresh the smoothwalls if it's closed, otherwise it will make sure the icon is correct if it's open
|
||||
..()
|
||||
if(density)
|
||||
icon_state = "[mineral]0"
|
||||
src.relativewall()
|
||||
else
|
||||
icon_state = "[mineral]fwall_open"
|
||||
|
||||
/*
|
||||
* False R-Walls
|
||||
*/
|
||||
|
||||
/obj/structure/falserwall
|
||||
name = "reinforced wall"
|
||||
desc = "A huge chunk of reinforced metal used to seperate rooms."
|
||||
icon = 'icons/turf/walls.dmi'
|
||||
icon_state = "r_wall"
|
||||
density = 1
|
||||
opacity = 1
|
||||
anchored = 1
|
||||
var/mineral = "metal"
|
||||
var/opening = 0
|
||||
|
||||
/obj/structure/falserwall/New()
|
||||
relativewall_neighbours()
|
||||
..()
|
||||
|
||||
|
||||
/obj/structure/falserwall/attack_hand(mob/user as mob)
|
||||
if(opening)
|
||||
return
|
||||
|
||||
if(density)
|
||||
opening = 1
|
||||
// Open wall
|
||||
icon_state = "frwall_open"
|
||||
flick("frwall_opening", src)
|
||||
sleep(15)
|
||||
density = 0
|
||||
SetOpacity(0)
|
||||
opening = 0
|
||||
else
|
||||
opening = 1
|
||||
icon_state = "r_wall"
|
||||
flick("frwall_closing", src)
|
||||
density = 1
|
||||
sleep(15)
|
||||
SetOpacity(1)
|
||||
relativewall()
|
||||
opening = 0
|
||||
|
||||
/obj/structure/falserwall/relativewall()
|
||||
|
||||
if(!density)
|
||||
icon_state = "frwall_open"
|
||||
return
|
||||
|
||||
var/junction = 0 //will be used to determine from which side the wall is connected to other walls
|
||||
|
||||
for(var/turf/simulated/wall/W in orange(src,1))
|
||||
if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls
|
||||
if(src.mineral == W.mineral)//Only 'like' walls connect -Sieve
|
||||
junction |= get_dir(src,W)
|
||||
for(var/obj/structure/falsewall/W in orange(src,1))
|
||||
if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls
|
||||
if(src.mineral == W.mineral)
|
||||
junction |= get_dir(src,W)
|
||||
for(var/obj/structure/falserwall/W in orange(src,1))
|
||||
if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls
|
||||
if(src.mineral == W.mineral)
|
||||
junction |= get_dir(src,W)
|
||||
icon_state = "rwall[junction]"
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/structure/falserwall/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(opening)
|
||||
user << "\red You must wait until the door has stopped moving."
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
var/turf/T = get_turf(src)
|
||||
user.visible_message("[user] tightens some bolts on the r wall.", "You tighten the bolts on the wall.")
|
||||
T.ChangeTurf(/turf/simulated/wall) //Intentionally makes a regular wall instead of an r-wall (no cheap r-walls for you).
|
||||
qdel(src)
|
||||
|
||||
if( istype(W, /obj/item/weapon/weldingtool) )
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if( WT.remove_fuel(0,user) )
|
||||
var/turf/T = get_turf(src)
|
||||
T.ChangeTurf(/turf/simulated/wall)
|
||||
T = get_turf(src)
|
||||
T.attackby(W,user)
|
||||
qdel(src)
|
||||
|
||||
else if( istype(W, /obj/item/weapon/pickaxe/plasmacutter) )
|
||||
var/turf/T = get_turf(src)
|
||||
T.ChangeTurf(/turf/simulated/wall)
|
||||
T = get_turf(src)
|
||||
T.attackby(W,user)
|
||||
qdel(src)
|
||||
|
||||
//DRILLING
|
||||
else if (istype(W, /obj/item/weapon/pickaxe/diamonddrill))
|
||||
var/turf/T = get_turf(src)
|
||||
T.ChangeTurf(/turf/simulated/wall)
|
||||
T = get_turf(src)
|
||||
T.attackby(W,user)
|
||||
qdel(src)
|
||||
|
||||
else if( istype(W, /obj/item/weapon/melee/energy/blade) )
|
||||
var/turf/T = get_turf(src)
|
||||
T.ChangeTurf(/turf/simulated/wall)
|
||||
T = get_turf(src)
|
||||
T.attackby(W,user)
|
||||
qdel(src)
|
||||
|
||||
|
||||
/*
|
||||
* Uranium Falsewalls
|
||||
*/
|
||||
|
||||
/obj/structure/falsewall/uranium
|
||||
name = "uranium wall"
|
||||
desc = "A wall with uranium plating. This is probably a bad idea."
|
||||
icon_state = ""
|
||||
mineral = "uranium"
|
||||
var/active = null
|
||||
var/last_event = 0
|
||||
|
||||
/obj/structure/falsewall/uranium/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
radiate()
|
||||
..()
|
||||
|
||||
/obj/structure/falsewall/uranium/attack_hand(mob/user as mob)
|
||||
radiate()
|
||||
..()
|
||||
|
||||
/obj/structure/falsewall/uranium/proc/radiate()
|
||||
if(!active)
|
||||
if(world.time > last_event+15)
|
||||
active = 1
|
||||
for(var/mob/living/L in range(3,src))
|
||||
L.apply_effect(12,IRRADIATE,0)
|
||||
for(var/turf/simulated/wall/mineral/uranium/T in range(3,src))
|
||||
T.radiate()
|
||||
last_event = world.time
|
||||
active = null
|
||||
return
|
||||
return
|
||||
/*
|
||||
* Other misc falsewall types
|
||||
*/
|
||||
|
||||
/obj/structure/falsewall/gold
|
||||
name = "gold wall"
|
||||
desc = "A wall with gold plating. Swag!"
|
||||
icon_state = ""
|
||||
mineral = "gold"
|
||||
|
||||
/obj/structure/falsewall/silver
|
||||
name = "silver wall"
|
||||
desc = "A wall with silver plating. Shiny."
|
||||
icon_state = ""
|
||||
mineral = "silver"
|
||||
|
||||
/obj/structure/falsewall/diamond
|
||||
name = "diamond wall"
|
||||
desc = "A wall with diamond plating. You monster."
|
||||
icon_state = ""
|
||||
mineral = "diamond"
|
||||
|
||||
/obj/structure/falsewall/phoron
|
||||
name = "phoron wall"
|
||||
desc = "A wall with phoron plating. This is definately a bad idea."
|
||||
icon_state = ""
|
||||
mineral = "phoron"
|
||||
|
||||
/obj/structure/falsewall/sandstone
|
||||
name = "sandstone wall"
|
||||
desc = "A wall with sandstone plating."
|
||||
icon_state = ""
|
||||
mineral = "sandstone"
|
||||
@@ -6,6 +6,13 @@
|
||||
var/state = 0
|
||||
var/health = 200
|
||||
var/cover = 50 //how much cover the girder provides against projectiles.
|
||||
var/material/reinf_material
|
||||
|
||||
/obj/structure/girder/displaced
|
||||
icon_state = "displaced"
|
||||
anchored = 0
|
||||
health = 50
|
||||
cover = 25
|
||||
|
||||
/obj/structure/girder/attack_generic(var/mob/user, var/damage, var/attack_message = "smashes apart", var/wallbreaker)
|
||||
if(!damage || !wallbreaker)
|
||||
@@ -30,156 +37,165 @@
|
||||
health -= damage
|
||||
..()
|
||||
if(health <= 0)
|
||||
new /obj/item/stack/sheet/metal(get_turf(src))
|
||||
qdel(src)
|
||||
dismantle()
|
||||
|
||||
return
|
||||
|
||||
/obj/structure/girder/proc/reset_girder()
|
||||
cover = initial(cover)
|
||||
health = min(health,initial(health))
|
||||
state = 0
|
||||
icon_state = initial(icon_state)
|
||||
if(reinf_material)
|
||||
reinforce_girder()
|
||||
|
||||
/obj/structure/girder/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/wrench) && state == 0)
|
||||
if(anchored && !istype(src,/obj/structure/girder/displaced))
|
||||
if(anchored && !reinf_material)
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1)
|
||||
user << "\blue Now disassembling the girder"
|
||||
user << "<span class='notice'>Now disassembling the girder...</span>"
|
||||
if(do_after(user,40))
|
||||
if(!src) return
|
||||
user << "\blue You dissasembled the girder!"
|
||||
user << "<span class='notice'>You dissasembled the girder!</span>"
|
||||
dismantle()
|
||||
else if(!anchored)
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1)
|
||||
user << "\blue Now securing the girder"
|
||||
user << "<span class='notice'>Now securing the girder...</span>"
|
||||
if(get_turf(user, 40))
|
||||
user << "\blue You secured the girder!"
|
||||
new/obj/structure/girder( src.loc )
|
||||
qdel(src)
|
||||
user << "<span class='notice'>You secured the girder!</span>"
|
||||
reset_girder()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter))
|
||||
user << "\blue Now slicing apart the girder"
|
||||
user << "<span class='notice'>Now slicing apart the girder...</span>"
|
||||
if(do_after(user,30))
|
||||
if(!src) return
|
||||
user << "\blue You slice apart the girder!"
|
||||
user << "<span class='notice'>You slice apart the girder!</span>"
|
||||
dismantle()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/pickaxe/diamonddrill))
|
||||
user << "\blue You drill through the girder!"
|
||||
user << "<span class='notice'>You drill through the girder!</span>"
|
||||
dismantle()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/screwdriver) && state == 2 && istype(src,/obj/structure/girder/reinforced))
|
||||
else if(istype(W, /obj/item/weapon/screwdriver) && state == 2)
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1)
|
||||
user << "\blue Now unsecuring support struts"
|
||||
user << "<span class='notice'>Now unsecuring support struts...</span>"
|
||||
if(do_after(user,40))
|
||||
if(!src) return
|
||||
user << "\blue You unsecured the support struts!"
|
||||
user << "<span class='notice'>You unsecured the support struts!</span>"
|
||||
state = 1
|
||||
|
||||
else if(istype(W, /obj/item/weapon/wirecutters) && istype(src,/obj/structure/girder/reinforced) && state == 1)
|
||||
else if(istype(W, /obj/item/weapon/wirecutters) && state == 1)
|
||||
playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
|
||||
user << "\blue Now removing support struts"
|
||||
user << "<span class='notice'>Now removing support struts...</span>"
|
||||
if(do_after(user,40))
|
||||
if(!src) return
|
||||
user << "\blue You removed the support struts!"
|
||||
new/obj/structure/girder( src.loc )
|
||||
qdel(src)
|
||||
user << "<span class='notice'>You removed the support struts!</span>"
|
||||
reinf_material.place_dismantled_product(get_turf(src))
|
||||
reinf_material = null
|
||||
reset_girder()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/crowbar) && state == 0 && anchored )
|
||||
else if(istype(W, /obj/item/weapon/crowbar) && state == 0 && anchored)
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
|
||||
user << "\blue Now dislodging the girder"
|
||||
user << "<span class='notice'>Now dislodging the girder...</span>"
|
||||
if(do_after(user, 40))
|
||||
if(!src) return
|
||||
user << "\blue You dislodged the girder!"
|
||||
new/obj/structure/girder/displaced( src.loc )
|
||||
qdel(src)
|
||||
user << "<span class='notice'>You dislodged the girder!</span>"
|
||||
icon_state = "displaced"
|
||||
anchored = 0
|
||||
health = 50
|
||||
cover = 25
|
||||
|
||||
else if(istype(W, /obj/item/stack/sheet))
|
||||
|
||||
var/obj/item/stack/sheet/S = W
|
||||
switch(S.type)
|
||||
if(S.get_amount() < 2)
|
||||
return ..()
|
||||
|
||||
if(/obj/item/stack/sheet/metal, /obj/item/stack/sheet/metal/cyborg)
|
||||
if(!anchored)
|
||||
if(S.use(2))
|
||||
user << "<span class='notice'>You create a false wall! Push on it to open or close the passage.</span>"
|
||||
new /obj/structure/falsewall (src.loc)
|
||||
qdel(src)
|
||||
else
|
||||
if(S.get_amount() < 2) return ..()
|
||||
user << "<span class='notice'>Now adding plating...</span>"
|
||||
if (do_after(user,40))
|
||||
if (S.use(2))
|
||||
user << "<span class='notice'>You added the plating!</span>"
|
||||
var/turf/Tsrc = get_turf(src)
|
||||
Tsrc.ChangeTurf(/turf/simulated/wall)
|
||||
for(var/turf/simulated/wall/X in Tsrc.loc)
|
||||
if(X) X.add_hiddenprint(usr)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(/obj/item/stack/sheet/plasteel, /obj/item/stack/sheet/plasteel/cyborg)
|
||||
if(!anchored)
|
||||
if(S.use(2))
|
||||
user << "\blue You create a false wall! Push on it to open or close the passage."
|
||||
new /obj/structure/falserwall (src.loc)
|
||||
qdel(src)
|
||||
else
|
||||
if (src.icon_state == "reinforced") //I cant believe someone would actually write this line of code...
|
||||
if(S.get_amount() < 1) return ..()
|
||||
user << "<span class='notice'>Now finalising reinforced wall.</span>"
|
||||
if(do_after(user, 50))
|
||||
if (S.use(1))
|
||||
user << "<span class='notice'>Wall fully reinforced!</span>"
|
||||
var/turf/Tsrc = get_turf(src)
|
||||
Tsrc.ChangeTurf(/turf/simulated/wall/r_wall)
|
||||
for(var/turf/simulated/wall/r_wall/X in Tsrc.loc)
|
||||
if(X) X.add_hiddenprint(usr)
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
if(S.get_amount() < 1) return ..()
|
||||
user << "<span class='notice'>Now reinforcing girders...</span>"
|
||||
if (do_after(user,60))
|
||||
if(S.use(1))
|
||||
user << "<span class='notice'>Girders reinforced!</span>"
|
||||
new/obj/structure/girder/reinforced( src.loc )
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(S.sheettype)
|
||||
var/M = S.sheettype
|
||||
// Ugly hack, will suffice for now. Need to fix it upstream as well, may rewrite mineral walls. ~Z
|
||||
if(M in list("mhydrogen","osmium","tritium","platinum","iron"))
|
||||
user << "You cannot plate the girder in that material."
|
||||
return
|
||||
if(!anchored)
|
||||
if(S.amount < 2) return
|
||||
S.use(2)
|
||||
user << "\blue You create a false wall! Push on it to open or close the passage."
|
||||
var/F = text2path("/obj/structure/falsewall/[M]")
|
||||
new F (src.loc)
|
||||
qdel(src)
|
||||
else
|
||||
if(S.amount < 2) return ..()
|
||||
user << "\blue Now adding plating..."
|
||||
if (do_after(user,40))
|
||||
if(!src || !S || S.amount < 2) return
|
||||
S.use(2)
|
||||
user << "\blue You added the plating!"
|
||||
var/turf/Tsrc = get_turf(src)
|
||||
Tsrc.ChangeTurf(text2path("/turf/simulated/wall/mineral/[M]"))
|
||||
for(var/turf/simulated/wall/mineral/X in Tsrc.loc)
|
||||
if(X) X.add_hiddenprint(usr)
|
||||
qdel(src)
|
||||
return
|
||||
var/material/M = name_to_material[S.sheettype]
|
||||
if(!istype(M))
|
||||
return ..()
|
||||
|
||||
var/wall_fake
|
||||
add_hiddenprint(usr)
|
||||
|
||||
if(M.integrity < 50)
|
||||
user << "<span class='notice'>This material is too soft for use in wall construction.</span>"
|
||||
return
|
||||
|
||||
user << "<span class='notice'>You begin adding the plating...</span>"
|
||||
|
||||
if(!do_after(user,40) || !S.use(2))
|
||||
return
|
||||
|
||||
if(anchored)
|
||||
user << "<span class='notice'>You added the plating!</span>"
|
||||
else
|
||||
user << "<span class='notice'>You create a false wall! Push on it to open or close the passage.</span>"
|
||||
wall_fake = 1
|
||||
|
||||
var/turf/Tsrc = get_turf(src)
|
||||
Tsrc.ChangeTurf(/turf/simulated/wall)
|
||||
var/turf/simulated/wall/T = get_turf(src)
|
||||
T.set_material(M, reinf_material)
|
||||
if(wall_fake)
|
||||
T.can_open = 1
|
||||
T.add_hiddenprint(usr)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
else if(istype(W, /obj/item/pipe))
|
||||
var/obj/item/pipe/P = W
|
||||
if (P.pipe_type in list(0, 1, 5)) //simple pipes, simple bends, and simple manifolds.
|
||||
user.drop_item()
|
||||
P.loc = src.loc
|
||||
user << "\blue You fit the pipe into the [src]!"
|
||||
user << "<span class='notice'>You fit the pipe into the [src]!"
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/structure/girder/proc/reinforce_girder()
|
||||
cover = reinf_material.hardness
|
||||
health = 500
|
||||
state = 2
|
||||
icon_state = "reinforced"
|
||||
|
||||
/obj/structure/girder/verb/reinforce_with_material()
|
||||
set name = "Reinforce girder"
|
||||
set desc = "Reinforce a girder with metal."
|
||||
set src in view(1)
|
||||
|
||||
var/mob/living/user = usr
|
||||
if(!istype(user) || !(user.l_hand || user.r_hand))
|
||||
return
|
||||
|
||||
if(reinf_material)
|
||||
user << "\The [src] is already reinforced."
|
||||
return
|
||||
|
||||
var/obj/item/stack/sheet/S = user.l_hand
|
||||
if(!istype(S))
|
||||
S = user.r_hand
|
||||
if(!istype(S))
|
||||
user << "You cannot plate \the [src] with that."
|
||||
return
|
||||
|
||||
if(S.get_amount() < 2)
|
||||
user << "There is not enough material here to reinforce the girder."
|
||||
return
|
||||
|
||||
var/material/M = name_to_material[S.sheettype]
|
||||
if(!istype(M) || M.integrity < 50)
|
||||
user << "You cannot reinforce \the [src] with that; it is too soft."
|
||||
return
|
||||
|
||||
user << "<span class='notice'>Now reinforcing...</span>"
|
||||
if (!do_after(user,40) || !S.use(2))
|
||||
return
|
||||
user << "<span class='notice'>You added reinforcement!</span>"
|
||||
|
||||
reinf_material = M
|
||||
reinforce_girder()
|
||||
|
||||
|
||||
/obj/structure/girder/proc/dismantle()
|
||||
new /obj/item/stack/sheet/metal(get_turf(src))
|
||||
qdel(src)
|
||||
@@ -203,101 +219,40 @@
|
||||
return
|
||||
if(2.0)
|
||||
if (prob(30))
|
||||
var/remains = pick(/obj/item/stack/rods,/obj/item/stack/sheet/metal)
|
||||
new remains(loc)
|
||||
qdel(src)
|
||||
dismantle()
|
||||
return
|
||||
if(3.0)
|
||||
if (prob(5))
|
||||
var/remains = pick(/obj/item/stack/rods,/obj/item/stack/sheet/metal)
|
||||
new remains(loc)
|
||||
qdel(src)
|
||||
dismantle()
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
/obj/structure/girder/displaced
|
||||
icon_state = "displaced"
|
||||
anchored = 0
|
||||
health = 50
|
||||
cover = 25
|
||||
|
||||
/obj/structure/girder/reinforced
|
||||
icon_state = "reinforced"
|
||||
state = 2
|
||||
health = 500
|
||||
cover = 80
|
||||
|
||||
/obj/structure/cultgirder
|
||||
/obj/structure/girder/cult
|
||||
icon= 'icons/obj/cult.dmi'
|
||||
icon_state= "cultgirder"
|
||||
anchored = 1
|
||||
density = 1
|
||||
layer = 2
|
||||
var/health = 250
|
||||
var/cover = 70
|
||||
health = 250
|
||||
cover = 70
|
||||
|
||||
/obj/structure/cultgirder/attack_generic(var/mob/user, var/damage, var/attack_message = "smashes apart", var/wallbreaker)
|
||||
if(!damage || !wallbreaker)
|
||||
return 0
|
||||
visible_message("<span class='danger'>[user] [attack_message] the [src]!</span>")
|
||||
dismantle()
|
||||
return 1
|
||||
|
||||
/obj/structure/cultgirder/proc/dismantle()
|
||||
/obj/structure/girder/cult/dismantle()
|
||||
new /obj/effect/decal/remains/human(get_turf(src))
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/cultgirder/attackby(obj/item/W as obj, mob/user as mob)
|
||||
/obj/structure/girder/cult/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1)
|
||||
user << "\blue Now disassembling the girder"
|
||||
user << "<span class='notice'>Now disassembling the girder...</span>"
|
||||
if(do_after(user,40))
|
||||
user << "\blue You dissasembled the girder!"
|
||||
user << "<span class='notice'>You dissasembled the girder!</span>"
|
||||
dismantle()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter))
|
||||
user << "\blue Now slicing apart the girder"
|
||||
user << "<span class='notice'>Now slicing apart the girder..."
|
||||
if(do_after(user,30))
|
||||
user << "\blue You slice apart the girder!"
|
||||
user << "<span class='notice'>You slice apart the girder!</span>"
|
||||
dismantle()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/pickaxe/diamonddrill))
|
||||
user << "\blue You drill through the girder!"
|
||||
user << "<span class='notice'>You drill through the girder!</span>"
|
||||
new /obj/effect/decal/remains/human(get_turf(src))
|
||||
dismantle()
|
||||
|
||||
/obj/structure/cultgirder/blob_act()
|
||||
if(prob(40))
|
||||
dismantle()
|
||||
|
||||
/obj/structure/cultgirder/bullet_act(var/obj/item/projectile/Proj) //No beam check- How else will you destroy the cult girder with silver bullets?????
|
||||
//Girders only provide partial cover. There's a chance that the projectiles will just pass through. (unless you are trying to shoot the girder)
|
||||
if(Proj.original != src && !prob(cover))
|
||||
return -1 //pass through
|
||||
|
||||
//Tasers and the like should not damage cultgirders.
|
||||
if(!(Proj.damage_type == BRUTE || Proj.damage_type == BURN))
|
||||
return
|
||||
|
||||
health -= Proj.damage
|
||||
..()
|
||||
if(health <= 0)
|
||||
dismantle()
|
||||
return
|
||||
|
||||
/obj/structure/cultgirder/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
qdel(src)
|
||||
return
|
||||
if(2.0)
|
||||
if (prob(30))
|
||||
dismantle()
|
||||
return
|
||||
if(3.0)
|
||||
if (prob(5))
|
||||
dismantle()
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
icon = 'icons/obj/doors/mineral_doors.dmi'
|
||||
icon_state = "metal"
|
||||
|
||||
var/mineralType = "metal"
|
||||
var/mineralType = DEFAULT_WALL_MATERIAL
|
||||
var/state = 0 //closed, 1 == open
|
||||
var/isSwitchingStates = 0
|
||||
var/hardness = 1
|
||||
@@ -119,24 +119,10 @@
|
||||
Dismantle(1)
|
||||
|
||||
proc/Dismantle(devastated = 0)
|
||||
if(!devastated)
|
||||
if (mineralType == "metal")
|
||||
var/ore = /obj/item/stack/sheet/metal
|
||||
for(var/i = 1, i <= oreAmount, i++)
|
||||
new ore(get_turf(src))
|
||||
else
|
||||
var/ore = text2path("/obj/item/stack/sheet/mineral/[mineralType]")
|
||||
for(var/i = 1, i <= oreAmount, i++)
|
||||
new ore(get_turf(src))
|
||||
else
|
||||
if (mineralType == "metal")
|
||||
var/ore = /obj/item/stack/sheet/metal
|
||||
for(var/i = 3, i <= oreAmount, i++)
|
||||
new ore(get_turf(src))
|
||||
else
|
||||
var/ore = text2path("/obj/item/stack/sheet/mineral/[mineralType]")
|
||||
for(var/i = 3, i <= oreAmount, i++)
|
||||
new ore(get_turf(src))
|
||||
var/material/M = name_to_material[mineralType]
|
||||
if(istype(M))
|
||||
for(var/i = (devastated? 1 : 3), i <= oreAmount, i++)
|
||||
new M.stack_type(get_turf(src))
|
||||
qdel(src)
|
||||
|
||||
ex_act(severity = 1)
|
||||
@@ -155,7 +141,7 @@
|
||||
return
|
||||
|
||||
/obj/structure/mineral_door/iron
|
||||
mineralType = "metal"
|
||||
mineralType = "iron"
|
||||
hardness = 3
|
||||
|
||||
/obj/structure/mineral_door/silver
|
||||
@@ -168,7 +154,7 @@
|
||||
/obj/structure/mineral_door/uranium
|
||||
mineralType = "uranium"
|
||||
hardness = 3
|
||||
luminosity = 2
|
||||
light_range = 2
|
||||
|
||||
/obj/structure/mineral_door/sandstone
|
||||
mineralType = "sandstone"
|
||||
|
||||
@@ -41,6 +41,15 @@
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
new /obj/item/stack/sheet/metal(src.loc)
|
||||
qdel(src)
|
||||
else if(istype(W, /obj/item/weapon/grab))
|
||||
user.visible_message("<span class='notice'>[user] attempts to buckle [W:affecting] into \the [src]!</span>")
|
||||
if(do_after(user, 20))
|
||||
W:affecting.loc = loc
|
||||
if(buckle_mob(W:affecting))
|
||||
W:affecting.visible_message(\
|
||||
"<span class='danger'>[W:affecting.name] is buckled to [src] by [user.name]!</span>",\
|
||||
"<span class='danger'>You are buckled to [src] by [user.name]!</span>",\
|
||||
"<span class='notice'>You hear metal clanking.</span>")
|
||||
else
|
||||
..()
|
||||
|
||||
|
||||
@@ -479,10 +479,10 @@
|
||||
/obj/structure/window/reinforced/polarized/proc/toggle()
|
||||
if(opacity)
|
||||
animate(src, color="#FFFFFF", time=5)
|
||||
SetOpacity(0)
|
||||
set_opacity(0)
|
||||
else
|
||||
animate(src, color="#222222", time=5)
|
||||
SetOpacity(1)
|
||||
set_opacity(1)
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user