mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 02:34:00 +00:00
Polaris sync
This commit is contained in:
@@ -5,7 +5,7 @@ sudo: false
|
||||
env:
|
||||
BYOND_MAJOR="511"
|
||||
BYOND_MINOR="1381"
|
||||
MACRO_COUNT=875
|
||||
MACRO_COUNT=4
|
||||
|
||||
cache:
|
||||
directories:
|
||||
|
||||
12
README.md
12
README.md
@@ -7,16 +7,22 @@ VOREStation is a fork of the Polaris code branch, itself a fork of the Baystatio
|
||||
---
|
||||
|
||||
### LICENSE
|
||||
<<<<<<< HEAD
|
||||
VOREStation is licensed under the GNU Affero General Public License version 3, which can be found in full in LICENSE-AGPL3.txt.
|
||||
=======
|
||||
The code for Polaris is licensed under the [GNU Affero General Public License](http://www.gnu.org/licenses/agpl.html) version 3, which can be found in full in LICENSE-AGPL3.txt.
|
||||
>>>>>>> PolarisSS13/master
|
||||
|
||||
Commits with a git authorship date prior to `1420675200 +0000` (2015/01/08 00:00) are licensed under the GNU General Public License version 3, which can be found in full in LICENSE-GPL3.txt.
|
||||
Code with a git authorship date prior to `1420675200 +0000` (2015/01/08 00:00) are licensed under the GNU General Public License version 3, which can be found in full in LICENSE-GPL3.txt.
|
||||
|
||||
All commits whose authorship dates are not prior to `1420675200 +0000` are assumed to be licensed under AGPL v3, if you wish to license under GPL v3 please make this clear in the commit message and any added files.
|
||||
All code whose authorship dates are not prior to `1420675200 +0000` are assumed to be licensed under AGPL v3, if you wish to license under GPL v3 please make this clear in the commit message and any added files.
|
||||
|
||||
If you wish to develop and host this codebase in a closed source manner you may use all commits prior to `1420675200 +0000`, which are licensed under GPL v3. The major change here is that if you host a server using any code licensed under AGPLv3 you are required to provide full source code for your servers users as well including addons and modifications you have made.
|
||||
If you wish to develop and host this codebase in a closed source manner you may use all code prior to `1420675200 +0000`, which are licensed under GPL v3. The major change here is that if you host a server using any code licensed under AGPLv3 you are required to provide full source code for your servers users as well including addons and modifications you have made.
|
||||
|
||||
See [here](https://www.gnu.org/licenses/why-affero-gpl.html) for more information.
|
||||
|
||||
All assets including icons and sound are under a [CC BY-SA 3.0](http://creativecommons.org/licenses/by-sa/3.0/) license unless otherwise indicated.
|
||||
|
||||
### GETTING THE CODE
|
||||
The simplest way to obtain the code is using the github .zip feature.
|
||||
|
||||
|
||||
@@ -89,11 +89,11 @@
|
||||
|
||||
/obj/machinery/atmospherics/binary/circulator/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
|
||||
playsound(src, W.usesound, 75, 1)
|
||||
anchored = !anchored
|
||||
user.visible_message("[user.name] [anchored ? "secures" : "unsecures"] the bolts holding [src.name] to the floor.", \
|
||||
"You [anchored ? "secure" : "unsecure"] the bolts holding [src] to the floor.", \
|
||||
"You hear a ratchet")
|
||||
"You hear a ratchet.")
|
||||
|
||||
if(anchored)
|
||||
if(dir & (NORTH|SOUTH))
|
||||
|
||||
@@ -248,9 +248,9 @@
|
||||
user << "<span class='warning'>You cannot unwrench \the [src], it too exerted due to internal pressure.</span>"
|
||||
add_fingerprint(user)
|
||||
return 1
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
user << "<span class='notice'>You begin to unfasten \the [src]...</span>"
|
||||
if (do_after(user, 40))
|
||||
if (do_after(user, 40 * W.toolspeed))
|
||||
user.visible_message( \
|
||||
"<span class='notice'>\The [user] unfastens \the [src].</span>", \
|
||||
"<span class='notice'>You have unfastened \the [src].</span>", \
|
||||
|
||||
@@ -86,6 +86,7 @@
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
anchored = !anchored
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
user << "<span class='notice'>You [anchored ? "secure" : "unsecure"] the bolts holding \the [src] to the floor.</span>"
|
||||
|
||||
if(anchored)
|
||||
@@ -257,6 +258,7 @@
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
anchored = !anchored
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
turbine = null
|
||||
user << "<span class='notice'>You [anchored ? "secure" : "unsecure"] the bolts holding \the [src] to the floor.</span>"
|
||||
updateConnection()
|
||||
|
||||
@@ -227,9 +227,9 @@ Thus, the two variables affect pump operation are set in New():
|
||||
user << "<span class='warning'>You cannot unwrench this [src], it too exerted due to internal pressure.</span>"
|
||||
add_fingerprint(user)
|
||||
return 1
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
user << "<span class='notice'>You begin to unfasten \the [src]...</span>"
|
||||
if (do_after(user, 40))
|
||||
if (do_after(user, 40 * W.toolspeed))
|
||||
user.visible_message( \
|
||||
"<span class='notice'>\The [user] unfastens \the [src].</span>", \
|
||||
"<span class='notice'>You have unfastened \the [src].</span>", \
|
||||
|
||||
@@ -91,8 +91,8 @@
|
||||
add_fingerprint(user)
|
||||
return 1
|
||||
user << "<span class='notice'>You begin to unfasten \the [src]...</span>"
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
if(do_after(user, 40))
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
if(do_after(user, 40 * W.toolspeed))
|
||||
user.visible_message( \
|
||||
"<span class='notice'>\The [user] unfastens \the [src].</span>", \
|
||||
"<span class='notice'>You have unfastened \the [src].</span>", \
|
||||
|
||||
@@ -142,9 +142,9 @@
|
||||
user << "<span class='warning'>You cannot unwrench \the [src], it too exerted due to internal pressure.</span>"
|
||||
add_fingerprint(user)
|
||||
return 1
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
user << "<span class='notice'>You begin to unfasten \the [src]...</span>"
|
||||
if (do_after(user, 40))
|
||||
if (do_after(user, 40 * W.toolspeed))
|
||||
user.visible_message( \
|
||||
"<span class='notice'>\The [user] unfastens \the [src].</span>", \
|
||||
"<span class='notice'>You have unfastened \the [src].</span>", \
|
||||
|
||||
@@ -137,9 +137,9 @@
|
||||
user << "<span class='warning'>You cannot unwrench \the [src], it too exerted due to internal pressure.</span>"
|
||||
add_fingerprint(user)
|
||||
return 1
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
user << "<span class='notice'>You begin to unfasten \the [src]...</span>"
|
||||
if (do_after(user, 40))
|
||||
if (do_after(user, 40 * W.toolspeed))
|
||||
user.visible_message( \
|
||||
"<span class='notice'>\The [user] unfastens \the [src].</span>", \
|
||||
"<span class='notice'>You have unfastened \the [src].</span>", \
|
||||
|
||||
@@ -112,9 +112,9 @@
|
||||
user << "<span class='warning'>You cannot unwrench \the [src], it too exerted due to internal pressure.</span>"
|
||||
add_fingerprint(user)
|
||||
return 1
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
user << "<span class='notice'>You begin to unfasten \the [src]...</span>"
|
||||
if (do_after(user, 40))
|
||||
if (do_after(user, 40 * W.toolspeed))
|
||||
user.visible_message( \
|
||||
"<span class='notice'>\The [user] unfastens \the [src].</span>", \
|
||||
"<span class='notice'>You have unfastened \the [src].</span>", \
|
||||
|
||||
@@ -354,9 +354,9 @@
|
||||
user << "<span class='warnng'>You cannot unwrench \the [src], it too exerted due to internal pressure.</span>"
|
||||
add_fingerprint(user)
|
||||
return 1
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
user << "<span class='notice'>You begin to unfasten \the [src]...</span>"
|
||||
if (do_after(user, 40))
|
||||
if (do_after(user, 40 * W.toolspeed))
|
||||
user.visible_message( \
|
||||
"<span class='notice'>\The [user] unfastens \the [src].</span>", \
|
||||
"<span class='notice'>You have unfastened \the [src].</span>", \
|
||||
|
||||
@@ -78,9 +78,9 @@
|
||||
user << "<span class='warning'>You cannot unwrench \the [src], it is too exerted due to internal pressure.</span>"
|
||||
add_fingerprint(user)
|
||||
return 1
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
user << "<span class='notice'>You begin to unfasten \the [src]...</span>"
|
||||
if (do_after(user, 40))
|
||||
if (do_after(user, 40 * W.toolspeed))
|
||||
user.visible_message( \
|
||||
"<span class='notice'>\The [user] unfastens \the [src].</span>", \
|
||||
"<span class='notice'>You have unfastened \the [src].</span>", \
|
||||
|
||||
@@ -358,9 +358,9 @@
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if (WT.remove_fuel(0,user))
|
||||
user << "<span class='notice'>Now welding the vent.</span>"
|
||||
if(do_after(user, 20))
|
||||
if(do_after(user, 20 * WT.toolspeed))
|
||||
if(!src || !WT.isOn()) return
|
||||
playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1)
|
||||
playsound(src.loc, WT.usesound, 50, 1)
|
||||
if(!welded)
|
||||
user.visible_message("<span class='notice'>\The [user] welds the vent shut.</span>", "<span class='notice'>You weld the vent shut.</span>", "You hear welding.")
|
||||
welded = 1
|
||||
@@ -407,9 +407,9 @@
|
||||
user << "<span class='warning'>You cannot unwrench \the [src], it is too exerted due to internal pressure.</span>"
|
||||
add_fingerprint(user)
|
||||
return 1
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
user << "<span class='notice'>You begin to unfasten \the [src]...</span>"
|
||||
if (do_after(user, 40))
|
||||
if (do_after(user, 40 * W.toolspeed))
|
||||
user.visible_message( \
|
||||
"<span class='notice'>\The [user] unfastens \the [src].</span>", \
|
||||
"<span class='notice'>You have unfastened \the [src].</span>", \
|
||||
|
||||
@@ -107,6 +107,7 @@
|
||||
"filter_co2" = ("carbon_dioxide" in scrubbing_gas),
|
||||
"filter_phoron" = ("phoron" in scrubbing_gas),
|
||||
"filter_n2o" = ("sleeping_agent" in scrubbing_gas),
|
||||
"filter_fuel" = ("volatile_fuel" in scrubbing_gas),
|
||||
"sigtype" = "status"
|
||||
)
|
||||
if(!initial_loc.air_scrub_names[id_tag])
|
||||
@@ -233,6 +234,11 @@
|
||||
else if(signal.data["toggle_n2o_scrub"])
|
||||
toggle += "sleeping_agent"
|
||||
|
||||
if(!isnull(signal.data["fuel_scrub"]) && text2num(signal.data["fuel_scrub"]) != ("volatile_fuel" in scrubbing_gas))
|
||||
toggle += "volatile_fuel"
|
||||
else if(signal.data["toggle_fuel_scrub"])
|
||||
toggle += "volatile_fuel"
|
||||
|
||||
scrubbing_gas ^= toggle
|
||||
|
||||
if(signal.data["init"] != null)
|
||||
@@ -272,9 +278,9 @@
|
||||
user << "<span class='warning'>You cannot unwrench \the [src], it is too exerted due to internal pressure.</span>"
|
||||
add_fingerprint(user)
|
||||
return 1
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
user << "<span class='notice'>You begin to unfasten \the [src]...</span>"
|
||||
if (do_after(user, 40))
|
||||
if (do_after(user, 40 * W.toolspeed))
|
||||
user.visible_message( \
|
||||
"<span class='notice'>\The [user] unfastens \the [src].</span>", \
|
||||
"<span class='notice'>You have unfastened \the [src].</span>", \
|
||||
|
||||
@@ -298,9 +298,9 @@
|
||||
user << "<span class='warning'>You cannot unwrench \the [src], it is too exerted due to internal pressure.</span>"
|
||||
add_fingerprint(user)
|
||||
return 1
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
user << "<span class='notice'>You begin to unfasten \the [src]...</span>"
|
||||
if (do_after(user, 40))
|
||||
if (do_after(user, 40 * W.toolspeed))
|
||||
user.visible_message( \
|
||||
"<span class='notice'>\The [user] unfastens \the [src].</span>", \
|
||||
"<span class='notice'>You have unfastened \the [src].</span>", \
|
||||
|
||||
@@ -90,9 +90,9 @@
|
||||
user << "<span class='warning'>You cannot unwrench \the [src], it is too exerted due to internal pressure.</span>"
|
||||
add_fingerprint(user)
|
||||
return 1
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
user << "<span class='notice'>You begin to unfasten \the [src]...</span>"
|
||||
if (do_after(user, 40))
|
||||
if (do_after(user, 40 * W.toolspeed))
|
||||
user.visible_message( \
|
||||
"<span class='notice'>\The [user] unfastens \the [src].</span>", \
|
||||
"<span class='notice'>You have unfastened \the [src].</span>", \
|
||||
|
||||
@@ -74,6 +74,7 @@
|
||||
#define XGM_GAS_FUEL 1
|
||||
#define XGM_GAS_OXIDIZER 2
|
||||
#define XGM_GAS_CONTAMINANT 4
|
||||
#define XGM_GAS_FUSION_FUEL 8
|
||||
|
||||
#define TANK_LEAK_PRESSURE (30.*ONE_ATMOSPHERE) // Tank starts leaking.
|
||||
#define TANK_RUPTURE_PRESSURE (40.*ONE_ATMOSPHERE) // Tank spills all contents into atmosphere.
|
||||
|
||||
@@ -96,7 +96,7 @@ var/list/be_special_flags = list(
|
||||
#define GHOSTCAST 0x1 //can a ghost cast it?
|
||||
#define NEEDSCLOTHES 0x2 //does it need the wizard garb to cast? Nonwizard spells should not have this
|
||||
#define NEEDSHUMAN 0x4 //does it require the caster to be human?
|
||||
#define Z2NOCAST 0x8 //if this is added, the spell can't be cast at centcomm
|
||||
#define Z2NOCAST 0x8 //if this is added, the spell can't be cast at CentCom
|
||||
#define STATALLOWED 0x10 //if set, the user doesn't have to be conscious to cast. Required for ghost spells
|
||||
#define IGNOREPREV 0x20 //if set, each new target does not overlap with the previous one
|
||||
//The following flags only affect different types of spell, and therefore overlap
|
||||
|
||||
@@ -58,7 +58,7 @@ var/global/defer_powernet_rebuild = 0 // True if net rebuild will be called
|
||||
#define NETWORK_COMMUNICATORS "Communicators"
|
||||
|
||||
// Those networks can only be accessed by pre-existing terminals. AIs and new terminals can't use them.
|
||||
var/list/restricted_camera_networks = list(NETWORK_ERT,NETWORK_MERCENARY,"Secret")
|
||||
var/list/restricted_camera_networks = list(NETWORK_ERT,NETWORK_MERCENARY,"Secret", NETWORK_COMMUNICATORS)
|
||||
|
||||
|
||||
//singularity defines
|
||||
|
||||
@@ -89,6 +89,11 @@
|
||||
#define SHUTTLE_INTRANSIT 2
|
||||
#define SHUTTLE_CRASHED 3 // VOREStation Edit - Yup that can happen now
|
||||
|
||||
// Sound defines for shuttles.
|
||||
#define HYPERSPACE_WARMUP 0
|
||||
#define HYPERSPACE_PROGRESS 1
|
||||
#define HYPERSPACE_END 2
|
||||
|
||||
// Ferry shuttle processing status.
|
||||
#define IDLE_STATE 0
|
||||
#define WAIT_LAUNCH 1
|
||||
@@ -147,6 +152,14 @@
|
||||
#define DEFAULT_TABLE_MATERIAL "plastic"
|
||||
#define DEFAULT_WALL_MATERIAL "steel"
|
||||
|
||||
#define MAT_STEEL "steel"
|
||||
#define MAT_GLASS "glass"
|
||||
#define MAT_SILVER "silver"
|
||||
#define MAT_GOLD "gold"
|
||||
#define MAT_TITANIUM "titanium"
|
||||
#define MAT_PHORON "phoron"
|
||||
#define MAT_DIAMOND "diamond"
|
||||
|
||||
#define SHARD_SHARD "shard"
|
||||
#define SHARD_SHRAPNEL "shrapnel"
|
||||
#define SHARD_STONE_PIECE "piece"
|
||||
@@ -203,3 +216,6 @@
|
||||
#define TSC_GIL "Gilthari"
|
||||
|
||||
#define MIDNIGHT_ROLLOVER 864000 //number of deciseconds in a day
|
||||
|
||||
#define WORLD_ICON_SIZE 32 //Needed for the R-UST port
|
||||
#define PIXEL_MULTIPLIER WORLD_ICON_SIZE/32 //Needed for the R-UST port
|
||||
|
||||
@@ -80,7 +80,9 @@
|
||||
if (NORTHEAST) return "northeast"
|
||||
if (SOUTHEAST) return "southeast"
|
||||
if (NORTHWEST) return "northwest"
|
||||
if (SOUTHWEST) return "southwest"
|
||||
if (SOUTHWEST) return "southwest"
|
||||
if (UP) return "up"
|
||||
if (DOWN) return "down"
|
||||
|
||||
// Turns text into proper directions
|
||||
/proc/text2dir(direction)
|
||||
|
||||
@@ -38,6 +38,8 @@
|
||||
|
||||
#define issilicon(A) istype(A, /mob/living/silicon)
|
||||
|
||||
#define isvoice(A) istype(A, /mob/living/voice)
|
||||
|
||||
#define isslime(A) istype(A, /mob/living/carbon/slime)
|
||||
|
||||
#define isxeno(A) istype(A, /mob/living/simple_animal/xeno)
|
||||
|
||||
@@ -243,7 +243,7 @@ var/obj/screen/robot_inventory
|
||||
//Unfortunately adding the emag module to the list of modules has to be here. This is because a borg can
|
||||
//be emagged before they actually select a module. - or some situation can cause them to get a new module
|
||||
// - or some situation might cause them to get de-emagged or something.
|
||||
if(r.emagged)
|
||||
if(r.emagged || r.emag_items)
|
||||
if(!(r.module.emag in r.module.modules))
|
||||
r.module.modules.Add(r.module.emag)
|
||||
else
|
||||
|
||||
@@ -159,7 +159,7 @@ var/list/DEPT_FREQS = list(AI_FREQ, COMM_FREQ, ENG_FREQ, ENT_FREQ, MED_FREQ, SEC
|
||||
// Antags!
|
||||
if (frequency in ANTAG_FREQS)
|
||||
return "syndradio"
|
||||
// centcomm channels (deathsquid and ert)
|
||||
// CentCom channels (deathsquid and ert)
|
||||
if(frequency in CENT_FREQS)
|
||||
return "centradio"
|
||||
// command channel
|
||||
|
||||
@@ -137,33 +137,27 @@
|
||||
path =/obj/item/ammo_magazine/m44
|
||||
hidden = 1
|
||||
|
||||
/////// 5.56mm
|
||||
/datum/category_item/autolathe/arms/rifle_556
|
||||
name = "rifle magazine (5.56mm)"
|
||||
path =/obj/item/ammo_magazine/m556
|
||||
/////// 5.45mm
|
||||
/datum/category_item/autolathe/arms/rifle_545
|
||||
name = "rifle magazine (5.45mm)"
|
||||
path =/obj/item/ammo_magazine/m545
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/rifle_556p
|
||||
name = "rifle magazine (5.56mm practice)"
|
||||
path =/obj/item/ammo_magazine/m556/practice
|
||||
/datum/category_item/autolathe/arms/rifle_545p
|
||||
name = "rifle magazine (5.45mm practice)"
|
||||
path =/obj/item/ammo_magazine/m545/practice
|
||||
|
||||
/datum/category_item/autolathe/arms/machinegun_556
|
||||
/datum/category_item/autolathe/arms/machinegun_545
|
||||
name = "machinegun box magazine (5.56)"
|
||||
path =/obj/item/ammo_magazine/m556saw
|
||||
path =/obj/item/ammo_magazine/m545saw
|
||||
hidden = 1
|
||||
/////// 7.62
|
||||
|
||||
/////// 7.62
|
||||
|
||||
/datum/category_item/autolathe/arms/rifle_762
|
||||
name = "rifle magazine (7.62mm)"
|
||||
path =/obj/item/ammo_magazine/m762
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/shotgun_magazine
|
||||
name = "24rnd shotgun magazine (12g)"
|
||||
path =/obj/item/ammo_magazine/m12gdrum
|
||||
hidden = 1
|
||||
|
||||
/*
|
||||
/datum/category_item/autolathe/arms/rifle_small_762
|
||||
name = "rifle magazine (7.62mm)"
|
||||
@@ -171,6 +165,26 @@
|
||||
hidden = 1
|
||||
*/
|
||||
|
||||
/////// Shotgun
|
||||
|
||||
/datum/category_item/autolathe/arms/shotgun_clip_beanbag
|
||||
name = "4-round 12g shell clip (beanbag)"
|
||||
path =/obj/item/ammo_magazine/clip/c12g/beanbag
|
||||
|
||||
/datum/category_item/autolathe/arms/shotgun_clip_slug
|
||||
name = "4-round 12g shell clip (slug)"
|
||||
path =/obj/item/ammo_magazine/clip/c12g
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/shotgun_clip_pellet
|
||||
name = "4-round 12g shell clip (buckshot)"
|
||||
path =/obj/item/ammo_magazine/clip/c12g/pellet
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/shotgun_clip_beanbag
|
||||
name = "4-round 12g shell clip (beanbag)"
|
||||
path =/obj/item/ammo_magazine/clip/c12g/beanbag
|
||||
|
||||
/* Commented out until autolathe stuff is decided/fixed. Will probably remove these entirely. -Spades
|
||||
// These should always be/empty! The idea is to fill them up manually with ammo clips.
|
||||
|
||||
@@ -231,14 +245,14 @@
|
||||
category = "Arms and Ammunition"
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/rifle_556
|
||||
name = "10rnd rifle magazine (5.56mm)"
|
||||
path =/obj/item/ammo_magazine/m556saw/empty
|
||||
/datum/category_item/autolathe/arms/rifle_545
|
||||
name = "10rnd rifle magazine (5.45mm)"
|
||||
path =/obj/item/ammo_magazine/m545saw/empty
|
||||
category = "Arms and Ammunition"
|
||||
|
||||
/datum/category_item/autolathe/arms/rifle_556m
|
||||
name = "20rnd rifle magazine (5.56mm)"
|
||||
path =/obj/item/ammo_magazine/m556sawm/empty
|
||||
/datum/category_item/autolathe/arms/rifle_545m
|
||||
name = "20rnd rifle magazine (5.45mm)"
|
||||
path =/obj/item/ammo_magazine/m545sawm/empty
|
||||
category = "Arms and Ammunition"
|
||||
hidden = 1
|
||||
|
||||
@@ -345,15 +359,15 @@
|
||||
category = "Arms and Ammunition"
|
||||
hidden = 1
|
||||
*/
|
||||
/datum/category_item/autolathe/arms/rifle_clip_556
|
||||
name = "ammo clip (5.56mm)"
|
||||
path =/obj/item/ammo_magazine/clip/c556
|
||||
/datum/category_item/autolathe/arms/rifle_clip_545
|
||||
name = "ammo clip (5.45mm)"
|
||||
path =/obj/item/ammo_magazine/clip/c545
|
||||
category = "Arms and Ammunition"
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/rifle_clip_556_practice
|
||||
name = "ammo clip (5.56mm practice)"
|
||||
path =/obj/item/ammo_magazine/clip/c556/practice
|
||||
/datum/category_item/autolathe/arms/rifle_clip_545_practice
|
||||
name = "ammo clip (5.45mm practice)"
|
||||
path =/obj/item/ammo_magazine/clip/c545/practice
|
||||
category = "Arms and Ammunition"
|
||||
|
||||
/datum/category_item/autolathe/arms/rifle_clip_762
|
||||
|
||||
@@ -176,7 +176,7 @@
|
||||
teleatom.visible_message("<span class='danger'>\The [teleatom] bounces off of the portal!</span>")
|
||||
return 0
|
||||
|
||||
if(destination.z in using_map.admin_levels) //centcomm z-level
|
||||
if(destination.z in using_map.admin_levels) //CentCom z-level
|
||||
if(istype(teleatom, /obj/mecha))
|
||||
var/obj/mecha/MM = teleatom
|
||||
MM.occupant << "<span class='danger'>\The [MM] would not survive the jump to a location so far away!</span>"
|
||||
|
||||
@@ -407,7 +407,7 @@
|
||||
|
||||
else if (href_list["obj_announce"])
|
||||
var/obj_count = 1
|
||||
current << "\blue Your current objectives:"
|
||||
current << "<font color='blue'>Your current objectives:</font>"
|
||||
for(var/datum/objective/objective in objectives)
|
||||
current << "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
|
||||
obj_count++
|
||||
|
||||
@@ -200,3 +200,52 @@
|
||||
/obj/item/weapon/stock_parts/matter_bin,
|
||||
/obj/item/weapon/circuitboard/pacman/super
|
||||
)
|
||||
|
||||
/datum/supply_packs/eng/fusion_core
|
||||
name = "R-UST Mk. 8 Tokamak fusion core crate"
|
||||
cost = 50
|
||||
containername = "R-UST Mk. 8 Tokamak Fusion Core crate"
|
||||
containertype = /obj/structure/closet/crate/secure/engineering
|
||||
access = access_engine
|
||||
contains = list(
|
||||
/obj/item/weapon/book/manual/rust_engine,
|
||||
/obj/machinery/power/fusion_core,
|
||||
/obj/item/weapon/circuitboard/fusion_core
|
||||
)
|
||||
|
||||
/datum/supply_packs/eng/fusion_fuel_injector
|
||||
name = "R-UST Mk. 8 fuel injector crate"
|
||||
cost = 30
|
||||
containername = "R-UST Mk. 8 fuel injector crate"
|
||||
containertype = /obj/structure/closet/crate/secure/engineering
|
||||
access = access_engine
|
||||
contains = list(
|
||||
/obj/machinery/fusion_fuel_injector,
|
||||
/obj/machinery/fusion_fuel_injector,
|
||||
/obj/item/weapon/circuitboard/fusion_injector
|
||||
)
|
||||
|
||||
/datum/supply_packs/eng/gyrotron
|
||||
name = "Gyrotron crate"
|
||||
cost = 15
|
||||
containername = "Gyrotron Crate"
|
||||
containertype = /obj/structure/closet/crate/secure/engineering
|
||||
access = access_engine
|
||||
contains = list(
|
||||
/obj/machinery/power/emitter/gyrotron,
|
||||
/obj/item/weapon/circuitboard/gyrotron
|
||||
)
|
||||
|
||||
/datum/supply_packs/eng/fusion_fuel_compressor
|
||||
name = "Fusion Fuel Compressor circuitry crate"
|
||||
cost = 10
|
||||
containername = "Fusion Fuel Compressor circuitry crate"
|
||||
containertype = /obj/structure/closet/crate/engineering
|
||||
contains = list(/obj/item/weapon/circuitboard/fusion_fuel_compressor)
|
||||
|
||||
/datum/supply_packs/eng/tritium
|
||||
name = "Tritium crate"
|
||||
cost = 75
|
||||
containername = "Tritium crate"
|
||||
containertype = /obj/structure/closet/crate/engineering
|
||||
contains = list(/obj/fiftyspawner/tritium)
|
||||
@@ -156,7 +156,7 @@
|
||||
contains = list(
|
||||
/obj/item/ammo_magazine/m9mmt,
|
||||
/obj/item/ammo_magazine/m9mmt/rubber,
|
||||
/obj/item/ammo_magazine/m556saw
|
||||
/obj/item/ammo_magazine/m545saw
|
||||
)
|
||||
cost = 25
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
|
||||
@@ -159,14 +159,13 @@
|
||||
/obj/item/device/kit/paint/gygax/recitence
|
||||
)
|
||||
name = "Random Gygax exosuit modkit"
|
||||
/*
|
||||
|
||||
/datum/supply_packs/robotics/jumper_cables
|
||||
name = "Jumper kit crate"
|
||||
contains = list(
|
||||
/obj/item/device/defib_kit/jumper_kit = 4
|
||||
/obj/item/device/defib_kit/jumper_kit = 2
|
||||
)
|
||||
cost = 30
|
||||
containertype = /obj/structure/closet/crate/secure/science
|
||||
containername = "Jumper kit crate"
|
||||
access = access_robotics
|
||||
*/
|
||||
@@ -50,3 +50,17 @@
|
||||
containertype = /obj/structure/closet/crate/hydroponics
|
||||
containername = "Exotic Seeds crate"
|
||||
access = access_hydroponics
|
||||
|
||||
/datum/supply_packs/sci/integrated_circuit_printer
|
||||
name = "Integrated circuit printer"
|
||||
contains = list(/obj/item/device/integrated_circuit_printer = 2)
|
||||
cost = 15
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Integrated circuit crate"
|
||||
|
||||
/datum/supply_packs/sci/integrated_circuit_printer_upgrade
|
||||
name = "Integrated circuit printer upgrade - advanced designs"
|
||||
contains = list(/obj/item/weapon/disk/integrated_circuit/upgrade/advanced)
|
||||
cost = 30
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Integrated circuit crate"
|
||||
|
||||
@@ -48,21 +48,21 @@
|
||||
name = "Anti-Materiel Rifle ammo box (14.5mm)"
|
||||
path = /obj/item/weapon/storage/box/sniperammo
|
||||
|
||||
/datum/uplink_item/item/ammo/c556
|
||||
name = "Rifle Magazine (5.56mm)"
|
||||
path = /obj/item/ammo_magazine/m556
|
||||
/datum/uplink_item/item/ammo/c545
|
||||
name = "Rifle Magazine (5.45mm)"
|
||||
path = /obj/item/ammo_magazine/m545
|
||||
|
||||
/datum/uplink_item/item/ammo/c556/ext
|
||||
name = "Rifle Magazine (5.56mm Extended)"
|
||||
path = /obj/item/ammo_magazine/m556/ext
|
||||
/datum/uplink_item/item/ammo/c545/ext
|
||||
name = "Rifle Magazine (5.45mm Extended)"
|
||||
path = /obj/item/ammo_magazine/m545/ext
|
||||
|
||||
/datum/uplink_item/item/ammo/c556/ap
|
||||
name = "Rifle Magazine (5.56mm AP)"
|
||||
path = /obj/item/ammo_magazine/m556/ap
|
||||
/datum/uplink_item/item/ammo/c545/ap
|
||||
name = "Rifle Magazine (5.45mm AP)"
|
||||
path = /obj/item/ammo_magazine/m545/ap
|
||||
|
||||
/datum/uplink_item/item/ammo/c556/ap/ext
|
||||
name = "Rifle Magazine (5.56mm AP Extended)"
|
||||
path = /obj/item/ammo_magazine/m556/ap/ext
|
||||
/datum/uplink_item/item/ammo/c545/ap/ext
|
||||
name = "Rifle Magazine (5.45mm AP Extended)"
|
||||
path = /obj/item/ammo_magazine/m545/ap/ext
|
||||
|
||||
/datum/uplink_item/item/ammo/c762
|
||||
name = "Rifle Magazine (7.62mm)"
|
||||
@@ -76,13 +76,13 @@
|
||||
name = "SMG Magazine (10mm)"
|
||||
path = /obj/item/ammo_magazine/m10mm
|
||||
|
||||
/datum/uplink_item/item/ammo/a556
|
||||
name = "Machinegun Magazine (5.56mm)"
|
||||
path = /obj/item/ammo_magazine/m556saw
|
||||
/datum/uplink_item/item/ammo/a545
|
||||
name = "Machinegun Magazine (5.45mm)"
|
||||
path = /obj/item/ammo_magazine/m545saw
|
||||
|
||||
/datum/uplink_item/item/ammo/a556/ap
|
||||
name = "Machinegun Magazine (5.56mm AP)"
|
||||
path = /obj/item/ammo_magazine/m556saw/ap
|
||||
/datum/uplink_item/item/ammo/a545/ap
|
||||
name = "Machinegun Magazine (5.45mm AP)"
|
||||
path = /obj/item/ammo_magazine/m545saw/ap
|
||||
|
||||
/datum/uplink_item/item/ammo/g12
|
||||
name = "12g Shotgun Ammo Box (Slug)"
|
||||
|
||||
@@ -39,6 +39,26 @@
|
||||
item_cost = 10
|
||||
path = /obj/item/weapon/storage/box/freezer
|
||||
|
||||
/datum/uplink_item/item/medical/monkeycubes
|
||||
name = "Box, Monkey Cubes"
|
||||
item_cost = 10
|
||||
path = /obj/item/weapon/storage/box/monkeycubes
|
||||
|
||||
/datum/uplink_item/item/medical/farwacubes
|
||||
name = "Box, Farwa Cubes"
|
||||
item_cost = 10
|
||||
path = /obj/item/weapon/storage/box/monkeycubes
|
||||
|
||||
/datum/uplink_item/item/medical/neaeracubes
|
||||
name = "Box, Neaera Cubes"
|
||||
item_cost = 10
|
||||
path = /obj/item/weapon/storage/box/monkeycubes/neaeracubes
|
||||
|
||||
/datum/uplink_item/item/medical/stokcubes
|
||||
name = "Box, Stok Cubes"
|
||||
item_cost = 10
|
||||
path = /obj/item/weapon/storage/box/monkeycubes/stokcubes
|
||||
|
||||
/datum/uplink_item/item/medical/surgery
|
||||
name = "Surgery kit"
|
||||
item_cost = 45
|
||||
|
||||
@@ -66,6 +66,21 @@
|
||||
When in hacking mode this device will grant full access to any standard airlock within 20 to 40 seconds. \
|
||||
This device will also be able to immediately access the last 6 to 8 hacked airlocks."
|
||||
|
||||
/datum/uplink_item/item/tools/ai_detector
|
||||
name = "Anti-Surveillance Tool"
|
||||
item_cost = 20
|
||||
path = /obj/item/device/multitool/ai_detector
|
||||
desc = "This functions like a normal multitool, but includes an integrated camera network sensor that will warn the holder if they are being \
|
||||
watched, by changing color and beeping. It is able to detect both AI visual surveillance and security camera utilization from terminals, and \
|
||||
will give different warnings by beeping and changing colors based on what it detects. Only the holder can hear the warnings."
|
||||
|
||||
/datum/uplink_item/item/tools/radio_jammer
|
||||
name = "Subspace Jammer"
|
||||
item_cost = 25
|
||||
path = /obj/item/device/radio_jammer
|
||||
desc = "A device which is capable of disrupting subspace communications, preventing the use of headsets, PDAs, and communicators within \
|
||||
a radius of seven meters. It runs off weapon cells, which can be replaced as needed. One cell will last for approximately a minute."
|
||||
|
||||
/datum/uplink_item/item/tools/emag
|
||||
name = "Cryptographic Sequencer"
|
||||
item_cost = 30
|
||||
|
||||
@@ -5,7 +5,7 @@ var/datum/uplink/uplink = new()
|
||||
var/list/datum/uplink_item/items
|
||||
var/list/datum/uplink_category/categories
|
||||
|
||||
/datum/uplink/New()
|
||||
/datum/uplink/New(var/type)
|
||||
items_assoc = list()
|
||||
items = init_subtypes(/datum/uplink_item)
|
||||
categories = init_subtypes(/datum/uplink_category)
|
||||
@@ -38,7 +38,8 @@ var/datum/uplink/uplink = new()
|
||||
|
||||
/datum/uplink_item/New()
|
||||
..()
|
||||
antag_roles = list()
|
||||
if(!antag_roles)
|
||||
antag_roles = list()
|
||||
|
||||
|
||||
|
||||
@@ -85,8 +86,9 @@ var/datum/uplink/uplink = new()
|
||||
|
||||
for(var/antag_role in antag_roles)
|
||||
var/datum/antagonist/antag = all_antag_types[antag_role]
|
||||
if(antag.is_antagonist(U.uplink_owner))
|
||||
return 1
|
||||
if(!isnull(antag))
|
||||
if(antag.is_antagonist(U.uplink_owner))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/uplink_item/proc/cost(var/telecrystals, obj/item/device/uplink/U)
|
||||
|
||||
@@ -15,10 +15,45 @@
|
||||
path = /obj/item/weapon/material/hatchet/tacknife/combatknife
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/energy_sword
|
||||
name = "Energy Sword"
|
||||
name = "Energy Sword, Random"
|
||||
item_cost = 40
|
||||
path = /obj/item/weapon/melee/energy/sword
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/energy_sword_blue
|
||||
name = "Energy Sword, Blue"
|
||||
item_cost = 40
|
||||
path = /obj/item/weapon/melee/energy/sword/blue
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/energy_sword_green
|
||||
name = "Energy Sword, Green"
|
||||
item_cost = 40
|
||||
path = /obj/item/weapon/melee/energy/sword/green
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/energy_sword_red
|
||||
name = "Energy Sword, Red"
|
||||
item_cost = 40
|
||||
path = /obj/item/weapon/melee/energy/sword/red
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/energy_sword_purple
|
||||
name = "Energy Sword, Purple"
|
||||
item_cost = 40
|
||||
path = /obj/item/weapon/melee/energy/sword/purple
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/energy_sword_pirate
|
||||
name = "Energy Cutlass"
|
||||
item_cost = 40
|
||||
path = /obj/item/weapon/melee/energy/sword/pirate
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/claymore
|
||||
name = "Claymore"
|
||||
item_cost = 40
|
||||
path = /obj/item/weapon/material/sword
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/katana
|
||||
name = "Katana"
|
||||
item_cost = 40
|
||||
path = /obj/item/weapon/material/sword/katana
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/dartgun
|
||||
name = "Dart Gun"
|
||||
item_cost = 30
|
||||
@@ -44,15 +79,38 @@
|
||||
item_cost = 70
|
||||
path = /obj/item/weapon/gun/projectile/revolver
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/mateba
|
||||
name = "Mateba"
|
||||
item_cost = 70
|
||||
path = /obj/item/weapon/gun/projectile/revolver/mateba
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/judge
|
||||
name = "Judge"
|
||||
item_cost = 70
|
||||
path = /obj/item/weapon/gun/projectile/revolver/judge
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/lemat
|
||||
name = "LeMat"
|
||||
item_cost = 60
|
||||
path = /obj/item/weapon/gun/projectile/revolver/lemat
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/Derringer
|
||||
name = ".357 Derringer Pistol"
|
||||
item_cost = 40
|
||||
path = /obj/item/weapon/gun/projectile/derringer
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/heavysniper
|
||||
/datum/uplink_item/item/visible_weapons/heavysnipermerc
|
||||
name = "Anti-Materiel Rifle (14.5mm)"
|
||||
item_cost = DEFAULT_TELECRYSTAL_AMOUNT
|
||||
path = /obj/item/weapon/gun/projectile/heavysniper
|
||||
antag_roles = list("mercenary")
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/heavysnipertraitor
|
||||
name = "Anti-Materiel Rifle (14.5mm)"
|
||||
desc = "A convenient collapsible rifle for covert assassination. Comes with 4 shots and its own secure carrying case."
|
||||
item_cost = DEFAULT_TELECRYSTAL_AMOUNT
|
||||
path = /obj/item/weapon/storage/secure/briefcase/rifle
|
||||
antag_roles = list("traitor", "autotraitor", "infiltrator")
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/tommygun
|
||||
name = "Tommygun (.45)" // We're keeping this because it's CLASSY. -Spades
|
||||
@@ -66,20 +124,20 @@
|
||||
path = /obj/item/weapon/gun/projectile/automatic/c20r
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/assaultrifle
|
||||
name = "Assault Rifle (7.62mm)"
|
||||
name = "Assault Rifle (5.45mm)"
|
||||
item_cost = 75
|
||||
path = /obj/item/weapon/gun/projectile/automatic/sts35
|
||||
|
||||
/*/datum/uplink_item/item/visible_weapons/bullpuprifle
|
||||
name = "Assault Rifle (5.56mm)"
|
||||
item_cost = 7
|
||||
path = /obj/item/weapon/gun/projectile/automatic/carbine
|
||||
*/
|
||||
/datum/uplink_item/item/visible_weapons/combatshotgun
|
||||
name = "Combat Shotgun"
|
||||
item_cost = 75
|
||||
path = /obj/item/weapon/gun/projectile/shotgun/pump/combat
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/leveraction
|
||||
name = "Lever Action Rifle"
|
||||
item_cost = 50
|
||||
path = /obj/item/weapon/gun/projectile/shotgun/pump/rifle/lever
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/egun
|
||||
name = "Energy Gun"
|
||||
item_cost = 60
|
||||
|
||||
@@ -120,6 +120,7 @@ var/list/wireColours = list("red", "blue", "green", "darkred", "orange", "brown"
|
||||
if(istype(I, /obj/item/weapon/wirecutters))
|
||||
var/colour = href_list["cut"]
|
||||
CutWireColour(colour)
|
||||
playsound(holder, I.usesound, 20, 1)
|
||||
else
|
||||
L << "<span class='error'>You need wirecutters!</span>"
|
||||
|
||||
@@ -127,6 +128,7 @@ var/list/wireColours = list("red", "blue", "green", "darkred", "orange", "brown"
|
||||
if(istype(I, /obj/item/device/multitool))
|
||||
var/colour = href_list["pulse"]
|
||||
PulseColour(colour)
|
||||
playsound(holder, 'sound/weapons/empty.ogg', 20, 1)
|
||||
else
|
||||
L << "<span class='error'>You need a multitool!</span>"
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
|
||||
tile_overlay = "phoron"
|
||||
overlay_limit = 0.7
|
||||
flags = XGM_GAS_FUEL | XGM_GAS_CONTAMINANT
|
||||
flags = XGM_GAS_FUEL | XGM_GAS_CONTAMINANT | XGM_GAS_FUSION_FUEL //R-UST port, adding XGM_GAS_FUSION_FUEL flag.
|
||||
|
||||
/decl/xgm_gas/volatile_fuel
|
||||
id = "volatile_fuel"
|
||||
|
||||
@@ -111,9 +111,6 @@
|
||||
else if(config.use_age_restriction_for_antags && player.current.client.player_age < minimum_player_age)
|
||||
candidates -= player
|
||||
log_debug("[key_name(player)] is not eligible to become a [role_text]: Is only [player.current.client.player_age] day\s old, has to be [minimum_player_age] day\s!")
|
||||
else if(istype(player.current, /mob/living/voice))
|
||||
candidates -= player
|
||||
log_debug("[key_name(player)] is not eligible to become a [role_text]: They are only a communicator voice. They have been removed from the draft.")
|
||||
else if(player.special_role)
|
||||
candidates -= player
|
||||
log_debug("[key_name(player)] is not eligible to become a [role_text]: They already have a special role ([player.special_role])! They have been removed from the draft.")
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
/datum/antagonist/proc/can_become_antag(var/datum/mind/player, var/ignore_role)
|
||||
if(player.current && jobban_isbanned(player.current, bantype))
|
||||
return 0
|
||||
if(player.current)
|
||||
if(jobban_isbanned(player.current, bantype))
|
||||
return FALSE
|
||||
if(!isnewplayer(player.current) && !isobserver(player.current))
|
||||
if(!player.current.can_be_antagged) // Stop autotraitoring pAIs!
|
||||
return FALSE
|
||||
if(!ignore_role)
|
||||
if(player.assigned_role in restricted_jobs)
|
||||
return 0
|
||||
return FALSE
|
||||
if(config.protect_roles_from_antagonist && (player.assigned_role in protected_jobs))
|
||||
return 0
|
||||
return 1
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/datum/antagonist/proc/antags_are_dead()
|
||||
for(var/datum/mind/antag in current_antagonists)
|
||||
|
||||
@@ -17,7 +17,7 @@ var/datum/antagonist/mercenary/mercs
|
||||
hard_cap = 4
|
||||
hard_cap_round = 8
|
||||
initial_spawn_req = 3
|
||||
initial_spawn_target = 4
|
||||
initial_spawn_target = 3
|
||||
|
||||
/datum/antagonist/mercenary/New()
|
||||
..()
|
||||
|
||||
@@ -12,10 +12,10 @@ var/datum/antagonist/raider/raiders
|
||||
flags = ANTAG_OVERRIDE_JOB | ANTAG_CLEAR_EQUIPMENT | ANTAG_CHOOSE_NAME | ANTAG_VOTABLE | ANTAG_SET_APPEARANCE | ANTAG_HAS_LEADER
|
||||
antaghud_indicator = "hudmutineer"
|
||||
|
||||
hard_cap = 6
|
||||
hard_cap_round = 10
|
||||
hard_cap = 4
|
||||
hard_cap_round = 8
|
||||
initial_spawn_req = 3
|
||||
initial_spawn_target = 4
|
||||
initial_spawn_target = 3
|
||||
|
||||
id_type = /obj/item/weapon/card/id/syndicate
|
||||
|
||||
|
||||
@@ -1431,8 +1431,8 @@ area/space/atmosalert()
|
||||
name = "\improper Visitor Lodging"
|
||||
icon_state = "visitor_lodging"
|
||||
|
||||
/area/crew_quarters/visitor_dinning
|
||||
name = "\improper Visitor Dinning"
|
||||
/area/crew_quarters/visitor_dining
|
||||
name = "\improper Visitor Dining"
|
||||
icon_state = "visitor_dinning"
|
||||
|
||||
/area/crew_quarters/visitor_laundry
|
||||
|
||||
@@ -298,10 +298,9 @@ its easier to just keep the beam vertical.
|
||||
|
||||
//Deal with gloves the pass finger/palm prints.
|
||||
if(!ignoregloves)
|
||||
if(H.gloves != src)
|
||||
if(prob(75) && istype(H.gloves, /obj/item/clothing/gloves/sterile))
|
||||
return 0
|
||||
else if(H.gloves && !istype(H.gloves, /obj/item/clothing/gloves/sterile))
|
||||
if(H.gloves && H.gloves != src)
|
||||
var/obj/item/clothing/gloves/G = H.gloves
|
||||
if(!prob(G.fingerprint_chance))
|
||||
return 0
|
||||
|
||||
//More adminstuffz
|
||||
|
||||
@@ -92,11 +92,10 @@
|
||||
for(var/mob/M in src)//Failsafe so you can get mobs out
|
||||
M.loc = get_turf(src)
|
||||
|
||||
/obj/machinery/dna_scannernew/Bumped(user as mob|obj)
|
||||
if (user == usr) // Only if we are actually being walked into by real client
|
||||
move_inside()
|
||||
/obj/machinery/dna_scannernew/MouseDrop_T(var/mob/target, var/mob/user) //Allows borgs to clone people without external assistance
|
||||
if(user.stat || user.lying || !Adjacent(user) || !target.Adjacent(user)|| !ishuman(target))
|
||||
return
|
||||
return ..()
|
||||
put_in(target)
|
||||
|
||||
/obj/machinery/dna_scannernew/verb/move_inside()
|
||||
set src in oview(1)
|
||||
|
||||
@@ -112,9 +112,6 @@
|
||||
"<span class='warning'>We harden our flesh, creating a suit of armor!</span>",
|
||||
"<span class='italics'>You hear organic matter ripping and tearing!</span>")
|
||||
|
||||
/obj/item/clothing/suit/space/changeling/armored/dropped()
|
||||
qdel(src)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/changeling/armored
|
||||
name = "chitinous mass"
|
||||
desc = "A tough, hard covering of black chitin with transparent chitin in front."
|
||||
@@ -123,19 +120,12 @@
|
||||
siemens_coefficient = 0.3
|
||||
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
|
||||
/obj/item/clothing/head/helmet/space/changeling/armored/dropped()
|
||||
qdel(src)
|
||||
|
||||
/obj/item/clothing/shoes/magboots/changeling/armored
|
||||
desc = "A tough, hard mass of chitin, with long talons for digging into terrain."
|
||||
name = "chitinous talons"
|
||||
icon_state = "lingarmor"
|
||||
action_button_name = "Toggle Talons"
|
||||
|
||||
/obj/item/clothing/shoes/magboots/changeling/armored/dropped()
|
||||
..()
|
||||
qdel(src)
|
||||
|
||||
/obj/item/clothing/gloves/combat/changeling //Combined insulated/fireproof gloves
|
||||
name = "chitinous gauntlets"
|
||||
desc = "Very resilient gauntlets made out of black chitin. It looks very durable, and can probably resist electrical shock in addition to the elements."
|
||||
|
||||
26
code/game/gamemodes/changeling/powers/darkvision.dm
Normal file
26
code/game/gamemodes/changeling/powers/darkvision.dm
Normal file
@@ -0,0 +1,26 @@
|
||||
/datum/power/changeling/darksight
|
||||
name = "Dark Sight"
|
||||
desc = "We change the composition of our eyes, banishing the shadows from our vision."
|
||||
helptext = "We will be able to see in the dark."
|
||||
ability_icon_state = "ling_augmented_eyesight"
|
||||
genomecost = 0
|
||||
verbpath = /mob/proc/changeling_darksight
|
||||
|
||||
/mob/proc/changeling_darksight()
|
||||
set category = "Changeling"
|
||||
set name = "Toggle Darkvision"
|
||||
set desc = "We are able see in the dark."
|
||||
|
||||
var/datum/changeling/changeling = changeling_power(0,0,100,UNCONSCIOUS)
|
||||
if(!changeling)
|
||||
return 0
|
||||
|
||||
if(istype(src,/mob/living/carbon))
|
||||
var/mob/living/carbon/C = src
|
||||
C.seedarkness = !C.seedarkness
|
||||
if(C.seedarkness)
|
||||
to_chat(C, "<span class='notice'>We allow the shadows to return.</span>")
|
||||
else
|
||||
to_chat(C, "<span class='notice'>We no longer need light to see.</span>")
|
||||
|
||||
return 0
|
||||
@@ -33,6 +33,9 @@
|
||||
if(C.suiciding)
|
||||
C.suiciding = 0
|
||||
|
||||
if(C.does_not_breathe)
|
||||
C.does_not_breathe = 0 //This means they don't autoheal the oxy damage from the next step
|
||||
|
||||
if(C.stat != DEAD)
|
||||
C.adjustOxyLoss(C.maxHealth * 2)
|
||||
|
||||
|
||||
@@ -152,12 +152,15 @@ var/list/sacrificed = list()
|
||||
target << "<span class='cult'>Your mind turns to ash as the burning flames engulf your very soul and images of an unspeakable horror begin to bombard the last remnants of mental resistance.</span>"
|
||||
//broken mind - 5000 may seem like a lot I wanted the effect to really stand out for maxiumum losing-your-mind-spooky
|
||||
//hallucination is reduced when the step off as well, provided they haven't hit the last stage...
|
||||
target.hallucination += 5000
|
||||
|
||||
//5000 is waaaay too much, in practice.
|
||||
target.hallucination = min(target.hallucination + 100, 500)
|
||||
target.apply_effect(10, STUTTER)
|
||||
target.adjustBrainLoss(1)
|
||||
if(100 to INFINITY)
|
||||
target << "<span class='cult'>Your entire broken soul and being is engulfed in corruption and flames as your mind shatters away into nothing.</span>"
|
||||
target.hallucination += 5000
|
||||
//5000 is waaaay too much, in practice.
|
||||
target.hallucination = min(target.hallucination + 100, 500)
|
||||
target.apply_effect(15, STUTTER)
|
||||
target.adjustBrainLoss(1)
|
||||
|
||||
@@ -626,10 +629,8 @@ var/list/sacrificed = list()
|
||||
|
||||
if(istype(src,/obj/effect/rune))
|
||||
usr.say("O bidai nabora se[pick("'","`")]sma!")
|
||||
usr.say("[input]")
|
||||
else
|
||||
usr.whisper("O bidai nabora se[pick("'","`")]sma!")
|
||||
usr.whisper("[input]")
|
||||
|
||||
input = sanitize(input)
|
||||
log_and_message_admins("used a communicate rune to say '[input]'")
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
intercept.name = "paper"
|
||||
intercept.info = intercepttext
|
||||
|
||||
comm.messagetitle.Add("Cent. Com. CONFIDENTIAL REPORT")
|
||||
comm.messagetitle.Add("CentCom CONFIDENTIAL REPORT")
|
||||
comm.messagetext.Add(intercepttext)
|
||||
|
||||
world << sound('sound/AI/commandreport.ogg')
|
||||
@@ -74,7 +74,7 @@
|
||||
intercept.name = "paper"
|
||||
intercept.info = intercepttext
|
||||
|
||||
comm.messagetitle.Add("Cent. Com. CONFIDENTIAL REPORT")
|
||||
comm.messagetitle.Add("CentCom CONFIDENTIAL REPORT")
|
||||
comm.messagetext.Add(intercepttext)
|
||||
world << sound('sound/AI/commandreport.ogg')
|
||||
|
||||
|
||||
@@ -405,6 +405,8 @@ var/global/list/additional_antag_types = list()
|
||||
candidates += player.mind
|
||||
players -= player
|
||||
|
||||
// Below is commented out as an attempt to solve an issue of too little people wanting to join the round due to wanting to have cake and eat it too.
|
||||
/*
|
||||
// If we don't have enough antags, draft people who voted for the round.
|
||||
if(candidates.len < required_enemies)
|
||||
for(var/mob/new_player/player in players)
|
||||
@@ -413,6 +415,7 @@ var/global/list/additional_antag_types = list()
|
||||
candidates += player.mind
|
||||
players -= player
|
||||
break
|
||||
*/
|
||||
|
||||
return candidates // Returns: The number of people who had the antagonist role set to yes, regardless of recomended_enemies, if that number is greater than required_enemies
|
||||
// required_enemies if the number of people with that role set to yes is less than recomended_enemies,
|
||||
|
||||
@@ -7,9 +7,9 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind'
|
||||
/datum/game_mode/heist
|
||||
name = "Heist"
|
||||
config_tag = "heist"
|
||||
required_players = 15
|
||||
required_players_secret = 15
|
||||
required_enemies = 4
|
||||
required_players = 9
|
||||
required_players_secret = 9
|
||||
required_enemies = 3
|
||||
round_description = "An unidentified bluespace signature is approaching the station!"
|
||||
extended_round_description = "The Company's majority control of phoron in the system has marked the \
|
||||
station to be a highly valuable target for many competing organizations and individuals. Being a \
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/datum/game_mode/infiltrator
|
||||
name = "Infiltrator"
|
||||
name = "Team Traitor"
|
||||
round_description = "There are a group of shadowy infiltrators onboard! Be careful!"
|
||||
extended_round_description = "A team of secretative people have played the long con, and managed to obtain entry to \
|
||||
the facility. What their goals are, who their employers are, and why the individuals would work for them is a mystery, \
|
||||
|
||||
@@ -1045,7 +1045,7 @@ datum
|
||||
return 20
|
||||
AI
|
||||
steal_target = /obj/structure/AIcore
|
||||
explanation_text = "Steal a finished AI, either by intellicard or stealing the whole construct."
|
||||
explanation_text = "Steal a finished AI, either by intelliCore or stealing the whole construct."
|
||||
weight = 50
|
||||
|
||||
get_points(var/job)
|
||||
|
||||
@@ -12,9 +12,9 @@ var/list/nuke_disks = list()
|
||||
colony of sizable population and considerable wealth causes it to often be the target of various \
|
||||
attempts of robbery, fraud and other malicious actions."
|
||||
config_tag = "mercenary"
|
||||
required_players = 15
|
||||
required_players_secret = 15
|
||||
required_enemies = 4
|
||||
required_players = 9
|
||||
required_players_secret = 9
|
||||
required_enemies = 3
|
||||
end_on_antag_death = 0
|
||||
var/nuke_off_station = 0 //Used for tracking if the syndies actually haul the nuke to the station
|
||||
var/syndies_didnt_escape = 0 //Used for tracking if the syndies got the shuttle off of the z-level
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
|
||||
/obj/item/weapon/antag_spawner/technomancer_apprentice/Destroy()
|
||||
qdel(sparks)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/antag_spawner/technomancer_apprentice/attack_self(mob/user)
|
||||
user << "<span class='notice'>Teleporter attempting to lock on to your apprentice.</span>"
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
|
||||
/mob/living/simple_animal/technomancer_golem/Destroy()
|
||||
qdel(core)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/technomancer_golem/update_icon()
|
||||
overlays.Cut()
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
/obj/item/weapon/technomancer_core/Destroy()
|
||||
dismiss_all_summons()
|
||||
processing_objects.Remove(src)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
// Add the spell buttons to the HUD.
|
||||
/obj/item/weapon/technomancer_core/equipped(mob/user)
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
/obj/item/clothing/gloves/regen/Destroy()
|
||||
wearer = null
|
||||
processing_objects -= src
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/gloves/regen/process()
|
||||
if(!wearer || wearer.isSynthetic() || wearer.stat == DEAD || wearer.nutrition <= 10)
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
/obj/item/clothing/suit/armor/shield/Destroy()
|
||||
qdel(spark_system)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/suit/armor/shield/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack")
|
||||
//Since this is a pierce of armor that is passive, we do not need to check if the user is incapacitated.
|
||||
|
||||
@@ -151,7 +151,7 @@
|
||||
/obj/item/weapon/spell/Destroy()
|
||||
owner = null
|
||||
core = null
|
||||
..()
|
||||
return ..()
|
||||
|
||||
// Proc: update_icon()
|
||||
// Parameters: 0
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
spell_power_desc = "Blink distance is scaled up with more spell power."
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/blink
|
||||
ability_icon_state = "tech_blink"
|
||||
category = UTILITY_SPELLS
|
||||
|
||||
/obj/item/weapon/spell/blink
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
around the entity is merely a hologram used to allow the user to know if the creature is safe or not."
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/control
|
||||
ability_icon_state = "tech_control"
|
||||
category = UTILITY_SPELLS
|
||||
|
||||
/mob/living/carbon/human/proc/technomancer_control()
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
|
||||
/obj/item/weapon/weldingtool/spell
|
||||
name = "flame"
|
||||
eye_safety_modifier = 3
|
||||
|
||||
/obj/item/weapon/weldingtool/spell/process()
|
||||
return
|
||||
|
||||
@@ -181,7 +181,7 @@
|
||||
|
||||
if(I_HURT)
|
||||
adjustBruteLoss(harm_intent_damage)
|
||||
M.visible_message("\red [M] [response_harm] \the [src]")
|
||||
M.visible_message("<font color='red'>[M] [response_harm] \the [src]</font>")
|
||||
M.do_attack_animation(src)
|
||||
|
||||
return
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
/datum/technomancer/spell/mend_synthetic
|
||||
name = "Mend Synthetic"
|
||||
desc = "Repairs minor damages to robotic entities. \
|
||||
desc = "Repairs minor damage to prosthetics. \
|
||||
Instability is split between the target and technomancer, if seperate. The function will end prematurely \
|
||||
if the target is completely healthy, preventing further instability."
|
||||
spell_power_desc = "Healing amount increased."
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/modifier/mend_synthetic
|
||||
ability_icon_state = "tech_mendwounds"
|
||||
ability_icon_state = "tech_mendsynth"
|
||||
category = SUPPORT_SPELLS
|
||||
|
||||
/obj/item/weapon/spell/modifier/mend_synthetic
|
||||
@@ -35,8 +35,11 @@
|
||||
if(!holder.getBruteLoss() && !holder.getFireLoss()) // No point existing if the spell can't heal.
|
||||
expire()
|
||||
return
|
||||
holder.adjustBruteLoss(-4 * spell_power) // Should heal roughly 20 burn/brute over 10 seconds, as tick() is run every 2 seconds.
|
||||
holder.adjustFireLoss(-4 * spell_power) // Ditto.
|
||||
if(ishuman(holder))
|
||||
var/mob/living/carbon/human/H = holder
|
||||
for(var/obj/item/organ/external/E in H.organs)
|
||||
var/obj/item/organ/external/O = E
|
||||
O.heal_damage(4 * spell_power, 4 * spell_power, 0, 1)
|
||||
holder.adjust_instability(1)
|
||||
if(origin)
|
||||
var/mob/living/L = origin.resolve()
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
If casted on the envirnment, air (oxygen and nitrogen) is moved from a distant location to your target."
|
||||
cost = 25
|
||||
obj_path = /obj/item/weapon/spell/oxygenate
|
||||
ability_icon_state = "oxygenate"
|
||||
ability_icon_state = "tech_oxygenate"
|
||||
category = SUPPORT_SPELLS
|
||||
|
||||
/obj/item/weapon/spell/oxygenate
|
||||
|
||||
@@ -4,12 +4,14 @@
|
||||
rift you create will afflict you with instability."
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/phase_shift
|
||||
ability_icon_state = "tech_phaseshift"
|
||||
category = DEFENSIVE_SPELLS
|
||||
|
||||
/obj/item/weapon/spell/phase_shift
|
||||
name = "phase shift"
|
||||
desc = "Allows you to dodge your untimely fate by shifting your location somewhere else, so long as you can survive inside the \
|
||||
rift."
|
||||
icon_state = "blink"
|
||||
cast_methods = CAST_USE
|
||||
aspect = ASPECT_TELE
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
spell_power_desc = "Increases damage dealt, up to a cap of 80 damage per shot."
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/projectile/overload
|
||||
ability_icon_state = "tech_overload"
|
||||
category = OFFENSIVE_SPELLS
|
||||
|
||||
/obj/item/weapon/spell/projectile/overload
|
||||
@@ -39,6 +40,7 @@
|
||||
|
||||
/obj/item/weapon/spell/projectile/overload/on_ranged_cast(atom/hit_atom, mob/living/user)
|
||||
energy_cost_per_shot = round(core.max_energy * 0.10)
|
||||
..()
|
||||
/* var/energy_before_firing = core.energy
|
||||
if(set_up(hit_atom, user))
|
||||
var/obj/item/projectile/overload/P = new spell_projectile(get_turf(user))
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
m = min(m, cable.amount)
|
||||
m = min(m, 30)
|
||||
if(m)
|
||||
playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
|
||||
playsound(src.loc, O.usesound, 50, 1)
|
||||
use_cable(m)
|
||||
var/obj/item/stack/cable_coil/CC = new (get_turf(src))
|
||||
CC.amount = m
|
||||
|
||||
@@ -549,6 +549,7 @@
|
||||
scrubbers[scrubbers.len]["filters"] += list(list("name" = "Carbon Dioxide", "command" = "co2_scrub","val" = info["filter_co2"]))
|
||||
scrubbers[scrubbers.len]["filters"] += list(list("name" = "Toxin" , "command" = "tox_scrub","val" = info["filter_phoron"]))
|
||||
scrubbers[scrubbers.len]["filters"] += list(list("name" = "Nitrous Oxide", "command" = "n2o_scrub","val" = info["filter_n2o"]))
|
||||
scrubbers[scrubbers.len]["filters"] += list(list("name" = "Fuel", "command" = "fuel_scrub","val" = info["filter_fuel"]))
|
||||
data["scrubbers"] = scrubbers
|
||||
if(AALARM_SCREEN_MODE)
|
||||
var/modes[0]
|
||||
@@ -655,6 +656,7 @@
|
||||
"co2_scrub",
|
||||
"tox_scrub",
|
||||
"n2o_scrub",
|
||||
"fuel_scrub",
|
||||
"panic_siphon",
|
||||
"scrubbing",
|
||||
"direction")
|
||||
|
||||
@@ -428,3 +428,23 @@ update_flag
|
||||
|
||||
src.update_icon()
|
||||
return 1
|
||||
|
||||
//R-UST port
|
||||
// Special types used for engine setup admin verb, they contain double amount of that of normal canister.
|
||||
/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup/New()
|
||||
..()
|
||||
src.air_contents.adjust_gas("nitrogen", MolesForPressure())
|
||||
src.update_icon()
|
||||
return 1
|
||||
|
||||
/obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup/New()
|
||||
..()
|
||||
src.air_contents.adjust_gas("carbon_dioxide", MolesForPressure())
|
||||
src.update_icon()
|
||||
return 1
|
||||
|
||||
/obj/machinery/portable_atmospherics/canister/phoron/engine_setup/New()
|
||||
..()
|
||||
src.air_contents.adjust_gas("phoron", MolesForPressure())
|
||||
src.update_icon()
|
||||
return 1
|
||||
@@ -68,7 +68,7 @@
|
||||
/obj/machinery/meter/examine(mob/user)
|
||||
var/t = "A gas flow meter. "
|
||||
|
||||
if(get_dist(user, src) > 5 && !(istype(user, /mob/living/silicon/ai) || istype(user, /mob/observer/dead)))
|
||||
if(get_dist(user, src) > 3 && !(istype(user, /mob/living/silicon/ai) || istype(user, /mob/observer/dead)))
|
||||
t += "<span class='warning'>You are too far away to read it.</span>"
|
||||
|
||||
else if(stat & (NOPOWER|BROKEN))
|
||||
@@ -96,9 +96,9 @@
|
||||
/obj/machinery/meter/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
|
||||
if (!istype(W, /obj/item/weapon/wrench))
|
||||
return ..()
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
user << "<span class='notice'>You begin to unfasten \the [src]...</span>"
|
||||
if (do_after(user, 40))
|
||||
if (do_after(user, 40 * W.toolspeed))
|
||||
user.visible_message( \
|
||||
"<span class='notice'>\The [user] unfastens \the [src].</span>", \
|
||||
"<span class='notice'>You have unfastened \the [src].</span>", \
|
||||
|
||||
@@ -114,6 +114,7 @@
|
||||
disconnect()
|
||||
user << "<span class='notice'>You disconnect \the [src] from the port.</span>"
|
||||
update_icon()
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
return
|
||||
else
|
||||
var/obj/machinery/atmospherics/portables_connector/possible_port = locate(/obj/machinery/atmospherics/portables_connector/) in loc
|
||||
@@ -121,6 +122,7 @@
|
||||
if(connect(possible_port))
|
||||
user << "<span class='notice'>You connect \the [src] to the port.</span>"
|
||||
update_icon()
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
return
|
||||
else
|
||||
user << "<span class='notice'>\The [src] failed to connect to the port.</span>"
|
||||
@@ -173,6 +175,7 @@
|
||||
return
|
||||
|
||||
user.visible_message("<span class='notice'>[user] opens the panel on [src] and removes [cell].</span>", "<span class='notice'>You open the panel on [src] and remove [cell].</span>")
|
||||
playsound(src, I.usesound, 50, 1)
|
||||
cell.add_fingerprint(user)
|
||||
cell.loc = src.loc
|
||||
cell = null
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
var/minrate = 0
|
||||
var/maxrate = 10 * ONE_ATMOSPHERE
|
||||
|
||||
var/list/scrubbing_gas = list("phoron", "carbon_dioxide", "sleeping_agent")
|
||||
var/list/scrubbing_gas = list("phoron", "carbon_dioxide", "sleeping_agent", "volatile_fuel")
|
||||
|
||||
/obj/machinery/portable_atmospherics/powered/scrubber/New()
|
||||
..()
|
||||
@@ -218,7 +218,7 @@
|
||||
return
|
||||
|
||||
anchored = !anchored
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
playsound(src.loc, I.usesound, 50, 1)
|
||||
user << "<span class='notice'>You [anchored ? "wrench" : "unwrench"] \the [src].</span>"
|
||||
|
||||
return
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
var/c_tag_order = 999
|
||||
var/status = 1
|
||||
anchored = 1.0
|
||||
var/invuln = null
|
||||
var/invuln = 0
|
||||
var/bugged = 0
|
||||
var/obj/item/weapon/camera_assembly/assembly = null
|
||||
|
||||
@@ -37,6 +37,8 @@
|
||||
|
||||
var/client_huds = list()
|
||||
|
||||
var/list/camera_computers_using_this = list()
|
||||
|
||||
/obj/machinery/camera/New()
|
||||
wires = new(src)
|
||||
assembly = new(src)
|
||||
@@ -143,7 +145,7 @@
|
||||
panel_open = !panel_open
|
||||
user.visible_message("<span class='warning'>[user] screws the camera's panel [panel_open ? "open" : "closed"]!</span>",
|
||||
"<span class='notice'>You screw the camera's panel [panel_open ? "open" : "closed"].</span>")
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
playsound(src.loc, W.usesound, 50, 1)
|
||||
|
||||
else if((iswirecutter(W) || ismultitool(W)) && panel_open)
|
||||
interact(user)
|
||||
@@ -377,10 +379,10 @@
|
||||
|
||||
// Do after stuff here
|
||||
user << "<span class='notice'>You start to weld the [src]..</span>"
|
||||
playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
|
||||
playsound(src.loc, WT.usesound, 50, 1)
|
||||
WT.eyecheck(user)
|
||||
busy = 1
|
||||
if(do_after(user, 100))
|
||||
if(do_after(user, 100 * WT.toolspeed))
|
||||
busy = 0
|
||||
if(!WT.isOn())
|
||||
return 0
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
if(0)
|
||||
// State 0
|
||||
if(iswrench(W) && isturf(src.loc))
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
user << "You wrench the assembly into place."
|
||||
anchored = 1
|
||||
state = 1
|
||||
@@ -48,7 +48,7 @@
|
||||
return
|
||||
|
||||
else if(iswrench(W))
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
user << "You unattach the assembly from its place."
|
||||
anchored = 0
|
||||
update_icon()
|
||||
@@ -78,7 +78,7 @@
|
||||
if(3)
|
||||
// State 3
|
||||
if(isscrewdriver(W))
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
playsound(src.loc, W.usesound, 50, 1)
|
||||
|
||||
var/input = sanitize(input(usr, "Which networks would you like to connect this camera to? Separate networks with a comma. No Spaces!\nFor example: "+using_map.station_short+",Security,Secret ", "Set Network", camera_network ? camera_network : NETWORK_DEFAULT))
|
||||
if(!input)
|
||||
@@ -118,7 +118,7 @@
|
||||
else if(iswirecutter(W))
|
||||
|
||||
new/obj/item/stack/cable_coil(get_turf(src), 2)
|
||||
playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
|
||||
playsound(src.loc, W.usesound, 50, 1)
|
||||
user << "You cut the wires from the circuits."
|
||||
state = 2
|
||||
return
|
||||
@@ -136,7 +136,7 @@
|
||||
var/obj/U = locate(/obj) in upgrades
|
||||
if(U)
|
||||
user << "You unattach an upgrade from the assembly."
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
U.loc = get_turf(src)
|
||||
upgrades -= U
|
||||
return
|
||||
@@ -161,10 +161,10 @@
|
||||
return 0
|
||||
|
||||
user << "<span class='notice'>You start to weld the [src]..</span>"
|
||||
playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
|
||||
playsound(src.loc, WT.usesound, 50, 1)
|
||||
WT.eyecheck(user)
|
||||
busy = 1
|
||||
if(do_after(user, 20))
|
||||
if(do_after(user, 20 * WT.toolspeed))
|
||||
busy = 0
|
||||
if(!WT.isOn())
|
||||
return 0
|
||||
|
||||
@@ -98,6 +98,7 @@ var/global/list/engineering_networks = list(
|
||||
|
||||
/obj/machinery/camera/network/thunder
|
||||
network = list(NETWORK_THUNDER)
|
||||
invuln = 1
|
||||
|
||||
// EMP
|
||||
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
|
||||
anchored = !anchored
|
||||
user << "You [anchored ? "attach" : "detach"] the cell charger [anchored ? "to" : "from"] the ground"
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
|
||||
playsound(src, W.usesound, 75, 1)
|
||||
|
||||
/obj/machinery/cell_charger/attack_hand(mob/user)
|
||||
if(charging)
|
||||
|
||||
@@ -234,7 +234,7 @@
|
||||
connected = null
|
||||
else
|
||||
anchored = 1
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1)
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
if(anchored)
|
||||
user.visible_message("[user] secures [src] to the floor.", "You secure [src] to the floor.")
|
||||
else
|
||||
@@ -243,6 +243,7 @@
|
||||
var/obj/item/device/multitool/M = W
|
||||
M.connecting = src
|
||||
user << "<span class='notice'>You load connection data from [src] to [M].</span>"
|
||||
M.update_icon()
|
||||
return
|
||||
else
|
||||
..()
|
||||
|
||||
@@ -15,8 +15,8 @@
|
||||
switch(state)
|
||||
if(0)
|
||||
if(istype(P, /obj/item/weapon/wrench))
|
||||
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
playsound(loc, P.usesound, 50, 1)
|
||||
if(do_after(user, 20 * P.toolspeed))
|
||||
user << "<span class='notice'>You wrench the frame into place.</span>"
|
||||
anchored = 1
|
||||
state = 1
|
||||
@@ -25,16 +25,16 @@
|
||||
if(!WT.isOn())
|
||||
user << "The welder must be on for this task."
|
||||
return
|
||||
playsound(loc, 'sound/items/Welder.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
playsound(loc, WT.usesound, 50, 1)
|
||||
if(do_after(user, 20 * WT.toolspeed))
|
||||
if(!src || !WT.remove_fuel(0, user)) return
|
||||
user << "<span class='notice'>You deconstruct the frame.</span>"
|
||||
new /obj/item/stack/material/plasteel( loc, 4)
|
||||
qdel(src)
|
||||
if(1)
|
||||
if(istype(P, /obj/item/weapon/wrench))
|
||||
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
playsound(loc, P.usesound, 50, 1)
|
||||
if(do_after(user, 20 * P.toolspeed))
|
||||
user << "<span class='notice'>You unfasten the frame.</span>"
|
||||
anchored = 0
|
||||
state = 0
|
||||
@@ -46,12 +46,12 @@
|
||||
user.drop_item()
|
||||
P.loc = src
|
||||
if(istype(P, /obj/item/weapon/screwdriver) && circuit)
|
||||
playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
playsound(loc, P.usesound, 50, 1)
|
||||
user << "<span class='notice'>You screw the circuit board into place.</span>"
|
||||
state = 2
|
||||
icon_state = "2"
|
||||
if(istype(P, /obj/item/weapon/crowbar) && circuit)
|
||||
playsound(loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||
playsound(loc, P.usesound, 50, 1)
|
||||
user << "<span class='notice'>You remove the circuit board.</span>"
|
||||
state = 1
|
||||
icon_state = "0"
|
||||
@@ -59,7 +59,7 @@
|
||||
circuit = null
|
||||
if(2)
|
||||
if(istype(P, /obj/item/weapon/screwdriver) && circuit)
|
||||
playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
playsound(loc, P.usesound, 50, 1)
|
||||
user << "<span class='notice'>You unfasten the circuit board.</span>"
|
||||
state = 1
|
||||
icon_state = "1"
|
||||
@@ -81,7 +81,7 @@
|
||||
if (brain)
|
||||
user << "Get that brain out of there first"
|
||||
else
|
||||
playsound(loc, 'sound/items/Wirecutter.ogg', 50, 1)
|
||||
playsound(loc, P.usesound, 50, 1)
|
||||
user << "<span class='notice'>You remove the cables.</span>"
|
||||
state = 2
|
||||
icon_state = "2"
|
||||
@@ -146,7 +146,7 @@
|
||||
icon_state = "3b"
|
||||
|
||||
if(istype(P, /obj/item/weapon/crowbar) && brain)
|
||||
playsound(loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||
playsound(loc, P.usesound, 50, 1)
|
||||
user << "<span class='notice'>You remove the brain.</span>"
|
||||
brain.loc = loc
|
||||
brain = null
|
||||
@@ -154,7 +154,7 @@
|
||||
|
||||
if(4)
|
||||
if(istype(P, /obj/item/weapon/crowbar))
|
||||
playsound(loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||
playsound(loc, P.usesound, 50, 1)
|
||||
user << "<span class='notice'>You remove the glass panel.</span>"
|
||||
state = 3
|
||||
if (brain)
|
||||
@@ -165,7 +165,7 @@
|
||||
return
|
||||
|
||||
if(istype(P, /obj/item/weapon/screwdriver))
|
||||
playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
playsound(loc, P.usesound, 50, 1)
|
||||
user << "<span class='notice'>You connect the monitor.</span>"
|
||||
if(!brain)
|
||||
var/open_for_latejoin = alert(user, "Would you like this core to be open for latejoining AIs?", "Latejoin", "Yes", "Yes", "No") == "Yes"
|
||||
@@ -202,8 +202,8 @@
|
||||
transfer.loc = get_turf(src)
|
||||
transfer.create_eyeobj()
|
||||
transfer.cancel_camera()
|
||||
user << "<span class='notice'>Transfer successful:</span> [transfer.name] ([rand(1000,9999)].exe) downloaded to host terminal. Local copy wiped."
|
||||
transfer << "You have been uploaded to a stationary terminal. Remote device connection restored."
|
||||
user << "<span class='notice'>Transfer successful:</span> [transfer.name] placed within stationary core."
|
||||
transfer << "You have been transferred into a stationary core. Remote device connection restored."
|
||||
|
||||
if(card)
|
||||
card.clear()
|
||||
@@ -229,7 +229,8 @@
|
||||
else if(istype(W, /obj/item/weapon/wrench))
|
||||
if(anchored)
|
||||
user.visible_message("<span class='notice'>\The [user] starts to unbolt \the [src] from the plating...</span>")
|
||||
if(!do_after(user,40))
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
if(!do_after(user,40 * W.toolspeed))
|
||||
user.visible_message("<span class='notice'>\The [user] decides not to unbolt \the [src].</span>")
|
||||
return
|
||||
user.visible_message("<span class='notice'>\The [user] finishes unfastening \the [src]!</span>")
|
||||
@@ -237,7 +238,8 @@
|
||||
return
|
||||
else
|
||||
user.visible_message("<span class='notice'>\The [user] starts to bolt \the [src] to the plating...</span>")
|
||||
if(!do_after(user,40))
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
if(!do_after(user,40 * W.toolspeed))
|
||||
user.visible_message("<span class='notice'>\The [user] decides not to bolt \the [src].</span>")
|
||||
return
|
||||
user.visible_message("<span class='notice'>\The [user] finishes fastening down \the [src]!</span>")
|
||||
|
||||
@@ -18,8 +18,8 @@
|
||||
return
|
||||
|
||||
// Transfer over the AI.
|
||||
transfer << "You have been uploaded to a stationary terminal. Sadly, there is no remote access from here."
|
||||
user << "<span class='notice'>Transfer successful:</span> [transfer.name] ([rand(1000,9999)].exe) installed and executed successfully. Local copy has been removed."
|
||||
transfer << "You have been transferred into a stationary terminal. Sadly, there is no remote access from here."
|
||||
user << "<span class='notice'>Transfer successful:</span> [transfer.name] placed within stationary terminal."
|
||||
|
||||
transfer.loc = src
|
||||
transfer.cancel_camera()
|
||||
@@ -102,7 +102,7 @@
|
||||
if (href_list["fix"])
|
||||
src.active = 1
|
||||
src.overlays += image(icon, "ai-fixer-on")
|
||||
while (src.occupant.health < 100)
|
||||
while (src.occupant.getOxyLoss() > 0 || src.occupant.getFireLoss() > 0 || src.occupant.getToxLoss() > 0 || src.occupant.getBruteLoss() > 0)
|
||||
src.occupant.adjustOxyLoss(-1)
|
||||
src.occupant.adjustFireLoss(-1)
|
||||
src.occupant.adjustToxLoss(-1)
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
switch(state)
|
||||
if(0)
|
||||
if(istype(P, /obj/item/weapon/wrench))
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
playsound(src.loc, P.usesound, 50, 1)
|
||||
if(do_after(user, 20 * P.toolspeed))
|
||||
user << "<span class='notice'>You wrench the frame into place.</span>"
|
||||
src.anchored = 1
|
||||
src.state = 1
|
||||
@@ -24,16 +24,16 @@
|
||||
if(!WT.remove_fuel(0, user))
|
||||
user << "The welding tool must be on to complete this task."
|
||||
return
|
||||
playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
playsound(src.loc, WT.usesound, 50, 1)
|
||||
if(do_after(user, 20 * WT.toolspeed))
|
||||
if(!src || !WT.isOn()) return
|
||||
user << "<span class='notice'>You deconstruct the frame.</span>"
|
||||
new /obj/item/stack/material/steel( src.loc, 5 )
|
||||
qdel(src)
|
||||
if(1)
|
||||
if(istype(P, /obj/item/weapon/wrench))
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
playsound(src.loc, P.usesound, 50, 1)
|
||||
if(do_after(user, 20 * P.toolspeed))
|
||||
user << "<span class='notice'>You unfasten the frame.</span>"
|
||||
src.anchored = 0
|
||||
src.state = 0
|
||||
@@ -49,12 +49,12 @@
|
||||
else
|
||||
user << "<span class='warning'>This frame does not accept circuit boards of this type!</span>"
|
||||
if(istype(P, /obj/item/weapon/screwdriver) && circuit)
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
playsound(src.loc, P.usesound, 50, 1)
|
||||
user << "<span class='notice'>You screw the circuit board into place.</span>"
|
||||
src.state = 2
|
||||
src.icon_state = "2"
|
||||
if(istype(P, /obj/item/weapon/crowbar) && circuit)
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||
playsound(src.loc, P.usesound, 50, 1)
|
||||
user << "<span class='notice'>You remove the circuit board.</span>"
|
||||
src.state = 1
|
||||
src.icon_state = "0"
|
||||
@@ -62,7 +62,7 @@
|
||||
src.circuit = null
|
||||
if(2)
|
||||
if(istype(P, /obj/item/weapon/screwdriver) && circuit)
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
playsound(src.loc, P.usesound, 50, 1)
|
||||
user << "<span class='notice'>You unfasten the circuit board.</span>"
|
||||
src.state = 1
|
||||
src.icon_state = "1"
|
||||
@@ -80,7 +80,7 @@
|
||||
icon_state = "3"
|
||||
if(3)
|
||||
if(istype(P, /obj/item/weapon/wirecutters))
|
||||
playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
|
||||
playsound(src.loc, P.usesound, 50, 1)
|
||||
user << "<span class='notice'>You remove the cables.</span>"
|
||||
src.state = 2
|
||||
src.icon_state = "2"
|
||||
@@ -101,13 +101,13 @@
|
||||
src.icon_state = "4"
|
||||
if(4)
|
||||
if(istype(P, /obj/item/weapon/crowbar))
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||
playsound(src.loc, P.usesound, 50, 1)
|
||||
user << "<span class='notice'>You remove the glass panel.</span>"
|
||||
src.state = 3
|
||||
src.icon_state = "3"
|
||||
new /obj/item/stack/material/glass( src.loc, 2 )
|
||||
if(istype(P, /obj/item/weapon/screwdriver))
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
playsound(src.loc, P.usesound, 50, 1)
|
||||
user << "<span class='notice'>You connect the monitor.</span>"
|
||||
var/B = new src.circuit.build_path ( src.loc )
|
||||
src.circuit.construct(B)
|
||||
|
||||
@@ -169,6 +169,7 @@
|
||||
|
||||
src.current_camera = C
|
||||
if(current_camera)
|
||||
current_camera.camera_computers_using_this.Add(src)
|
||||
use_power = 2
|
||||
var/mob/living/L = current_camera.loc
|
||||
if(istype(L))
|
||||
@@ -176,6 +177,7 @@
|
||||
|
||||
/obj/machinery/computer/security/proc/reset_current()
|
||||
if(current_camera)
|
||||
current_camera.camera_computers_using_this.Remove(src)
|
||||
var/mob/living/L = current_camera.loc
|
||||
if(istype(L))
|
||||
L.tracking_cancelled()
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
else if(istype(I,/obj/item/weapon/screwdriver))
|
||||
secured = !secured
|
||||
user.visible_message("<span class='notice'>The [src] can [secured ? "no longer" : "now"] be modified.</span>")
|
||||
playsound(src, I.usesound, 50, 1)
|
||||
updateBuildPath()
|
||||
return
|
||||
|
||||
|
||||
@@ -103,6 +103,7 @@
|
||||
data["medical_jobs"] = format_jobs(medical_positions)
|
||||
data["science_jobs"] = format_jobs(science_positions)
|
||||
data["security_jobs"] = format_jobs(security_positions)
|
||||
data["cargo_jobs"] = format_jobs(cargo_positions)
|
||||
data["civilian_jobs"] = format_jobs(civilian_positions)
|
||||
data["centcom_jobs"] = format_jobs(get_all_centcom_jobs())
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
if(..())
|
||||
return 1
|
||||
if (using_map && !(src.z in using_map.contact_levels))
|
||||
usr << "\red <b>Unable to establish a connection</b>: \black You're too far away from the station!"
|
||||
usr << "<font color='red'><b>Unable to establish a connection:</b></font> <font color='black'>You're too far away from the station!</font>"
|
||||
return
|
||||
usr.set_machine(src)
|
||||
|
||||
@@ -180,13 +180,13 @@
|
||||
if("MessageCentCom")
|
||||
if(src.authenticated==2)
|
||||
if(centcomm_message_cooldown)
|
||||
usr << "\red Arrays recycling. Please stand by."
|
||||
usr << "<font color='red'>Arrays recycling. Please stand by.</font>"
|
||||
return
|
||||
var/input = sanitize(input("Please choose a message to transmit to [using_map.boss_short] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response. There is a 30 second delay before you may send another message, be clear, full and concise.", "To abort, send an empty message.", ""))
|
||||
if(!input || !(usr in view(1,src)))
|
||||
return
|
||||
CentCom_announce(input, usr)
|
||||
usr << "\blue Message transmitted."
|
||||
usr << "<font color='blue'>Message transmitted.</font>"
|
||||
log_say("[key_name(usr)] has made an IA [using_map.boss_short] announcement: [input]")
|
||||
centcomm_message_cooldown = 1
|
||||
spawn(300)//10 minute cooldown
|
||||
@@ -197,13 +197,13 @@
|
||||
if("MessageSyndicate")
|
||||
if((src.authenticated==2) && (src.emagged))
|
||||
if(centcomm_message_cooldown)
|
||||
usr << "\red Arrays recycling. Please stand by."
|
||||
usr << "<font color='red'>Arrays recycling. Please stand by.</font>"
|
||||
return
|
||||
var/input = sanitize(input(usr, "Please choose a message to transmit to \[ABNORMAL ROUTING CORDINATES\] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response. There is a 30 second delay before you may send another message, be clear, full and concise.", "To abort, send an empty message.", ""))
|
||||
if(!input || !(usr in view(1,src)))
|
||||
return
|
||||
Syndicate_announce(input, usr)
|
||||
usr << "\blue Message transmitted."
|
||||
usr << "<font color='blue'>Message transmitted.</font>"
|
||||
log_say("[key_name(usr)] has made an illegal announcement: [input]")
|
||||
centcomm_message_cooldown = 1
|
||||
spawn(300)//10 minute cooldown
|
||||
@@ -275,7 +275,7 @@
|
||||
if(..())
|
||||
return
|
||||
if (using_map && !(src.z in using_map.contact_levels))
|
||||
user << "\red <b>Unable to establish a connection</b>: \black You're too far away from the station!"
|
||||
user << "<font color='red'><b>Unable to establish a connection:</b></font> <font color='black'>You're too far away from the station!</font>"
|
||||
return
|
||||
|
||||
user.set_machine(src)
|
||||
@@ -514,7 +514,7 @@
|
||||
if((ticker.mode.name == "blob")||(ticker.mode.name == "Meteor"))
|
||||
return
|
||||
|
||||
if(!emergency_shuttle.going_to_centcom()) //check that shuttle isn't already heading to centcomm
|
||||
if(!emergency_shuttle.going_to_centcom()) //check that shuttle isn't already heading to CentCom
|
||||
emergency_shuttle.recall()
|
||||
log_game("[key_name(user)] has recalled the shuttle.")
|
||||
message_admins("[key_name_admin(user)] has recalled the shuttle.", 1)
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
/*
|
||||
/obj/machinery/computer/pod/attackby(I as obj, user as mob)
|
||||
if(istype(I, /obj/item/weapon/screwdriver))
|
||||
playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
playsound(src.loc, W.usesound, 50, 1)
|
||||
if(do_after(user, 20))
|
||||
if(stat & BROKEN)
|
||||
user << "<span class='notice'>The broken glass falls out.</span>"
|
||||
|
||||
@@ -79,8 +79,8 @@
|
||||
switch(state)
|
||||
if(0)
|
||||
if(istype(P, /obj/item/weapon/wrench))
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
playsound(src.loc, P.usesound, 50, 1)
|
||||
if(do_after(user, 20 * P.toolspeed))
|
||||
user << "<span class='notice'>You wrench the frame into place.</span>"
|
||||
src.anchored = 1
|
||||
src.state = 1
|
||||
@@ -89,16 +89,16 @@
|
||||
if(!WT.remove_fuel(0, user))
|
||||
user << "The welding tool must be on to complete this task."
|
||||
return
|
||||
playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
playsound(src.loc, WT.usesound, 50, 1)
|
||||
if(do_after(user, 20 * WT.toolspeed))
|
||||
if(!src || !WT.isOn()) return
|
||||
user << "<span class='notice'>You deconstruct the frame.</span>"
|
||||
new /obj/item/stack/material/steel( src.loc, 5 )
|
||||
qdel(src)
|
||||
if(1)
|
||||
if(istype(P, /obj/item/weapon/wrench))
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
playsound(src.loc, P.usesound, 50, 1)
|
||||
if(do_after(user, 20 * P.toolspeed))
|
||||
user << "<span class='notice'>You unfasten the frame.</span>"
|
||||
src.anchored = 0
|
||||
src.state = 0
|
||||
@@ -114,12 +114,12 @@
|
||||
else
|
||||
user << "<span class='warning'>This frame does not accept circuit boards of this type!</span>"
|
||||
if(istype(P, /obj/item/weapon/screwdriver) && circuit)
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
playsound(src.loc, P.usesound, 50, 1)
|
||||
user << "<span class='notice'>You screw the circuit board into place.</span>"
|
||||
src.state = 2
|
||||
src.icon_state = "2"
|
||||
if(istype(P, /obj/item/weapon/crowbar) && circuit)
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||
playsound(src.loc, P.usesound, 50, 1)
|
||||
user << "<span class='notice'>You remove the circuit board.</span>"
|
||||
src.state = 1
|
||||
src.icon_state = "0"
|
||||
@@ -127,15 +127,15 @@
|
||||
src.circuit = null
|
||||
if(2)
|
||||
if(istype(P, /obj/item/weapon/screwdriver) && circuit)
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
playsound(src.loc, P.usesound, 50, 1)
|
||||
user << "<span class='notice'>You unfasten the circuit board.</span>"
|
||||
src.state = 1
|
||||
src.icon_state = "1"
|
||||
|
||||
if(istype(P, /obj/item/weapon/crowbar))
|
||||
if(battery)
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||
if(do_after(10))
|
||||
playsound(src.loc, P.usesound, 50, 1)
|
||||
if(do_after(10 * P.toolspeed))
|
||||
battery.loc = loc
|
||||
user << "<span class='notice'>You remove [battery].</span>"
|
||||
battery = null
|
||||
@@ -168,7 +168,7 @@
|
||||
if(components.len)
|
||||
user << "There are parts in the way!"
|
||||
return
|
||||
playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
|
||||
playsound(src.loc, P.usesound, 50, 1)
|
||||
user << "<span class='notice'>You remove the cables.</span>"
|
||||
src.state = 2
|
||||
src.icon_state = "2"
|
||||
@@ -190,13 +190,13 @@
|
||||
src.icon_state = "4"
|
||||
if(4)
|
||||
if(istype(P, /obj/item/weapon/crowbar))
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||
playsound(src.loc, P.usesound, 50, 1)
|
||||
user << "<span class='notice'>You remove the glass panel.</span>"
|
||||
src.state = 3
|
||||
src.icon_state = "3"
|
||||
new /obj/item/stack/material/glass( src.loc, 2 )
|
||||
if(istype(P, /obj/item/weapon/screwdriver))
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
playsound(src.loc, P.usesound, 50, 1)
|
||||
user << "<span class='notice'>You connect the monitor.</span>"
|
||||
var/obj/machinery/computer3/B = new src.circuit.build_path ( src.loc, built=1 )
|
||||
/*if(circuit.powernet) B:powernet = circuit.powernet
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
*/
|
||||
|
||||
/obj/item/part/computer/ai_holder
|
||||
name = "intelliCard computer module"
|
||||
name = "intelliCore computer module"
|
||||
desc = "Contains a specialized nacelle for dealing with highly sensitive equipment without interference."
|
||||
|
||||
attackby_types = list(/obj/item/device/aicard)
|
||||
@@ -81,8 +81,8 @@
|
||||
return
|
||||
|
||||
// Transfer over the AI.
|
||||
transfer << "You have been uploaded to a stationary terminal. Sadly, there is no remote access from here."
|
||||
user << "<span class='notice'>Transfer successful:</span> [transfer.name] ([rand(1000,9999)].exe) installed and executed successfully. Local copy has been removed."
|
||||
transfer << "You have been transferred into a mobile terminal. Sadly, there is no remote access from here."
|
||||
user << "<span class='notice'>Transfer successful:</span> [transfer.name] placed within mobile terminal."
|
||||
|
||||
transfer.loc = src
|
||||
transfer.cancel_camera()
|
||||
|
||||
@@ -184,7 +184,7 @@
|
||||
stat_msg2 = reject_bad_text(sanitize(input("Line 2", "Enter Message Text", stat_msg2) as text|null, 40), 40)
|
||||
computer.updateDialog()
|
||||
|
||||
// OMG CENTCOMM LETTERHEAD
|
||||
// OMG CENTCOM LETTERHEAD
|
||||
if("MessageCentCom" in href_list)
|
||||
if(!computer.radio.subspace)
|
||||
return
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
icon_state = "box_1"
|
||||
else
|
||||
if(istype(P, /obj/item/weapon/wrench))
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
|
||||
playsound(src, W.usesound, 75, 1)
|
||||
user << "<span class='notice'>You dismantle the frame</span>"
|
||||
new /obj/item/stack/material/steel(src.loc, 5)
|
||||
qdel(src)
|
||||
@@ -72,7 +72,7 @@
|
||||
user << "<span class='warning'>This frame does not accept circuit boards of this type!</span>"
|
||||
else
|
||||
if(istype(P, /obj/item/weapon/wirecutters))
|
||||
playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
|
||||
playsound(src.loc, P.usesound, 50, 1)
|
||||
user << "<span class='notice'>You remove the cables.</span>"
|
||||
state = 1
|
||||
icon_state = "box_0"
|
||||
@@ -81,7 +81,7 @@
|
||||
|
||||
if(3)
|
||||
if(istype(P, /obj/item/weapon/crowbar))
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||
playsound(src, P.usesound, 50, 1)
|
||||
state = 2
|
||||
circuit.loc = src.loc
|
||||
circuit = null
|
||||
@@ -103,7 +103,7 @@
|
||||
component_check = 0
|
||||
break
|
||||
if(component_check)
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
playsound(src.loc, P.usesound, 50, 1)
|
||||
var/obj/machinery/new_machine = new src.circuit.build_path(src.loc, src.dir)
|
||||
|
||||
if(new_machine.component_parts)
|
||||
|
||||
@@ -191,6 +191,11 @@
|
||||
qdel(G)
|
||||
return
|
||||
|
||||
/obj/machinery/atmospherics/unary/cryo_cell/MouseDrop_T(var/mob/target, var/mob/user) //Allows borgs to put people into cryo without external assistance
|
||||
if(user.stat || user.lying || !Adjacent(user) || !target.Adjacent(user)|| !ishuman(target))
|
||||
return
|
||||
put_mob(target)
|
||||
|
||||
/obj/machinery/atmospherics/unary/cryo_cell/update_icon()
|
||||
overlays.Cut()
|
||||
icon_state = "pod[on]"
|
||||
|
||||
@@ -515,50 +515,10 @@
|
||||
|
||||
if(!ismob(grab.affecting))
|
||||
return
|
||||
|
||||
if(!check_occupant_allowed(grab.affecting))
|
||||
return
|
||||
|
||||
var/willing = null //We don't want to allow people to be forced into despawning.
|
||||
var/mob/M = grab.affecting
|
||||
|
||||
if(M.client)
|
||||
if(alert(M,"Would you like to enter long-term storage?",,"Yes","No") == "Yes")
|
||||
if(!M || !grab || !grab.affecting) return
|
||||
willing = 1
|
||||
else
|
||||
willing = 1
|
||||
go_in(grab.affecting,user)
|
||||
|
||||
if(willing)
|
||||
|
||||
visible_message("\The [user] starts putting [grab:affecting:name] into \the [src].", 3)
|
||||
|
||||
if(do_after(user, 20))
|
||||
if(!M || !grab || !grab:affecting) return
|
||||
|
||||
M.forceMove(src)
|
||||
|
||||
if(M.client)
|
||||
M.client.perspective = EYE_PERSPECTIVE
|
||||
M.client.eye = src
|
||||
|
||||
icon_state = occupied_icon_state
|
||||
|
||||
M << "<span class='notice'>[on_enter_occupant_message]</span>"
|
||||
M << "<span class='notice'><b>If you ghost, log out or close your client now, your character will shortly be permanently removed from the round.</b></span>"
|
||||
set_occupant(M)
|
||||
time_entered = world.time
|
||||
if(ishuman(M) && applies_stasis)
|
||||
var/mob/living/carbon/human/H = M
|
||||
H.Stasis(1000)
|
||||
|
||||
// Book keeping!
|
||||
var/turf/location = get_turf(src)
|
||||
log_admin("[key_name_admin(M)] has entered a stasis pod. (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[location.x];Y=[location.y];Z=[location.z]'>JMP</a>)")
|
||||
message_admins("<span class='notice'>[key_name_admin(M)] has entered a stasis pod.</span>")
|
||||
|
||||
//Despawning occurs when process() is called with an occupant without a client.
|
||||
add_fingerprint(M)
|
||||
|
||||
/obj/machinery/cryopod/verb/eject()
|
||||
set name = "Eject Pod"
|
||||
@@ -666,3 +626,61 @@
|
||||
name = initial(name)
|
||||
if(occupant)
|
||||
name = "[name] ([occupant])"
|
||||
|
||||
/obj/machinery/cryopod/MouseDrop_T(var/mob/target, var/mob/user)
|
||||
if(user.stat || user.lying || !Adjacent(user) || !target.Adjacent(user))
|
||||
return
|
||||
go_in(target, user)
|
||||
|
||||
/obj/machinery/cryopod/proc/go_in(var/mob/M, var/mob/user)
|
||||
if(!check_occupant_allowed(M))
|
||||
return
|
||||
if(!M)
|
||||
return
|
||||
if(occupant)
|
||||
to_chat(user,"<span class='warning'>\The [src] is already occupied.</span>")
|
||||
return
|
||||
|
||||
var/willing = null //We don't want to allow people to be forced into despawning.
|
||||
|
||||
if(M.client)
|
||||
if(alert(M,"Would you like to enter long-term storage?",,"Yes","No") == "Yes")
|
||||
if(!M) return
|
||||
willing = 1
|
||||
else
|
||||
willing = 1
|
||||
|
||||
if(willing)
|
||||
if(M == user)
|
||||
visible_message("[usr] [on_enter_visible_message] [src].", 3)
|
||||
else
|
||||
visible_message("\The [user] starts putting [M] into \the [src].", 3)
|
||||
|
||||
if(do_after(user, 20))
|
||||
if(occupant)
|
||||
to_chat(user,"<span class='warning'>\The [src] is already occupied.</span>")
|
||||
return
|
||||
M.forceMove(src)
|
||||
|
||||
if(M.client)
|
||||
M.client.perspective = EYE_PERSPECTIVE
|
||||
M.client.eye = src
|
||||
else return
|
||||
|
||||
icon_state = occupied_icon_state
|
||||
|
||||
M << "<span class='notice'>[on_enter_occupant_message]</span>"
|
||||
M << "<span class='notice'><b>If you ghost, log out or close your client now, your character will shortly be permanently removed from the round.</b></span>"
|
||||
set_occupant(M)
|
||||
time_entered = world.time
|
||||
if(ishuman(M) && applies_stasis)
|
||||
var/mob/living/carbon/human/H = M
|
||||
H.Stasis(1000)
|
||||
|
||||
// Book keeping!
|
||||
var/turf/location = get_turf(src)
|
||||
log_admin("[key_name_admin(M)] has entered a stasis pod. (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[location.x];Y=[location.y];Z=[location.z]'>JMP</a>)")
|
||||
message_admins("<span class='notice'>[key_name_admin(M)] has entered a stasis pod.</span>")
|
||||
|
||||
//Despawning occurs when process() is called with an occupant without a client.
|
||||
add_fingerprint(M)
|
||||
@@ -40,7 +40,11 @@
|
||||
var/datum/wires/airlock/wires = null
|
||||
|
||||
var/open_sound_powered = 'sound/machines/airlock.ogg'
|
||||
var/open_sound_unpowered = 'sound/machines/airlock_creaking.ogg'
|
||||
var/open_sound_unpowered = 'sound/machines/airlockforced.ogg'
|
||||
var/close_sound_powered = 'sound/machines/airlockclose.ogg'
|
||||
var/denied_sound = 'sound/machines/deniedbeep.ogg'
|
||||
var/bolt_up_sound = 'sound/machines/boltsup.ogg'
|
||||
var/bolt_down_sound = 'sound/machines/boltsdown.ogg'
|
||||
|
||||
/obj/machinery/door/airlock/attack_generic(var/mob/user, var/damage)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
@@ -140,6 +144,11 @@
|
||||
name = "External Airlock"
|
||||
icon = 'icons/obj/doors/Doorext.dmi'
|
||||
assembly_type = /obj/structure/door_assembly/door_assembly_ext
|
||||
|
||||
/obj/machinery/door/airlock/glass_external
|
||||
name = "External Airlock"
|
||||
icon = 'icons/obj/doors/Doorextglass.dmi'
|
||||
assembly_type = /obj/structure/door_assembly/door_assembly_ext
|
||||
opacity = 0
|
||||
glass = 1
|
||||
req_one_access = list(access_external_airlocks)
|
||||
@@ -637,8 +646,7 @@ About the new airlock wires panel:
|
||||
if("deny")
|
||||
if(density && src.arePowerSystemsOn())
|
||||
flick("door_deny", src)
|
||||
if(secured_wires)
|
||||
playsound(src.loc, 'sound/machines/buzz-two.ogg', 50, 0)
|
||||
playsound(src, denied_sound, 50, 0, 3)
|
||||
return
|
||||
|
||||
/obj/machinery/door/airlock/attack_ai(mob/user as mob)
|
||||
@@ -817,7 +825,7 @@ About the new airlock wires panel:
|
||||
/obj/machinery/door/airlock/proc/can_remove_electronics()
|
||||
return src.p_open && (operating < 0 || (!operating && welded && !src.arePowerSystemsOn() && density && (!src.locked || (stat & BROKEN))))
|
||||
|
||||
/obj/machinery/door/airlock/attackby(C as obj, mob/user as mob)
|
||||
/obj/machinery/door/airlock/attackby(obj/item/C, mob/user as mob)
|
||||
//world << text("airlock attackby src [] obj [] mob []", src, C, user)
|
||||
if(!istype(usr, /mob/living/silicon))
|
||||
if(src.isElectrified())
|
||||
@@ -838,7 +846,7 @@ About the new airlock wires panel:
|
||||
src.welded = 1
|
||||
else
|
||||
src.welded = null
|
||||
playsound(src, 'sound/items/Welder.ogg', 75, 1)
|
||||
playsound(src.loc, C.usesound, 75, 1)
|
||||
src.update_icon()
|
||||
return
|
||||
else
|
||||
@@ -849,8 +857,10 @@ About the new airlock wires panel:
|
||||
to_chat(usr,"<span class='warning'>The panel is broken and cannot be closed.</span>")
|
||||
else
|
||||
src.p_open = 0
|
||||
playsound(src, C.usesound, 50, 1)
|
||||
else
|
||||
src.p_open = 1
|
||||
playsound(src, C.usesound, 50, 1)
|
||||
src.update_icon()
|
||||
else if(istype(C, /obj/item/weapon/wirecutters))
|
||||
return src.attack_hand(user)
|
||||
@@ -863,9 +873,9 @@ About the new airlock wires panel:
|
||||
cable.plugin(src, user)
|
||||
else if(!repairing && istype(C, /obj/item/weapon/crowbar))
|
||||
if(can_remove_electronics())
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 75, 1)
|
||||
playsound(src, C.usesound, 75, 1)
|
||||
user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to remove electronics from the airlock assembly.")
|
||||
if(do_after(user,40))
|
||||
if(do_after(user,40 * C.toolspeed))
|
||||
to_chat(user,"<span class='notice'>You removed the airlock electronics!</span>")
|
||||
|
||||
var/obj/structure/door_assembly/da = new assembly_type(src.loc)
|
||||
@@ -956,7 +966,7 @@ About the new airlock wires panel:
|
||||
|
||||
//if the door is unpowered then it doesn't make sense to hear the woosh of a pneumatic actuator
|
||||
if(arePowerSystemsOn())
|
||||
playsound(src.loc, open_sound_powered, 75, 1)
|
||||
playsound(src.loc, open_sound_powered, 50, 1)
|
||||
else
|
||||
playsound(src.loc, open_sound_unpowered, 75, 1)
|
||||
|
||||
@@ -1053,7 +1063,7 @@ About the new airlock wires panel:
|
||||
use_power(360) //360 W seems much more appropriate for an actuator moving an industrial door capable of crushing people
|
||||
has_beeped = 0
|
||||
if(arePowerSystemsOn())
|
||||
playsound(src.loc, open_sound_powered, 75, 1)
|
||||
playsound(src.loc, close_sound_powered, 50, 1)
|
||||
else
|
||||
playsound(src.loc, open_sound_unpowered, 75, 1)
|
||||
for(var/turf/turf in locs)
|
||||
@@ -1070,6 +1080,7 @@ About the new airlock wires panel:
|
||||
if (operating && !forced) return 0
|
||||
|
||||
src.locked = 1
|
||||
playsound(src, bolt_down_sound, 30, 0, 3)
|
||||
for(var/mob/M in range(1,src))
|
||||
M.show_message("You hear a click from the bottom of the door.", 2)
|
||||
update_icon()
|
||||
@@ -1083,6 +1094,7 @@ About the new airlock wires panel:
|
||||
if(operating || !src.arePowerSystemsOn() || isWireCut(AIRLOCK_WIRE_DOOR_BOLTS)) return
|
||||
|
||||
src.locked = 0
|
||||
playsound(src, bolt_up_sound, 30, 0, 3)
|
||||
for(var/mob/M in range(1,src))
|
||||
M.show_message("You hear a click from the bottom of the door.", 2)
|
||||
update_icon()
|
||||
|
||||
@@ -243,8 +243,8 @@
|
||||
var/obj/item/weapon/weldingtool/welder = I
|
||||
if(welder.remove_fuel(0,user))
|
||||
user << "<span class='notice'>You start to fix dents and weld \the [repairing] into place.</span>"
|
||||
playsound(src, 'sound/items/Welder.ogg', 100, 1)
|
||||
if(do_after(user, 5 * repairing.amount) && welder && welder.isOn())
|
||||
playsound(src, welder.usesound, 50, 1)
|
||||
if(do_after(user, (5 * repairing.amount) * welder.toolspeed) && welder && welder.isOn())
|
||||
user << "<span class='notice'>You finish repairing the damage to \the [src].</span>"
|
||||
health = between(health, health + repairing.amount*DOOR_REPAIR_AMOUNT, maxhealth)
|
||||
update_icon()
|
||||
@@ -254,7 +254,7 @@
|
||||
|
||||
if(repairing && istype(I, /obj/item/weapon/crowbar))
|
||||
user << "<span class='notice'>You remove \the [repairing].</span>"
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
|
||||
playsound(src, I.usesound, 100, 1)
|
||||
repairing.loc = user.loc
|
||||
repairing = null
|
||||
return
|
||||
|
||||
@@ -198,12 +198,13 @@
|
||||
user.visible_message("<span class='danger'>\The [user] [blocked ? "welds" : "unwelds"] \the [src] with \a [W].</span>",\
|
||||
"You [blocked ? "weld" : "unweld"] \the [src] with \the [W].",\
|
||||
"You hear something being welded.")
|
||||
playsound(src, 'sound/items/Welder.ogg', 100, 1)
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
update_icon()
|
||||
return
|
||||
|
||||
if(density && istype(C, /obj/item/weapon/screwdriver))
|
||||
hatch_open = !hatch_open
|
||||
playsound(src, C.usesound, 50, 1)
|
||||
user.visible_message("<span class='danger'>[user] has [hatch_open ? "opened" : "closed"] \the [src] maintenance hatch.</span>",
|
||||
"You have [hatch_open ? "opened" : "closed"] the [src] maintenance hatch.")
|
||||
update_icon()
|
||||
@@ -217,7 +218,7 @@
|
||||
"You start to remove the electronics from [src].")
|
||||
if(do_after(user,30))
|
||||
if(blocked && density && hatch_open)
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
|
||||
playsound(src, C.usesound, 50, 1)
|
||||
user.visible_message("<span class='danger'>[user] has removed the electronics from \the [src].</span>",
|
||||
"You have removed the electronics from [src].")
|
||||
|
||||
@@ -262,8 +263,8 @@
|
||||
"You hear metal strain.")
|
||||
prying = 1
|
||||
update_icon()
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
|
||||
if(do_after(user,30))
|
||||
playsound(src, C.usesound, 100, 1)
|
||||
if(do_after(user,30 * C.toolspeed))
|
||||
if(istype(C, /obj/item/weapon/crowbar))
|
||||
if(stat & (BROKEN|NOPOWER) || !density)
|
||||
user.visible_message("<span class='danger'>\The [user] forces \the [src] [density ? "open" : "closed"] with \a [C]!</span>",\
|
||||
|
||||
@@ -14,7 +14,7 @@ obj/structure/firedoor_assembly/update_icon()
|
||||
else
|
||||
icon_state = "door_construction"
|
||||
|
||||
obj/structure/firedoor_assembly/attackby(C as obj, mob/user as mob)
|
||||
obj/structure/firedoor_assembly/attackby(obj/item/C, mob/user as mob)
|
||||
if(istype(C, /obj/item/stack/cable_coil) && !wired && anchored)
|
||||
var/obj/item/stack/cable_coil/cable = C
|
||||
if (cable.get_amount() < 1)
|
||||
@@ -27,7 +27,7 @@ obj/structure/firedoor_assembly/attackby(C as obj, mob/user as mob)
|
||||
user << "<span class='notice'>You wire \the [src].</span>"
|
||||
|
||||
else if(istype(C, /obj/item/weapon/wirecutters) && wired )
|
||||
playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
|
||||
playsound(src.loc, C.usesound, 100, 1)
|
||||
user.visible_message("[user] cuts the wires from \the [src].", "You start to cut the wires from \the [src].")
|
||||
|
||||
if(do_after(user, 40))
|
||||
@@ -48,7 +48,7 @@ obj/structure/firedoor_assembly/attackby(C as obj, mob/user as mob)
|
||||
user << "<span class='warning'>You must secure \the [src] first!</span>"
|
||||
else if(istype(C, /obj/item/weapon/wrench))
|
||||
anchored = !anchored
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
playsound(src.loc, C.usesound, 50, 1)
|
||||
user.visible_message("<span class='warning'>[user] has [anchored ? "" : "un" ]secured \the [src]!</span>",
|
||||
"You have [anchored ? "" : "un" ]secured \the [src]!")
|
||||
update_icon()
|
||||
|
||||
@@ -193,9 +193,9 @@
|
||||
|
||||
//If it's opened/emagged, crowbar can pry it out of its frame.
|
||||
if (!density && istype(I, /obj/item/weapon/crowbar))
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
|
||||
playsound(src, I.usesound, 50, 1)
|
||||
user.visible_message("[user] begins prying the windoor out of the frame.", "You start to pry the windoor out of the frame.")
|
||||
if (do_after(user,40))
|
||||
if (do_after(user,40 * I.toolspeed))
|
||||
to_chat(user,"<span class='notice'>You pried the windoor out of the frame!</span>")
|
||||
|
||||
var/obj/structure/windoor_assembly/wa = new/obj/structure/windoor_assembly(src.loc)
|
||||
|
||||
@@ -31,8 +31,8 @@ var/list/floor_light_cache = list()
|
||||
if(!WT.remove_fuel(0, user))
|
||||
user << "<span class='warning'>\The [src] must be on to complete this task.</span>"
|
||||
return
|
||||
playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
|
||||
if(!do_after(user, 20))
|
||||
playsound(src.loc, WT.usesound, 50, 1)
|
||||
if(!do_after(user, 20 * WT.toolspeed))
|
||||
return
|
||||
if(!src || !WT.isOn())
|
||||
return
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user