Merge remote-tracking branch 'upstream/master' into ports-tailoring
@@ -49652,8 +49652,8 @@
|
||||
/obj/item/radio/intercom{
|
||||
pixel_y = 28
|
||||
},
|
||||
/obj/machinery/deployable/barrier,
|
||||
/obj/machinery/deployable/barrier,
|
||||
/obj/item/grenade/barrier,
|
||||
/obj/item/grenade/barrier,
|
||||
/turf/simulated/floor/plasteel{
|
||||
icon_state = "vault";
|
||||
dir = 8
|
||||
@@ -49673,8 +49673,8 @@
|
||||
},
|
||||
/area/security/armoury)
|
||||
"bLK" = (
|
||||
/obj/machinery/deployable/barrier,
|
||||
/obj/machinery/deployable/barrier,
|
||||
/obj/item/grenade/barrier,
|
||||
/obj/item/grenade/barrier,
|
||||
/turf/simulated/floor/plasteel{
|
||||
icon_state = "vault";
|
||||
dir = 8
|
||||
|
||||
@@ -4795,10 +4795,10 @@
|
||||
/obj/structure/reagent_dispensers/peppertank{
|
||||
pixel_y = 29
|
||||
},
|
||||
/obj/machinery/deployable/barrier,
|
||||
/obj/machinery/deployable/barrier,
|
||||
/obj/machinery/deployable/barrier,
|
||||
/obj/machinery/deployable/barrier,
|
||||
/obj/item/grenade/barrier,
|
||||
/obj/item/grenade/barrier,
|
||||
/obj/item/grenade/barrier,
|
||||
/obj/item/grenade/barrier,
|
||||
/turf/simulated/floor/plasteel{
|
||||
tag = "icon-vault (WEST)";
|
||||
icon_state = "vault";
|
||||
|
||||
@@ -4055,7 +4055,7 @@
|
||||
/turf/simulated/floor/plasteel,
|
||||
/area/security/armoury)
|
||||
"ahH" = (
|
||||
/obj/machinery/deployable/barrier,
|
||||
/obj/item/grenade/barrier,
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 8
|
||||
},
|
||||
@@ -4155,7 +4155,7 @@
|
||||
},
|
||||
/area/security/brig)
|
||||
"ahR" = (
|
||||
/obj/machinery/deployable/barrier,
|
||||
/obj/item/grenade/barrier,
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 4
|
||||
},
|
||||
@@ -4324,7 +4324,7 @@
|
||||
},
|
||||
/area/security/brig)
|
||||
"aif" = (
|
||||
/obj/machinery/deployable/barrier,
|
||||
/obj/item/grenade/barrier,
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 8
|
||||
},
|
||||
@@ -4370,7 +4370,7 @@
|
||||
},
|
||||
/area/security/brig)
|
||||
"aij" = (
|
||||
/obj/machinery/deployable/barrier,
|
||||
/obj/item/grenade/barrier,
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 4
|
||||
},
|
||||
@@ -32864,8 +32864,8 @@
|
||||
/obj/machinery/light{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/reagent_dispensers/watertank/high,
|
||||
/obj/item/reagent_containers/glass/bucket,
|
||||
/obj/structure/table,
|
||||
/obj/machinery/smartfridge/disks,
|
||||
/turf/simulated/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
@@ -36338,6 +36338,7 @@
|
||||
/turf/simulated/floor/carpet,
|
||||
/area/crew_quarters/bar)
|
||||
"bou" = (
|
||||
/obj/item/reagent_containers/glass/bucket,
|
||||
/obj/structure/sink{
|
||||
icon_state = "sink";
|
||||
dir = 8;
|
||||
|
||||
@@ -19,6 +19,8 @@
|
||||
|
||||
// Lavaland Ruins
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_biodome_beach.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_biodome_clown_planet.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_biodome_winter.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_animal_hospital.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_ash_walker1.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_blooddrunk1.dmm"
|
||||
@@ -44,7 +46,7 @@
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_syndicate_base1.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_ufo_crash.dmm"
|
||||
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_xeno_nest.dmm"
|
||||
|
||||
|
||||
|
||||
// Space Ruins
|
||||
#include "map_files\RandomRuins\SpaceRuins\abandonedzoo.dmm"
|
||||
|
||||
@@ -105,6 +105,9 @@
|
||||
#define NUTRITION_LEVEL_STARVING 150
|
||||
#define NUTRITION_LEVEL_CURSED 0
|
||||
|
||||
//Used as an upper limit for species that continuously gain nutriment
|
||||
#define NUTRITION_LEVEL_ALMOST_FULL 535
|
||||
|
||||
//Blood levels
|
||||
#define BLOOD_VOLUME_MAXIMUM 2000
|
||||
#define BLOOD_VOLUME_NORMAL 560
|
||||
|
||||
@@ -12,6 +12,19 @@
|
||||
Comes with a rustic wooden bar and suicidal bartender."
|
||||
suffix = "lavaland_biodome_beach.dmm"
|
||||
|
||||
/datum/map_template/ruin/lavaland/biodome/winter
|
||||
name = "Biodome Winter"
|
||||
id = "biodome-winter"
|
||||
description = "For those getaways where you want to get back to nature, but you don't want to leave the fortified military compound where you spend your days. \
|
||||
Includes a unique(*) laser pistol display case, and the recently introduced I.C.E(tm)."
|
||||
suffix = "lavaland_biodome_winter.dmm"
|
||||
|
||||
/datum/map_template/ruin/lavaland/biodome/clown
|
||||
name = "Biodome Clown Planet"
|
||||
id = "biodome-clown"
|
||||
description = "WELCOME TO CLOWN PLANET! HONK HONK HONK etc.!"
|
||||
suffix = "lavaland_biodome_clown_planet.dmm"
|
||||
|
||||
/datum/map_template/ruin/lavaland/cube
|
||||
name = "The Wishgranter Cube"
|
||||
id = "wishgranter-cube"
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
/obj/effect/proc_holder/spell/targeted/charge
|
||||
name = "Charge"
|
||||
desc = "This spell can be used to recharge a variety of things in your hands, from magical artifacts to electrical components. A creative wizard can even use it to grant magical power to a fellow magic user."
|
||||
|
||||
school = "transmutation"
|
||||
charge_max = 600
|
||||
clothes_req = 0
|
||||
@@ -10,7 +9,7 @@
|
||||
range = -1
|
||||
cooldown_min = 400 //50 deciseconds reduction per rank
|
||||
include_user = 1
|
||||
|
||||
action_icon_state = "charge"
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/charge/cast(list/targets,mob/user = usr)
|
||||
for(var/mob/living/L in targets)
|
||||
|
||||
@@ -11,8 +11,6 @@
|
||||
cooldown_min = 10 //Gun wizard
|
||||
action_icon_state = "bolt_action"
|
||||
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/infinite_guns/cast(list/targets, mob/user = usr)
|
||||
for(var/mob/living/carbon/C in targets)
|
||||
C.drop_item()
|
||||
|
||||
@@ -72,6 +72,7 @@
|
||||
/obj/effect/proc_holder/spell/noclothes
|
||||
name = "No Clothes"
|
||||
desc = "This always-on spell allows you to cast magic without your garments."
|
||||
action_icon_state = "no_clothes"
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/genetic/mutate
|
||||
name = "Mutate"
|
||||
|
||||
@@ -482,10 +482,10 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
|
||||
|
||||
/datum/supply_packs/security/securitybarriers
|
||||
name = "Security Barriers Crate"
|
||||
contains = list(/obj/machinery/deployable/barrier,
|
||||
/obj/machinery/deployable/barrier,
|
||||
/obj/machinery/deployable/barrier,
|
||||
/obj/machinery/deployable/barrier)
|
||||
contains = list(/obj/item/grenade/barrier,
|
||||
/obj/item/grenade/barrier,
|
||||
/obj/item/grenade/barrier,
|
||||
/obj/item/grenade/barrier)
|
||||
cost = 20
|
||||
containername = "security barriers crate"
|
||||
|
||||
|
||||
@@ -12,6 +12,9 @@
|
||||
/area/ruin/powered/snow_biodome
|
||||
icon_state = "dk_yellow"
|
||||
|
||||
/area/ruin/powered/snow_cabin
|
||||
icon_state = "bar"
|
||||
|
||||
/area/ruin/powered/gluttony
|
||||
icon_state = "dk_yellow"
|
||||
|
||||
|
||||
@@ -290,10 +290,10 @@
|
||||
emote_hear = list("gaffaws", "laughs")
|
||||
response_help = "hugs"
|
||||
attacktext = "wildly tickles"
|
||||
maxHealth = 150
|
||||
health = 150
|
||||
melee_damage_lower = 20
|
||||
melee_damage_upper = 20
|
||||
maxHealth = 175
|
||||
health = 175
|
||||
melee_damage_lower = 25
|
||||
melee_damage_upper = 25
|
||||
|
||||
attack_sound = 'sound/items/bikehorn.ogg'
|
||||
feast_sound = 'sound/spookoween/scary_horn2.ogg'
|
||||
|
||||
@@ -1,144 +1,231 @@
|
||||
/*
|
||||
CONTAINS:
|
||||
#define SINGLE "single"
|
||||
#define VERTICAL "vertical"
|
||||
#define HORIZONTAL "horizontal"
|
||||
|
||||
Deployable items
|
||||
Barricades
|
||||
#define METAL 1
|
||||
#define WOOD 2
|
||||
#define SAND 3
|
||||
|
||||
for reference:
|
||||
//Barricades/cover
|
||||
|
||||
access_security = 1
|
||||
access_brig = 2
|
||||
access_armory = 3
|
||||
access_forensics_lockers= 4
|
||||
access_medical = 5
|
||||
access_morgue = 6
|
||||
access_tox = 7
|
||||
access_tox_storage = 8
|
||||
access_genetics = 9
|
||||
access_engine = 10
|
||||
access_engine_equip= 11
|
||||
access_maint_tunnels = 12
|
||||
access_external_airlocks = 13
|
||||
access_emergency_storage = 14
|
||||
access_change_ids = 15
|
||||
access_ai_upload = 16
|
||||
access_teleporter = 17
|
||||
access_eva = 18
|
||||
access_heads = 19
|
||||
access_captain = 20
|
||||
access_all_personal_lockers = 21
|
||||
access_chapel_office = 22
|
||||
access_tech_storage = 23
|
||||
access_atmospherics = 24
|
||||
access_bar = 25
|
||||
access_janitor = 26
|
||||
access_crematorium = 27
|
||||
access_kitchen = 28
|
||||
access_robotics = 29
|
||||
access_rd = 30
|
||||
access_cargo = 31
|
||||
access_construction = 32
|
||||
access_chemistry = 33
|
||||
access_cargo_bot = 34
|
||||
access_hydroponics = 35
|
||||
access_manufacturing = 36
|
||||
access_library = 37
|
||||
access_lawyer = 38
|
||||
access_virology = 39
|
||||
access_cmo = 40
|
||||
access_qm = 41
|
||||
access_court = 42
|
||||
access_clown = 43
|
||||
access_mime = 44
|
||||
|
||||
*/
|
||||
|
||||
|
||||
//Barricades, maybe there will be a metal one later...
|
||||
/obj/structure/barricade
|
||||
anchored = 1.0
|
||||
density = 1.0
|
||||
var/health = 100.0
|
||||
var/maxhealth = 100.0
|
||||
name = "chest high wall"
|
||||
desc = "Looks like this would make good cover."
|
||||
anchored = TRUE
|
||||
density = TRUE
|
||||
max_integrity = 100
|
||||
var/proj_pass_rate = 50 //How many projectiles will pass the cover. Lower means stronger cover
|
||||
var/bar_material = METAL
|
||||
var/drop_amount = 3
|
||||
var/stacktype = /obj/item/stack/sheet/metal
|
||||
|
||||
/obj/structure/barricade/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
if(istype(W, stacktype))
|
||||
if(src.health < src.maxhealth)
|
||||
visible_message("<span class='warning'>[user] begins to repair the [src]!</span>")
|
||||
if(do_after(user, 20 * W.toolspeed, target = src))
|
||||
src.health = src.maxhealth
|
||||
W:use(1)
|
||||
visible_message("<span class='warning'>[user] repairs the [src]!</span>")
|
||||
return
|
||||
else
|
||||
return
|
||||
return
|
||||
else if(istype(W, /obj/item/crowbar))
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
user.visible_message("<span class='notice'>[user] is prying apart \the [src].</span>", "<span class='notice'>You begin to pry apart \the [src].</span>")
|
||||
playsound(src, W.usesound, 200, 1)
|
||||
/obj/structure/barricade/blob_act(obj/structure/blob/B) //TO-DO-OBJECT-DAMAGE: Kill off when everything is damageable
|
||||
take_damage(400, BRUTE, "melee", 0, get_dir(src, B))
|
||||
|
||||
if(do_after(user, 300 * W.toolspeed, target = src) && !QDELETED(src))
|
||||
user.visible_message("<span class='notice'>[user] pries apart \the [src].</span>", "<span class='notice'>You pry apart \the [src].</span>")
|
||||
dismantle()
|
||||
/obj/structure/barricade/ex_act(severity) //TO-DO-OBJECT-DAMAGE: Kill off when everything is damageable
|
||||
if(resistance_flags & INDESTRUCTIBLE)
|
||||
return
|
||||
else
|
||||
switch(W.damtype)
|
||||
if("fire")
|
||||
src.health -= W.force * 1
|
||||
if("brute")
|
||||
src.health -= W.force * 0.75
|
||||
else
|
||||
if(src.health <= 0)
|
||||
visible_message("<span class='danger'>\The [src] is smashed apart!</span>")
|
||||
dismantle()
|
||||
..()
|
||||
|
||||
/obj/structure/barricade/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
visible_message("<span class='danger'>\The [src] is blown apart!</span>")
|
||||
if(1)
|
||||
obj_integrity = 0
|
||||
qdel(src)
|
||||
return
|
||||
if(2.0)
|
||||
src.health -= 25
|
||||
if(src.health <= 0)
|
||||
visible_message("<span class='danger'>\The [src] is blown apart!</span>")
|
||||
dismantle()
|
||||
return
|
||||
if(2)
|
||||
take_damage(rand(100, 250), BRUTE, "bomb", 0)
|
||||
if(3)
|
||||
take_damage(rand(10, 90), BRUTE, "bomb", 0)
|
||||
|
||||
/obj/structure/barricade/blob_act()
|
||||
src.health -= 25
|
||||
if(src.health <= 0)
|
||||
visible_message("<span class='danger'>The blob eats through \the [src]!</span>")
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/structure/barricade/CanPass(atom/movable/mover, turf/target, height=0)//So bullets will fly over and stuff.
|
||||
if(height==0)
|
||||
return 1
|
||||
if(istype(mover) && mover.checkpass(PASSTABLE))
|
||||
return 1
|
||||
/obj/structure/barricade/mech_melee_attack(obj/mecha/M) //TO-DO-OBJECT-DAMAGE: Kill off when everything is damageable
|
||||
M.do_attack_animation(src)
|
||||
var/play_soundeffect = 0
|
||||
var/mech_damtype = M.damtype
|
||||
if(M.selected)
|
||||
mech_damtype = M.selected.damtype
|
||||
play_soundeffect = 1
|
||||
else
|
||||
return 0
|
||||
switch(M.damtype)
|
||||
if(BRUTE)
|
||||
playsound(src, 'sound/weapons/punch4.ogg', 50, 1)
|
||||
if(BURN)
|
||||
playsound(src, 'sound/items/welder.ogg', 50, 1)
|
||||
if(TOX)
|
||||
playsound(src, 'sound/effects/spray2.ogg', 50, 1)
|
||||
return 0
|
||||
else
|
||||
return 0
|
||||
visible_message("<span class='danger'>[M.name] has hit [src].</span>")
|
||||
return take_damage(M.force*3, mech_damtype, "melee", play_soundeffect, get_dir(src, M)) // multiplied by 3 so we can hit objs hard but not be overpowered against mobs.
|
||||
|
||||
/obj/structure/barricade/proc/dismantle()
|
||||
if(stacktype)
|
||||
new stacktype(get_turf(src))
|
||||
new stacktype(get_turf(src))
|
||||
new stacktype(get_turf(src))
|
||||
/obj/structure/barricade/deconstruct(disassembled = TRUE)
|
||||
make_debris()
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/barricade/proc/make_debris()
|
||||
if(stacktype)
|
||||
new stacktype(get_turf(src), drop_amount)
|
||||
|
||||
/obj/structure/barricade/attackby(obj/item/I, mob/user, params)
|
||||
if(iswelder(I) && user.a_intent != INTENT_HARM && bar_material == METAL)
|
||||
var/obj/item/weldingtool/WT = I
|
||||
if(obj_integrity < max_integrity)
|
||||
if(WT.remove_fuel(0, user))
|
||||
to_chat(user, "<span class='notice'>You begin repairing [src]...</span>")
|
||||
playsound(loc, WT.usesound, 40, 1)
|
||||
if(do_after(user, 40 * I.toolspeed, target = src))
|
||||
obj_integrity = Clamp(obj_integrity + 20, 0, max_integrity)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/structure/barricade/CanPass(atom/movable/mover, turf/target)//So bullets will fly over and stuff.
|
||||
if(locate(/obj/structure/barricade) in get_turf(mover))
|
||||
return TRUE
|
||||
else if(istype(mover, /obj/item/projectile))
|
||||
if(!anchored)
|
||||
return TRUE
|
||||
var/obj/item/projectile/proj = mover
|
||||
if(proj.firer && Adjacent(proj.firer))
|
||||
return TRUE
|
||||
if(prob(proj_pass_rate))
|
||||
return TRUE
|
||||
return FALSE
|
||||
else
|
||||
return !density
|
||||
|
||||
|
||||
|
||||
/////BARRICADE TYPES///////
|
||||
|
||||
/obj/structure/barricade/wooden
|
||||
name = "wooden barricade"
|
||||
desc = "This space is blocked off by a wooden barricade."
|
||||
icon = 'icons/obj/structures.dmi'
|
||||
icon_state = "woodenbarricade"
|
||||
bar_material = WOOD
|
||||
stacktype = /obj/item/stack/sheet/wood
|
||||
burn_state = FLAMMABLE
|
||||
burntime = 25
|
||||
|
||||
/obj/structure/barricade/wooden/attackby(obj/item/I, mob/user)
|
||||
if(istype(I,/obj/item/stack/sheet/wood))
|
||||
var/obj/item/stack/sheet/wood/W = I
|
||||
if(W.amount < 5)
|
||||
to_chat(user, "<span class='warning'>You need at least five wooden planks to make a wall!</span>")
|
||||
return
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You start adding [I] to [src]...</span>")
|
||||
if(do_after(user, 50, target = src))
|
||||
W.use(5)
|
||||
new /turf/simulated/wall/mineral/wood/nonmetal(get_turf(src))
|
||||
qdel(src)
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/structure/barricade/wooden/crude
|
||||
name = "crude plank barricade"
|
||||
desc = "This space is blocked off by a crude assortment of planks."
|
||||
icon_state = "woodenbarricade-old"
|
||||
drop_amount = 1
|
||||
max_integrity = 50
|
||||
proj_pass_rate = 65
|
||||
|
||||
/obj/structure/barricade/wooden/crude/snow
|
||||
desc = "This space is blocked off by a crude assortment of planks. It seems to be covered in a layer of snow."
|
||||
icon_state = "woodenbarricade-snow-old"
|
||||
max_integrity = 75
|
||||
|
||||
/obj/structure/barricade/sandbags
|
||||
name = "sandbags"
|
||||
desc = "Bags of sand. Self explanatory."
|
||||
icon = 'icons/obj/smooth_structures/sandbags.dmi'
|
||||
icon_state = "sandbags"
|
||||
max_integrity = 280
|
||||
proj_pass_rate = 20
|
||||
pass_flags = LETPASSTHROW
|
||||
bar_material = SAND
|
||||
climbable = TRUE
|
||||
smooth = SMOOTH_TRUE
|
||||
canSmoothWith = list(/obj/structure/barricade/sandbags, /turf/simulated/wall, /turf/simulated/wall/r_wall, /obj/structure/falsewall, /obj/structure/falsewall/reinforced, /turf/simulated/wall/rust, /turf/simulated/wall/r_wall/rust, /obj/structure/barricade/security)
|
||||
stacktype = null
|
||||
|
||||
/obj/structure/barricade/security
|
||||
name = "security barrier"
|
||||
desc = "A deployable barrier. Provides good cover in fire fights."
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "barrier0"
|
||||
density = FALSE
|
||||
anchored = FALSE
|
||||
max_integrity = 180
|
||||
proj_pass_rate = 20
|
||||
armor = list(melee = 10, bullet = 50, laser = 50, energy = 50, bomb = 10, bio = 100, rad = 100)
|
||||
stacktype = null
|
||||
var/deploy_time = 40
|
||||
var/deploy_message = TRUE
|
||||
|
||||
/obj/structure/barricade/security/New()
|
||||
..()
|
||||
addtimer(CALLBACK(src, .proc/deploy), deploy_time)
|
||||
|
||||
/obj/structure/barricade/security/proc/deploy()
|
||||
icon_state = "barrier1"
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
if(deploy_message)
|
||||
visible_message("<span class='warning'>[src] deploys!</span>")
|
||||
|
||||
|
||||
/obj/item/grenade/barrier
|
||||
name = "barrier grenade"
|
||||
desc = "Instant cover."
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
icon_state = "flashbang"
|
||||
item_state = "flashbang"
|
||||
actions_types = list(/datum/action/item_action/toggle_barrier_spread)
|
||||
var/mode = SINGLE
|
||||
|
||||
/obj/item/grenade/barrier/examine(mob/user)
|
||||
. = ..()
|
||||
to_chat(user, "<span class='notice'>Alt-click to toggle modes.</span>")
|
||||
|
||||
/obj/item/grenade/barrier/AltClick(mob/living/carbon/user)
|
||||
if(!istype(user) || !user.Adjacent(src) || user.incapacitated())
|
||||
return
|
||||
toggle_mode(user)
|
||||
|
||||
/obj/item/grenade/barrier/proc/toggle_mode(mob/user)
|
||||
switch(mode)
|
||||
if(SINGLE)
|
||||
mode = VERTICAL
|
||||
if(VERTICAL)
|
||||
mode = HORIZONTAL
|
||||
if(HORIZONTAL)
|
||||
mode = SINGLE
|
||||
|
||||
to_chat(user, "[src] is now in [mode] mode.")
|
||||
|
||||
/obj/item/grenade/barrier/prime()
|
||||
new /obj/structure/barricade/security(get_turf(loc))
|
||||
switch(mode)
|
||||
if(VERTICAL)
|
||||
var/target_turf = get_step(src, NORTH)
|
||||
if(!(is_blocked_turf(target_turf)))
|
||||
new /obj/structure/barricade/security(target_turf)
|
||||
|
||||
var/target_turf2 = get_step(src, SOUTH)
|
||||
if(!(is_blocked_turf(target_turf2)))
|
||||
new /obj/structure/barricade/security(target_turf2)
|
||||
if(HORIZONTAL)
|
||||
var/target_turf = get_step(src, EAST)
|
||||
if(!(is_blocked_turf(target_turf)))
|
||||
new /obj/structure/barricade/security(target_turf)
|
||||
|
||||
var/target_turf2 = get_step(src, WEST)
|
||||
if(!(is_blocked_turf(target_turf2)))
|
||||
new /obj/structure/barricade/security(target_turf2)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/grenade/barrier/ui_action_click(mob/user)
|
||||
toggle_mode(user)
|
||||
|
||||
|
||||
/obj/structure/barricade/mime
|
||||
name = "floor"
|
||||
desc = "Is... this a floor?"
|
||||
@@ -149,128 +236,10 @@ for reference:
|
||||
/obj/structure/barricade/mime/mrcd
|
||||
stacktype = null
|
||||
|
||||
//Actual Deployable machinery stuff
|
||||
#undef SINGLE
|
||||
#undef VERTICAL
|
||||
#undef HORIZONTAL
|
||||
|
||||
/obj/machinery/deployable
|
||||
name = "deployable"
|
||||
desc = "deployable"
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
req_access = list(access_security)//I'm changing this until these are properly tested./N
|
||||
|
||||
/obj/machinery/deployable/barrier
|
||||
name = "deployable barrier"
|
||||
desc = "A deployable barrier. Swipe your ID card to lock/unlock it."
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
anchored = 0.0
|
||||
density = 1.0
|
||||
icon_state = "barrier0"
|
||||
var/health = 100.0
|
||||
var/maxhealth = 100.0
|
||||
var/locked = 0.0
|
||||
// req_access = list(access_maint_tunnels)
|
||||
|
||||
/obj/machinery/deployable/barrier/New()
|
||||
..()
|
||||
|
||||
src.icon_state = "barrier[src.locked]"
|
||||
|
||||
/obj/machinery/deployable/barrier/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
if(istype(W, /obj/item/card/id))
|
||||
if(src.allowed(user))
|
||||
if(src.emagged < 2.0)
|
||||
src.locked = !src.locked
|
||||
src.anchored = !src.anchored
|
||||
src.icon_state = "barrier[src.locked]"
|
||||
if((src.locked == 1.0) && (src.emagged < 2.0))
|
||||
to_chat(user, "Barrier lock toggled on.")
|
||||
return
|
||||
else if((src.locked == 0.0) && (src.emagged < 2.0))
|
||||
to_chat(user, "Barrier lock toggled off.")
|
||||
return
|
||||
else
|
||||
do_sparks(2, 1, src)
|
||||
visible_message("<span class='warning'>BZZzZZzZZzZT</span>")
|
||||
return
|
||||
return
|
||||
else if(istype(W, /obj/item/wrench))
|
||||
if(src.health < src.maxhealth)
|
||||
src.health = src.maxhealth
|
||||
src.emagged = 0
|
||||
src.req_access = list(access_security)
|
||||
visible_message("<span class='warning'>[user] repairs the [src]!</span>")
|
||||
return
|
||||
else if(src.emagged > 0)
|
||||
src.emagged = 0
|
||||
src.req_access = list(access_security)
|
||||
visible_message("<span class='warning'>[user] repairs the [src]!</span>")
|
||||
return
|
||||
return
|
||||
else
|
||||
switch(W.damtype)
|
||||
if("fire")
|
||||
src.health -= W.force * 0.75
|
||||
if("brute")
|
||||
src.health -= W.force * 0.5
|
||||
else
|
||||
if(src.health <= 0)
|
||||
src.explode()
|
||||
..()
|
||||
|
||||
/obj/machinery/deployable/barrier/emag_act(user as mob)
|
||||
if(!emagged)
|
||||
emagged = 1
|
||||
req_access = null
|
||||
to_chat(user, "You break the ID authentication lock on the [src].")
|
||||
do_sparks(2, 1, src)
|
||||
visible_message("<span class='warning'>BZZzZZzZZzZT</span>")
|
||||
else if(src.emagged == 1)
|
||||
src.emagged = 2
|
||||
to_chat(user, "You short out the anchoring mechanism on the [src].")
|
||||
do_sparks(2, 1, src)
|
||||
visible_message("<span class='warning'>BZZzZZzZZzZT</span>")
|
||||
|
||||
/obj/machinery/deployable/barrier/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
src.explode()
|
||||
return
|
||||
if(2.0)
|
||||
src.health -= 25
|
||||
if(src.health <= 0)
|
||||
src.explode()
|
||||
return
|
||||
|
||||
/obj/machinery/deployable/barrier/emp_act(severity)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
if(prob(50/severity))
|
||||
locked = !locked
|
||||
anchored = !anchored
|
||||
icon_state = "barrier[src.locked]"
|
||||
|
||||
/obj/machinery/deployable/barrier/blob_act()
|
||||
src.health -= 25
|
||||
if(src.health <= 0)
|
||||
src.explode()
|
||||
return
|
||||
|
||||
/obj/machinery/deployable/barrier/CanPass(atom/movable/mover, turf/target, height=0)//So bullets will fly over and stuff.
|
||||
if(height==0)
|
||||
return 1
|
||||
if(istype(mover) && mover.checkpass(PASSTABLE))
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
/obj/machinery/deployable/barrier/proc/explode()
|
||||
visible_message("<span class='danger'>[src] blows apart!</span>")
|
||||
var/turf/Tsec = get_turf(src)
|
||||
|
||||
/* var/obj/item/stack/rods/ =*/
|
||||
new /obj/item/stack/rods(Tsec)
|
||||
|
||||
do_sparks(3, 1, src)
|
||||
|
||||
explosion(src.loc,-1,-1,0)
|
||||
if(src)
|
||||
qdel(src)
|
||||
#undef METAL
|
||||
#undef WOOD
|
||||
#undef SAND
|
||||
@@ -6,18 +6,18 @@
|
||||
anchored = TRUE
|
||||
var/amount = 1 //Basically moles.
|
||||
|
||||
/obj/effect/decal/cleanable/liquid_fuel/Initialize(newLoc, amt = 1)
|
||||
/obj/effect/decal/cleanable/liquid_fuel/Initialize(mapload, amt = 1)
|
||||
. = ..()
|
||||
amount = amt
|
||||
|
||||
//Be absorbed by any other liquid fuel in the tile.
|
||||
for(var/obj/effect/decal/cleanable/liquid_fuel/other in newLoc)
|
||||
for(var/obj/effect/decal/cleanable/liquid_fuel/other in loc)
|
||||
if(other != src)
|
||||
other.amount += amount
|
||||
spawn other.Spread()
|
||||
qdel(src)
|
||||
|
||||
Spread()
|
||||
. = ..()
|
||||
|
||||
/obj/effect/decal/cleanable/liquid_fuel/proc/Spread()
|
||||
//Allows liquid fuels to sometimes flow into other tiles.
|
||||
|
||||
@@ -33,7 +33,7 @@ var/global/list/image/splatter_cache = list()
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/effect/decal/cleanable/blood/Initialize()
|
||||
/obj/effect/decal/cleanable/blood/Initialize(mapload)
|
||||
. = ..()
|
||||
update_icon()
|
||||
if(GAMEMODE_IS_CULT)
|
||||
@@ -137,7 +137,7 @@ var/global/list/image/splatter_cache = list()
|
||||
amount = 0
|
||||
var/message
|
||||
|
||||
/obj/effect/decal/cleanable/blood/writing/Initialize()
|
||||
/obj/effect/decal/cleanable/blood/writing/Initialize(mapload)
|
||||
. = ..()
|
||||
if(random_icon_states.len)
|
||||
for(var/obj/effect/decal/cleanable/blood/writing/W in loc)
|
||||
@@ -210,7 +210,7 @@ var/global/list/image/splatter_cache = list()
|
||||
break
|
||||
|
||||
|
||||
/obj/effect/decal/cleanable/blood/old/Initialize()
|
||||
/obj/effect/decal/cleanable/blood/old/Initialize(mapload)
|
||||
. = ..()
|
||||
bloodiness = 0
|
||||
dry()
|
||||
@@ -218,7 +218,7 @@ var/global/list/image/splatter_cache = list()
|
||||
/obj/effect/decal/cleanable/blood/old/can_bloodcrawl_in()
|
||||
return FALSE
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/old/Initialize()
|
||||
/obj/effect/decal/cleanable/blood/gibs/old/Initialize(mapload)
|
||||
. = ..()
|
||||
bloodiness = 0
|
||||
dry()
|
||||
|
||||
@@ -31,8 +31,8 @@
|
||||
smooth = SMOOTH_MORE
|
||||
mouse_opacity = FALSE
|
||||
|
||||
/obj/effect/decal/cleanable/dirt/Initialize()
|
||||
..()
|
||||
/obj/effect/decal/cleanable/dirt/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = ""
|
||||
|
||||
/obj/effect/decal/cleanable/dirt/blackpowder
|
||||
@@ -56,7 +56,7 @@
|
||||
desc = "It's foam."
|
||||
color = "#EBEBEB"
|
||||
|
||||
/obj/effect/decal/cleanable/flour/foam/Initialize()
|
||||
/obj/effect/decal/cleanable/flour/foam/Initialize(mapload)
|
||||
. = ..()
|
||||
QDEL_IN(src, 15 SECONDS)
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "molten"
|
||||
mergeable_decal = FALSE
|
||||
|
||||
|
||||
/obj/effect/decal/cleanable/molten_object/large
|
||||
name = "big gooey grey mass"
|
||||
icon_state = "big_molten"
|
||||
|
||||
@@ -65,7 +65,6 @@
|
||||
if(smooth)
|
||||
queue_smooth(src)
|
||||
queue_smooth_neighbors(src)
|
||||
..()
|
||||
|
||||
/obj/effect/decal/cleanable/Destroy()
|
||||
if(smooth)
|
||||
|
||||
@@ -7,9 +7,8 @@
|
||||
anchored = TRUE
|
||||
|
||||
|
||||
/obj/effect/decal/cleanable/crayon/New(location, main = "#FFFFFF", var/type = "rune1", var/e_name = "rune")
|
||||
..()
|
||||
loc = location
|
||||
/obj/effect/decal/cleanable/crayon/Initialize(mapload, main = "#FFFFFF", var/type = "rune1", var/e_name = "rune")
|
||||
. = ..()
|
||||
|
||||
name = e_name
|
||||
desc = "A [name] drawn in crayon."
|
||||
|
||||
@@ -18,8 +18,8 @@
|
||||
/obj/effect/decal/cleanable/random
|
||||
name = "Random Mess"
|
||||
|
||||
/obj/effect/decal/cleanable/random/New()
|
||||
..()
|
||||
/obj/effect/decal/cleanable/random/Initialize(mapload)
|
||||
. = ..()
|
||||
var/list/list = subtypesof(/obj/effect/decal/cleanable) - list(/obj/effect/decal/cleanable/random,/obj/effect/decal/cleanable/cobweb,/obj/effect/decal/cleanable/cobweb2)
|
||||
var/T = pick(list)
|
||||
new T(loc)
|
||||
|
||||
@@ -123,6 +123,19 @@
|
||||
origin_tech = "biotech=2"
|
||||
stop_bleeding = 1800
|
||||
|
||||
/obj/item/stack/medical/bruise_pack/attackby(obj/item/I, mob/user, params)
|
||||
if(I.sharp)
|
||||
if(get_amount() < 2)
|
||||
to_chat(user, "<span class='warning'>You need at least two gauzes to do this!</span>")
|
||||
return
|
||||
new /obj/item/stack/sheet/cloth(user.drop_location())
|
||||
user.visible_message("[user] cuts [src] into pieces of cloth with [I].", \
|
||||
"<span class='notice'>You cut [src] into pieces of cloth with [I].</span>", \
|
||||
"<span class='italics'>You hear cutting.</span>")
|
||||
use(2)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/stack/medical/bruise_pack/attack(mob/living/M, mob/user)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
@@ -137,6 +137,44 @@ var/global/list/datum/stack_recipe/snow_recipes = list(
|
||||
..()
|
||||
recipes = sandstone_recipes
|
||||
|
||||
/*
|
||||
* Sandbags
|
||||
*/
|
||||
|
||||
/obj/item/stack/sheet/mineral/sandbags
|
||||
name = "sandbags"
|
||||
icon_state = "sandbags"
|
||||
singular_name = "sandbag"
|
||||
layer = LOW_ITEM_LAYER
|
||||
merge_type = /obj/item/stack/sheet/mineral/sandbags
|
||||
|
||||
GLOBAL_LIST_INIT(sandbag_recipes, list ( \
|
||||
new/datum/stack_recipe("sandbags", /obj/structure/barricade/sandbags, 1, time = 25, one_per_turf = 1, on_floor = 1), \
|
||||
))
|
||||
|
||||
/obj/item/stack/sheet/mineral/sandbags/New()
|
||||
recipes = GLOB.sandbag_recipes
|
||||
..()
|
||||
|
||||
/obj/item/emptysandbag
|
||||
name = "empty sandbag"
|
||||
desc = "A bag to be filled with sand."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "sandbag"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
|
||||
/obj/item/emptysandbag/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/stack/ore/glass))
|
||||
var/obj/item/stack/ore/glass/G = I
|
||||
to_chat(user, "<span class='notice'>You fill the sandbag.</span>")
|
||||
var/obj/item/stack/sheet/mineral/sandbags/S = new /obj/item/stack/sheet/mineral/sandbags(drop_location())
|
||||
qdel(src)
|
||||
if(Adjacent(user) && !issilicon(user))
|
||||
user.put_in_hands(S)
|
||||
G.use(1)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/stack/sheet/mineral/diamond
|
||||
name = "diamond"
|
||||
icon_state = "sheet-diamond"
|
||||
|
||||
@@ -221,6 +221,7 @@ var/global/list/datum/stack_recipe/cloth_recipes = list ( \
|
||||
new/datum/stack_recipe("improvised gauze", /obj/item/stack/medical/bruise_pack/improvised, 1, 2, 6), \
|
||||
new/datum/stack_recipe("rag", /obj/item/reagent_containers/glass/rag, 1), \
|
||||
new/datum/stack_recipe("bedsheet", /obj/item/bedsheet, 3), \
|
||||
new/datum/stack_recipe("empty sandbag", /obj/item/emptysandbag, 4), \
|
||||
null, \
|
||||
new/datum/stack_recipe("fingerless gloves", /obj/item/clothing/gloves/fingerless, 1), \
|
||||
new/datum/stack_recipe("white gloves", /obj/item/clothing/gloves/color/white, 3), \
|
||||
|
||||
@@ -299,7 +299,7 @@
|
||||
/obj/effect/decal/cleanable/ash/snappop_phoenix
|
||||
var/respawn_time = 300
|
||||
|
||||
/obj/effect/decal/cleanable/ash/snappop_phoenix/New()
|
||||
/obj/effect/decal/cleanable/ash/snappop_phoenix/Initialize(mapload)
|
||||
. = ..()
|
||||
addtimer(CALLBACK(src, .proc/respawn), respawn_time)
|
||||
|
||||
|
||||
@@ -1059,6 +1059,15 @@
|
||||
desc = "A colorful cardboard box for the clown"
|
||||
icon_state = "box_clown"
|
||||
|
||||
/obj/item/storage/box/emptysandbags
|
||||
name = "box of empty sandbags"
|
||||
|
||||
/obj/item/storage/box/emptysandbags/New()
|
||||
..()
|
||||
contents = list()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/emptysandbag(src)
|
||||
|
||||
/obj/item/storage/box/rndboards
|
||||
name = "the Liberator's legacy"
|
||||
desc = "A box containing a gift for worthy golems."
|
||||
|
||||
@@ -48,38 +48,38 @@
|
||||
return
|
||||
|
||||
if(!on)
|
||||
turn_on()
|
||||
turn_on(user)
|
||||
to_chat(user, "<span class='notice'>You turn the jetpack on.</span>")
|
||||
else
|
||||
turn_off()
|
||||
turn_off(user)
|
||||
to_chat(user, "<span class='notice'>You turn the jetpack off.</span>")
|
||||
for(var/X in actions)
|
||||
var/datum/action/A = X
|
||||
A.UpdateButtonIcon()
|
||||
|
||||
|
||||
/obj/item/tank/jetpack/proc/turn_on()
|
||||
/obj/item/tank/jetpack/proc/turn_on(mob/user)
|
||||
on = TRUE
|
||||
icon_state = "[initial(icon_state)]-on"
|
||||
ion_trail.start()
|
||||
|
||||
/obj/item/tank/jetpack/proc/turn_off()
|
||||
/obj/item/tank/jetpack/proc/turn_off(mob/user)
|
||||
on = FALSE
|
||||
stabilizers = FALSE
|
||||
icon_state = initial(icon_state)
|
||||
ion_trail.stop()
|
||||
|
||||
|
||||
/obj/item/tank/jetpack/proc/allow_thrust(num, mob/living/user as mob)
|
||||
/obj/item/tank/jetpack/proc/allow_thrust(num, mob/living/user)
|
||||
if(!on)
|
||||
return 0
|
||||
if((num < 0.005 || air_contents.total_moles() < num))
|
||||
turn_off()
|
||||
turn_off(user)
|
||||
return 0
|
||||
|
||||
var/datum/gas_mixture/removed = air_contents.remove(num)
|
||||
if(removed.total_moles() < 0.005)
|
||||
turn_off()
|
||||
turn_off(user)
|
||||
return 0
|
||||
|
||||
var/turf/T = get_turf(user)
|
||||
@@ -163,15 +163,65 @@
|
||||
to_chat(user, "<span class='danger'>The meter on [src] indicates you are almost out of air!</span>")
|
||||
playsound(user, 'sound/effects/alert.ogg', 50, 1)
|
||||
|
||||
/obj/item/tank/jetpack/carbondioxide/mining
|
||||
name = "mining jetpack"
|
||||
/obj/item/tank/jetpack/suit
|
||||
name = "hardsuit jetpack upgrade"
|
||||
desc = "A modular, compact set of thrusters designed to integrate with a hardsuit. It is fueled by a tank inserted into the suit's storage compartment."
|
||||
icon_state = "jetpack-mining"
|
||||
item_state = "jetpack-mining"
|
||||
item_state = "jetpack-black"
|
||||
origin_tech = "materials=4;magnets=4;engineering=5"
|
||||
desc = "A tank of compressed carbon dioxide for miners to use as propulsion in local space. The compact size allows for easy storage at the cost of capacity."
|
||||
volume = 40
|
||||
throw_range = 7
|
||||
w_class = WEIGHT_CLASS_NORMAL //same as syndie harness
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
actions_types = list(/datum/action/item_action/toggle_jetpack, /datum/action/item_action/jetpack_stabilization)
|
||||
volume = 1
|
||||
slot_flags = null
|
||||
var/datum/gas_mixture/temp_air_contents
|
||||
var/obj/item/tank/tank = null
|
||||
var/mob/living/carbon/human/cur_user
|
||||
|
||||
/obj/item/tank/jetpack/suit/New()
|
||||
..()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
temp_air_contents = air_contents
|
||||
|
||||
/obj/item/tank/jetpack/suit/attack_self()
|
||||
return
|
||||
|
||||
/obj/item/tank/jetpack/suit/cycle(mob/user)
|
||||
if(!istype(loc, /obj/item/clothing/suit/space/hardsuit))
|
||||
to_chat(user, "<span class='warning'>[src] must be connected to a hardsuit!</span>")
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(!istype(H.s_store, /obj/item/tank))
|
||||
to_chat(user, "<span class='warning'>You need a tank in your suit storage!</span>")
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/tank/jetpack/suit/turn_on(mob/user)
|
||||
if(!istype(loc, /obj/item/clothing/suit/space/hardsuit) || !ishuman(loc.loc) || loc.loc != user)
|
||||
return
|
||||
var/mob/living/carbon/human/H = user
|
||||
tank = H.s_store
|
||||
air_contents = tank.air_contents
|
||||
START_PROCESSING(SSobj, src)
|
||||
cur_user = user
|
||||
..()
|
||||
|
||||
/obj/item/tank/jetpack/suit/turn_off(mob/user)
|
||||
tank = null
|
||||
air_contents = temp_air_contents
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
cur_user = null
|
||||
..()
|
||||
|
||||
/obj/item/tank/jetpack/suit/process()
|
||||
if(!istype(loc, /obj/item/clothing/suit/space/hardsuit) || !ishuman(loc.loc))
|
||||
turn_off(cur_user)
|
||||
return
|
||||
var/mob/living/carbon/human/H = loc.loc
|
||||
if(!tank || tank != H.s_store)
|
||||
turn_off(cur_user)
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/tank/jetpack/rig
|
||||
name = "jetpack"
|
||||
@@ -182,7 +232,7 @@
|
||||
to_chat(usr, "It's a jetpack. If you can see this, report it on the bug tracker.")
|
||||
return 0
|
||||
|
||||
/obj/item/tank/jetpack/rig/allow_thrust(num, mob/living/user as mob)
|
||||
/obj/item/tank/jetpack/rig/allow_thrust(num, mob/living/user)
|
||||
if(!on)
|
||||
return 0
|
||||
|
||||
@@ -191,7 +241,7 @@
|
||||
|
||||
var/datum/gas_mixture/removed = holder.air_supply.air_contents.remove(num)
|
||||
if(removed.total_moles() < 0.005)
|
||||
turn_off()
|
||||
turn_off(user)
|
||||
return 0
|
||||
|
||||
var/turf/T = get_turf(user)
|
||||
|
||||
@@ -34,6 +34,15 @@ LINEN BINS
|
||||
add_fingerprint(user)
|
||||
return
|
||||
|
||||
/obj/item/bedsheet/attackby(obj/item/I, mob/user, params)
|
||||
if(I.sharp)
|
||||
var/obj/item/stack/sheet/cloth/C = new (get_turf(src), 3)
|
||||
transfer_fingerprints_to(C)
|
||||
C.add_fingerprint(user)
|
||||
qdel(src)
|
||||
to_chat(user, "<span class='notice'>You tear [src] up.</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/bedsheet/blue
|
||||
icon_state = "sheetblue"
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
new /obj/item/clothing/glasses/welding/superior(src)
|
||||
new /obj/item/clothing/gloves/color/yellow(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/tank/jetpack/suit(src)
|
||||
new /obj/item/cartridge/ce(src)
|
||||
new /obj/item/radio/headset/heads/ce(src)
|
||||
new /obj/item/storage/toolbox/mechanical(src)
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
new /obj/item/key/ambulance(src)
|
||||
new /obj/item/pinpointer/crew(src)
|
||||
new /obj/item/clothing/shoes/magboots(src)
|
||||
new /obj/item/handheld_defibrillator(src)
|
||||
|
||||
/obj/structure/closet/secure_closet/reagents
|
||||
name = "chemical storage closet"
|
||||
|
||||
@@ -6,7 +6,7 @@ GLOBAL_LIST_INIT(captain_display_cases, list())
|
||||
|
||||
/proc/updateDisplaycase(mob/living/carbon/human/captain)
|
||||
if(!GLOB.captain_display_cases.len)
|
||||
return
|
||||
return
|
||||
var/fingerprint = captain.get_full_print()
|
||||
for(var/item in GLOB.captain_display_cases)
|
||||
var/obj/structure/displaycase/CASE = item
|
||||
@@ -113,6 +113,11 @@ GLOBAL_LIST_INIT(captain_display_cases, list())
|
||||
occupant = new start_showpiece_type(src)
|
||||
update_icon()
|
||||
|
||||
/obj/structure/displaycase/Destroy()
|
||||
dump()
|
||||
QDEL_NULL(circuit)
|
||||
return ..()
|
||||
|
||||
/obj/structure/displaycase/captains_laser
|
||||
name = "captain's display case"
|
||||
desc = "A display case for the captain's antique laser gun. Hooked up with an anti-theft system."
|
||||
@@ -125,6 +130,16 @@ GLOBAL_LIST_INIT(captain_display_cases, list())
|
||||
. = ..()
|
||||
GLOB.captain_display_cases += src
|
||||
|
||||
/obj/structure/displaycase/captains_laser/Destroy()
|
||||
GLOB.captain_display_cases -= src
|
||||
return ..()
|
||||
|
||||
/obj/structure/displaycase/lavaland_winter
|
||||
burglar_alarm = TRUE
|
||||
locked = TRUE
|
||||
req_access = list(access_cent_specops)
|
||||
start_showpiece_type = /obj/item/gun/energy/laser/captain
|
||||
|
||||
/obj/structure/displaycase/stechkin
|
||||
name = "officer's display case"
|
||||
desc = "A display case containing a humble stechkin pistol. Never forget your roots."
|
||||
@@ -132,15 +147,6 @@ GLOBAL_LIST_INIT(captain_display_cases, list())
|
||||
req_access = list(access_syndicate_command)
|
||||
start_showpiece_type = /obj/item/gun/projectile/automatic/pistol
|
||||
|
||||
/obj/structure/displaycase/Destroy()
|
||||
dump()
|
||||
QDEL_NULL(circuit)
|
||||
return ..()
|
||||
|
||||
/obj/structure/displaycase/captains_laser/Destroy()
|
||||
GLOB.captain_display_cases -= src
|
||||
return ..()
|
||||
|
||||
/obj/structure/displaycase/examine(mob/user)
|
||||
..(user)
|
||||
to_chat(user, "<span class='notice'>Peering through the glass, you see that it contains:</span>")
|
||||
|
||||
@@ -260,6 +260,14 @@
|
||||
..()
|
||||
icon_state = "rockpile[rand(1,5)]"
|
||||
|
||||
/obj/structure/flora/rock/icy
|
||||
name = "icy rock"
|
||||
color = "#cce9eb"
|
||||
|
||||
/obj/structure/flora/rock/pile/icy
|
||||
name = "icy rocks"
|
||||
color = "#cce9eb"
|
||||
|
||||
/obj/structure/flora/corn_stalk
|
||||
name = "corn stalk"
|
||||
icon = 'icons/obj/flora/plants.dmi'
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
/turf/simulated/water_act(volume, temperature, source)
|
||||
. = ..()
|
||||
|
||||
|
||||
if(volume >= 3)
|
||||
MakeSlippery()
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
assume_air(lowertemp)
|
||||
qdel(hotspot)
|
||||
|
||||
/turf/simulated/proc/MakeSlippery(wet_setting = TURF_WET_WATER) // 1 = Water, 2 = Lube, 3 = Ice, 4 = Permafrost
|
||||
/turf/simulated/proc/MakeSlippery(wet_setting = TURF_WET_WATER, infinite = FALSE) // 1 = Water, 2 = Lube, 3 = Ice, 4 = Permafrost
|
||||
if(wet >= wet_setting)
|
||||
return
|
||||
wet = wet_setting
|
||||
@@ -57,11 +57,11 @@
|
||||
else
|
||||
wet_overlay = image('icons/effects/water.dmi', src, "wet_static")
|
||||
overlays += wet_overlay
|
||||
|
||||
spawn(rand(790, 820)) // Purely so for visual effect
|
||||
if(!istype(src, /turf/simulated)) //Because turfs don't get deleted, they change, adapt, transform, evolve and deform. they are one and they are all.
|
||||
return
|
||||
MakeDry(wet_setting)
|
||||
if(!infinite)
|
||||
spawn(rand(790, 820)) // Purely so for visual effect
|
||||
if(!istype(src, /turf/simulated)) //Because turfs don't get deleted, they change, adapt, transform, evolve and deform. they are one and they are all.
|
||||
return
|
||||
MakeDry(wet_setting)
|
||||
|
||||
/turf/simulated/proc/MakeDry(wet_setting = TURF_WET_WATER)
|
||||
if(wet > wet_setting)
|
||||
|
||||
@@ -53,6 +53,11 @@
|
||||
to_chat(user, "<span class='danger'>You forcefully pry off the planks, destroying them in the process.</span>")
|
||||
return make_plating()
|
||||
|
||||
/turf/simulated/floor/wood/cold
|
||||
oxygen = 22
|
||||
nitrogen = 82
|
||||
temperature = 180
|
||||
|
||||
/turf/simulated/floor/grass
|
||||
name = "grass patch"
|
||||
icon_state = "grass1"
|
||||
|
||||
@@ -173,6 +173,18 @@
|
||||
nitrogen = 0.01
|
||||
temperature = TCMB
|
||||
|
||||
|
||||
/turf/simulated/floor/mineral/bananium/lubed/Initialize(mapload)
|
||||
. = ..()
|
||||
MakeSlippery(TURF_WET_LUBE, TRUE)
|
||||
|
||||
/turf/simulated/floor/mineral/bananium/lubed/pry_tile(obj/item/C, mob/user, silent = FALSE) //I want to get off Mr Honk's Wild Ride
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
to_chat(H, "<span class='warning'>You lose your footing trying to pry off the tile!</span>")
|
||||
H.slip("the floor", 0, 5, tilesSlipped = 4, walkSafely = 0, slipAny = 1)
|
||||
return
|
||||
|
||||
//TRANQUILLITE
|
||||
/turf/simulated/floor/mineral/tranquillite
|
||||
name = "silent floor"
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
name = "beach"
|
||||
icon = 'icons/misc/beach.dmi'
|
||||
|
||||
/turf/simulated/floor/beach/pry_tile(obj/item/C, mob/user, silent = FALSE)
|
||||
/turf/simulated/floor/beach/pry_tile(obj/item/C, mob/user, silent = FALSE)
|
||||
return
|
||||
|
||||
/turf/simulated/floor/beach/sand
|
||||
@@ -79,7 +79,7 @@
|
||||
/turf/simulated/floor/beach/water/Entered(atom/movable/AM, atom/OldLoc)
|
||||
. = ..()
|
||||
if(!linkedcontroller)
|
||||
return
|
||||
return
|
||||
if(ismob(AM))
|
||||
linkedcontroller.mobinpool += AM
|
||||
|
||||
@@ -107,6 +107,26 @@
|
||||
/turf/simulated/floor/noslip/MakeSlippery()
|
||||
return
|
||||
|
||||
/turf/simulated/floor/noslip/lavaland
|
||||
oxygen = 14
|
||||
nitrogen = 23
|
||||
temperature = 300
|
||||
|
||||
/turf/simulated/floor/lubed
|
||||
name = "slippery floor"
|
||||
icon_state = "floor"
|
||||
|
||||
/turf/simulated/floor/lubed/Initialize(mapload)
|
||||
. = ..()
|
||||
MakeSlippery(TURF_WET_LUBE, TRUE)
|
||||
|
||||
/turf/simulated/floor/lubed/pry_tile(obj/item/C, mob/user, silent = FALSE) //I want to get off Mr Honk's Wild Ride
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
to_chat(H, "<span class='warning'>You lose your footing trying to pry off the tile!</span>")
|
||||
H.slip("the floor", 0, 5, tilesSlipped = 4, walkSafely = 0, slipAny = 1)
|
||||
return
|
||||
|
||||
//Clockwork floor: Slowly heals toxin damage on nearby servants.
|
||||
/turf/simulated/floor/clockwork
|
||||
name = "clockwork floor"
|
||||
@@ -124,7 +144,7 @@
|
||||
new /obj/effect/temp_visual/ratvar/beam(src)
|
||||
realappearence = new /obj/effect/clockwork/overlay/floor(src)
|
||||
realappearence.linked = src
|
||||
|
||||
|
||||
/turf/simulated/floor/clockwork/Destroy()
|
||||
if(uses_overlay && realappearence)
|
||||
QDEL_NULL(realappearence)
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
broken_states = list("damaged1", "damaged2", "damaged3", "damaged4", "damaged5")
|
||||
burnt_states = list("floorscorched1", "floorscorched2")
|
||||
|
||||
var/unfastened = FALSE
|
||||
var/unfastened = FALSE
|
||||
|
||||
footstep_sounds = list(
|
||||
"human" = list('sound/effects/footstep/plating_human.ogg'),
|
||||
@@ -185,7 +185,7 @@
|
||||
/turf/simulated/floor/engine/blob_act()
|
||||
if(prob(25))
|
||||
ChangeTurf(baseturf)
|
||||
|
||||
|
||||
/turf/simulated/floor/engine/cult
|
||||
name = "engraved floor"
|
||||
icon_state = "cult"
|
||||
@@ -335,3 +335,28 @@
|
||||
/turf/simulated/floor/plating/abductor/New()
|
||||
..()
|
||||
icon_state = "alienpod[rand(1,9)]"
|
||||
|
||||
/turf/simulated/floor/plating/ice
|
||||
name = "ice sheet"
|
||||
desc = "A sheet of solid ice. Looks slippery."
|
||||
icon = 'icons/turf/floors/ice_turfs.dmi'
|
||||
icon_state = "unsmooth"
|
||||
oxygen = 22
|
||||
nitrogen = 82
|
||||
temperature = 180
|
||||
baseturf = /turf/simulated/floor/plating/ice
|
||||
slowdown = TRUE
|
||||
smooth = SMOOTH_TRUE
|
||||
canSmoothWith = list(/turf/simulated/floor/plating/ice/smooth, /turf/simulated/floor/plating/ice)
|
||||
|
||||
/turf/simulated/floor/plating/ice/Initialize(mapload)
|
||||
. = ..()
|
||||
MakeSlippery(TURF_WET_PERMAFROST, TRUE)
|
||||
|
||||
/turf/simulated/floor/plating/ice/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
|
||||
return
|
||||
|
||||
/turf/simulated/floor/plating/ice/smooth
|
||||
icon_state = "smooth"
|
||||
smooth = SMOOTH_MORE | SMOOTH_BORDER
|
||||
canSmoothWith = list(/turf/simulated/floor/plating/ice/smooth, /turf/simulated/floor/plating/ice)
|
||||
|
||||
@@ -140,7 +140,23 @@
|
||||
sheet_type = /obj/item/stack/sheet/wood
|
||||
hardness = 70
|
||||
explosion_block = 0
|
||||
canSmoothWith = list(/turf/simulated/wall/mineral/wood, /obj/structure/falsewall/wood)
|
||||
canSmoothWith = list(/turf/simulated/wall/mineral/wood, /obj/structure/falsewall/wood, /turf/simulated/wall/mineral/wood/nonmetal)
|
||||
|
||||
/turf/simulated/wall/mineral/wood/attackby(obj/item/W, mob/user)
|
||||
if(W.sharp && W.force)
|
||||
var/duration = (48 / W.force) * 2 //In seconds, for now.
|
||||
if(istype(W, /obj/item/hatchet) || istype(W, /obj/item/twohanded/fireaxe))
|
||||
duration /= 4 //Much better with hatchets and axes.
|
||||
if(do_after(user, duration * 10, target = src)) //Into deciseconds.
|
||||
dismantle_wall(FALSE, FALSE)
|
||||
return
|
||||
return ..()
|
||||
|
||||
/turf/simulated/wall/mineral/wood/nonmetal
|
||||
desc = "A solidly wooden wall. It's a bit weaker than a wall made with metal."
|
||||
girder_type = /obj/structure/barricade/wooden
|
||||
hardness = 50
|
||||
canSmoothWith = list(/turf/simulated/wall/mineral/wood, /obj/structure/falsewall/wood, /turf/simulated/wall/mineral/wood/nonmetal)
|
||||
|
||||
/turf/simulated/wall/mineral/iron
|
||||
name = "rough metal wall"
|
||||
|
||||
@@ -41,6 +41,9 @@ var/global/admin_ooc_colour = "#b82e00"
|
||||
return
|
||||
|
||||
if(!check_rights(R_ADMIN|R_MOD,0))
|
||||
if(!config.ooc_allowed)
|
||||
to_chat(src, "<span class='danger'>OOC is globally muted.</span>")
|
||||
return
|
||||
if(handle_spam_prevention(msg, MUTE_OOC, OOC_COOLDOWN))
|
||||
return
|
||||
if(findtext(msg, "byond://"))
|
||||
|
||||
@@ -210,6 +210,7 @@
|
||||
var/datum/objective/KillDaCrew = new /datum/objective
|
||||
KillDaCrew.owner = S.mind
|
||||
KillDaCrew.explanation_text = "[objective_verb] everyone else while you're at it."
|
||||
KillDaCrew.completed = TRUE
|
||||
S.mind.objectives += KillDaCrew
|
||||
to_chat(S, "<B>Objective #[1]</B>: [KillDaWiz.explanation_text]")
|
||||
to_chat(S, "<B>Objective #[2]</B>: [KillDaCrew.explanation_text]")
|
||||
@@ -219,7 +220,8 @@
|
||||
desc = "A magically infused bottle of clown love, distilled from \
|
||||
countless hugging attacks. Used in funny rituals to attract \
|
||||
adorable creatures."
|
||||
color = "#FF69B4" // HOT PINK
|
||||
icon = 'icons/obj/wizard.dmi'
|
||||
icon_state = "vialtickles"
|
||||
veil_msg = "<span class='warning'>You sense an adorable presence \
|
||||
lurking just beyond the veil...</span>"
|
||||
objective_verb = "Hug and tickle"
|
||||
@@ -278,6 +280,7 @@
|
||||
var/datum/objective/KillDaCrew = new /datum/objective
|
||||
KillDaCrew.owner = M.mind
|
||||
KillDaCrew.explanation_text = "[objective_verb] everyone and everything else while you're at it."
|
||||
KillDaCrew.completed = TRUE
|
||||
M.mind.objectives += KillDaCrew
|
||||
to_chat(M, "<B>Objective #[1]</B>: [KillDaWiz.explanation_text]")
|
||||
to_chat(M, "<B>Objective #[2]</B>: [KillDaCrew.explanation_text]")
|
||||
|
||||
@@ -21,12 +21,4 @@
|
||||
|
||||
/datum/gear/lipstick/lime
|
||||
display_name = "lipstick, lime"
|
||||
path = /obj/item/lipstick/lime
|
||||
|
||||
/datum/gear/monocle
|
||||
display_name = "monocle"
|
||||
path = /obj/item/clothing/glasses/monocle
|
||||
|
||||
/datum/gear/sunglasses
|
||||
display_name = "cheap sunglasses"
|
||||
path = /obj/item/clothing/glasses/sunglasses_fake
|
||||
path = /obj/item/lipstick/lime
|
||||
@@ -18,12 +18,10 @@
|
||||
/datum/gear/donor/furcape
|
||||
display_name = "Fur Cape"
|
||||
path = /obj/item/clothing/suit/furcape
|
||||
cost = 2
|
||||
|
||||
/datum/gear/donor/furcoat
|
||||
display_name = "Fur Coat"
|
||||
path = /obj/item/clothing/suit/furcoat
|
||||
cost = 2
|
||||
|
||||
/datum/gear/donor/kamina
|
||||
display_name = "Spiky Orange-tinted Shades"
|
||||
@@ -33,10 +31,6 @@
|
||||
display_name = "Spiky Green-tinted Shades"
|
||||
path = /obj/item/clothing/glasses/fluff/kamina/green
|
||||
|
||||
/datum/gear/donor/hipster
|
||||
display_name = "Hipster Glasses"
|
||||
path = /obj/item/clothing/glasses/regular/hipster
|
||||
|
||||
/datum/gear/donor/threedglasses
|
||||
display_name = "Threed Glasses"
|
||||
path = /obj/item/clothing/glasses/threedglasses
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
/datum/gear/glasses
|
||||
subtype_path = /datum/gear/glasses
|
||||
slot = slot_glasses
|
||||
sort_category = "Glasses"
|
||||
|
||||
/datum/gear/glasses/sunglasses
|
||||
display_name = "cheap sunglasses"
|
||||
path = /obj/item/clothing/glasses/sunglasses_fake
|
||||
|
||||
/datum/gear/glasses/eyepatch
|
||||
display_name = "Eyepatch"
|
||||
path = /obj/item/clothing/glasses/eyepatch
|
||||
|
||||
/datum/gear/glasses/hipster
|
||||
display_name = "Hipster glasses"
|
||||
path = /obj/item/clothing/glasses/regular/hipster
|
||||
|
||||
/datum/gear/glasses/monocle
|
||||
display_name = "Monocle"
|
||||
path = /obj/item/clothing/glasses/monocle
|
||||
|
||||
/datum/gear/glasses/prescription
|
||||
display_name = "Prescription glasses"
|
||||
path = /obj/item/clothing/glasses/regular
|
||||
@@ -0,0 +1,8 @@
|
||||
/datum/gear/gloves
|
||||
subtype_path = /datum/gear/gloves
|
||||
slot = slot_gloves
|
||||
sort_category = "Gloves"
|
||||
|
||||
/datum/gear/gloves/fingerless
|
||||
display_name = "Fingerless Gloves"
|
||||
path = /obj/item/clothing/gloves/fingerless
|
||||
@@ -27,25 +27,32 @@
|
||||
|
||||
/datum/gear/shoes/cowboyboots
|
||||
display_name = "cowboy boots, brown"
|
||||
cost = 1
|
||||
path = /obj/item/clothing/shoes/cowboy
|
||||
|
||||
/datum/gear/shoes/cowboyboots_black
|
||||
display_name = "cowboy boots, black"
|
||||
cost = 1
|
||||
path = /obj/item/clothing/shoes/cowboy/black
|
||||
|
||||
/datum/gear/shoes/cowboyboots/white
|
||||
display_name = "cowboy boots, white"
|
||||
cost = 1
|
||||
path = /obj/item/clothing/shoes/cowboy/white
|
||||
|
||||
/datum/gear/shoes/cowboyboots/pink
|
||||
display_name = "cowboy boots, pink"
|
||||
cost = 1
|
||||
path = /obj/item/clothing/shoes/cowboy/pink
|
||||
|
||||
/datum/gear/shoes/laceup
|
||||
display_name = "laceup shoes"
|
||||
cost = 1
|
||||
path = /obj/item/clothing/shoes/laceup
|
||||
|
||||
/datum/gear/shoes/blackshoes
|
||||
display_name = "Black shoes"
|
||||
path = /obj/item/clothing/shoes/black
|
||||
|
||||
/datum/gear/shoes/brownshoes
|
||||
display_name = "Brown shoes"
|
||||
path = /obj/item/clothing/shoes/brown
|
||||
|
||||
/datum/gear/shoes/whiteshoes
|
||||
display_name = "White shoes"
|
||||
path = /obj/item/clothing/shoes/white
|
||||
@@ -1,7 +1,6 @@
|
||||
/datum/gear/suit
|
||||
subtype_path = /datum/gear/suit
|
||||
slot = slot_wear_suit
|
||||
cost = 2
|
||||
sort_category = "External Wear"
|
||||
|
||||
//WINTER COATS
|
||||
@@ -105,6 +104,10 @@
|
||||
path = /obj/item/clothing/suit/armor/secjacket
|
||||
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Security Pod Pilot")
|
||||
|
||||
/datum/gear/suit/ianshirt
|
||||
display_name = "Ian Shirt"
|
||||
path = /obj/item/clothing/suit/ianshirt
|
||||
|
||||
/datum/gear/suit/poncho
|
||||
display_name = "poncho, classic"
|
||||
path = /obj/item/clothing/suit/poncho
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
/datum/gear/uniform
|
||||
subtype_path = /datum/gear/uniform
|
||||
slot = slot_w_uniform
|
||||
cost = 2
|
||||
sort_category = "Uniforms and Casual Dress"
|
||||
|
||||
/datum/gear/uniform/skirt
|
||||
|
||||
@@ -444,7 +444,8 @@ BLIND // can't see anything
|
||||
slowdown = SHOES_SLOWDOWN
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/shoes.dmi'
|
||||
"Vox" = 'icons/mob/species/vox/shoes.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/shoes.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/shoes/attackby(obj/item/I, mob/user, params)
|
||||
@@ -595,7 +596,7 @@ BLIND // can't see anything
|
||||
min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT
|
||||
heat_protection = HEAD
|
||||
max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT
|
||||
species_restricted = list("exclude","Diona","Vox","Wryn")
|
||||
species_restricted = list("exclude","Vox","Wryn")
|
||||
flash_protect = 2
|
||||
strip_delay = 50
|
||||
put_on_delay = 50
|
||||
@@ -623,7 +624,7 @@ BLIND // can't see anything
|
||||
put_on_delay = 80
|
||||
burn_state = FIRE_PROOF
|
||||
hide_tail_by_species = null
|
||||
species_restricted = list("exclude","Diona","Vox","Wryn")
|
||||
species_restricted = list("exclude","Vox","Wryn")
|
||||
|
||||
//Under clothing
|
||||
/obj/item/clothing/under
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
actions_types = list(/datum/action/item_action/toggle_helmet_light)
|
||||
|
||||
//Species-specific stuff.
|
||||
species_restricted = list("exclude","Diona","Wryn")
|
||||
species_restricted = list("exclude","Wryn")
|
||||
sprite_sheets = list(
|
||||
"Unathi" = 'icons/mob/species/unathi/helmet.dmi',
|
||||
"Tajaran" = 'icons/mob/species/tajaran/helmet.dmi',
|
||||
@@ -93,9 +93,10 @@
|
||||
var/obj/item/clothing/head/helmet/space/hardsuit/helmet
|
||||
actions_types = list(/datum/action/item_action/toggle_helmet)
|
||||
var/helmettype = /obj/item/clothing/head/helmet/space/hardsuit
|
||||
var/obj/item/tank/jetpack/suit/jetpack = null
|
||||
|
||||
hide_tail_by_species = list("Vox" , "Vulpkanin" , "Unathi" , "Tajaran")
|
||||
species_restricted = list("exclude","Diona","Wryn")
|
||||
species_restricted = list("exclude", "Wryn")
|
||||
sprite_sheets = list(
|
||||
"Unathi" = 'icons/mob/species/unathi/suit.dmi',
|
||||
"Tajaran" = 'icons/mob/species/tajaran/suit.dmi',
|
||||
@@ -112,10 +113,59 @@
|
||||
"Vulpkanin" = 'icons/obj/clothing/species/vulpkanin/suits.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/New()
|
||||
if(jetpack && ispath(jetpack))
|
||||
jetpack = new jetpack(src)
|
||||
..()
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/attack_self(mob/user)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
..()
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/tank/jetpack/suit))
|
||||
if(jetpack)
|
||||
to_chat(user, "<span class='warning'>[src] already has a jetpack installed.</span>")
|
||||
return
|
||||
if(src == user.get_item_by_slot(slot_wear_suit)) //Make sure the player is not wearing the suit before applying the upgrade.
|
||||
to_chat(user, "<span class='warning'>You cannot install the upgrade to [src] while wearing it.</span>")
|
||||
return
|
||||
|
||||
if(user.unEquip(I))
|
||||
I.forceMove(src)
|
||||
jetpack = I
|
||||
to_chat(user, "<span class='notice'>You successfully install the jetpack into [src].</span>")
|
||||
return
|
||||
else if(isscrewdriver(I))
|
||||
if(!jetpack)
|
||||
to_chat(user, "<span class='warning'>[src] has no jetpack installed.</span>")
|
||||
return
|
||||
if(src == user.get_item_by_slot(slot_wear_suit))
|
||||
to_chat(user, "<span class='warning'>You cannot remove the jetpack from [src] while wearing it.</span>")
|
||||
return
|
||||
|
||||
jetpack.turn_off(user)
|
||||
jetpack.forceMove(drop_location())
|
||||
jetpack = null
|
||||
to_chat(user, "<span class='notice'>You successfully remove the jetpack from [src].</span>")
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/equipped(mob/user, slot)
|
||||
..()
|
||||
if(jetpack)
|
||||
if(slot == slot_wear_suit)
|
||||
for(var/X in jetpack.actions)
|
||||
var/datum/action/A = X
|
||||
A.Grant(user)
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/dropped(mob/user)
|
||||
..()
|
||||
if(jetpack)
|
||||
for(var/X in jetpack.actions)
|
||||
var/datum/action/A = X
|
||||
A.Remove(user)
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/item_action_slot_check(slot)
|
||||
if(slot == slot_wear_suit) //we only give the mob the ability to toggle the helmet if he's wearing the hardsuit.
|
||||
return 1
|
||||
@@ -178,6 +228,7 @@
|
||||
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine/elite
|
||||
jetpack = /obj/item/tank/jetpack/suit
|
||||
|
||||
//Mining hardsuit
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/mining
|
||||
@@ -291,6 +342,7 @@
|
||||
armor = list(melee = 40, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50)
|
||||
allowed = list(/obj/item/gun, /obj/item/ammo_box,/obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/energy/sword, /obj/item/restraints/handcuffs, /obj/item/tank)
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi
|
||||
jetpack = /obj/item/tank/jetpack/suit
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/syndi/update_icon()
|
||||
icon_state = "hardsuit[on]-[item_color]"
|
||||
@@ -438,6 +490,7 @@
|
||||
icon_state = "hardsuit-hos"
|
||||
armor = list(melee = 45, bullet = 25, laser = 30, energy = 10, bomb = 25, bio = 100, rad = 50)
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/security/hos
|
||||
jetpack = /obj/item/tank/jetpack/suit
|
||||
sprite_sheets = null
|
||||
|
||||
//Singuloth armor
|
||||
@@ -522,6 +575,7 @@
|
||||
allowed = list(/obj/item/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword/saber,/obj/item/restraints/handcuffs,/obj/item/tank)
|
||||
slowdown = 0
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/syndi
|
||||
jetpack = /obj/item/tank/jetpack/suit
|
||||
sprite_sheets = list(
|
||||
"Unathi" = 'icons/mob/species/unathi/suit.dmi',
|
||||
"Tajaran" = 'icons/mob/species/tajaran/suit.dmi',
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
flags_inv = HIDEFACE
|
||||
permeability_coefficient = 0.01
|
||||
armor = list(melee = 40, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50)
|
||||
species_restricted = list("exclude", "Diona", "Wryn")
|
||||
species_restricted = list("exclude", "Wryn")
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/helmet.dmi',
|
||||
@@ -31,7 +31,7 @@
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
allowed = list(/obj/item/tank, /obj/item/flashlight,/obj/item/gun/energy, /obj/item/gun/projectile, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton,/obj/item/restraints/handcuffs)
|
||||
armor = list(melee = 40, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50)
|
||||
species_restricted = list("exclude", "Diona", "Wryn")
|
||||
species_restricted = list("exclude", "Wryn")
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/suit.dmi'
|
||||
@@ -72,7 +72,7 @@
|
||||
allowed = list(/obj/item/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/restraints/handcuffs,/obj/item/tank,/obj/item/kitchen/knife/combat)
|
||||
armor = list(melee = 40, bullet = 30, laser = 30, energy = 30, bomb = 50, bio = 90, rad = 20)
|
||||
strip_delay = 120
|
||||
species_restricted = list("exclude", "Diona", "Wryn")
|
||||
species_restricted = list("exclude", "Wryn")
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/suit.dmi'
|
||||
@@ -159,7 +159,7 @@
|
||||
icon_state = "paramedic-eva-helmet"
|
||||
item_state = "paramedic-eva-helmet"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 20)
|
||||
species_restricted = list("exclude", "Diona", "Wryn")
|
||||
species_restricted = list("exclude", "Wryn")
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/helmet.dmi',
|
||||
@@ -180,7 +180,7 @@
|
||||
item_state = "paramedic-eva"
|
||||
desc = "A brand new paramedic EVA suit. The nitrile seems a bit too thin to be space proof. Used for retrieving bodies in space."
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 20)
|
||||
species_restricted = list("exclude", "Diona", "Wryn")
|
||||
species_restricted = list("exclude", "Wryn")
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/suit.dmi',
|
||||
@@ -200,7 +200,7 @@
|
||||
item_state = "s_suit"
|
||||
desc = "A lightweight space suit with the basic ability to protect the wearer from the vacuum of space during emergencies."
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 20)
|
||||
species_restricted = list("exclude", "Diona", "Wryn")
|
||||
species_restricted = list("exclude", "Wryn")
|
||||
|
||||
sprite_sheets = list(
|
||||
"Tajaran" = 'icons/mob/species/tajaran/suit.dmi',
|
||||
@@ -223,7 +223,7 @@
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 20)
|
||||
flash_protect = 0
|
||||
species_restricted = list("exclude", "Diona", "Wryn")
|
||||
species_restricted = list("exclude", "Wryn")
|
||||
|
||||
sprite_sheets = list(
|
||||
"Tajaran" = 'icons/mob/species/tajaran/helmet.dmi',
|
||||
@@ -244,7 +244,7 @@
|
||||
desc = ". . ."
|
||||
icon_state = "spacemimehelmet"
|
||||
item_state = "spacemimehelmet"
|
||||
species_restricted = list("exclude","Diona","Vox","Wryn")
|
||||
species_restricted = list("exclude","Vox","Wryn")
|
||||
sprite_sheets = null
|
||||
sprite_sheets_obj = null
|
||||
|
||||
@@ -254,7 +254,7 @@
|
||||
desc = ". . ."
|
||||
icon_state = "spacemime_suit"
|
||||
item_state = "spacemime_items"
|
||||
species_restricted = list("exclude","Diona","Vox","Wryn")
|
||||
species_restricted = list("exclude","Vox","Wryn")
|
||||
sprite_sheets = null
|
||||
sprite_sheets_obj = null
|
||||
|
||||
@@ -264,7 +264,7 @@
|
||||
desc = "An EVA helmet specifically designed for the clown. SPESSHONK!"
|
||||
icon_state = "clownhelmet"
|
||||
item_state = "clownhelmet"
|
||||
species_restricted = list("exclude","Diona","Vox","Wryn")
|
||||
species_restricted = list("exclude","Vox","Wryn")
|
||||
sprite_sheets = null
|
||||
sprite_sheets_obj = null
|
||||
|
||||
@@ -274,7 +274,6 @@
|
||||
desc = "An EVA suit specifically designed for the clown. SPESSHONK!"
|
||||
icon_state = "spaceclown_suit"
|
||||
item_state = "spaceclown_items"
|
||||
species_restricted = list("exclude","Diona","Vox","Wryn")
|
||||
species_restricted = list("exclude","Vox","Wryn")
|
||||
sprite_sheets = null
|
||||
sprite_sheets_obj = null
|
||||
|
||||
@@ -758,6 +758,7 @@
|
||||
allowed = list(/obj/item/flashlight,/obj/item/tank/emergency_oxygen,/obj/item/toy,/obj/item/storage/fancy/cigarettes,/obj/item/lighter)
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
|
||||
actions_types = list(/datum/action/item_action/zipper)
|
||||
adjust_flavour = "unzip"
|
||||
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
/obj/item/clothing/suit/space/hardsuit/Destroy()
|
||||
if(helmet)
|
||||
helmet.suit = null
|
||||
qdel(helmet)
|
||||
QDEL_NULL(helmet)
|
||||
QDEL_NULL(jetpack)
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/Destroy()
|
||||
|
||||
@@ -1212,16 +1212,16 @@
|
||||
|
||||
//////////// Sets ////////////
|
||||
// Fox P McCloud: Fox McCloud
|
||||
/obj/item/clothing/suit/jacket/fluff/fox
|
||||
/obj/item/clothing/suit/storage/fox
|
||||
name = "Aeronautics Jacket"
|
||||
desc = "An aviator styled jacket made from a peculiar material; this one seems very old."
|
||||
icon = 'icons/obj/custom_items.dmi'
|
||||
icon_state = "fox_jacket"
|
||||
item_state = "fox_jacket"
|
||||
ignore_suitadjust = TRUE
|
||||
actions_types = list()
|
||||
adjust_flavour = null
|
||||
sprite_sheets = null
|
||||
allowed = list(/obj/item/flashlight, /obj/item/tank/emergency_oxygen, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/projectile/automatic/pistol, /obj/item/gun/projectile/revolver, /obj/item/gun/projectile/revolver/detective)
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
|
||||
|
||||
/obj/item/clothing/under/fluff/fox
|
||||
name = "Aeronautics Jumpsuit"
|
||||
@@ -1232,6 +1232,12 @@
|
||||
item_color = "fox_suit"
|
||||
displays_id = FALSE //still appears on examine; this is pure fluff.
|
||||
|
||||
/obj/item/clothing/suit/storage/fox/miljacket_desert
|
||||
name = "rugged military jacket"
|
||||
desc = "A rugged brown military jacket with a stylized 'A' embroidered on the back. It seems very old, yet is in near mint condition. Has a tag on the inside collar signed 'Fox McCloud'."
|
||||
icon_state = "fox_coat"
|
||||
item_color = "fox_coat"
|
||||
|
||||
/obj/item/toy/plushie/fluff/fox
|
||||
name = "orange fox plushie"
|
||||
desc = "A cute, soft, fuzzy, fluffy, and cuddly plushie. This has a small tag on it that is signed 'Fox McCloud'."
|
||||
@@ -1262,12 +1268,6 @@
|
||||
/obj/item/toy/plushie/fluff/fox/ui_action_click()
|
||||
change_color()
|
||||
|
||||
/obj/item/clothing/suit/jacket/miljacket/desert/fox
|
||||
name = "rugged military jacket"
|
||||
desc = "A rugged brown military jacket with a stylized 'A' embroidered on the back. It seems very old, yet is in near mint condition. Has a tag on the inside collar signed 'Fox McCloud'."
|
||||
icon = 'icons/obj/custom_items.dmi'
|
||||
icon_state = "fox_coat"
|
||||
item_color = "fox_coat"
|
||||
|
||||
// TheFlagbearer: Willow Walker
|
||||
/obj/item/clothing/under/fluff/arachno_suit
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
make_podman = 0
|
||||
|
||||
if(make_podman) //all conditions met!
|
||||
var/mob/living/carbon/human/diona/podman = new /mob/living/carbon/human/diona(parent.loc)
|
||||
var/mob/living/carbon/human/pod_diona/podman = new /mob/living/carbon/human/pod_diona(parent.loc)
|
||||
if(realName)
|
||||
podman.real_name = realName
|
||||
mind.transfer_to(podman)
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
new /datum/data/mining_equipment("Lazarus Injector", /obj/item/lazarus_injector, 1000),
|
||||
new /datum/data/mining_equipment("Silver Pickaxe", /obj/item/pickaxe/silver, 1000),
|
||||
new /datum/data/mining_equipment("Mining Conscription Kit", /obj/item/storage/backpack/duffel/mining_conscript, 1500),
|
||||
new /datum/data/mining_equipment("Jetpack", /obj/item/tank/jetpack/carbondioxide/mining, 2000),
|
||||
new /datum/data/mining_equipment("Jetpack Upgrade", /obj/item/tank/jetpack/suit, 2000),
|
||||
new /datum/data/mining_equipment("Mining Hardsuit", /obj/item/clothing/suit/space/hardsuit/mining, 2000),
|
||||
new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/pickaxe/diamond, 2000),
|
||||
new /datum/data/mining_equipment("Super Resonator", /obj/item/resonator/upgraded, 2500),
|
||||
|
||||
@@ -44,8 +44,8 @@
|
||||
|
||||
/obj/structure/closet/secure_closet/miner/New()
|
||||
..()
|
||||
// new /obj/item/stack/sheet/mineral/sandbags(src, 5)
|
||||
// new /obj/item/storage/box/emptysandbags(src)
|
||||
new /obj/item/stack/sheet/mineral/sandbags(src, 5)
|
||||
new /obj/item/storage/box/emptysandbags(src)
|
||||
new /obj/item/shovel(src)
|
||||
new /obj/item/pickaxe/mini(src)
|
||||
new /obj/item/radio/headset/headset_cargo/mining(src)
|
||||
|
||||
@@ -106,6 +106,9 @@
|
||||
/mob/living/carbon/human/diona/Initialize(mapload)
|
||||
..(mapload, /datum/species/diona)
|
||||
|
||||
/mob/living/carbon/human/pod_diona/Initialize(mapload)
|
||||
..(mapload, /datum/species/diona/pod)
|
||||
|
||||
/mob/living/carbon/human/machine/Initialize(mapload)
|
||||
..(mapload, /datum/species/machine)
|
||||
|
||||
|
||||
@@ -11,10 +11,11 @@
|
||||
|
||||
//Do we have a working jetpack?
|
||||
var/obj/item/tank/jetpack/thrust
|
||||
if(istype(back,/obj/item/tank/jetpack))
|
||||
if(istype(back, /obj/item/tank/jetpack))
|
||||
thrust = back
|
||||
else if(istype(s_store,/obj/item/tank/jetpack))
|
||||
thrust = s_store
|
||||
else if(istype(wear_suit, /obj/item/clothing/suit/space/hardsuit))
|
||||
var/obj/item/clothing/suit/space/hardsuit/C = wear_suit
|
||||
thrust = C.jetpack
|
||||
else if(istype(back,/obj/item/rig))
|
||||
var/obj/item/rig/rig = back
|
||||
for(var/obj/item/rig_module/maneuvering_jets/module in rig.installed_modules)
|
||||
|
||||
@@ -7,21 +7,11 @@
|
||||
speech_sounds = list('sound/voice/dionatalk1.ogg') //Credit https://www.youtube.com/watch?v=ufnvlRjsOTI [0:13 - 0:16]
|
||||
speech_chance = 20
|
||||
unarmed_type = /datum/unarmed_attack/diona
|
||||
//primitive_form = "Nymph"
|
||||
slowdown = 5
|
||||
remains_type = /obj/effect/decal/cleanable/ash
|
||||
|
||||
|
||||
warning_low_pressure = 50
|
||||
hazard_low_pressure = -1
|
||||
|
||||
cold_level_1 = 50
|
||||
cold_level_2 = -1
|
||||
cold_level_3 = -1
|
||||
|
||||
heat_level_1 = 300
|
||||
heat_level_2 = 340
|
||||
heat_level_3 = 400
|
||||
burn_mod = 1.25
|
||||
heatmod = 1.5
|
||||
var/pod = FALSE //did they come from a pod? If so, they're stronger than normal Diona.
|
||||
|
||||
blurb = "Commonly referred to (erroneously) as 'plant people', the Dionaea are a strange space-dwelling collective \
|
||||
species hailing from Epsilon Ursae Minoris. Each 'diona' is a cluster of numerous cat-sized organisms called nymphs; \
|
||||
@@ -31,16 +21,14 @@
|
||||
even the simplest concepts of other minds. Their alien physiology allows them survive happily off a diet of nothing but light, \
|
||||
water and other radiation."
|
||||
|
||||
species_traits = list(NO_BREATHE, RADIMMUNE, IS_PLANT, NO_BLOOD, NO_PAIN)
|
||||
dies_at_threshold = TRUE
|
||||
species_traits = list(IS_PLANT)
|
||||
clothing_flags = HAS_SOCKS
|
||||
default_hair_colour = "#000000"
|
||||
has_gender = FALSE
|
||||
dietflags = 0 //Diona regenerate nutrition in light and water, no diet necessary
|
||||
taste_sensitivity = TASTE_SENSITIVITY_NO_TASTE
|
||||
dietflags = DIET_HERB //Diona regenerate nutrition in light and water, no diet necessary, but if they must, they eat other plants *scream
|
||||
taste_sensitivity = TASTE_SENSITIVITY_DULL
|
||||
skinned_type = /obj/item/stack/sheet/wood
|
||||
|
||||
body_temperature = T0C + 15 //make the plant people have a bit lower body temperature, why not
|
||||
blood_color = "#004400"
|
||||
flesh_color = "#907E4A"
|
||||
butt_sprite = "diona"
|
||||
@@ -49,6 +37,7 @@
|
||||
|
||||
has_organ = list(
|
||||
"nutrient channel" = /obj/item/organ/internal/liver/diona,
|
||||
"respiratory vacuoles" = /obj/item/organ/internal/lungs/diona,
|
||||
"neural strata" = /obj/item/organ/internal/heart/diona,
|
||||
"receptor node" = /obj/item/organ/internal/eyes/diona, //Default darksight of 2.
|
||||
"gas bladder" = /obj/item/organ/internal/brain/diona,
|
||||
@@ -85,29 +74,47 @@
|
||||
..()
|
||||
H.gender = NEUTER
|
||||
|
||||
/datum/species/diona/handle_life(mob/living/carbon/human/H)
|
||||
H.radiation = Clamp(H.radiation, 0, 100) //We have to clamp this first, then decrease it, or there's a few edge cases of massive heals if we clamp and decrease at the same time.
|
||||
var/rads = H.radiation / 25
|
||||
H.radiation = max(H.radiation-rads, 0)
|
||||
H.nutrition = min(H.nutrition+rads, NUTRITION_LEVEL_WELL_FED+10)
|
||||
H.adjustBruteLoss(-(rads))
|
||||
H.adjustToxLoss(-(rads))
|
||||
/datum/species/diona/handle_reagents(mob/living/carbon/human/H, datum/reagent/R)
|
||||
if(R.id == "glyphosate" || R.id == "atrazine")
|
||||
H.adjustToxLoss(3) //Deal aditional damage
|
||||
return TRUE
|
||||
return ..()
|
||||
|
||||
/datum/species/diona/handle_life(mob/living/carbon/human/H)
|
||||
if(H.stat == DEAD)
|
||||
return
|
||||
var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing
|
||||
if(isturf(H.loc)) //else, there's considered to be no light
|
||||
var/turf/T = H.loc
|
||||
light_amount = min(T.get_lumcount() * 10, 5) //hardcapped so it's not abused by having a ton of flashlights
|
||||
H.nutrition = min(H.nutrition+light_amount, NUTRITION_LEVEL_WELL_FED+10)
|
||||
light_amount = min(1, T.get_lumcount()) - 0.5
|
||||
if(light_amount > 0)
|
||||
H.clear_alert("nolight")
|
||||
else
|
||||
H.throw_alert("nolight", /obj/screen/alert/nolight)
|
||||
H.nutrition += light_amount * 10
|
||||
if(H.nutrition > NUTRITION_LEVEL_ALMOST_FULL)
|
||||
H.nutrition = NUTRITION_LEVEL_ALMOST_FULL
|
||||
if(light_amount > 0.2 && !H.suiciding) //if there's enough light, heal
|
||||
if(!pod && H.health <= 0)
|
||||
return
|
||||
H.adjustBruteLoss(-1)
|
||||
H.adjustFireLoss(-1)
|
||||
H.adjustToxLoss(-1)
|
||||
H.adjustOxyLoss(-1)
|
||||
|
||||
if(light_amount > 0)
|
||||
H.clear_alert("nolight")
|
||||
else
|
||||
H.throw_alert("nolight", /obj/screen/alert/nolight)
|
||||
|
||||
if((light_amount >= 5) && !H.suiciding) //if there's enough light, heal
|
||||
|
||||
H.adjustBruteLoss(-(light_amount/2))
|
||||
H.adjustFireLoss(-(light_amount/4))
|
||||
if(H.nutrition < NUTRITION_LEVEL_STARVING+50)
|
||||
H.take_overall_damage(10,0)
|
||||
if(H.nutrition < NUTRITION_LEVEL_STARVING + 50)
|
||||
H.adjustBruteLoss(2)
|
||||
..()
|
||||
|
||||
/datum/species/diona/pod //Same name and everything; we want the same limitations on them; we just want their regeneration to kick in at all times and them to have special factions
|
||||
pod = TRUE
|
||||
|
||||
/datum/species/diona/pod/on_species_gain(mob/living/carbon/C, datum/species/old_species)
|
||||
. = ..()
|
||||
C.faction |= "plants"
|
||||
C.faction |= "vines"
|
||||
|
||||
/datum/species/diona/pod/on_species_loss(mob/living/carbon/C)
|
||||
. = ..()
|
||||
C.faction -= "plants"
|
||||
C.faction -= "vines"
|
||||
@@ -70,6 +70,13 @@
|
||||
if(!silent && !isnull(usr))
|
||||
log_and_message_admins("cleared the supplied laws of [src]")
|
||||
|
||||
/mob/living/silicon/proc/clear_zeroth_law(var/silent = FALSE)
|
||||
throw_alert("newlaw", /obj/screen/alert/newlaw)
|
||||
laws_sanity_check()
|
||||
laws.clear_zeroth_laws()
|
||||
if(!silent && !isnull(usr))
|
||||
log_and_message_admins("cleared the zeroth law of [src]")
|
||||
|
||||
/mob/living/silicon/proc/statelaws(var/datum/ai_laws/laws)
|
||||
var/prefix = ""
|
||||
if(MAIN_CHANNEL == lawchannel)
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
/mob/living/simple_animal/hostile/skeleton
|
||||
name = "reanimated skeleton"
|
||||
desc = "A real bonefied skeleton, doesn't seem like it wants to socialize."
|
||||
icon = 'icons/mob/animal.dmi'
|
||||
icon_state = "skeleton"
|
||||
icon_living = "skeleton"
|
||||
turns_per_move = 5
|
||||
speak_emote = list("rattles")
|
||||
emote_see = list("rattles")
|
||||
a_intent = INTENT_HARM
|
||||
maxHealth = 40
|
||||
health = 40
|
||||
speed = 1
|
||||
harm_intent_damage = 5
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 1500
|
||||
healable = FALSE //they're skeletons how would bruise packs help them??
|
||||
attacktext = "slashes"
|
||||
attack_sound = 'sound/hallucinations/growl1.ogg'
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
unsuitable_atmos_damage = 10
|
||||
robust_searching = 1
|
||||
stat_attack = UNCONSCIOUS
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
|
||||
faction = list("skeleton")
|
||||
see_in_dark = 8
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
|
||||
deathmessage = "collapses into a pile of bones!"
|
||||
del_on_death = TRUE
|
||||
loot = list(/obj/effect/decal/remains/human)
|
||||
|
||||
/mob/living/simple_animal/hostile/skeleton/eskimo
|
||||
name = "undead eskimo"
|
||||
desc = "The reanimated remains of some poor traveler."
|
||||
icon_state = "eskimo"
|
||||
icon_living = "eskimo"
|
||||
maxHealth = 55
|
||||
health = 55
|
||||
weather_immunities = list("snow")
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
|
||||
melee_damage_lower = 17
|
||||
melee_damage_upper = 20
|
||||
deathmessage = "collapses into a pile of bones, its gear falling to the floor!"
|
||||
loot = list(/obj/effect/decal/remains/human,
|
||||
/obj/item/twohanded/spear,
|
||||
/obj/item/clothing/shoes/winterboots,
|
||||
/obj/item/clothing/suit/hooded/wintercoat)
|
||||
@@ -184,8 +184,10 @@
|
||||
var/randomize = pick("robot", "slime", "xeno", "human", "animal")
|
||||
switch(randomize)
|
||||
if("robot")
|
||||
var/path
|
||||
if(prob(30))
|
||||
new_mob = new /mob/living/silicon/robot/syndicate(M.loc)
|
||||
path = pick(typesof(/mob/living/silicon/robot/syndicate))
|
||||
new_mob = new path(M.loc)
|
||||
else
|
||||
new_mob = new /mob/living/silicon/robot(M.loc)
|
||||
new_mob.gender = M.gender
|
||||
@@ -193,6 +195,10 @@
|
||||
new_mob.job = "Cyborg"
|
||||
var/mob/living/silicon/robot/Robot = new_mob
|
||||
Robot.mmi = new /obj/item/mmi(new_mob)
|
||||
Robot.lawupdate = FALSE
|
||||
Robot.connected_ai = null
|
||||
Robot.clear_inherent_laws()
|
||||
Robot.clear_zeroth_law()
|
||||
if(ishuman(M))
|
||||
Robot.mmi.transfer_identity(M) //Does not transfer key/client.
|
||||
if("slime")
|
||||
|
||||
@@ -143,7 +143,6 @@
|
||||
M.apply_effect((rand(30,80)),IRRADIATE)
|
||||
M.Weaken(5)
|
||||
M.visible_message("<span class='warning'>[M] writhes in pain as [M.p_their()] vacuoles boil.</span>", "<span class='userdanger'>You writhe in pain as your vacuoles boil!</span>", "<span class='italics'>You hear the crunching of leaves.</span>")
|
||||
if(prob(35))
|
||||
if(prob(80))
|
||||
randmutb(M)
|
||||
domutcheck(M,null)
|
||||
|
||||
@@ -988,10 +988,10 @@
|
||||
C.adjustToxLoss(lethality)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(IS_PLANT in H.dna.species.species_traits) //plantmen take a LOT of damage
|
||||
H.adjustToxLoss(50)
|
||||
if(IS_PLANT in H.dna.species.species_traits) //plantmen take extra damage
|
||||
H.adjustToxLoss(3)
|
||||
..()
|
||||
else if(istype(M, /mob/living/simple_animal/diona)) //plantmen monkeys (diona) take EVEN MORE damage
|
||||
else if(istype(M, /mob/living/simple_animal/diona)) //nymphs take EVEN MORE damage
|
||||
var/mob/living/simple_animal/diona/D = M
|
||||
D.adjustHealth(100)
|
||||
..()
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
righthand_file = 'icons/goonstation/mob/inhands/items_righthand.dmi'
|
||||
icon_state = "ivbag"
|
||||
volume = 200
|
||||
possible_transfer_amounts = list(1,5,10)
|
||||
possible_transfer_amounts = list(1,5,10,15,20,25,30,50) // Everything above 10 is NOT usable on a person and is instead used for transfering to other containers
|
||||
amount_per_transfer_from_this = 1
|
||||
container_type = OPENCONTAINER
|
||||
var/label_text
|
||||
@@ -53,6 +53,11 @@
|
||||
end_processing()
|
||||
return
|
||||
|
||||
if(amount_per_transfer_from_this > 10) // Prevents people from switching to illegal transfer values while the IV is already in someone, i.e. anything over 10
|
||||
visible_message("<span class='danger'>The IV bag's needle pops out of [injection_target]'s arm. The transfer amount is too high!</span>")
|
||||
end_processing()
|
||||
return
|
||||
|
||||
if(get_dist(get_turf(src), get_turf(injection_target)) > 1)
|
||||
to_chat(injection_target, "<span class='userdanger'>The [src]'s' needle is ripped out of you!</span>")
|
||||
injection_target.apply_damage(3, BRUTE, pick("r_arm", "l_arm"))
|
||||
@@ -98,6 +103,9 @@
|
||||
else // Inserting the needle
|
||||
if(!L.can_inject(user, 1))
|
||||
return
|
||||
if(amount_per_transfer_from_this > 10) // We only want to be able to transfer 1, 5, or 10 units to people. Higher numbers are for transfering to other containers
|
||||
to_chat(user, "<span class='warning'>The IV bag can only be used on someone with a transfer amount of 1, 5 or 10.</span>")
|
||||
return
|
||||
if(L != user)
|
||||
L.visible_message("<span class='danger'>[user] is trying to insert [src]'s needle into [L]'s arm!</span>", \
|
||||
"<span class='userdanger'>[user] is trying to insert [src]'s needle into [L]'s arm!</span>")
|
||||
@@ -107,6 +115,22 @@
|
||||
"<span class='userdanger'>[user] inserts [src]'s needle into [L]'s arm!</span>")
|
||||
begin_processing(L)
|
||||
|
||||
else if(target.is_refillable() && is_drainable()) // Transferring from IV bag to other containers
|
||||
if(!reagents.total_volume)
|
||||
to_chat(user, "<span class='warning'>[src] is empty.</span>")
|
||||
return
|
||||
|
||||
if(target.reagents.total_volume >= target.reagents.maximum_volume)
|
||||
to_chat(user, "<span class='warning'>[target] is full.</span>")
|
||||
return
|
||||
|
||||
var/trans = reagents.trans_to(target, amount_per_transfer_from_this)
|
||||
to_chat(user, "<span class='notice'>You transfer [trans] units of the solution to [target].</span>")
|
||||
|
||||
else if(istype(target, /obj/item/reagent_containers/glass) && !target.is_open_container())
|
||||
to_chat(user, "<span class='warning'>You cannot fill [target] while it is sealed.</span>")
|
||||
return
|
||||
|
||||
|
||||
/obj/item/reagent_containers/iv_bag/update_icon()
|
||||
overlays.Cut()
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
//lavaland clown planet papers
|
||||
|
||||
/obj/item/paper/crumpled/bloody/ruins/lavaland/clown_planet/escape
|
||||
info = "If you dare not continue down this path of madness, escape can be found through the chute in this room."
|
||||
|
||||
/obj/item/paper/crumpled/bloody/ruins/lavaland/clown_planet/hope
|
||||
info = "Abandon hope, all ye who enter here."
|
||||
@@ -17,7 +17,7 @@
|
||||
density = TRUE
|
||||
roundstart = FALSE
|
||||
death = FALSE
|
||||
mob_species = /datum/species/diona
|
||||
mob_species = /datum/species/diona/pod
|
||||
flavour_text = "<span class='big bold'>You are a sentient ecosystem,</span><b> an example of the mastery over life that your creators possessed. Your masters, benevolent as they were, created uncounted \
|
||||
seed vaults and spread them across the universe to every planet they could chart. You are in one such seed vault. Your goal is to cultivate and spread life wherever it will go while waiting \
|
||||
for contact from your creators. Estimated time of last contact: Deployment, 5x10^3 millennia ago.</b>"
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
name = "core trunk"
|
||||
max_damage = 200
|
||||
min_broken_damage = 50
|
||||
cannot_break = 1
|
||||
amputation_point = "trunk"
|
||||
encased = null
|
||||
gendered_icon = 0
|
||||
@@ -10,7 +9,6 @@
|
||||
/obj/item/organ/external/groin/diona
|
||||
name = "fork"
|
||||
min_broken_damage = 50
|
||||
cannot_break = 1
|
||||
amputation_point = "lower trunk"
|
||||
gendered_icon = 0
|
||||
|
||||
@@ -18,58 +16,49 @@
|
||||
name = "left upper tendril"
|
||||
max_damage = 35
|
||||
min_broken_damage = 20
|
||||
cannot_break = 1
|
||||
amputation_point = "upper left trunk"
|
||||
|
||||
/obj/item/organ/external/arm/right/diona
|
||||
name = "right upper tendril"
|
||||
max_damage = 35
|
||||
min_broken_damage = 20
|
||||
cannot_break = 1
|
||||
amputation_point = "upper right trunk"
|
||||
|
||||
/obj/item/organ/external/leg/diona
|
||||
name = "left lower tendril"
|
||||
max_damage = 35
|
||||
min_broken_damage = 20
|
||||
cannot_break = 1
|
||||
amputation_point = "lower left fork"
|
||||
|
||||
/obj/item/organ/external/leg/right/diona
|
||||
name = "right lower tendril"
|
||||
max_damage = 35
|
||||
min_broken_damage = 20
|
||||
cannot_break = 1
|
||||
amputation_point = "lower right fork"
|
||||
|
||||
/obj/item/organ/external/foot/diona
|
||||
name = "left foot"
|
||||
max_damage = 20
|
||||
min_broken_damage = 10
|
||||
cannot_break = 1
|
||||
amputation_point = "branch"
|
||||
|
||||
/obj/item/organ/external/foot/right/diona
|
||||
name = "right foot"
|
||||
max_damage = 20
|
||||
min_broken_damage = 10
|
||||
cannot_break = 1
|
||||
amputation_point = "branch"
|
||||
|
||||
/obj/item/organ/external/hand/diona
|
||||
name = "left grasper"
|
||||
cannot_break = 1
|
||||
amputation_point = "branch"
|
||||
|
||||
/obj/item/organ/external/hand/right/diona
|
||||
name = "right grasper"
|
||||
cannot_break = 1
|
||||
amputation_point = "branch"
|
||||
|
||||
/obj/item/organ/external/head/diona
|
||||
max_damage = 50
|
||||
min_broken_damage = 25
|
||||
cannot_break = 1
|
||||
encased = null
|
||||
amputation_point = "upper trunk"
|
||||
gendered_icon = 0
|
||||
@@ -82,6 +71,11 @@
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "nymph"
|
||||
|
||||
/obj/item/organ/internal/lungs/diona
|
||||
name = "respiratory vacuoles"
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "nymph"
|
||||
|
||||
/obj/item/organ/internal/brain/diona // Turns into a nymph instantly, no transplanting possible.
|
||||
name = "gas bladder"
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
|
||||
##BIODOMES
|
||||
#_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm
|
||||
#_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm
|
||||
#_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_winter.dmm
|
||||
|
||||
##RESPAWN
|
||||
#_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
author: "Arkatos"
|
||||
delete-after: True
|
||||
changes:
|
||||
- imageadd: "Added new icon for Charge spell"
|
||||
- imageadd: "Added new icon for No Clothes spell"
|
||||
- imageadd: "Added new icon for Wizard spellbook"
|
||||
- imageadd: "Added new animations to 10 single-use spellbooks"
|
||||
- imageadd: "Added new sprite for Bottle of Tickles"
|
||||
- rscadd: "Added refunding functionality to the Bottle of Ooze akin to the other summoning bottles. Click with the bottle in hand on a wizard spellbook to refund its cost and limit slot."
|
||||
- bugfix: "Fixed an issue where Bottle of Tickles did not properly refund"
|
||||
- bugfix: "Fixed an issue with alpha layering on Bottle of Ooze sprite"
|
||||
- tweak: "Very slightly adjusted brightness of the Boo! ghost spell icon"
|
||||
- tweak: "Wizard spellbook was completely reorganized, and new appropriate categories were added, each category is sorted by price, and if price of the two or more spells is the same, they are sorted alphabetically"
|
||||
- tweak: "Polymorph can now turn a mob into Syndicate medical or saboteur modules"
|
||||
- tweak: "Mobs made via polymorph into borgs are now unbounded free borgs"
|
||||
- tweak: "Repulse spell cost decreased from 2 to 1"
|
||||
- tweak: "Lighting bolt spell cost decreased from 2 to 1"
|
||||
- tweak: "Slaughter/Laughter demons and Magical Morphs now always have their second fluff objective considered as complete no matter the circumstances"
|
||||
- tweak: "Laughter Demons very slightly buffed, they are still a bit weaker than Slaughter Demons"
|
||||
- spellcheck: "Improved descriptions and wording regarding Wizard spellbook and Wizard spells"
|
||||
@@ -0,0 +1,15 @@
|
||||
author: "Fox McCloud"
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "Reworks Diona"
|
||||
- rscadd: "Diona bleed (call it chlorophy; it's green)"
|
||||
- rscadd: "Diona Breathe (plants do need to exchange gas after all)"
|
||||
- rscdel: "Rad Immunity Removed"
|
||||
- tweak: "Diona regenerate 1 OXY, 1 BURN, 1 BRUTE, and 1 TOX if they are in a bright area; this effect does not kick in if they're in crit"
|
||||
- rscdel: "Diona no longer have unbreakable bones (wood can crack ya know!)"
|
||||
- rscdel: "Diona are no longer space proof"
|
||||
- tweak: "Diona are more vulnerable to fire and heat damage"
|
||||
- tweak: "Diona weakness to weedkiller dramatically nerfed"
|
||||
- rscadd: "Diona now use Newcrit"
|
||||
- tweak: "Diona are no longer slow"
|
||||
- rscadd: "Diona can wear spacesuits"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "datlo"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Added the Clown and Winter biodomes as possible lavaland ruins."
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "SteelSlayer"
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "IV bags are able to transfer their contents to other containers by clicking on them with the bag"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "SteelSlayer"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Adds a handheld defibrillator to the paramedic EVA closet"
|
||||
@@ -0,0 +1,5 @@
|
||||
author: "SteelSlayer"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscdel: "Removed one of the high capacity tanks in hydroponics"
|
||||
- rscadd: "Added a disk compartmentalizer to hydroponics"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "Shadow-Quill"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Fixed being able to talk in OOC under certain circumstances if it's disabled."
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "Kurgis"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Beepsky now bumps around on its wheels when patrolling for crime."
|
||||
@@ -0,0 +1,7 @@
|
||||
author: "Fox McCloud"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Adds jetpack hardsuit upgrades: get yours at mining for 2000 points"
|
||||
- rscdel: "Removes mining carbon dioxide jetpack"
|
||||
- tweak: "Can no longer use jetpacks in your suit storage slot"
|
||||
- rscadd: "Chief Engineer's hardsuit, Syndicate Hardsuit (normal and elite), and Shielded Syndicate Hardsuit all have built in jetpacks"
|
||||
@@ -0,0 +1,6 @@
|
||||
author: "Fox McCloud"
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "loadout costs for most things cut from 2 to 1"
|
||||
- rscadd: "Adds fingerless gloves, eyepatch, prescription glasses, black shoes, brown shoes, white shoes, and ian's shirt to the loadout"
|
||||
- tweak: "moved hipster glasses from donator to general glasses"
|
||||
@@ -0,0 +1,7 @@
|
||||
author: "Fox McCloud"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Adds in sandbags. Use them to deploy destructable barriers; miners start off with a few"
|
||||
- rscdel: "Removes access based security barriers"
|
||||
- rscadd: "Adds in security barrier grenade. When it goes off, it will deploy up to 3 barriers that will lock into place; should find 4 of these in the armory"
|
||||
- rscadd: "can tear up bedsheet and gauze to get cloth--requires a sharp object"
|
||||
@@ -0,0 +1,5 @@
|
||||
author: "Ionward"
|
||||
delete-after: True
|
||||
changes:
|
||||
- imageadd: "Drask crewmembers now have properly fitting shoes."
|
||||
- imageadd: "Fixed some minor issues in Drasks uniforms"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "Fox McCloud"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Unironically fixes about several thousand runtimes"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "Fox McCloud"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Fixes jackets not keeping you warm"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "variableundefined"
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "A proc's name got changed. That's it"
|
||||
|
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 113 KiB |
|
Before Width: | Height: | Size: 320 KiB After Width: | Height: | Size: 323 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 332 KiB After Width: | Height: | Size: 336 KiB |
|
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 144 KiB After Width: | Height: | Size: 144 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 993 B |
|
Before Width: | Height: | Size: 156 KiB After Width: | Height: | Size: 162 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 3.0 KiB |
@@ -1324,6 +1324,8 @@
|
||||
#include "code\modules\client\preference\loadout\loadout_cosmetics.dm"
|
||||
#include "code\modules\client\preference\loadout\loadout_donor.dm"
|
||||
#include "code\modules\client\preference\loadout\loadout_general.dm"
|
||||
#include "code\modules\client\preference\loadout\loadout_glasses.dm"
|
||||
#include "code\modules\client\preference\loadout\loadout_gloves.dm"
|
||||
#include "code\modules\client\preference\loadout\loadout_hat.dm"
|
||||
#include "code\modules\client\preference\loadout\loadout_racial.dm"
|
||||
#include "code\modules\client\preference\loadout\loadout_shoes.dm"
|
||||
@@ -1959,6 +1961,7 @@
|
||||
#include "code\modules\mob\living\simple_animal\hostile\netherworld.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\pirate.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\russian.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\skeleton.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\spaceworms.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\statue.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\syndicate.dm"
|
||||
@@ -2339,6 +2342,7 @@
|
||||
#include "code\modules\ruins\ruin_areas.dm"
|
||||
#include "code\modules\ruins\lavalandruin_code\animal_hospital.dm"
|
||||
#include "code\modules\ruins\lavalandruin_code\ash_walker_den.dm"
|
||||
#include "code\modules\ruins\lavalandruin_code\clown_planet.dm"
|
||||
#include "code\modules\ruins\lavalandruin_code\dead_ratvar.dm"
|
||||
#include "code\modules\ruins\lavalandruin_code\fountain_hall.dm"
|
||||
#include "code\modules\ruins\lavalandruin_code\hermit.dm"
|
||||
|
||||