diff --git a/baystation12.dme b/baystation12.dme
index 7cf49a27f6b..24e64a560b5 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -159,6 +159,7 @@
#define FILE_DIR "code/unused/powerarmor"
#define FILE_DIR "code/unused/spacecraft"
#define FILE_DIR "code/WorkInProgress"
+#define FILE_DIR "code/WorkInProgress/animusstation"
#define FILE_DIR "code/WorkInProgress/Apples"
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn"
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/BirdMan"
@@ -1142,8 +1143,12 @@
#include "code\WorkInProgress\AI_Visibility.dm"
#include "code\WorkInProgress\buildmode.dm"
#include "code\WorkInProgress\explosion_particles.dm"
+<<<<<<< HEAD
#include "code\WorkInProgress\Cael_Aislinn\BirdMan\bird_transformation.dm"
#include "code\WorkInProgress\Cael_Aislinn\BirdMan\birdman.dm"
+=======
+#include "code\WorkInProgress\animusstation\atm.dm"
+>>>>>>> fca7924e47da378a3223559e6833dc831d35e8bc
#include "code\WorkInProgress\Cael_Aislinn\Rust\core_field.dm"
#include "code\WorkInProgress\Cael_Aislinn\Rust\core_gen.dm"
#include "code\WorkInProgress\Cael_Aislinn\Rust\core_monitor.dm"
@@ -1164,7 +1169,6 @@
#include "code\WorkInProgress\Cael_Aislinn\Tajara\tajaran.dm"
#include "code\WorkInProgress\Cael_Aislinn\Tajara\whisper.dm"
#include "code\WorkInProgress\Chinsky\ashtray.dm"
-#include "code\WorkInProgress\Mini\ATM.dm"
#include "code\WorkInProgress\Mini\atmos_control.dm"
#include "code\WorkInProgress\Mini\pipe_heater.dm"
#include "code\WorkInProgress\Mloc\Shortcuts.dm"
diff --git a/code/WorkInProgress/Ported/Abi79/uplinks.dm b/code/WorkInProgress/Ported/Abi79/uplinks.dm
index f7af9e38cf3..203cbb77bb7 100644
--- a/code/WorkInProgress/Ported/Abi79/uplinks.dm
+++ b/code/WorkInProgress/Ported/Abi79/uplinks.dm
@@ -95,7 +95,7 @@ A list of items and costs is stored under the datum of every game mode, alongsid
if(uses > 6)
randomItems.Add("/obj/item/weapon/aiModule/syndicate") //Hacked AI Upload Module
- randomItems.Add("/obj/machinery/singularity_beacon/syndicate") //Singularity Beacon
+ randomItems.Add("/obj/item/device/radio/beacon/syndicate") //Singularity Beacon
if(uses > 5)
randomItems.Add("/obj/item/weapon/gun/projectile") //Revolver
@@ -108,7 +108,6 @@ A list of items and costs is stored under the datum of every game mode, alongsid
randomItems.Add("/obj/item/weapon/melee/energy/sword") //Energy Sword
randomItems.Add("/obj/item/clothing/mask/gas/voice") //Voice Changer
randomItems.Add("/obj/item/device/chameleon") //Chameleon Projector
- randomItems.Add("/obj/item/clothing/glasses/thermal") //Syndicate Space Suit
if(uses > 2)
randomItems.Add("/obj/item/weapon/storage/emp_kit") //EMP Grenades
@@ -120,15 +119,19 @@ A list of items and costs is stored under the datum of every game mode, alongsid
randomItems.Add("/obj/item/weapon/storage/syndie_kit/space") //Syndicate Space Suit
randomItems.Add("/obj/item/device/encryptionkey/binary") //Binary Translator Key
randomItems.Add("/obj/item/weapon/storage/syndie_kit/imp_freedom") //Freedom Implant
+ randomItems.Add("/obj/item/clothing/glasses/thermal") //Thermal Imaging Goggles
if(uses > 1)
- var/list/usrItems = usr.get_contents()
+/*
+ var/list/usrItems = usr.get_contents() //Checks to see if the user has a revolver before giving ammo
var/hasRevolver = 0
for(var/obj/I in usrItems) //Only add revolver ammo if the user has a gun that can shoot it
if(istype(I,/obj/item/weapon/gun/projectile))
hasRevolver = 1
if(hasRevolver) randomItems.Add("/obj/item/ammo_magazine/a357") //Revolver ammo
+*/
+ randomItems.Add("/obj/item/ammo_magazine/a357") //Revolver ammo
randomItems.Add("/obj/item/clothing/shoes/syndigaloshes") //No-Slip Syndicate Shoes
randomItems.Add("/obj/item/weapon/plastique") //C4
@@ -145,19 +148,19 @@ A list of items and costs is stored under the datum of every game mode, alongsid
switch(href_list["buy_item"]) //Ok, this gets a little messy, sorry.
if("/obj/item/weapon/circuitboard/teleporter")
uses -= 20
- if("/obj/item/toy/syndicateballoon" , "/obj/item/weapon/storage/syndie_kit/imp_uplink")
+ if("/obj/item/toy/syndicateballoon" , "/obj/item/weapon/storage/syndie_kit/imp_uplink" , "/obj/item/weapon/storage/box/syndicate")
uses -= 10
- if("/obj/item/weapon/aiModule/syndicate" , "/obj/machinery/singularity_beacon/syndicate" , "/obj/item/weapon/storage/box/syndicate")
+ if("/obj/item/weapon/aiModule/syndicate" , "/obj/item/device/radio/beacon/syndicate")
uses -= 7
if("/obj/item/weapon/gun/projectile")
uses -= 6
if("/obj/item/weapon/gun/energy/crossbow" , "/obj/item/device/powersink")
uses -= 5
- if("/obj/item/weapon/melee/energy/sword" , "/obj/item/clothing/mask/gas/voice" , "/obj/item/device/chameleon" , "/obj/item/clothing/glasses/thermal")
+ if("/obj/item/weapon/melee/energy/sword" , "/obj/item/clothing/mask/gas/voice" , "/obj/item/device/chameleon")
uses -= 4
if("/obj/item/weapon/storage/emp_kit" , "/obj/item/weapon/pen/paralysis" , "/obj/item/weapon/cartridge/syndicate" , "/obj/item/clothing/under/chameleon" , \
"/obj/item/weapon/card/id/syndicate" , "/obj/item/weapon/card/emag" , "/obj/item/weapon/storage/syndie_kit/space" , "/obj/item/device/encryptionkey/binary" , \
- "/obj/item/weapon/storage/syndie_kit/imp_freedom")
+ "/obj/item/weapon/storage/syndie_kit/imp_freedom" , "/obj/item/clothing/glasses/thermal")
uses -= 3
if("/obj/item/ammo_magazine/a357" , "/obj/item/clothing/shoes/syndigaloshes" , "/obj/item/weapon/plastique")
uses -= 2
diff --git a/code/WorkInProgress/Ported/policetape.dm b/code/WorkInProgress/Ported/policetape.dm
index bb6db3117b7..4a6d1b7c066 100644
--- a/code/WorkInProgress/Ported/policetape.dm
+++ b/code/WorkInProgress/Ported/policetape.dm
@@ -73,7 +73,7 @@
var/turf/T = get_turf(A)
var/obj/item/tape/P = new tape_type(T.x,T.y,T.z)
P.loc = locate(T.x,T.y,T.z)
- P.icon_state = "door"
+ P.icon_state = "[src.icon_base]_door"
P.layer = 3.2
user << "\blue You finish placing the [src]."
diff --git a/code/WorkInProgress/SkyMarshal/wardrobes.dm b/code/WorkInProgress/SkyMarshal/wardrobes.dm
index 01612e1dd85..56b7f4d36fb 100755
--- a/code/WorkInProgress/SkyMarshal/wardrobes.dm
+++ b/code/WorkInProgress/SkyMarshal/wardrobes.dm
@@ -249,7 +249,7 @@
new /obj/item/device/flashlight/pen(src)
new /obj/item/clothing/gloves/latex(src)
new /obj/item/clothing/suit/bio_suit/cmo(src)
- new /obj/item/clothing/head/bio_hood/general(src)
+ new /obj/item/clothing/head/bio_hood/cmo(src)
new /obj/item/clothing/suit/storage/labcoat/cmo(src)
new /obj/item/clothing/suit/storage/labcoat/cmoalt(src)
new /obj/item/clothing/shoes/brown(src)
@@ -432,6 +432,7 @@
new /obj/item/device/radio/headset/headset_sec(src)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/clothing/under/det(src)
+ new /obj/item/weapon/camera_film(src)
/obj/item/wardrobe/officer
name = "\improper Security Officer Wardrobe"
@@ -538,7 +539,7 @@
new /obj/item/device/pda/quartermaster(src)
new /obj/item/device/radio/headset/headset_cargo(src)
new /obj/item/clothing/shoes/black(src)
- new /obj/item/clothing/under/rank/cargo(src)
+ new /obj/item/clothing/under/rank/cargotech(src)
/obj/item/wardrobe/mining
name = "\improper Shaft Miner Wardrobe"
diff --git a/code/WorkInProgress/animusstation/atm.dm b/code/WorkInProgress/animusstation/atm.dm
new file mode 100644
index 00000000000..cbb61e6e79c
--- /dev/null
+++ b/code/WorkInProgress/animusstation/atm.dm
@@ -0,0 +1,165 @@
+/*
+
+TODO:
+give money an actual use (QM stuff, vending machines)
+send money to people (might be worth attaching money to custom database thing for this, instead of being in the ID)
+log transactions
+
+*/
+
+/obj/machinery/atm
+ name = "\improper NanoTrasen Automatic Teller Machine"
+ desc = "For all your monetary needs!"
+ icon = 'terminals.dmi'
+ icon_state = "atm"
+ anchored = 1
+ use_power = 1
+ idle_power_usage = 10
+ var
+ obj/item/weapon/card/id/card
+ obj/item/weapon/spacecash/cashes = list()
+ inserted = 0
+ accepted = 0
+ pincode = 0
+
+ attackby(var/obj/A, var/mob/user)
+ if(istype(A,/obj/item/weapon/spacecash))
+ cashes += A
+ user.drop_item()
+ A.loc = src
+ inserted += A:worth
+ return
+ if(istype(A,/obj/item/weapon/coin))
+ if(istype(A,/obj/item/weapon/coin/iron))
+ cashes += A
+ user.drop_item()
+ A.loc = src
+ inserted += 1
+ return
+ if(istype(A,/obj/item/weapon/coin/silver))
+ cashes += A
+ user.drop_item()
+ A.loc = src
+ inserted += 10
+ return
+ if(istype(A,/obj/item/weapon/coin/gold))
+ cashes += A
+ user.drop_item()
+ A.loc = src
+ inserted += 50
+ return
+ if(istype(A,/obj/item/weapon/coin/plasma))
+ cashes += A
+ user.drop_item()
+ A.loc = src
+ inserted += 2
+ return
+ if(istype(A,/obj/item/weapon/coin/diamond))
+ cashes += A
+ user.drop_item()
+ A.loc = src
+ inserted += 300
+ return
+ user << "You insert your [A.name] in ATM"
+ ..()
+
+ attack_hand(var/mob/user)
+ if(istype(user, /mob/living/silicon))
+ user << "\red Artificial unit recognized. Artificial units do not currently receive monetary compensation, as per NanoTrasen regulation #1005."
+ return
+
+ if(!(stat && NOPOWER) && ishuman(user))
+ var/dat
+ user.machine = src
+ if(!accepted)
+ if(scan(user))
+ pincode = input(usr,"Enter a pin-code") as num
+ if(card.checkaccess(pincode,usr))
+ accepted = 1
+// usr << sound('nya.mp3')
+ else
+ dat = null
+ dat += "
NanoTrasen Automatic Teller Machine
"
+ dat += "For all your monetary needs!
"
+ dat += "Welcome, [card.registered_name]. You have [card.money] credits deposited.
"
+ dat += "Current inserted item value: [inserted] credits.
"
+ dat += "Please, select action
"
+ dat += "Withdraw Physical Credits
"
+ dat += "Eject Inserted Items
"
+ dat += "Convert Inserted Items to Credits
"
+ dat += "Lock ATM
"
+ user << browse(dat,"window=atm")
+ onclose(user,"close")
+ proc
+ withdraw(var/mob/user)
+ if(accepted)
+ var/amount = input("How much would you like to withdraw?", "Amount", 0) in list(1,10,20,50,100,200,500,1000, 0)
+ if(amount == 0)
+ return
+ if(card.money >= amount)
+ card.money -= amount
+ switch(amount)
+ if(1)
+ new /obj/item/weapon/spacecash(loc)
+ if(10)
+ new /obj/item/weapon/spacecash/c10(loc)
+ if(20)
+ new /obj/item/weapon/spacecash/c20(loc)
+ if(50)
+ new /obj/item/weapon/spacecash/c50(loc)
+ if(100)
+ new /obj/item/weapon/spacecash/c100(loc)
+ if(200)
+ new /obj/item/weapon/spacecash/c200(loc)
+ if(500)
+ new /obj/item/weapon/spacecash/c500(loc)
+ if(1000)
+ new /obj/item/weapon/spacecash/c1000(loc)
+ else
+ user << "\red Error: Insufficient funds."
+ return
+
+ scan(var/mob/user)
+ if(istype(user,/mob/living/carbon/human))
+ var/mob/living/carbon/human/H = user
+ if(H.wear_id)
+ if(istype(H.wear_id, /obj/item/weapon/card/id))
+ card = H.wear_id
+ return 1
+ if(istype(H.wear_id,/obj/item/device/pda))
+ var/obj/item/device/pda/P = H.wear_id
+ if(istype(P.id,/obj/item/weapon/card/id))
+ card = P.id
+ return 1
+ return 0
+ return 0
+
+ insert()
+ if(accepted)
+ card.money += inserted
+ inserted = 0
+
+ Topic(href,href_list)
+ if (usr.machine==src && get_dist(src, usr) <= 1 || istype(usr, /mob/living/silicon/ai))
+ if(href_list["eca"])
+ if(accepted)
+ for(var/obj/item/weapon/spacecash/M in cashes)
+ M.loc = loc
+ inserted = 0
+ if(!cashes)
+ cashes = null
+ if(href_list["with"] && card)
+ withdraw(usr)
+ if(href_list["ins"] && card)
+ if(accepted)
+ card.money += inserted
+ inserted = 0
+ if(href_list["lock"])
+ card = null
+ accepted = 0
+ usr.machine = null
+ usr << browse(null,"window=atm")
+ src.updateUsrDialog()
+ else
+ usr.machine = null
+ usr << browse(null,"window=atm")
diff --git a/code/defines/obj/supplypacks.dm b/code/defines/obj/supplypacks.dm
index d1f725a972d..076a0bccd49 100755
--- a/code/defines/obj/supplypacks.dm
+++ b/code/defines/obj/supplypacks.dm
@@ -76,6 +76,8 @@
name = "Arts and Crafts supplies"
contains = list("/obj/item/weapon/storage/crayonbox",
"/obj/item/weapon/camera_test",
+ "/obj/item/weapon/camera_film",
+ "/obj/item/weapon/camera_film",
"/obj/item/weapon/storage/photo_album",
"/obj/item/weapon/packageWrap",
"/obj/item/weapon/reagent_containers/glass/paint/red",
diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index 1bc78daa926..39b66e92b0f 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -159,7 +159,7 @@
ammo = 30
/obj/item/weapon/spacecash
- name = "space cash"
+ name = "stack of credits"
desc = "It's worth 1 credit."
gender = PLURAL
icon = 'items.dmi'
@@ -175,6 +175,7 @@
var/access = list()
access = access_crate_cash
var/worth = 1
+ var/amount = 1
/obj/item/weapon/spacecash/c10
icon_state = "spacecash10"
@@ -211,6 +212,51 @@
access = access_crate_cash
desc = "It's worth 1000 credits."
worth = 1000
+/obj/item/weapon/spacecash/attack_self(var/mob/user)
+ var/dat = "Space cash stack"
+ dat += "Credit amount - [worth * amount]
"
+ dat += "Take amount
"
+ user << browse(dat,"window=money")
+
+/obj/item/weapon/spacecash/Topic(href, href_list)
+ if(href_list["takemoney"])
+ var/a = 1
+ a = input(usr,"How much you want take?") as num
+ if((a > src.amount) || (a < 0))
+ usr << "\red You don't have that many credits."
+ return
+ src.amount -= a
+ var/obj/item/weapon/spacecash/S
+ if(a <= 0)
+ return
+ switch(src.worth)
+ if(1)
+ S = new /obj/item/weapon/spacecash(get_turf(src))
+ if(10)
+ S = new /obj/item/weapon/spacecash/c10(get_turf(src))
+ if(20)
+ S = new /obj/item/weapon/spacecash/c20(get_turf(src))
+ if(50)
+ S = new /obj/item/weapon/spacecash/c50(get_turf(src))
+ if(100)
+ S = new /obj/item/weapon/spacecash/c100(get_turf(src))
+ if(200)
+ S = new /obj/item/weapon/spacecash/c200(get_turf(src))
+ if(500)
+ S = new /obj/item/weapon/spacecash/c500(get_turf(src))
+ if(1000)
+ S = new /obj/item/weapon/spacecash/c1000(get_turf(src))
+ S.amount = a
+ if(src.amount == 0)
+ del(src)
+/obj/item/weapon/spacecash/attackby(var/obj/I, var/mob/user)
+ if(!I)
+ return
+ if(istype(I,src))
+ src.amount += I:amount
+ user << "You add [I:amount] credits to stack."
+ del(I)
+
/obj/item/device/mass_spectrometer
desc = "A hand-held mass spectrometer which identifies trace chemicals in a blood sample."
@@ -573,11 +619,12 @@
item_state = "card-id"
var/access = list()
var/registered_name = null // The name registered_name on the card
-
+ var/pin = 0
+ var/money = 0
var/assignment = null
var/over_jumpsuit = 1 // If set to 0, it won't display on top of the mob's jumpsuit
var/dorm = 0 // determines if this ID has claimed a dorm already
-
+ var/obj/item/weapon/credit_card/card
var/blood_type = "\[UNSET\]"
var/dna_hash = "\[UNSET\]"
var/fingerprint_hash = "\[UNSET\]"
@@ -865,6 +912,7 @@
/obj/item/weapon/handcuffs/cable
name = "cable restraints"
desc = "Looks like some cables tied together. Could be used to tie something up."
+ icon_state = "cuff_red"
/obj/item/weapon/locator
name = "locator"
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index e67d702ed53..6153568bcba 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -45,7 +45,6 @@ Stealth and Camouflage Items;
/obj/item/clothing/shoes/syndigaloshes:2:No-Slip Syndicate Shoes;
/obj/item/weapon/card/id/syndicate:3:Agent ID card;
/obj/item/clothing/mask/gas/voice:4:Voice Changer;
-/obj/item/clothing/glasses/thermal:4:Thermal Imaging Glasses;
/obj/item/device/chameleon:4:Chameleon-Projector;
/obj/item/weapon/stamperaser:1:Stamp Remover and Forger;
Whitespace:Seperator;
@@ -56,11 +55,12 @@ Devices and Tools;
/obj/item/device/encryptionkey/traitor:3:Traitor Radio Key;
/obj/item/device/encryptionkey/binary:3:Binary Translator Key;
/obj/item/weapon/storage/syndie_kit/space:3:Space Suit;
+/obj/item/clothing/glasses/thermal:3:Thermal Imaging Glasses;
/obj/item/weapon/aiModule/syndicate:7:Hacked AI Upload Module;
/obj/item/weapon/plastique:2:C-4 (Destroys walls);
/obj/item/weapon/syndie/c4explosive:4:Low Power Explosive Charge, with Detonator;
/obj/item/device/powersink:5:Powersink (DANGER!);
-/obj/machinery/singularity_beacon/syndicate:7:Singularity Beacon (DANGER!);
+/obj/item/device/radio/beacon/syndicate:7:Singularity Beacon (DANGER!);
/obj/item/weapon/circuitboard/teleporter:10:Teleporter Circuit Board;
Whitespace:Seperator;
Implants;
diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm
index 41490b1de7f..1436addff08 100644
--- a/code/game/jobs/job/civilian.dm
+++ b/code/game/jobs/job/civilian.dm
@@ -122,7 +122,7 @@
equip(var/mob/living/carbon/human/H)
if(!H) return 0
H.equip_if_possible(new /obj/item/device/radio/headset/headset_cargo(H), H.slot_ears)
- H.equip_if_possible(new /obj/item/clothing/under/rank/cargo(H), H.slot_w_uniform)
+ H.equip_if_possible(new /obj/item/clothing/under/rank/cargotech(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/quartermaster(H), H.slot_belt)
return 1
diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm
index 7b9e21ab0ac..4bdc2b9890e 100644
--- a/code/game/jobs/job_controller.dm
+++ b/code/game/jobs/job_controller.dm
@@ -304,6 +304,11 @@ var/global/datum/controller/occupations/job_master
C.assignment = title
C.name = "[C.registered_name]'s ID Card ([C.assignment])"
C.access = get_access(rank)
+ C.pin = rand(1000,9999)
+ C.money = 10 * rand(50,200)
+ H << "\blue Your station account has [C.money] credits. The pin-code is [C.pin]."
+ if(H.mind)
+ H.mind.memory += "Your pin-code is - [C.pin]
"
H.equip_if_possible(C, H.slot_wear_id)
if(!H.equip_if_possible(new /obj/item/weapon/pen(H), H.slot_r_store))
H.equip_if_possible(new /obj/item/weapon/pen(H), H.slot_ears)
diff --git a/code/game/machinery/airlock_control.dm b/code/game/machinery/airlock_control.dm
index afb73392adf..d93ff2a4985 100644
--- a/code/game/machinery/airlock_control.dm
+++ b/code/game/machinery/airlock_control.dm
@@ -175,7 +175,10 @@ obj/machinery/access_button
icon_state = "access_button_off"
attack_hand(mob/user)
- if(radio_connection)
+ if(!allowed(user))
+ user << "\red Access Denied"
+
+ else if(radio_connection)
var/datum/signal/signal = new
signal.transmission_method = 1 //radio signal
signal.data["tag"] = master_tag
diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm
index ccc94d6fdbe..f0cb70659c3 100644
--- a/code/game/machinery/computer/HolodeckControl.dm
+++ b/code/game/machinery/computer/HolodeckControl.dm
@@ -371,7 +371,7 @@
"\red You hear a whine as \the [src]'s is hit by something dense.")
H.UpdateDamageIcon()
H.updatehealth()
- playsound(src.loc, 'punch1.ogg', 50, 1, -3)
+ playsound(src.loc, 'tablehit1.ogg', 50, 1, -3)
else //Lets do REAL DAMAGE, YEAH!
G.affecting.attack_log += text("\[[time_stamp()]\] Has been smashed on a table by [G.assailant.name] ([G.assailant.ckey])")
G.assailant.attack_log += text("\[[time_stamp()]\] Smashed [G.affecting.name] ([G.affecting.ckey]) on a table.")
@@ -409,7 +409,7 @@
"\red You hear the nauseating crunch of bone and gristle on solid metal.")
H.UpdateDamageIcon()
H.updatehealth()
- playsound(src.loc, 'punch1.ogg', 50, 1, -3)
+ playsound(src.loc, 'tablehit1.ogg', 50, 1, -3)
return
G.affecting.loc = src.loc
G.affecting.Weaken(5)
diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm
index 7c9e3135609..3b7e784473c 100644
--- a/code/game/machinery/door_control.dm
+++ b/code/game/machinery/door_control.dm
@@ -63,6 +63,7 @@
return
if(!allowed(user) && (wires & 1))
+ user << "\red Access Denied"
flick("doorctrl-denied",src)
return
@@ -81,8 +82,8 @@
if(specialfunctions & IDSCAN)
D.aiDisabledIdScanner = 1
if(specialfunctions & BOLTS)
- spawn(5)
- D.locked = 1
+ D.locked = 1
+ D.update_icon()
if(specialfunctions & SHOCK)
D.secondsElectrified = -1
@@ -95,8 +96,8 @@
if(specialfunctions & IDSCAN)
D.aiDisabledIdScanner = 0
if(specialfunctions & BOLTS)
- spawn(5)
- D.locked = 0
+ D.locked = 0
+ D.update_icon()
if(specialfunctions & SHOCK)
D.secondsElectrified = 0
diff --git a/code/game/objects/closets/secure/cargo.dm b/code/game/objects/closets/secure/cargo.dm
index 6ae193e14d7..85e59b83a4f 100644
--- a/code/game/objects/closets/secure/cargo.dm
+++ b/code/game/objects/closets/secure/cargo.dm
@@ -13,7 +13,7 @@
New()
..()
sleep(2)
- new /obj/item/clothing/under/rank/cargo(src)
+ new /obj/item/clothing/under/rank/cargotech(src)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/device/radio/headset/headset_cargo(src)
new /obj/item/clothing/gloves/black(src)
diff --git a/code/game/objects/closets/secure/medical.dm b/code/game/objects/closets/secure/medical.dm
index 1f4bacbad35..da7e6aec545 100644
--- a/code/game/objects/closets/secure/medical.dm
+++ b/code/game/objects/closets/secure/medical.dm
@@ -72,6 +72,20 @@
new /obj/item/device/pda/medical(src)
new /obj/item/weapon/storage/firstaid/regular(src)
new /obj/item/device/flashlight/pen(src)
+ switch(pick(list("blue", "green", "purple")))
+ if ("blue")
+ new /obj/item/clothing/under/rank/medical/blue(src)
+ if ("green")
+ new /obj/item/clothing/under/rank/medical/green(src)
+ if ("purple")
+ new /obj/item/clothing/under/rank/medical/purple(src)
+ switch(pick(list("blue", "green", "purple")))
+ if ("blue")
+ new /obj/item/clothing/under/rank/medical/blue(src)
+ if ("green")
+ 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/device/radio/headset/headset_med(src)
return
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 3993a1e2acf..fbaf1ff3d6b 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -63,7 +63,10 @@
O.place = "handcuff"
M.requests += O
spawn( 0 )
- playsound(src.loc, 'handcuffs.ogg', 30, 1, -2)
+ if(istype(src, /obj/item/weapon/handcuffs/cable))
+ playsound(src.loc, 'cablecuff.ogg', 30, 1, -2)
+ else
+ playsound(src.loc, 'handcuffs.ogg', 30, 1, -2)
O.process()
return
else
@@ -77,7 +80,10 @@
O.place = "handcuff"
M.requests += O
spawn( 0 )
- playsound(src.loc, 'handcuffs.ogg', 30, 1, -2)
+ if(istype(src, /obj/item/weapon/handcuffs/cable))
+ playsound(src.loc, 'cablecuff.ogg', 30, 1, -2)
+ else
+ playsound(src.loc, 'handcuffs.ogg', 30, 1, -2)
O.process()
return
return
diff --git a/code/game/objects/items/weapons/cameras.dm b/code/game/objects/items/weapons/cameras.dm
index a4f12d5b597..8acba217c74 100644
--- a/code/game/objects/items/weapons/cameras.dm
+++ b/code/game/objects/items/weapons/cameras.dm
@@ -38,7 +38,7 @@
/obj/item/weapon/camera_test
name = "camera"
icon = 'items.dmi'
- desc = "A one use - polaroid camera. 10 photos left."
+ desc = "A polaroid camera. It has 30 photos left."
icon_state = "camera"
item_state = "electropack"
w_class = 2.0
@@ -47,6 +47,7 @@
throwforce = 5
throw_speed = 4
throw_range = 10
+ var/pictures_max = 30
var/pictures_left = 30
var/can_use = 1
@@ -60,6 +61,13 @@
var/icon/img //Big photo image
var/scribble //Scribble on the back.
+/obj/item/weapon/camera_film
+ name = "film cartridge"
+ icon = 'items.dmi'
+ desc = "A camera film cartridge. Insert it into a camera to reload it."
+ icon_state = "film"
+ item_state = "electropack"
+ w_class = 1.0
/obj/item/weapon/photo/attack_self(var/mob/user as mob)
..()
@@ -145,9 +153,11 @@
if (can_use)
can_use = 0
icon_state = "camera_off"
+ usr << "\red You turn the camera off."
else
can_use = 1
icon_state = "camera"
+ usr << "\blue You turn the camera on."
/obj/item/weapon/camera_test/proc/get_mobs(turf/the_turf as turf)
var/mob_detail
@@ -206,7 +216,7 @@
playsound(src.loc, pick('polaroid1.ogg','polaroid2.ogg'), 75, 1, -3)
pictures_left--
- src.desc = "A one use - polaroid camera. [pictures_left] photos left."
+ src.desc = "A polaroid camera. It has [pictures_left] photos left."
user << "\blue [pictures_left] photos left."
can_use = 0
icon_state = "camera_off"
@@ -214,4 +224,16 @@
can_use = 1
icon_state = "camera"
-
+/obj/item/weapon/camera_test/attackby(A as obj, mob/user as mob)
+ if (istype(A, /obj/item/weapon/camera_film))
+ if (src.pictures_left >= pictures_max)
+ user << "\blue It's already full!"
+ return 1
+ else
+ del(A)
+ src.pictures_left = src.pictures_max
+ src.desc = "A polaroid camera. It has [pictures_left] photos left."
+ user << text("\blue You reload the camera film!",)
+ user.update_clothing()
+ return 1
+ return
diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm
index 5f6a3e80ebe..96e712bc5d0 100644
--- a/code/game/objects/items/weapons/cards_ids.dm
+++ b/code/game/objects/items/weapons/cards_ids.dm
@@ -107,6 +107,12 @@ FINGERPRINT CARD
else
..()
+/obj/item/weapon/card/id/proc/checkaccess(p,var/mob/user)
+ if(p == pin)
+ user << "\green Access granted"
+ return 1
+ user << "\red Access denied"
+ return 0
// FINGERPRINT HOLDER
diff --git a/code/game/objects/radio/beacon.dm b/code/game/objects/radio/beacon.dm
index 0aae0f9e698..2d29968457a 100644
--- a/code/game/objects/radio/beacon.dm
+++ b/code/game/objects/radio/beacon.dm
@@ -6,7 +6,6 @@
var/code = "electronic"
origin_tech = "bluespace=1"
-
/obj/item/device/radio/beacon/hear_talk()
return
@@ -32,3 +31,19 @@
proc/digest_delay()
spawn(600)
del(src)
+
+
+// SINGULO BEACON SPAWNER
+
+/obj/item/device/radio/beacon/syndicate
+ name = "suspicious beacon"
+ desc = "A label on it reads: Activate to have a singularity beacon teleported to your location."
+ origin_tech = "bluespace=1;syndicate=7"
+
+/obj/item/device/radio/beacon/syndicate/attack_self(mob/user as mob)
+ if(user)
+ user << "\blue Locked In"
+ new /obj/machinery/singularity_beacon/syndicate( user.loc )
+ playsound(src, 'pop.ogg', 100, 1, 1)
+ del(src)
+ return
\ No newline at end of file
diff --git a/code/game/objects/stool.dm b/code/game/objects/stool.dm
index 1fffa4c72c0..3a2bb3f1a18 100644
--- a/code/game/objects/stool.dm
+++ b/code/game/objects/stool.dm
@@ -151,6 +151,18 @@
icon_state = "down"
anchored = 0
+/obj/item/roller
+ name = "roller bed"
+ desc = "A collapsed roller bed that can be carried around."
+ icon = 'rollerbed.dmi'
+ icon_state = "folded"
+ w_class = 4.0 // Can't be put in backpacks. Oh well.
+
+ attack_self(mob/user)
+ var/obj/structure/stool/bed/roller/R = new /obj/structure/stool/bed/roller(user.loc)
+ R.add_fingerprint(user)
+ del(src)
+
//obj/structure/stool/bed/roller/Move()
/obj/structure/stool/bed/Move()
..()
@@ -181,7 +193,20 @@
buckled_mob.pixel_y = 0
buckled_mob.anchored = 0
buckled_mob.buckled = null
+ buckled_mob = null
density = 0
icon_state = "down"
..()
return
+
+/obj/structure/stool/bed/roller/MouseDrop(over_object, src_location, over_location)
+ ..()
+ if((over_object == usr && (in_range(src, usr) || usr.contents.Find(src))))
+ if(!ishuman(usr)) return
+ if(buckled_mob) return 0
+ visible_message("[usr] collapses \the [src.name]")
+ new/obj/item/roller(get_turf(src))
+ spawn(0)
+ del(src)
+ return
+
diff --git a/code/game/objects/storage/belt.dm b/code/game/objects/storage/belt.dm
index 91d2086cbee..47f8c7095cd 100644
--- a/code/game/objects/storage/belt.dm
+++ b/code/game/objects/storage/belt.dm
@@ -149,6 +149,7 @@
"/obj/item/weapon/melee/baton",
"/obj/item/weapon/melee/classic_baton",
"/obj/item/weapon/camera_test",
+ "/obj/item/weapon/camera_film",
"/obj/item/weapon/cigpacket",
"/obj/item/weapon/zippo",
"/obj/item/device/taperecorder",
diff --git a/code/game/objects/storage/storage.dm b/code/game/objects/storage/storage.dm
index a266e6474c0..f5fb5c38588 100644
--- a/code/game/objects/storage/storage.dm
+++ b/code/game/objects/storage/storage.dm
@@ -316,7 +316,7 @@
/obj/item/weapon/storage/box/syndicate/New()
..()
- switch (pickweight(list("bloodyspai" = 1, "stealth" = 1, "screwed" = 1, "guns" = 1, "freedom" = 1)))
+ switch (pickweight(list("bloodyspai" = 1, "stealth" = 1, "screwed" = 1, "guns" = 1, "freedom" = 1, "hacker" = 1, "lordsingulo" = 1)))
if ("bloodyspai")
new /obj/item/clothing/under/chameleon(src)
new /obj/item/clothing/mask/gas/voice(src)
@@ -352,6 +352,19 @@
U.imp = new /obj/item/weapon/implant/uplink(U)
return
+ if ("hacker")
+ new /obj/item/weapon/aiModule/syndicate(src)
+ new /obj/item/weapon/card/emag(src)
+ new /obj/item/device/encryptionkey/binary(src)
+ return
+
+ if ("lordsingulo")
+ new /obj/item/device/radio/beacon/syndicate(src)
+ new /obj/item/clothing/suit/space/syndicate(src)
+ new /obj/item/clothing/head/helmet/space/syndicate(src)
+ new /obj/item/weapon/card/emag(src)
+ return
+
/obj/item/weapon/storage/dice/New()
new /obj/item/weapon/dice( src )
new /obj/item/weapon/dice/d20( src )
diff --git a/code/game/objects/tables_racks.dm b/code/game/objects/tables_racks.dm
index 86e02346fd4..f41e750df34 100644
--- a/code/game/objects/tables_racks.dm
+++ b/code/game/objects/tables_racks.dm
@@ -189,7 +189,7 @@ TABLE AND RACK OBJECT INTERATIONS
"\red You hear the nauseating crunch of bone and gristle on solid metal.")
H.UpdateDamageIcon()
H.updatehealth()
- playsound(src.loc, 'punch1.ogg', 50, 1, -3)
+ playsound(src.loc, 'tablehit1.ogg', 50, 1, -3)
return
G.affecting.loc = src.loc
G.affecting.Weaken(5)
diff --git a/code/modules/chemical/Chemistry-Tools.dm b/code/modules/chemical/Chemistry-Tools.dm
index 4625e91f428..59f7393eb73 100644
--- a/code/modules/chemical/Chemistry-Tools.dm
+++ b/code/modules/chemical/Chemistry-Tools.dm
@@ -2034,7 +2034,7 @@
icon_state = "beakerlarge"
item_state = "beaker"
m_amt = 0
- g_amt = 15000
+ g_amt = 5000
volume = 100
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,25,30,50,100)
diff --git a/code/modules/clothing/jumpsuit.dm b/code/modules/clothing/jumpsuit.dm
index 67e8cd57b54..afefffb0a4d 100644
--- a/code/modules/clothing/jumpsuit.dm
+++ b/code/modules/clothing/jumpsuit.dm
@@ -273,7 +273,7 @@
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0)
/obj/item/clothing/under/rank/medical
- desc = "It's made of a special fiber that provides minor protection against biohazards. it has a cross on the chest denoting that the wearer is trained medical personnel."
+ desc = "It's made of a special fiber that provides minor protection against biohazards. It has a cross on the chest denoting that the wearer is trained medical personnel."
name = "medical doctor's jumpsuit"
icon_state = "medical"
item_state = "w_suit"
@@ -281,12 +281,32 @@
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
+//SKRUBS
+
+/obj/item/clothing/under/rank/medical/blue
+ name = "medical scrubs"
+ desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in baby blue."
+ icon_state = "scrubsblue"
+ color = "scrubsblue"
+
+/obj/item/clothing/under/rank/medical/green
+ name = "medical scrubs"
+ desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in dark green."
+ icon_state = "scrubsgreen"
+ color = "scrubsgreen"
+
+/obj/item/clothing/under/rank/medical/purple
+ name = "medical scrubs"
+ desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in deep purple."
+ icon_state = "scrubspurple"
+ color = "scrubspurple"
+
/obj/item/clothing/under/rank/chief_medical_officer
desc = "It's a jumpsuit worn by those with the experience to be \"Chief Medical Officer\". It provides minor biological protection."
name = "chief medical officer's jumpsuit"
- icon_state = "medical"
+ icon_state = "cmo"
item_state = "w_suit"
- color = "medical"
+ color = "cmo"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 10, rad = 0)
@@ -301,17 +321,17 @@
/obj/item/clothing/under/rank/cargo
name = "quartermaster's jumpsuit"
- desc = "It's a jumpsuit worn by the quartermaster. It's specially designed to prevent back injuries caused by heavy lifting."
- icon_state = "lightbrown"
+ desc = "It's a jumpsuit worn by the quartermaster. It's specially designed to prevent back injuries caused by pushing paper."
+ icon_state = "qm"
item_state = "lb_suit"
- color = "cargo"
+ color = "qm"
/obj/item/clothing/under/rank/cargotech
- name = "cargotech's jumpsuit"
- desc = "'Shooooorts! They're comfy and easy to wear!'"
+ name = "cargo technician's jumpsuit"
+ desc = "Shooooorts! They're comfy and easy to wear!"
icon_state = "cargotech"
- item_state = "cargotech"
- color = "cargotech"
+ item_state = "lb_suit"
+ color = "cargo"
/obj/item/clothing/under/rank/mailman
name = "mailman's jumpsuit"
@@ -532,6 +552,7 @@
armor = list(melee = 100, bullet = 100, laser = 100,energy = 100, bomb = 100, bio = 100, rad = 100)
// Cheerleader outfits or something
+
/obj/item/clothing/under/cheerleader
name = "cheerleader uniform"
desc = "Looks breezy."
@@ -552,6 +573,7 @@
/obj/item/clothing/under/cheerleader/white
icon_state = "white_cheer"
color = "white_cheer"
+
//End of cheerleaders
/obj/item/clothing/under/captainmal
diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm
index 415e32c6982..a4f85275d46 100644
--- a/code/modules/clothing/suits/bio.dm
+++ b/code/modules/clothing/suits/bio.dm
@@ -62,6 +62,9 @@
/obj/item/clothing/suit/bio_suit/cmo
icon_state = "bio_cmo"
+/obj/item/clothing/head/bio_hood/cmo
+ icon_state = "bio_cmo"
+
/obj/item/clothing/suit/bio_suit/plaguedoctorsuit
name = "Plague doctor suit"
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index ea4ab718da3..7a057f2b826 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1208,10 +1208,11 @@
if (handcuffed)
pulling = null
+ var/h1 = handcuffed.icon_state
if (!lying)
- overlays += image("icon" = 'mob.dmi', "icon_state" = "handcuff1", "layer" = MOB_LAYER)
+ overlays += image("icon" = 'mob.dmi', "icon_state" = "[h1]1", "layer" = MOB_LAYER)
else
- overlays += image("icon" = 'mob.dmi', "icon_state" = "handcuff2", "layer" = MOB_LAYER)
+ overlays += image("icon" = 'mob.dmi', "icon_state" = "[h1]2", "layer" = MOB_LAYER)
if (client)
client.screen -= contents
diff --git a/html/changelog.html b/html/changelog.html
index b395bda5b81..675c3d72fc4 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -49,11 +49,32 @@ should be listed in the changelog upon commit though. Thanks. -->
17 May 2012
+
TG updated:
+
+ - Added WJohnston's scrubs to Medical Doctor lockers.
+ - Added two new syndicate bundles
+ - Added WJohnston's CMO bio hood
+ - Reduced cost of thermals to 3 telecrystals (formerly 4)
+ - Singularity Beacons are now spawned from a smaller, portable device.
+ - Large beaker cost reduced to 5000 glass
+ - CMO and QM jumpsuits made more unique.
+ - Updated Cargo Tech jumpsuit and sprite
+ - Edited Warden's jumpsuit striping to match his jacket
+ - Fixed misaligned downed sprites for HoS's coat
+
+
Erthilo updated:
+
+ - Roller beds are now collapsible, just like body bags! They don't fit in anything though.
+ - New sounds for cable cuffs and table smashing.
+ - Cable cuffs now have a proper sprite!
+ - Adds camera film which can be used to refill cameras. Added to detectives wardrobe and arts and crafts crate. Credit to Flashkirby99
+ - ATM's now require a pin which is generated on round start and stored in notes. Space cash renamed to stack of credits, and same value credits can be stacked together. Initial round credits are generated randomly between 500 to 2000 credits. Credits or coins can be inserted into ATMs and converted to credits. Still not used for anything! Credit to EditorRUS at Animus Station.
+ - Fixes police tape not appearing on doors.
+
Abi79 updated:
- Fixed ID access requirements for the QM's office and the prison wing.
-
SkyMarshal updated:
- Metal foam now blocks air.
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index da426bc235c..efb51ab8062 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi
index c37fb23a2a7..0aed007843d 100644
Binary files a/icons/mob/mob.dmi and b/icons/mob/mob.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index 6171a6b21ac..82413797bc5 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi
index 9b015fb0a56..8eb5ac5b6fd 100644
Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index 8c59e64fd7c..74ada6cdc50 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi
index bf10742c779..6bc0d81e937 100644
Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ
diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi
index 398dac68c08..6adf1ab3ec0 100644
Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ
diff --git a/icons/obj/rollerbed.dmi b/icons/obj/rollerbed.dmi
index 67a843283fa..b7e45127362 100644
Binary files a/icons/obj/rollerbed.dmi and b/icons/obj/rollerbed.dmi differ
diff --git a/interface/interface.dm b/interface/interface.dm
index 3cf23dfabeb..a7b89199234 100644
--- a/interface/interface.dm
+++ b/interface/interface.dm
@@ -3,7 +3,11 @@
set desc = "Visit the wiki."
set hidden = 1
if( config.wikiurl )
+ if(alert("This will open the wiki in your browser. Are you sure?",,"Yes","No")=="No")
+ return
src << link(config.wikiurl)
+ else
+ src << "\red The wiki URL is not set in the server configuration."
return
/client/verb/forum()
@@ -11,5 +15,9 @@
set desc = "Visit the forum."
set hidden = 1
if( config.forumurl )
+ if(alert("This will open the forum in your browser. Are you sure?",,"Yes","No")=="No")
+ return
src << link(config.forumurl)
+ else
+ src << "\red The forum URL is not set in the server configuration."
return
\ No newline at end of file
diff --git a/interface/skin.dmf b/interface/skin.dmf
index 1fc01b3ed12..3defcc522f6 100644
--- a/interface/skin.dmf
+++ b/interface/skin.dmf
@@ -1342,7 +1342,7 @@ window "rpane"
lock = none
elem "forumb"
type = BUTTON
- pos = 260,0
+ pos = 304,0
size = 60x16
anchor1 = none
anchor2 = none
@@ -1370,7 +1370,7 @@ window "rpane"
button-type = pushbutton
elem "wikib"
type = BUTTON
- pos = 195,0
+ pos = 240,0
size = 60x16
anchor1 = none
anchor2 = none
diff --git a/maps/tgstation.2.0.8.dmm b/maps/tgstation.2.0.8.dmm
index 9e0abd9c8aa..b368eb01b92 100755
--- a/maps/tgstation.2.0.8.dmm
+++ b/maps/tgstation.2.0.8.dmm
@@ -3513,7 +3513,7 @@
"bpC" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/camera{c_tag = "Division Centre"; dir = 1; network = "Research"; pixel_x = 22},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bpD" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bpE" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/obj/structure/closet/wardrobe/toxins_white,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
-"bpF" = (/obj/structure/noticeboard{pixel_y = -27},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
+"bpF" = (/obj/structure/noticeboard{pixel_y = -27},/obj/machinery/light,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bpG" = (/obj/structure/table,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bpH" = (/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/structure/table,/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bpI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
diff --git a/sound/weapons/cablecuff.ogg b/sound/weapons/cablecuff.ogg
new file mode 100644
index 00000000000..f1d60184eb8
Binary files /dev/null and b/sound/weapons/cablecuff.ogg differ
diff --git a/sound/weapons/tablehit1.ogg b/sound/weapons/tablehit1.ogg
new file mode 100644
index 00000000000..23409a03a4c
Binary files /dev/null and b/sound/weapons/tablehit1.ogg differ