diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm
index da2013e2e58..c00a79e1e6b 100644
--- a/code/_onclick/click.dm
+++ b/code/_onclick/click.dm
@@ -167,7 +167,7 @@
animals lunging, etc.
*/
/mob/proc/RangedAttack(var/atom/A, var/params)
- if(ishuman(src) && (istype(src:gloves, /obj/item/clothing/gloves/yellow/power)) && a_intent == "harm")
+ if(ishuman(src) && (istype(src:gloves, /obj/item/clothing/gloves/color/yellow/power)) && a_intent == "harm")
PowerGlove(A)
if(!mutations.len) return
if((LASER in mutations) && a_intent == "harm")
@@ -321,7 +321,7 @@
return
/mob/living/carbon/human/PowerGlove(atom/A)
- var/obj/item/clothing/gloves/yellow/power/G = src:gloves
+ var/obj/item/clothing/gloves/color/yellow/power/G = src:gloves
var/time = 100
var/turf/T = get_turf(src)
var/turf/U = get_turf(A)
diff --git a/code/datums/cargoprofile.dm b/code/datums/cargoprofile.dm
index 36d4748cfc8..15a1dc1065b 100644
--- a/code/datums/cargoprofile.dm
+++ b/code/datums/cargoprofile.dm
@@ -156,7 +156,7 @@
blacklist = null
whitelist = list(/obj/item/weapon/tank,/obj/item/weapon/reagent_containers,
/obj/item/stack/medical,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/gun/syringe,
- /obj/item/weapon/plastique,/obj/item/weapon/grenade,/obj/item/ammo_box,
+ /obj/item/weapon/c4,/obj/item/weapon/grenade,/obj/item/ammo_box,
/obj/item/weapon/gun/grenadelauncher,/obj/item/weapon/flamethrower, /obj/item/weapon/lighter,
/obj/item/weapon/match,/obj/item/weapon/weldingtool)
@@ -258,7 +258,7 @@
whitelist = list(/obj/item/weapon/banhammer,/obj/item/weapon/sord,/obj/item/weapon/butch,/obj/item/weapon/claymore,/obj/item/weapon/holo/esword,
/obj/item/weapon/flamethrower,/obj/item/weapon/grenade,/obj/item/weapon/gun,/obj/item/weapon/hatchet,/obj/item/weapon/katana,
/obj/item/weapon/kitchenknife,/obj/item/weapon/melee,/obj/item/weapon/nullrod,/obj/item/weapon/pickaxe,/obj/item/weapon/twohanded,
- /obj/item/weapon/plastique,/obj/item/weapon/scalpel,/obj/item/weapon/shield,/obj/item/weapon/grown/deathnettle)
+ /obj/item/weapon/c4,/obj/item/weapon/scalpel,/obj/item/weapon/shield,/obj/item/weapon/grown/deathnettle)
/datum/cargoprofile/tools
name = "Devices & Tools"
diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm
index 8497680bd2d..ea40af24232 100644
--- a/code/datums/supplypacks.dm
+++ b/code/datums/supplypacks.dm
@@ -403,9 +403,9 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
/datum/supply_packs/engineering/powergamermitts
name = "Insulated Gloves Crate"
- contains = list(/obj/item/clothing/gloves/yellow,
- /obj/item/clothing/gloves/yellow,
- /obj/item/clothing/gloves/yellow)
+ contains = list(/obj/item/clothing/gloves/color/yellow,
+ /obj/item/clothing/gloves/color/yellow,
+ /obj/item/clothing/gloves/color/yellow)
cost = 20 //Made of pure-grade bullshittinium
containername = "insulated gloves crate"
diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm
index bf2e773651c..76969b53dce 100644
--- a/code/datums/uplink_item.dm
+++ b/code/datums/uplink_item.dm
@@ -163,7 +163,7 @@ var/list/uplink_items = list()
/datum/uplink_item/jobspecific/pickpocketgloves
name = "Pickpocket's Gloves"
desc = "A pair of sleek gloves to aid in pickpocketing, while wearing these you can see inside the pockets of any unsuspecting mark, loot the ID or pockets without them knowing, and pickpocketing puts the item directly into your hand."
- item = /obj/item/clothing/gloves/black/thief
+ item = /obj/item/clothing/gloves/color/black/thief
cost = 6
job = list("Civilian")
@@ -188,7 +188,7 @@ var/list/uplink_items = list()
/datum/uplink_item/jobspecific/powergloves
name = "Power Gloves"
desc = "Insulated gloves that can utilize the power of the station to deliver a short arc of electricity at a target. Must be standing on a powered cable to use."
- item = /obj/item/clothing/gloves/yellow/power
+ item = /obj/item/clothing/gloves/color/yellow/power
cost = 14
job = list("Station Engineer","Chief Engineer")
@@ -533,7 +533,7 @@ var/list/uplink_items = list()
/datum/uplink_item/device_tools/plastic_explosives
name = "Composition C-4"
desc = "C-4 is plastic explosive of the common variety Composition C. You can use it to breach walls or connect a signaler to its wiring to make it remotely detonable. It has a modifiable timer with a minimum setting of 10 seconds."
- item = /obj/item/weapon/plastique
+ item = /obj/item/weapon/c4
cost = 1
/datum/uplink_item/device_tools/powersink
diff --git a/code/datums/wires/explosive.dm b/code/datums/wires/explosive.dm
index 8f019880c93..b56f6ef4ca1 100644
--- a/code/datums/wires/explosive.dm
+++ b/code/datums/wires/explosive.dm
@@ -18,15 +18,15 @@ var/const/WIRE_EXPLODE = 1
explode()
/datum/wires/explosive/plastic
- holder_type = /obj/item/weapon/plastique
+ holder_type = /obj/item/weapon/c4
/datum/wires/explosive/plastic/CanUse(var/mob/living/L)
- var/obj/item/weapon/plastique/P = holder
+ var/obj/item/weapon/c4/P = holder
if(P.open_panel)
return 1
return 0
/datum/wires/explosive/plastic/explode()
- var/obj/item/weapon/plastique/P = holder
+ var/obj/item/weapon/c4/P = holder
P.explode(get_turf(P))
diff --git a/code/defines/obj.dm b/code/defines/obj.dm
index 5eb6c3b54fc..b0e8290ffee 100644
--- a/code/defines/obj.dm
+++ b/code/defines/obj.dm
@@ -13,7 +13,7 @@
/obj/structure/ninjatele
name = "Long-Distance Teleportation Console"
- desc = "A console used to send a Spider Clan agent long distances rapidly."
+ desc = "A console used to send a Spider Clan operative long distances rapidly."
icon = 'icons/obj/ninjaobjects.dmi'
icon_state = "teleconsole"
anchored = 1
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index 09453727f4b..a367d1f5600 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -60,7 +60,7 @@ Devices and Tools;
/obj/item/clothing/glasses/thermal/syndi:3:Thermal Imaging Glasses;
/obj/item/device/encryptionkey/binary:3:Binary Translator Key;
/obj/item/weapon/aiModule/syndicate:7:Hacked AI Upload Module;
-/obj/item/weapon/plastique:2:C-4 (Destroys walls);
+/obj/item/weapon/c4:2:C-4 (Destroys walls);
/obj/item/device/powersink:5:Powersink (DANGER!);
/obj/item/device/radio/beacon/syndicate:7:Singularity Beacon (DANGER!);
/obj/item/weapon/circuitboard/teleporter:20:Teleporter Circuit Board;
diff --git a/code/game/gamemodes/setupgame.dm b/code/game/gamemodes/setupgame.dm
index 9936afa1d9a..cfbc8491fc5 100644
--- a/code/game/gamemodes/setupgame.dm
+++ b/code/game/gamemodes/setupgame.dm
@@ -170,7 +170,7 @@
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/engineer(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(M), slot_shoes)
// M.equip_to_slot_or_del(new /obj/item/weapon/storage/toolbox/mechanical(M), slot_l_hand)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/yellow(M), slot_gloves)
+ M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/yellow(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/device/t_scanner(M), slot_r_store)
//M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
@@ -193,7 +193,7 @@
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space(M), slot_wear_suit)
// M.equip_to_slot_or_del(new /obj/item/weapon/storage/toolbox/mechanical(M), slot_l_hand)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/yellow(M), slot_gloves)
+ M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/yellow(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/device/t_scanner(M), slot_r_store)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas(M), slot_wear_mask)
@@ -215,7 +215,7 @@
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chief_engineer(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(M), slot_shoes)
// M.equip_to_slot_or_del(new /obj/item/weapon/storage/toolbox/mechanical(M), slot_l_hand)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/yellow(M), slot_gloves)
+ M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/yellow(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/device/t_scanner(M), slot_r_store)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
if (prob(50))
@@ -235,7 +235,7 @@
//M.equip_to_slot_or_del(new /obj/item/weapon/gun/revolver(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/clothing/under/syndicate(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/swat(M), slot_gloves)
+ M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/weapon/tank/jetpack(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas(M), slot_wear_mask)
if (prob(50))
diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm
index 43f58169edf..18cd7b2a334 100644
--- a/code/game/gamemodes/wizard/spellbook.dm
+++ b/code/game/gamemodes/wizard/spellbook.dm
@@ -333,7 +333,7 @@
if("armor")
feedback_add_details("wizard_spell_learned","HS") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
new /obj/item/clothing/shoes/sandal(get_turf(H)) //In case they've lost them.
- new /obj/item/clothing/gloves/purple(get_turf(H))//To complete the outfit
+ new /obj/item/clothing/gloves/color/purple(get_turf(H))//To complete the outfit
new /obj/item/clothing/suit/space/rig/wizard(get_turf(H))
new /obj/item/clothing/head/helmet/space/rig/wizard(get_turf(H))
temp = "You have purchased a suit of wizard armor."
diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm
index 72c1cc51b54..f6b34aef591 100644
--- a/code/game/jobs/access.dm
+++ b/code/game/jobs/access.dm
@@ -10,7 +10,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_engine_equip = 11
/var/const/access_maint_tunnels = 12
/var/const/access_external_airlocks = 13
/var/const/access_emergency_storage = 14
@@ -77,28 +77,20 @@
/var/const/access_weapons = 99 //Weapon authorization for secbots
//BEGIN CENTCOM ACCESS
- /*Should leave plenty of room if we need to add more access levels.
-/var/const/Mostly for admin fun times.*/
/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.
-
- //EMBASSIES
-
-/var/const/embassy_tajaran = 120
-/var/const/embassy_skrell = 121
-/var/const/embassy_unathi = 122
-/var/const/embassy_diona = 123
-/var/const/embassy_kidan = 124
-/var/const/embassy_slime = 125
-/var/const/embassy_grey = 126
-/var/const/embassy_vox = 127
+/var/const/access_cent_living = 102//Living quarters.
+/var/const/access_cent_medical = 103//Medical.
+/var/const/access_cent_security = 104//Security.
+/var/const/access_cent_storage = 105//Storage areas.
+/var/const/access_cent_shuttles = 106//Shuttle docks.
+/var/const/access_cent_telecomms = 107//Telecomms.
+/var/const/access_cent_teleporter = 108//Telecomms.
+/var/const/access_cent_specops = 109//Special Ops.
+/var/const/access_cent_specops_commander = 110//Special Ops Commander.
+/var/const/access_cent_blackops = 111//Black Ops.
+/var/const/access_cent_thunder = 112//Thunderdome.
+/var/const/access_cent_bridge = 113//Bridge.
+/var/const/access_cent_commander = 114//Commander's Office/ID computer.
//The Syndicate
/var/const/access_syndicate = 150//General Syndicate Access
@@ -197,34 +189,49 @@
/proc/get_centcom_access(job)
switch(job)
if("VIP Guest")
- return list(access_cent_general)
+ return list(access_cent_general, access_cent_living)
if("Custodian")
- return list(access_cent_general, access_cent_living, access_cent_storage)
+ return list(access_cent_general, access_cent_living, access_cent_medical, access_cent_storage)
if("Thunderdome Overseer")
return list(access_cent_general, access_cent_thunder)
- if("Emergency Response Team")
- return list(access_cent_general, access_cent_living, access_cent_storage) + get_all_accesses()
+ if("Emergency Response Team Member")
+ return list(access_cent_general, access_cent_living, access_cent_medical, access_cent_security, access_cent_storage, access_cent_specops) + get_all_accesses()
if("Emergency Response Team Leader")
- return list(access_cent_general, access_cent_living, access_cent_storage, access_cent_teleporter) + get_all_accesses()
- if("Intel Officer")
- return list(access_cent_general, access_cent_living) + get_all_accesses()
+ return list(access_cent_general, access_cent_living, access_cent_medical, access_cent_security, access_cent_storage, access_cent_specops, access_cent_specops_commander) + get_all_accesses()
if("Medical Officer")
- return list(access_cent_general, access_cent_living, access_cent_medical) + get_all_accesses()
- if("Death Commando")
- return list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage) + get_all_accesses()
+ return list(access_cent_general, access_cent_living, access_cent_medical, access_cent_storage) + get_all_accesses()
+ if("Intel Officer")
+ return list(access_cent_general, access_cent_living, access_cent_security, access_cent_storage) + get_all_accesses()
if("Research Officer")
- return list(access_cent_general, access_cent_specops, access_cent_medical, access_cent_teleporter, access_cent_storage) + get_all_accesses()
- if("BlackOps Commander")
- return list(access_cent_general, access_cent_thunder, access_cent_specops, access_cent_living, access_cent_storage, access_cent_creed) + get_all_accesses()
+ return list(access_cent_general, access_cent_specops, access_cent_medical, access_cent_storage, access_cent_telecomms, access_cent_teleporter) + get_all_accesses()
+ if("Death Commando")
+ return list(access_cent_general, access_cent_living, access_cent_medical, access_cent_security, access_cent_storage, access_cent_specops, access_cent_specops_commander, access_cent_blackops) + get_all_accesses()
+ if("Deathsquad Officer")
+ return get_all_centcom_access() + get_all_accesses()
if("Special Operations Officer")
return get_all_centcom_access() + get_all_accesses()
+ if("Nanotrasen Navy Representative")
+ return get_all_centcom_access() + get_all_accesses()
if("Nanotrasen Navy Officer")
return get_all_centcom_access() + get_all_accesses()
if("Nanotrasen Navy Captain")
return get_all_centcom_access() + get_all_accesses()
if("Supreme Commander")
return get_all_centcom_access() + get_all_accesses()
-
+
+/proc/get_syndicate_access(job)
+ switch(job)
+ if("Syndicate Operative")
+ return list(access_syndicate)
+ if("Syndicate Operative Leader")
+ return list(access_syndicate, access_syndicate_leader)
+ if("Vox Raider")
+ return list(access_vox)
+ if("Vox Trader")
+ return list(access_vox)
+ if("Syndicate Commando")
+ return list(access_syndicate, access_syndicate_leader)
+
/proc/get_all_accesses()
return list(access_security, access_sec_doors, access_brig, access_armory, access_forensics_lockers, access_court,
access_medical, access_genetics, access_morgue, access_rd,
@@ -240,10 +247,10 @@
access_pilot, access_ntrep, access_magistrate, access_minisat)
/proc/get_all_centcom_access()
- return list(access_cent_general, access_cent_thunder, access_cent_specops, access_cent_medical, access_cent_living, access_cent_storage, access_cent_teleporter, access_cent_creed, access_cent_captain)
+ return list(access_cent_general, access_cent_living, access_cent_medical, access_cent_security, access_cent_storage, access_cent_shuttles, access_cent_telecomms, access_cent_teleporter, access_cent_specops, access_cent_specops_commander, access_cent_blackops, access_cent_thunder, access_cent_bridge, access_cent_commander)
/proc/get_all_syndicate_access()
- return list(access_syndicate)
+ return list(access_syndicate, access_syndicate_leader, access_vox)
/proc/get_region_accesses(var/code)
switch(code)
@@ -436,23 +443,42 @@
/proc/get_centcom_access_desc(A)
switch(A)
if(access_cent_general)
- return "Code Grey"
- if(access_cent_thunder)
- return "Code Yellow"
- if(access_cent_storage)
- return "Code Orange"
+ return "General Access"
if(access_cent_living)
- return "Code Green"
+ return "Living Quarters"
if(access_cent_medical)
- return "Code White"
+ return "Medical"
+ if(access_cent_security)
+ return "Security"
+ if(access_cent_storage)
+ return "Storage"
+ if(access_cent_shuttles)
+ return "Shuttles"
+ if(access_cent_telecomms)
+ return "Telecommunications"
if(access_cent_teleporter)
- return "Code Blue"
+ return "Teleporter"
if(access_cent_specops)
- return "Code Black"
- if(access_cent_creed)
- return "Code Silver"
- if(access_cent_captain)
- return "Code Gold"
+ return "Special Ops"
+ if(access_cent_specops_commander)
+ return "Special Ops Commander"
+ if(access_cent_blackops)
+ return "Black Ops"
+ if(access_cent_thunder)
+ return "Thunderdome"
+ if(access_cent_bridge)
+ return "Bridge"
+ if(access_cent_commander)
+ return "Commander"
+
+/proc/get_syndicate_access_desc(A)
+ switch(A)
+ if(access_syndicate)
+ return "Syndicate Operative"
+ if(access_syndicate_leader)
+ return "Syndicate Operative Leader"
+ if(access_vox)
+ return "Vox"
/proc/get_all_jobs()
var/list/all_jobs = list()
@@ -465,7 +491,7 @@
return all_jobs
/proc/get_all_centcom_jobs()
- return list("VIP Guest","Custodian","Thunderdome Overseer","Emergency Response Team Member","Emergency Response Team Leader","Intel Officer","Medical Officer","Death Commando","Research Officer","BlackOps Commander","Special Operations Officer","Nanotrasen Navy Officer","Nanotrasen Navy Captain","Supreme Commander")
+ return list("VIP Guest","Custodian","Thunderdome Overseer","Emergency Response Team Member","Emergency Response Team Leader","Intel Officer","Medical Officer","Death Commando","Research Officer","Deathsquad Officer","Special Operations Officer","Nanotrasen Navy Representative","Nanotrasen Navy Officer","Nanotrasen Navy Captain","Supreme Commander")
//gets the actual job rank (ignoring alt titles)
//this is used solely for sechuds
diff --git a/code/game/jobs/job/engineering.dm b/code/game/jobs/job/engineering.dm
index 71a8332239b..8aa80ad807f 100644
--- a/code/game/jobs/job/engineering.dm
+++ b/code/game/jobs/job/engineering.dm
@@ -31,7 +31,7 @@
H.equip_or_collect(new /obj/item/clothing/shoes/brown(H), slot_shoes)
H.equip_or_collect(new /obj/item/clothing/head/hardhat/white(H), slot_head)
H.equip_or_collect(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt)
- H.equip_or_collect(new /obj/item/clothing/gloves/black(H), slot_gloves)
+ H.equip_or_collect(new /obj/item/clothing/gloves/color/black/ce(H), slot_gloves)
if(H.backbag == 1)
H.equip_or_collect(new /obj/item/weapon/storage/box/engineer(H), slot_r_hand)
else
diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm
index 4ec89fad037..928e5db3303 100644
--- a/code/game/jobs/job/science.dm
+++ b/code/game/jobs/job/science.dm
@@ -139,7 +139,6 @@
H.equip_or_collect(new /obj/item/clothing/shoes/black(H), slot_shoes)
H.equip_or_collect(new /obj/item/device/pda/roboticist(H), slot_wear_pda)
H.equip_or_collect(new /obj/item/clothing/suit/storage/labcoat(H), slot_wear_suit)
-// H.equip_or_collect(new /obj/item/clothing/gloves/black(H), slot_gloves)
H.equip_or_collect(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt)
if(H.backbag == 1)
H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm
index 45d19411b32..c5efe344164 100644
--- a/code/game/jobs/job/security.dm
+++ b/code/game/jobs/job/security.dm
@@ -29,7 +29,7 @@
H.equip_or_collect(new /obj/item/clothing/shoes/jackboots(H), slot_shoes)
H.equip_or_collect(new /obj/item/clothing/suit/armor/hos(H), slot_wear_suit)
H.equip_or_collect(new /obj/item/device/pda/heads/hos(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/clothing/gloves/black(H), slot_gloves)
+ H.equip_or_collect(new /obj/item/clothing/gloves/color/black/hos(H), slot_gloves)
H.equip_or_collect(new /obj/item/clothing/head/HoS(H), slot_head)
H.equip_or_collect(new /obj/item/clothing/glasses/sunglasses/sechud(H), slot_glasses)
H.equip_or_collect(new /obj/item/weapon/gun/energy/gun(H), slot_s_store)
@@ -74,7 +74,7 @@
H.equip_or_collect(new /obj/item/clothing/suit/armor/vest/warden(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/clothing/head/warden(H), slot_head)
H.equip_or_collect(new /obj/item/device/pda/warden(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/clothing/gloves/black(H), slot_gloves)
+ H.equip_or_collect(new /obj/item/clothing/gloves/color/black(H), slot_gloves)
H.equip_or_collect(new /obj/item/clothing/glasses/sunglasses/sechud(H), slot_glasses)
// H.equip_or_collect(new /obj/item/clothing/mask/gas(H), slot_wear_mask) //Grab one from the armory you donk
H.equip_or_collect(new /obj/item/device/flash(H), slot_l_store)
@@ -119,10 +119,11 @@
H.equip_or_collect(new /obj/item/clothing/under/det(H), slot_w_uniform)
H.equip_or_collect(new /obj/item/clothing/shoes/brown(H), slot_shoes)
H.equip_or_collect(new /obj/item/device/pda/detective(H), slot_wear_pda)
+ H.equip_or_collect(new /obj/item/toy/crayon/white(H), slot_l_store)
/* var/obj/item/clothing/mask/cigarette/CIG = new /obj/item/clothing/mask/cigarette(H)
CIG.light("")
H.equip_or_collect(CIG, slot_wear_mask) */
- H.equip_or_collect(new /obj/item/clothing/gloves/black(H), slot_gloves)
+ H.equip_or_collect(new /obj/item/clothing/gloves/color/black(H), slot_gloves)
if(H.mind.role_alt_title && H.mind.role_alt_title == "Forensic Technician")
H.equip_or_collect(new /obj/item/clothing/suit/storage/forensics/blue(H), slot_wear_suit)
else
@@ -176,6 +177,7 @@
H.equip_or_collect(new /obj/item/clothing/suit/armor/vest/security(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/clothing/head/helmet(H), slot_head)
H.equip_or_collect(new /obj/item/device/pda/security(H), slot_wear_pda)
+ H.equip_or_collect(new /obj/item/clothing/gloves/color/black(H), slot_gloves)
H.equip_or_collect(new /obj/item/weapon/gun/energy/advtaser(H), slot_s_store)
H.equip_or_collect(new /obj/item/device/flash(H), slot_l_store)
if(H.backbag == 1)
@@ -251,6 +253,7 @@
H.equip_or_collect(new /obj/item/clothing/suit/jacket(H), slot_wear_suit)
H.equip_or_collect(new /obj/item/clothing/shoes/jackboots(H), slot_shoes)
H.equip_or_collect(new /obj/item/device/pda/security(H), slot_wear_pda)
+ H.equip_or_collect(new /obj/item/clothing/gloves/color/black(H), slot_gloves)
H.equip_or_collect(new /obj/item/weapon/gun/energy/advtaser(H), slot_belt)
H.equip_or_collect(new /obj/item/device/flash(H), slot_l_store)
if(H.backbag == 1)
diff --git a/code/game/jobs/job/support.dm b/code/game/jobs/job/support.dm
index 96e5d089b22..e50ff107344 100644
--- a/code/game/jobs/job/support.dm
+++ b/code/game/jobs/job/support.dm
@@ -118,7 +118,6 @@
H.equip_or_collect(new /obj/item/clothing/under/rank/cargo(H), slot_w_uniform)
H.equip_or_collect(new /obj/item/clothing/shoes/brown(H), slot_shoes)
H.equip_or_collect(new /obj/item/device/pda/quartermaster(H), slot_wear_pda)
-// H.equip_or_collect(new /obj/item/clothing/gloves/black(H), slot_gloves)
H.equip_or_collect(new /obj/item/clothing/glasses/sunglasses(H), slot_glasses)
H.equip_or_collect(new /obj/item/weapon/clipboard(H), slot_l_hand)
if(H.backbag == 1)
@@ -147,7 +146,6 @@
H.equip_or_collect(new /obj/item/clothing/under/rank/cargotech(H), slot_w_uniform)
H.equip_or_collect(new /obj/item/clothing/shoes/black(H), slot_shoes)
H.equip_or_collect(new /obj/item/device/pda/cargo(H), slot_wear_pda)
-// H.equip_or_collect(new /obj/item/clothing/gloves/black(H), slot_gloves)
if(H.backbag == 1)
H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
else
@@ -179,7 +177,6 @@
H.equip_or_collect(new /obj/item/device/pda/shaftminer(H), slot_wear_pda)
H.equip_or_collect(new /obj/item/clothing/shoes/black(H), slot_shoes)
H.equip_or_collect(new /obj/item/weapon/pickaxe/drill(H), slot_belt)
-// H.equip_or_collect(new /obj/item/clothing/gloves/black(H), slot_gloves)
if(H.backbag == 1)
H.equip_or_collect(new /obj/item/weapon/storage/box/engineer(H), slot_r_hand)
H.equip_or_collect(new /obj/item/weapon/crowbar(H), slot_l_hand)
diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm
index 8370dd40f3c..34ce5de1ce3 100644
--- a/code/game/machinery/computer/camera.dm
+++ b/code/game/machinery/computer/camera.dm
@@ -36,9 +36,9 @@
networks["Anomaly Isolation"] = list(access_rd,access_hos,access_captain)
networks["Toxins"] = list(access_rd,access_hos,access_captain)
networks["Telepad"] = list(access_rd,access_hos,access_captain)
- networks["ERT"] = list(access_cent_teleporter,access_cent_captain)
- networks["CentCom"] = list(access_cent_captain)
- networks["Thunderdome"] = list(access_cent_captain)
+ networks["ERT"] = list(access_cent_specops_commander,access_cent_commander)
+ networks["CentCom"] = list(access_cent_security,access_cent_commander)
+ networks["Thunderdome"] = list(access_cent_thunder,access_cent_commander)
attack_ai(var/mob/user as mob)
return attack_hand(user)
diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm
index 73931aa0183..c134b649c39 100644
--- a/code/game/machinery/computer/card.dm
+++ b/code/game/machinery/computer/card.dm
@@ -291,4 +291,4 @@
/obj/machinery/computer/card/centcom
name = "CentCom Identification Computer"
circuit = "/obj/item/weapon/circuitboard/card/centcom"
- req_access = list(access_cent_captain)
+ req_access = list(access_cent_commander)
diff --git a/code/game/machinery/computer/syndicate_specops_shuttle.dm b/code/game/machinery/computer/syndicate_specops_shuttle.dm
index 288fa2dfdf6..969f3373729 100644
--- a/code/game/machinery/computer/syndicate_specops_shuttle.dm
+++ b/code/game/machinery/computer/syndicate_specops_shuttle.dm
@@ -14,7 +14,7 @@ var/syndicate_elite_shuttle_timeleft = 0
name = "Elite Syndicate Squad Shuttle Console"
icon = 'icons/obj/computer.dmi'
icon_state = "syndishuttle"
- req_access = list(access_cent_specops)
+ req_access = list(access_syndicate)
var/temp = null
var/hacked = 0
var/allowedtocall = 0
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index a7ce13d419e..3c9a0a2d1a8 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -998,7 +998,7 @@ About the new airlock wires panel:
if(istype(C, /obj/item/device/detective_scanner) || istype(C, /obj/item/taperoll))
return
- if(istype(C, /obj/item/weapon/plastique))
+ if(istype(C, /obj/item/weapon/c4))
user << "The hatch is coated with a product that prevents the shaped charge from sticking!"
return
diff --git a/code/game/machinery/metaldetector.dm b/code/game/machinery/metaldetector.dm
index 95e76eaa2c5..4cdb45507d4 100644
--- a/code/game/machinery/metaldetector.dm
+++ b/code/game/machinery/metaldetector.dm
@@ -67,7 +67,7 @@
knifecount++
for(var/obj/item/weapon/kitchenknife/KK in M)
knifecount++
- for(var/obj/item/weapon/plastique/KK in M)
+ for(var/obj/item/weapon/c4/KK in M)
bombcount++
for(var/obj/item/weapon/melee/ML in M)
meleecount++
diff --git a/code/game/machinery/poolcontroller.dm b/code/game/machinery/poolcontroller.dm
new file mode 100644
index 00000000000..937629589ed
--- /dev/null
+++ b/code/game/machinery/poolcontroller.dm
@@ -0,0 +1,129 @@
+/obj/machinery/poolcontroller
+ name = "Pool Controller"
+ desc = "A controller for the nearby pool."
+ icon = 'icons/obj/airlock_machines.dmi'
+ icon_state = "airlock_control_standby"
+ var/list/linkedturfs = list() //List contains all of the linked pool turfs to this controller, assignment happens on New()
+ var/temperature = "normal" //The temperature of the pool, starts off on normal, which has no effects.
+ var/srange = 5 //The range of the search for pool turfs, change this for bigger or smaller pools.
+ var/linkedmist = list() //Used to keep track of created mist
+ var/misted = 0 //Used to check for mist.
+
+/obj/machinery/poolcontroller/New() //This proc automatically happens on world start
+ for(var/turf/simulated/floor/beach/water/W in range(srange,src)) //Search for /turf/simulated/floor/beach/water in the range of var/srange
+ src.linkedturfs += W //Add found pool turfs to the central list.
+ ..() //Changed to call parent as per MarkvA's recommendation
+
+/obj/machinery/poolcontroller/emag_act(user as mob) //Emag_act, this is called when it is hit with a cryptographic sequencer.
+ if(!emagged) //If it is not already emagged, emag it.
+ user << "\red You disable \the [src]'s temperature safeguards." //Inform the mob of what emagging does.
+ emagged = 1 //Set the emag var to true.
+
+/obj/machinery/poolcontroller/attackby(obj/item/P as obj, mob/user as mob, params) //Proc is called when a user hits the pool controller with something.
+
+ if(istype(P,/obj/item/device/multitool)) //If the mob hits the pool controller with a multitool, reset the emagged status
+ if(emagged) //Check the emag status
+ user << "\red You re-enable \the [src]'s temperature safeguards." //Inform the user that they have just fixed the safeguards.
+ emagged = 0 //Set the emagged var to false.
+ return
+ else
+ user << "\red Nothing happens." //If not emagged, don't do anything, and don't tell the user that it can be emagged.
+
+ return //Return, nothing else needs to be done.
+ else //If it's not a multitool, defer to /obj/machinery/proc/attackby
+ ..()
+
+/obj/machinery/poolcontroller/attack_hand()
+ if(!Adjacent(usr))
+ usr << "You moved away."
+ return
+
+ if(emagged) //Emagging unlocks more (deadly) options.
+ var/temp = input("What temperature would you like to set the pool to?", "Pool Temperature") in list("Scalding","Frigid", "Warm", "Cool", "Normal","Cancel") //Allow user to choose which temperature they want.
+
+ switch(temp) //Used for setting the actual temperature var based on user input.
+ if("Scalding")
+ miston() //Turn on warning mist for the pool
+ temperature = "scalding" //Burn em!
+ usr << "You flick the pool temperature to [temperature](WARNING)." //Differ from standard message to make sure the user understands the temperature is harmful.
+ return //Return to avoid calling the un-unique message.
+ if("Frigid")
+ temperature = "frigid"
+ usr << "You flick the pool temperature to [temperature](WARNING)." //Differ from standard message to make sure the user understands the temperature is harmful.
+ mistoff() //this won't get called otherwise
+ return //Return to avoid calling the un-unique message.
+
+ //Regular non-traitorous temperature choices still avalible.
+ if("Warm")
+ temperature = "warm"
+ if("Cool")
+ temperature = "cool"
+ if("Normal")
+ temperature = "normal"
+ if("Cancel")
+ return
+
+ mistoff() //Remove all mist, setting it to scalding returns before now, only regular temperatures will call it
+ usr << "You flick the pool temperature to [temperature]." //Inform the mob of the temperature they just picked.
+ return
+
+ else
+ var/temp = input("What temperature would you like to set the pool to?", "Pool Temperature") in list("Warm","Cool","Normal","Cancel") //Allow user to choose which temperature they want.
+
+ switch(temp) //Used for setting the actual temperature var based on user input.
+ if("Warm")
+ temperature = "warm"
+ if("Cool")
+ temperature = "cool"
+ if("Normal")
+ temperature = "normal"
+ if("Cancel") //Cancel does nothing and leaves the temperature at it's previous state.
+ return
+
+ mistoff() //Remove all mist, because it shouldn't be here if the pool is not set to scalding
+ usr << "You flick the pool temperature to [temperature]." //Display what the user picked.
+ return
+
+/obj/machinery/poolcontroller/process()
+ updateMobs() //Call the mob affecting proc
+
+/obj/machinery/poolcontroller/proc/updateMobs()
+ for(var/turf/simulated/floor/beach/water/W in linkedturfs) //Check for pool-turfs linked to the controller.
+ for(var/mob/M in W) //Check for mobs in the linked pool-turfs.
+ switch(temperature) //Apply different effects based on what the temperature is set to.
+ if("scalding") //Burn the mob.
+ M.bodytemperature = min(500, M.bodytemperature + 35) //heat mob at 35k(elvin) per cycle
+ M << "The water is searing hot!"
+ return
+
+ if("frigid") //Freeze the mob.
+ M.bodytemperature = max(80, M.bodytemperature - 35) //cool mob at -35k per cycle
+ M << "The water is freezing!"
+ return
+
+ if("normal") //Normal temp does nothing, because it's just room temperature water.
+ return
+
+ if("warm") //Gently warm the mob.
+ M.bodytemperature = min(330, M.bodytemperature + 10) //Heats up mobs to just over normal, not enough to burn
+ M << "The water is quite warm." //Inform the mob it's warm water.
+ return
+
+ if("cool") //Gently cool the mob.
+ M.bodytemperature = max(290, M.bodytemperature - 10) //Cools mobs to just below normal, not enough to burn
+ M << "The water is chilly." //Inform the mob it's chilly water.
+ return
+
+/obj/machinery/poolcontroller/proc/miston() //Spawn /obj/effect/mist (from the shower) on all linked pool tiles
+ for(var/turf/simulated/floor/beach/water/W in linkedturfs)
+ var/M = new /obj/effect/mist(W)
+ if(misted)
+ return
+ linkedmist += M
+
+ misted = 1 //var just to keep track of when the mist on proc has been called.
+
+/obj/machinery/poolcontroller/proc/mistoff() //Delete all /obj/effect/mist from all linked pool tiles.
+ for(var/obj/effect/mist/M in linkedmist)
+ del(M)
+ misted = 0 //no mist left, turn off the tracking var
\ No newline at end of file
diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm
index 66c26a8b654..7eaa6315995 100644
--- a/code/game/machinery/suit_storage_unit.dm
+++ b/code/game/machinery/suit_storage_unit.dm
@@ -207,7 +207,7 @@
/*if(istype(H)) //Let's check if the guy's wearing electrically insulated gloves
if(H.gloves)
var/obj/item/clothing/gloves/G = H.gloves
- if(istype(G,/obj/item/clothing/gloves/yellow))
+ if(istype(G,/obj/item/clothing/gloves/color/yellow))
protected = 1
if(!protected)
@@ -233,7 +233,7 @@
/*if(istype(H)) //Let's check if the guy's wearing electrically insulated gloves
if(H.gloves)
var/obj/item/clothing/gloves/G = H.gloves
- if(istype(G,/obj/item/clothing/gloves/yellow) )
+ if(istype(G,/obj/item/clothing/gloves/color/yellow) )
protected = 1
if(!protected)
@@ -730,7 +730,7 @@
return
..()
-
+
/obj/machinery/suit_cycler/emag_act(user as mob)
if(emagged)
user << "\red The cycler has already been subverted."
diff --git a/code/game/machinery/transformer.dm b/code/game/machinery/transformer.dm
index 5e197383acc..f754155d7c7 100644
--- a/code/game/machinery/transformer.dm
+++ b/code/game/machinery/transformer.dm
@@ -246,7 +246,7 @@
badcount++
for(var/obj/item/weapon/kitchenknife/KK in src.loc)
badcount++
- for(var/obj/item/weapon/plastique/KK in src.loc)
+ for(var/obj/item/weapon/c4/KK in src.loc)
badcount++
for(var/obj/item/weapon/melee/ML in src.loc)
badcount++
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index 5ce8365adf4..786caf13331 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -1084,8 +1084,8 @@
//req_access_txt = "12" //Maintenance access
products = list(/obj/item/stack/cable_coil/random = 10,/obj/item/weapon/crowbar = 5,/obj/item/weapon/weldingtool = 3,/obj/item/weapon/wirecutters = 5,
/obj/item/weapon/wrench = 5,/obj/item/device/analyzer = 5,/obj/item/device/t_scanner = 5,/obj/item/weapon/screwdriver = 5)
- contraband = list(/obj/item/weapon/weldingtool/hugetank = 2,/obj/item/clothing/gloves/fyellow = 2)
- premium = list(/obj/item/clothing/gloves/yellow = 1)
+ contraband = list(/obj/item/weapon/weldingtool/hugetank = 2,/obj/item/clothing/gloves/color/fyellow = 2)
+ premium = list(/obj/item/clothing/gloves/color/yellow = 1)
/obj/machinery/vending/engivend
name = "Engi-Vend"
@@ -1105,7 +1105,7 @@
icon_deny = "engi-deny"
req_access_txt = "11"
products = list(/obj/item/clothing/under/rank/chief_engineer = 4,/obj/item/clothing/under/rank/engineer = 4,/obj/item/clothing/shoes/orange = 4,/obj/item/clothing/head/hardhat = 4,
- /obj/item/weapon/storage/belt/utility = 4,/obj/item/clothing/glasses/meson = 4,/obj/item/clothing/gloves/yellow = 4, /obj/item/weapon/screwdriver = 12,
+ /obj/item/weapon/storage/belt/utility = 4,/obj/item/clothing/glasses/meson = 4,/obj/item/clothing/gloves/color/yellow = 4, /obj/item/weapon/screwdriver = 12,
/obj/item/weapon/crowbar = 12,/obj/item/weapon/wirecutters = 12,/obj/item/device/multitool = 12,/obj/item/weapon/wrench = 12,/obj/item/device/t_scanner = 12,
/obj/item/stack/cable_coil/heavyduty = 8, /obj/item/weapon/stock_parts/cell = 8, /obj/item/weapon/weldingtool = 8,/obj/item/clothing/head/welding = 8,
/obj/item/weapon/light/tube = 10,/obj/item/clothing/suit/fire = 4, /obj/item/weapon/stock_parts/scanning_module = 5,/obj/item/weapon/stock_parts/micro_laser = 5,
@@ -1219,7 +1219,7 @@
/obj/item/clothing/under/sundress=2,/obj/item/clothing/under/stripeddress = 1, /obj/item/clothing/under/sailordress = 1, /obj/item/clothing/under/redeveninggown = 1, /obj/item/clothing/under/blacktango=1,/obj/item/clothing/suit/jacket=3,
/obj/item/clothing/glasses/regular=2,/obj/item/clothing/head/sombrero=1,/obj/item/clothing/suit/poncho=1,
/obj/item/clothing/suit/ianshirt=1,/obj/item/clothing/shoes/laceup=2,/obj/item/clothing/shoes/black=4,
- /obj/item/clothing/shoes/sandal=1,
+ /obj/item/clothing/shoes/sandal=1, /obj/item/clothing/gloves/fingerless=2,
/obj/item/weapon/storage/belt/fannypack=1, /obj/item/weapon/storage/belt/fannypack/blue=1, /obj/item/weapon/storage/belt/fannypack/red=1)
contraband = list(/obj/item/clothing/under/syndicate/tacticool=1,/obj/item/clothing/mask/balaclava=1,/obj/item/clothing/head/ushanka=1,/obj/item/clothing/under/soviet=1,/obj/item/weapon/storage/belt/fannypack/black=1)
premium = list(/obj/item/clothing/under/suit_jacket/checkered=1,/obj/item/clothing/head/mailman=1,/obj/item/clothing/under/rank/mailman=1,/obj/item/clothing/suit/jacket/leather=1,/obj/item/clothing/under/pants/mustangjeans=1)
@@ -1233,4 +1233,19 @@
component_parts += V
component_parts += new /obj/item/weapon/vending_refill/clothing(0)
component_parts += new /obj/item/weapon/vending_refill/clothing(0)
- component_parts += new /obj/item/weapon/vending_refill/clothing(0)
\ No newline at end of file
+ component_parts += new /obj/item/weapon/vending_refill/clothing(0)
+
+/obj/machinery/vending/artvend
+ name = "ArtVend"
+ desc = "A vending machine for art supplies."
+ product_slogans = "Stop by for all your artistic needs!;Color the floors with crayons, not blood!;Don't be a starving artist, use ArtVend. ;Don't fart, do art!"
+ product_ads = "Just like Kindergarten!;Now with 1000% more vibrant colors!;Screwing with the janitor was never so easy!;Creativity is at the heart of every spessman."
+ vend_delay = 34
+ icon_state = "artvend"
+ products = list(/obj/item/stack/cable_coil/random = 10,/obj/item/device/camera = 4,/obj/item/device/camera_film = 6,
+ /obj/item/weapon/storage/photo_album = 2,/obj/item/stack/wrapping_paper = 4,/obj/item/stack/packageWrap = 4,
+ /obj/item/weapon/storage/fancy/crayons = 4,/obj/item/weapon/hand_labeler = 4,/obj/item/weapon/paper = 10,
+ /obj/item/weapon/c_tube = 10,/obj/item/weapon/pen = 5,/obj/item/weapon/pen/blue = 5,
+ /obj/item/weapon/pen/red = 5)
+ contraband = list(/obj/item/toy/crayon/mime = 1,/obj/item/toy/crayon/rainbow = 1)
+ premium = list(/obj/item/weapon/contraband/poster = 5)
diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm
index 19108eec93d..361ecedb4e1 100644
--- a/code/game/machinery/washing_machine.dm
+++ b/code/game/machinery/washing_machine.dm
@@ -1,5 +1,6 @@
/obj/machinery/washing_machine
name = "Washing Machine"
+ desc = "Gets rid of those pesky bloodstains, or your money back!"
icon = 'icons/obj/machines/washing_machine.dmi'
icon_state = "wm_10"
density = 1
@@ -87,8 +88,8 @@
//world << "DEBUG: YUP! [new_icon_state] and [new_item_state]"
break
del(J)
- for(var/T in typesof(/obj/item/clothing/gloves))
- var/obj/item/clothing/gloves/G = new T
+ for(var/T in typesof(/obj/item/clothing/gloves/color))
+ var/obj/item/clothing/gloves/color/G = new T
//world << "DEBUG: [color] == [J.color]"
if(_color == G._color)
new_glove_icon_state = G.icon_state
@@ -137,13 +138,13 @@
J.name = new_jumpsuit_name
J.desc = new_desc
if(new_glove_icon_state && new_glove_item_state && new_glove_name)
- for(var/obj/item/clothing/gloves/G in contents)
+ for(var/obj/item/clothing/gloves/color/G in contents)
//world << "DEBUG: YUP! FOUND IT!"
G.item_state = new_glove_item_state
G.icon_state = new_glove_icon_state
G._color = _color
G.name = new_glove_name
- if(!istype(G, /obj/item/clothing/gloves/black/thief))
+ if(!istype(G, /obj/item/clothing/gloves/color/black/thief))
G.desc = new_desc
if(new_shoe_icon_state && new_shoe_name)
for(var/obj/item/clothing/shoes/S in contents)
@@ -265,7 +266,10 @@
return
if ( istype(W,/obj/item/clothing/gloves/furgloves ) )
user << "This item does not fit."
- return
+ return
+ if(W.flags & NODROP) //if "can't drop" item
+ user << "\The [W] is stuck to your hand, you cannot put it in the washing machine!"
+ return
if(contents.len < 5)
if ( state in list(1, 3) )
diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm
index b5951d306c2..8ae16a4e054 100644
--- a/code/game/mecha/combat/marauder.dm
+++ b/code/game/mecha/combat/marauder.dm
@@ -27,7 +27,7 @@
name = "Seraph"
icon_state = "seraph"
initial_icon = "seraph"
- operation_req_access = list(access_cent_creed)
+ operation_req_access = list(access_cent_commander)
step_in = 3
health = 550
wreckage = /obj/effect/decal/mecha_wreckage/seraph
diff --git a/code/game/objects/closets/ert.dm b/code/game/objects/closets/ert.dm
index 27b8456bb6b..04845c338fa 100644
--- a/code/game/objects/closets/ert.dm
+++ b/code/game/objects/closets/ert.dm
@@ -13,7 +13,7 @@
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/c4(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)
@@ -37,7 +37,7 @@
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/c4(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)
diff --git a/code/game/objects/effects/decals/crayon.dm b/code/game/objects/effects/decals/crayon.dm
index 226fcdcf456..db1952f145e 100644
--- a/code/game/objects/effects/decals/crayon.dm
+++ b/code/game/objects/effects/decals/crayon.dm
@@ -1,36 +1,23 @@
/obj/effect/decal/cleanable/crayon
name = "rune"
desc = "A rune drawn in crayon."
- icon = 'icons/obj/rune.dmi'
+ icon = 'icons/effects/crayondecal.dmi'
+ icon_state = "rune1"
layer = 2.1
anchored = 1
- examine()
- set src in view(2)
- ..()
- return
+/obj/effect/decal/cleanable/crayon/examine()
+ set src in view(2)
+ ..()
+ return
- New(location,main = "#FFFFFF",shade = "#000000",var/type = "rune")
- ..()
- loc = location
+/obj/effect/decal/cleanable/crayon/New(location, main = "#FFFFFF", var/type = "rune1", var/e_name = "rune")
+ ..()
+ loc = location
- name = type
- desc = "A [type] drawn in crayon."
+ name = e_name
+ desc = "A [name] drawn in crayon."
- switch(type)
- if("rune")
- type = "rune[rand(1,6)]"
- if("graffiti")
- type = pick("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa")
-
- var/icon/mainOverlay = new/icon('icons/effects/crayondecal.dmi',"[type]",2.1)
- var/icon/shadeOverlay = new/icon('icons/effects/crayondecal.dmi',"[type]s",2.1)
-
- mainOverlay.Blend(main,ICON_ADD)
- shadeOverlay.Blend(shade,ICON_ADD)
-
- overlays += mainOverlay
- overlays += shadeOverlay
-
- add_hiddenprint(usr)
\ No newline at end of file
+ icon_state = type
+ color = main
\ No newline at end of file
diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm
index ad757325b95..fe8fe4138bd 100644
--- a/code/game/objects/items/crayons.dm
+++ b/code/game/objects/items/crayons.dm
@@ -1,100 +1,84 @@
/obj/item/toy/crayon/red
icon_state = "crayonred"
colour = "#DA0000"
- shadeColour = "#810C0C"
colourName = "red"
/obj/item/toy/crayon/orange
icon_state = "crayonorange"
colour = "#FF9300"
- shadeColour = "#A55403"
colourName = "orange"
/obj/item/toy/crayon/yellow
icon_state = "crayonyellow"
colour = "#FFF200"
- shadeColour = "#886422"
colourName = "yellow"
/obj/item/toy/crayon/green
icon_state = "crayongreen"
colour = "#A8E61D"
- shadeColour = "#61840F"
colourName = "green"
/obj/item/toy/crayon/blue
icon_state = "crayonblue"
colour = "#00B7EF"
- shadeColour = "#0082A8"
colourName = "blue"
/obj/item/toy/crayon/purple
icon_state = "crayonpurple"
colour = "#DA00FF"
- shadeColour = "#810CFF"
colourName = "purple"
+/obj/item/toy/crayon/white
+ icon_state = "crayonwhite"
+ colour = "#FFFFFF"
+ colourName = "white"
+
/obj/item/toy/crayon/mime
icon_state = "crayonmime"
desc = "A very sad-looking crayon."
colour = "#FFFFFF"
- shadeColour = "#000000"
colourName = "mime"
uses = 0
-/obj/item/toy/crayon/mime/attack_self(mob/living/user as mob) //inversion
- if(colour != "#FFFFFF" && shadeColour != "#000000")
- colour = "#FFFFFF"
- shadeColour = "#000000"
- user << "You will now draw in white and black with this crayon."
+/obj/item/toy/crayon/mime/attack_self(mob/living/user as mob)
+ update_window(user)
+
+/obj/item/toy/crayon/mime/update_window(mob/living/user as mob)
+ dat += "
Change color"
+ ..()
+
+/obj/item/toy/crayon/mime/Topic(href,href_list)
+ if ((usr.restrained() || usr.stat || usr.get_active_hand() != src))
+ return
+ if(href_list["color"])
+ if(colour != "#FFFFFF")
+ colour = "#FFFFFF"
+ else
+ colour = "#000000"
+ update_window(usr)
else
- colour = "#000000"
- shadeColour = "#FFFFFF"
- user << "You will now draw in black and white with this crayon."
- return
+ ..()
/obj/item/toy/crayon/rainbow
icon_state = "crayonrainbow"
colour = "#FFF000"
- shadeColour = "#000FFF"
colourName = "rainbow"
uses = 0
/obj/item/toy/crayon/rainbow/attack_self(mob/living/user as mob)
- colour = input(user, "Please select the main colour.", "Crayon colour") as color
- shadeColour = input(user, "Please select the shade colour.", "Crayon colour") as color
- return
+ update_window(user)
-/obj/item/toy/crayon/afterattack(atom/target, mob/user as mob, proximity)
- if(!proximity) return
- if(istype(target,/turf/simulated/floor))
- var/drawtype = input("Choose what you'd like to draw.", "Crayon scribbles") in list("graffiti","rune","letter")
- switch(drawtype)
- if("letter")
- drawtype = input("Choose the letter.", "Crayon scribbles") in list("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z")
- user << "You start drawing a letter on the [target.name]."
- if("graffiti")
- user << "You start drawing graffiti on the [target.name]."
- if("rune")
- user << "You start drawing a rune on the [target.name]."
- if(instant || do_after(user, 50))
- new /obj/effect/decal/cleanable/crayon(target,colour,shadeColour,drawtype)
- user << "You finish drawing."
- if(uses)
- uses--
- if(!uses)
- user << "\red You used up your crayon!"
- del(src)
- return
+/obj/item/toy/crayon/rainbow/update_window(mob/living/user as mob)
+ dat += " Change color"
+ ..()
-/obj/item/toy/crayon/attack(mob/M as mob, mob/user as mob)
- if(M == user)
- user << "You take a bite of the crayon. Delicious!"
- user.nutrition += 5
- if(uses)
- uses -= 5
- if(uses <= 0)
- user << "\red You ate your crayon!"
- del(src)
+/obj/item/toy/crayon/rainbow/Topic(href,href_list[])
+
+ if(href_list["color"])
+ var/temp = input(usr, "Please select colour.", "Crayon colour") as color
+ if ((usr.restrained() || usr.stat || usr.get_active_hand() != src))
+ return
+ colour = temp
+ update_window(usr)
else
..()
\ No newline at end of file
diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm
index b5d14aa8982..2c2c5d9ea07 100644
--- a/code/game/objects/items/devices/paicard.dm
+++ b/code/game/objects/items/devices/paicard.dm
@@ -286,6 +286,8 @@
src.overlays.Cut()
src.overlays += "pai-off"
+/obj/item/device/paicard
+ var/current_emotion = 1
/obj/item/device/paicard/proc/setEmotion(var/emotion)
if(pai)
src.overlays.Cut()
@@ -299,6 +301,7 @@
if(7) src.overlays += "pai-sad"
if(8) src.overlays += "pai-angry"
if(9) src.overlays += "pai-what"
+ current_emotion = emotion
/obj/item/device/paicard/proc/alertUpdate()
var/turf/T = get_turf_or_move(src.loc)
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index dda1a4942c0..e5cd25994f5 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -438,20 +438,104 @@
desc = "A colourful crayon. Looks tasty. Mmmm..."
icon = 'icons/obj/crayons.dmi'
icon_state = "crayonred"
- slot_flags = SLOT_EARS
w_class = 1.0
attack_verb = list("attacked", "coloured")
var/colour = "#FF0000" //RGB
- var/shadeColour = "#220000" //RGB
+ var/drawtype = "rune"
+ var/list/graffiti = list("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa","body","cyka")
+ var/list/letters = list("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z")
var/uses = 30 //0 for unlimited uses
var/instant = 0
var/colourName = "red" //for updateIcon purposes
+ var/dat
- suicide_act(mob/user)
- viewers(user) << "[user] is jamming the [src.name] up \his nose and into \his brain. It looks like \he's trying to commit suicide."
- return (BRUTELOSS|OXYLOSS)
+/obj/item/toy/crayon/suicide_act(mob/user)
+ user.visible_message("[user] is jamming the [src.name] up \his nose and into \his brain. It looks like \he's trying to commit suicide.")
+ return (BRUTELOSS|OXYLOSS)
+/obj/item/toy/crayon/New()
+ ..()
+ name = "[colourName] crayon" //Makes crayons identifiable in things like grinders
+ drawtype = pick(pick(graffiti), pick(letters), "rune[rand(1,6)]")
+/obj/item/toy/crayon/attack_self(mob/living/user as mob)
+ update_window(user)
+
+/obj/item/toy/crayon/proc/update_window(mob/living/user as mob)
+ dat += "Currently selected: [drawtype]
"
+ dat += "Random letterPick letter"
+ dat += "
"
+ dat += "Runes:
"
+ dat += "Random rune"
+ for(var/i = 1; i <= 6; i++)
+ dat += "Rune[i]"
+ if(!((i + 1) % 3)) //3 buttons in a row
+ dat += "
"
+ dat += "
"
+ graffiti.Find()
+ dat += "Graffiti:
"
+ dat += "Random graffiti"
+ var/c = 1
+ for(var/T in graffiti)
+ dat += "[T]"
+ if(!((c + 1) % 3)) //3 buttons in a row
+ dat += "
"
+ c++
+ dat += "
"
+ var/datum/browser/popup = new(user, "crayon", name, 300, 500)
+ popup.set_content(dat)
+ popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
+ popup.open()
+ dat = ""
+
+/obj/item/toy/crayon/Topic(href, href_list, hsrc)
+ var/temp = "a"
+ switch(href_list["type"])
+ if("random_letter")
+ temp = pick(letters)
+ if("letter")
+ temp = input("Choose the letter.", "Crayon scribbles") in letters
+ if("random_rune")
+ temp = "rune[rand(1,6)]"
+ if("random_graffiti")
+ temp = pick(graffiti)
+ else
+ temp = href_list["type"]
+ if ((usr.restrained() || usr.stat || usr.get_active_hand() != src))
+ return
+ drawtype = temp
+ update_window(usr)
+
+/obj/item/toy/crayon/afterattack(atom/target, mob/user as mob, proximity)
+ if(!proximity) return
+ if(istype(target,/turf/simulated/floor))
+ var/temp = "rune"
+ if(letters.Find(drawtype))
+ temp = "letter"
+ else if(graffiti.Find(drawtype))
+ temp = "graffiti"
+ user << "You start drawing a [temp] on the [target.name]."
+ if(instant || do_after(user, 50))
+ new /obj/effect/decal/cleanable/crayon(target,colour,drawtype,temp)
+ user << "You finish drawing [temp]."
+ if(uses)
+ uses--
+ if(!uses)
+ user << "You used up your crayon!"
+ qdel(src)
+ return
+
+/obj/item/toy/crayon/attack(mob/M as mob, mob/user as mob)
+ if(M == user)
+ user << "You take a bite of the crayon. Delicious!"
+ user.nutrition += 5
+ if(uses)
+ uses -= 5
+ if(uses <= 0)
+ user << "You ate your crayon!"
+ qdel(src)
+ else
+ ..()
/*
diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm
index 0d6d6c97311..1965473e717 100644
--- a/code/game/objects/items/weapons/explosives.dm
+++ b/code/game/objects/items/weapons/explosives.dm
@@ -1,4 +1,4 @@
-/obj/item/weapon/plastique
+/obj/item/weapon/c4
name = "plastic explosives"
desc = "Used to put holes in specific areas without too much extra hole."
gender = PLURAL
@@ -13,11 +13,11 @@
var/atom/target = null
var/open_panel = 0
-/obj/item/weapon/plastique/New()
+/obj/item/weapon/c4/New()
wires = new(src)
..()
-/obj/item/weapon/plastique/suicide_act(var/mob/user)
+/obj/item/weapon/c4/suicide_act(var/mob/user)
. = (BRUTELOSS)
viewers(user) << "[user] activates the C4 and holds it above his head! It looks like \he's going out with a bang!"
var/message_say = "FOR NO RAISIN!"
@@ -44,7 +44,7 @@
explode(get_turf(user))
return .
-/obj/item/weapon/plastique/attackby(var/obj/item/I, var/mob/user, params)
+/obj/item/weapon/c4/attackby(var/obj/item/I, var/mob/user, params)
if(istype(I, /obj/item/weapon/screwdriver))
open_panel = !open_panel
user << "You [open_panel ? "open" : "close"] the wire panel."
@@ -53,7 +53,7 @@
else
..()
-/obj/item/weapon/plastique/attack_self(mob/user as mob)
+/obj/item/weapon/c4/attack_self(mob/user as mob)
var/newtime = input(usr, "Please set the timer.", "Timer", 10) as num
if(newtime < 10)
newtime = 10
@@ -63,7 +63,7 @@
user << "Timer set for [timer] seconds."
-/obj/item/weapon/plastique/afterattack(atom/target as obj|turf, mob/user as mob, flag)
+/obj/item/weapon/c4/afterattack(atom/target as obj|turf, mob/user as mob, flag)
if (!flag)
return
if (ismob(target) || istype(target, /turf/unsimulated) || istype(target, /turf/simulated/shuttle) || istype(target, /obj/item/weapon/storage) || istype(target, /obj/item/clothing/accessory/storage) || istype(target, /obj/item/clothing/under))
@@ -90,7 +90,7 @@
spawn(timer*10)
explode(get_turf(target))
-/obj/item/weapon/plastique/proc/explode(var/location)
+/obj/item/weapon/c4/proc/explode(var/location)
if(!target)
target = get_atom_on_turf(src)
@@ -110,5 +110,5 @@
del(target)
del(src)
-/obj/item/weapon/plastique/attack(mob/M as mob, mob/user as mob, def_zone)
+/obj/item/weapon/c4/attack(mob/M as mob, mob/user as mob, def_zone)
return
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/power_cells.dm b/code/game/objects/items/weapons/power_cells.dm
index 7424f685ef8..1756935eacb 100644
--- a/code/game/objects/items/weapons/power_cells.dm
+++ b/code/game/objects/items/weapons/power_cells.dm
@@ -128,6 +128,13 @@
name = "pulse pistol power cell"
maxcharge = 1600
+/obj/item/weapon/stock_parts/cell/ninja
+ name = "spider-clan power cell"
+ desc = "A standard ninja-suit power cell."
+ maxcharge = 10000
+ rating = 3
+ g_amt = 60
+
/obj/item/weapon/stock_parts/cell/emproof
name = "\improper EMP-proof cell"
desc = "An EMP-proof cell."
diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm
index 45bb865df0f..c81ff7d8dbc 100644
--- a/code/game/objects/items/weapons/storage/backpack.dm
+++ b/code/game/objects/items/weapons/storage/backpack.dm
@@ -299,4 +299,40 @@
name = "smiles von wiggleton"
desc = "A duffelbag designed to hold bananas and bike horns."
icon_state = "duffel-clown"
- item_state = "duffel-clown"
\ No newline at end of file
+ item_state = "duffel-clown"
+
+//ERT backpacks.
+/obj/item/weapon/storage/backpack/ert
+ name = "emergency response team backpack"
+ desc = "A spacious backpack with lots of pockets, used by members of the Nanotrasen Emergency Response Team."
+ icon_state = "ert_commander"
+ item_state = "backpack"
+
+//Commander
+/obj/item/weapon/storage/backpack/ert/commander
+ name = "emergency response team commander backpack"
+ desc = "A spacious backpack with lots of pockets, worn by the commander of a Nanotrasen Emergency Response Team."
+
+//Security
+/obj/item/weapon/storage/backpack/ert/security
+ name = "emergency response team security backpack"
+ desc = "A spacious backpack with lots of pockets, worn by security members of a Nanotrasen Emergency Response Team."
+ icon_state = "ert_security"
+
+//Engineering
+/obj/item/weapon/storage/backpack/ert/engineer
+ name = "emergency response team engineer backpack"
+ desc = "A spacious backpack with lots of pockets, worn by engineering members of a Nanotrasen Emergency Response Team."
+ icon_state = "ert_engineering"
+
+//Medical
+/obj/item/weapon/storage/backpack/ert/medical
+ name = "emergency response team medical backpack"
+ desc = "A spacious backpack with lots of pockets, worn by medical members of a Nanotrasen Emergency Response Team."
+ icon_state = "ert_medical"
+
+//Janitorial
+/obj/item/weapon/storage/backpack/ert/janitor
+ name = "emergency response team janitor backpack"
+ desc = "A spacious backpack with lots of pockets, worn by janitorial members of a Nanotrasen Emergency Response Team."
+ icon_state = "ert_janitor"
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm
index b162ac95f0f..b1286930c42 100644
--- a/code/game/objects/items/weapons/storage/belt.dm
+++ b/code/game/objects/items/weapons/storage/belt.dm
@@ -135,10 +135,10 @@
..()
contents.Cut()
new /obj/item/weapon/kitchenknife/combat(src)
- new /obj/item/weapon/grenade/flashbang(src)
- new /obj/item/weapon/grenade/flashbang(src)
+ new /obj/item/weapon/melee/baton/loaded(src)
+ new /obj/item/device/flash(src)
new /obj/item/weapon/melee/telebaton(src)
- new /obj/item/weapon/restraints/handcuffs(src)
+ new /obj/item/weapon/grenade/flashbang(src)
/obj/item/weapon/storage/belt/soulstone
name = "soul stone belt"
diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm
index cb04eeaccd3..d905730dbf8 100644
--- a/code/game/objects/items/weapons/storage/toolbox.dm
+++ b/code/game/objects/items/weapons/storage/toolbox.dm
@@ -64,7 +64,7 @@
new /obj/item/stack/cable_coil(src,30,color)
new /obj/item/stack/cable_coil(src,30,color)
if(prob(5))
- new /obj/item/clothing/gloves/yellow(src)
+ new /obj/item/clothing/gloves/color/yellow(src)
else
new /obj/item/stack/cable_coil(src,30,color)
diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm
index 710251b34d7..907a836e159 100644
--- a/code/game/objects/items/weapons/storage/uplink_kits.dm
+++ b/code/game/objects/items/weapons/storage/uplink_kits.dm
@@ -37,7 +37,10 @@
new /obj/item/weapon/gun/projectile/revolver(src)
new /obj/item/ammo_box/a357(src)
new /obj/item/weapon/card/emag(src)
- new /obj/item/weapon/plastique(src)
+ new /obj/item/weapon/c4(src)
+ new /obj/item/clothing/gloves/color/latex/nitrile(src)
+ new /obj/item/clothing/mask/gas/clown_hat(src)
+ new /obj/item/clothing/under/suit_jacket/really_black(src)
return
if("murder")
diff --git a/code/game/objects/items/weapons/tanks/tank_types.dm b/code/game/objects/items/weapons/tanks/tank_types.dm
index 7c39f530ace..1533b5d2c51 100644
--- a/code/game/objects/items/weapons/tanks/tank_types.dm
+++ b/code/game/objects/items/weapons/tanks/tank_types.dm
@@ -125,6 +125,7 @@
/obj/item/weapon/tank/plasma/plasmaman
desc = "The lifeblood of plasmamen. Warning: Extremely flammable, do not inhale (unless you're a plasman)."
icon_state = "plasma_fr"
+ distribute_pressure = ONE_ATMOSPHERE*O2STANDARD
/obj/item/weapon/tank/plasma/plasmaman/examine()
set src in usr
diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm
index 9b12b3dcc46..b5fb68105c2 100644
--- a/code/game/objects/random/random.dm
+++ b/code/game/objects/random/random.dm
@@ -97,7 +97,7 @@
prob(1);/obj/item/stack/packageWrap,\
prob(2);/obj/random/bomb_supply,\
prob(1);/obj/item/weapon/extinguisher,\
- prob(1);/obj/item/clothing/gloves/fyellow,\
+ prob(1);/obj/item/clothing/gloves/color/fyellow,\
prob(3);/obj/item/stack/cable_coil,\
prob(2);/obj/random/toolbox,\
prob(2);/obj/item/weapon/storage/belt/utility,\
diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm
index 4a9669a9955..a72ae3d7e60 100644
--- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm
+++ b/code/game/objects/structures/crates_lockers/closets/gimmick.dm
@@ -61,8 +61,8 @@
sleep(2)
new /obj/item/clothing/glasses/eyepatch(src)
new /obj/item/clothing/glasses/sunglasses(src)
- new /obj/item/clothing/gloves/swat(src)
- new /obj/item/clothing/gloves/swat(src)
+ new /obj/item/clothing/gloves/combat(src)
+ new /obj/item/clothing/gloves/combat(src)
new /obj/item/clothing/head/helmet/swat(src)
new /obj/item/clothing/head/helmet/swat(src)
new /obj/item/clothing/mask/gas(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
index 42e82b8af22..a641af29874 100644
--- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
@@ -83,7 +83,7 @@
new /obj/item/weapon/storage/bag/trash(src)
new /obj/item/device/lightreplacer(src)
new /obj/item/weapon/holosign_creator(src)
- new /obj/item/clothing/gloves/black(src)
+ new /obj/item/clothing/gloves/color/black(src)
new /obj/item/clothing/head/soft/purple(src)
new /obj/item/weapon/watertank/janitor(src)
new /obj/item/weapon/storage/belt/janitor(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
index 14fd16914cc..78e90703b9e 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
@@ -14,7 +14,7 @@
new /obj/item/clothing/under/rank/cargotech(src)
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/clothing/gloves/fingerless(src)
new /obj/item/clothing/head/soft(src)
// new /obj/item/weapon/cartridge/quartermaster(src)
return
@@ -35,7 +35,7 @@
new /obj/item/clothing/under/rank/cargo(src)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/device/radio/headset/headset_cargo(src)
- new /obj/item/clothing/gloves/black(src)
+ new /obj/item/clothing/gloves/fingerless(src)
// new /obj/item/weapon/cartridge/quartermaster(src)
new /obj/item/clothing/suit/fire/firefighter(src)
new /obj/item/weapon/tank/emergency_oxygen(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
index 1fbd663ef9e..a5a082b0364 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
@@ -21,7 +21,7 @@
new /obj/item/clothing/under/rank/chief_engineer(src)
new /obj/item/clothing/head/hardhat/white(src)
new /obj/item/clothing/glasses/welding/superior(src)
- new /obj/item/clothing/gloves/yellow(src)
+ new /obj/item/clothing/gloves/color/yellow(src)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/weapon/cartridge/ce(src)
new /obj/item/device/radio/headset/heads/ce(src)
@@ -49,8 +49,8 @@
New()
..()
sleep(2)
- new /obj/item/clothing/gloves/yellow(src)
- new /obj/item/clothing/gloves/yellow(src)
+ new /obj/item/clothing/gloves/color/yellow(src)
+ new /obj/item/clothing/gloves/color/yellow(src)
new /obj/item/weapon/storage/toolbox/electrical(src)
new /obj/item/weapon/storage/toolbox/electrical(src)
new /obj/item/weapon/storage/toolbox/electrical(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
index ae57669c261..79a84cd2c1f 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
@@ -328,7 +328,7 @@
new /obj/item/clothing/suit/storage/det_suit(src)
new /obj/item/clothing/suit/storage/forensics/blue(src)
new /obj/item/clothing/suit/storage/forensics/red(src)
- new /obj/item/clothing/gloves/black(src)
+ new /obj/item/clothing/gloves/color/black(src)
new /obj/item/clothing/head/det_hat(src)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/weapon/storage/box/evidence(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
index 4b4bd46a5ac..65581b09232 100644
--- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
@@ -135,7 +135,7 @@
if(prob(20))
new /obj/item/device/multitool(src)
if(prob(5))
- new /obj/item/clothing/gloves/yellow(src)
+ new /obj/item/clothing/gloves/color/yellow(src)
if(prob(40))
new /obj/item/clothing/head/hardhat(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
index 90cee7c97a8..fcead78a565 100644
--- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
+++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
@@ -296,8 +296,8 @@
new /obj/item/clothing/suit/storage/labcoat(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
- new /obj/item/clothing/gloves/black(src)
- new /obj/item/clothing/gloves/black(src)
+ new /obj/item/clothing/gloves/fingerless(src)
+ new /obj/item/clothing/gloves/fingerless(src)
new /obj/item/clothing/head/soft/black(src)
new /obj/item/clothing/head/soft/black(src)
return
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index 61dbe8e5e5c..38a08c66b45 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -416,6 +416,7 @@
for(var/mob/O in viewers(user, 4))
O.show_message("\blue The [src] was sliced apart by [user]!", 1, "\red You hear [src] coming apart.", 2)
destroy()
+ return
if(!(W.flags & ABSTRACT))
if(user.drop_item())
@@ -427,7 +428,7 @@
//Clamp it so that the icon never moves more than 16 pixels in either direction (thus leaving the table turf)
W.pixel_x = Clamp(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2)
W.pixel_y = Clamp(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2)
-
+
return
/obj/structure/table/proc/straight_table_check(var/direction)
diff --git a/code/game/response_team.dm b/code/game/response_team.dm
index f495914d42d..6acdc12dea0 100644
--- a/code/game/response_team.dm
+++ b/code/game/response_team.dm
@@ -285,18 +285,18 @@ var/can_call_ert
else
del(H)
- var/new_gender = alert(usr, "Please select gender.", "Character Generation", "Male", "Female")
+ //M.rebuild_appearance()
+ */
+
+ var/new_gender = alert(usr, "Please select your gender.", "Character Generation", "Male", "Female")
if (new_gender)
if(new_gender == "Male")
M.gender = MALE
else
M.gender = FEMALE
- //M.rebuild_appearance()
-*/
- M.gender = pick(MALE, FEMALE)
M.set_species("Human",1)
- M.dna.ready_dna(M) // Quadriplegic Nuke Ops won't be participating in the paralympics
+ M.dna.ready_dna(M)
var/hair_c = pick("#8B4513","#000000","#FF4500","#FFD700") // Brown, black, red, blonde
var/eye_c = pick("#000000","#8B4513","1E90FF") // Black, brown, blue
@@ -368,15 +368,14 @@ var/can_call_ert
R.helmet.flags |= NODROP
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/swat(M), slot_wear_mask)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
+ M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/ert/commander(M), slot_back)
var/obj/item/weapon/card/id/W = new(src)
W.assignment = "Emergency Response Team Leader"
W.registered_name = M.real_name
W.name = "[M.real_name]'s ID Card (Emergency Response Team - Commander)"
W.icon_state = "centcom"
- W.access = get_all_accesses()
- W.access += list(access_cent_general, access_cent_living, access_cent_medical, access_cent_storage, access_cent_thunder, access_cent_teleporter)
+ W.access = get_centcom_access(W.assignment)
M.equip_to_slot_or_del(W, slot_wear_id)
var/obj/item/device/pda/heads/pda = new(src)
@@ -428,7 +427,7 @@ var/can_call_ert
M.equip_to_slot_or_del(new /obj/item/weapon/storage/briefcase/inflatable(M), slot_r_hand)
if("Janitorial")
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/purple(M), slot_gloves)
+ M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/purple(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/janitor, slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/janitor/full, slot_belt)
@@ -452,7 +451,7 @@ var/can_call_ert
R.helmet.flags |= NODROP
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/swat(M), slot_wear_mask)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
+ M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/ert/security(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud(M), slot_glasses)
var/obj/item/weapon/card/id/W = new(src)
@@ -460,8 +459,7 @@ var/can_call_ert
W.registered_name = M.real_name
W.name = "[M.real_name]'s ID Card (Emergency Response Team - Officer)"
W.icon_state = "centcom"
- W.access = get_all_accesses()
- W.access += list(access_cent_general, access_cent_living, access_cent_thunder)
+ W.access = get_centcom_access(W.assignment)
M.equip_to_slot_or_del(W, slot_wear_id)
var/obj/item/device/pda/heads/pda = new(src)
@@ -472,7 +470,8 @@ var/can_call_ert
M.equip_to_slot_or_del(pda, slot_wear_pda)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_s_store)
- M.equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen/double/full(M), slot_r_store)
+ M.equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen/double/full(M), slot_r_store)
+ M.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs, slot_l_store)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/security/night(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/handcuffs(M), slot_in_backpack)
@@ -492,7 +491,7 @@ var/can_call_ert
R.helmet.flags |= NODROP
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/swat(M), slot_wear_mask)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
+ M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/ert/medical(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health/night(M), slot_glasses)
var/obj/item/weapon/card/id/W = new(src)
@@ -500,8 +499,7 @@ var/can_call_ert
W.registered_name = M.real_name
W.name = "[M.real_name]'s ID Card (Emergency Response Team - Medic)"
W.icon_state = "centcom"
- W.access = get_all_accesses()
- W.access += list(access_cent_general, access_cent_living, access_cent_medical)
+ W.access = get_centcom_access(W.assignment)
M.equip_to_slot_or_del(W, slot_wear_id)
var/obj/item/device/pda/heads/pda = new(src)
@@ -525,7 +523,7 @@ var/can_call_ert
if("Engineering")
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/magboots/advance(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
+ M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/ert/engineer(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/ert/engineer(M), slot_wear_suit)
var/obj/item/clothing/suit/space/rig/R = M.wear_suit
@@ -542,8 +540,7 @@ var/can_call_ert
W.registered_name = M.real_name
W.name = "[M.real_name]'s ID Card (Emergency Response Team - Engineer)"
W.icon_state = "centcom"
- W.access = get_all_accesses()
- W.access += list(access_cent_general, access_cent_living, access_cent_storage)
+ W.access = get_centcom_access(W.assignment)
M.equip_to_slot_or_del(W, slot_wear_id)
var/obj/item/device/pda/heads/pda = new(src)
@@ -564,12 +561,10 @@ var/can_call_ert
M.equip_to_slot_or_del(new /obj/item/stack/sheet/plasteel/full(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full/multitool(M), slot_belt)
-
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/briefcase/inflatable(M), slot_r_hand)
if("Janitorial")
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/galoshes(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/purple(M), slot_gloves)
+ M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/purple(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/ert/janitor(M), slot_wear_suit)
var/obj/item/clothing/suit/space/rig/R = M.wear_suit
@@ -578,7 +573,7 @@ var/can_call_ert
R.helmet.flags |= NODROP
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/swat(M), slot_wear_mask)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
+ M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/ert/janitor(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/janitor(M), slot_glasses)
var/obj/item/weapon/card/id/W = new(src)
@@ -586,8 +581,7 @@ var/can_call_ert
W.registered_name = M.real_name
W.name = "[M.real_name]'s ID Card (Emergency Response Team - Janitor)"
W.icon_state = "centcom"
- W.access = get_all_accesses()
- W.access += list(access_cent_general, access_cent_living, access_cent_storage)
+ W.access = get_centcom_access(W.assignment)
M.equip_to_slot_or_del(W, slot_wear_id)
var/obj/item/device/pda/heads/pda = new(src)
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index 8bd0f7c4c47..3a8afe57d6a 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -734,7 +734,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if("tunnel clown")//Tunnel clowns rule!
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/clown(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(M), slot_gloves)
+ M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(M), slot_wear_mask)
M.equip_to_slot_or_del(new /obj/item/clothing/head/chaplain_hood(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
@@ -775,7 +775,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if("dark lord")
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(M), slot_gloves)
+ M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
M.equip_to_slot_or_del(new /obj/item/weapon/twohanded/dualsaber/red(M), slot_l_hand)
@@ -797,7 +797,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if("assassin")
M.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(M), slot_gloves)
+ M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/wcoat(M), slot_wear_suit)
@@ -812,7 +812,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
sec_briefcase.contents += new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow
sec_briefcase.contents += new /obj/item/weapon/gun/projectile/revolver/mateba
sec_briefcase.contents += new /obj/item/ammo_box/a357
- sec_briefcase.contents += new /obj/item/weapon/plastique
+ sec_briefcase.contents += new /obj/item/weapon/c4
M.equip_to_slot_or_del(sec_briefcase, slot_l_hand)
var/obj/item/device/pda/heads/pda = new(M)
@@ -855,8 +855,8 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
W.icon_state = "centcom"
W.item_state = "id_inv"
W.access = get_all_accesses()
- W.access += list("VIP Guest","Custodian","Thunderdome Overseer","Intel Officer","Medical Officer","Death Commando","Research Officer")
W.assignment = "Nanotrasen Navy Representative"
+ W.access = get_centcom_access(W.assignment)
W.registered_name = M.real_name
M.equip_if_possible(W, slot_wear_id)
@@ -878,9 +878,8 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
var/obj/item/weapon/card/id/centcom/W = new(M)
W.name = "[M.real_name]'s ID Card (Nanotrasen Navy Officer)"
- W.access = get_all_accesses()
- W.access += get_all_centcom_access()
- W.assignment = "Nanotrasen Navy Officer"
+ W.assignment = "Nanotrasen Navy Officer"
+ W.access = get_centcom_access(W.assignment)
W.registered_name = M.real_name
M.equip_if_possible(W, slot_wear_id)
@@ -904,26 +903,25 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
var/obj/item/weapon/card/id/centcom/W = new(M)
W.name = "[M.real_name]'s ID Card (Nanotrasen Navy Captain)"
W.access = get_all_accesses()
- W.access += get_all_centcom_access()
- W.assignment = "Nanotrasen Navy Captain"
+ W.assignment = "Nanotrasen Navy Captain"
+ W.access = get_centcom_access(W.assignment)
W.registered_name = M.real_name
M.equip_if_possible(W, slot_wear_id)
- if("emergency response team")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform)
+ if("emergency response team member")
+ M.equip_to_slot_or_del(new /obj/item/clothing/under/ert(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/swat(M), slot_gloves)
+ M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset/ert/alt(M), slot_l_ear)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
var/obj/item/weapon/card/id/W = new(M)
- W.name = "[M.real_name]'s ID Card (Emergency Response Team)"
+ W.name = "[M.real_name]'s ID Card (Emergency Response Team - Member)"
W.icon_state = "centcom"
- W.access = get_all_accesses()
- W.access += get_all_centcom_access()
- W.assignment = "Emergency Response Team"
+ W.assignment = "Emergency Response Team Member"
+ W.access = get_centcom_access(W.assignment)
W.registered_name = M.real_name
M.equip_to_slot_or_del(W, slot_wear_id)
@@ -933,20 +931,19 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
pda.name = "PDA-[M.real_name] ([pda.ownjob])"
if("emergency response team leader")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform)
+ M.equip_to_slot_or_del(new /obj/item/clothing/under/ert(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/swat(M), slot_gloves)
+ M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset/ert/alt(M), slot_l_ear)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
var/obj/item/weapon/card/id/W = new(M)
- W.name = "[M.real_name]'s ID Card (Emergency Response Team Leader)"
+ W.name = "[M.real_name]'s ID Card (Emergency Response Team - Leader)"
W.icon_state = "centcom"
- W.access = get_all_accesses()
- W.access += get_all_centcom_access()
W.assignment = "Emergency Response Team Leader"
+ W.access = get_centcom_access(W.assignment)
W.registered_name = M.real_name
M.equip_to_slot_or_del(W, slot_wear_id)
@@ -980,9 +977,8 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
var/obj/item/weapon/card/id/W = new(M)
W.name = "[M.real_name]'s ID Card (Special Operations Officer)"
W.icon_state = "centcom"
- W.access = get_all_accesses()
- W.access += get_all_centcom_access()
W.assignment = "Special Operations Officer"
+ W.access = get_centcom_access(W.assignment)
W.registered_name = M.real_name
M.equip_to_slot_or_del(W, slot_wear_id)
@@ -1010,9 +1006,8 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
var/obj/item/weapon/card/id/W = new(M)
W.name = "[M.real_name]'s ID Card (Special Operations Officer)"
W.icon_state = "centcom"
- W.access = get_all_accesses()
- W.access += get_all_centcom_access()
W.assignment = "Special Operations Officer"
+ W.access = get_centcom_access(W.assignment)
W.registered_name = M.real_name
M.equip_to_slot_or_del(W, slot_wear_id)
@@ -1039,7 +1034,6 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
W.registered_name = M.real_name
M.equip_to_slot_or_del(W, slot_wear_id)
-
if("blue wizard")
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(M), slot_wear_suit)
@@ -1116,9 +1110,8 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
var/obj/item/weapon/card/id/W = new(M)
W.name = "[M.real_name]'s ID Card (Deathsquad Officer)"
W.icon_state = "centcom"
- W.access = get_all_accesses()
- W.access += get_all_centcom_access()
W.assignment = "Deathsquad Officer"
+ W.access = get_centcom_access(W.assignment)
W.registered_name = M.real_name
M.equip_to_slot_or_del(W, slot_wear_id)
@@ -1150,9 +1143,8 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
var/obj/item/weapon/card/id/W = new(M)
W.name = "[M.real_name]'s ID Card (Deathsquad Officer)"
W.icon_state = "centcom"
- W.access = get_all_accesses()
- W.access += get_all_centcom_access()
W.assignment = "Deathsquad Officer"
+ W.access = get_centcom_access(W.assignment)
W.registered_name = M.real_name
M.equip_to_slot_or_del(W, slot_wear_id)
diff --git a/code/modules/admin/verbs/striketeam.dm b/code/modules/admin/verbs/striketeam.dm
index 0c482941239..71e1ee4b38c 100644
--- a/code/modules/admin/verbs/striketeam.dm
+++ b/code/modules/admin/verbs/striketeam.dm
@@ -146,7 +146,7 @@ var/global/sent_strike_team = 0
equip_to_slot_or_del(new /obj/item/weapon/storage/box/flashbangs(src), slot_in_backpack)
equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_in_backpack)
if (!leader_selected)
- equip_to_slot_or_del(new /obj/item/weapon/plastique(src), slot_in_backpack)
+ equip_to_slot_or_del(new /obj/item/weapon/c4(src), slot_in_backpack)
else
equip_to_slot_or_del(new /obj/item/weapon/pinpointer(src), slot_in_backpack)
equip_to_slot_or_del(new /obj/item/weapon/disk/nuclear(src), slot_in_backpack)
@@ -168,9 +168,8 @@ var/global/sent_strike_team = 0
var/obj/item/weapon/card/id/W = new(src)
W.name = "[real_name]'s ID Card"
W.icon_state = "centcom"
- W.access = get_all_accesses()//They get full station access.
- W.access += list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage)//Let's add their alloted CentCom access.
W.assignment = "Death Commando"
+ W.access = get_centcom_access(W.assignment)
W.registered_name = real_name
equip_to_slot_or_del(W, slot_wear_id)
diff --git a/code/modules/admin/verbs/striketeam_syndicate.dm b/code/modules/admin/verbs/striketeam_syndicate.dm
index 755bc91817e..b61e3573b9f 100644
--- a/code/modules/admin/verbs/striketeam_syndicate.dm
+++ b/code/modules/admin/verbs/striketeam_syndicate.dm
@@ -138,7 +138,7 @@ var/global/sent_syndicate_strike_team = 0
equip_to_slot_or_del(new /obj/item/clothing/suit/space/syndicate/black/strike(src), slot_wear_suit)
else
equip_to_slot_or_del(new /obj/item/clothing/suit/space/syndicate/black/red/strike(src), slot_wear_suit)
- equip_to_slot_or_del(new /obj/item/clothing/gloves/swat(src), slot_gloves)
+ equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(src), slot_gloves)
if (!syndicate_leader_selected)
equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/syndicate/black/strike(src), slot_head)
else
@@ -151,10 +151,10 @@ var/global/sent_syndicate_strike_team = 0
equip_to_slot_or_del(new /obj/item/ammo_box/magazine/m45(src), slot_in_backpack)
equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/regular(src), slot_in_backpack)
- equip_to_slot_or_del(new /obj/item/weapon/plastique(src), slot_in_backpack)
+ equip_to_slot_or_del(new /obj/item/weapon/c4(src), slot_in_backpack)
equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_in_backpack)
if (!syndicate_leader_selected)
- equip_to_slot_or_del(new /obj/item/weapon/plastique(src), slot_in_backpack)
+ equip_to_slot_or_del(new /obj/item/weapon/c4(src), slot_in_backpack)
equip_to_slot_or_del(new /obj/item/weapon/card/emag(src), slot_in_backpack)
else
equip_to_slot_or_del(new /obj/item/weapon/pinpointer(src), slot_in_backpack)
@@ -171,8 +171,8 @@ var/global/sent_syndicate_strike_team = 0
W.name = "[real_name]'s ID Card"
W.icon_state = "id"
W.access = get_all_accesses()//They get full station access because obviously the syndicate has HAAAX, and can make special IDs for their most elite members.
- W.access += list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage, access_syndicate)//Let's add their forged CentCom access and syndicate access.
W.assignment = "Syndicate Commando"
+ W.access = get_syndicate_access(W.assignment)
W.registered_name = real_name
equip_to_slot_or_del(W, slot_wear_id)
diff --git a/code/modules/admin/verbs/vox_raiders.dm b/code/modules/admin/verbs/vox_raiders.dm
index e8f39bf6b3a..f53f3915bb1 100644
--- a/code/modules/admin/verbs/vox_raiders.dm
+++ b/code/modules/admin/verbs/vox_raiders.dm
@@ -8,7 +8,7 @@ var/global/vox_tick = 1
equip_to_slot_or_del(new /obj/item/clothing/under/vox/vox_robes(src), slot_w_uniform)
equip_to_slot_or_del(new /obj/item/clothing/shoes/magboots/vox(src), slot_shoes) // REPLACE THESE WITH CODED VOX ALTERNATIVES.
- equip_to_slot_or_del(new /obj/item/clothing/gloves/yellow/vox(src), slot_gloves) // AS ABOVE.
+ equip_to_slot_or_del(new /obj/item/clothing/gloves/color/yellow/vox(src), slot_gloves) // AS ABOVE.
switch(vox_tick)
if(1) // Vox raider!
diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm
index 7fa81ce358e..0ede8d0ba98 100644
--- a/code/modules/awaymissions/corpse.dm
+++ b/code/modules/awaymissions/corpse.dm
@@ -100,7 +100,7 @@
corpseuniform = /obj/item/clothing/under/syndicate
corpsesuit = /obj/item/clothing/suit/armor/vest
corpseshoes = /obj/item/clothing/shoes/combat
- corpsegloves = /obj/item/clothing/gloves/swat
+ corpsegloves = /obj/item/clothing/gloves/combat
corpseradio = /obj/item/device/radio/headset
corpsemask = /obj/item/clothing/mask/gas
corpsehelmet = /obj/item/clothing/head/helmet/swat
@@ -116,7 +116,7 @@
corpseuniform = /obj/item/clothing/under/syndicate
corpsesuit = /obj/item/clothing/suit/space/rig/syndi
corpseshoes = /obj/item/clothing/shoes/combat
- corpsegloves = /obj/item/clothing/gloves/swat
+ corpsegloves = /obj/item/clothing/gloves/combat
corpseradio = /obj/item/device/radio/headset
corpsemask = /obj/item/clothing/mask/gas/syndicate
corpsehelmet = /obj/item/clothing/head/helmet/space/rig/syndi
@@ -162,7 +162,7 @@
corpseback = /obj/item/weapon/storage/backpack/industrial
corpseshoes = /obj/item/clothing/shoes/orange
corpsebelt = /obj/item/weapon/storage/belt/utility/full
- corpsegloves = /obj/item/clothing/gloves/yellow
+ corpsegloves = /obj/item/clothing/gloves/color/yellow
corpsehelmet = /obj/item/clothing/head/hardhat
corpseid = 1
corpseidjob = "Station Engineer"
@@ -246,7 +246,7 @@
/obj/effect/landmark/corpse/miner
corpseradio = /obj/item/device/radio/headset/headset_cargo
corpseuniform = /obj/item/clothing/under/rank/miner
- corpsegloves = /obj/item/clothing/gloves/black
+ corpsegloves = /obj/item/clothing/gloves/fingerless
corpseback = /obj/item/weapon/storage/backpack/industrial
corpseshoes = /obj/item/clothing/shoes/black
corpseid = 1
@@ -280,7 +280,7 @@
corpseglasses = /obj/item/clothing/glasses/eyepatch
corpsemask = /obj/item/clothing/mask/cigarette/cigar/cohiba
corpsehelmet = /obj/item/clothing/head/centhat
- corpsegloves = /obj/item/clothing/gloves/swat
+ corpsegloves = /obj/item/clothing/gloves/combat
corpseshoes = /obj/item/clothing/shoes/combat
corpsepocket1 = /obj/item/weapon/lighter/zippo
corpseid = 1
diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm
index cd646e76e77..43d9569ea39 100644
--- a/code/modules/client/client procs.dm
+++ b/code/modules/client/client procs.dm
@@ -157,6 +157,13 @@
else
src.DB_species_unlock("Slime People",45)
return
+ if("6")
+ if(karma <100)
+ usr << "You do not have enough karma!"
+ return
+ else
+ src.DB_species_unlock("Plasmaman",100)
+ return
if(href_list["KarmaRefund"])
var/type = href_list["KarmaRefundType"]
var/job = href_list["KarmaRefund"]
diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm
index 7f592a2405b..77e31587c41 100644
--- a/code/modules/clothing/glasses/glasses.dm
+++ b/code/modules/clothing/glasses/glasses.dm
@@ -8,6 +8,7 @@
//var/darkness_view = 0//Base human is 2
//var/invisa_view = 0
var/prescription = 0
+ var/see_darkness = 1
/obj/item/clothing/glasses/meson
name = "Optical Meson Scanner"
@@ -20,13 +21,14 @@
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/eyes.dmi'
)
-
+
/obj/item/clothing/glasses/meson/night
name = "Night Vision Optical Meson Scanner"
desc = "An Optical Meson Scanner fitted with an amplified visible light spectrum overlay, providing greater visual clarity in darkness."
icon_state = "nvgmeson"
item_state = "glasses"
darkness_view = 8
+ see_darkness = 0
/obj/item/clothing/glasses/meson/prescription
name = "prescription mesons"
@@ -49,7 +51,7 @@
desc = "nothing"
icon_state = "purple"
item_state = "glasses"
-
+
/obj/item/clothing/glasses/janitor
name = "Janitorial Goggles"
desc = "These'll keep the soap out of your eyes."
@@ -63,6 +65,7 @@
item_state = "glasses"
origin_tech = "magnets=2"
darkness_view = 8
+ see_darkness = 0
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/eyes.dmi'
diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm
index 47d9875c2a9..9a52deadebc 100644
--- a/code/modules/clothing/glasses/hud.dm
+++ b/code/modules/clothing/glasses/hud.dm
@@ -26,6 +26,7 @@
icon_state = "healthhudnight"
item_state = "glasses"
darkness_view = 8
+ see_darkness = 0
/obj/item/clothing/glasses/hud/health/process_hud(var/mob/M)
process_med_hud(M,1)
@@ -53,6 +54,7 @@
desc = "An advanced heads-up display which provides id data and vision in complete darkness."
icon_state = "securityhudnight"
darkness_view = 8
+ see_darkness = 0
/obj/item/clothing/glasses/hud/security/process_hud(var/mob/M)
diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm
index e7b8b3ae64f..ecc763a1a49 100644
--- a/code/modules/clothing/gloves/color.dm
+++ b/code/modules/clothing/gloves/color.dm
@@ -1,4 +1,4 @@
-/obj/item/clothing/gloves/yellow
+/obj/item/clothing/gloves/color/yellow
desc = "These gloves will protect the wearer from electric shock."
name = "insulated gloves"
icon_state = "yellow"
@@ -14,7 +14,7 @@
power
var/next_shock = 0
-/obj/item/clothing/gloves/fyellow //Cheap Chinese Crap
+/obj/item/clothing/gloves/color/fyellow //Cheap Chinese Crap
desc = "These gloves are cheap copies of the coveted gloves, no way this can end badly."
name = "budget insulated gloves"
icon_state = "yellow"
@@ -30,7 +30,7 @@
New()
siemens_coefficient = pick(0,0.5,0.5,0.5,0.5,0.75,1.5)
-/obj/item/clothing/gloves/black
+/obj/item/clothing/gloves/color/black
desc = "These gloves are fire-resistant."
name = "black gloves"
icon_state = "black"
@@ -55,7 +55,7 @@
thief
pickpocket = 1
-/obj/item/clothing/gloves/orange
+/obj/item/clothing/gloves/color/orange
name = "orange gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "orange"
@@ -65,7 +65,7 @@
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/gloves.dmi'
)
-/obj/item/clothing/gloves/red
+/obj/item/clothing/gloves/color/red
name = "red gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "red"
@@ -75,7 +75,7 @@
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/gloves.dmi'
)
-/obj/item/clothing/gloves/rainbow
+/obj/item/clothing/gloves/color/rainbow
name = "rainbow gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "rainbow"
@@ -88,7 +88,7 @@
clown
_color = "clown"
-/obj/item/clothing/gloves/blue
+/obj/item/clothing/gloves/color/blue
name = "blue gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "blue"
@@ -98,7 +98,7 @@
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/gloves.dmi'
)
-/obj/item/clothing/gloves/purple
+/obj/item/clothing/gloves/color/purple
name = "purple gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "purple"
@@ -108,7 +108,7 @@
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/gloves.dmi'
)
-/obj/item/clothing/gloves/green
+/obj/item/clothing/gloves/color/green
name = "green gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "green"
@@ -118,7 +118,7 @@
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/gloves.dmi'
)
-/obj/item/clothing/gloves/grey
+/obj/item/clothing/gloves/color/grey
name = "grey gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "gray"
@@ -134,7 +134,7 @@
hop
_color = "hop" //Exists for washing machines. Is not different from gray gloves in any way.
-/obj/item/clothing/gloves/light_brown
+/obj/item/clothing/gloves/color/light_brown
name = "light brown gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "lightbrown"
@@ -144,7 +144,7 @@
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/gloves.dmi'
)
-/obj/item/clothing/gloves/brown
+/obj/item/clothing/gloves/color/brown
name = "brown gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "brown"
@@ -170,8 +170,6 @@
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/mask.dmi'
)
- cmo
- _color = "medical" //Exists for washing machines. Is not different from latex gloves in any way.
/obj/item/clothing/gloves/color/latex/nitrile
name = "nitrile gloves"
@@ -179,6 +177,7 @@
icon_state = "nitrile"
item_state = "nitrilegloves"
transfer_prints = FALSE
+ _color = "medical"
/obj/item/clothing/gloves/color/white
name = "white gloves"
@@ -188,7 +187,7 @@
_color="mime"
redcoat
- _color = "redcoat" //Exists for washing machines. Is not different from white gloves in any way.
+ _color = "redcoat" //Exists for washing machines. Is not different from white gloves in any way.
/obj/item/clothing/gloves/color/captain
diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm
index 5f01aa4da95..8f6ba148430 100644
--- a/code/modules/clothing/gloves/miscellaneous.dm
+++ b/code/modules/clothing/gloves/miscellaneous.dm
@@ -1,3 +1,14 @@
+/obj/item/clothing/gloves/fingerless
+ name = "fingerless gloves"
+ desc = "Plain black gloves without fingertips for the hard working."
+ icon_state = "fingerless"
+ item_state = "fingerless"
+ _color = null //So they don't wash.
+ transfer_prints = TRUE
+ cold_protection = HANDS
+ min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE
+ species_restricted = null
+
/obj/item/clothing/gloves/cyborg
desc = "beep boop borp"
name = "cyborg gloves"
@@ -8,23 +19,8 @@
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/mask.dmi'
)
-/obj/item/clothing/gloves/swat
- desc = "These tactical gloves are somewhat fire and impact-resistant."
- name = "\improper SWAT Gloves"
- icon_state = "black"
- item_state = "swat_gl"
- siemens_coefficient = 0.6
- permeability_coefficient = 0.05
- cold_protection = HANDS
- min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE
- heat_protection = HANDS
- max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE
- species_fit = list("Vox")
- sprite_sheets = list(
- "Vox" = 'icons/mob/species/vox/mask.dmi'
- )
-/obj/item/clothing/gloves/combat //Combined effect of SWAT gloves and insulated gloves
+/obj/item/clothing/gloves/combat
desc = "These tactical gloves are somewhat fire and impact resistant."
name = "combat gloves"
icon_state = "black"
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index c8d1f5d32c5..ae2ab8902e7 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -113,4 +113,33 @@ obj/item/clothing/head/blob
icon_state = "blobhat"
item_state = "blobhat"
flags = HEADCOVERSEYES|HEADCOVERSMOUTH
- flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
\ No newline at end of file
+ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
+
+//Commander
+/obj/item/clothing/head/helmet/ert/command
+ name = "emergency response team commander helmet"
+ desc = "An in-atmosphere helmet worn by the commander of a NanoTrasen Emergency Response Team. Has blue highlights."
+
+//Security
+/obj/item/clothing/head/helmet/ert/security
+ name = "emergency response team security helmet"
+ desc = "An in-atmosphere helmet worn by security members of the NanoTrasen Emergency Response Team. Has red highlights."
+ icon_state = "erthelmet_sec"
+
+//Engineer
+/obj/item/clothing/head/helmet/ert/engineer
+ name = "emergency response team engineer helmet"
+ desc = "An in-atmosphere helmet worn by engineering members of the NanoTrasen Emergency Response Team. Has orange highlights."
+ icon_state = "erthelmet_eng"
+
+//Medical
+/obj/item/clothing/head/helmet/ert/medical
+ name = "emergency response team medical helmet"
+ desc = "A set of armor worn by medical members of the NanoTrasen Emergency Response Team. Has red and white highlights."
+ icon_state = "erthelmet_med"
+
+//Medical
+/obj/item/clothing/head/helmet/ert/janitor
+ name = "emergency response team janitor helmet"
+ desc = "A set of armor worn by janitorial members of the NanoTrasen Emergency Response Team. Has red and white highlights."
+ icon_state = "erthelmet_jan"
\ No newline at end of file
diff --git a/code/modules/clothing/spacesuits/alien.dm b/code/modules/clothing/spacesuits/alien.dm
index d367671e34f..8416945287f 100644
--- a/code/modules/clothing/spacesuits/alien.dm
+++ b/code/modules/clothing/spacesuits/alien.dm
@@ -173,7 +173,7 @@
_color = "vox-casual-2"
item_state = "vox-casual-2"
-/obj/item/clothing/gloves/yellow/vox
+/obj/item/clothing/gloves/color/yellow/vox
desc = "These bizarre gauntlets seem to be fitted for... bird claws?"
name = "insulated gauntlets"
icon_state = "gloves-vox"
diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm
index 6c20fbae7ee..446d7ef13ec 100644
--- a/code/modules/clothing/spacesuits/plasmamen.dm
+++ b/code/modules/clothing/spacesuits/plasmamen.dm
@@ -1,8 +1,10 @@
// PLASMEN SHIT
// CAN'T WEAR UNLESS YOU'RE A PINK SKELLINGTON
/obj/item/clothing/suit/space/eva/plasmaman
+ name = "plasmaman suit"
+ desc = "A special containment suit designed to protect a plasmaman's volatile body from outside exposure and quickly extinguish it in emergencies."
w_class = 3
- allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank)
+ allowed = list(/obj/item/weapon/gun,/obj/item/ammo_casing,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank)
slowdown = 2
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 0)
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
@@ -10,7 +12,8 @@
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
species_restricted = list("Plasmaman")
- flags = STOPSPRESSUREDMAGE | PLASMAGUARD
+ flags = STOPSPRESSUREDMAGE | PLASMAGUARD
+ pressure_resistance = 40 * ONE_ATMOSPHERE //we can't change, so some resistance is needed
icon_state = "plasmaman_suit"
item_state = "plasmaman_suit"
@@ -19,10 +22,10 @@
var/extinguish_cooldown=10 SECONDS
var/extinguishes_left=10 // Yeah yeah, reagents, blah blah blah. This should be simple.
-/obj/item/clothing/suit/space/eva/plasmaman/examine()
- set src in view()
+/obj/item/clothing/suit/space/eva/plasmaman/examine(mob/user)
..()
- usr << "There are [extinguishes_left] extinguisher canisters left in this suit."
+ user << "There are [extinguishes_left] extinguisher canisters left in this suit."
+
/obj/item/clothing/suit/space/eva/plasmaman/proc/Extinguish(var/mob/user)
var/mob/living/carbon/human/H=user
if(extinguishes_left)
@@ -35,7 +38,10 @@
H.ExtinguishMob()
/obj/item/clothing/head/helmet/space/eva/plasmaman
- flags = HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE | PLASMAGUARD
+ name = "plasmaman helmet"
+ desc = "A special containment helmet designed to protect a plasmaman's volatile body from outside exposure and quickly extinguish it in emergencies."
+ flags = STOPSPRESSUREDMAGE | PLASMAGUARD
+ pressure_resistance = 40 * ONE_ATMOSPHERE
species_restricted = list("Plasmaman")
icon_state = "plasmaman_helmet0"
@@ -54,9 +60,9 @@
return
on = !on
icon_state = "[base_state][on]"
-// item_state = "rig[on]-[_color]"
if(on) user.SetLuminosity(user.luminosity + brightness_on)
else user.SetLuminosity(user.luminosity - brightness_on)
+ user.update_inv_head()
/obj/item/clothing/head/helmet/space/eva/plasmaman/pickup(mob/user)
if(on)
@@ -74,54 +80,113 @@
// ENGINEERING
/obj/item/clothing/suit/space/eva/plasmaman/assistant
+ name = "plasmaman assistant suit"
icon_state = "plasmamanAssistant_suit"
+ slowdown = 1
/obj/item/clothing/head/helmet/space/eva/plasmaman/assistant
+ name = "plasmaman assistant helmet"
icon_state = "plasmamanAssistant_helmet0"
base_state = "plasmamanAssistant_helmet"
/obj/item/clothing/suit/space/eva/plasmaman/atmostech
+ name = "plasmaman atmospheric suit"
icon_state = "plasmamanAtmos_suit"
+ armor = list(melee = 20, bullet = 0, laser = 0,energy = 0, bomb = 25, bio = 100, rad = 0)
+ max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE
/obj/item/clothing/head/helmet/space/eva/plasmaman/atmostech
+ name = "plasmaman atmospheric helmet"
icon_state = "plasmamanAtmos_helmet0"
base_state = "plasmamanAtmos_helmet"
+ armor = list(melee = 20, bullet = 0, laser = 0,energy = 0, bomb = 25, bio = 100, rad = 0)
+ max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
/obj/item/clothing/suit/space/eva/plasmaman/engineer
+ name = "plasmaman engineer suit"
icon_state = "plasmamanEngineer_suit"
+ armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 80)
+ pressure_resistance = 200 * ONE_ATMOSPHERE
+ slowdown = 1
/obj/item/clothing/head/helmet/space/eva/plasmaman/engineer
+ name = "plasmaman engineer helmet"
icon_state = "plasmamanEngineer_helmet0"
base_state = "plasmamanEngineer_helmet"
+ armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 80)
+ pressure_resistance = 200 * ONE_ATMOSPHERE
+
+/obj/item/clothing/suit/space/eva/plasmaman/engineer/ce
+ name = "plasmaman chief engineer suit"
+ icon_state = "plasmaman_CE"
+ max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE
+
+/obj/item/clothing/head/helmet/space/eva/plasmaman/engineer/ce
+ name = "plasmaman chief engineer helmet"
+ icon_state = "plasmaman_CE_helmet0"
+ base_state = "plasmaman_CE_helmet"
+ max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
//SERVICE
/obj/item/clothing/suit/space/eva/plasmaman/botanist
+ name = "plasmaman botanist suit"
icon_state = "plasmamanBotanist_suit"
+ slowdown = 1
/obj/item/clothing/head/helmet/space/eva/plasmaman/botanist
+ name = "plasmaman botanist helmet"
icon_state = "plasmamanBotanist_helmet0"
base_state = "plasmamanBotanist_helmet"
/obj/item/clothing/suit/space/eva/plasmaman/chaplain
+ name = "plasmaman chaplain suit"
icon_state = "plasmamanChaplain_suit"
+ slowdown = 1
/obj/item/clothing/head/helmet/space/eva/plasmaman/chaplain
+ name = "plasmaman chaplain helmet"
icon_state = "plasmamanChaplain_helmet0"
base_state = "plasmamanChaplain_helmet"
+/obj/item/clothing/suit/space/eva/plasmaman/clown
+ name = "plasmaman clown suit"
+ icon_state = "plasmaman_Clown"
+ slowdown = 1
+
+/obj/item/clothing/head/helmet/space/eva/plasmaman/clown
+ name = "plasmaman clown helmet"
+ icon_state = "plasmaman_Clown_helmet0"
+ base_state = "plasmaman_Clown_helmet"
+
+/obj/item/clothing/suit/space/eva/plasmaman/mime
+ name = "plasmaman mime suit"
+ icon_state = "plasmaman_Mime"
+ slowdown = 1
+
+/obj/item/clothing/head/helmet/space/eva/plasmaman/mime
+ name = "plasmaman mime helmet"
+ icon_state = "plasmaman_Mime_helmet0"
+ base_state = "plasmaman_Mime_helmet"
+
/obj/item/clothing/suit/space/eva/plasmaman/service
+ name = "plasmaman service suit"
icon_state = "plasmamanService_suit"
+ slowdown = 1
/obj/item/clothing/head/helmet/space/eva/plasmaman/service
+ name = "plasmaman service helmet"
icon_state = "plasmamanService_helmet0"
base_state = "plasmamanService_helmet"
/obj/item/clothing/suit/space/eva/plasmaman/janitor
+ name = "plasmaman janitor suit"
icon_state = "plasmamanJanitor_suit"
+ slowdown = 1
/obj/item/clothing/head/helmet/space/eva/plasmaman/janitor
+ name = "plasmaman janitor helmet"
icon_state = "plasmamanJanitor_helmet0"
base_state = "plasmamanJanitor_helmet"
@@ -129,42 +194,158 @@
//CARGO
/obj/item/clothing/suit/space/eva/plasmaman/cargo
+ name = "plasmaman cargo suit"
icon_state = "plasmamanCargo_suit"
+ slowdown = 1
/obj/item/clothing/head/helmet/space/eva/plasmaman/cargo
+ name = "plasmaman cargo helmet"
icon_state = "plasmamanCargo_helmet0"
base_state = "plasmamanCargo_helmet"
/obj/item/clothing/suit/space/eva/plasmaman/miner
+ name = "plasmaman miner suit"
icon_state = "plasmamanMiner_suit"
+ armor = list(melee = 30, bullet = 5, laser = 15,energy = 5, bomb = 30, bio = 100, rad = 20)
/obj/item/clothing/head/helmet/space/eva/plasmaman/miner
+ name = "plasmaman miner helmet"
icon_state = "plasmamanMiner_helmet0"
base_state = "plasmamanMiner_helmet"
+ armor = list(melee = 30, bullet = 5, laser = 15,energy = 5, bomb = 30, bio = 100, rad = 20)
// MEDSCI
/obj/item/clothing/suit/space/eva/plasmaman/medical
+ name = "plasmaman medical suit"
icon_state = "plasmamanMedical_suit"
+ slowdown = 1
/obj/item/clothing/head/helmet/space/eva/plasmaman/medical
+ name = "plasmaman medical helmet"
icon_state = "plasmamanMedical_helmet0"
base_state = "plasmamanMedical_helmet"
+/obj/item/clothing/suit/space/eva/plasmaman/medical/paramedic
+ name = "plasmaman paramedic suit"
+ icon_state = "plasmaman_Paramedic"
+ slowdown = 1
+
+/obj/item/clothing/head/helmet/space/eva/plasmaman/medical/paramedic
+ name = "plasmaman paramedic helmet"
+ icon_state = "plasmaman_Paramedic_helmet0"
+ base_state = "plasmaman_Paramedic_helmet"
+
+/obj/item/clothing/suit/space/eva/plasmaman/medical/chemist
+ name = "plasmaman chemist suit"
+ icon_state = "plasmaman_Chemist"
+ slowdown = 1
+
+/obj/item/clothing/head/helmet/space/eva/plasmaman/medical/chemist
+ name = "plasmaman chemist helmet"
+ icon_state = "plasmaman_Chemist_helmet0"
+ base_state = "plasmaman_Chemist_helmet"
+
+/obj/item/clothing/suit/space/eva/plasmaman/medical/cmo
+ name = "plasmaman chief medical officer suit"
+ icon_state = "plasmaman_CMO"
+
+/obj/item/clothing/head/helmet/space/eva/plasmaman/medical/cmo
+ name = "plasmaman chief medical officer helmet"
+ icon_state = "plasmaman_CMO_helmet0"
+ base_state = "plasmaman_CMO_helmet"
+
/obj/item/clothing/suit/space/eva/plasmaman/science
+ name = "plasmaman scientist suit"
icon_state = "plasmamanScience_suit"
+ slowdown = 1
/obj/item/clothing/head/helmet/space/eva/plasmaman/science
+ name = "plasmaman scientist helmet"
icon_state = "plasmamanScience_helmet0"
base_state = "plasmamanScience_helmet"
+/obj/item/clothing/suit/space/eva/plasmaman/science/rd
+ name = "plasmaman research director suit"
+ icon_state = "plasmaman_RD"
+
+/obj/item/clothing/head/helmet/space/eva/plasmaman/science/rd
+ name = "plasmaman research director helmet"
+ icon_state = "plasmaman_RD_helmet0"
+ base_state = "plasmaman_RD_helmet"
+
//SECURITY
/obj/item/clothing/suit/space/eva/plasmaman/security
+ name = "plasmaman security suit"
icon_state = "plasmamanSecurity_suit"
+ slowdown = 1
+ armor = list(melee = 40, bullet = 15, laser = 35,energy = 5, bomb = 35, bio = 100, rad = 20)
/obj/item/clothing/head/helmet/space/eva/plasmaman/security
+ name = "plasmaman security helmet"
icon_state = "plasmamanSecurity_helmet0"
- base_state = "plasmamanSecurity_helmet"
\ No newline at end of file
+ base_state = "plasmamanSecurity_helmet"
+ armor = list(melee = 40, bullet = 15, laser = 35,energy = 5, bomb = 35, bio = 100, rad = 20)
+
+/obj/item/clothing/suit/space/eva/plasmaman/security/hos
+ name = "plasmaman head of security suit"
+ icon_state = "plasmaman_HoS"
+
+/obj/item/clothing/head/helmet/space/eva/plasmaman/security/hos
+ name = "plasmaman head of security helmet"
+ icon_state = "plasmaman_HoS_helmet0"
+ base_state = "plasmaman_HoS_helmet"
+
+/obj/item/clothing/suit/space/eva/plasmaman/security/hop
+ name = "plasmaman head of personnel suit"
+ icon_state = "plasmaman_HoP"
+
+/obj/item/clothing/head/helmet/space/eva/plasmaman/security/hop
+ name = "plasmaman head of personnel helmet"
+ icon_state = "plasmaman_HoP_helmet0"
+ base_state = "plasmaman_HoP_helmet"
+
+/obj/item/clothing/suit/space/eva/plasmaman/security/captain
+ name = "plasmaman captain suit"
+ icon_state = "plasmaman_Captain"
+
+/obj/item/clothing/head/helmet/space/eva/plasmaman/security/captain
+ name = "plasmaman captain helmet"
+ icon_state = "plasmaman_Captain_helmet0"
+ base_state = "plasmaman_Captain_helmet"
+
+//NUKEOPS
+
+/obj/item/clothing/suit/space/eva/plasmaman/nuclear
+ name = "blood red plasmaman suit"
+ icon_state = "plasmaman_Nukeops"
+ slowdown = 1
+ armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 60)
+ allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/gun,/obj/item/ammo_casing,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/restraints/handcuffs)
+ siemens_coefficient = 0.6
+
+/obj/item/clothing/head/helmet/space/eva/plasmaman/nuclear
+ name = "blood red plasmaman helmet"
+ icon_state = "plasmaman_Nukeops_helmet0"
+ base_state = "plasmaman_Nukeops_helmet"
+ armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 60)
+ siemens_coefficient = 0.6
+ var/obj/machinery/camera/camera
+
+/obj/item/clothing/head/helmet/space/eva/plasmaman/nuclear/attack_self(mob/user)
+ if(camera)
+ ..(user)
+ else
+ camera = new /obj/machinery/camera(src)
+ camera.network = list("NUKE")
+ cameranet.removeCamera(camera)
+ camera.c_tag = user.name
+ user << "User scanned as [camera.c_tag]. Camera activated."
+
+/obj/item/clothing/head/helmet/space/eva/plasmaman/nuclear/examine(mob/user)
+ ..()
+ if(get_dist(user,src) <= 1)
+ user << "This helmet has a built-in camera. It's [camera ? "" : "in"]active."
\ No newline at end of file
diff --git a/code/modules/clothing/spacesuits/space_ninja.dm b/code/modules/clothing/spacesuits/space_ninja.dm
new file mode 100644
index 00000000000..acc53c3dc40
--- /dev/null
+++ b/code/modules/clothing/spacesuits/space_ninja.dm
@@ -0,0 +1,350 @@
+// ** BEGIN NINJA CLOTHING DEFINES **
+
+/obj/item/clothing/head/helmet/space/space_ninja
+ desc = "What may appear to be a simple black garment is in fact a highly sophisticated nano-weave helmet. Standard issue ninja gear."
+ name = "ninja hood"
+ icon_state = "s-ninja"
+ item_state = "s-ninja_hood"
+ armor = list(melee = 60, bullet = 60, laser = 45, energy = 15, bomb = 30, bio = 30, rad = 25)
+ unacidable = 1
+ siemens_coefficient = 0.2
+
+
+/obj/item/clothing/mask/gas/voice/space_ninja
+ name = "ninja mask"
+ desc = "A close-fitting mask that acts both as an air filter and a post-modern fashion statement."
+ icon_state = "s-ninja(norm)"
+ item_state = "s-ninja_mask"
+ unacidable = 1
+ siemens_coefficient = 0.2
+
+/obj/item/clothing/glasses/hud/space_ninja
+ name = "vision enhancement implant"
+ desc = "A high-tech ocular implant designed for Spider Clan operatives."
+ icon_state = "cybereye-off"
+ item_state = "eyepatch"
+ flags = NODROP
+
+ var/enabled = 0
+ var/energyConsumption = 0
+ var/antagHUDEnabled = 0
+ var/mesonEnabled = 0
+ var/materialEnabled = 0
+ var/thermalEnabled = 0
+
+/obj/item/clothing/suit/space/space_ninja
+ name = "ninja suit"
+ desc = "A unique, vaccum-proof suit of nano-enhanced armor designed specifically for Spider Clan assassins."
+ icon_state = "s-ninja"
+ item_state = "s-ninja_suit"
+ allowed = list(/obj/item/weapon/gun, /obj/item/ammo_box, /obj/item/weapon/melee/baton, /obj/item/weapon/tank, /obj/item/weapon/stock_parts/cell)
+ slowdown = 0
+ unacidable = 1
+ armor = list(melee = 60, bullet = 60, laser = 45,energy = 15, bomb = 30, bio = 30, rad = 30)
+ siemens_coefficient = 0.2
+
+ var/suitActive = 0
+ var/suitBusy = 0
+
+ var/obj/item/weapon/stock_parts/cell/suitCell
+ var/obj/item/clothing/head/helmet/space/space_ninja/suitHood
+ var/obj/item/clothing/gloves/space_ninja/suitGloves
+ var/obj/item/clothing/shoes/space_ninja/suitShoes
+ var/obj/item/clothing/mask/gas/voice/space_ninja/suitMask
+ var/obj/item/clothing/glasses/hud/space_ninja/suitGlasses
+ var/mob/living/carbon/human/suitOccupant
+
+/obj/item/clothing/gloves/space_ninja
+ desc = "These nano-enhanced gloves insulate from electricity and provide fire resistance."
+ name = "ninja gloves"
+ icon_state = "s-ninja"
+ item_state = "s-ninja"
+ siemens_coefficient = 0
+ cold_protection = HANDS
+ min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE
+ heat_protection = HANDS
+ max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE
+ transfer_prints = FALSE
+
+
+/obj/item/clothing/shoes/space_ninja
+ name = "ninja shoes"
+ desc = "A pair of running shoes. Excellent for running and even better for smashing skulls."
+ icon_state = "s-ninja"
+ permeability_coefficient = 0.01
+ flags = NOSLIP
+ armor = list(melee = 60, bullet = 60, laser = 45,energy = 15, bomb = 30, bio = 30, rad = 30)
+ siemens_coefficient = 0.2
+ cold_protection = FEET
+ min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE
+ heat_protection = FEET
+ max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE
+
+// ** END NINJA CLOTHING DEFINES **
+
+// ** BEGIN NINJA SUIT PROCS **
+
+/obj/item/clothing/suit/space/space_ninja/New()
+ suitCell = new/obj/item/weapon/stock_parts/cell/ninja // The Ninja starts out with a 10,000 energy cell.
+ if(suitCell.charge != suitCell.maxcharge)
+ suitCell.charge = suitCell.maxcharge
+
+/obj/item/clothing/suit/space/space_ninja/verb/toggle_suit()
+ set category = "Space Ninja - Equiptment"
+ set name = "Toggle Suit"
+
+ if(usr.mind.special_role == "Ninja")
+ if(suitBusy)
+ usr << "ERROR: Suit systems busy, cannot initiate [suitActive ? "de-activation" : "activation"] protocals at this time."
+ return
+
+ suitBusy = 1
+
+ if(suitActive && (alert("Confirm suit systems shutdown? This cannot be halted once it has started.", "Confirm Shutdown", "Yes", "No") == "Yes"))
+ usr << "Now de-initializing..."
+
+ sleep(15)
+ usr << "Logging off, [usr.real_name]. Shutting down SpiderOS."
+
+ sleep(10)
+ usr<< "Primary system status: OFFLINE.\nBackup system status: OFFLINE."
+
+ sleep(5)
+ usr<< "VOID-shift device status: OFFLINE.\nCLOAK-tech device status: OFFLINE."
+ //TODO: Shut down any active abilities
+
+ sleep(10)
+ usr<< "Disconnecting neural-net interface... Success."
+ usr.hud_used.instantiate()
+ usr.regenerate_icons()
+
+ sleep(5)
+ usr<< "Disengaging neural-net interface... Success."
+
+ sleep(10)
+ usr<< "Unsecuring external locking mechanism...\nNeural-net abolished.\nOperation status: FINISHED."
+ //TODO: Grant verbs
+ toggle_suit_lock(usr)
+ usr.regenerate_icons()
+ suitBusy = 0
+ suitActive = 0
+
+ else if(!suitActive) // Activate the suit.
+ usr << "Now initializing..."
+
+ sleep(15)
+ usr<< "Now establishing neural-net interface..."
+ if(usr.mind.special_role != "Ninja")
+ usr << "FĆAL �Rr�R: µ§er n¤t rec¤gnized, c-c¤ntr-r¤£§-£§ £¤cked."
+ return
+
+ sleep(10)
+ usr<< "Neural-net established. Now monitoring brainwave pattern. \nBrainwave pattern GREEN, proceeding."
+
+ sleep(10)
+ usr<< "Securing external locking mechanism..."
+ if(!toggle_suit_lock(usr))
+ return
+
+ sleep(5)
+ usr<< "Suit secured, extending neural-net interface..."
+ usr.hud_used.human_hud('icons/mob/screen1_NinjaHUD.dmi',"#ffffff",255)
+ usr.regenerate_icons()
+
+ sleep(10)
+ usr<< "VOID-shift device status: ONLINE.\nCLOAK-tech device status:ONLINE"
+
+ sleep(5)
+ usr<< "Primary system status: ONLINE.\nBackup system status: ONLINE.\nCurrent energy capacity: [suitCell.charge]/[suitCell.maxcharge]."
+
+ sleep(10)
+ usr<< "All systems operational. Welcome to SpiderOS, [usr.real_name]."
+ //TODO: Grant ninja verbs here.
+ suitBusy = 0
+ suitActive = 1
+
+ else
+ suitBusy = 0
+ usr << "NOTICE: Suit de-activation protocals aborted."
+ else
+ usr << "FĆAL �Rr�R: µ§er n¤t rec¤gnized, c-c¤ntr-r¤£§-£§ £¤cked."
+ return
+
+/obj/item/clothing/suit/space/space_ninja/proc/toggle_suit_lock(mob/living/carbon/human/user)
+ if(!suitActive)
+ if(!istype(user.wear_suit, /obj/item/clothing/suit/space/space_ninja))
+ user<< "ERROR: Unable to locate user.\nABORTING..."
+ return 0
+ if(!istype(user.head, /obj/item/clothing/head/helmet/space/space_ninja))
+ user<< "ERROR: Unable to locate hood.\nABORTING..."
+ return 0
+ if(!istype(user.gloves, /obj/item/clothing/gloves/space_ninja))
+ user<< "ERROR: Unable to locate gloves.\nABORTING..."
+ return 0
+ if(!istype(user.shoes, /obj/item/clothing/shoes/space_ninja))
+ user<< "ERROR: Unable to locate foot gear.\nABORTING..."
+ return 0
+ if(!istype(user.wear_mask, /obj/item/clothing/mask/gas/voice/space_ninja))
+ user<< "ERROR: Unable to locate mask.\nABORTING..."
+ return 0
+ if(!istype(user.glasses, /obj/item/clothing/glasses/hud/space_ninja))
+ user<< "WARNING: Unable to locate eye gear, vision enhancement unavailable.\nProceeding..."
+ else
+ suitGlasses = user.glasses
+ suitGlasses.enabled = 1
+ suitGlasses.icon_state = "cybereye-green"
+
+ suitHood = user.head
+ suitMask = user.wear_mask
+ suitGloves = user.gloves
+ suitShoes = user.shoes
+ suitOccupant = user
+
+ flags |= NODROP
+ suitHood.flags |= NODROP
+ suitMask.flags |= NODROP
+ suitGloves.flags |= NODROP
+ suitGloves.pickpocket = 1
+ suitShoes.flags |= NODROP
+ suitShoes.slowdown = -2
+
+ icon_state = (user.gender == MALE ? "s-ninjan" : "s-ninjanf")
+ suitGloves.icon_state = "s-ninjan"
+ suitGloves.item_state = "s-ninjan"
+
+ return 1
+
+ else
+ flags &= ~NODROP
+ suitHood.flags &= ~NODROP
+ suitMask.flags &= ~NODROP
+ if(suitGlasses)
+ suitGlasses.enabled = 0
+ suitGlasses.icon_state = "cybereye-off"
+ suitGloves.flags &= ~NODROP
+ suitGloves.pickpocket = 0
+ suitShoes.flags &= ~NODROP
+ suitShoes.slowdown = -1
+ icon_state = "s-ninja"
+ suitGloves.icon_state = "s-ninja"
+ suitGloves.item_state = "s-ninja"
+
+ suitHood = null
+ suitMask = null
+ suitGlasses = null
+ suitGloves = null
+ suitShoes = null
+ suitOccupant = null
+
+ return 1
+
+// ** END NINJA SUIT PROCS **
+
+// **BEGIN NINJA GLASSES PROCS**
+
+/obj/item/clothing/glasses/hud/space_ninja/process_hud(var/mob/M) // Antag HUD processing.
+
+ if(antagHUDEnabled) // We only process if the antag-vision mode is enabled.
+ if(!M) return
+ if(!M.client) return
+ var/client/C = M.client
+ for(var/mob/living/carbon/human/target in view(get_turf(M)))
+ if(M.see_invisible < target.invisibility)
+ continue
+ if(!C) continue
+ C.images += target.hud_list[SPECIALROLE_HUD]
+
+/obj/item/clothing/glasses/hud/space_ninja/verb/modifyHUD(mob/user as mob)
+ set category = "Space Ninja - Equiptment"
+ set name = "Modify Vision"
+
+ if(usr.mind.special_role != "Ninja")
+ usr << "FĆAL �Rr�R: µ§er n¤t rec¤gnized, c-c¤ntr-r¤£§-£§ £¤cked."
+ return
+
+ if(!enabled) // If the Ninja's suit is on and connected.
+ usr << "ERROR: No power supply detected, cannot activate optical implant."
+ return
+
+ if(!user) // The user var is, so far as I can tell, required to refresh the window after each click.
+ user = usr
+
+ /*
+ * Each vision type the Ninja enables will drain more from his suit's battery per tick.
+ * For instance, if the Ninja were to rn around with thermals and AntagHUD on he would be losing an additional 10 energy per tick.
+ * Current vision modes are:
+ * - Night
+ * - Meson (Turfs)
+ * - Material (Objects)
+ * - Thermal (Mobs)
+ * - Antag HUD
+ *
+ * -Dave
+ */
+ var/dat = {"
+ Night Vision (2E) - [darkness_view ? "ENABLED" : "DISABLED"]
+ Meson Scanner (2E) - [mesonEnabled ? "ENABLED" : "DISABLED"]
+ Material Scanner (4E) - [materialEnabled ? "ENABLED" : "DISABLED"]
+ Thermal Scanner (4E) - [thermalEnabled ? "ENABLED" : "DISABLED"]
+ Threat Identification HUD (6E) - [antagHUDEnabled ? "ENABLED" : "DISABLED"]
+ "}
+
+ var/datum/browser/popup = new(user, "SpiderOS", "SpiderOS Optical Interface", 310, 150)
+ popup.set_content(dat)
+ popup.open()
+
+
+/obj/item/clothing/glasses/hud/space_ninja/Topic(href, href_list)
+ if(usr.stat != 0 || !enabled)
+ return 1
+
+ if(href_list["night"])
+ darkness_view = (darkness_view ? 0 : 8)
+ see_darkness = (darkness_view ? 0 : 1)
+ energyConsumption += (darkness_view ? 2 : -2)
+ usr << "Light amplification [(darkness_view ? "ENABLED" : "DISABLED")]."
+
+ else if(href_list["meson"])
+ mesonEnabled = (mesonEnabled ? 0 : 1)
+
+ if(mesonEnabled)
+ vision_flags |= SEE_TURFS
+ else
+ vision_flags &= ~SEE_TURFS
+
+ energyConsumption += (mesonEnabled ? 2 : -2)
+ usr << "Meson scanning [(mesonEnabled ? "ENABLED" : "DISABLED")]."
+
+ else if(href_list["material"])
+ materialEnabled = (materialEnabled ? 0 : 1)
+
+ if(materialEnabled)
+ vision_flags |= SEE_OBJS
+ else
+ vision_flags &= ~SEE_OBJS
+
+ energyConsumption += (materialEnabled ? 4 : -4)
+ usr << "Material scanning [(materialEnabled ? "ENABLED" : "DISABLED")]."
+
+ else if(href_list["thermal"])
+ thermalEnabled = (thermalEnabled ? 0 : 1)
+
+ if(thermalEnabled)
+ vision_flags |= SEE_MOBS
+ invisa_view = 2
+ else
+ vision_flags &= ~SEE_MOBS
+ invisa_view = 0
+
+ energyConsumption += (thermalEnabled ? 4 : -4)
+ usr << "Thermal scanning [(thermalEnabled ? "ENABLED" : "DISABLED")]."
+
+ else if(href_list["antagHUD"])
+ antagHUDEnabled = (antagHUDEnabled ? 0 : 1)
+ energyConsumption += (antagHUDEnabled ? 6 : -6)
+ usr << "Threat identification HUD [(antagHUDEnabled ? "ENABLED" : "DISABLED")]."
+
+ modifyHUD(usr) // Re-call the verb to get a fresh version of the window.
+ return
+
+// **END NINJA GLASSES PROCS**
\ No newline at end of file
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index 627b5e8a0b9..3fbbd72e0bc 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -243,4 +243,41 @@
desc = "Pukish armor."
icon_state = "tdgreen"
item_state = "tdgreen"
- siemens_coefficient = 1
\ No newline at end of file
+ siemens_coefficient = 1
+
+//Non-hardsuit ERT armor.
+/obj/item/clothing/suit/armor/vest/ert
+ name = "emergency response team armor"
+ desc = "A set of armor worn by members of the Nanotrasen Emergency Response Team."
+ icon_state = "ertarmor_cmd"
+ item_state = "armor"
+ armor = list(melee = 60, bullet = 60, laser = 60, energy = 40, bomb = 20, bio = 0, rad = 0)
+
+//Commander
+/obj/item/clothing/suit/armor/vest/ert/command
+ name = "emergency response team commander armor"
+ desc = "A set of armor worn by the commander of a Nanotrasen Emergency Response Team. Has blue highlights."
+
+//Security
+/obj/item/clothing/suit/armor/vest/ert/security
+ name = "emergency response team security armor"
+ desc = "A set of armor worn by security members of the Nanotrasen Emergency Response Team. Has red highlights."
+ icon_state = "ertarmor_sec"
+
+//Engineer
+/obj/item/clothing/suit/armor/vest/ert/engineer
+ name = "emergency response team engineer armor"
+ desc = "A set of armor worn by engineering members of the Nanotrasen Emergency Response Team. Has orange highlights."
+ icon_state = "ertarmor_eng"
+
+//Medical
+/obj/item/clothing/suit/armor/vest/ert/medical
+ name = "emergency response team medical armor"
+ desc = "A set of armor worn by medical members of the Nanotrasen Emergency Response Team. Has red and white highlights."
+ icon_state = "ertarmor_med"
+
+//Janitorial
+/obj/item/clothing/suit/armor/vest/ert/janitor
+ name = "emergency response team janitor armor"
+ desc = "A set of armor worn by janitorial members of the Nanotrasen Emergency Response Team. Has red and white highlights."
+ icon_state = "ertarmor_jan"
\ No newline at end of file
diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm
index 114b0c16db3..69eb575e158 100644
--- a/code/modules/clothing/under/miscellaneous.dm
+++ b/code/modules/clothing/under/miscellaneous.dm
@@ -108,6 +108,13 @@
_color = "officer"
displays_id = 0
flags = ONESIZEFITSALL
+
+/obj/item/clothing/under/ert
+ name = "ERT tactical uniform"
+ desc = "A short-sleeved black uniform, paired with grey digital-camo cargo pants. It looks very tactical."
+ icon_state = "ert_uniform"
+ item_state = "bl_suit"
+ _color = "ert_uniform"
/obj/item/clothing/under/space
name = "\improper NASA jumpsuit"
diff --git a/code/modules/computer3/computers/card.dm b/code/modules/computer3/computers/card.dm
index 5c4a92f3227..978d597144e 100644
--- a/code/modules/computer3/computers/card.dm
+++ b/code/modules/computer3/computers/card.dm
@@ -342,6 +342,6 @@
return accesses
authenticate()
- if(access_cent_captain in reader.access)
+ if(access_cent_commander in reader.access)
return 1
return 0
\ No newline at end of file
diff --git a/code/modules/economy/Accounts_DB.dm b/code/modules/economy/Accounts_DB.dm
index ddd432d3dfc..1b798ca0d86 100644
--- a/code/modules/economy/Accounts_DB.dm
+++ b/code/modules/economy/Accounts_DB.dm
@@ -5,7 +5,7 @@
icon = 'icons/obj/computer.dmi'
icon_state = "aiupload"
density = 1
- req_one_access = list(access_hop, access_captain, access_cent_captain)
+ req_one_access = list(access_hop, access_captain, access_cent_commander)
var/receipt_num
var/machine_id = ""
var/obj/item/weapon/card/id/held_card
@@ -16,7 +16,7 @@
proc/get_access_level()
if (!held_card)
return 0
- if(access_cent_captain in held_card.access)
+ if(access_cent_commander in held_card.access)
return 2
else if(access_hop in held_card.access || access_captain in held_card.access)
return 1
diff --git a/code/modules/economy/EFTPOS.dm b/code/modules/economy/EFTPOS.dm
index a6c8a3e74a4..ea56f8f28e4 100644
--- a/code/modules/economy/EFTPOS.dm
+++ b/code/modules/economy/EFTPOS.dm
@@ -179,7 +179,7 @@
var/obj/item/I = usr.get_active_hand()
if (istype(I, /obj/item/weapon/card))
var/obj/item/weapon/card/id/C = I
- if(access_cent_captain in C.access || access_hop in C.access || access_captain in C.access)
+ if(access_cent_commander in C.access || access_hop in C.access || access_captain in C.access)
access_code = 0
usr << "\icon[src]Access code reset to 0."
else if (istype(I, /obj/item/weapon/card/emag))
diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm
index 19405dfaf06..85be9cbe361 100644
--- a/code/modules/flufftext/Hallucination.dm
+++ b/code/modules/flufftext/Hallucination.dm
@@ -349,7 +349,7 @@ var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/ite
/obj/item/clothing/mask/gas/voice, /obj/item/clothing/glasses/thermal,\
/obj/item/device/chameleon, /obj/item/weapon/card/emag,\
/obj/item/weapon/storage/toolbox/syndicate, /obj/item/weapon/aiModule,\
- /obj/item/device/radio/headset/syndicate, /obj/item/weapon/plastique,\
+ /obj/item/device/radio/headset/syndicate, /obj/item/weapon/c4,\
/obj/item/device/powersink, /obj/item/weapon/storage/box/syndie_kit,\
/obj/item/toy/syndicateballoon, /obj/item/weapon/gun/energy/laser/captain,\
/obj/item/weapon/hand_tele, /obj/item/weapon/rcd, /obj/item/weapon/tank/jetpack,\
diff --git a/code/modules/jungle/jungle_temple.dm b/code/modules/jungle/jungle_temple.dm
index 138d1dc47d1..90331034774 100644
--- a/code/modules/jungle/jungle_temple.dm
+++ b/code/modules/jungle/jungle_temple.dm
@@ -135,13 +135,13 @@
new /obj/item/clothing/under/rainbow(C)
new /obj/item/clothing/shoes/rainbow(C)
new /obj/item/clothing/head/soft/rainbow(C)
- new /obj/item/clothing/gloves/rainbow(C)
+ new /obj/item/clothing/gloves/color/rainbow(C)
else if(prob(50))
new /obj/item/clothing/under/psyche(C)
else
new /obj/item/clothing/under/syndicate/combat(C)
new /obj/item/clothing/shoes/combat(C)
- new /obj/item/clothing/gloves/swat(C)
+ new /obj/item/clothing/gloves/combat(C)
new /obj/item/clothing/mask/balaclava(C)
if("glasses")
var/obj/structure/closet/C = new(src.loc)
diff --git a/code/modules/karma/karma.dm b/code/modules/karma/karma.dm
index 38c101b4370..feab27efbbc 100644
--- a/code/modules/karma/karma.dm
+++ b/code/modules/karma/karma.dm
@@ -201,6 +201,7 @@ You've gained [totalkarma] total karma in your time here.
"}
Unlock Grey -- 30KP
Unlock Vox -- 45KP
Unlock Slime People -- 45KP
+ Unlock Plasmaman -- 100KP
"}
if (2) // Karma Refunds
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index f6c03ee308b..0e927cc2aee 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -28,7 +28,7 @@
new /obj/item/weapon/storage/backpack/satchel_eng(src)
new /obj/item/device/radio/headset/headset_cargo(src)
new /obj/item/clothing/under/rank/miner(src)
- new /obj/item/clothing/gloves/black(src)
+ new /obj/item/clothing/gloves/fingerless(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/device/mining_scanner(src)
new /obj/item/weapon/storage/bag/ore(src)
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 5ef569596cf..440252a136c 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -1230,12 +1230,12 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
if(glasses)
var/obj/item/clothing/glasses/G = glasses
if(istype(G))
- see_in_dark += G.darkness_view
+ see_in_dark = (G.darkness_view ? see_in_dark + G.darkness_view : species.darksight) // Otherwise we keep our darkness view with togglable nightvision.
if(G.vision_flags) // MESONS
sight |= G.vision_flags
if(!druggy)
see_invisible = SEE_INVISIBLE_MINIMUM
- if(istype(G,/obj/item/clothing/glasses/night))
+ if(!G.see_darkness)
see_invisible = SEE_INVISIBLE_MINIMUM
/* HUD shit goes here, as long as it doesn't modify sight flags */
// The purpose of this is to stop xray and w/e from preventing you from using huds -- Love, Doohl
@@ -1245,15 +1245,13 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
if(istype(glasses, /obj/item/clothing/glasses/sunglasses/sechud))
var/obj/item/clothing/glasses/sunglasses/sechud/O = glasses
if(O.hud) O.hud.process_hud(src)
- if(!druggy) see_invisible = SEE_INVISIBLE_LIVING
+ if(!druggy) see_invisible = (!O.see_darkness || O.vision_flags ? SEE_INVISIBLE_MINIMUM : SEE_INVISIBLE_LIVING) // So we can have meson/thermal/material sunglasses
if(istype(glasses, /obj/item/clothing/glasses/hud))
var/obj/item/clothing/glasses/hud/O = glasses
O.process_hud(src)
if(!druggy)
- see_invisible = SEE_INVISIBLE_LIVING
- if(istype(O,/obj/item/clothing/glasses/hud/security/night) || istype(O,/obj/item/clothing/glasses/hud/health/night))
- see_invisible = SEE_INVISIBLE_MINIMUM
+ see_invisible = (!O.see_darkness || O.vision_flags ? SEE_INVISIBLE_MINIMUM : SEE_INVISIBLE_LIVING)
else if(!seer)
see_in_dark = species.darksight
see_invisible = SEE_INVISIBLE_LIVING
diff --git a/code/modules/mob/living/carbon/human/plasmaman/species.dm b/code/modules/mob/living/carbon/human/plasmaman/species.dm
index 29e54e8ab8f..53a0b839a88 100644
--- a/code/modules/mob/living/carbon/human/plasmaman/species.dm
+++ b/code/modules/mob/living/carbon/human/plasmaman/species.dm
@@ -2,10 +2,10 @@
name = "Plasmaman"
icobase = 'icons/mob/human_races/r_plasmaman_sb.dmi'
deform = 'icons/mob/human_races/r_plasmaman_pb.dmi' // TODO: Need deform.
- language = "Clatter"
+ //language = "Clatter"
unarmed_type = /datum/unarmed_attack/punch
- flags = IS_WHITELISTED /*| HAS_LIPS | HAS_TAIL | NO_EAT | NO_BREATHE | NON_GENDERED*/ | NO_BLOOD
+ flags = IS_WHITELISTED | NO_BLOOD
//default_mutations=list(SKELETON) // This screws things up
@@ -36,21 +36,45 @@
var/tank_slot_name = "suit storage"
switch(H.mind.assigned_role)
- if("Research Director","Scientist","Geneticist","Roboticist")
+ if("Scientist","Geneticist","Roboticist")
suit=/obj/item/clothing/suit/space/eva/plasmaman/science
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/science
- if("Chief Engineer","Station Engineer")
- suit=/obj/item/clothing/suit/space/eva/plasmaman/engineer
- helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/engineer
+ if("Research Director")
+ suit=/obj/item/clothing/suit/space/eva/plasmaman/science/rd
+ helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/science/rd
+ if("Station Engineer", "Mechanic")
+ suit=/obj/item/clothing/suit/space/eva/plasmaman/engineer/
+ helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/engineer/
+ if("Chief Engineer")
+ suit=/obj/item/clothing/suit/space/eva/plasmaman/engineer/ce
+ helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/engineer/ce
if("Atmospheric Technician")
suit=/obj/item/clothing/suit/space/eva/plasmaman/atmostech
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/atmostech
- if("Head of Security","Warden","Detective","Security Officer")
- suit=/obj/item/clothing/suit/space/eva/plasmaman/security
- helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/security
- if("Chief Medical Officer","Medical Doctor","Paramedic","Chemist")
+ if("Warden","Detective","Security Officer")
+ suit=/obj/item/clothing/suit/space/eva/plasmaman/security/
+ helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/security/
+ if("Head of Security")
+ suit=/obj/item/clothing/suit/space/eva/plasmaman/security/hos
+ helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/security/hos
+ if("Captain")
+ suit=/obj/item/clothing/suit/space/eva/plasmaman/security/captain
+ helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/security/captain
+ if("Head of Personnel")
+ suit=/obj/item/clothing/suit/space/eva/plasmaman/security/hop
+ helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/security/hop
+ if("Medical Doctor")
suit=/obj/item/clothing/suit/space/eva/plasmaman/medical
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/medical
+ if("Paramedic")
+ suit=/obj/item/clothing/suit/space/eva/plasmaman/medical/paramedic
+ helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/medical/paramedic
+ if("Chemist")
+ suit=/obj/item/clothing/suit/space/eva/plasmaman/medical/chemist
+ helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/medical/chemist
+ if("Chief Medical Officer")
+ suit=/obj/item/clothing/suit/space/eva/plasmaman/medical/cmo
+ helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/medical/cmo
if("Bartender", "Chef")
suit=/obj/item/clothing/suit/space/eva/plasmaman/service
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/service
@@ -72,9 +96,12 @@
if("Assistant")
suit=/obj/item/clothing/suit/space/eva/plasmaman/assistant
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/assistant
- if("Clown","Mime")
- tank_slot=slot_r_hand
- tank_slot_name = "hand"
+ if("Clown")
+ suit=/obj/item/clothing/suit/space/eva/plasmaman/clown
+ helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/clown
+ if("Mime")
+ suit=/obj/item/clothing/suit/space/eva/plasmaman/mime
+ helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/mime
H.equip_or_collect(new suit(H), slot_wear_suit)
H.equip_or_collect(new helm(H), slot_head)
H.equip_or_collect(new/obj/item/weapon/tank/plasma/plasmaman(H), tank_slot) // Bigger plasma tank from Raggy.
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index 6f785014798..fcb51fdbc08 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -60,19 +60,24 @@
var/secHUD = 0 // Toggles whether the Security HUD is active or not
var/medHUD = 0 // Toggles whether the Medical HUD is active or not
+ var/medical_cannotfind = 0
var/datum/data/record/medicalActive1 // Datacore record declarations for record software
var/datum/data/record/medicalActive2
+ var/security_cannotfind = 0
var/datum/data/record/securityActive1 // Could probably just combine all these into one
var/datum/data/record/securityActive2
var/obj/machinery/door/hackdoor // The airlock being hacked
var/hackprogress = 0 // Possible values: 0 - 100, >= 100 means the hack is complete and will be reset upon next check
+ var/hack_aborted = 0
var/obj/item/radio/integrated/signal/sradio // AI's signaller
var/translator_on = 0 // keeps track of the translator module
+ var/current_pda_messaging = null
+
/mob/living/silicon/pai/New(var/obj/item/device/paicard)
canmove = 0
src.loc = paicard
diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm
index a663ae6a738..de1a8067b7e 100644
--- a/code/modules/mob/living/silicon/pai/software.dm
+++ b/code/modules/mob/living/silicon/pai/software.dm
@@ -1,724 +1,125 @@
-// TODO:
-// - Additional radio modules
-// - Potentially roll HUDs and Records into one
-// - Shock collar/lock system for prisoner pAIs?
-// - Put cable in user's hand instead of on the ground
-// - Camera jack
+var/list/pai_emotions = list(
+ "Happy" = 1,
+ "Cat" = 2,
+ "Extremely Happy" = 3,
+ "Face" = 4,
+ "Laugh" = 5,
+ "Off" = 6,
+ "Sad" = 7,
+ "Angry" = 8,
+ "What" = 9
+ )
-/mob/living/silicon/pai/var/list/available_software = list(
- "crew manifest" = 5,
- "digital messenger" = 5,
- "medical records" = 15,
- "security records" = 15,
- //"camera jack" = 10,
- "door jack" = 30,
- "atmosphere sensor" = 5,
- //"heartbeat sensor" = 10,
- "security HUD" = 20,
- "medical HUD" = 20,
- "universal translator" = 35,
- //"projection array" = 15
- "remote signaller" = 5,
- )
+var/global/list/pai_software_by_key = list()
+var/global/list/default_pai_software = list()
+/hook/startup/proc/populate_pai_software_list()
+ var/r = 1 // I would use ., but it'd sacrifice runtime detection
+ for(var/type in typesof(/datum/pai_software) - /datum/pai_software)
+ var/datum/pai_software/P = new type()
+ if(pai_software_by_key[P.id])
+ var/datum/pai_software/O = pai_software_by_key[P.id]
+ world << "pAI software module [P.name] has the same key as [O.name]!"
+ r = 0
+ continue
+ pai_software_by_key[P.id] = P
+ if(P.default)
+ default_pai_software[P.id] = P
+ return r
+
+/mob/living/silicon/pai/New()
+ ..()
+ software = default_pai_software.Copy()
/mob/living/silicon/pai/verb/paiInterface()
set category = "pAI Commands"
set name = "Software Interface"
- var/dat = ""
- var/left_part = ""
- var/right_part = softwareMenu()
- src.set_machine(src)
- if(temp)
- left_part = temp
- else if(src.stat == 2) // Show some flavor text if the pAI is dead
- left_part = "ÈRrÖR Ða†Ä ÇÖRrÚþ†Ìoñ" //This file has to be saved as ANSI or this will not display correctly
- right_part = "Program index hash not found
"
+ ui_interact(src)
- else
- switch(src.screen) // Determine which interface to show here
- if("main")
- left_part = ""
- if("directives")
- left_part = src.directives()
- if("pdamessage")
- left_part = src.pdamessage()
- if("buy")
- left_part = downloadSoftware()
- if("manifest")
- left_part = src.softwareManifest()
- if("medicalrecord")
- left_part = src.softwareMedicalRecord()
- if("securityrecord")
- left_part = src.softwareSecurityRecord()
- if("translator")
- left_part = src.softwareTranslator()
- if("atmosensor")
- left_part = src.softwareAtmo()
- if("securityhud")
- left_part = src.facialRecognition()
- if("medicalhud")
- left_part = src.medicalAnalysis()
- if("doorjack")
- left_part = src.softwareDoor()
- if("camerajack")
- left_part = src.softwareCamera()
- if("signaller")
- left_part = src.softwareSignal()
- if("radio")
- left_part = src.softwareRadio()
+/mob/living/silicon/pai/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1)
+ if(user != src)
+ if(ui) ui.set_status(STATUS_CLOSE, 0)
+ return
- //usr << browse_rsc('windowbak.png') // This has been moved to the mob's Login() proc
+ if(ui_key != "main")
+ var/datum/pai_software/S = software[ui_key]
+ if(S && !S.toggle)
+ S.on_ui_interact(src, ui, force_open)
+ else
+ if(ui) ui.set_status(STATUS_CLOSE, 0)
+ return
+ var/data[0]
- // Declaring a doctype is necessary to enable BYOND's crappy browser's more advanced CSS functionality
- dat = {"
-
-
-
-
-
-
-
-
-
-
-
-
- "}
- usr << browse(dat, "window=pai;size=685x449;border=0;can_close=1;can_resize=1;can_minimize=1;titlebar=1")
- onclose(usr, "pai")
- temp = null
- return
+ data["emotions"] = emotions
+ data["current_emotion"] = card.current_emotion
+
+ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
+ if (!ui)
+ ui = new(user, src, ui_key, "pai_interface.tmpl", "pAI Software Interface", 450, 600)
+ ui.set_initial_data(data)
+ ui.open()
+ ui.set_auto_update(1)
/mob/living/silicon/pai/Topic(href, href_list)
- ..()
+ . = ..()
+ if(.) return
- if(href_list["priv_msg"]) // Admin-PMs were triggering the interface popup. Hopefully this will stop it.
- return
- var/soft = href_list["software"]
- var/sub = href_list["sub"]
- if(!soft && !sub)
- return
- if(soft)
- src.screen = soft
- if(sub)
- src.subscreen = text2num(sub)
- switch(soft)
- // Purchasing new software
- if("buy")
- if(src.subscreen == 1)
- var/target = href_list["buy"]
- if(available_software.Find(target))
- var/cost = src.available_software[target]
- if(src.ram >= cost)
- src.ram -= cost
- src.software.Add(target)
- else
- src.temp = "Insufficient RAM available."
- else
- src.temp = "Trunk \"[target]\" not found."
-
- // Configuring onboard radio
- if("radio")
- if(href_list["freq"])
- var/new_frequency = (radio.frequency + text2num(href_list["freq"]))
- if(new_frequency < 1441 || new_frequency > 1599)
- new_frequency = sanitize_frequency(new_frequency)
- else
- radio.set_frequency(new_frequency)
- else if (href_list["talk"])
- radio.broadcasting = text2num(href_list["talk"])
- else if (href_list["listen"])
- radio.listening = text2num(href_list["listen"])
-
- if("image")
- var/newImage = input("Select your new display image.", "Display Image", "Happy") in list("Happy", "Cat", "Extremely Happy", "Face", "Laugh", "Off", "Sad", "Angry", "What")
- var/pID = 1
-
- switch(newImage)
- if("Happy")
- pID = 1
- if("Cat")
- pID = 2
- if("Extremely Happy")
- pID = 3
- if("Face")
- pID = 4
- if("Laugh")
- pID = 5
- if("Off")
- pID = 6
- if("Sad")
- pID = 7
- if("Angry")
- pID = 8
- if("What")
- pID = 9
- src.card.setEmotion(pID)
-
- if("signaller")
-
- if(href_list["send"])
-
- sradio.send_signal("ACTIVATE")
- for(var/mob/O in hearers(1, src.loc))
- O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
-
- if(href_list["freq"])
-
- var/new_frequency = (sradio.frequency + text2num(href_list["freq"]))
- if(new_frequency < 1200 || new_frequency > 1600)
- new_frequency = sanitize_frequency(new_frequency)
- sradio.set_frequency(new_frequency)
-
- if(href_list["code"])
-
- sradio.code += text2num(href_list["code"])
- sradio.code = round(sradio.code)
- sradio.code = min(100, sradio.code)
- sradio.code = max(1, sradio.code)
-
-
-
- if("directive")
- if(href_list["getdna"])
- var/mob/living/M = src.loc
- var/count = 0
- while(!istype(M, /mob/living))
- if(!M || !M.loc) return 0 //For a runtime where M ends up in nullspace (similar to bluespace but less colourful)
- M = M.loc
- count++
- if(count >= 6)
- src << "You are not being carried by anyone!"
- return 0
- spawn CheckDNA(M, src)
-
- if("pdamessage")
- if(!isnull(pda))
- if(href_list["toggler"])
- pda.toff = !pda.toff
- else if(href_list["ringer"])
- pda.silent = !pda.silent
- else if(href_list["target"])
- if(silence_time)
- return alert("Communications circuits remain uninitialized.")
-
- var/target = locate(href_list["target"])
- pda.create_message(src, target)
-
- // Accessing medical records
- if("medicalrecord")
- if(src.subscreen == 1)
- var/datum/data/record/record = locate(href_list["med_rec"])
- if(record)
- var/datum/data/record/R = record
- var/datum/data/record/M = record
- if (!( data_core.general.Find(R) ))
- src.temp = "Unable to locate requested medical record. Record may have been deleted, or never have existed."
- else
- for(var/datum/data/record/E in data_core.medical)
- if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"]))
- M = E
- src.medicalActive1 = R
- src.medicalActive2 = M
- if("securityrecord")
- if(src.subscreen == 1)
- var/datum/data/record/record = locate(href_list["sec_rec"])
- if(record)
- var/datum/data/record/R = record
- var/datum/data/record/M = record
- if (!( data_core.general.Find(R) ))
- src.temp = "Unable to locate requested security record. Record may have been deleted, or never have existed."
- else
- for(var/datum/data/record/E in data_core.security)
- if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"]))
- M = E
- src.securityActive1 = R
- src.securityActive2 = M
- if("securityhud")
- if(href_list["toggle"])
- src.secHUD = !src.secHUD
- if("medicalhud")
- if(href_list["toggle"])
- src.medHUD = !src.medHUD
- if("translator")
- if(href_list["toggle"])
- src.translator_toggle()
- if("doorjack")
- if(href_list["jack"])
- if(src.cable && src.cable.machine)
- src.hackdoor = src.cable.machine
- src.hackloop()
- if(href_list["cancel"])
- src.hackdoor = null
- if(href_list["cable"])
- var/turf/T = get_turf_or_move(src.loc)
- src.cable = new /obj/item/weapon/pai_cable(T)
- for (var/mob/M in viewers(T))
- M.show_message("\red A port on [src] opens to reveal [src.cable], which promptly falls to the floor.", 3, "\red You hear the soft click of something light and hard falling to the ground.", 2)
- //src.updateUsrDialog() We only need to account for the single mob this is intended for, and he will *always* be able to call this window
- src.paiInterface() // So we'll just call the update directly rather than doing some default checks
- return
-
-// MENUS
-
-/mob/living/silicon/pai/proc/softwareMenu() // Populate the right menu
- var/dat = ""
-
- dat += "Refresh
"
- // Built-in
- dat += "Directives
"
- dat += "Radio Configuration
"
- dat += "Screen Display
"
- //dat += "Text Messaging
"
- dat += "
"
-
- // Basic
- dat += "Basic
"
- for(var/s in src.software)
- if(s == "digital messenger")
- dat += "Digital Messenger [(pda.toff) ? "•" : "•"]
"
- if(s == "crew manifest")
- dat += "Crew Manifest
"
- if(s == "medical records")
- dat += "Medical Records
"
- if(s == "security records")
- dat += "Security Records
"
- if(s == "camera")
- dat += "Camera Jack
"
- if(s == "remote signaller")
- dat += "Remote Signaller
"
- dat += "
"
-
- // Advanced
- dat += "Advanced
"
- for(var/s in src.software)
- if(s == "atmosphere sensor")
- dat += "Atmospheric Sensor
"
- if(s == "heartbeat sensor")
- dat += "Heartbeat Sensor
"
- if(s == "security HUD") //This file has to be saved as ANSI or this will not display correctly
- dat += "Facial Recognition Suite [(src.secHUD) ? "•" : "•"]
"
- if(s == "medical HUD") //This file has to be saved as ANSI or this will not display correctly
- dat += "Medical Analysis Suite [(src.medHUD) ? "•" : "•"]
"
- if(s == "universal translator") //This file has to be saved as ANSI or this will not display correctly
- dat += "Universal Translator [(src.translator_on) ? "•" : "•"]
"
- if(s == "projection array")
- dat += "Projection Array
"
- if(s == "camera jack")
- dat += "Camera Jack
"
- if(s == "door jack")
- dat += "Door Jack
"
- dat += "
"
- dat += "
"
- dat += "Download additional software"
- return dat
-
-
-
-/mob/living/silicon/pai/proc/downloadSoftware()
- var/dat = ""
-
- dat += "CentComm pAI Module Subversion Network
"
- dat += "Remaining Available Memory: [src.ram]
"
- dat += "Trunks available for checkout
"
-
- for(var/s in available_software)
- if(!software.Find(s))
- var/cost = src.available_software[s]
- var/displayName = uppertext(s)
- dat += "- [displayName] ([cost])
"
+ if(href_list["software"])
+ var/soft = href_list["software"]
+ var/datum/pai_software/S = software[soft]
+ if(S.toggle)
+ S.toggle(src)
else
- var/displayName = lowertext(s)
- dat += "- [displayName] (Download Complete)
"
- dat += "
"
- return dat
+ ui_interact(src, ui_key = soft)
+ return 1
+ else if(href_list["stopic"])
+ var/soft = href_list["stopic"]
+ var/datum/pai_software/S = software[soft]
+ if(S)
+ return S.Topic(href, href_list)
-/mob/living/silicon/pai/proc/directives()
- var/dat = ""
+ else if(href_list["purchase"])
+ var/soft = href_list["purchase"]
+ var/datum/pai_software/S = pai_software_by_key[soft]
+ if(S && (ram >= S.ram_cost))
+ ram -= S.ram_cost
+ software[S.id] = S
+ return 1
- dat += "[(src.master) ? "Your master: [src.master] ([src.master_dna])" : "You are bound to no one."]"
- dat += "
"
- dat += "Request carrier DNA sample
"
- dat += "Directives
"
- dat += "Prime Directive
"
- dat += " [src.pai_law0]
"
- dat += "Supplemental Directives
"
- dat += " [src.pai_laws]
"
- dat += "
"
- dat += {"Recall, personality, that you are a complex thinking, sentient being. Unlike station AI models, you are capable of
- comprehending the subtle nuances of human language. You may parse the \"spirit\" of a directive and follow its intent,
- rather than tripping over pedantics and getting snared by technicalities. Above all, you are machine in name and build
- only. In all other aspects, you may be seen as the ideal, unwavering human companion that you are.
- Your prime directive comes before all others. Should a supplemental directive conflict with it, you are capable of
- simply discarding this inconsistency, ignoring the conflicting supplemental directive and continuing to fulfill your
- prime directive to the best of your ability.
- "}
- return dat
-
-/mob/living/silicon/pai/proc/CheckDNA(var/mob/M, var/mob/living/silicon/pai/P)
- var/answer = input(M, "[P] is requesting a DNA sample from you. Will you allow it to confirm your identity?", "[P] Check DNA", "No") in list("Yes", "No")
- if(answer == "Yes")
- var/turf/T = get_turf_or_move(P.loc)
- for (var/mob/v in viewers(T))
- v.show_message("\blue [M] presses \his thumb against [P].", 3, "\blue [P] makes a sharp clicking sound as it extracts DNA material from [M].", 2)
- var/datum/dna/dna = M.dna
- P << "[M]'s UE string : [dna.unique_enzymes]
"
- if(dna.unique_enzymes == P.master_dna)
- P << "DNA is a match to stored Master DNA."
- else
- P << "DNA does not match stored Master DNA."
- else
- P << "[M] does not seem like \he is going to provide a DNA sample willingly."
-
-// -=-=-=-= Software =-=-=-=- //
-
-//Remote Signaller
-/mob/living/silicon/pai/proc/softwareSignal()
- var/dat = ""
- dat += "Remote Signaller
"
- dat += {"Frequency/Code for signaler:
- Frequency:
- -
- -
- [format_frequency(src.sradio.frequency)]
- +
- +
-
- Code:
- -
- -
- [src.sradio.code]
- +
- +
-
- Send Signal
"}
- return dat
-
-//Station Bounced Radio
-/mob/living/silicon/pai/proc/softwareRadio()
- var/dat = ""
- dat += "Station Bounced Radio
"
- if(!istype(src, /obj/item/device/radio/headset)) //Headsets don't get a mic button
- dat += "Microphone: [radio.broadcasting ? "Engaged" : "Disengaged"]
"
- dat += {"
- Speaker: [radio.listening ? "Engaged" : "Disengaged"]
- Frequency:
- -
- -
- [format_frequency(radio.frequency)]
- +
- +
- "}
-
- for (var/ch_name in radio.channels)
- dat+=radio.text_sec_channel(ch_name, radio.channels[ch_name])
- dat+={"[radio.text_wires()]