mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-25 13:07:46 +01:00
Merge branch 'master' of git://github.com/Baystation12/Baystation12
This commit is contained in:
+6
-1
@@ -103,6 +103,7 @@
|
||||
#define FILE_DIR "code/modules/DetectiveWork"
|
||||
#define FILE_DIR "code/modules/flufftext"
|
||||
#define FILE_DIR "code/modules/food"
|
||||
#define FILE_DIR "code/modules/icon generation"
|
||||
#define FILE_DIR "code/modules/maps"
|
||||
#define FILE_DIR "code/modules/mining"
|
||||
#define FILE_DIR "code/modules/mob"
|
||||
@@ -510,7 +511,6 @@
|
||||
#include "code\game\machinery\scanner.dm"
|
||||
#include "code\game\machinery\seed_extractor.dm"
|
||||
#include "code\game\machinery\shieldgen.dm"
|
||||
#include "code\game\machinery\sink.dm"
|
||||
#include "code\game\machinery\Sleeper.dm"
|
||||
#include "code\game\machinery\spaceheater.dm"
|
||||
#include "code\game\machinery\status_display.dm"
|
||||
@@ -656,6 +656,7 @@
|
||||
#include "code\game\objects\alien\weeds.dm"
|
||||
#include "code\game\objects\closets\bombsuit.dm"
|
||||
#include "code\game\objects\closets\emergency.dm"
|
||||
#include "code\game\objects\closets\ert.dm"
|
||||
#include "code\game\objects\closets\extinguisher.dm"
|
||||
#include "code\game\objects\closets\fireaxe.dm"
|
||||
#include "code\game\objects\closets\firecloset.dm"
|
||||
@@ -786,6 +787,7 @@
|
||||
#include "code\js\byjax.dm"
|
||||
#include "code\js\menus.dm"
|
||||
#include "code\modules\admin\admin.dm"
|
||||
#include "code\modules\admin\admin_investigate.dm"
|
||||
#include "code\modules\admin\admin_memo.dm"
|
||||
#include "code\modules\admin\admin_verbs.dm"
|
||||
#include "code\modules\admin\banjob.dm"
|
||||
@@ -850,6 +852,8 @@
|
||||
#include "code\modules\clothing\head\hats.dm"
|
||||
#include "code\modules\clothing\head\helmets.dm"
|
||||
#include "code\modules\clothing\spacesuits\captain.dm"
|
||||
#include "code\modules\clothing\spacesuits\engineer.dm"
|
||||
#include "code\modules\clothing\spacesuits\ert.dm"
|
||||
#include "code\modules\clothing\spacesuits\miscellaneous.dm"
|
||||
#include "code\modules\clothing\spacesuits\ninja.dm"
|
||||
#include "code\modules\clothing\spacesuits\rig.dm"
|
||||
@@ -1077,6 +1081,7 @@
|
||||
#include "code\modules\power\singularity\emitter.dm"
|
||||
#include "code\modules\power\singularity\field_generator.dm"
|
||||
#include "code\modules\power\singularity\generator.dm"
|
||||
#include "code\modules\power\singularity\investigate.dm"
|
||||
#include "code\modules\power\singularity\singularity.dm"
|
||||
#include "code\modules\power\singularity\particle_accelerator\particle.dm"
|
||||
#include "code\modules\power\singularity\particle_accelerator\particle_accelerator.dm"
|
||||
|
||||
@@ -312,7 +312,8 @@ A list of items and costs is stored under the datum of every game mode, alongsid
|
||||
var/temp = null //Temporary storage area for a message offering the option to destroy the radio
|
||||
var/selfdestruct = 0 //Set to 1 while the radio is self destructing itself.
|
||||
var/obj/item/device/radio/origradio = null
|
||||
flags = FPRINT | TABLEPASS | CONDUCT | ONBELT
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = 2.0
|
||||
item_state = "radio"
|
||||
throwforce = 5
|
||||
|
||||
@@ -17,5 +17,5 @@
|
||||
L.status = 0
|
||||
L.on = 1
|
||||
L.update()
|
||||
user.visible_message("[user] repairs \the [target] on the spot with their [src]!","You repair the lightbulb!")
|
||||
user.visible_message("[user] repairs \the [target] on the spot with their [src]!","You repair the lightbulb!","You hear a soft whiiir-pop noise over the sound of flexing glass, followed by the soft hum of an activated [target].")
|
||||
return
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/item/weapon/weldpack
|
||||
name = "Welding kit"
|
||||
desc = "A heavy-duty, portable welding fluid carrier."
|
||||
flags = ONBACK
|
||||
slot_flags = SLOT_BACK
|
||||
icon = 'storage.dmi'
|
||||
icon_state = "welderpack"
|
||||
w_class = 4.0
|
||||
|
||||
@@ -44,8 +44,8 @@ var/global/list/ANTIGENS = list("[ANTIGEN_A]" = "A", "[ANTIGEN_B]" = "B", "[ANTI
|
||||
icon_state = "health"
|
||||
w_class = 2.0
|
||||
item_state = "electronic"
|
||||
flags = FPRINT | TABLEPASS | ONBELT | CONDUCT | USEDELAY
|
||||
|
||||
flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
/obj/item/device/antibody_scanner/attack(mob/living/carbon/human/M as mob, mob/user as mob)
|
||||
if(! istype(M, /mob/living/carbon) || !M:antibodies)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+16
-2
@@ -423,13 +423,27 @@
|
||||
var/burning = null
|
||||
var/hitsound = null
|
||||
var/w_class = 3.0
|
||||
var/protective_temperature = 0 // Placing this here to avoid runtime errors, due to tiny items being allowed on ears and being queried for this variable
|
||||
flags = FPRINT | TABLEPASS
|
||||
var/slot_flags = 0 //This is used to determine on which slots an item can fit.
|
||||
pass_flags = PASSTABLE
|
||||
pressure_resistance = 50
|
||||
// causeerrorheresoifixthis
|
||||
var/obj/item/master = null
|
||||
|
||||
//Since any item can now be a piece of clothing, this has to be put here so all items share it.
|
||||
var/see_face = 1.0
|
||||
var/color = null
|
||||
var/body_parts_covered = 0 //see setup.dm for appropriate bit flags
|
||||
var/protective_temperature = 0
|
||||
var/heat_transfer_coefficient = 1 //0 prevents all transfers, 1 is invisible
|
||||
var/gas_transfer_coefficient = 1 // for leaking gas from turf to mask and vice-versa (for masks right now, but at some point, i'd like to include space helmets)
|
||||
var/permeability_coefficient = 1 // for chemicals/diseases
|
||||
var/siemens_coefficient = 1 // for electrical admittance/conductance (electrocution checks and shit)
|
||||
var/slowdown = 0 // How much clothing is slowing you down. Negative values speeds you up
|
||||
var/canremove = 1 //Mostly for Ninja code at this point but basically will not allow the item to be removed if set to 0. /N
|
||||
var/armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
var/list/allowed = null //suit storage stuff.
|
||||
|
||||
/obj/item/device
|
||||
icon = 'device.dmi'
|
||||
|
||||
@@ -515,7 +529,7 @@
|
||||
density = 0
|
||||
anchored = 1.0
|
||||
layer = 2.3 //under pipes
|
||||
// flags = 64.0
|
||||
// flags = CONDUCT
|
||||
|
||||
/obj/structure/lattice/New()
|
||||
..()
|
||||
|
||||
@@ -4,19 +4,7 @@
|
||||
name = "clothing"
|
||||
// var/obj/item/clothing/master = null
|
||||
|
||||
var/see_face = 1.0
|
||||
var/color = null
|
||||
|
||||
var/body_parts_covered = 0 //see setup.dm for appropriate bit flags
|
||||
|
||||
var/heat_transfer_coefficient = 1 //0 prevents all transfers, 1 is invisible
|
||||
var/gas_transfer_coefficient = 1 // for leaking gas from turf to mask and vice-versa (for masks right now, but at some point, i'd like to include space helmets)
|
||||
var/permeability_coefficient = 1 // for chemicals/diseases
|
||||
var/siemens_coefficient = 1 // for electrical admittance/conductance (electrocution checks and shit)
|
||||
var/slowdown = 0 // How much clothing is slowing you down. Negative values speeds you up
|
||||
var/canremove = 1 //Mostly for Ninja code at this point but basically will not allow the item to be removed if set to 0. /N
|
||||
|
||||
var/armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
|
||||
|
||||
@@ -28,6 +16,7 @@
|
||||
/obj/item/clothing/belt
|
||||
name = "belt"
|
||||
|
||||
flags = FPRINT | TABLEPASS | ONBELT
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
*/
|
||||
|
||||
|
||||
@@ -1845,7 +1845,8 @@
|
||||
name = "bottle of Plant-B-Gone"
|
||||
icon_state = "plantbgone"
|
||||
item_state = "plantbgone"
|
||||
flags = ONBELT|TABLEPASS|OPENCONTAINER|FPRINT|USEDELAY
|
||||
flags = TABLEPASS | OPENCONTAINER | FPRINT | USEDELAY
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 3
|
||||
w_class = 2.0
|
||||
throw_speed = 2
|
||||
@@ -1859,7 +1860,8 @@
|
||||
name = "weed-spray"
|
||||
icon_state = "weedspray"
|
||||
item_state = "spray"
|
||||
flags = ONBELT|TABLEPASS|OPENCONTAINER|FPRINT|USEDELAY
|
||||
flags = TABLEPASS | OPENCONTAINER | FPRINT | USEDELAY
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 4
|
||||
w_class = 2.0
|
||||
throw_speed = 2
|
||||
@@ -1873,7 +1875,8 @@
|
||||
name = "pest-spray"
|
||||
icon_state = "pestspray"
|
||||
item_state = "spray"
|
||||
flags = ONBELT|TABLEPASS|OPENCONTAINER|FPRINT|USEDELAY
|
||||
flags = TABLEPASS | OPENCONTAINER | FPRINT | USEDELAY
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 4
|
||||
w_class = 2.0
|
||||
throw_speed = 2
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
desc = "You wear this on your back and put items into it."
|
||||
icon_state = "backpack"
|
||||
w_class = 4.0
|
||||
flags = 259.0
|
||||
flags = FPRINT|TABLEPASS
|
||||
slot_flags = SLOT_BACK //ERROOOOO
|
||||
max_w_class = 3
|
||||
max_combined_w_class = 21
|
||||
|
||||
@@ -116,7 +117,7 @@
|
||||
for(var/i = 1, i <=2, i++)
|
||||
new /obj/item/weapon/storage/box/ert(src)
|
||||
new /obj/item/weapon/storage/box/medic(src)
|
||||
new /obj/item/weapon/storage/belt/medical(src)
|
||||
new /obj/item/device/healthanalyzer(src)
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/backpack/security
|
||||
|
||||
@@ -129,7 +129,8 @@
|
||||
icon = 'gun.dmi'
|
||||
icon_state = "revolver"
|
||||
item_state = "gun"
|
||||
flags = FPRINT | TABLEPASS | CONDUCT | ONBELT | USEDELAY
|
||||
flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = 3.0
|
||||
g_amt = 10
|
||||
m_amt = 10
|
||||
|
||||
+56
-30
@@ -12,7 +12,8 @@
|
||||
desc = "A shield adept at blocking blunt objects from connecting with the torso of the shield wielder."
|
||||
icon = 'weapons.dmi'
|
||||
icon_state = "riot"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT| ONBACK
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
slot_flags = SLOT_BACK
|
||||
force = 5.0
|
||||
throwforce = 5.0
|
||||
throw_speed = 1
|
||||
@@ -31,7 +32,8 @@
|
||||
desc = "A rod of pure obsidian, its very presence disrupts and dampens the powers of Nar-Sie's followers."
|
||||
icon_state = "nullrod"
|
||||
item_state = "nullrod"
|
||||
flags = FPRINT | ONBELT | TABLEPASS
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
force = 10
|
||||
throw_speed = 1
|
||||
throw_range = 4
|
||||
@@ -83,7 +85,8 @@
|
||||
desc = "This thing is so unspeakably shitty you are having a hard time even holding it."
|
||||
icon_state = "sord"
|
||||
item_state = "sord"
|
||||
flags = FPRINT | ONBELT | TABLEPASS
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
force = 2
|
||||
throwforce = 1
|
||||
w_class = 3*/
|
||||
@@ -93,7 +96,8 @@
|
||||
desc = "BLOOD FOR THE BLOOD GOD." //SKULLS FOR THE SKULL THRONE. --SkyMarshal
|
||||
icon_state = "claymore"
|
||||
item_state = "claymore"
|
||||
flags = FPRINT | ONBELT | TABLEPASS
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
force = 40
|
||||
throwforce = 10
|
||||
w_class = 3
|
||||
@@ -321,7 +325,8 @@
|
||||
icon_state = "spectrometer"
|
||||
item_state = "analyzer"
|
||||
w_class = 2.0
|
||||
flags = FPRINT | TABLEPASS| CONDUCT | ONBELT | OPENCONTAINER
|
||||
flags = FPRINT | TABLEPASS| CONDUCT | OPENCONTAINER
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 5
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
@@ -342,7 +347,8 @@
|
||||
desc = "The police baton of the future."
|
||||
icon_state = "stunbaton"
|
||||
item_state = "baton"
|
||||
flags = FPRINT | ONBELT | TABLEPASS
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
force = 15
|
||||
throwforce = 7
|
||||
w_class = 3
|
||||
@@ -356,7 +362,8 @@
|
||||
desc = "The Captain is first and all other heads are last."
|
||||
icon_state = "chainofcommand"
|
||||
item_state = "chainofcommand"
|
||||
flags = FPRINT | ONBELT | TABLEPASS
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
force = 10
|
||||
throwforce = 7
|
||||
w_class = 3
|
||||
@@ -381,7 +388,7 @@
|
||||
origin_tech = "combat=3"
|
||||
|
||||
/obj/item/weapon/melee/energy/sword
|
||||
var/color
|
||||
color
|
||||
name = "energy sword"
|
||||
desc = "It cuts AND cooks at the same time!"
|
||||
icon_state = "sword0"
|
||||
@@ -471,7 +478,7 @@
|
||||
w_class = 1.0
|
||||
throw_speed = 2
|
||||
throw_range = 10
|
||||
var/color = "white"
|
||||
color = "white"
|
||||
|
||||
/obj/item/weapon/bedsheet/blue
|
||||
icon_state = "sheetblue"
|
||||
@@ -675,6 +682,7 @@
|
||||
item_state = "card-id"
|
||||
var/access = list()
|
||||
var/registered_name = null // The name registered_name on the card
|
||||
slot_flags = SLOT_ID
|
||||
var/pin = 0
|
||||
var/money = 0
|
||||
var/assignment = null
|
||||
@@ -743,7 +751,8 @@
|
||||
w_class = 2.0
|
||||
throw_speed = 3
|
||||
throw_range = 10
|
||||
flags = FPRINT | TABLEPASS | ONBELT
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
/obj/item/weapon/clipboard/notebook
|
||||
name = "notebook"
|
||||
@@ -756,7 +765,7 @@
|
||||
icon = 'power.dmi'
|
||||
icon_state = "coil_red"
|
||||
var/amount = MAXCOIL
|
||||
var/color = "red"
|
||||
color = "red"
|
||||
desc = "A coil of power cable."
|
||||
throwforce = 10
|
||||
w_class = 2.0
|
||||
@@ -764,7 +773,8 @@
|
||||
throw_range = 5
|
||||
m_amt = 50
|
||||
g_amt = 20
|
||||
flags = TABLEPASS|USEDELAY|FPRINT|CONDUCT | ONBELT
|
||||
flags = TABLEPASS | USEDELAY | FPRINT | CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
item_state = "coil_red"
|
||||
|
||||
/obj/item/weapon/cable_coil/cut
|
||||
@@ -797,7 +807,8 @@
|
||||
desc = "Used to remove floor tiles."
|
||||
icon = 'items.dmi'
|
||||
icon_state = "crowbar"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT | ONBELT
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
force = 5.0
|
||||
throwforce = 7.0
|
||||
item_state = "wrench"
|
||||
@@ -840,7 +851,7 @@
|
||||
name = "dummy"
|
||||
invisibility = 101.0
|
||||
anchored = 1.0
|
||||
flags = 2.0
|
||||
flags = TABLEPASS
|
||||
|
||||
/obj/item/weapon/extinguisher
|
||||
name = "fire extinguisher"
|
||||
@@ -953,7 +964,8 @@
|
||||
gender = PLURAL
|
||||
icon = 'items.dmi'
|
||||
icon_state = "handcuff"
|
||||
flags = FPRINT | TABLEPASS | CONDUCT | ONBELT
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 5
|
||||
w_class = 2.0
|
||||
throw_speed = 2
|
||||
@@ -1016,12 +1028,12 @@
|
||||
throw_range = 15
|
||||
layer = 4
|
||||
var/list/stamped
|
||||
var/see_face = 1
|
||||
var/body_parts_covered = HEAD
|
||||
var/heat_transfer_coefficient = 0.99
|
||||
var/gas_transfer_coefficient = 1
|
||||
var/permeability_coefficient = 0.99
|
||||
var/siemens_coefficient = 0.80
|
||||
see_face = 1
|
||||
body_parts_covered = HEAD
|
||||
heat_transfer_coefficient = 0.99
|
||||
gas_transfer_coefficient = 1
|
||||
permeability_coefficient = 0.99
|
||||
siemens_coefficient = 0.80
|
||||
var/iteration
|
||||
|
||||
/obj/item/weapon/directions
|
||||
@@ -1103,7 +1115,8 @@ eternal248: Found broken and buggy Z-levels 7-12, ended up leading to my discove
|
||||
name = "pen"
|
||||
icon = 'paper.dmi'
|
||||
icon_state = "pen"
|
||||
flags = FPRINT | ONBELT | TABLEPASS
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 0
|
||||
w_class = 1.0
|
||||
throw_speed = 7
|
||||
@@ -1136,7 +1149,8 @@ eternal248: Found broken and buggy Z-levels 7-12, ended up leading to my discove
|
||||
name = "banhammer"
|
||||
icon = 'items.dmi'
|
||||
icon_state = "toyhammer"
|
||||
flags = FPRINT | ONBELT | TABLEPASS
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 0
|
||||
w_class = 1.0
|
||||
throw_speed = 7
|
||||
@@ -1144,12 +1158,14 @@ eternal248: Found broken and buggy Z-levels 7-12, ended up leading to my discove
|
||||
|
||||
/obj/item/weapon/pen/sleepypen
|
||||
desc = "It's a normal black ink pen with a sharp point."
|
||||
flags = FPRINT | ONBELT | TABLEPASS | OPENCONTAINER
|
||||
flags = FPRINT | TABLEPASS | OPENCONTAINER
|
||||
slot_flags = SLOT_BELT
|
||||
origin_tech = "materials=2;biotech=1;syndicate=7"
|
||||
|
||||
/obj/item/weapon/pen/paralysis
|
||||
desc = "It's a normal black ink pen with a sharp point."
|
||||
flags = FPRINT | ONBELT | TABLEPASS | OPENCONTAINER
|
||||
flags = FPRINT | TABLEPASS | OPENCONTAINER
|
||||
slot_flags = SLOT_BELT
|
||||
origin_tech = "materials=2;biotech=1;syndicate=5"
|
||||
|
||||
/obj/item/weapon/rack_parts
|
||||
@@ -1173,7 +1189,8 @@ eternal248: Found broken and buggy Z-levels 7-12, ended up leading to my discove
|
||||
desc = "Used for screwing."
|
||||
icon = 'items.dmi'
|
||||
icon_state = "screwdriver"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT | ONBELT
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
force = 5.0
|
||||
w_class = 1.0
|
||||
throwforce = 5.0
|
||||
@@ -1203,7 +1220,8 @@ eternal248: Found broken and buggy Z-levels 7-12, ended up leading to my discove
|
||||
var/selfdestruct = 0.0
|
||||
var/traitor_frequency = 0.0
|
||||
var/obj/item/device/radio/origradio = null
|
||||
flags = FPRINT | TABLEPASS| CONDUCT | ONBELT
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
item_state = "radio"
|
||||
throwforce = 5
|
||||
w_class = 2.0
|
||||
@@ -1685,7 +1703,7 @@ eternal248: Found broken and buggy Z-levels 7-12, ended up leading to my discove
|
||||
throw_speed = 7
|
||||
throw_range = 15
|
||||
m_amt = 60
|
||||
var/color = "cargo"
|
||||
color = "cargo"
|
||||
|
||||
/obj/item/weapon/stamp/captain
|
||||
name = "captain's rubber stamp"
|
||||
@@ -1742,7 +1760,8 @@ eternal248: Found broken and buggy Z-levels 7-12, ended up leading to my discove
|
||||
w_class = 1
|
||||
throwforce = 2
|
||||
var/cigarcount = 6
|
||||
flags = ONBELT | TABLEPASS */
|
||||
flags = TABLEPASS
|
||||
slot_flags = SLOT_BELT*/
|
||||
|
||||
|
||||
/obj/item/weapon/mousetrap
|
||||
@@ -2042,12 +2061,19 @@ eternal248: Found broken and buggy Z-levels 7-12, ended up leading to my discove
|
||||
desc = "An appendix which appears to be inflamed."
|
||||
icon_state = "appendixinflamed"
|
||||
|
||||
/obj/item/weapon/megaphone
|
||||
name = "megaphone"
|
||||
desc = "A device used to project your voice. Loudly."
|
||||
icon = 'items.dmi'
|
||||
icon_state = "megaphone"
|
||||
var/cooldown = 0
|
||||
|
||||
/obj/item/weapon/flavor
|
||||
name = "bland flavoring packet"
|
||||
desc = "A sachet of flavoring, designed to be used with \"LiquidFood\" rations. The flavor is indeterminable."
|
||||
icon = 'food_ingredients.dmi'
|
||||
var/descriptor = "disturbingly beige" //Description shown to onlookers.
|
||||
var/color = "beige" //Color the icon should take on when this is applied. Also shown when it is mixed in.
|
||||
color = "beige" //Color the icon should take on when this is applied. Also shown when it is mixed in.
|
||||
var/newDesc = "It posesses a strange and unidentifiable taste. You try not to think to hard about it." //What gets pegged onto the description.
|
||||
|
||||
/obj/item/weapon/flavor/red
|
||||
|
||||
@@ -77,6 +77,135 @@ proc/countJob(rank)
|
||||
del(W)
|
||||
return null
|
||||
|
||||
/mob/living/carbon/human/proc/equip_to_appropriate_slot(obj/item/W)
|
||||
if(!W)
|
||||
return
|
||||
if(!ishuman(src))
|
||||
return
|
||||
|
||||
if(W.slot_flags & SLOT_BACK)
|
||||
if(!src.back)
|
||||
if( src.get_active_hand() == W )
|
||||
src.u_equip(W)
|
||||
src.back = W
|
||||
update_clothing()
|
||||
return
|
||||
|
||||
if(W.slot_flags & SLOT_ID)
|
||||
if(!src.wear_id)
|
||||
if( src.get_active_hand() == W )
|
||||
src.u_equip(W)
|
||||
src.wear_id = W
|
||||
update_clothing()
|
||||
return
|
||||
|
||||
if(W.slot_flags & SLOT_ICLOTHING)
|
||||
if(!src.w_uniform)
|
||||
if( src.get_active_hand() == W )
|
||||
src.u_equip(W)
|
||||
src.w_uniform = W
|
||||
update_clothing()
|
||||
return
|
||||
|
||||
if(W.slot_flags & SLOT_OCLOTHING)
|
||||
if(!src.wear_suit)
|
||||
if( src.get_active_hand() == W )
|
||||
src.u_equip(W)
|
||||
src.wear_suit = W
|
||||
update_clothing()
|
||||
return
|
||||
|
||||
if(W.slot_flags & SLOT_MASK)
|
||||
if(!src.wear_mask)
|
||||
if( src.get_active_hand() == W )
|
||||
src.u_equip(W)
|
||||
src.wear_mask = W
|
||||
update_clothing()
|
||||
return
|
||||
|
||||
if(W.slot_flags & SLOT_HEAD)
|
||||
if(!src.head)
|
||||
if( src.get_active_hand() == W )
|
||||
src.u_equip(W)
|
||||
src.head = W
|
||||
update_clothing()
|
||||
return
|
||||
|
||||
if(W.slot_flags & SLOT_FEET)
|
||||
if(!src.shoes)
|
||||
if( src.get_active_hand() == W )
|
||||
src.u_equip(W)
|
||||
src.shoes = W
|
||||
update_clothing()
|
||||
return
|
||||
|
||||
if(W.slot_flags & SLOT_GLOVES)
|
||||
if(!src.gloves)
|
||||
if( src.get_active_hand() == W )
|
||||
src.u_equip(W)
|
||||
src.gloves = W
|
||||
update_clothing()
|
||||
return
|
||||
|
||||
if(W.slot_flags & SLOT_EARS)
|
||||
if(!src.l_ear)
|
||||
if( src.get_active_hand() == W )
|
||||
src.u_equip(W)
|
||||
src.l_ear = W
|
||||
update_clothing()
|
||||
else if(!src.r_ear)
|
||||
if( src.get_active_hand() == W )
|
||||
src.u_equip(W)
|
||||
src.r_ear = W
|
||||
update_clothing()
|
||||
return
|
||||
|
||||
if(W.slot_flags & SLOT_EYES)
|
||||
if(!src.glasses)
|
||||
if( src.get_active_hand() == W )
|
||||
src.u_equip(W)
|
||||
src.glasses = W
|
||||
update_clothing()
|
||||
return
|
||||
|
||||
if(W.slot_flags & SLOT_BELT)
|
||||
if(!src.belt)
|
||||
if( src.get_active_hand() == W )
|
||||
src.u_equip(W)
|
||||
src.belt = W
|
||||
update_clothing()
|
||||
return
|
||||
|
||||
//Suit storage
|
||||
var/confirm
|
||||
if (wear_suit)
|
||||
if(wear_suit.allowed)
|
||||
if (istype(W, /obj/item/device/pda) || istype(W, /obj/item/weapon/pen))
|
||||
confirm = 1
|
||||
if (is_type_in_list(W, wear_suit.allowed))
|
||||
confirm = 1
|
||||
if(confirm)
|
||||
src.u_equip(W)
|
||||
src.s_store = W
|
||||
update_clothing()
|
||||
return
|
||||
|
||||
//Pockets
|
||||
if ( !( W.slot_flags & SLOT_DENYPOCKET ) )
|
||||
if(!src.l_store)
|
||||
if ( W.w_class <= 2 || ( W.slot_flags & SLOT_POCKET ) )
|
||||
u_equip(W)
|
||||
l_store = W
|
||||
update_clothing()
|
||||
return
|
||||
if(!src.r_store)
|
||||
if ( W.w_class <= 2 || ( W.slot_flags & SLOT_POCKET ) )
|
||||
u_equip(W)
|
||||
r_store = W
|
||||
update_clothing()
|
||||
return
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/equip_if_possible(obj/item/W, slot, del_on_fail = 1) // since byond doesn't seem to have pointers, this seems like the best way to do this :/
|
||||
//warning: icky code
|
||||
var/equipped = 0
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
name = "GPS"
|
||||
icon = 'device.dmi'
|
||||
icon_state = "pinoff"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT | ONBELT
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = 2.0
|
||||
item_state = "electronic"
|
||||
throw_speed = 4
|
||||
|
||||
+22
-85
@@ -77,7 +77,7 @@
|
||||
/atom/proc/add_hiddenprint(mob/living/M as mob)
|
||||
if(isnull(M)) return
|
||||
if(isnull(M.key)) return
|
||||
if (!( src.flags ) & 256)
|
||||
if (!( src.flags ) & FPRINT)
|
||||
return
|
||||
if (ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
@@ -102,7 +102,7 @@
|
||||
/atom/proc/add_fingerprint(mob/living/M as mob)
|
||||
if(isnull(M)) return
|
||||
if(isnull(M.key)) return
|
||||
if (!( flags ) & 256)
|
||||
if (!( src.flags ) & FPRINT)
|
||||
return
|
||||
//Smudge up dem prints some
|
||||
for(var/P in fingerprints)
|
||||
@@ -175,7 +175,7 @@
|
||||
if (!istype(M.dna, /datum/dna))
|
||||
M.dna = new /datum/dna(null)
|
||||
M.check_dna()
|
||||
if (!( src.flags ) & 256)
|
||||
if (!( src.flags ) & FPRINT)
|
||||
return 0
|
||||
if(!blood_DNA || !istype(blood_DNA, /list)) //if our list of DNA doesn't exist yet (or isn't a list) initialise it.
|
||||
blood_DNA = list()
|
||||
@@ -291,7 +291,7 @@
|
||||
|
||||
/atom/proc/clean_blood()
|
||||
|
||||
if (!flags & 256)
|
||||
if (!( src.flags ) & FPRINT)
|
||||
return
|
||||
if (blood_DNA )
|
||||
|
||||
@@ -1080,95 +1080,32 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
|
||||
var/mob/living/carbon/U = M
|
||||
U.swap_hand()
|
||||
|
||||
/*
|
||||
/atom/proc/get_global_map_pos()
|
||||
if(!islist(global_map) || isemptylist(global_map)) return
|
||||
var/cur_x = null
|
||||
var/cur_y = null
|
||||
var/list/y_arr = null
|
||||
for(cur_x=1,cur_x<=global_map.len,cur_x++)
|
||||
y_arr = global_map[cur_x]
|
||||
cur_y = y_arr.Find(src.z)
|
||||
if(cur_y)
|
||||
break
|
||||
// world << "X = [cur_x]; Y = [cur_y]"
|
||||
if(cur_x && cur_y)
|
||||
return list("x"=cur_x,"y"=cur_y)
|
||||
else
|
||||
return 0
|
||||
*/ //Don't touch this either. DMTG
|
||||
/atom/proc/checkpass(passflag)
|
||||
return pass_flags&passflag
|
||||
|
||||
|
||||
//Could not find object proc defines and this could almost be an atom level one.
|
||||
|
||||
/obj/proc/process()
|
||||
processing_objects.Remove(src)
|
||||
return 0
|
||||
|
||||
// Show a message to all mobs in sight of this one
|
||||
// This would be for visible actions by the src mob
|
||||
// message is the message output to anyone who can see e.g. "[src] does something!"
|
||||
// self_message (optional) is what the src mob sees e.g. "You do something!"
|
||||
// blind_message (optional) is what blind people will hear e.g. "You hear something!"
|
||||
|
||||
/*Really why was this in the click proc of all the places you could put it
|
||||
if (usr:a_intent == "help")
|
||||
// ------- YOU HAVE THE HELP INTENT SELECTED -------
|
||||
if(istype(src, /mob/living/carbon))
|
||||
// ------- YOUR TARGET IS LIVING CARBON CREATURE (NOT AI OR CYBORG OR SIMPLE ANIMAL) -------
|
||||
var/mob/living/carbon/C = src
|
||||
if(usr:mutations & HEAL)
|
||||
// ------- YOU ARE HUMAN, WITH THE HELP INTENT TARGETING A HUMAN AND HAVE THE 'HEAT' GENETIC MUTATION -------
|
||||
|
||||
if(C.stat != 2)
|
||||
// ------- THE PERSON YOU'RE TOUCHING IS NOT DEAD -------
|
||||
|
||||
var/t_him = "it"
|
||||
if (src.gender == MALE)
|
||||
t_him = "his"
|
||||
else if (src.gender == FEMALE)
|
||||
t_him = "her"
|
||||
var/u_him = "it"
|
||||
if (usr.gender == MALE)
|
||||
t_him = "him"
|
||||
else if (usr.gender == FEMALE)
|
||||
t_him = "her"
|
||||
|
||||
if(src != usr)
|
||||
usr.visible_message( \
|
||||
"\blue <i>[usr] places [u_him] palms on [src], healing [t_him]!</i>", \
|
||||
"\blue You place your palms on [src] and heal [t_him].", \
|
||||
)
|
||||
else
|
||||
usr.visible_message( \
|
||||
"\blue <i>[usr] places [u_him] palms on [u_him]self and heals.</i>", \
|
||||
"\blue You place your palms on yourself and heal.", \
|
||||
)
|
||||
|
||||
C.adjustOxyLoss(-25)
|
||||
C.adjustToxLoss(-25)
|
||||
|
||||
if(istype(C, /mob/living/carbon/human))
|
||||
// ------- YOUR TARGET IS HUMAN -------
|
||||
var/mob/living/carbon/human/H = C
|
||||
var/datum/organ/external/affecting = H.get_organ(check_zone(usr:zone_sel:selecting))
|
||||
if(affecting && affecting.heal_damage(25, 25))
|
||||
H.UpdateDamageIcon()
|
||||
else
|
||||
C.heal_organ_damage(25, 25)
|
||||
C.adjustCloneLoss(-25)
|
||||
C.stunned = max(0, C.stunned-5)
|
||||
C.paralysis = max(0, C.paralysis-5)
|
||||
C.stuttering = max(0, C.stuttering-5)
|
||||
C.drowsyness = max(0, C.drowsyness-5)
|
||||
C.weakened = max(0, C.weakened-5)
|
||||
usr:nutrition -= rand(1,10)
|
||||
usr.next_move = world.time + 6
|
||||
else
|
||||
// ------- PERSON YOU'RE TOUCHING IS ALREADY DEAD -------
|
||||
usr << "\red [src] is dead and can't be healed."
|
||||
return
|
||||
|
||||
// ------- IF YOU DON'T HAVE THE SILLY ABILITY ABOVE OR FAIL ON ANY OTHER CHECK, THEN YOU'RE CLICKING ON SOMETHING WITH AN EMPTY HAND. ATTACK_HAND IT IS THEN -------
|
||||
*/
|
||||
/mob/visible_message(var/message, var/self_message, var/blind_message)
|
||||
for(var/mob/M in viewers(src))
|
||||
var/msg = message
|
||||
if(self_message && M==src)
|
||||
msg = self_message
|
||||
M.show_message( msg, 1, blind_message, 2)
|
||||
|
||||
// Show a message to all mobs in sight of this atom
|
||||
// Use for objects performing visible actions
|
||||
// message is output to anyone who can see, e.g. "The [src] does something!"
|
||||
// blind_message (optional) is what blind people will hear e.g. "You hear something!"
|
||||
/atom/proc/visible_message(var/message, var/blind_message)
|
||||
for(var/mob/M in viewers(src))
|
||||
M.show_message( message, 1, blind_message, 2)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -85,13 +85,13 @@
|
||||
src.load_motd()
|
||||
src.load_rules()
|
||||
src.load_admins()
|
||||
investigate_reset()
|
||||
if (config.usealienwhitelist)
|
||||
load_alienwhitelist()
|
||||
if (config.usewhitelist)
|
||||
load_whitelist()
|
||||
LoadBansjob()
|
||||
src.update_status()
|
||||
|
||||
makepowernets()
|
||||
|
||||
sun = new /datum/sun()
|
||||
@@ -196,4 +196,4 @@
|
||||
/obj/effect/decal/point/point()
|
||||
set src in oview()
|
||||
set hidden = 1
|
||||
return
|
||||
return
|
||||
@@ -11,7 +11,8 @@
|
||||
item_state = "flashbang"
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
flags = FPRINT | TABLEPASS | ONBELT | USEDELAY
|
||||
flags = FPRINT | TABLEPASS | USEDELAY
|
||||
slot_flags = SLOT_BELT
|
||||
var/datum/effect/effect/system/bad_smoke_spread/smoke
|
||||
|
||||
/obj/item/weapon/mustardbomb
|
||||
@@ -25,7 +26,8 @@
|
||||
item_state = "flashbang"
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
flags = FPRINT | TABLEPASS | CONDUCT | ONBELT
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
var/datum/effect/effect/system/mustard_gas_spread/mustard_gas
|
||||
|
||||
/obj/item/weapon/smokebomb/New()
|
||||
|
||||
+1
-1
@@ -1220,7 +1220,7 @@
|
||||
src.temphtml += text("Data: <font color='blue'>[]</FONT><BR>", src.buffer1)
|
||||
src.temphtml += text("By: <font color='blue'>[]</FONT><BR>", src.buffer1owner)
|
||||
src.temphtml += text("Label: <font color='blue'>[]</FONT><BR>", src.buffer1label)
|
||||
if (src.connected.occupant && !(src.connected.occupant.mutations & HUSK)) src.temphtml += text("Save : <A href='?src=\ref[];b1addui=1'>UI</A> - <A href='?src=\ref[];b1adduiue=1'>UI+UE</A> - <A href='?src=\ref[];b1addse=1'>SE</A><BR>", src, src, src)
|
||||
if (src.connected.occupant && !(src.connected.occupant.mutations & NOCLONE)) src.temphtml += text("Save : <A href='?src=\ref[];b1addui=1'>UI</A> - <A href='?src=\ref[];b1adduiue=1'>UI+UE</A> - <A href='?src=\ref[];b1addse=1'>SE</A><BR>", src, src, src)
|
||||
if (src.buffer1) src.temphtml += text("Transfer to: <A href='?src=\ref[];b1transfer=1'>Occupant</A> - <A href='?src=\ref[];b1injector=1'>Injector</A><BR>", src, src)
|
||||
//if (src.buffer1) src.temphtml += text("<A href='?src=\ref[];b1iso=1'>Isolate Block</A><BR>", src)
|
||||
if (src.buffer1) src.temphtml += "Disk: <A href='?src=\ref[src];save_disk=1'>Save To</a> | <A href='?src=\ref[src];load_disk=1'>Load From</a><br>"
|
||||
|
||||
@@ -840,22 +840,23 @@ ________________________________________________________________________________
|
||||
U << "\red Procedure interrupted. Protocol terminated."
|
||||
return
|
||||
else if(istype(I, /obj/item/weapon/disk/tech_disk))//If it's a data disk, we want to copy the research on to the suit.
|
||||
if(I:stored)//If it has something on it.
|
||||
var/obj/item/weapon/disk/tech_disk/T = I
|
||||
if(T.stored)//If it has something on it.
|
||||
U << "Research information detected, processing..."
|
||||
if(do_after(U,s_delay))
|
||||
for(var/datum/tech/current_data in stored_research)
|
||||
if(current_data.id==I:stored.id)
|
||||
if(current_data.level<I:stored.level)
|
||||
current_data.level=I:stored.level
|
||||
if(current_data.id==T.stored.id)
|
||||
if(current_data.level<T.stored.level)
|
||||
current_data.level=T.stored.level
|
||||
break
|
||||
I:stored = null
|
||||
T.stored = null
|
||||
U << "\blue Data analyzed and updated. Disk erased."
|
||||
else
|
||||
U << "\red <b>ERROR</b>: \black Procedure interrupted. Process terminated."
|
||||
else
|
||||
I.loc = src
|
||||
t_disk = I
|
||||
U << "\blue You slot \the [I] into \the [src]."
|
||||
T.loc = src
|
||||
t_disk = T
|
||||
U << "\blue You slot \the [T] into \the [src]."
|
||||
return
|
||||
..()
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
|
||||
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if((air_group && blobtype != "Shield") || (height==0)) return 1
|
||||
if(istype(mover) && mover.checkpass(PASSBLOB)) return 1
|
||||
if(istype(mover) && mover.pass_flags&PASSBLOB) return 1
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
@@ -3,11 +3,13 @@
|
||||
desc = "An arcane weapon wielded by the followers of Nar-Sie"
|
||||
icon_state = "cultblade"
|
||||
item_state = "cultblade"
|
||||
flags = FPRINT | ONBELT | TABLEPASS
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
force = 40
|
||||
throwforce = 10
|
||||
|
||||
|
||||
|
||||
/obj/item/clothing/head/culthood
|
||||
name = "cult hood"
|
||||
icon_state = "culthood"
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
|
||||
/obj/machinery/nuclearbomb/Topic(href, href_list)
|
||||
..()
|
||||
if (usr.stat || usr.restrained())
|
||||
if (!usr.canmove || usr.stat || usr.restrained())
|
||||
return
|
||||
if (!ishuman(usr))
|
||||
usr << "\red You don't have the dexterity to do this!"
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
name = "pinpointer"
|
||||
icon = 'device.dmi'
|
||||
icon_state = "pinoff"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT | ONBELT
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = 2.0
|
||||
item_state = "electronic"
|
||||
throw_speed = 4
|
||||
|
||||
@@ -5,7 +5,8 @@
|
||||
item_state = "electronic"
|
||||
desc = "A fragment of the legendary treasure known simply as the 'Soul Stone'. The shard still flickers with a fraction of the full artefacts power."
|
||||
w_class = 1.0
|
||||
flags = FPRINT | TABLEPASS | ONBELT
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
origin_tech = "bluespace=4;materials=4"
|
||||
var/imprinted = "empty"
|
||||
|
||||
|
||||
+73
-73
@@ -1,84 +1,84 @@
|
||||
/var/const
|
||||
access_security = 1
|
||||
access_brig = 2
|
||||
access_armory = 3
|
||||
access_forensics_lockers= 4
|
||||
access_medical = 5
|
||||
access_morgue = 6
|
||||
access_tox = 7
|
||||
access_tox_storage = 8
|
||||
access_genetics = 9
|
||||
access_engine = 10
|
||||
access_engine_equip= 11
|
||||
access_maint_tunnels = 12
|
||||
access_external_airlocks = 13
|
||||
access_emergency_storage = 14
|
||||
access_change_ids = 15
|
||||
access_ai_upload = 16
|
||||
access_teleporter = 17
|
||||
access_eva = 18
|
||||
access_heads = 19
|
||||
access_captain = 20
|
||||
access_all_personal_lockers = 21
|
||||
access_chapel_office = 22
|
||||
access_tech_storage = 23
|
||||
access_atmospherics = 24
|
||||
access_bar = 25
|
||||
access_janitor = 26
|
||||
access_crematorium = 27
|
||||
access_kitchen = 28
|
||||
access_robotics = 29
|
||||
access_rd = 30
|
||||
access_cargo = 31
|
||||
access_construction = 32
|
||||
access_chemistry = 33
|
||||
access_cargo_bot = 34
|
||||
access_hydroponics = 35
|
||||
access_manufacturing = 36
|
||||
access_library = 37
|
||||
access_lawyer = 38
|
||||
access_virology = 39
|
||||
access_cmo = 40
|
||||
access_qm = 41
|
||||
access_court = 42
|
||||
access_clown = 43
|
||||
access_mime = 44
|
||||
access_surgery = 45
|
||||
access_theatre = 46
|
||||
access_research = 47
|
||||
access_mining = 48
|
||||
access_mining_office = 49 //not in use
|
||||
access_mailsorting = 50
|
||||
access_mint = 51
|
||||
access_mint_vault = 52
|
||||
access_heads_vault = 53
|
||||
access_mining_station = 54
|
||||
access_xenobiology = 55
|
||||
access_ce = 56
|
||||
access_hop = 57
|
||||
access_hos = 58
|
||||
access_RC_announce = 59 //Request console announcements
|
||||
access_keycard_auth = 60 //Used for events which require at least two people to confirm them
|
||||
access_tcomsat = 61 // has access to the entire telecomms satellite / machinery
|
||||
/var/const/access_security = 1
|
||||
/var/const/access_brig = 2
|
||||
/var/const/access_armory = 3
|
||||
/var/const/access_forensics_lockers= 4
|
||||
/var/const/access_medical = 5
|
||||
/var/const/access_morgue = 6
|
||||
/var/const/access_tox = 7
|
||||
/var/const/access_tox_storage = 8
|
||||
/var/const/access_genetics = 9
|
||||
/var/const/access_engine = 10
|
||||
/var/const/access_engine_equip= 11
|
||||
/var/const/access_maint_tunnels = 12
|
||||
/var/const/access_external_airlocks = 13
|
||||
/var/const/access_emergency_storage = 14
|
||||
/var/const/access_change_ids = 15
|
||||
/var/const/access_ai_upload = 16
|
||||
/var/const/access_teleporter = 17
|
||||
/var/const/access_eva = 18
|
||||
/var/const/access_heads = 19
|
||||
/var/const/access_captain = 20
|
||||
/var/const/access_all_personal_lockers = 21
|
||||
/var/const/access_chapel_office = 22
|
||||
/var/const/access_tech_storage = 23
|
||||
/var/const/access_atmospherics = 24
|
||||
/var/const/access_bar = 25
|
||||
/var/const/access_janitor = 26
|
||||
/var/const/access_crematorium = 27
|
||||
/var/const/access_kitchen = 28
|
||||
/var/const/access_robotics = 29
|
||||
/var/const/access_rd = 30
|
||||
/var/const/access_cargo = 31
|
||||
/var/const/access_construction = 32
|
||||
/var/const/access_chemistry = 33
|
||||
/var/const/access_cargo_bot = 34
|
||||
/var/const/access_hydroponics = 35
|
||||
/var/const/access_manufacturing = 36
|
||||
/var/const/access_library = 37
|
||||
/var/const/access_lawyer = 38
|
||||
/var/const/access_virology = 39
|
||||
/var/const/access_cmo = 40
|
||||
/var/const/access_qm = 41
|
||||
/var/const/access_court = 42
|
||||
/var/const/access_clown = 43
|
||||
/var/const/access_mime = 44
|
||||
/var/const/access_surgery = 45
|
||||
/var/const/access_theatre = 46
|
||||
/var/const/access_research = 47
|
||||
/var/const/access_mining = 48
|
||||
/var/const/access_mining_office = 49 //not in use
|
||||
/var/const/access_mailsorting = 50
|
||||
/var/const/access_mint = 51
|
||||
/var/const/access_mint_vault = 52
|
||||
/var/const/access_heads_vault = 53
|
||||
/var/const/access_mining_station = 54
|
||||
/var/const/access_xenobiology = 55
|
||||
/var/const/access_ce = 56
|
||||
/var/const/access_hop = 57
|
||||
/var/const/access_hos = 58
|
||||
/var/const/access_RC_announce = 59 //Request console announcements
|
||||
/var/const/access_keycard_auth = 60 //Used for events which require at least two people to confirm them
|
||||
/var/const/access_tcomsat = 61 // has access to the entire telecomms satellite / machinery
|
||||
|
||||
//BEGIN CENTCOM ACCESS
|
||||
/*Should leave plenty of room if we need to add more access levels.
|
||||
Mostly for admin fun times.*/
|
||||
access_cent_general = 101//General facilities.
|
||||
access_cent_thunder = 102//Thunderdome.
|
||||
access_cent_specops = 103//Special Ops.
|
||||
access_cent_medical = 104//Medical/Research
|
||||
access_cent_living = 105//Living quarters.
|
||||
access_cent_storage = 106//Generic storage areas.
|
||||
access_cent_teleporter = 107//Teleporter.
|
||||
access_cent_creed = 108//Creed's office.
|
||||
access_cent_captain = 109//Captain's office/ID comp/AI.
|
||||
/var/const/access_cent_general = 101//General facilities.
|
||||
/var/const/access_cent_thunder = 102//Thunderdome.
|
||||
/var/const/access_cent_specops = 103//Special Ops.
|
||||
/var/const/access_cent_medical = 104//Medical/Research
|
||||
/var/const/access_cent_living = 105//Living quarters.
|
||||
/var/const/access_cent_storage = 106//Generic storage areas.
|
||||
/var/const/access_cent_teleporter = 107//Teleporter.
|
||||
/var/const/access_cent_creed = 108//Creed's office.
|
||||
/var/const/access_cent_captain = 109//Captain's office/ID comp/AI.
|
||||
|
||||
//The Syndicate
|
||||
access_syndicate = 150//General Syndicate Access
|
||||
/var/const/access_syndicate = 150//General Syndicate Access
|
||||
|
||||
//MONEY
|
||||
access_crate_cash = 200
|
||||
/var/const/access_crate_cash = 200
|
||||
|
||||
/obj/var/list/req_access = null
|
||||
/obj/var/req_access_txt = "0"
|
||||
@@ -233,7 +233,7 @@
|
||||
if("Chef")
|
||||
return list(access_kitchen)
|
||||
if("Roboticist")
|
||||
return list(access_robotics, access_tech_storage, access_maint_tunnels)
|
||||
return list(access_robotics, access_tech_storage, access_maint_tunnels, access_morgue) //As a job that handles so many corpses, it makes sense for them to have morgue access.
|
||||
if("Cargo Technician")
|
||||
return list(access_maint_tunnels, access_cargo, access_cargo_bot, access_mailsorting)
|
||||
if("Shaft Miner")
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/backpack(H), H.slot_back)
|
||||
H.equip_if_possible(new /obj/item/clothing/under/rank/atmospheric_technician(H), H.slot_w_uniform)
|
||||
H.equip_if_possible(new /obj/item/clothing/shoes/black(H), H.slot_shoes)
|
||||
H.equip_if_possible(new /obj/item/device/pda/engineering(H), H.slot_l_store)
|
||||
H.equip_if_possible(new /obj/item/device/pda/atmos(H), H.slot_l_store)
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/belt/utility/atmostech/(H), H.slot_belt)
|
||||
if(H.backbag == 1)
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/box/engineer(H), H.slot_r_hand)
|
||||
|
||||
@@ -87,10 +87,10 @@
|
||||
if(H.backbag == 2) H.equip_if_possible(new /obj/item/weapon/storage/backpack(H), H.slot_back)
|
||||
if(H.backbag == 3) H.equip_if_possible(new /obj/item/weapon/storage/backpack/satchel(H), H.slot_back)
|
||||
if(H.backbag == 4) H.equip_if_possible(new /obj/item/weapon/storage/backpack/satchel_chem(H), H.slot_back)
|
||||
H.equip_if_possible(new /obj/item/device/radio/headset/headset_medsci(H), H.slot_ears)
|
||||
H.equip_if_possible(new /obj/item/device/radio/headset/headset_med(H), H.slot_ears)
|
||||
H.equip_if_possible(new /obj/item/clothing/under/rank/chemist(H), H.slot_w_uniform)
|
||||
H.equip_if_possible(new /obj/item/clothing/shoes/white(H), H.slot_shoes)
|
||||
H.equip_if_possible(new /obj/item/device/pda/medical(H), H.slot_belt)
|
||||
H.equip_if_possible(new /obj/item/device/pda/chemist(H), H.slot_belt)
|
||||
H.equip_if_possible(new /obj/item/clothing/suit/storage/labcoat/chemist(H), H.slot_wear_suit)
|
||||
return 1
|
||||
|
||||
@@ -115,7 +115,7 @@
|
||||
if(H.backbag == 4) H.equip_if_possible(new /obj/item/weapon/storage/backpack/satchel_gen(H), H.slot_back)
|
||||
H.equip_if_possible(new /obj/item/clothing/under/rank/geneticist(H), H.slot_w_uniform)
|
||||
H.equip_if_possible(new /obj/item/clothing/shoes/white(H), H.slot_shoes)
|
||||
H.equip_if_possible(new /obj/item/device/pda/medical(H), H.slot_belt)
|
||||
H.equip_if_possible(new /obj/item/device/pda/geneticist(H), H.slot_belt)
|
||||
H.equip_if_possible(new /obj/item/clothing/suit/storage/labcoat/genetics(H), H.slot_wear_suit)
|
||||
H.equip_if_possible(new /obj/item/device/flashlight/pen(H), H.slot_s_store)
|
||||
return 1
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
/obj/machinery/optable/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(air_group || (height==0)) return 1
|
||||
|
||||
if(istype(mover) && mover.checkpass(PASSTABLE))
|
||||
if(istype(mover) && mover.pass_flags&PASSTABLE)
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
@@ -105,7 +105,7 @@
|
||||
icon_state = "table2-active"
|
||||
return 1
|
||||
if(victim)
|
||||
victim.update_lying()
|
||||
victim.update_clothing()
|
||||
victim = null
|
||||
if(updatesicon)
|
||||
icon_state = "table2-idle"
|
||||
@@ -134,7 +134,7 @@
|
||||
if(updatesicon)
|
||||
icon_state = "table2-active"
|
||||
src.victim = M
|
||||
M.update_lying()
|
||||
M.update_clothing()
|
||||
processing_objects.Add(src)
|
||||
del(W)
|
||||
return
|
||||
|
||||
@@ -355,6 +355,13 @@ text("<A href='?src=\ref[src];operation=oddbutton'>[src.oddbutton ? "Yes" : "No"
|
||||
/obj/item/weapon/bucket_sensor/attackby(var/obj/item/W, mob/user as mob)
|
||||
..()
|
||||
if(istype(W, /obj/item/robot_parts/l_arm) || istype(W, /obj/item/robot_parts/r_arm))
|
||||
var/cleanbots = 0
|
||||
for(var/obj/machinery/bot/cleanbot in world)
|
||||
cleanbots++
|
||||
if(cleanbots >= 6) //For some reason it starts at 4, so max limit is actually 2.
|
||||
user << "\red The station frequencies can't handle anymore cleanbots!" //TOO MANY GODDAMN CLEANBOTS
|
||||
cleanbots = 0
|
||||
return
|
||||
var/obj/machinery/bot/cleanbot/A = new /obj/machinery/bot/cleanbot
|
||||
A.loc = get_turf(src.loc)
|
||||
A.name = src.created_name
|
||||
|
||||
@@ -417,6 +417,7 @@
|
||||
log_admin("ATTACK: [G.assailant] ([G.assailant.ckey]) smashed [G.affecting] ([G.affecting.ckey]) on a table.")
|
||||
message_admins("ATTACK: [G.assailant] ([G.assailant.ckey]) smashed [G.affecting] ([G.affecting.ckey]) on a table.")
|
||||
log_attack("<font color='red'>[G.assailant] ([G.assailant.ckey]) smashed [G.affecting] ([G.affecting.ckey]) on a table.</font>")
|
||||
|
||||
if(prob(25))
|
||||
add_blood(G.affecting)
|
||||
affecting.take_damage(rand(10,15), 0)
|
||||
@@ -425,20 +426,20 @@
|
||||
affecting.take_damage(rand(0,5), 0) //Extra damage
|
||||
if(dented)
|
||||
G.assailant.visible_message("\red \The [G.assailant] smashes \the [H]'s head on \the [src] with enough force to further deform \the [src]!\nYou wish you could unhear that sound.",\
|
||||
"\red You smash \the [H]'s head on \the [src] with enough force to leave another dent!\n[prob(50)?"That was a satisfying noise." : "That sound will haunt your nightmares"]",\
|
||||
"\red You smash \the [H]'s head on \the [src] with enough force to leave another dent!\n\black [prob(50)?"That was a satisfying noise." : "That sound will haunt your nightmares"]",\
|
||||
"\red You hear the nauseating crunch of bone and gristle on solid metal and the squeal of said metal deforming.")
|
||||
else
|
||||
dented = 1
|
||||
G.assailant.visible_message("\red \The [G.assailant] smashes \the [H]'s head on \the [src] so hard it left a dent!\nYou wish you could unhear that sound.",\
|
||||
"\red You smash \the [H]'s head on \the [src] with enough force to leave a dent!\n[prob(5)?"That was a satisfying noise." : "That sound will haunt your nightmares"]",\
|
||||
"\red You smash \the [H]'s head on \the [src] with enough force to leave a dent!\n\black [prob(5)?"That was a satisfying noise." : "That sound will haunt your nightmares"]",\
|
||||
"\red You hear the nauseating crunch of bone and gristle on solid metal and the squeal of said metal deforming.")
|
||||
dented++
|
||||
else if(prob(50))
|
||||
G.assailant.visible_message("\red [G.assailant] smashes \the [H]'s head on \the [src], [H.gender == MALE? "his" : "her"] bone and cartilage making a loud crunch!",\
|
||||
"\red You smash \the [H]'s head on \the [src], [H.gender == MALE? "his" : "her"] bone and cartilage making a loud crunch!",\
|
||||
G.assailant.visible_message("\red [G.assailant] smashes \the [H]'s head on \the [src], [H.get_gender_form("its")] bone and cartilage making a loud crunch!",\
|
||||
"\red You smash \the [H]'s head on \the [src], [H.get_gender_form("its")] bone and cartilage making a loud crunch!",\
|
||||
"\red You hear the nauseating crunch of bone and gristle on solid metal, the noise echoing through the room.")
|
||||
else
|
||||
G.assailant.visible_message("\red [G.assailant] smashes \the [H]'s head on \the [src], [H.gender == MALE? "his" : "her"] nose smashed and face bloodied!",\
|
||||
"\red You smash \the [H]'s head on \the [src], [H.gender == MALE? "his" : "her"] nose smashed and face bloodied!",\
|
||||
G.assailant.visible_message("\red [G.assailant] smashes \the [H]'s head on \the [src], [H.get_gender_form("its")] nose smashed and face bloodied!",\
|
||||
"\red You smash \the [H]'s head on \the [src], [H.get_gender_form("its")] nose smashed and face bloodied!",\
|
||||
"\red You hear the nauseating crunch of bone and gristle on solid metal and the gurgling gasp of someone who is trying to breathe through their own blood.")
|
||||
else
|
||||
affecting.take_damage(rand(5,10), 0)
|
||||
|
||||
@@ -397,7 +397,7 @@
|
||||
// if ((!subject.ckey) || (!subject.client))
|
||||
// src.temp = "Error: Mental interface failure."
|
||||
// return
|
||||
if (subject.mutations & HUSK)
|
||||
if (subject.mutations & NOCLONE)
|
||||
src.temp = "Error: Mental interface failure."
|
||||
return
|
||||
if (!isnull(find_record(subject.ckey)))
|
||||
|
||||
@@ -161,7 +161,7 @@ Pod/Blast Doors computer
|
||||
M.fields["id"] = G.fields["id"]
|
||||
S.fields["name"] = G.fields["name"]
|
||||
S.fields["id"] = G.fields["id"]
|
||||
if (H.gender == FEMALE)
|
||||
if(H.gender == FEMALE)
|
||||
G.fields["sex"] = "Female"
|
||||
else
|
||||
G.fields["sex"] = "Male"
|
||||
@@ -171,21 +171,58 @@ Pod/Blast Doors computer
|
||||
G.fields["m_stat"] = "Stable"
|
||||
M.fields["b_type"] = text("[]", H.dna.b_type)
|
||||
M.fields["b_dna"] = H.dna.unique_enzymes
|
||||
M.fields["mi_dis"] = "None"
|
||||
M.fields["mi_dis_d"] = "No minor disabilities have been declared."
|
||||
M.fields["ma_dis"] = "None"
|
||||
M.fields["ma_dis_d"] = "No major disabilities have been diagnosed."
|
||||
|
||||
var/minor_dis = null
|
||||
if(H.disabilities)
|
||||
if(H.disabilities & 1)
|
||||
minor_dis += "Myopia, "
|
||||
if(H.disabilities & 4)
|
||||
minor_dis += "Persistant Cough, "
|
||||
if(H.disabilities & 16)
|
||||
minor_dis += "Stuttering, "
|
||||
if(minor_dis)
|
||||
M.fields["mi_dis"] = minor_dis
|
||||
else
|
||||
M.fields["mi_dis"] = "None"
|
||||
|
||||
M.fields["mi_dis_d"] = "No additional minor disability notes."
|
||||
|
||||
var/major_dis = null
|
||||
if(H.disabilities)
|
||||
if(H.disabilities & 2)
|
||||
major_dis += "Epilepsy, "
|
||||
if(H.disabilities & 8)
|
||||
major_dis += "Tourette's Syndrome, "
|
||||
if(H.disabilities & 32)
|
||||
major_dis += "Deafness, "
|
||||
if(major_dis)
|
||||
M.fields["ma_dis"] = major_dis
|
||||
else
|
||||
M.fields["ma_dis"] = "None"
|
||||
|
||||
M.fields["ma_dis_d"] = "No additional major disability notes."
|
||||
M.fields["alg"] = "None"
|
||||
M.fields["alg_d"] = "No allergies have been detected in this patient."
|
||||
M.fields["alg_d"] = "No additional allergy notes."
|
||||
M.fields["cdi"] = "None"
|
||||
M.fields["cdi_d"] = "No diseases have been diagnosed at the moment."
|
||||
M.fields["notes"] = "No notes."
|
||||
M.fields["cdi_d"] = "No additional disease notes."
|
||||
|
||||
if(H.med_record && !jobban_isbanned(H, "Records"))
|
||||
M.fields["notes"] = H.med_record
|
||||
else
|
||||
M.fields["notes"] = "No notes found."
|
||||
|
||||
S.fields["criminal"] = "None"
|
||||
S.fields["mi_crim"] = "None"
|
||||
S.fields["mi_crim_d"] = "No minor crime convictions."
|
||||
S.fields["ma_crim"] = "None"
|
||||
S.fields["ma_crim_d"] = "No major crime convictions."
|
||||
S.fields["notes"] = "No notes."
|
||||
|
||||
if(H.sec_record && !jobban_isbanned(H, "Records"))
|
||||
S.fields["notes"] = H.sec_record
|
||||
else
|
||||
S.fields["notes"] = "No notes."
|
||||
|
||||
|
||||
|
||||
//Begin locked reporting
|
||||
L.fields["name"] = H.real_name
|
||||
|
||||
@@ -133,7 +133,7 @@ for reference:
|
||||
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)//So bullets will fly over and stuff.
|
||||
if(air_group || (height==0))
|
||||
return 1
|
||||
if(istype(mover) && mover.checkpass(PASSTABLE))
|
||||
if(istype(mover) && mover.pass_flags&PASSTABLE)
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
@@ -260,7 +260,7 @@ for reference:
|
||||
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)//So bullets will fly over and stuff.
|
||||
if(air_group || (height==0))
|
||||
return 1
|
||||
if(istype(mover) && mover.checkpass(PASSTABLE))
|
||||
if(istype(mover) && mover.pass_flags&PASSTABLE)
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
|
||||
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(air_group) return 0
|
||||
if(istype(mover) && mover.checkpass(PASSGLASS))
|
||||
if(istype(mover) && mover.pass_flags&PASSGLASS)
|
||||
return !opacity
|
||||
return !density
|
||||
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
return
|
||||
|
||||
/obj/machinery/door/window/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(istype(mover) && mover.checkpass(PASSGLASS))
|
||||
if(istype(mover) && mover.pass_flags & PASSGLASS)
|
||||
return 1
|
||||
if(get_dir(loc, target) == dir) //Make sure looking at appropriate border
|
||||
if(air_group) return 0
|
||||
@@ -67,7 +67,7 @@
|
||||
return 1
|
||||
|
||||
/obj/machinery/door/window/CheckExit(atom/movable/mover as mob|obj, turf/target as turf)
|
||||
if(istype(mover) && mover.checkpass(PASSGLASS))
|
||||
if(istype(mover) && mover.pass_flags & PASSGLASS)
|
||||
return 1
|
||||
if(get_dir(loc, target) == dir)
|
||||
return !density
|
||||
|
||||
@@ -44,6 +44,7 @@ Possible to do for anyone motivated enough:
|
||||
if(!(stat & NOPOWER)&&user.eyeobj.loc==src.loc)//If the projector has power and client eye is on it.
|
||||
if(!hologram)//If there is not already a hologram.
|
||||
create_holo(user)//Create one.
|
||||
user.current = src
|
||||
for(var/mob/M in viewers())
|
||||
M.show_message("A holographic image of [user] flicks to life right before your eyes!",1)
|
||||
else
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
/obj/machinery/pipedispenser/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
if(unwrenched)
|
||||
if(unwrenched || !usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
|
||||
usr << browse(null, "window=pipedispenser")
|
||||
return
|
||||
usr.machine = src
|
||||
@@ -135,6 +135,9 @@
|
||||
usr.machine = src
|
||||
src.add_fingerprint(usr)
|
||||
if(href_list["dmake"])
|
||||
if(unwrenched || !usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
|
||||
usr << browse(null, "window=pipedispenser")
|
||||
return
|
||||
if(!wait)
|
||||
var/p_type = text2num(href_list["dmake"])
|
||||
var/obj/structure/disposalconstruct/C = new (src.loc)
|
||||
|
||||
@@ -475,7 +475,7 @@
|
||||
/obj/machinery/shieldwall/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(air_group || (height==0)) return 1
|
||||
|
||||
if(istype(mover) && mover.checkpass(PASSGLASS))
|
||||
if(istype(mover) && mover.pass_flags&PASSGLASS)
|
||||
return prob(20)
|
||||
else
|
||||
if (istype(mover, /obj/item/projectile))
|
||||
|
||||
@@ -1,151 +0,0 @@
|
||||
/obj/machinery/sink
|
||||
name = "sink"
|
||||
icon = 'device.dmi'
|
||||
icon_state = "sink"
|
||||
desc = "A sink used for washing one's hands and face."
|
||||
anchored = 1
|
||||
var/busy = 0 //Something's being washed at the moment
|
||||
var/mode = 0 //0 == fill, 1 == pour
|
||||
|
||||
|
||||
New()
|
||||
..()
|
||||
verbs += /obj/machinery/sink/proc/mode_pour
|
||||
|
||||
attack_hand(mob/M as mob)
|
||||
if(isrobot(M) || isAI(M))
|
||||
return
|
||||
|
||||
if(busy)
|
||||
M << "\red Someone's already washing something here."
|
||||
return
|
||||
M << "\blue You start washing up."
|
||||
|
||||
busy = 1
|
||||
if(do_after(M,40))
|
||||
M.clean_blood()
|
||||
if(istype(M, /mob/living/carbon))
|
||||
var/mob/living/carbon/C = M
|
||||
C.clean_blood()
|
||||
/*
|
||||
if(C.r_hand)
|
||||
C.r_hand.clean_blood() // The hand you attack with is empty anyway, the other one should not be washed while doing this.
|
||||
if(C.l_hand)
|
||||
C.l_hand.clean_blood()
|
||||
|
||||
if(C.wear_mask)
|
||||
C.wear_mask.clean_blood() //- NOPE, Washing machine -Errorage
|
||||
*/
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
/*if(C:w_uniform)
|
||||
C:w_uniform.clean_blood() //- NOPE, Washing machine -Errorage
|
||||
if(C:wear_suit)
|
||||
C:wear_suit.clean_blood() //- NOPE, Washing machine -Errorage
|
||||
if(C:shoes)
|
||||
C:shoes.clean_blood()*/ //- NOPE, Washing machine -Errorage
|
||||
if(C:gloves)
|
||||
C:gloves.clean_blood()
|
||||
/*if(C:head)
|
||||
C:head.clean_blood()*/ //- NOPE, Washing machine -Errorage
|
||||
for(var/mob/V in viewers(src, null))
|
||||
V.show_message(text("\blue [M] washes up using \the [src]."))
|
||||
busy = 0
|
||||
|
||||
proc/mode_pour()
|
||||
set name = "Mode -> Pour"
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
|
||||
mode = 1
|
||||
verbs -= /obj/machinery/sink/proc/mode_pour
|
||||
verbs += /obj/machinery/sink/proc/mode_fill
|
||||
usr << "You will now pour reagents down \the [src]."
|
||||
|
||||
proc/mode_fill()
|
||||
set name = "Mode -> Fill"
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
|
||||
mode = 0
|
||||
verbs -= /obj/machinery/sink/proc/mode_fill
|
||||
verbs += /obj/machinery/sink/proc/mode_pour
|
||||
usr << "You will now fill your container from the faucet."
|
||||
|
||||
attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
if(busy)
|
||||
user << "\red Someone's already washing something here."
|
||||
return
|
||||
|
||||
if (istype(O, /obj/item/weapon/reagent_containers/glass/bucket))
|
||||
O:reagents.add_reagent("water", 70)
|
||||
user.visible_message( \
|
||||
"\blue [user] fills the [O] using the [src].", \
|
||||
"\blue You fill the [O] using the [src].")
|
||||
return
|
||||
|
||||
if (istype(O, /obj/item/weapon/reagent_containers/glass) || istype(O,/obj/item/weapon/reagent_containers/food/drinks))
|
||||
if(!mode)
|
||||
// fill
|
||||
if(O.reagents.total_volume < O.reagents.maximum_volume)
|
||||
O:reagents.add_reagent("water", 10)
|
||||
user.visible_message( \
|
||||
"\blue [user] fills the [O] using the [src].", \
|
||||
"\blue You fill the [O] using the [src].")
|
||||
else
|
||||
user.visible_message( \
|
||||
"\blue [user] spills water out of the overflowing [O] into the [src].", \
|
||||
"\blue You spill water out of the overflowing [O] into the [src].")
|
||||
else
|
||||
// pour
|
||||
if(O.reagents.total_volume > 0)
|
||||
O.reagents.clear_reagents()
|
||||
user.visible_message( \
|
||||
"\blue [user] pours the contents of \the [O] into \the [src].", \
|
||||
"\blue You pour the contents of \the [O] into \the [src].")
|
||||
else
|
||||
user << "\The [O] is empty."
|
||||
return
|
||||
else if (istype(O, /obj/item/weapon/melee/baton))
|
||||
var/obj/item/weapon/melee/baton/B = O
|
||||
if (B.charges > 0 && B.status == 1)
|
||||
flick("baton_active", src)
|
||||
user.Stun(10)
|
||||
user.stuttering = 10
|
||||
user.Weaken(10)
|
||||
if(isrobot(user))
|
||||
var/mob/living/silicon/robot/R = user
|
||||
R.cell.charge -= 20
|
||||
else
|
||||
B.charges--
|
||||
user.visible_message( \
|
||||
"[user] was stunned by his wet [O].", \
|
||||
"\red You have wet \the [O], it shocks you!")
|
||||
return
|
||||
|
||||
var/obj/item/I = O
|
||||
if(!I || !istype(I,/obj/item)) return
|
||||
|
||||
usr << "\blue You start washing up."
|
||||
|
||||
busy = 1
|
||||
if(do_after(user,40))
|
||||
if(!I) return //Item's been destroyed while washing
|
||||
|
||||
O.clean_blood()
|
||||
user.visible_message( \
|
||||
"\blue [user] washes \a [I] using \the [src].", \
|
||||
"\blue You wash \a [I] using \the [src].")
|
||||
busy = 0
|
||||
|
||||
shower
|
||||
name = "Shower"
|
||||
desc = "This is a shower. Useful for cleaning."
|
||||
icon_state = "shower"
|
||||
|
||||
kitchen
|
||||
name = "Kitchen Sink"
|
||||
icon_state = "sink_alt"
|
||||
|
||||
kitchen2
|
||||
name = "Kitchen Sink"
|
||||
icon_state = "sink_alt2"
|
||||
@@ -795,7 +795,7 @@ var/list/sacrificed = list()
|
||||
return fizzle()
|
||||
cultist.loc = src.loc
|
||||
cultist.lying = 1
|
||||
cultist.update_lying()
|
||||
cultist.update_clothing()
|
||||
for(var/mob/living/carbon/human/C in orange(1,src))
|
||||
if(iscultist(C))
|
||||
C.say("N'ath reth sh'yro eth d'rekkathnor!")
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
/obj/effect/alien/resin/hitby(AM as mob|obj)
|
||||
..()
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\red <B>[src] was hit by [AM].</B>"), 1)
|
||||
O.show_message("\red <B>[src] was hit by [AM].</B>", 1)
|
||||
var/tforce = 0
|
||||
if(ismob(AM))
|
||||
tforce = 10
|
||||
@@ -64,9 +64,9 @@
|
||||
|
||||
/obj/effect/alien/resin/attack_hand()
|
||||
if ((usr.mutations & HULK))
|
||||
usr << text("\blue You easily destroy the [name].")
|
||||
usr << "\blue You easily destroy the [name]."
|
||||
for(var/mob/O in oviewers(src))
|
||||
O.show_message(text("\red [] destroys the [name]!", usr), 1)
|
||||
O.show_message("\red [usr] destroys the [name]!", 1)
|
||||
health = 0
|
||||
healthcheck()
|
||||
return
|
||||
@@ -77,15 +77,15 @@
|
||||
/obj/effect/alien/resin/attack_alien()
|
||||
if (islarva(usr))//Safety check for larva. /N
|
||||
return
|
||||
usr << text("\green You claw at the [name].")
|
||||
usr << "\green You claw at the [name]."
|
||||
for(var/mob/O in oviewers(src))
|
||||
O.show_message(text("\red [] claws at the resin!", usr), 1)
|
||||
O.show_message("\red [usr] claws at the resin!", 1)
|
||||
playsound(loc, 'attackblob.ogg', 100, 1)
|
||||
health -= rand(10, 20)
|
||||
if(health <= 0)
|
||||
usr << text("\green You slice the [name] to pieces.")
|
||||
usr << "\green You slice the [name] to pieces."
|
||||
for(var/mob/O in oviewers(src))
|
||||
O.show_message(text("\red [] slices the [name] apart!", usr), 1)
|
||||
O.show_message("\red [usr] slices the [name] apart!", 1)
|
||||
healthcheck()
|
||||
return
|
||||
|
||||
@@ -161,6 +161,6 @@
|
||||
|
||||
/obj/effect/alien/resin/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(air_group) return 0
|
||||
if(istype(mover) && mover.checkpass(PASSGLASS))
|
||||
if(istype(mover) && mover.pass_flags & PASSGLASS)
|
||||
return !opacity
|
||||
return !density
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
/obj/structure/closet/secure_closet/ert/commander
|
||||
name = "\improper ERT commander locker"
|
||||
req_access = list(access_security)
|
||||
icon_state = "capsecure1"
|
||||
icon_closed = "capsecure"
|
||||
icon_locked = "capsecure1"
|
||||
icon_opened = "capsecureopen"
|
||||
icon_broken = "capsecurebroken"
|
||||
icon_off = "capsecureoff"
|
||||
|
||||
New()
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/clothing/head/helmet/space/ert/commander(src)
|
||||
new /obj/item/clothing/suit/space/ert/commander(src)
|
||||
new /obj/item/weapon/plastique(src)
|
||||
new /obj/item/weapon/storage/belt/security/full(src)
|
||||
new /obj/item/weapon/gun/energy/ionrifle(src)
|
||||
new /obj/item/weapon/gun/energy/gun/nuclear(src)
|
||||
new /obj/item/clothing/glasses/thermal(src)
|
||||
new /obj/item/weapon/lighter/zippo(src)
|
||||
new /obj/item/weapon/pinpointer(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/secure_closet/ert/security
|
||||
name = "\improper ERT security locker"
|
||||
req_access = list(access_security)
|
||||
icon_state = "sec1"
|
||||
icon_closed = "sec"
|
||||
icon_locked = "sec1"
|
||||
icon_opened = "secopen"
|
||||
icon_broken = "secbroken"
|
||||
icon_off = "secoff"
|
||||
|
||||
New()
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/clothing/head/helmet/space/ert/security(src)
|
||||
new /obj/item/clothing/suit/space/ert/security(src)
|
||||
new /obj/item/weapon/plastique(src)
|
||||
new /obj/item/weapon/storage/belt/security/full(src)
|
||||
new /obj/item/weapon/gun/energy/ionrifle(src)
|
||||
new /obj/item/weapon/gun/energy/gun/nuclear(src)
|
||||
new /obj/item/clothing/glasses/thermal(src)
|
||||
return
|
||||
|
||||
|
||||
/obj/structure/closet/secure_closet/ert/engineer
|
||||
name = "\improper ERT engineer locker"
|
||||
req_access = list(access_engine)
|
||||
icon_state = "secureeng1"
|
||||
icon_closed = "secureeng"
|
||||
icon_locked = "secureeng1"
|
||||
icon_opened = "secureengopen"
|
||||
icon_broken = "secureengbroken"
|
||||
icon_off = "secureengoff"
|
||||
|
||||
New()
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/clothing/head/helmet/space/ert/engineer(src)
|
||||
new /obj/item/clothing/suit/space/ert/engineer(src)
|
||||
new /obj/item/weapon/gun/energy/taser(src)
|
||||
new /obj/item/weapon/storage/belt/utility/full(src)
|
||||
new /obj/item/weapon/storage/backpack/industrial/full(src)
|
||||
new /obj/item/device/t_scanner(src)
|
||||
new /obj/item/clothing/glasses/meson(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/secure_closet/ert/medical
|
||||
name = "\improper ERT medical locker"
|
||||
req_access = list(access_medical)
|
||||
icon_state = "securemed1"
|
||||
icon_closed = "securemed"
|
||||
icon_locked = "securemed1"
|
||||
icon_opened = "securemedopen"
|
||||
icon_broken = "securemedbroken"
|
||||
icon_off = "securemedoff"
|
||||
|
||||
New()
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/clothing/head/helmet/space/ert/medical(src)
|
||||
new /obj/item/clothing/suit/space/ert/medical(src)
|
||||
new /obj/item/weapon/gun/energy/taser(src)
|
||||
new /obj/item/weapon/storage/backpack/medic/full(src)
|
||||
new /obj/item/weapon/storage/belt/medical(src)
|
||||
new /obj/item/clothing/glasses/hud/health(src)
|
||||
return
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/structure/closet/extinguisher
|
||||
/obj/structure/extinguisher_cabinet
|
||||
name = "extinguisher cabinet"
|
||||
desc = "A small wall mounted cabinet designed to hold a fire extinguisher."
|
||||
icon = 'closet.dmi'
|
||||
@@ -6,10 +6,11 @@
|
||||
anchored = 1
|
||||
density = 0
|
||||
var/obj/item/weapon/extinguisher/has_extinguisher = new/obj/item/weapon/extinguisher
|
||||
var/opened = 0
|
||||
|
||||
|
||||
|
||||
/obj/structure/closet/extinguisher/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
/obj/structure/extinguisher_cabinet/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
if (isrobot(usr))
|
||||
return
|
||||
if (istype(O, /obj/item/weapon/extinguisher))
|
||||
@@ -26,7 +27,7 @@
|
||||
|
||||
|
||||
|
||||
/obj/structure/closet/extinguisher/attack_hand(mob/user as mob)
|
||||
/obj/structure/extinguisher_cabinet/attack_hand(mob/user as mob)
|
||||
if(has_extinguisher)
|
||||
user.put_in_hand(has_extinguisher)
|
||||
has_extinguisher = null
|
||||
@@ -38,13 +39,13 @@
|
||||
|
||||
|
||||
|
||||
/obj/structure/closet/extinguisher/attack_paw(mob/user as mob)
|
||||
/obj/structure/extinguisher_cabinet/attack_paw(mob/user as mob)
|
||||
attack_hand(user)
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/structure/closet/extinguisher/update_icon()
|
||||
/obj/structure/extinguisher_cabinet/update_icon()
|
||||
if(!opened)
|
||||
icon_state = "extinguisher_closed"
|
||||
return
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/device/radio/headset/headset_cargo(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/weapon/cartridge/quartermaster(src)
|
||||
// new /obj/item/weapon/cartridge/quartermaster(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/secure_closet/qm_personal
|
||||
|
||||
@@ -118,7 +118,7 @@
|
||||
new /obj/item/device/t_scanner(src)
|
||||
new /obj/item/weapon/storage/belt/utility/full(src)
|
||||
new /obj/item/weapon/storage/toolbox/mechanical(src)
|
||||
new /obj/item/weapon/cartridge/engineering(src)
|
||||
// new /obj/item/weapon/cartridge/engineering(src)
|
||||
new /obj/item/device/radio/headset/headset_eng(src)
|
||||
new /obj/item/clothing/suit/hazardvest(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
new /obj/item/clothing/under/rank/medical/green(src)
|
||||
if ("purple")
|
||||
new /obj/item/clothing/under/rank/medical/purple(src)
|
||||
new /obj/item/weapon/cartridge/medical(src)
|
||||
// new /obj/item/weapon/cartridge/medical(src)
|
||||
new /obj/item/device/radio/headset/headset_med(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
playsound(src.loc, 'blade1.ogg', 50, 1)
|
||||
playsound(src.loc, "sparks", 50, 1)
|
||||
for(var/mob/O in viewers(user, 3))
|
||||
O.show_message(text("\blue The locker has been sliced open by [] with an energy blade!", user), 1, text("\red You hear metal being sliced and sparks flying."), 2)
|
||||
O.show_message("\blue The locker has been sliced open by [user] with an energy blade!", 1, "\red You hear metal being sliced and sparks flying.", 2)
|
||||
else
|
||||
user << "\red Access Denied"
|
||||
return
|
||||
|
||||
@@ -56,15 +56,15 @@
|
||||
playsound(src.loc, 'blade1.ogg', 50, 1)
|
||||
playsound(src.loc, "sparks", 50, 1)
|
||||
for(var/mob/O in viewers(user, 3))
|
||||
O.show_message(text("\blue The locker has been sliced open by [] with an energy blade!", user), 1, text("\red You hear metal being sliced and sparks flying."), 2)
|
||||
O.show_message("\blue The locker has been sliced open by [user] with an energy blade!", 1, "\red You hear metal being sliced and sparks flying.", 2)
|
||||
else
|
||||
for(var/mob/O in viewers(user, 3))
|
||||
O.show_message(text("\blue The locker has been broken by [] with an electromagnetic card!", user), 1, text("You hear a faint electrical spark."), 2)
|
||||
O.show_message("\blue The locker has been broken by [user] with an electromagnetic card!", 1, "You hear a faint electrical spark.", 2)
|
||||
else if(src.allowed(user))
|
||||
src.locked = !src.locked
|
||||
for(var/mob/O in viewers(user, 3))
|
||||
if((O.client && !( O.blinded )))
|
||||
O << text("\blue The locker has been []locked by [].", (src.locked ? null : "un"), user)
|
||||
O << "\blue The locker has been [src.locked ? null : "un"]locked by [user]."
|
||||
if(src.locked)
|
||||
src.icon_state = src.icon_locked
|
||||
else
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
new /obj/item/device/flash(B)
|
||||
new /obj/item/device/pda/security(src)
|
||||
new /obj/item/clothing/suit/armor/vest(src)
|
||||
new /obj/item/weapon/cartridge/security(src)
|
||||
// new /obj/item/weapon/cartridge/security(src)
|
||||
new /obj/item/device/radio/headset/headset_sec(src)
|
||||
new /obj/item/weapon/storage/flashbang_kit(src)
|
||||
new /obj/item/weapon/melee/baton(src)
|
||||
@@ -140,7 +140,7 @@
|
||||
new /obj/item/clothing/suit/armor/vest(src)
|
||||
new /obj/item/clothing/suit/storage/gearharness(src)
|
||||
new /obj/item/clothing/head/helmet(src)
|
||||
new /obj/item/weapon/cartridge/security(src)
|
||||
// new /obj/item/weapon/cartridge/security(src)
|
||||
new /obj/item/device/pda/security(src)
|
||||
new /obj/item/device/radio/headset/headset_sec(src)
|
||||
new /obj/item/weapon/storage/belt/security(src)
|
||||
|
||||
@@ -8,7 +8,8 @@
|
||||
icon_state = "pda"
|
||||
item_state = "electronic"
|
||||
w_class = 1.0
|
||||
flags = FPRINT | TABLEPASS | ONBELT
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = SLOT_ID | SLOT_BELT
|
||||
|
||||
//Main variables
|
||||
var/owner = null
|
||||
@@ -134,8 +135,6 @@
|
||||
|
||||
/obj/item/device/pda/roboticist
|
||||
icon_state = "pda-robot"
|
||||
desc = "A portable microcomputer by Thinktronic Systems, LTD. This is model is a special edition with a transparent case."
|
||||
note = "Congratulations, your station has chosen the Thinktronic 5230 Personal Data Assistant Deluxe Special Turbo Edition!"
|
||||
|
||||
/obj/item/device/pda/librarian
|
||||
icon_state = "pda-libb"
|
||||
@@ -143,6 +142,16 @@
|
||||
note = "Congratulations, your station has chosen the Thinktronic 5290 WGW-11 Series E-reader and Personal Data Assistant!"
|
||||
silent = 1 //Quiet in the library!
|
||||
|
||||
/obj/item/device/pda/atmos
|
||||
icon_state = "pda-atmo"
|
||||
|
||||
/obj/item/device/pda/chemist
|
||||
default_cartridge = /obj/item/weapon/cartridge/chemistry
|
||||
icon_state = "pda-chem"
|
||||
|
||||
/obj/item/device/pda/geneticist
|
||||
icon_state = "pda-gene"
|
||||
|
||||
/*
|
||||
* The Actual PDA
|
||||
*/
|
||||
@@ -860,24 +869,30 @@
|
||||
user.show_message("\blue No radiation detected.")
|
||||
|
||||
/obj/item/device/pda/afterattack(atom/A as mob|obj|turf|area, mob/user as mob)
|
||||
if(!in_range(A, user))
|
||||
return
|
||||
switch(scanmode)
|
||||
if(2)
|
||||
if (!A.fingerprints)
|
||||
user << "\blue Unable to locate any fingerprints on [A]!"
|
||||
else
|
||||
user << "\blue Isolated [A:fingerprints.len] fingerprints."
|
||||
var/list/prints = A:fingerprints
|
||||
var/list/complete_prints = list()
|
||||
for(var/i in prints)
|
||||
var/print = prints[i]
|
||||
if(stringpercent(print) <= FINGERPRINT_COMPLETE)
|
||||
complete_prints += print
|
||||
if(complete_prints.len < 1)
|
||||
user << "\blue No intact prints found"
|
||||
if(!istype(A, /obj/item/weapon/f_card))
|
||||
if (!A.fingerprints)
|
||||
user << "\blue Unable to locate any fingerprints on [A]!"
|
||||
else
|
||||
user << "\blue Found [complete_prints.len] intact prints"
|
||||
for(var/i in complete_prints)
|
||||
user << "\blue [i]"
|
||||
user << "\blue Isolated [A:fingerprints.len] fingerprints."
|
||||
var/list/prints = A:fingerprints
|
||||
var/list/complete_prints = list()
|
||||
for(var/i in prints)
|
||||
var/print = prints[i]
|
||||
if(stringpercent(print) <= FINGERPRINT_COMPLETE)
|
||||
complete_prints += print
|
||||
if(complete_prints.len < 1)
|
||||
user << "\blue No intact prints found"
|
||||
else
|
||||
user << "\blue Found [complete_prints.len] intact prints"
|
||||
for(var/i in complete_prints)
|
||||
user << "\blue [i]"
|
||||
if(cartridge && cartridge.access_security)
|
||||
cartridge.add_data(A)
|
||||
user << "Data added to internal storage. Scan with a High-Resolution Scanner to retreive."
|
||||
|
||||
if(3)
|
||||
if(!isnull(A.reagents))
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
var/list/powermonitors = list()
|
||||
var/message1 // used for status_displays
|
||||
var/message2
|
||||
var/list/stored = list()
|
||||
|
||||
engineering
|
||||
name = "Power-ON Cartridge"
|
||||
@@ -40,6 +41,11 @@
|
||||
icon_state = "cart-m"
|
||||
access_medical = 1
|
||||
|
||||
chemistry
|
||||
name = "ChemWhiz Cartridge"
|
||||
icon_state = "cart-chem"
|
||||
access_reagent_scanner = 1
|
||||
|
||||
security
|
||||
name = "R.O.B.U.S.T. Cartridge"
|
||||
icon_state = "cart-s"
|
||||
@@ -50,6 +56,7 @@
|
||||
spawn(5)
|
||||
radio = new /obj/item/radio/integrated/beepsky(src)
|
||||
|
||||
|
||||
detective
|
||||
name = "D.E.T.E.C.T. Cartridge"
|
||||
icon_state = "cart-s"
|
||||
@@ -89,7 +96,7 @@
|
||||
name = "Signal Ace 2"
|
||||
desc = "Complete with integrated radio signaler!"
|
||||
icon_state = "cart-tox"
|
||||
access_reagent_scanner = 1
|
||||
// access_reagent_scanner = 1
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -152,7 +159,7 @@
|
||||
name = "Signal Ace DELUXE"
|
||||
icon_state = "cart-rd"
|
||||
access_status_display = 1
|
||||
access_reagent_scanner = 1
|
||||
// access_reagent_scanner = 1
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -570,6 +577,43 @@ Code:
|
||||
else
|
||||
menu += "ERROR: Unable to determine current location."
|
||||
|
||||
proc/add_data(atom/A as mob|obj|turf|area)
|
||||
//I love hashtables.
|
||||
var/list/data_entry = stored["\ref [A]"]
|
||||
if(islist(data_entry)) //Yay, it was already stored!
|
||||
//Merge the fingerprints.
|
||||
var/list/data_prints = data_entry[1]
|
||||
for(var/print in A.fingerprints)
|
||||
var/merged_print = data_prints[print]
|
||||
if(!merged_print)
|
||||
data_prints[print] = A.fingerprints[print]
|
||||
else
|
||||
data_prints[print] = stringmerge(data_prints[print],A.fingerprints[print])
|
||||
|
||||
//Now the fibers
|
||||
var/list/fibers = data_entry[2]
|
||||
if(!fibers)
|
||||
fibers = list()
|
||||
if(A.suit_fibers && A.suit_fibers.len)
|
||||
for(var/j = 1, j <= A.suit_fibers.len, j++) //Fibers~~~
|
||||
if(!fibers.Find(A.suit_fibers[j])) //It isn't! Add!
|
||||
fibers += A.suit_fibers[j]
|
||||
var/list/blood = data_entry[3]
|
||||
if(!blood)
|
||||
blood = list()
|
||||
if(A.blood_DNA && A.blood_DNA.len)
|
||||
for(var/main_blood in A.blood_DNA)
|
||||
if(!blood[main_blood])
|
||||
blood[main_blood] = A.blood_DNA[blood]
|
||||
return 1
|
||||
var/list/sum_list[4] //Pack it back up!
|
||||
sum_list[1] = A.fingerprints
|
||||
sum_list[2] = A.suit_fibers
|
||||
sum_list[3] = A.blood_DNA
|
||||
sum_list[4] = "\The [A] in \the [get_area(A)]"
|
||||
stored["\ref [A]"] = sum_list
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/cartridge/Topic(href, href_list)
|
||||
..()
|
||||
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
icon_state = "aicard" // aicard-full
|
||||
item_state = "electronic"
|
||||
w_class = 2.0
|
||||
flags = FPRINT | TABLEPASS | ONBELT
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
var/flush = null
|
||||
origin_tech = "programming=4;materials=4"
|
||||
|
||||
|
||||
@@ -42,7 +42,8 @@
|
||||
/obj/item/device/chameleon
|
||||
name = "chameleon-projector"
|
||||
icon_state = "shield0"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT | USEDELAY | ONBELT
|
||||
flags = FPRINT | TABLEPASS| CONDUCT | USEDELAY
|
||||
slot_flags = SLOT_BELT
|
||||
item_state = "electronic"
|
||||
throwforce = 5.0
|
||||
throw_speed = 1
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
icon_state = "flight0"
|
||||
w_class = 2
|
||||
item_state = "flight"
|
||||
flags = FPRINT | ONBELT | TABLEPASS | CONDUCT
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
m_amt = 50
|
||||
g_amt = 20
|
||||
var/on = 0
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
icon_state = "pai"
|
||||
item_state = "electronic"
|
||||
w_class = 2.0
|
||||
flags = FPRINT | TABLEPASS | ONBELT
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
origin_tech = "programming=2"
|
||||
var/obj/item/device/radio/radio
|
||||
var/looking_for_personality = 0
|
||||
|
||||
@@ -14,7 +14,8 @@ MASS SPECTROMETER
|
||||
desc = "A terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes."
|
||||
icon_state = "t-ray0"
|
||||
var/on = 0
|
||||
flags = FPRINT|ONBELT|TABLEPASS
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = 2
|
||||
item_state = "electronic"
|
||||
m_amt = 150
|
||||
@@ -64,12 +65,11 @@ MASS SPECTROMETER
|
||||
desc = "Used to scan objects for DNA and fingerprints."
|
||||
icon_state = "forensic1"
|
||||
var/amount = 20.0
|
||||
// var/printing = 0.0
|
||||
var/list/stored = list()
|
||||
w_class = 3.0
|
||||
item_state = "electronic"
|
||||
flags = FPRINT | TABLEPASS | ONBELT | CONDUCT | USEDELAY
|
||||
|
||||
flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
attackby(obj/item/weapon/f_card/W as obj, mob/user as mob)
|
||||
..()
|
||||
@@ -90,16 +90,6 @@ MASS SPECTROMETER
|
||||
W.add_fingerprint(user)
|
||||
return
|
||||
|
||||
// attack_self(mob/user as mob)
|
||||
// src.printing = !( src.printing )
|
||||
// if(src.printing)
|
||||
// user << "\blue Printing turned on"
|
||||
// else
|
||||
// user << "\blue Printing turned off"
|
||||
// src.icon_state = text("forensic[]", src.printing)
|
||||
// add_fingerprint(user)
|
||||
// return
|
||||
|
||||
attack(mob/living/carbon/human/M as mob, mob/user as mob)
|
||||
if (!ishuman(M))
|
||||
user << "\red [M] is not human and cannot have the fingerprints."
|
||||
@@ -132,69 +122,65 @@ MASS SPECTROMETER
|
||||
return
|
||||
|
||||
afterattack(atom/A as obj|turf|area, mob/user as mob)
|
||||
if(!(locate(A) in oview(1,user)))
|
||||
if(!in_range(A,user))
|
||||
return
|
||||
if(src.loc != user)
|
||||
if(loc != user)
|
||||
return
|
||||
if(istype(A,/obj/machinery/computer/forensic_scanning)) //breaks shit.
|
||||
return
|
||||
if(istype(A,/obj/item/weapon/f_card))
|
||||
user << "Haha, nice try. Cheater. (It would break stuff anyways.)"
|
||||
user << "The scanner displays on the screen: \"ERROR 43: Object on Excluded Object List.\""
|
||||
return
|
||||
if(!A.fingerprints)
|
||||
A.fingerprints = list()
|
||||
|
||||
add_fingerprint(user)
|
||||
|
||||
|
||||
//Special case for blood splaters.
|
||||
if (istype(A, /obj/effect/decal/cleanable/blood) || istype(A, /obj/effect/rune))
|
||||
if(!isnull(A.blood_DNA))
|
||||
for(var/blood in A.blood_DNA)
|
||||
user << "\blue Blood type: [A.blood_DNA[blood]]\nDNA: [blood]"
|
||||
return
|
||||
var/duplicate = 0
|
||||
|
||||
//General
|
||||
if ((!A.fingerprints || !A.fingerprints.len) && !A.suit_fibers && !A.blood_DNA)
|
||||
user << "\blue Unable to locate any fingerprints, materials, fibers, or blood on [A]!"
|
||||
user.visible_message("\The [user] scans \the [A] with \a [src], the air around [user.get_gender_form("it")] humming[prob(70) ? " gently." : "."]" ,\
|
||||
"\blue Unable to locate any fingerprints, materials, fibers, or blood on [A]!",\
|
||||
"You hear a faint hum of electrical equipment.")
|
||||
return 0
|
||||
|
||||
//BLOOD
|
||||
else if (A.blood_DNA)
|
||||
user << "\blue Blood found on [A]. Analysing..."
|
||||
sleep(15)
|
||||
if(!duplicate)
|
||||
duplicate = 1
|
||||
var/i = add_data(A)
|
||||
if(i)
|
||||
user << "\blue Blood already in memory."
|
||||
for(var/blood in A.blood_DNA)
|
||||
user << "\blue Blood type: [A.blood_DNA[blood]]\nDNA: [blood]"
|
||||
else
|
||||
user << "\blue No Blood Located"
|
||||
if(add_data(A))
|
||||
user << "\blue Object already in internal memory. Consolidating data..."
|
||||
return
|
||||
|
||||
|
||||
//PRINTS
|
||||
if(!A.fingerprints || !A.fingerprints.len)
|
||||
user << "\blue No Fingerprints Located."
|
||||
if(A.fingerprints)
|
||||
del(A.fingerprints)
|
||||
else
|
||||
user << text("\blue Isolated [A.fingerprints.len] fingerprints: Data Stored: Scan with Hi-Res Forensic Scanner to retrieve.")
|
||||
if(!duplicate)
|
||||
duplicate = 1
|
||||
var/i = add_data(A)
|
||||
if(i)
|
||||
user << "\blue Fingerprints already in memory."
|
||||
user << "\blue Isolated [A.fingerprints.len] fingerprints: Data Stored: Scan with Hi-Res Forensic Scanner to retrieve."
|
||||
|
||||
//FIBERS
|
||||
if(!A.suit_fibers)
|
||||
user << "\blue No Fibers/Materials Located."
|
||||
else
|
||||
if(A.suit_fibers)
|
||||
user << "\blue Fibers/Materials Data Stored: Scan with Hi-Res Forensic Scanner to retrieve."
|
||||
|
||||
if(!duplicate)
|
||||
duplicate = 1
|
||||
var/i = add_data(A)
|
||||
if(i)
|
||||
user << "\blue Fibers/Materials already in memory."
|
||||
//Blood
|
||||
if (A.blood_DNA)
|
||||
user << "\blue Blood found on [A]. Analysing..."
|
||||
spawn(15)
|
||||
for(var/blood in A.blood_DNA)
|
||||
user << "Blood type: \red [A.blood_DNA[blood]] \t \black DNA: \red [blood]"
|
||||
if(prob(5))
|
||||
user.visible_message("\The [user] scans \the [A] with \a [src], the air around [user.get_gender_form("it")] humming[prob(70) ? " gently." : "."]" ,\
|
||||
"You finish scanning \the [A].",\
|
||||
"You hear a faint hum of electrical equipment.")
|
||||
return 0
|
||||
else
|
||||
user.visible_message("\The [user] scans \the [A] with \a [src], the air around [user.get_gender_form("it")] humming[prob(70) ? " gently." : "."]\n[user.get_gender_form("It")] seems to perk up slightly at the readout." ,\
|
||||
"The results of the scan pique your interest.",\
|
||||
"You hear a faint hum of electrical equipment, and someone making a thoughtful noise.")
|
||||
return 0
|
||||
return
|
||||
|
||||
proc/add_data(atom/A as mob|obj|turf|area)
|
||||
@@ -230,7 +216,7 @@ MASS SPECTROMETER
|
||||
sum_list[1] = A.fingerprints
|
||||
sum_list[2] = A.suit_fibers
|
||||
sum_list[3] = A.blood_DNA
|
||||
sum_list[4] = "\The [A] in [get_area(A)]"
|
||||
sum_list[4] = "\The [A] in \the [get_area(A)]"
|
||||
stored["\ref [A]"] = sum_list
|
||||
return 0
|
||||
|
||||
@@ -240,7 +226,8 @@ MASS SPECTROMETER
|
||||
icon_state = "health"
|
||||
item_state = "analyzer"
|
||||
desc = "A hand-held body scanner able to distinguish vital signs of the subject."
|
||||
flags = FPRINT | ONBELT | TABLEPASS | CONDUCT
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 3
|
||||
w_class = 1.0
|
||||
throw_speed = 5
|
||||
@@ -249,64 +236,64 @@ MASS SPECTROMETER
|
||||
origin_tech = "magnets=1;biotech=1"
|
||||
var/mode = 1;
|
||||
|
||||
proc
|
||||
analyze_health_less_info(mob/living/carbon/M as mob, mob/user as mob)
|
||||
var/fake_oxy = max(rand(1,40), M.getOxyLoss(), (300 - (M.getToxLoss() + M.getFireLoss() + M.getBruteLoss())))
|
||||
if((M.reagents && M.reagents.has_reagent("zombiepowder")) || (M.changeling && M.changeling.changeling_fakedeath))
|
||||
user.show_message(text("\blue Analyzing Results for []:\n\t Overall Status: []", M, "dead"), 1)
|
||||
user.show_message(text("\blue \t Damage Specifics: []-[]-[]-[]", fake_oxy < 50 ? "\red [fake_oxy]" : fake_oxy , M.getToxLoss() > 50 ? "\red [M.getToxLoss()]" : M.getToxLoss(), M.getFireLoss() > 50 ? "\red[M.getFireLoss()]" : M.getFireLoss(), M.getBruteLoss() > 50 ? "\red[M.getBruteLoss()]" : M.getBruteLoss()), 1)
|
||||
/obj/item/device/healthanalyzer/proc/analyze_health_less_info(mob/living/carbon/M as mob, mob/user as mob)
|
||||
var/fake_oxy = max(rand(1,40), M.getOxyLoss(), (300 - (M.getToxLoss() + M.getFireLoss() + M.getBruteLoss())))
|
||||
if((M.reagents && M.reagents.has_reagent("zombiepowder")) || (M.changeling && M.changeling.changeling_fakedeath))
|
||||
user.show_message(text("\blue Analyzing Results for []:\n\t Overall Status: []", M, "dead"), 1)
|
||||
user.show_message(text("\blue \t Damage Specifics: []-[]-[]-[]", fake_oxy < 50 ? "\red [fake_oxy]" : fake_oxy , M.getToxLoss() > 50 ? "\red [M.getToxLoss()]" : M.getToxLoss(), M.getFireLoss() > 50 ? "\red[M.getFireLoss()]" : M.getFireLoss(), M.getBruteLoss() > 50 ? "\red[M.getBruteLoss()]" : M.getBruteLoss()), 1)
|
||||
else
|
||||
user.show_message(text("\blue Analyzing Results for []:\n\t Overall Status: []", M, (M.stat > 1 ? "dead" : text("[]% healthy", M.health - M.halloss))), 1)
|
||||
user.show_message(text("\blue \t Damage Specifics: []-[]-[]-[]", M.getOxyLoss() > 50 ? "\red [M.getOxyLoss()]" : M.getOxyLoss(), M.getToxLoss() > 50 ? "\red [M.getToxLoss()]" : M.getToxLoss(), M.getFireLoss() > 50 ? "\red[M.getFireLoss()]" : M.getFireLoss(), M.getBruteLoss() > 50 ? "\red[M.getBruteLoss()]" : M.getBruteLoss()), 1)
|
||||
user.show_message("\blue Key: Suffocation/Toxin/Burns/Brute", 1)
|
||||
user.show_message("\blue Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)", 1)
|
||||
if(mode == 1 && istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/list/damaged = H.get_damaged_organs(1,1)
|
||||
user.show_message("\blue Localized Damage, Brute/Burn:",1)
|
||||
if(length(damaged)>0)
|
||||
for(var/datum/organ/external/org in damaged)
|
||||
user.show_message(text("\blue \t []: []\blue-[]",capitalize(org.getDisplayName()),(org.brute_dam > 0)?"\red [org.brute_dam]":0,(org.burn_dam > 0)?"\red [org.burn_dam]":0),1)
|
||||
else
|
||||
user.show_message("\blue \t Limbs are OK.",1)
|
||||
|
||||
if((M.changeling && M.changeling.changeling_fakedeath) || (M.reagents && M.reagents.has_reagent("zombiepowder")))
|
||||
user.show_message(text("\blue [] | [] | [] | []", fake_oxy > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal", M.getToxLoss() > 50 ? "\red Dangerous amount of toxins detected\blue" : "Subject bloodstream toxin level minimal", M.getFireLoss() > 50 ? "\red Severe burn damage detected\blue" : "Subject burn injury status O.K", M.getBruteLoss() > 50 ? "\red Severe anatomical damage detected\blue" : "Subject brute-force injury status O.K"), 1)
|
||||
else
|
||||
user.show_message(text("\blue [] | [] | [] | []", M.getOxyLoss() > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal", M.getToxLoss() > 50 ? "\red Dangerous amount of toxins detected\blue" : "Subject bloodstream toxin level minimal", M.getFireLoss() > 50 ? "\red Severe burn damage detected\blue" : "Subject burn injury status O.K", M.getBruteLoss() > 50 ? "\red Severe anatomical damage detected\blue" : "Subject brute-force injury status O.K"), 1)
|
||||
if (M.getCloneLoss())
|
||||
user.show_message(text("\red Subject appears to have been imperfectly cloned."), 1)
|
||||
for(var/datum/disease/D in M.viruses)
|
||||
if(!D.hidden[SCANNER])
|
||||
user.show_message(text("\red <b>Warning: [D.form] Detected</b>\nName: [D.name].\nType: [D.spread].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure]"))
|
||||
if (M.reagents && M.reagents.get_reagent_amount("inaprovaline"))
|
||||
user.show_message(text("\blue Bloodstream Analysis located [M.reagents:get_reagent_amount("inaprovaline")] units of rejuvenation chemicals."), 1)
|
||||
if (M.getBrainLoss() >= 100 || istype(M, /mob/living/carbon/human) && M:brain_op_stage == 4.0)
|
||||
user.show_message(text("\red Subject is brain dead."), 1)
|
||||
else if (M.getBrainLoss() >= 60)
|
||||
user.show_message(text("\red Severe brain damage detected. Subject likely to have mental retardation."), 1)
|
||||
else if (M.getBrainLoss() >= 10)
|
||||
user.show_message(text("\red Significant brain damage detected. Subject may have had a concussion."), 1)
|
||||
if (M.virus2 || M.reagents.reagent_list.len > 0)
|
||||
user.show_message(text("\red Unknown substance detected in blood."), 1)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
for(var/name in H.organs)
|
||||
var/datum/organ/external/e = H.organs[name]
|
||||
if(e.broken)
|
||||
user.show_message(text("\red Bone fractures detected. Advanced scanner required for location."), 1)
|
||||
break
|
||||
if(ishuman(M))
|
||||
if(M:vessel)
|
||||
var/blood_volume = round(M:vessel.get_reagent_amount("blood"))
|
||||
var/blood_percent = blood_volume / 560
|
||||
blood_percent *= 100
|
||||
if(blood_volume <= 448)
|
||||
user.show_message("\red <b>Warning: Blood Level LOW: [blood_percent]% [blood_volume]cl")
|
||||
else if(blood_volume <= 336)
|
||||
user.show_message("\red <b>Warning: Blood Level CRITICAL: [blood_percent]% [blood_volume]cl")
|
||||
else
|
||||
user.show_message(text("\blue Analyzing Results for []:\n\t Overall Status: []", M, (M.stat > 1 ? "dead" : text("[]% healthy", M.health - M.halloss))), 1)
|
||||
user.show_message(text("\blue \t Damage Specifics: []-[]-[]-[]", M.getOxyLoss() > 50 ? "\red [M.getOxyLoss()]" : M.getOxyLoss(), M.getToxLoss() > 50 ? "\red [M.getToxLoss()]" : M.getToxLoss(), M.getFireLoss() > 50 ? "\red[M.getFireLoss()]" : M.getFireLoss(), M.getBruteLoss() > 50 ? "\red[M.getBruteLoss()]" : M.getBruteLoss()), 1)
|
||||
user.show_message("\blue Key: Suffocation/Toxin/Burns/Brute", 1)
|
||||
user.show_message("\blue Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)", 1)
|
||||
if(mode == 1 && istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/list/damaged = H.get_damaged_organs(1,1)
|
||||
user.show_message("\blue Localized Damage, Brute/Burn:",1)
|
||||
if(length(damaged)>0)
|
||||
for(var/datum/organ/external/org in damaged)
|
||||
user.show_message(text("\blue \t []: []\blue-[]",capitalize(org.getDisplayName()),(org.brute_dam > 0)?"\red [org.brute_dam]":0,(org.burn_dam > 0)?"\red [org.burn_dam]":0),1)
|
||||
else
|
||||
user.show_message("\blue \t Limbs are OK.",1)
|
||||
if((M.changeling && M.changeling.changeling_fakedeath) || (M.reagents && M.reagents.has_reagent("zombiepowder")))
|
||||
user.show_message(text("\blue [] | [] | [] | []", fake_oxy > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal", M.getToxLoss() > 50 ? "\red Dangerous amount of toxins detected\blue" : "Subject bloodstream toxin level minimal", M.getFireLoss() > 50 ? "\red Severe burn damage detected\blue" : "Subject burn injury status O.K", M.getBruteLoss() > 50 ? "\red Severe anatomical damage detected\blue" : "Subject brute-force injury status O.K"), 1)
|
||||
else
|
||||
user.show_message(text("\blue [] | [] | [] | []", M.getOxyLoss() > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal", M.getToxLoss() > 50 ? "\red Dangerous amount of toxins detected\blue" : "Subject bloodstream toxin level minimal", M.getFireLoss() > 50 ? "\red Severe burn damage detected\blue" : "Subject burn injury status O.K", M.getBruteLoss() > 50 ? "\red Severe anatomical damage detected\blue" : "Subject brute-force injury status O.K"), 1)
|
||||
if (M.getCloneLoss())
|
||||
user.show_message(text("\red Subject appears to have been imperfectly cloned."), 1)
|
||||
for(var/datum/disease/D in M.viruses)
|
||||
if(!D.hidden[SCANNER])
|
||||
user.show_message(text("\red <b>Warning: [D.form] Detected</b>\nName: [D.name].\nType: [D.spread].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure]"))
|
||||
if (M.reagents && M.reagents.get_reagent_amount("inaprovaline"))
|
||||
user.show_message(text("\blue Bloodstream Analysis located [M.reagents:get_reagent_amount("inaprovaline")] units of rejuvenation chemicals."), 1)
|
||||
if (M.getBrainLoss() >= 100 || istype(M, /mob/living/carbon/human) && M:brain_op_stage == 4.0)
|
||||
user.show_message(text("\red Subject is brain dead."), 1)
|
||||
else if (M.getBrainLoss() >= 60)
|
||||
user.show_message(text("\red Severe brain damage detected. Subject likely to have mental retardation."), 1)
|
||||
else if (M.getBrainLoss() >= 10)
|
||||
user.show_message(text("\red Significant brain damage detected. Subject may have had a concussion."), 1)
|
||||
if (M.virus2 || M.reagents.reagent_list.len > 0)
|
||||
user.show_message(text("\red Unknown substance detected in blood."), 1)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
for(var/name in H.organs)
|
||||
var/datum/organ/external/e = H.organs[name]
|
||||
if(e.broken)
|
||||
user.show_message(text("\red Bone fractures detected. Advanced scanner required for location."), 1)
|
||||
break
|
||||
if(ishuman(M))
|
||||
if(M:vessel)
|
||||
var/blood_volume = round(M:vessel.get_reagent_amount("blood"))
|
||||
var/blood_percent = blood_volume / 560
|
||||
blood_percent *= 100
|
||||
if(blood_volume <= 448)
|
||||
user.show_message("\red <b>Warning: Blood Level LOW: [blood_percent]% [blood_volume]cl")
|
||||
else if(blood_volume <= 336)
|
||||
user.show_message("\red <b>Warning: Blood Level CRITICAL: [blood_percent]% [blood_volume]cl")
|
||||
else
|
||||
user.show_message("\blue Blood Level Normal: [blood_percent]% [blood_volume]cl")
|
||||
return
|
||||
user.show_message("\blue Blood Level Normal: [blood_percent]% [blood_volume]cl")
|
||||
return
|
||||
|
||||
/obj/item/device/healthanalyzer/attack(mob/M as mob, mob/user as mob)
|
||||
if ((user.mutations & CLUMSY || user.getBrainLoss() >= 60) && prob(50))
|
||||
@@ -346,7 +333,8 @@ MASS SPECTROMETER
|
||||
icon_state = "atmos"
|
||||
item_state = "analyzer"
|
||||
w_class = 2.0
|
||||
flags = FPRINT | TABLEPASS| CONDUCT | ONBELT
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 5
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
|
||||
@@ -18,7 +18,7 @@ would spawn and follow the beaker, even if it is carried or thrown.
|
||||
icon = 'effects.dmi'
|
||||
icon_state = "extinguish"
|
||||
var/life = 15.0
|
||||
flags = 2.0
|
||||
flags = TABLEPASS
|
||||
mouse_opacity = 0
|
||||
|
||||
/obj/effect/effect/smoke
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
|
||||
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(air_group || (height==0)) return 1
|
||||
if(istype(mover) && mover.checkpass(PASSGRILLE))
|
||||
if(istype(mover) && mover.pass_flags & PASSGRILLE)
|
||||
return 1
|
||||
else
|
||||
if (istype(mover, /obj/item/projectile))
|
||||
|
||||
@@ -564,3 +564,20 @@
|
||||
for(var/mob/M in viewers(5, src))
|
||||
M << "\red \the [src] burns up."
|
||||
del(src)
|
||||
|
||||
/obj/item/weapon/megaphone/attack_self(mob/user as mob)
|
||||
if(!ishuman(user))
|
||||
usr << "\red You don't know how to use this!"
|
||||
return
|
||||
if(cooldown)
|
||||
usr << "\red \The [src] needs to recharge!"
|
||||
return
|
||||
var/message = copytext(sanitize(input(user, "Shout a message?", "Megaphone", null) as text),1,MAX_MESSAGE_LEN)
|
||||
if(message && !cooldown)
|
||||
if ((src.loc == user && usr.stat == 0))
|
||||
for(var/mob/O in (viewers(user)))
|
||||
O.show_message("<B>[user]</B> broadcasts, <FONT size=3>\"[message]\"</FONT>",2) // 2 stands for hearable message
|
||||
cooldown = 1
|
||||
spawn(100)
|
||||
cooldown = 0
|
||||
return
|
||||
|
||||
@@ -95,7 +95,8 @@
|
||||
w_class = 1
|
||||
throwforce = 2
|
||||
var/candlecount = 5
|
||||
flags = ONBELT | TABLEPASS
|
||||
flags = TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
|
||||
/obj/item/weapon/candlepack/update_icon()
|
||||
|
||||
@@ -434,10 +434,10 @@ THERMAL GLASSES
|
||||
M.disabilities &= ~1
|
||||
..()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/engspace_helmet/attack_self()
|
||||
/obj/item/clothing/head/helmet/space/engineer/attack_self()
|
||||
toggle()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/engspace_helmet/verb/toggle()
|
||||
/obj/item/clothing/head/helmet/space/engineer/verb/toggle()
|
||||
set category = "Object"
|
||||
set name = "Toggle Helmet Visor"
|
||||
if(usr.canmove && usr.stat != 2 && !usr.restrained())
|
||||
@@ -445,34 +445,13 @@ THERMAL GLASSES
|
||||
src.up = !src.up
|
||||
src.see_face = !src.see_face
|
||||
src.flags |= HEADCOVERSEYES
|
||||
icon_state = "engspace_helmet"
|
||||
icon_state = "[initial(icon_state)]"
|
||||
usr << "You toggle the reflective tint on."
|
||||
else
|
||||
src.up = !src.up
|
||||
src.see_face = !src.see_face
|
||||
src.flags &= ~HEADCOVERSEYES
|
||||
icon_state = "engspace_helmet_clear"
|
||||
usr << "You toggle the reflective tint off."
|
||||
usr.update_clothing()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/cespace_helmet/attack_self()
|
||||
toggle()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/cespace_helmet/verb/toggle()
|
||||
set category = "Object"
|
||||
set name = "Toggle Helmet Visor"
|
||||
if(usr.canmove && usr.stat != 2 && !usr.restrained())
|
||||
if(src.up)
|
||||
src.up = !src.up
|
||||
src.see_face = !src.see_face
|
||||
src.flags |= HEADCOVERSEYES
|
||||
icon_state = "cespace_helmet"
|
||||
usr << "You toggle the reflective tint on."
|
||||
else
|
||||
src.up = !src.up
|
||||
src.see_face = !src.see_face
|
||||
src.flags &= ~HEADCOVERSEYES
|
||||
icon_state = "cespace_helmet_clear"
|
||||
icon_state = "[initial(icon_state)]_clear"
|
||||
usr << "You toggle the reflective tint off."
|
||||
usr.update_clothing()
|
||||
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
icon = 'robot_parts.dmi'
|
||||
item_state = "buildpipe"
|
||||
icon_state = "blank"
|
||||
flags = FPRINT | ONBELT | TABLEPASS | CONDUCT
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
var/construction_time = 100
|
||||
var/list/construction_cost = list("metal"=20000,"glass"=5000)
|
||||
|
||||
|
||||
@@ -61,7 +61,8 @@
|
||||
desc = "A heavy-duty, no fun allowed trash bag."
|
||||
var/mode = 1; //0 = pick one at a time, 1 = pick all on tile
|
||||
var/capacity = 25; //the number of trash it can carry.
|
||||
flags = FPRINT | TABLEPASS | ONBELT
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = 2.0
|
||||
|
||||
/obj/item/weapon/trashbag/update_icon()
|
||||
@@ -91,6 +92,7 @@
|
||||
if(contents.len < capacity) //slightly redundant, but it makes it prettier in the chatbox. -Pete
|
||||
user << "\blue You pick up all the trash."
|
||||
for(var/obj/item/O in get_turf(W))
|
||||
if(istype(O, /obj/item/weapon/disk/nuclear)) continue //No nuke disks - Nodrak
|
||||
if(contents.len < capacity)
|
||||
if(O.w_class <= 2)
|
||||
contents += O;
|
||||
@@ -100,6 +102,7 @@
|
||||
else
|
||||
user << "\blue The bag is full!"
|
||||
else
|
||||
if(istype(W, /obj/item/weapon/disk/nuclear)) return //No nuke disks - Nodrak
|
||||
if(contents.len < capacity)
|
||||
contents += W;
|
||||
else
|
||||
|
||||
@@ -42,7 +42,8 @@
|
||||
icon_state = "camera"
|
||||
item_state = "electropack"
|
||||
w_class = 2.0
|
||||
flags = 466.0
|
||||
flags = FPRINT | CONDUCT | USEDELAY | TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
m_amt = 2000
|
||||
throwforce = 5
|
||||
throw_speed = 4
|
||||
@@ -51,7 +52,6 @@
|
||||
var/pictures_left = 30
|
||||
var/can_use = 1
|
||||
|
||||
|
||||
/obj/item/weapon/photo
|
||||
name = "photo"
|
||||
icon = 'items.dmi'
|
||||
|
||||
@@ -65,7 +65,8 @@ ZIPPO
|
||||
icon_state = "matchbox"
|
||||
item_state = "zippo"
|
||||
w_class = 1
|
||||
flags = ONBELT | TABLEPASS
|
||||
flags = TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
var/matchcount = 10
|
||||
w_class = 1.0
|
||||
|
||||
@@ -122,6 +123,7 @@ ZIPPO
|
||||
var/lastHolder = null
|
||||
var/smoketime = 300
|
||||
var/butt_count = 5 //count of butt sprite variations
|
||||
|
||||
proc
|
||||
light(var/flavor_text = "[usr] lights the [name].")
|
||||
|
||||
@@ -162,7 +164,6 @@ ZIPPO
|
||||
processing_objects.Add(src)
|
||||
|
||||
|
||||
|
||||
process()
|
||||
var/turf/location = get_turf(src)
|
||||
src.smoketime--
|
||||
@@ -251,6 +252,7 @@ ZIPPO
|
||||
var/lastHolder = null
|
||||
var/smoketime = 100
|
||||
var/maxsmoketime = 100 //make sure this is equal to your smoketime
|
||||
|
||||
proc
|
||||
light(var/flavor_text = "[usr] lights the [name].")
|
||||
|
||||
@@ -337,7 +339,8 @@ ZIPPO
|
||||
item_state = "cigpacket"
|
||||
w_class = 1
|
||||
throwforce = 2
|
||||
flags = ONBELT | TABLEPASS
|
||||
flags = TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
var/cigcount = 6
|
||||
|
||||
|
||||
@@ -381,7 +384,8 @@ ZIPPO
|
||||
var/icon_off = "lighter-g"
|
||||
w_class = 1
|
||||
throwforce = 4
|
||||
flags = ONBELT | TABLEPASS | CONDUCT
|
||||
flags = TABLEPASS | CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
var/lit = 0
|
||||
|
||||
/obj/item/weapon/lighter/zippo
|
||||
@@ -409,16 +413,16 @@ ZIPPO
|
||||
src.item_state = icon_on
|
||||
if( istype(src,/obj/item/weapon/lighter/zippo) )
|
||||
for(var/mob/O in viewers(user, null))
|
||||
O.show_message(text("\red Without even breaking stride, [] flips open and lights [] in one smooth movement.", user, src), 1)
|
||||
O.show_message(text("\red Without even breaking stride, \the [] flips open and lights \the [] in one smooth movement.", user, src), 1)
|
||||
else
|
||||
if(prob(75))
|
||||
for(var/mob/O in viewers(user, null))
|
||||
O.show_message("\red After a few attempts, [user] manages to light [src].", 1)
|
||||
O.show_message("\red After a few attempts, \the [user] manages to light \the [src].", 1)
|
||||
else
|
||||
user << "\red <b>You burn yourself while lighting the lighter.</b>"
|
||||
user.adjustFireLoss(5)
|
||||
for(var/mob/O in viewers(user, null))
|
||||
O.show_message("\red After a few attempts, [user] manages to light [src], they however burn their finger in the process.", 1)
|
||||
O.show_message("\red After a few attempts, \the [user] manages to light \the [src], they however burn themself in the process.", 1)
|
||||
|
||||
user.total_luminosity += 2
|
||||
processing_objects.Add(src)
|
||||
@@ -471,4 +475,4 @@ ZIPPO
|
||||
if(lit)
|
||||
user.total_luminosity -= 2
|
||||
src.sd_SetLuminosity(2)
|
||||
return
|
||||
return
|
||||
@@ -16,14 +16,17 @@ FLASHBANG
|
||||
item_state = "emp"
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
flags = FPRINT | TABLEPASS | CONDUCT | ONBELT
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
origin_tech = "materials=2;magnets=3"
|
||||
var/active = 0
|
||||
var/det_time = 50
|
||||
proc
|
||||
prime()
|
||||
clown_check(var/mob/living/user)
|
||||
|
||||
proc/prime()
|
||||
return
|
||||
|
||||
proc/clown_check(var/mob/living/user)
|
||||
return
|
||||
|
||||
afterattack(atom/target as mob|obj|turf|area, mob/user as mob)
|
||||
if (istype(target, /obj/item/weapon/storage)) return ..() // Trying to put it in a full container
|
||||
@@ -89,16 +92,21 @@ FLASHBANG
|
||||
item_state = "flashbang"
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
flags = FPRINT | TABLEPASS | CONDUCT | ONBELT
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
origin_tech = "materials=2;combat=1"
|
||||
var/active = 0
|
||||
var/det_time = 30
|
||||
var/banglet = 0
|
||||
proc
|
||||
bang(var/turf/T , var/mob/living/carbon/M)
|
||||
prime()
|
||||
clown_check(var/mob/living/user)
|
||||
|
||||
proc/bang(var/turf/T , var/mob/living/carbon/M)
|
||||
return
|
||||
|
||||
proc/prime()
|
||||
return
|
||||
|
||||
proc/clown_check(var/mob/living/user)
|
||||
return
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (isscrewdriver(W))
|
||||
@@ -227,7 +235,6 @@ FLASHBANG
|
||||
M << "\red Your ears start to ring!"
|
||||
|
||||
prime() // Prime now just handles the two loops that query for people in lockers and people who can see it.
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
if(T)
|
||||
T.hotspot_expose(700,125)
|
||||
|
||||
@@ -7,19 +7,29 @@
|
||||
icon_state = "implant"
|
||||
var/implanted = null
|
||||
var/mob/imp_in = null
|
||||
var/color = "b"
|
||||
color = "b"
|
||||
var/allow_reagents = 0
|
||||
proc
|
||||
trigger(emote, source as mob)
|
||||
activate()
|
||||
implanted(source as mob)
|
||||
get_data()
|
||||
hear(message, source as mob)
|
||||
|
||||
proc/trigger(emote, source as mob)
|
||||
return
|
||||
|
||||
proc/activate()
|
||||
return
|
||||
|
||||
proc/implanted(source as mob)
|
||||
return
|
||||
|
||||
proc/get_data()
|
||||
return
|
||||
|
||||
proc/hear(message, source as mob)
|
||||
return
|
||||
|
||||
|
||||
trigger(emote, source as mob)
|
||||
return
|
||||
|
||||
|
||||
activate()
|
||||
return
|
||||
|
||||
@@ -38,6 +48,7 @@
|
||||
implanted(source as mob)
|
||||
return
|
||||
|
||||
|
||||
get_data()
|
||||
return "No information available"
|
||||
|
||||
@@ -449,4 +460,4 @@ the implant may become unstable and either pre-maturely inject the subject or si
|
||||
usr << "You suddenly start seeing body temperatures of whoever is around you."
|
||||
else
|
||||
usr << "This implant is not compatible!"
|
||||
return*/
|
||||
return*/
|
||||
@@ -26,9 +26,9 @@
|
||||
return
|
||||
if (user && imp)
|
||||
if (M != user)
|
||||
user.visible_message("\red [user] tries to implant [M] with \the [src]!","\red You try to implant [M] with \the [src]!")
|
||||
user.visible_message("\red \The [user] tries to implant \the [M] with \the [src]!","\red You try to implant \the [M] with \the [src]!")
|
||||
else
|
||||
user.visible_message("\red [user] tries to implant [user.gender == MALE? "himself":"herself"] with \the [src]!","\red You try to implant yourself with \the [src]!")
|
||||
user.visible_message("\red \The [user] tries to implant [user.get_gender_form("itself")] with \the [src]!","\red You try to implant yourself with \the [src]!")
|
||||
if(!do_mob(user, M,60))
|
||||
return
|
||||
if(hasorgans(M))
|
||||
@@ -39,9 +39,9 @@
|
||||
target.implant += imp
|
||||
imp.loc = target
|
||||
if (M != user)
|
||||
user.visible_message("\red [user] implants [M]'s [target.display_name] with \the [src]!","\red You implant [M]'s [target.display_name] with \the [src]!")
|
||||
user.visible_message("\red \The [user] implants \the [M]'s [target.display_name] with \the [src]!","\red You implant \the [M]'s [target.display_name] with \the [src]!")
|
||||
else
|
||||
user.visible_message("\red [user] implants [user.gender == MALE? "his own ":"her own "][target.display_name] with \the [src]!","\red You implant your [target.display_name] with \the [src]!")
|
||||
user.visible_message("\red \The [user] implants [user.get_gender_form("its")] own [target.display_name] with \the [src]!","\red You implant your [target.display_name] with \the [src]!")
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='orange'> Implanted with [src] ([imp]) by [user] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src] ([imp]) to implant [M] ([M.ckey])</font>")
|
||||
log_admin("ATTACK: [user] ([user.ckey]) implanted [M] ([M.ckey]) with [src].")
|
||||
|
||||
@@ -8,16 +8,11 @@ MEDICAL
|
||||
|
||||
/obj/item/stack/medical/attack(mob/living/carbon/M as mob, mob/user as mob)
|
||||
if (M.stat == 2)
|
||||
var/t_him = "it"
|
||||
if (M.gender == MALE)
|
||||
t_him = "him"
|
||||
else if (M.gender == FEMALE)
|
||||
t_him = "her"
|
||||
user << "\red \The [M] is dead, you cannot help [t_him]!"
|
||||
user << "\red \The [M] is dead, you cannot help [M.get_gender_form("it")]!"
|
||||
return
|
||||
|
||||
if (!istype(M))
|
||||
user << "\red \The [src] cannot be applied to [M]!"
|
||||
user << "\red \The [src] cannot be applied to \the [M]!"
|
||||
return 1
|
||||
|
||||
if ( ! (istype(user, /mob/living/carbon/human) || \
|
||||
@@ -26,6 +21,8 @@ MEDICAL
|
||||
user << "\red You don't have the dexterity to do this!"
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
var/stoppedblood = 0
|
||||
if(hasorgans(M))
|
||||
var/datum/organ/external/affecting = M:get_organ("chest")
|
||||
@@ -37,7 +34,7 @@ MEDICAL
|
||||
if(!istype(affecting, /datum/organ/external) || affecting:burn_dam <= 0)
|
||||
affecting = M:get_organ("head")
|
||||
if(affecting.destroyed && !affecting.gauzed)
|
||||
user.visible_message("\red [user] does [user.gender == MALE? "his" : "her"] best to stem [M]'s bleeding from [M.gender == MALE? "his" : "her"] stump.", "\red You do your best to stop the bleeding from [M]'s stump.", "\red You hear something like gauze being ripped.")
|
||||
user.visible_message("\red \The [user] does [user.get_gender_form("its")] best to stem \the [M]'s bleeding from [M.get_gender_form("its")] stump.", "\red You do your best to stop the bleeding from \the [M]'s stump.", "\red You hear something like gauze being ripped.")
|
||||
affecting.gauzed = 1
|
||||
use(1)
|
||||
return
|
||||
@@ -68,9 +65,9 @@ MEDICAL
|
||||
|
||||
if (user && stoppedblood)
|
||||
if (M != user)
|
||||
user.visible_message("\red [user] [heal_burn? "salves" : "bandages"] [stoppedblood - 1 ? "some of" : "the last of"] [M]'s cuts with [src].", "\red You [heal_burn? "salve" : "bandage up"] [stoppedblood - 1 ? "some of" : "the last of"] [M]'s [heal_burn? "burns" : "wounds"].", "\red You hear something like gauze being ripped.")
|
||||
user.visible_message("\red \The [user] [heal_burn? "salves" : "bandages"] [stoppedblood - 1 ? "some of" : "the last of"] \the [M]'s cuts with \the [src].", "\red You [heal_burn? "salve" : "bandage up"] [stoppedblood - 1 ? "some of" : "the last of"] \the [M]'s [heal_burn? "burns" : "wounds"].", "\red You hear something like gauze being ripped.")
|
||||
else
|
||||
user.visible_message("\red [user] [heal_burn? "salves" : "bandages"] [stoppedblood - 1 ? "some of" : "the last of"] [user.gender == MALE? "his" : "her"] own cuts with [src].", "\red You [heal_burn? "salve" : "bandage up"] [stoppedblood - 1 ? "some of" : "the last of"] your [heal_burn? "burns" : "wounds"].", "\red You hear something like gauze being ripped.")
|
||||
user.visible_message("\red \The [user] [heal_burn? "salves" : "bandages"] [stoppedblood - 1 ? "some of" : "the last of"] [user.get_gender_form("its")] own cuts with \the [src].", "\red You [heal_burn? "salve" : "bandage up"] [stoppedblood - 1 ? "some of" : "the last of"] your [heal_burn? "burns" : "wounds"].", "\red You hear something like gauze being ripped.")
|
||||
else if(user)
|
||||
user << "\red Nothing to patch up!"
|
||||
return
|
||||
@@ -126,16 +123,11 @@ MEDICAL
|
||||
|
||||
/obj/item/stack/medical/advanced/attack(mob/living/carbon/M as mob, mob/user as mob)
|
||||
if (M.stat == 2)
|
||||
var/t_him = "it"
|
||||
if (M.gender == MALE)
|
||||
t_him = "him"
|
||||
else if (M.gender == FEMALE)
|
||||
t_him = "her"
|
||||
user << "\red \The [M] is dead, you cannot help [t_him]!"
|
||||
user << "\red \The [M] is dead, you cannot help [M.get_gender_form("it")]!"
|
||||
return
|
||||
|
||||
if (!istype(M))
|
||||
user << "\red \The [src] cannot be applied to [M]!"
|
||||
user << "\red \The [src] cannot be applied to \the [M]!"
|
||||
return 1
|
||||
|
||||
if ( ! (istype(user, /mob/living/carbon/human) || \
|
||||
@@ -155,7 +147,7 @@ MEDICAL
|
||||
if(!istype(affecting, /datum/organ/external) || affecting:burn_dam <= 0)
|
||||
affecting = M:get_organ("head")
|
||||
if(affecting.destroyed && !affecting.gauzed)
|
||||
M.visible_message("\red You do your best to stop the bleeding from [M]'s stump.", "\red [user] does their best to stem [M]'s bleeding from [M.gender == MALE? "his" : "her"] stump.", "\red You hear something like gauze being ripped.")
|
||||
M.visible_message("\red \The [user] does their best to stem \the [M]'s bleeding from [M.get_gender_form("its")] stump.", "\red You do your best to stop the bleeding from \the [M]'s stump.", "\red You hear something like gauze being ripped.")
|
||||
affecting.gauzed = 1
|
||||
use(1)
|
||||
return
|
||||
@@ -177,9 +169,13 @@ MEDICAL
|
||||
|
||||
if (user && stoppedblood)
|
||||
if (M != user)
|
||||
user.visible_message("\red [user] [heal_burn? "salves" : "bandages"] [stoppedblood - 1 ? "some of" : "the last of"] [M]'s cuts with [src].", "\red You [heal_burn? "salve" : "bandage up"] [stoppedblood - 1 ? "some of" : "the last of"] [M]'s [heal_burn? "burns" : "wounds"].", "\red You hear something like gauze being ripped.")
|
||||
user.visible_message("\red \The [user] [heal_burn? "salves" : "bandages"] [stoppedblood - 1 ? "some of" : "the last of"] \the [M]'s cuts with \the [src].",\
|
||||
"\red You [heal_burn? "salve" : "bandage up"] [stoppedblood - 1 ? "some of" : "the last of"] \the [M]'s [heal_burn? "burns" : "wounds"].",\
|
||||
"\red You hear something like gauze being ripped.")
|
||||
else
|
||||
user.visible_message("\red [user] [heal_burn? "salves" : "bandages"] [stoppedblood - 1 ? "some of" : "the last of"] [user.gender == MALE? "his" : "her"] own cuts with [src].", "\red You [heal_burn? "salve" : "bandage up"] [stoppedblood - 1 ? "some of" : "the last of"] your [heal_burn? "burns" : "wounds"].", "\red You hear something like gauze being ripped.")
|
||||
user.visible_message("\red \The [user] [heal_burn? "salves" : "bandages"] [stoppedblood - 1 ? "some of" : "the last of"] [user.get_gender_form("its")] own cuts with \the [src].",\
|
||||
"\red You [heal_burn? "salve" : "bandage up"] [stoppedblood - 1 ? "some of" : "the last of"] your [heal_burn? "burns" : "wounds"].",\
|
||||
"\red You hear something like gauze being ripped.")
|
||||
else if(user)
|
||||
user << "\red Nothing to patch up!"
|
||||
return
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
name = "space cleaner"
|
||||
icon_state = "cleaner"
|
||||
item_state = "cleaner"
|
||||
flags = ONBELT|TABLEPASS|OPENCONTAINER|FPRINT|USEDELAY
|
||||
flags = TABLEPASS|OPENCONTAINER|FPRINT|USEDELAY
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 3
|
||||
w_class = 2.0
|
||||
throw_speed = 2
|
||||
@@ -117,7 +118,8 @@
|
||||
name = "chem sprayer"
|
||||
icon_state = "chemsprayer"
|
||||
item_state = "chemsprayer"
|
||||
flags = ONBELT|TABLEPASS|OPENCONTAINER|FPRINT|USEDELAY
|
||||
flags = TABLEPASS|OPENCONTAINER|FPRINT|USEDELAY
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 3
|
||||
w_class = 3.0
|
||||
throw_speed = 2
|
||||
@@ -212,7 +214,6 @@
|
||||
return
|
||||
|
||||
|
||||
return
|
||||
|
||||
//Pepper spray, set up to make the 2 different types
|
||||
/obj/item/weapon/pepperspray //This is riot control
|
||||
@@ -221,7 +222,8 @@
|
||||
name = "pepperspray"
|
||||
icon_state = "pepperspray"
|
||||
item_state = "pepperspray"
|
||||
flags = ONBELT|TABLEPASS|FPRINT|USEDELAY
|
||||
flags = TABLEPASS | FPRINT | USEDELAY
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 3
|
||||
w_class = 2.0
|
||||
throw_speed = 2
|
||||
@@ -236,7 +238,8 @@
|
||||
name = "mace"
|
||||
icon_state = "pepperspray"
|
||||
item_state = "pepperspray"
|
||||
flags = ONBELT|TABLEPASS|FPRINT|USEDELAY
|
||||
flags = TABLEPASS | FPRINT | USEDELAY
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 3
|
||||
w_class = 1.0
|
||||
throw_speed = 2
|
||||
|
||||
@@ -63,14 +63,13 @@ var/global/list/cached_icons = list()
|
||||
|
||||
remover
|
||||
paint_type = "remover"
|
||||
|
||||
/*
|
||||
/obj/item/weapon/paint
|
||||
name = "Paint Can"
|
||||
desc = "Used to recolor floors and walls. Can not be removed by the janitor."
|
||||
icon = 'items.dmi'
|
||||
icon_state = "paint_neutral"
|
||||
var/color = "FFFFFF"
|
||||
color = "FFFFFF"
|
||||
item_state = "paintcan"
|
||||
w_class = 3.0
|
||||
|
||||
|
||||
@@ -7,7 +7,8 @@
|
||||
name = "Plant Bag"
|
||||
var/mode = 1; //0 = pick one at a time, 1 = pick all on tile
|
||||
var/capacity = 50; //the number of plant pieces it can carry.
|
||||
flags = FPRINT | TABLEPASS | ONBELT
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = 1
|
||||
|
||||
/obj/item/weapon/plantbag/attack_self(mob/user as mob)
|
||||
|
||||
@@ -346,7 +346,7 @@ CIRCULAR SAW
|
||||
if(M != user)
|
||||
for(var/mob/O in (viewers(M) - user - M))
|
||||
O.show_message("\red [user] is beginning to clamp bleeders in [M]'s cut open torso with [src].", 1)
|
||||
M << "\red [user] begins to torso bleeders in your chest with [src]!"
|
||||
M << "\red [user] begins to clamp bleeders in your chest with [src]!"
|
||||
user << "\red You clamp bleeders in [M]'s torso with [src]!"
|
||||
M:embryo_op_stage = 2.0
|
||||
return
|
||||
@@ -503,12 +503,12 @@ CIRCULAR SAW
|
||||
if(3.0)
|
||||
if(M != user)
|
||||
M.visible_message( \
|
||||
"\red [user] is beginning to reshape [M]'s vocal chords and face with [src].", \
|
||||
"\red [user] is beginning to reshape [M]'s vocal cords and face with [src].", \
|
||||
"\red [user] begins to reshape your vocal chords and face [src]!")
|
||||
else
|
||||
M.visible_message( \
|
||||
"\red [user] begins to reshape their vocal chords and face and face with [src]!", \
|
||||
"\red You begin to reshape your vocal chords and face with [src]!")
|
||||
"\red [user] begins to reshape their vocal cords and face and face with [src]!", \
|
||||
"\red You begin to reshape your vocal cords and face with [src]!")
|
||||
|
||||
if(do_mob(user, M, 120))
|
||||
if(M != user)
|
||||
@@ -523,12 +523,12 @@ CIRCULAR SAW
|
||||
if(do_mob(user, M, 120))
|
||||
if(M != user)
|
||||
M.visible_message( \
|
||||
"\red [user] reshapes [M]'s vocal chords and face with [src]!", \
|
||||
"\red [user] reshapes your vocal chords and face with [src]!")
|
||||
"\red [user] reshapes [M]'s vocal cords and face with [src]!", \
|
||||
"\red [user] reshapes your vocal cords and face with [src]!")
|
||||
else
|
||||
M.visible_message( \
|
||||
"\red [user] reshapes their vocal chords and face with [src]!", \
|
||||
"\red You reshape your vocal chords and face with [src]!")
|
||||
"\red [user] reshapes their vocal cords and face with [src]!", \
|
||||
"\red You reshape your vocal cords and face with [src]!")
|
||||
|
||||
if(M == user && prob(25))
|
||||
user << "\red You mess up!"
|
||||
@@ -563,7 +563,7 @@ CIRCULAR SAW
|
||||
return ..()
|
||||
|
||||
if(S.robot)
|
||||
user << "Medical equipment for a robot arm? How would that do any good..."
|
||||
user << "Medical equipment for a robot arm? How would that do any good?"
|
||||
return
|
||||
|
||||
if(!S.open)
|
||||
@@ -814,7 +814,7 @@ CIRCULAR SAW
|
||||
usr << "<b>You have to cut the limb open first!</b>"
|
||||
return
|
||||
if(S.robot)
|
||||
user << "Medical equipment for a robot arm? How would that do any good..."
|
||||
user << "Medical equipment for a robot arm? How would that do any good?"
|
||||
return
|
||||
for(var/mob/O in viewers(M))
|
||||
O.show_message("\red [user.name] scans the wounds on [M.name]'s [S.display_name] with \the [src.name]", 1)
|
||||
|
||||
@@ -15,7 +15,8 @@ WELDINGTOOOL
|
||||
desc = "A wrench with common uses. Can be found in your hand."
|
||||
icon = 'items.dmi'
|
||||
icon_state = "wrench"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT | ONBELT
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
force = 5.0
|
||||
throwforce = 7.0
|
||||
w_class = 2.0
|
||||
@@ -46,7 +47,8 @@ WELDINGTOOOL
|
||||
name = "Welding Tool"
|
||||
icon = 'items.dmi'
|
||||
icon_state = "welder"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT | ONBELT
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
force = 3.0
|
||||
throwforce = 5.0
|
||||
throw_speed = 1
|
||||
@@ -225,7 +227,6 @@ WELDINGTOOOL
|
||||
src.damtype = "brute"
|
||||
src.icon_state = "welder"
|
||||
src.welding = 0
|
||||
return
|
||||
|
||||
|
||||
eyecheck(mob/user as mob)
|
||||
@@ -314,7 +315,8 @@ WELDINGTOOOL
|
||||
desc = "This cuts wires."
|
||||
icon = 'items.dmi'
|
||||
icon_state = "cutters"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT | ONBELT
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
force = 6.0
|
||||
throw_speed = 2
|
||||
throw_range = 9
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
desc = "Truly, the weapon of a madman. Who would think to fight fire with an axe?"
|
||||
force = 5
|
||||
w_class = 4.0
|
||||
flags = ONBACK
|
||||
slot_flags = SLOT_BACK
|
||||
force_unwielded = 5
|
||||
force_wielded = 18
|
||||
|
||||
|
||||
@@ -55,7 +55,8 @@
|
||||
item_state = "flashbang"
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
flags = FPRINT | TABLEPASS | CONDUCT | ONBELT
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
/obj/item/weapon/firbang/afterattack(atom/target as mob|obj|turf|area, mob/user as mob)
|
||||
if (user.equipped() == src)
|
||||
|
||||
@@ -8,7 +8,8 @@
|
||||
m_amt = 10000
|
||||
frequency = 1449
|
||||
w_class = 5.0
|
||||
flags = 323
|
||||
flags = FPRINT | CONDUCT | TABLEPASS
|
||||
slot_flags = SLOT_BACK
|
||||
item_state = "electropack"
|
||||
|
||||
/obj/item/device/radio/electropack/examine()
|
||||
|
||||
@@ -8,8 +8,10 @@
|
||||
g_amt = 0
|
||||
m_amt = 75
|
||||
subspace_transmission = 1
|
||||
protective_temperature = 0
|
||||
canhear_range = 1 // can't hear headsets from very far away
|
||||
|
||||
slot_flags = SLOT_EARS
|
||||
protective_temperature = 0
|
||||
var/translate_binary = 0
|
||||
var/translate_hive = 0
|
||||
var/obj/item/device/encryptionkey/keyslot1 = null
|
||||
@@ -246,4 +248,4 @@
|
||||
src.name = "broken radio headset"
|
||||
return
|
||||
|
||||
return
|
||||
return
|
||||
@@ -26,7 +26,8 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
|
||||
var/list/channels = list() //see communications.dm for full list. First channes is a "default" for :h
|
||||
var/subspace_transmission = 0
|
||||
// "Example" = FREQ_LISTENING|FREQ_BROADCASTING
|
||||
flags = 450 // hello i'm a fucking idiot why is this 450?? CODE GODS PLEASE EXPLAIN~
|
||||
flags = FPRINT | CONDUCT | TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
throw_speed = 2
|
||||
throw_range = 9
|
||||
w_class = 2
|
||||
@@ -43,11 +44,11 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
|
||||
/obj/item/device/radio
|
||||
var/datum/radio_frequency/radio_connection
|
||||
var/list/datum/radio_frequency/secure_radio_connections = new
|
||||
proc
|
||||
set_frequency(new_frequency)
|
||||
radio_controller.remove_object(src, frequency)
|
||||
frequency = new_frequency
|
||||
radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT)
|
||||
|
||||
proc/set_frequency(new_frequency)
|
||||
radio_controller.remove_object(src, frequency)
|
||||
frequency = new_frequency
|
||||
radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -184,7 +184,7 @@
|
||||
if ((!( istype(M, /mob) ) || get_dist(src, user) > 1 || M.loc != src.loc || user.restrained() || usr.stat || M.buckled || istype(usr, /mob/living/silicon/pai)))
|
||||
return
|
||||
M.pixel_y = 6
|
||||
M.update_lying()
|
||||
M.update_clothing()
|
||||
density = 1
|
||||
icon_state = "up"
|
||||
..()
|
||||
|
||||
@@ -47,6 +47,7 @@
|
||||
return
|
||||
/* Remove these comments to re-enable BoH BoH Singuloths.-Hawk.
|
||||
if(istype(W, /obj/item/weapon/storage/backpack/holding) && !W.crit_fail)
|
||||
investigate_log("has become a singularity. Caused by [user.key]","singulo")
|
||||
user << "\red The Bluespace interfaces of the two devices catastrophically malfunction!"
|
||||
del(W)
|
||||
var/obj/machinery/singularity/singulo = new /obj/machinery/singularity (get_turf(src))
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
icon = 'belts.dmi'
|
||||
icon_state = "utilitybelt"
|
||||
item_state = "utility"
|
||||
flags = FPRINT | TABLEPASS | ONBELT
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
max_w_class = 3
|
||||
max_combined_w_class = 21
|
||||
|
||||
|
||||
@@ -1,6 +1,27 @@
|
||||
obj/structure
|
||||
icon = 'structures.dmi'
|
||||
|
||||
obj/structure/blob_act()
|
||||
if(prob(50))
|
||||
del(src)
|
||||
|
||||
obj/structure/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
del(src)
|
||||
return
|
||||
if(2.0)
|
||||
if(prob(50))
|
||||
del(src)
|
||||
return
|
||||
if(3.0)
|
||||
return
|
||||
|
||||
obj/structure/meteorhit(obj/O as obj)
|
||||
del(src)
|
||||
|
||||
|
||||
|
||||
/obj/structure/girder
|
||||
icon_state = "girder"
|
||||
anchored = 1
|
||||
|
||||
@@ -20,6 +20,11 @@ TABLE AND RACK OBJECT INTERATIONS
|
||||
else
|
||||
return
|
||||
|
||||
/obj/structure/table/examine()
|
||||
set src in oview()
|
||||
..()
|
||||
if(dented)
|
||||
usr << "It looks to have [dented] [prob(30) ? "face shaped " : ""] dents in it."
|
||||
|
||||
/obj/structure/table/blob_act()
|
||||
if(prob(75))
|
||||
@@ -39,10 +44,10 @@ TABLE AND RACK OBJECT INTERATIONS
|
||||
|
||||
/obj/structure/table/attack_paw(mob/user as mob)
|
||||
if ((usr.mutations & HULK))
|
||||
usr << text("\blue You destroy the table.")
|
||||
usr << "\blue You destroy the table."
|
||||
for(var/mob/O in oviewers())
|
||||
if ((O.client && !( O.blinded )))
|
||||
O << text("\red [] smashes the table apart!", usr)
|
||||
O << "\red [user] smashes the table apart!"
|
||||
if(istype(src, /obj/structure/table/reinforced))
|
||||
new /obj/item/weapon/table_parts/reinforced( src.loc )
|
||||
else if(istype(src, /obj/structure/table/woodentable))
|
||||
@@ -57,16 +62,16 @@ TABLE AND RACK OBJECT INTERATIONS
|
||||
user.layer = TURF_LAYER
|
||||
for(var/mob/O in oviewers())
|
||||
if ((O.client && !( O.blinded )))
|
||||
O << text("[] hides under the table!", user)
|
||||
O << "[user] hides under the table!"
|
||||
//Foreach goto(69)
|
||||
return
|
||||
|
||||
|
||||
/obj/structure/table/attack_alien(mob/user as mob) //Removed code for larva since it doesn't work. Previous code is now a larva ability. /N
|
||||
usr << text("\green You destroy the table.")
|
||||
usr << "\green You destroy the table."
|
||||
for(var/mob/O in oviewers())
|
||||
if ((O.client && !( O.blinded )))
|
||||
O << text("\red [] slices the table apart!", user)
|
||||
O << "\red [user] slices the table apart!"
|
||||
if(istype(src, /obj/structure/table/reinforced))
|
||||
new /obj/item/weapon/table_parts/reinforced( src.loc )
|
||||
else if(istype(src, /obj/structure/table/woodentable))
|
||||
@@ -80,10 +85,10 @@ TABLE AND RACK OBJECT INTERATIONS
|
||||
|
||||
/obj/structure/table/attack_animal(mob/living/simple_animal/user as mob) //Removed code for larva since it doesn't work. Previous code is now a larva ability. /N
|
||||
if(user.wall_smash)
|
||||
usr << text("\red You destroy the table.")
|
||||
usr << "\red You destroy the table."
|
||||
for(var/mob/O in oviewers())
|
||||
if ((O.client && !( O.blinded )))
|
||||
O << text("\red [] smashes the table apart!", user)
|
||||
O << "\red [user] smashes the table apart!"
|
||||
if(istype(src, /obj/structure/table/reinforced))
|
||||
new /obj/item/weapon/table_parts/reinforced( src.loc )
|
||||
else if(istype(src, /obj/structure/table/woodentable))
|
||||
@@ -98,11 +103,11 @@ TABLE AND RACK OBJECT INTERATIONS
|
||||
|
||||
|
||||
/obj/structure/table/attack_hand(mob/user as mob)
|
||||
if (usr.mutations & HULK)
|
||||
usr << text("\blue You destroy the table.")
|
||||
if ((usr.mutations & HULK))
|
||||
usr << "\blue You destroy the table."
|
||||
for(var/mob/O in oviewers())
|
||||
if ((O.client && !( O.blinded )))
|
||||
O << text("\red [] smashes the table apart!", usr)
|
||||
O << "\red [user] smashes the table apart!"
|
||||
if(istype(src, /obj/structure/table/reinforced))
|
||||
new /obj/item/weapon/table_parts/reinforced( src.loc )
|
||||
else if(istype(src, /obj/structure/table/woodentable))
|
||||
@@ -117,7 +122,7 @@ TABLE AND RACK OBJECT INTERATIONS
|
||||
/obj/structure/table/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(air_group || (height==0)) return 1
|
||||
|
||||
if(istype(mover) && (mover.checkpass(PASSTABLE) || (mover.flags & TABLEPASS) || mover.throwing)) //WTF do things hit tables like that? Jeez.
|
||||
if(istype(mover) && (mover.pass_flags & PASSTABLE || (mover.flags & TABLEPASS) || mover.throwing)) //WTF do things hit tables like that? Jeez.
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
@@ -154,23 +159,23 @@ TABLE AND RACK OBJECT INTERATIONS
|
||||
affecting.take_damage(rand(10,15), 0)
|
||||
H.Weaken(2)
|
||||
if(prob(20)) // One chance in 20 to DENT THE TABLE
|
||||
affecting.take_damage(rand(0,5), 0) //Extra damage
|
||||
affecting.take_damage(rand(5,10), 0) //Extra damage
|
||||
if(dented)
|
||||
G.assailant.visible_message("\red \The [G.assailant] smashes \the [H]'s head on \the [src] with enough force to further deform \the [src]!\nYou wish you could unhear that sound.",\
|
||||
"\red You smash \the [H]'s head on \the [src] with enough force to leave another dent!\n[prob(50)?"That was a satisfying noise." : "That sound will haunt your nightmares"]",\
|
||||
"\red You hear the nauseating crunch of bone and gristle on solid metal and the squeal of said metal deforming.")
|
||||
else
|
||||
dented = 1
|
||||
G.assailant.visible_message("\red \The [G.assailant] smashes \the [H]'s head on \the [src] so hard it left a dent!\nYou wish you could unhear that sound.",\
|
||||
"\red You smash \the [H]'s head on \the [src] with enough force to leave a dent!\n[prob(5)?"That was a satisfying noise." : "That sound will haunt your nightmares"]",\
|
||||
"\red You hear the nauseating crunch of bone and gristle on solid metal and the squeal of said metal deforming.")
|
||||
dented++
|
||||
else if(prob(50))
|
||||
G.assailant.visible_message("\red [G.assailant] smashes \the [H]'s head on \the [src], [H.gender == MALE? "his" : "her"] bone and cartilage making a loud crunch!",\
|
||||
"\red You smash \the [H]'s head on \the [src], [H.gender == MALE? "his" : "her"] bone and cartilage making a loud crunch!",\
|
||||
G.assailant.visible_message("\red [G.assailant] smashes \the [H]'s head on \the [src], [H.get_gender_form("its")] bone and cartilage making a loud crunch!",\
|
||||
"\red You smash \the [H]'s head on \the [src], [H.get_gender_form("its")] bone and cartilage making a loud crunch!",\
|
||||
"\red You hear the nauseating crunch of bone and gristle on solid metal, the noise echoing through the room.")
|
||||
else
|
||||
G.assailant.visible_message("\red [G.assailant] smashes \the [H]'s head on \the [src], [H.gender == MALE? "his" : "her"] nose smashed and face bloodied!",\
|
||||
"\red You smash \the [H]'s head on \the [src], [H.gender == MALE? "his" : "her"] nose smashed and face bloodied!",\
|
||||
G.assailant.visible_message("\red [G.assailant] smashes \the [H]'s head on \the [src], [H.get_gender_form("its")] nose smashed and face bloodied!",\
|
||||
"\red You smash \the [H]'s head on \the [src], [H.get_gender_form("its")] nose smashed and face bloodied!",\
|
||||
"\red You hear the nauseating crunch of bone and gristle on solid metal and the gurgling gasp of someone who is trying to breathe through their own blood.")
|
||||
else
|
||||
affecting.take_damage(rand(5,10), 0)
|
||||
@@ -185,7 +190,7 @@ TABLE AND RACK OBJECT INTERATIONS
|
||||
G.affecting.Weaken(5)
|
||||
for(var/mob/O in viewers(world.view, src))
|
||||
if (O.client)
|
||||
O << text("\red [] puts [] on the table.", G.assailant, G.affecting)
|
||||
O << "\red [G.assailant] puts [G.affecting] on the table."
|
||||
del(W)
|
||||
return
|
||||
|
||||
@@ -209,7 +214,7 @@ TABLE AND RACK OBJECT INTERATIONS
|
||||
playsound(src.loc, 'blade1.ogg', 50, 1)
|
||||
playsound(src.loc, "sparks", 50, 1)
|
||||
for(var/mob/O in viewers(user, 4))
|
||||
O.show_message(text("\blue The table was sliced apart by []!", user), 1, text("\red You hear metal coming apart."), 2)
|
||||
O.show_message("\blue The table was sliced apart by [user]!", 1, "\red You hear metal coming apart.", 2)
|
||||
new /obj/item/weapon/table_parts( src.loc )
|
||||
del(src)
|
||||
return
|
||||
@@ -231,7 +236,7 @@ TABLE AND RACK OBJECT INTERATIONS
|
||||
G.affecting.Weaken(5)
|
||||
for(var/mob/O in viewers(world.view, src))
|
||||
if (O.client)
|
||||
O << text("\red [] puts [] on the wooden table.", G.assailant, G.affecting)
|
||||
O << "\red [G.assailant] puts [G.affecting] on the wooden table."
|
||||
del(W)
|
||||
return
|
||||
if (istype(W, /obj/item/weapon/wrench))
|
||||
@@ -251,7 +256,7 @@ TABLE AND RACK OBJECT INTERATIONS
|
||||
playsound(src.loc, 'blade1.ogg', 50, 1)
|
||||
playsound(src.loc, "sparks", 50, 1)
|
||||
for(var/mob/O in viewers(user, 4))
|
||||
O.show_message(text("\blue The wooden table was sliced apart by []!", user), 1, text("\red You hear wood coming apart."), 2)
|
||||
O.show_message("\blue The wooden table was sliced apart by [user]!", 1, "\red You hear wood coming apart.", 2)
|
||||
new /obj/item/weapon/table_parts/wood( src.loc )
|
||||
del(src)
|
||||
return
|
||||
@@ -273,7 +278,7 @@ TABLE AND RACK OBJECT INTERATIONS
|
||||
G.affecting.Weaken(5)
|
||||
for(var/mob/O in viewers(world.view, src))
|
||||
if (O.client)
|
||||
O << text("\red [] puts [] on the reinforced table.", G.assailant, G.affecting)
|
||||
O << "\red [G.assailant] puts [G.affecting] on the reinforced table."
|
||||
del(W)
|
||||
return
|
||||
|
||||
@@ -321,7 +326,7 @@ TABLE AND RACK OBJECT INTERATIONS
|
||||
playsound(src.loc, 'blade1.ogg', 50, 1)
|
||||
playsound(src.loc, "sparks", 50, 1)
|
||||
for(var/mob/O in viewers(user, 4))
|
||||
O.show_message(text("\blue The reinforced table was sliced apart by []!", user), 1, text("\red You hear metal coming apart."), 2)
|
||||
O.show_message("\blue The reinforced table was sliced apart by [user]!", 1, "\red You hear metal coming apart.", 2)
|
||||
new /obj/item/weapon/table_parts/reinforced( src.loc )
|
||||
del(src)
|
||||
return
|
||||
@@ -358,7 +363,7 @@ TABLE AND RACK OBJECT INTERATIONS
|
||||
if(air_group || (height==0)) return 1
|
||||
if(src.density == 0) //Because broken racks -Agouri |TODO: SPRITE!|
|
||||
return 1
|
||||
if(istype(mover) && (mover.checkpass(PASSTABLE) || mover.flags & TABLEPASS || mover.throwing))
|
||||
if(istype(mover) && (mover.pass_flags & PASSTABLE || mover.flags & TABLEPASS || mover.throwing))
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
@@ -5,7 +5,8 @@
|
||||
|
||||
var/datum/gas_mixture/air_contents = null
|
||||
var/distribute_pressure = ONE_ATMOSPHERE
|
||||
flags = FPRINT | TABLEPASS | CONDUCT | ONBACK
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
slot_flags = SLOT_BACK
|
||||
|
||||
pressure_resistance = ONE_ATMOSPHERE*5
|
||||
|
||||
@@ -34,7 +35,7 @@
|
||||
set src in usr
|
||||
..()
|
||||
if(air_contents.oxygen < 1 && loc==usr)
|
||||
usr << text("\red <B>The meter on the [src.name] indicates you are almost out of air!</B>")
|
||||
usr << "\red <B>The meter on the [src.name] indicates you are almost out of air!</B>"
|
||||
usr << sound('alert.ogg')
|
||||
|
||||
|
||||
@@ -43,6 +44,7 @@
|
||||
desc = "Contains dangerous plasma. Do not inhale."
|
||||
icon_state = "plasma"
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
slot_flags = null //they have no straps!
|
||||
|
||||
/obj/item/weapon/tank/blob_act()
|
||||
if(prob(50))
|
||||
@@ -282,7 +284,7 @@
|
||||
else
|
||||
descriptive = "furiously hot"
|
||||
|
||||
usr << text("\blue \The \icon[][src] feels []", icon, descriptive)
|
||||
usr << "\blue \The \icon[icon][src] feels [descriptive]"
|
||||
|
||||
return
|
||||
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
name = "emergency oxygen tank"
|
||||
desc = "Used for emergencies. Contains very little oxygen, so try to conserve it until you actually need it."
|
||||
icon_state = "emergency"
|
||||
flags = FPRINT | TABLEPASS | ONBELT | CONDUCT
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = 2.0
|
||||
force = 4.0
|
||||
distribute_pressure = ONE_ATMOSPHERE*O2STANDARD
|
||||
|
||||
+163
-178
@@ -10,195 +10,180 @@
|
||||
var/valve_open = 0
|
||||
var/toggle = 1
|
||||
|
||||
proc
|
||||
process_activation(var/obj/item/device/D)
|
||||
/obj/item/device/transfer_valve/proc/process_activation(var/obj/item/device/D)
|
||||
|
||||
IsAssemblyHolder()
|
||||
return 1
|
||||
/obj/item/device/transfer_valve/IsAssemblyHolder()
|
||||
return 1
|
||||
|
||||
attackby(obj/item/item, mob/user)
|
||||
if(istype(item, /obj/item/weapon/tank))
|
||||
if(tank_one && tank_two)
|
||||
user << "<span class='warning'>There are already two tanks attached, remove one first.</span>"
|
||||
return
|
||||
/obj/item/device/transfer_valve/attackby(obj/item/item, mob/user)
|
||||
if(istype(item, /obj/item/weapon/tank))
|
||||
if(tank_one && tank_two)
|
||||
user << "<span class='warning'>There are already two tanks attached, remove one first.</span>"
|
||||
return
|
||||
|
||||
if(!tank_one)
|
||||
tank_one = item
|
||||
user.drop_item()
|
||||
item.loc = src
|
||||
user << "<span class='notice'>You attach the tank to the transfer valve.</span>"
|
||||
else if(!tank_two)
|
||||
tank_two = item
|
||||
user.drop_item()
|
||||
item.loc = src
|
||||
user << "<span class='notice'>You attach the tank to the transfer valve.</span>"
|
||||
if(!tank_one)
|
||||
tank_one = item
|
||||
user.drop_item()
|
||||
item.loc = src
|
||||
user << "<span class='notice'>You attach the tank to the transfer valve.</span>"
|
||||
else if(!tank_two)
|
||||
tank_two = item
|
||||
user.drop_item()
|
||||
item.loc = src
|
||||
user << "<span class='notice'>You attach the tank to the transfer valve.</span>"
|
||||
|
||||
update_icon()
|
||||
update_icon()
|
||||
//TODO: Have this take an assemblyholder
|
||||
else if(isassembly(item))
|
||||
var/obj/item/device/assembly/A = item
|
||||
if(A.secured)
|
||||
user << "<span class='notice'>The device is secured.</span>"
|
||||
return
|
||||
if(attached_device)
|
||||
user << "<span class='warning'>There is already an device attached to the valve, remove it first.</span>"
|
||||
return
|
||||
user.remove_from_mob(item)
|
||||
attached_device = A
|
||||
A.loc = src
|
||||
user << "<span class='notice'>You attach the [item] to the valve controls and secure it.</span>"
|
||||
A.holder = src
|
||||
A.toggle_secure()
|
||||
|
||||
bombers += "[key_name(user)] attached a [item] to a transfer valve."
|
||||
message_admins("[key_name_admin(user)] attached a [item] to a transfer valve.")
|
||||
log_game("[key_name_admin(user)] attached a [item] to a transfer valve.")
|
||||
attacher = key_name(user)
|
||||
return
|
||||
|
||||
|
||||
HasProximity(atom/movable/AM as mob|obj)
|
||||
if(!attached_device) return
|
||||
attached_device.HasProximity(AM)
|
||||
return
|
||||
|
||||
|
||||
attack_self(mob/user as mob)
|
||||
user.machine = src
|
||||
var/dat = {"<B> Valve properties: </B>
|
||||
<BR> <B> Attachment one:</B> [tank_one] [tank_one ? "<A href='?src=\ref[src];tankone=1'>Remove</A>" : ""]
|
||||
<BR> <B> Attachment two:</B> [tank_two] [tank_two ? "<A href='?src=\ref[src];tanktwo=1'>Remove</A>" : ""]
|
||||
<BR> <B> Valve attachment:</B> [attached_device ? "<A href='?src=\ref[src];device=1'>[attached_device]</A>" : "None"] [attached_device ? "<A href='?src=\ref[src];rem_device=1'>Remove</A>" : ""]
|
||||
<BR> <B> Valve status: </B> [ valve_open ? "<A href='?src=\ref[src];open=1'>Closed</A> <B>Open</B>" : "<B>Closed</B> <A href='?src=\ref[src];open=1'>Open</A>"]"}
|
||||
|
||||
user << browse(dat, "window=trans_valve;size=600x300")
|
||||
onclose(user, "trans_valve")
|
||||
return
|
||||
|
||||
Topic(href, href_list)
|
||||
..()
|
||||
if ( usr.stat || usr.restrained() )
|
||||
else if(isassembly(item))
|
||||
var/obj/item/device/assembly/A = item
|
||||
if(A.secured)
|
||||
user << "<span class='notice'>The device is secured.</span>"
|
||||
return
|
||||
if (src.loc == usr)
|
||||
if(tank_one && href_list["tankone"])
|
||||
split_gases()
|
||||
valve_open = 0
|
||||
tank_one.loc = get_turf(src)
|
||||
tank_one = null
|
||||
update_icon()
|
||||
else if(tank_two && href_list["tanktwo"])
|
||||
split_gases()
|
||||
valve_open = 0
|
||||
tank_two.loc = get_turf(src)
|
||||
tank_two = null
|
||||
update_icon()
|
||||
else if(href_list["open"])
|
||||
toggle_valve()
|
||||
else if(attached_device)
|
||||
if(href_list["rem_device"])
|
||||
attached_device.loc = get_turf(src)
|
||||
attached_device:holder = null
|
||||
attached_device = null
|
||||
update_icon()
|
||||
if(href_list["device"])
|
||||
attached_device.attack_self(usr)
|
||||
|
||||
src.attack_self(usr)
|
||||
src.add_fingerprint(usr)
|
||||
return
|
||||
return
|
||||
|
||||
process_activation(var/obj/item/device/D)
|
||||
if(toggle)
|
||||
toggle = 0
|
||||
toggle_valve()
|
||||
spawn(50) // To stop a signal being spammed from a proxy sensor constantly going off or whatever
|
||||
toggle = 1
|
||||
|
||||
process()
|
||||
|
||||
update_icon()
|
||||
src.overlays = new/list()
|
||||
src.underlays = new/list()
|
||||
if(!tank_one && !tank_two && !attached_device)
|
||||
icon_state = "valve_1"
|
||||
return
|
||||
icon_state = "valve"
|
||||
var/tank_one_icon = ""
|
||||
var/tank_two_icon = ""
|
||||
if(tank_one)
|
||||
tank_one_icon = tank_one.icon_state
|
||||
if(tank_two)
|
||||
tank_two_icon = tank_two.icon_state
|
||||
if(tank_one)
|
||||
var/icon/I = new(src.icon, icon_state = "[tank_one_icon]")
|
||||
//var/obj/effect/overlay/tank_one_overlay = new
|
||||
//tank_one_overlay.icon = src.icon
|
||||
//tank_one_overlay.icon_state = tank_one_icon
|
||||
src.underlays += I
|
||||
if(tank_two)
|
||||
var/icon/J = new(src.icon, icon_state = "[tank_two_icon]")
|
||||
//I.Flip(EAST) this breaks the perspective!
|
||||
J.Shift(WEST, 13)
|
||||
//var/obj/underlay/tank_two_overlay = new
|
||||
//tank_two_overlay.icon = I
|
||||
src.underlays += J
|
||||
if(attached_device)
|
||||
var/icon/K = new(src.icon, icon_state = "device")
|
||||
//var/obj/effect/overlay/device_overlay = new
|
||||
//device_overlay.icon = src.icon
|
||||
//device_overlay.icon_state = device_icon
|
||||
src.overlays += K
|
||||
proc
|
||||
merge_gases()
|
||||
tank_two.air_contents.volume += tank_one.air_contents.volume
|
||||
var/datum/gas_mixture/temp
|
||||
temp = tank_one.air_contents.remove_ratio(1)
|
||||
tank_two.air_contents.merge(temp)
|
||||
|
||||
split_gases()
|
||||
if (!valve_open || !tank_one || !tank_two)
|
||||
return
|
||||
var/ratio1 = tank_one.air_contents.volume/tank_two.air_contents.volume
|
||||
var/datum/gas_mixture/temp
|
||||
temp = tank_two.air_contents.remove_ratio(ratio1)
|
||||
tank_one.air_contents.merge(temp)
|
||||
tank_two.air_contents.volume -= tank_one.air_contents.volume
|
||||
|
||||
/*
|
||||
Exadv1: I know this isn't how it's going to work, but this was just to check
|
||||
it explodes properly when it gets a signal (and it does).
|
||||
*/
|
||||
|
||||
toggle_valve()
|
||||
if(valve_open==0 && (tank_one && tank_two))
|
||||
valve_open = 1
|
||||
var/turf/bombturf = get_turf(src)
|
||||
var/bombarea = bombturf.loc.name
|
||||
var/log_str = "Bomb valve opened in [bombarea] with device attacher: [attacher]. Last touched by: [src.fingerprintslast]"
|
||||
bombers += log_str
|
||||
message_admins(log_str)
|
||||
log_game(log_str)
|
||||
merge_gases()
|
||||
spawn(20) // In case one tank bursts
|
||||
for (var/i=0,i<5,i++)
|
||||
src.update_icon()
|
||||
sleep(10)
|
||||
src.update_icon()
|
||||
|
||||
else if(valve_open==1 && (tank_one && tank_two))
|
||||
split_gases()
|
||||
valve_open = 0
|
||||
src.update_icon()
|
||||
|
||||
// this doesn't do anything but the timer etc. expects it to be here
|
||||
// eventually maybe have it update icon to show state (timer, prox etc.) like old bombs
|
||||
c_state()
|
||||
user << "<span class='warning'>There is already an device attached to the valve, remove it first.</span>"
|
||||
return
|
||||
user.remove_from_mob(item)
|
||||
attached_device = A
|
||||
A.loc = src
|
||||
user << "<span class='notice'>You attach the [item] to the valve controls and secure it.</span>"
|
||||
A.holder = src
|
||||
A.toggle_secure()
|
||||
|
||||
bombers += "[key_name(user)] attached a [item] to a transfer valve."
|
||||
message_admins("[key_name_admin(user)] attached a [item] to a transfer valve.")
|
||||
log_game("[key_name_admin(user)] attached a [item] to a transfer valve.")
|
||||
attacher = key_name(user)
|
||||
return
|
||||
|
||||
|
||||
/obj/item/device/transfer_valve/HasProximity(atom/movable/AM as mob|obj)
|
||||
if(!attached_device) return
|
||||
attached_device.HasProximity(AM)
|
||||
return
|
||||
|
||||
|
||||
/obj/item/device/transfer_valve/attack_self(mob/user as mob)
|
||||
user.machine = src
|
||||
var/dat = {"<B> Valve properties: </B>
|
||||
<BR> <B> Attachment one:</B> [tank_one] [tank_one ? "<A href='?src=\ref[src];tankone=1'>Remove</A>" : ""]
|
||||
<BR> <B> Attachment two:</B> [tank_two] [tank_two ? "<A href='?src=\ref[src];tanktwo=1'>Remove</A>" : ""]
|
||||
<BR> <B> Valve attachment:</B> [attached_device ? "<A href='?src=\ref[src];device=1'>[attached_device]</A>" : "None"] [attached_device ? "<A href='?src=\ref[src];rem_device=1'>Remove</A>" : ""]
|
||||
<BR> <B> Valve status: </B> [ valve_open ? "<A href='?src=\ref[src];open=1'>Closed</A> <B>Open</B>" : "<B>Closed</B> <A href='?src=\ref[src];open=1'>Open</A>"]"}
|
||||
|
||||
user << browse(dat, "window=trans_valve;size=600x300")
|
||||
onclose(user, "trans_valve")
|
||||
return
|
||||
|
||||
/obj/item/device/transfer_valve/Topic(href, href_list)
|
||||
..()
|
||||
if ( usr.stat || usr.restrained() )
|
||||
return
|
||||
if (src.loc == usr)
|
||||
if(tank_one && href_list["tankone"])
|
||||
split_gases()
|
||||
valve_open = 0
|
||||
tank_one.loc = get_turf(src)
|
||||
tank_one = null
|
||||
update_icon()
|
||||
else if(tank_two && href_list["tanktwo"])
|
||||
split_gases()
|
||||
valve_open = 0
|
||||
tank_two.loc = get_turf(src)
|
||||
tank_two = null
|
||||
update_icon()
|
||||
else if(href_list["open"])
|
||||
toggle_valve()
|
||||
else if(attached_device)
|
||||
if(href_list["rem_device"])
|
||||
attached_device.loc = get_turf(src)
|
||||
attached_device:holder = null
|
||||
attached_device = null
|
||||
update_icon()
|
||||
if(href_list["device"])
|
||||
attached_device.attack_self(usr)
|
||||
|
||||
src.attack_self(usr)
|
||||
src.add_fingerprint(usr)
|
||||
return
|
||||
return
|
||||
|
||||
/obj/item/device/transfer_valve/process_activation(var/obj/item/device/D)
|
||||
if(toggle)
|
||||
toggle = 0
|
||||
toggle_valve()
|
||||
spawn(50) // To stop a signal being spammed from a proxy sensor constantly going off or whatever
|
||||
toggle = 1
|
||||
|
||||
/obj/item/device/transfer_valve/process()
|
||||
return
|
||||
|
||||
/obj/item/device/transfer_valve/update_icon()
|
||||
overlays = null
|
||||
underlays = null
|
||||
|
||||
if(!tank_one && !tank_two && !attached_device)
|
||||
icon_state = "valve_1"
|
||||
return
|
||||
icon_state = "valve"
|
||||
|
||||
if(tank_one)
|
||||
overlays += "[tank_one.icon_state]"
|
||||
if(tank_two)
|
||||
var/icon/J = new(icon, icon_state = "[tank_two.icon_state]")
|
||||
J.Shift(WEST, 13)
|
||||
underlays += J
|
||||
if(attached_device)
|
||||
overlays += "device"
|
||||
|
||||
/obj/item/device/transfer_valve/proc/merge_gases()
|
||||
tank_two.air_contents.volume += tank_one.air_contents.volume
|
||||
var/datum/gas_mixture/temp
|
||||
temp = tank_one.air_contents.remove_ratio(1)
|
||||
tank_two.air_contents.merge(temp)
|
||||
|
||||
/obj/item/device/transfer_valve/proc/split_gases()
|
||||
if (!valve_open || !tank_one || !tank_two)
|
||||
return
|
||||
var/ratio1 = tank_one.air_contents.volume/tank_two.air_contents.volume
|
||||
var/datum/gas_mixture/temp
|
||||
temp = tank_two.air_contents.remove_ratio(ratio1)
|
||||
tank_one.air_contents.merge(temp)
|
||||
tank_two.air_contents.volume -= tank_one.air_contents.volume
|
||||
|
||||
/*
|
||||
Exadv1: I know this isn't how it's going to work, but this was just to check
|
||||
it explodes properly when it gets a signal (and it does).
|
||||
*/
|
||||
|
||||
/obj/item/device/transfer_valve/proc/toggle_valve()
|
||||
if(valve_open==0 && (tank_one && tank_two))
|
||||
valve_open = 1
|
||||
var/turf/bombturf = get_turf(src)
|
||||
var/bombarea = bombturf.loc.name
|
||||
var/log_str = "Bomb valve opened in [bombarea] with device attacher: [attacher]. Last touched by: [src.fingerprintslast]"
|
||||
bombers += log_str
|
||||
message_admins(log_str)
|
||||
log_game(log_str)
|
||||
merge_gases()
|
||||
spawn(20) // In case one tank bursts
|
||||
for (var/i=0,i<5,i++)
|
||||
src.update_icon()
|
||||
sleep(10)
|
||||
src.update_icon()
|
||||
|
||||
else if(valve_open==1 && (tank_one && tank_two))
|
||||
split_gases()
|
||||
valve_open = 0
|
||||
src.update_icon()
|
||||
|
||||
// this doesn't do anything but the timer etc. expects it to be here
|
||||
// eventually maybe have it update icon to show state (timer, prox etc.) like old bombs
|
||||
/obj/item/device/transfer_valve/proc/c_state()
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/structure/falsewall/
|
||||
/obj/structure/falsewall
|
||||
attack_hand(mob/user as mob)
|
||||
if(density)
|
||||
// Open wall
|
||||
|
||||
@@ -312,7 +312,8 @@ A list of items and costs is stored under the datum of every game mode, alongsid
|
||||
var/temp = null //Temporary storage area for a message offering the option to destroy the radio
|
||||
var/selfdestruct = 0 //Set to 1 while the radio is self destructing itself.
|
||||
var/obj/item/device/radio/origradio = null
|
||||
flags = FPRINT | TABLEPASS | CONDUCT | ONBELT
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = 2.0
|
||||
item_state = "radio"
|
||||
throwforce = 5
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//todo: flushing, flushing heads, showers actually cleaning people
|
||||
//todo: toothbrushes, and some sort of "toilet-filthinator" for the hos
|
||||
|
||||
/obj/structure/toilet
|
||||
name = "toilet"
|
||||
@@ -8,18 +8,43 @@
|
||||
density = 0
|
||||
anchored = 1
|
||||
var/open = 0
|
||||
var/mob/swirlie = null
|
||||
|
||||
/obj/structure/toilet/New()
|
||||
open = round(rand(0, 1))
|
||||
update_icon()
|
||||
|
||||
/obj/structure/toilet/attack_hand()
|
||||
open = !open
|
||||
update_icon()
|
||||
if(!swirlie)
|
||||
open = !open
|
||||
update_icon()
|
||||
else
|
||||
usr.visible_message("<span class='danger'>[usr] slams the toilet seat onto [swirlie.name]'s head!</span>", "<span class='notice'>You slam the toilet seat onto [swirlie.name]'s head!</span>", "You hear reverberating porcelain.")
|
||||
swirlie.adjustBruteLoss(8)
|
||||
|
||||
/obj/structure/toilet/update_icon()
|
||||
icon_state = "toilet[open]"
|
||||
|
||||
/obj/structure/toilet/attackby(var/obj/item/I, var/mob/user)
|
||||
if(istype(I, /obj/item/weapon/grab))
|
||||
var/obj/item/weapon/grab/G = I
|
||||
var/mob/GM = G.affecting
|
||||
if(ismob(G.affecting))
|
||||
if(G.state>1 && GM.loc == get_turf(src))
|
||||
if(open && !swirlie)
|
||||
user.visible_message("<span class='danger'>[user] starts to give [GM.name] a swirlie!</span>", "<span class='notice'>You start to give [GM.name] a swirlie!</span>")
|
||||
swirlie = GM
|
||||
if(do_after(user, 30, 5, 0))
|
||||
user.visible_message("<span class='danger'>[user] gives [GM.name] a swirlie!</span>", "<span class='notice'>You give [GM.name] a swirlie!</span>", "You hear a toilet flushing.")
|
||||
if(!GM.internal)
|
||||
GM.adjustOxyLoss(5)
|
||||
swirlie = null
|
||||
else
|
||||
user.visible_message("<span class='danger'>[user] slams [GM.name] into the [src]!</span>", "<span class='notice'>You slam [GM.name] into the [src]!</span>")
|
||||
GM.adjustBruteLoss(8)
|
||||
else
|
||||
user << "<span class='notice'>You need a tighter grip.</span>"
|
||||
|
||||
|
||||
|
||||
/obj/structure/urinal
|
||||
@@ -30,9 +55,20 @@
|
||||
density = 0
|
||||
anchored = 1
|
||||
|
||||
/obj/structure/urinal/attackby(var/obj/item/I, var/mob/user)
|
||||
if(istype(I, /obj/item/weapon/grab))
|
||||
var/obj/item/weapon/grab/G = I
|
||||
var/mob/GM = G.affecting
|
||||
if(ismob(G.affecting))
|
||||
if(G.state>1 && GM.loc == get_turf(src))
|
||||
user.visible_message("<span class='danger'>[user] slams [GM.name] into the [src]!</span>", "<span class='notice'>You slam [GM.name] into the [src]!</span>")
|
||||
GM.adjustBruteLoss(8)
|
||||
else
|
||||
user << "<span class='notice'>You need a tighter grip.</span>"
|
||||
|
||||
|
||||
/obj/structure/shower
|
||||
|
||||
/obj/machinery/shower
|
||||
name = "shower"
|
||||
desc = "The HS-451. Installed in the 2550s by the Nanotrasen Hygiene Division."
|
||||
icon = 'watercloset.dmi'
|
||||
@@ -41,7 +77,9 @@
|
||||
anchored = 1
|
||||
var/on = 0
|
||||
var/obj/effect/mist/mymist = null
|
||||
var/ismist = 0 //needs a var so we can make it linger~
|
||||
var/ismist = 0 //needs a var so we can make it linger~
|
||||
var/watertemp = "normal" //freezing, normal, or boiling
|
||||
var/mobpresent = 0 //true if there is a mob on the shower's loc, this is to ease process()
|
||||
|
||||
//add heat controls? when emagged, you can freeze to death in it?
|
||||
|
||||
@@ -52,22 +90,37 @@
|
||||
layer = MOB_LAYER + 1
|
||||
mouse_opacity = 0
|
||||
|
||||
/obj/structure/shower/attack_hand(mob/M as mob)
|
||||
/obj/machinery/shower/attack_hand(mob/M as mob)
|
||||
on = !on
|
||||
update_icon()
|
||||
if(on && M.loc == loc)
|
||||
wash(M)
|
||||
check_heat(M)
|
||||
|
||||
/obj/structure/shower/attackby(mob/M as mob)
|
||||
attack_hand(M)
|
||||
/obj/machinery/shower/attackby(var/obj/item/I, var/mob/user)
|
||||
if(I.type == /obj/item/device/analyzer)
|
||||
user << "<span class='notice'>The water temperature seems to be [watertemp].</span>"
|
||||
if(istype(I, /obj/item/weapon/wrench))
|
||||
user << "<span class='notice'>You begin to adjust the temperature valve with the [I].</span>"
|
||||
if(do_after(user, 50))
|
||||
switch(watertemp)
|
||||
if("normal")
|
||||
watertemp = "freezing"
|
||||
if("freezing")
|
||||
watertemp = "boiling"
|
||||
if("boiling")
|
||||
watertemp = "normal"
|
||||
user.visible_message("<span class='notice'>[user] adjusts the shower with the [I].</span>", "<span class='notice'>You adjust the shower with the [I].</span>")
|
||||
|
||||
/obj/structure/shower/update_icon()
|
||||
overlays = null
|
||||
/obj/machinery/shower/update_icon() //this is terribly unreadable, but basically it makes the shower mist up
|
||||
overlays = null //once it's been on for a while, in addition to handling the water overlay.
|
||||
if(mymist)
|
||||
del(mymist)
|
||||
|
||||
if(on)
|
||||
overlays += image('watercloset.dmi', src, "water", MOB_LAYER + 1, dir)
|
||||
if(watertemp == "freezing")
|
||||
return
|
||||
if(!ismist)
|
||||
spawn(50)
|
||||
if(src && on)
|
||||
@@ -84,13 +137,20 @@
|
||||
del(mymist)
|
||||
ismist = 0
|
||||
|
||||
/obj/structure/shower/HasEntered(atom/movable/O as obj|mob)
|
||||
/obj/machinery/shower/HasEntered(atom/movable/O)
|
||||
..()
|
||||
wash(O)
|
||||
if(ismob(O))
|
||||
mobpresent += 1
|
||||
check_heat(O)
|
||||
|
||||
/obj/machinery/shower/Uncrossed(atom/movable/O)
|
||||
if(ismob(O))
|
||||
mobpresent -= 1
|
||||
..()
|
||||
|
||||
//Yes, showers are super powerful as far as washing goes.
|
||||
/obj/structure/shower/proc/wash(atom/movable/O as obj|mob)
|
||||
..()
|
||||
/obj/machinery/shower/proc/wash(atom/movable/O as obj|mob)
|
||||
if(!on) return
|
||||
|
||||
O.clean_blood()
|
||||
@@ -108,10 +168,10 @@
|
||||
var/mob/living/carbon/human/washer = O
|
||||
if(washer.head)
|
||||
washer.head.clean_blood()
|
||||
if(washer.w_uniform)
|
||||
washer.w_uniform.clean_blood()
|
||||
if(washer.wear_suit)
|
||||
washer.wear_suit.clean_blood()
|
||||
else if(washer.w_uniform)
|
||||
washer.w_uniform.clean_blood()
|
||||
if(washer.shoes)
|
||||
washer.shoes.clean_blood()
|
||||
if(washer.gloves)
|
||||
@@ -129,6 +189,26 @@
|
||||
for(var/obj/effect/overlay/R in tile)
|
||||
del(R)
|
||||
|
||||
/obj/machinery/shower/process()
|
||||
if(!on || !mobpresent) return
|
||||
for(var/mob/living/carbon/C in loc)
|
||||
check_heat(C)
|
||||
|
||||
/obj/machinery/shower/proc/check_heat(mob/M as mob)
|
||||
if(!on || watertemp == "normal") return
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
|
||||
if(watertemp == "freezing")
|
||||
C.bodytemperature = min(100, C.bodytemperature - 80)
|
||||
C << "<span class='warning'>The water is freezing!</span>"
|
||||
return
|
||||
if(watertemp == "boiling")
|
||||
C.bodytemperature = max(500, C.bodytemperature + 35)
|
||||
C.adjustFireLoss(10)
|
||||
C << "<span class='danger'>The water is searing!</span>"
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/bikehorn/rubberducky
|
||||
@@ -177,7 +257,7 @@
|
||||
else
|
||||
C.clean_blood() //other things that can't wear gloves should just wash the mob.
|
||||
for(var/mob/V in viewers(src, null))
|
||||
V.show_message(text("\blue [M] washes their hands using \the [src]."))
|
||||
V.show_message("\blue [M] washes their hands using \the [src].")
|
||||
|
||||
/obj/structure/sink/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
if(busy)
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
|
||||
if(istype(M, /mob/living/carbon/human) || istype(M, /mob/living/carbon/monkey))
|
||||
for(var/mob/O in viewers(world.view, src.loc))
|
||||
O << text("<font color='red'>[M] triggered the \icon[] [src]</font>", src)
|
||||
O << "<font color='red'>[M] triggered the \icon[src] [src]</font>"
|
||||
triggered = 1
|
||||
call(src,triggerproc)(M)
|
||||
|
||||
@@ -162,7 +162,7 @@
|
||||
for(var/mob/O in viewers(user, null))
|
||||
if(O == user)
|
||||
continue
|
||||
O.show_message(text("\red <B>[user] accidentally sets off the mousetrap, breaking their fingers.</B>"), 1)
|
||||
O.show_message("\red <B>[user] accidentally sets off the mousetrap, breaking their fingers.</B>", 1)
|
||||
return
|
||||
user << "\blue You disarm the mousetrap."
|
||||
armed = !armed
|
||||
@@ -179,7 +179,7 @@
|
||||
for(var/mob/O in viewers(user, null))
|
||||
if(O == user)
|
||||
continue
|
||||
O.show_message(text("\red <B>[user] accidentally sets off the mousetrap, breaking their fingers.</B>"), 1)
|
||||
O.show_message("\red <B>[user] accidentally sets off the mousetrap, breaking their fingers.</B>", 1)
|
||||
return
|
||||
..()
|
||||
|
||||
@@ -192,12 +192,12 @@
|
||||
for(var/mob/O in viewers(H, null))
|
||||
if(O == H)
|
||||
continue
|
||||
O.show_message(text("\red <B>[H] accidentally steps on the mousetrap.</B>"), 1)
|
||||
O.show_message("\red <B>[H] accidentally steps on the mousetrap.</B>", 1)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/mousetrap/hitby(A as mob|obj)
|
||||
if(!armed)
|
||||
return ..()
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\red <B>The mousetrap is triggered by [A].</B>"), 1)
|
||||
O.show_message("\red <B>The mousetrap is triggered by [A].</B>", 1)
|
||||
src.triggered(null)
|
||||
|
||||
+21
-19
@@ -34,7 +34,7 @@
|
||||
del(src)
|
||||
|
||||
/obj/structure/window/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(istype(mover) && mover.checkpass(PASSGLASS))
|
||||
if(istype(mover) && mover.pass_flags & PASSGLASS)
|
||||
return 1
|
||||
if (src.dir == SOUTHWEST || src.dir == SOUTHEAST || src.dir == NORTHWEST || src.dir == NORTHEAST)
|
||||
return 0 //full tile window, you can't move into it!
|
||||
@@ -44,7 +44,7 @@
|
||||
return 1
|
||||
|
||||
/obj/structure/window/CheckExit(atom/movable/O as mob|obj, target as turf)
|
||||
if(istype(O) && O.checkpass(PASSGLASS))
|
||||
if(istype(O) && O.pass_flags & PASSGLASS)
|
||||
return 1
|
||||
if (get_dir(O.loc, target) == dir)
|
||||
return 0
|
||||
@@ -68,7 +68,7 @@
|
||||
|
||||
..()
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\red <B>[src] was hit by [AM].</B>"), 1)
|
||||
O.show_message("\red <B>[src] was hit by [AM].</B>", 1)
|
||||
var/tforce = 0
|
||||
if(ismob(AM))
|
||||
tforce = 40
|
||||
@@ -90,12 +90,14 @@
|
||||
..()
|
||||
return
|
||||
|
||||
//These all need to be rewritten to use visiblemessage()
|
||||
|
||||
/obj/structure/window/attack_hand()
|
||||
if ((usr.mutations & HULK))
|
||||
usr << text("\blue You smash through the window.")
|
||||
usr << "\blue You smash through the window."
|
||||
for(var/mob/O in oviewers())
|
||||
if ((O.client && !( O.blinded )))
|
||||
O << text("\red [] smashes through the window!", usr)
|
||||
O << "\red [usr] smashes through the window!"
|
||||
src.health = 0
|
||||
new /obj/item/weapon/shard( src.loc )
|
||||
if(reinf) new /obj/item/stack/rods( src.loc)
|
||||
@@ -112,10 +114,10 @@
|
||||
|
||||
/obj/structure/window/attack_paw()
|
||||
if ((usr.mutations & HULK))
|
||||
usr << text("\blue You smash through the window.")
|
||||
usr << "\blue You smash through the window."
|
||||
for(var/mob/O in oviewers())
|
||||
if ((O.client && !( O.blinded )))
|
||||
O << text("\red [] smashes through the window!", usr)
|
||||
O << "\red [usr] smashes through the window!"
|
||||
src.health = 0
|
||||
new /obj/item/weapon/shard( src.loc )
|
||||
if(reinf) new /obj/item/stack/rods( src.loc)
|
||||
@@ -126,17 +128,17 @@
|
||||
/obj/structure/window/attack_alien()
|
||||
if (istype(usr, /mob/living/carbon/alien/larva))//Safety check for larva. /N
|
||||
return
|
||||
usr << text("\green You smash against the window.")
|
||||
usr << "\green You smash against the window."
|
||||
for(var/mob/O in oviewers())
|
||||
if ((O.client && !( O.blinded )))
|
||||
O << text("\red [] smashes against the window.", usr)
|
||||
O << "\red [usr] smashes against the window."
|
||||
playsound(src.loc, 'Glasshit.ogg', 100, 1)
|
||||
src.health -= 15
|
||||
if(src.health <= 0)
|
||||
usr << text("\green You smash through the window.")
|
||||
usr << "\green You smash through the window."
|
||||
for(var/mob/O in oviewers())
|
||||
if ((O.client && !( O.blinded )))
|
||||
O << text("\red [] smashes through the window!", usr)
|
||||
O << "\red [usr] smashes through the window!"
|
||||
src.health = 0
|
||||
new /obj/item/weapon/shard(src.loc)
|
||||
if(reinf)
|
||||
@@ -150,17 +152,17 @@
|
||||
/obj/structure/window/attack_animal(mob/living/simple_animal/M as mob)
|
||||
if (M.melee_damage_upper == 0)
|
||||
return
|
||||
M << text("\green You smash against the window.")
|
||||
M << "\green You smash against the window."
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O << text("\red [] smashes against the window.", M)
|
||||
O << "\red [M] smashes against the window."
|
||||
playsound(src.loc, 'Glasshit.ogg', 100, 1)
|
||||
src.health -= M.melee_damage_upper
|
||||
if(src.health <= 0)
|
||||
M << text("\green You smash through the window.")
|
||||
M << "\green You smash through the window."
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O << text("\red [] smashes through the window!", M)
|
||||
O << "\red [M] smashes through the window!"
|
||||
src.health = 0
|
||||
new /obj/item/weapon/shard(src.loc)
|
||||
if(reinf)
|
||||
@@ -174,17 +176,17 @@
|
||||
if(!istype(usr, /mob/living/carbon/metroid/adult))
|
||||
return
|
||||
|
||||
usr<< text("\green You smash against the window.")
|
||||
usr<< "\green You smash against the window."
|
||||
for(var/mob/O in oviewers())
|
||||
if ((O.client && !( O.blinded )))
|
||||
O << text("\red [] smashes against the window.", usr)
|
||||
O << "\red [usr] smashes against the window."
|
||||
playsound(src.loc, 'Glasshit.ogg', 100, 1)
|
||||
src.health -= rand(10,15)
|
||||
if(src.health <= 0)
|
||||
usr << text("\green You smash through the window.")
|
||||
usr << "\green You smash through the window."
|
||||
for(var/mob/O in oviewers())
|
||||
if ((O.client && !( O.blinded )))
|
||||
O << text("\red [] smashes through the window!", usr)
|
||||
O << "\red [usr] smashes through the window!"
|
||||
src.health = 0
|
||||
new /obj/item/weapon/shard(src.loc)
|
||||
if(reinf)
|
||||
|
||||
@@ -46,7 +46,7 @@ var/list/supply_groups = new()
|
||||
layer = 4
|
||||
|
||||
/obj/structure/plasticflaps/CanPass(atom/A, turf/T)
|
||||
if(istype(A) && A.checkpass(PASSGLASS))
|
||||
if(istype(A) && A.pass_flags&PASSGLASS)
|
||||
return prob(60)
|
||||
else if(istype(A, /mob/living)) // You Shall Not Pass!
|
||||
var/mob/living/M = A
|
||||
|
||||
@@ -3,10 +3,11 @@
|
||||
atom/var/list/suit_fibers
|
||||
|
||||
atom/proc/add_fibers(mob/living/carbon/human/M)
|
||||
if(M.gloves)
|
||||
if(M.gloves.transfer_blood) //bloodied gloves transfer blood to touched objects
|
||||
if(add_blood(M.gloves.bloody_hands_mob)) //only reduces the bloodiness of our gloves if the item wasn't already bloody
|
||||
M.gloves.transfer_blood--
|
||||
if(M.gloves && istype(M.gloves,/obj/item/clothing/))
|
||||
var/obj/item/clothing/gloves/G = M.gloves
|
||||
if(G.transfer_blood) //bloodied gloves transfer blood to touched objects
|
||||
if(add_blood(G.bloody_hands_mob)) //only reduces the bloodiness of our gloves if the item wasn't already bloody
|
||||
G.transfer_blood--
|
||||
else if(M.bloody_hands)
|
||||
if(add_blood(M.bloody_hands_mob))
|
||||
M.bloody_hands--
|
||||
@@ -133,10 +134,8 @@ obj/machinery/computer/forensic_scanning
|
||||
authenticated = 1
|
||||
updateDialog()
|
||||
return
|
||||
var/obj/item/weapon/card/id/I = M.equipped()
|
||||
if (I && istype(I))
|
||||
if(src.check_access(I))
|
||||
authenticated = 1
|
||||
if (allowed(M))
|
||||
authenticated = 1
|
||||
//usr << "\green Access Granted"
|
||||
//if(!authenticated)
|
||||
//usr << "\red Access Denied"
|
||||
@@ -166,7 +165,7 @@ obj/machinery/computer/forensic_scanning
|
||||
I.loc = src
|
||||
else
|
||||
usr << "Invalid Object Rejected."
|
||||
if("card")
|
||||
if("card") //Processing a fingerprint card.
|
||||
var/mob/M = usr
|
||||
var/obj/item/I = M.equipped()
|
||||
if(!(I && istype(I,/obj/item/weapon/f_card)))
|
||||
@@ -186,7 +185,7 @@ obj/machinery/computer/forensic_scanning
|
||||
process_card()
|
||||
else
|
||||
usr << "\red Invalid Object Rejected."
|
||||
if("database")
|
||||
if("database") //Viewing all records in each database
|
||||
canclear = 1
|
||||
if(href_list["delete_record"])
|
||||
delete_dossier(href_list["delete_record"])
|
||||
@@ -211,7 +210,7 @@ obj/machinery/computer/forensic_scanning
|
||||
for(var/atom in misc)
|
||||
var/list/data_entry = misc[atom]
|
||||
temp += "<a href='?src=\ref[src];operation=auxiliary;identifier=[atom]'>{[data_entry[3]]}</a><br>"
|
||||
if("record")
|
||||
if("record") //Viewing a record from the "files" database.
|
||||
canclear = 0
|
||||
if(files)
|
||||
temp = "<b>Criminal Evidence Database</b><br><br>"
|
||||
@@ -245,7 +244,7 @@ obj/machinery/computer/forensic_scanning
|
||||
else
|
||||
temp = "ERROR. Database not found!<br>"
|
||||
temp += "<br><a href='?src=\ref[src];operation=database'>{Return}</a>"
|
||||
if("databaseprint")
|
||||
if("databaseprint") //Printing from the "files" database.
|
||||
if(files)
|
||||
var/obj/item/weapon/paper/P = new(loc)
|
||||
P.name = "Database File (Dossier [files.Find(href_list["identifier"])])"
|
||||
@@ -274,12 +273,11 @@ obj/machinery/computer/forensic_scanning
|
||||
var/list/blood = outputs[3]
|
||||
if(blood && blood.len)
|
||||
P.info += " <b>Blood:</b><br>"
|
||||
for(var/j = 1, j <= blood.len, j++)
|
||||
var/list/templist2 = blood[j]
|
||||
P.info += " Type: [templist2[2]], DNA: [templist2[1]]<br>"
|
||||
for(var/named in blood)
|
||||
P.info += " Type: [blood[named]], DNA: [named]<br>"
|
||||
else
|
||||
usr << "ERROR. Database not found!<br>"
|
||||
if("auxiliary")
|
||||
if("auxiliary") //Viewing a record from the "misc" database.
|
||||
canclear = 0
|
||||
if(misc)
|
||||
temp = "<b>Auxiliary Evidence Database</b><br><br>"
|
||||
@@ -289,19 +287,18 @@ obj/machinery/computer/forensic_scanning
|
||||
if(fibers && fibers.len)
|
||||
temp += " <b>Fibers:</b><br>"
|
||||
for(var/j = 1, j <= fibers.len, j++)
|
||||
temp += "<br> [fibers[j]]"
|
||||
temp += " [fibers[j]]<br>"
|
||||
var/list/blood = outputs[2]
|
||||
if(blood && blood.len)
|
||||
temp += " <b>Blood:</b><br>"
|
||||
for(var/j = 1, j <= blood.len, j++)
|
||||
var/list/templist2 = blood[j]
|
||||
temp += " Type: [templist2[2]], DNA: [templist2[1]]<br>"
|
||||
for(var/named in blood)
|
||||
temp += " Type: [blood[named]], DNA: [named]<br>"
|
||||
temp += "<br><a href='?src=\ref[src];operation=database;delete_aux=[href_list["identifier"]]'>{Delete This Record}</a>"
|
||||
temp += "<br><a href='?src=\ref[src];operation=auxiliaryprint;identifier=[href_list["identifier"]]'>{Print}</a>"
|
||||
else
|
||||
temp = "ERROR. Database not found!<br>"
|
||||
temp += "<br><a href='?src=\ref[src];operation=database'>{Return}</a>"
|
||||
if("auxiliaryprint")
|
||||
if("auxiliaryprint") //Printing from the "misc" database.
|
||||
if(misc)
|
||||
var/obj/item/weapon/paper/P = new(loc)
|
||||
var/list/outputs = misc[href_list["identifier"]]
|
||||
@@ -313,13 +310,12 @@ obj/machinery/computer/forensic_scanning
|
||||
if(fibers && fibers.len)
|
||||
P.info += " <b>Fibers:</b><br>"
|
||||
for(var/j = 1, j <= fibers.len, j++)
|
||||
P.info += "<br> [fibers[j]]"
|
||||
P.info += " [fibers[j]]<br>"
|
||||
var/list/blood = outputs[2]
|
||||
if(blood && blood.len)
|
||||
P.info += " <b>Blood:</b><br>"
|
||||
for(var/j = 1, j <= blood.len, j++)
|
||||
var/list/templist2 = blood[j]
|
||||
P.info += " Type: [templist2[2]], DNA: [templist2[1]]<br>"
|
||||
for(var/named in blood)
|
||||
P.info += " Type: [blood[named]], DNA: [named]<br>"
|
||||
else
|
||||
usr << "ERROR. Database not found!<br>"
|
||||
if("scan")
|
||||
@@ -393,7 +389,7 @@ obj/machinery/computer/forensic_scanning
|
||||
scan_data += "Fibers/Materials Found:<br>"
|
||||
for(var/data in scanning.suit_fibers)
|
||||
scan_data += "- [data]<br>"
|
||||
if(istype(scanning,/obj/item/device/detective_scanner))
|
||||
if(istype(scanning,/obj/item/device/detective_scanner) || (istype(scanning, /obj/item/device/pda) && scanning:cartridge && scanning:cartridge.access_security))
|
||||
scan_data += "<br><b>Data transfered from Scanner to Database.</b><br>"
|
||||
add_data_scanner(scanning)
|
||||
else if(!scanning.fingerprints)
|
||||
@@ -402,7 +398,7 @@ obj/machinery/computer/forensic_scanning
|
||||
temp = "Scan Failed: No Object"
|
||||
|
||||
|
||||
if("print")
|
||||
if("print") //Printing scan data
|
||||
if(scan_data)
|
||||
temp = "Scan Data Printed."
|
||||
var/obj/item/weapon/paper/P = new(loc)
|
||||
@@ -415,7 +411,7 @@ obj/machinery/computer/forensic_scanning
|
||||
scan_data = ""
|
||||
if("cancel")
|
||||
scan_process = 0
|
||||
if("add")
|
||||
if("add") //Adding an object (Manually) to the database.
|
||||
if(scanning)
|
||||
add_data(scanning)
|
||||
else
|
||||
@@ -426,12 +422,19 @@ obj/machinery/computer/forensic_scanning
|
||||
return
|
||||
|
||||
|
||||
proc/add_data_scanner(var/obj/item/device/detective_scanner/W)
|
||||
if(W.stored)
|
||||
for(var/atom in W.stored)
|
||||
var/list/data = W.stored[atom]
|
||||
add_data_master(atom,data[1],data[2],data[3],data[4])
|
||||
W.stored = list()
|
||||
proc/add_data_scanner(var/obj/item/device/W)
|
||||
if(istype(W, /obj/item/device/detective_scanner))
|
||||
if(W:stored)
|
||||
for(var/atom in W:stored)
|
||||
var/list/data = W:stored[atom]
|
||||
add_data_master(atom,data[1],data[2],data[3],data[4])
|
||||
W:stored = list()
|
||||
else if(istype(W, /obj/item/device/pda) && W:cartridge && W:cartridge.access_security)
|
||||
if(W:cartridge.stored)
|
||||
for(var/atom in W:cartridge.stored)
|
||||
var/list/data = W:cartridge.stored[atom]
|
||||
add_data_master(atom,data[1],data[2],data[3],data[4])
|
||||
W:cartridge.stored = list()
|
||||
return
|
||||
|
||||
proc/add_data(var/atom/scanned_atom)
|
||||
@@ -447,89 +450,88 @@ obj/machinery/computer/forensic_scanning
|
||||
//What follows is massive. It cross references all stored data in the scanner with the other stored data,
|
||||
//and what is already in the computer. Not sure how bad the lag may/may not be.
|
||||
|
||||
if(!atom_fingerprints) //No prints
|
||||
if(!misc)
|
||||
misc = list()
|
||||
var/list/data_entry = misc[atom_reference]
|
||||
if(data_entry)
|
||||
var/list/fibers = data_entry[1]
|
||||
if(!fibers)
|
||||
fibers = list()
|
||||
if(atom_suit_fibers)
|
||||
for(var/j = 1, j <= atom_suit_fibers.len, j++) //Fibers~~~
|
||||
if(!fibers.Find(atom_suit_fibers[j])) //It isn't! Add!
|
||||
fibers += atom_suit_fibers[j]
|
||||
var/list/blood = data_entry[2]
|
||||
if(!blood)
|
||||
blood = list()
|
||||
if(atom_blood_DNA)
|
||||
for(var/main_blood in atom_blood_DNA)
|
||||
if(!blood[main_blood])
|
||||
blood[main_blood] = atom_blood_DNA[blood]
|
||||
return 1
|
||||
if(!misc)
|
||||
misc = list()
|
||||
var/list/data_entry = misc[atom_reference]
|
||||
if(data_entry)
|
||||
var/list/fibers = data_entry[1]
|
||||
if(!fibers)
|
||||
fibers = list()
|
||||
if(atom_suit_fibers)
|
||||
for(var/j = 1, j <= atom_suit_fibers.len, j++) //Fibers~~~
|
||||
if(!fibers.Find(atom_suit_fibers[j])) //It isn't! Add!
|
||||
fibers += atom_suit_fibers[j]
|
||||
var/list/blood = data_entry[2]
|
||||
if(!blood)
|
||||
blood = list()
|
||||
if(atom_blood_DNA)
|
||||
for(var/main_blood in atom_blood_DNA)
|
||||
if(!blood[main_blood])
|
||||
blood[main_blood] = atom_blood_DNA[blood]
|
||||
else
|
||||
var/list/templist[3]
|
||||
templist[1] = atom_suit_fibers
|
||||
templist[2] = atom_blood_DNA
|
||||
templist[3] = atom_name
|
||||
misc[atom_reference] = templist //Store it!
|
||||
return 0
|
||||
//Has prints.
|
||||
if(!files)
|
||||
files = list()
|
||||
for(var/main_print in atom_fingerprints)
|
||||
var/list/data_entry = files[main_print]
|
||||
if(data_entry)//The print is already in here!
|
||||
var/list/internal_atom = data_entry[atom_reference] //Lets see if we can find the current object
|
||||
if(internal_atom)
|
||||
//We must be on a roll! Just update what needs to be updated.
|
||||
var/list/internal_prints = internal_atom[1]
|
||||
for(var/print in atom_fingerprints) //Sorry for the double loop! D:
|
||||
var/associated_print = internal_prints[print]
|
||||
var/reference_print = atom_fingerprints[print]
|
||||
if(associated_print && associated_print != reference_print) //It does not match
|
||||
internal_prints[print] = stringmerge(associated_print, reference_print)
|
||||
else if(!associated_print)
|
||||
internal_prints[print] = reference_print
|
||||
//If the main print was updated, lets update the master as well.
|
||||
if(print == main_print && (!associated_print || (associated_print && associated_print != reference_print)))
|
||||
update_fingerprints(main_print, internal_prints[print])
|
||||
//Fibers.
|
||||
var/list/fibers = internal_atom[2]
|
||||
if(!fibers)
|
||||
fibers = list()
|
||||
if(atom_suit_fibers)
|
||||
for(var/j = 1, j < atom_suit_fibers.len, j++) //Fibers~~~
|
||||
if(!fibers.Find(atom_suit_fibers[j])) //It isn't! Add!
|
||||
fibers += atom_suit_fibers[j]
|
||||
//Blood.
|
||||
var/list/blood = internal_atom[3]
|
||||
if(!blood)
|
||||
blood = list()
|
||||
if(atom_blood_DNA)
|
||||
for(var/main_blood in atom_blood_DNA)
|
||||
if(!blood[main_blood])
|
||||
blood[main_blood] = atom_blood_DNA[blood]
|
||||
if(atom_fingerprints)
|
||||
if(!files)
|
||||
files = list()
|
||||
for(var/main_print in atom_fingerprints)
|
||||
data_entry = files[main_print]
|
||||
if(data_entry)//The print is already in here!
|
||||
var/list/internal_atom = data_entry[atom_reference] //Lets see if we can find the current object
|
||||
if(internal_atom)
|
||||
//We must be on a roll! Just update what needs to be updated.
|
||||
var/list/internal_prints = internal_atom[1]
|
||||
for(var/print in atom_fingerprints) //Sorry for the double loop! D:
|
||||
var/associated_print = internal_prints[print]
|
||||
var/reference_print = atom_fingerprints[print]
|
||||
if(associated_print && associated_print != reference_print) //It does not match
|
||||
internal_prints[print] = stringmerge(associated_print, reference_print)
|
||||
else if(!associated_print)
|
||||
internal_prints[print] = reference_print
|
||||
//If the main print was updated, lets update the master as well.
|
||||
if(print == main_print && (!associated_print || (associated_print && associated_print != reference_print)))
|
||||
update_fingerprints(main_print, internal_prints[print])
|
||||
//Fibers.
|
||||
var/list/fibers = internal_atom[2]
|
||||
if(!fibers)
|
||||
fibers = list()
|
||||
if(atom_suit_fibers)
|
||||
for(var/j = 1, j < atom_suit_fibers.len, j++) //Fibers~~~
|
||||
if(!fibers.Find(atom_suit_fibers[j])) //It isn't! Add!
|
||||
fibers += atom_suit_fibers[j]
|
||||
//Blood.
|
||||
var/list/blood = internal_atom[3]
|
||||
if(!blood)
|
||||
blood = list()
|
||||
if(atom_blood_DNA)
|
||||
for(var/main_blood in atom_blood_DNA)
|
||||
if(!blood[main_blood])
|
||||
blood[main_blood] = atom_blood_DNA[blood]
|
||||
|
||||
continue
|
||||
//It's not in there! We gotta add it.
|
||||
update_fingerprints(main_print, atom_fingerprints[main_print])
|
||||
var/list/data_point[4]
|
||||
data_point[1] = atom_fingerprints
|
||||
data_point[2] = atom_suit_fibers
|
||||
data_point[3] = atom_blood_DNA
|
||||
data_point[4] = atom_name
|
||||
data_entry[atom_reference] = data_point
|
||||
continue
|
||||
//It's not in there! We gotta add it.
|
||||
update_fingerprints(main_print, atom_fingerprints[main_print])
|
||||
//No print at all! New data entry, go!
|
||||
var/list/data_point[4]
|
||||
data_point[1] = atom_fingerprints
|
||||
data_point[2] = atom_suit_fibers
|
||||
data_point[3] = atom_blood_DNA
|
||||
data_point[4] = atom_name
|
||||
data_entry[atom_reference] = data_point
|
||||
continue
|
||||
//No print at all! New data entry, go!
|
||||
var/list/data_point[4]
|
||||
data_point[1] = atom_fingerprints
|
||||
data_point[2] = atom_suit_fibers
|
||||
data_point[3] = atom_blood_DNA
|
||||
data_point[4] = atom_name
|
||||
var/list/new_file[1]
|
||||
new_file[1] = atom_fingerprints[main_print]
|
||||
new_file[atom_reference] = data_point
|
||||
files[main_print] = new_file
|
||||
var/list/new_file[1]
|
||||
new_file[1] = atom_fingerprints[main_print]
|
||||
new_file[atom_reference] = data_point
|
||||
files[main_print] = new_file
|
||||
return 1
|
||||
/********************************
|
||||
***END DO NOT DIRECTLY CALL ME***
|
||||
@@ -540,7 +542,7 @@ obj/machinery/computer/forensic_scanning
|
||||
if(master)
|
||||
master[1] = stringmerge(master[1],new_print)
|
||||
else
|
||||
CRASH("Fucking hell. Something went wrong, and it tried to update a null print or something. Tell SkyMarshal")
|
||||
CRASH("Fucking hell. Something went wrong, and it tried to update a null print or something. Tell SkyMarshal (and give him this call stack)")
|
||||
return
|
||||
|
||||
proc/process_card() //Same as above, but for fingerprint cards
|
||||
@@ -613,10 +615,11 @@ turf/Exited(mob/living/carbon/human/M)
|
||||
M.track_blood--
|
||||
src.add_bloody_footprints(M.track_blood_mob,1,M.dir,get_tracks(M),M.track_blood_type)
|
||||
else if(istype(M,/mob/living/carbon/human))
|
||||
if(M.shoes)
|
||||
if(M.shoes.track_blood > 0)
|
||||
M.shoes.track_blood--
|
||||
src.add_bloody_footprints(M.shoes.track_blood_mob,1,M.dir,M.shoes.name,M.shoes.track_blood_type) // And bloody tracks end here
|
||||
if(M.shoes && istype(M.shoes,/obj/item/clothing/shoes))
|
||||
var/obj/item/clothing/shoes/S = M.shoes
|
||||
if(S.track_blood > 0)
|
||||
S.track_blood--
|
||||
src.add_bloody_footprints(S.track_blood_mob,1,M.dir,S.name,S.track_blood_type) // And bloody tracks end here
|
||||
. = ..()
|
||||
turf/Entered(mob/living/carbon/human/M)
|
||||
if(istype(M,/mob/living) && !istype(M,/mob/living/carbon/metroid))
|
||||
@@ -631,10 +634,11 @@ turf/Entered(mob/living/carbon/human/M)
|
||||
M.track_blood--
|
||||
src.add_bloody_footprints(M.track_blood_mob,0,M.dir,get_tracks(M),M.track_blood_type)
|
||||
else if(istype(M,/mob/living/carbon/human))
|
||||
if(M.shoes && !istype(src,/turf/space))
|
||||
if(M.shoes.track_blood > 0)
|
||||
M.shoes.track_blood--
|
||||
src.add_bloody_footprints(M.shoes.track_blood_mob,0,M.dir,M.shoes.name,M.shoes.track_blood_type)
|
||||
if(M.shoes && istype(M.shoes,/obj/item/clothing/shoes) && !istype(src,/turf/space))
|
||||
var/obj/item/clothing/shoes/S = M.shoes
|
||||
if(S.track_blood > 0)
|
||||
S.track_blood--
|
||||
src.add_bloody_footprints(S.track_blood_mob,0,M.dir,S.name,S.track_blood_type)
|
||||
|
||||
|
||||
for(var/obj/effect/decal/cleanable/B in src)
|
||||
@@ -649,11 +653,12 @@ turf/Entered(mob/living/carbon/human/M)
|
||||
track_type = "oil"
|
||||
|
||||
if(istype(M,/mob/living/carbon/human))
|
||||
if(M.shoes)
|
||||
M.shoes.add_blood(B.blood_owner)
|
||||
M.shoes.track_blood_mob = B.blood_owner
|
||||
M.shoes.track_blood = max(M.shoes.track_blood,8)
|
||||
M.shoes.track_blood_type = track_type
|
||||
if(M.shoes && istype(M.shoes,/obj/item/clothing/shoes))
|
||||
var/obj/item/clothing/shoes/S = M.shoes
|
||||
S.add_blood(B.blood_owner)
|
||||
S.track_blood_mob = B.blood_owner
|
||||
S.track_blood = max(S.track_blood,8)
|
||||
S.track_blood_type = track_type
|
||||
else
|
||||
M.add_blood(B.blood_owner)
|
||||
M.track_blood_mob = B.blood_owner
|
||||
@@ -768,7 +773,7 @@ proc/blood_incompatible(donor,receiver)
|
||||
..()
|
||||
|
||||
afterattack(atom/A as obj|turf|area, mob/user as mob)
|
||||
if(istype(A))
|
||||
if(istype(A) && src in user)
|
||||
user.visible_message("[user] starts to wipe down [A] with [src]!")
|
||||
if(do_after(user,30))
|
||||
user.visible_message("[user] finishes wiping off the [A]!")
|
||||
@@ -776,7 +781,7 @@ proc/blood_incompatible(donor,receiver)
|
||||
return
|
||||
|
||||
examine()
|
||||
if (!( usr ))
|
||||
if (!usr)
|
||||
return
|
||||
usr << "That's \a [src]."
|
||||
usr << desc
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
//CONTAINS:
|
||||
//Evidence bags and stuff
|
||||
///////////
|
||||
//Shamelessly ripped from Mini's old code.
|
||||
|
||||
/obj/item/weapon/evidencebag
|
||||
name = "evidence bag"
|
||||
desc = "An empty evidence bag."
|
||||
@@ -10,34 +8,43 @@
|
||||
icon_state = "evidenceobj"
|
||||
w_class = 1
|
||||
|
||||
/* buggy and stuff
|
||||
/obj/item/weapon/evidencebag/attackby(obj/item/weapon/O, mob/user as mob)
|
||||
return src.afterattack(O, user)
|
||||
*/
|
||||
|
||||
/obj/item/weapon/evidencebag/afterattack(obj/item/O, mob/user as mob)
|
||||
if(!in_range(O,user))
|
||||
return
|
||||
|
||||
if(istype(O, /obj/item/weapon/storage) && O in user)
|
||||
return ..()
|
||||
|
||||
if(!(O && istype(O)) || O.anchored == 1)
|
||||
user << "You can't put that inside the [src]!"
|
||||
user << "You can't put that inside \the [src]!"
|
||||
return ..()
|
||||
if(O in user)
|
||||
|
||||
if(istype(O, /obj/item/weapon/evidencebag))
|
||||
user << "You find putting an evidence bag in another evidence bag to be slightly absurd."
|
||||
return
|
||||
|
||||
if(O in user && (user.l_hand != O && user.r_hand != O)) //If it is in their inventory, but not in their hands, don't grab it off of them.
|
||||
user << "You are wearing that."
|
||||
return
|
||||
if(src.contents.len > 0)
|
||||
|
||||
if(contents.len)
|
||||
user << "The [src] already has something inside it."
|
||||
return ..()
|
||||
|
||||
if(istype(O.loc,/obj/item/weapon/storage))
|
||||
var/obj/item/weapon/storage/U = O.loc
|
||||
user.client.screen -= O
|
||||
U.contents.Remove(O)
|
||||
|
||||
if(istype(O.loc,/obj/item/clothing/suit/storage/))
|
||||
var/obj/item/clothing/suit/storage/U = O.loc
|
||||
user.client.screen -= O
|
||||
U.contents.Remove(O)
|
||||
user << "You put the [O] inside the [src]."
|
||||
|
||||
user.visible_message("\The [user] puts \a [O] into \a [src]", "You put \the [O] inside \the [src].",\
|
||||
"You hear a rustle as someone puts something into a plastic bag.")
|
||||
icon_state = "evidence"
|
||||
src.overlays += O
|
||||
overlays += O
|
||||
desc = "An evidence bag containing \a [O]. [O.desc]"
|
||||
O.loc = src
|
||||
w_class = O.w_class
|
||||
@@ -45,17 +52,19 @@
|
||||
|
||||
|
||||
/obj/item/weapon/evidencebag/attack_self(mob/user as mob)
|
||||
if (src.contents.len > 0)
|
||||
var/obj/item/I = src.contents[1]
|
||||
user << "You take the [I] out of the [src]."
|
||||
src.overlays -= I
|
||||
I.loc = get_turf(user.loc)
|
||||
if (contents.len)
|
||||
var/obj/item/I = contents[1]
|
||||
user.visible_message("\The [user] takes \a [I] out of \a [src]", "You take \the [I] out of \the [src].",\
|
||||
"You hear someone rustle around in a plastic bag, and remove something.")
|
||||
overlays -= I
|
||||
user.put_in_hands(I)
|
||||
w_class = 1
|
||||
src.icon_state = "evidenceobj"
|
||||
icon_state = "evidenceobj"
|
||||
desc = "An empty evidence bag."
|
||||
|
||||
else
|
||||
user << "[src] is empty."
|
||||
src.icon_state = "evidenceobj"
|
||||
user << "\The [src] is empty."
|
||||
icon_state = "evidenceobj"
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/box/evidence
|
||||
|
||||
@@ -515,6 +515,17 @@ var/global/BSACooldown = 0
|
||||
else
|
||||
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Emergency Response Team;jobban4=\ref[M]'>[dd_replacetext("Emergency Response Team", " ", " ")]</a></td>"
|
||||
|
||||
//Misc (Grey)
|
||||
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
|
||||
jobs += "<tr bgcolor='B5B5B5'><th colspan='10'>Misc Positions</th></tr><tr align='center'>"
|
||||
|
||||
//Records
|
||||
if(jobban_isbanned(M, "Records"))
|
||||
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Records;jobban4=\ref[M]'><font color=red>[dd_replacetext("Records", " ", " ")]</font></a></td>"
|
||||
else
|
||||
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Records;jobban4=\ref[M]'>[dd_replacetext("Records", " ", " ")]</a></td>"
|
||||
|
||||
|
||||
|
||||
/* //Malfunctioning AI //Removed Malf-bans because they're a pain to impliment
|
||||
if(jobban_isbanned(M, "malf AI") || isbanned_dept)
|
||||
@@ -601,6 +612,13 @@ var/global/BSACooldown = 0
|
||||
var/datum/job/temp = job_master.GetJob(jobPos)
|
||||
if(!temp) continue
|
||||
joblist += temp.title
|
||||
if("miscdept")
|
||||
joblist += "pAI"
|
||||
for(var/jobPos in nonhuman_positions)
|
||||
if(!jobPos) continue
|
||||
var/datum/job/temp = job_master.GetJob(jobPos)
|
||||
if(!temp) continue
|
||||
joblist += temp.title
|
||||
else
|
||||
joblist += href_list["jobban3"]
|
||||
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
//By Carnwennan
|
||||
|
||||
//This system was made as an alternative to all the in-game lists and variables used to log stuff in-game.
|
||||
//lists and variables are great. However, they have several major flaws:
|
||||
//Firstly, they use memory. TGstation has one of the highest memory usage of all the ss13 branches.
|
||||
//Secondly, they are usually stored in an object. This means that they aren't centralised. It also means that
|
||||
//the data is lost when the object is deleted! This is especially annoying for things like the singulo engine!
|
||||
#define INVESTIGATE_DIR "data/investigate/"
|
||||
|
||||
//SYSTEM
|
||||
/proc/investigate_subject2file(var/subject)
|
||||
switch(subject)
|
||||
if("singulo")
|
||||
return file("[INVESTIGATE_DIR]singulo.html")
|
||||
if("silicon")
|
||||
return file("[INVESTIGATE_DIR]silicon.html")
|
||||
else
|
||||
return
|
||||
|
||||
/proc/investigate_reset()
|
||||
if(fdel(INVESTIGATE_DIR)) return 1
|
||||
return 0
|
||||
|
||||
/atom/proc/investigate_log(var/message, var/subject)
|
||||
if(!message) return
|
||||
var/F = investigate_subject2file(subject)
|
||||
if(!F) return
|
||||
F << "<small>[time2text(world.timeofday,"hh:mm")] \ref[src] ([x],[y],[z])</small> || [src] [message]<br>"
|
||||
|
||||
|
||||
|
||||
//ADMINVERBS
|
||||
/client/proc/investigate_show( subject in list("singulo","silicon") )
|
||||
set name = "Investigate"
|
||||
set category = "Admin"
|
||||
if(!holder) return
|
||||
var/F = investigate_subject2file(subject)
|
||||
if(!F)
|
||||
src << "<font color='red'>Error: admin_investigate: [INVESTIGATE_DIR][subject] is an invalid path or cannot be accessed.</font>"
|
||||
return
|
||||
src << browse(F,"window=investigate;size=800x300")
|
||||
|
||||
|
||||
@@ -105,6 +105,7 @@
|
||||
|
||||
//Admin Observer
|
||||
if (holder.level >= -1)
|
||||
verbs += /client/proc/investigate_show
|
||||
verbs += /client/proc/cmd_admin_say
|
||||
verbs += /client/proc/cmd_admin_gib_self
|
||||
verbs += /client/proc/deadmin_self
|
||||
@@ -423,10 +424,11 @@
|
||||
verbs -= /client/proc/deadmin_self
|
||||
verbs -= /client/proc/jumptocoord
|
||||
verbs -= /client/proc/everyone_random
|
||||
verbs -= /client/proc/giveruntimelog //used by coders to retrieve runtime logs
|
||||
verbs -= /client/proc/giveruntimelog //used by coders to retrieve runtime logs
|
||||
verbs -= /client/proc/getserverlog
|
||||
verbs -= /client/proc/cinematic //show a cinematic sequence
|
||||
verbs -= /client/proc/admin_memo
|
||||
verbs -= /client/proc/investigate_show
|
||||
verbs -= /client/proc/cmd_admin_change_custom_event
|
||||
verbs -= /client/proc/admin_invis
|
||||
verbs -= /client/proc/callprocgen
|
||||
|
||||
@@ -62,17 +62,32 @@
|
||||
var/const/WIRE_RADIO_RECEIVE = 8 //Allows Pulsed(1) to call Activate()
|
||||
var/const/WIRE_RADIO_PULSE = 16 //Allows Pulse(1) to send a radio message
|
||||
|
||||
|
||||
proc/activate() //What the device does when turned on
|
||||
return
|
||||
|
||||
proc/pulsed(var/radio = 0) //Called when another assembly acts on this one, var/radio will determine where it came from for wire calcs
|
||||
pulse(var/radio = 0) //Called when this device attempts to act on another device, var/radio determines if it was sent via radio or direct
|
||||
return
|
||||
|
||||
proc/pulse(var/radio = 0) //Called when this device attempts to act on another device, var/radio determines if it was sent via radio or direct
|
||||
return
|
||||
|
||||
proc/toggle_secure() //Code that has to happen when the assembly is un\secured goes here
|
||||
return
|
||||
|
||||
proc/attach_assembly(var/obj/A, var/mob/user) //Called when an assembly is attacked by another
|
||||
return
|
||||
|
||||
proc/process_cooldown() //Called via spawn(10) to have it count down the cooldown var
|
||||
return
|
||||
|
||||
proc/holder_movement() //Called when the holder is moved
|
||||
return
|
||||
|
||||
proc/interact(mob/user as mob) //Called when attack_self is called
|
||||
return
|
||||
|
||||
|
||||
proc/process_cooldown()
|
||||
process_cooldown()
|
||||
cooldown--
|
||||
if(cooldown <= 0) return 0
|
||||
spawn(10)
|
||||
@@ -88,7 +103,7 @@
|
||||
return 1
|
||||
|
||||
|
||||
proc/pulse(var/radio = 0)
|
||||
pulse(var/radio = 0)
|
||||
if(holder && (wires & WIRE_PULSE))
|
||||
holder.process_activation(src, 1, 0)
|
||||
if(holder && (wires & WIRE_PULSE_SPECIAL))
|
||||
@@ -219,4 +234,4 @@ Desc: If true is an object that can be attached to an assembly holder but is a s
|
||||
//Remember to have it set its loc somewhere in here
|
||||
|
||||
|
||||
*/
|
||||
*/
|
||||
@@ -1,5 +1,3 @@
|
||||
//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05
|
||||
|
||||
/obj/item/device/assembly_holder
|
||||
name = "Assembly"
|
||||
desc = "Holds various devices"//Fix this by adding dynamic desc
|
||||
@@ -18,10 +16,15 @@
|
||||
var/obj/item/device/assembly/a_right = null
|
||||
var/obj/special_assembly = null
|
||||
|
||||
proc
|
||||
attach(var/obj/item/device/D, var/obj/item/device/D2, var/mob/user)
|
||||
attach_special(var/obj/O, var/mob/user)
|
||||
process_activation(var/obj/item/device/D)
|
||||
proc/attach(var/obj/item/device/D, var/obj/item/device/D2, var/mob/user)
|
||||
return
|
||||
|
||||
proc/attach_special(var/obj/O, var/mob/user)
|
||||
return
|
||||
|
||||
proc/process_activation(var/obj/item/device/D)
|
||||
return
|
||||
|
||||
|
||||
|
||||
IsAssemblyHolder()
|
||||
|
||||
@@ -11,9 +11,6 @@
|
||||
item_state = "flashbang"
|
||||
w_class = 2.0
|
||||
force = 2.0
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
flags = FPRINT | TABLEPASS | CONDUCT | ONBELT | USEDELAY
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker_one
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker_two
|
||||
var/obj/item/device/assembly/attached_device
|
||||
@@ -27,6 +24,10 @@
|
||||
var/list/allowed_containers = list("/obj/item/weapon/reagent_containers/glass/beaker", "/obj/item/weapon/reagent_containers/glass/dispenser", "/obj/item/weapon/reagent_containers/glass/bottle")
|
||||
var/affected_area = 3
|
||||
var/mob/attacher = "Unknown"
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
attackby(var/obj/item/weapon/W, var/mob/user)
|
||||
if(path || !active)
|
||||
@@ -784,7 +785,7 @@
|
||||
/obj/structure/table,
|
||||
/obj/structure/closet/secure_closet,
|
||||
/obj/structure/closet,
|
||||
/obj/machinery/sink,
|
||||
/obj/structure/sink,
|
||||
/obj/item/weapon/storage,
|
||||
/obj/machinery/atmospherics/unary/cryo_cell,
|
||||
/obj/item/weapon/chem_grenade,
|
||||
@@ -1304,7 +1305,8 @@
|
||||
amount_per_transfer_from_this = 5
|
||||
volume = 30
|
||||
possible_transfer_amounts = null
|
||||
flags = FPRINT | ONBELT | TABLEPASS | OPENCONTAINER
|
||||
flags = FPRINT | TABLEPASS | OPENCONTAINER
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/attack_paw(mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
@@ -1349,9 +1351,9 @@
|
||||
possible_transfer_amounts = null
|
||||
flags = FPRINT
|
||||
var/mode = 1
|
||||
var/charge_cost = 100
|
||||
var/charge_cost = 50
|
||||
var/charge_tick = 0
|
||||
var/recharge_time = 10 //Time it takes for shots to recharge (in seconds)
|
||||
var/recharge_time = 5 //Time it takes for shots to recharge (in seconds)
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -1372,13 +1374,13 @@
|
||||
if(R && R.cell)
|
||||
if(mode == 1 && reagents.total_volume < 30) //Don't recharge reagents and drain power if the storage is full.
|
||||
R.cell.use(charge_cost) //Take power from borg...
|
||||
reagents.add_reagent("tricordrazine",10) //And fill hypo with reagent.
|
||||
reagents.add_reagent("tricordrazine",5) //And fill hypo with reagent.
|
||||
if(mode == 2 && reagents.total_volume < 30)
|
||||
R.cell.use(charge_cost)
|
||||
reagents.add_reagent("inaprovaline", 10)
|
||||
reagents.add_reagent("inaprovaline", 5)
|
||||
if(mode == 3 && reagents.total_volume < 30)
|
||||
R.cell.use(charge_cost)
|
||||
reagents.add_reagent("spaceacillin", 10)
|
||||
reagents.add_reagent("spaceacillin", 5)
|
||||
//update_icon()
|
||||
return 1
|
||||
|
||||
@@ -1402,16 +1404,19 @@
|
||||
playsound(src.loc, 'pop.ogg', 50, 0) //Change the mode
|
||||
if(mode == 1)
|
||||
mode = 2
|
||||
charge_tick = 0 //Prevents wasted chems/cell charge if you're cycling through modes.
|
||||
reagents.clear_reagents() //Flushes whatever was in the storage previously, so you don't get chems all mixed up.
|
||||
user << "\blue Synthesizer is now producing 'Inaprovaline'."
|
||||
return
|
||||
if(mode == 2)
|
||||
mode = 3
|
||||
charge_tick = 0
|
||||
reagents.clear_reagents()
|
||||
user << "\blue Synthesizer is now producing 'Spaceacillin'."
|
||||
return
|
||||
if(mode == 3)
|
||||
mode = 1
|
||||
charge_tick = 0
|
||||
reagents.clear_reagents()
|
||||
user << "\blue Synthesizer is now producing 'Tricordrazine'."
|
||||
return
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user