diff --git a/baystation12.dme b/baystation12.dme
index f1a7f10e973..b9d3fd157d8 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -756,6 +756,7 @@
#include "code\game\objects\structures\simple_doors.dm"
#include "code\game\objects\structures\tank_dispenser.dm"
#include "code\game\objects\structures\target_stake.dm"
+#include "code\game\objects\structures\tranqcabinet.dm"
#include "code\game\objects\structures\transit_tubes.dm"
#include "code\game\objects\structures\under_wardrobe.dm"
#include "code\game\objects\structures\watercloset.dm"
diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm
index cd609cff6ac..1d5f059c6e0 100644
--- a/code/datums/supplypacks.dm
+++ b/code/datums/supplypacks.dm
@@ -708,17 +708,28 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
/datum/supply_packs/weapons
name = "Weapons crate"
+ contains = list(/obj/item/weapon/gun/energy/rifle,
+ /obj/item/weapon/gun/energy/rifle,
+ /obj/item/weapon/gun/projectile/sec,
+ /obj/item/weapon/gun/projectile/sec,
+ /obj/item/ammo_magazine/c45m,
+ /obj/item/ammo_magazine/c45m)
+ cost = 80
+ containertype = /obj/structure/closet/crate/secure/weapon
+ containername = "Weapons crate"
+ access = access_security
+ group = "Security"
+
+/datum/supply_packs/nonlethals
+ name = "Nonlethal Weapons crate"
contains = list(/obj/item/weapon/melee/baton,
/obj/item/weapon/melee/baton,
- /obj/item/weapon/gun/energy/gun,
- /obj/item/weapon/gun/energy/gun,
/obj/item/weapon/gun/energy/taser,
/obj/item/weapon/gun/energy/taser,
- /obj/item/weapon/gun/projectile/sec,
- /obj/item/weapon/gun/projectile/sec,
/obj/item/weapon/storage/box/flashbangs,
- /obj/item/weapon/storage/box/flashbangs)
- cost = 40
+ /obj/item/weapon/storage/box/flashbangs,
+ /obj/item/ammo_magazine/tranq)
+ cost = 60
containertype = /obj/structure/closet/crate/secure/weapon
containername = "Weapons crate"
access = access_security
diff --git a/code/game/antagonist/outsider/commando.dm b/code/game/antagonist/outsider/commando.dm
index baa9c9d3c32..0105aa32e1c 100644
--- a/code/game/antagonist/outsider/commando.dm
+++ b/code/game/antagonist/outsider/commando.dm
@@ -36,7 +36,7 @@ var/datum/antagonist/deathsquad/mercenary/commandos
player.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword(player), slot_r_store)
player.equip_to_slot_or_del(new /obj/item/weapon/rig/merc(player), slot_back)
player.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/automatic/rifle/sts35(player), slot_l_hand)
-
+
var/obj/item/weapon/storage/belt/military/syndie_belt = new(player)
syndie_belt.contents += new /obj/item/ammo_magazine/c762
syndie_belt.contents += new /obj/item/ammo_magazine/c762
@@ -53,3 +53,4 @@ var/datum/antagonist/deathsquad/mercenary/commandos
id.access |= get_all_accesses()
id.icon_state = "centcom"
create_radio(SYND_FREQ, player)
+ player.faction = "syndicate"
\ No newline at end of file
diff --git a/code/game/antagonist/outsider/mercenary.dm b/code/game/antagonist/outsider/mercenary.dm
index 74c61797e98..9ff5759bb69 100644
--- a/code/game/antagonist/outsider/mercenary.dm
+++ b/code/game/antagonist/outsider/mercenary.dm
@@ -56,6 +56,7 @@ var/datum/antagonist/mercenary/mercs
player.put_in_hands(U)
player.update_icons()
+ player.faction = "syndicate"
create_id("Mercenary", player)
create_radio(SYND_FREQ, player)
diff --git a/code/game/antagonist/outsider/raider.dm b/code/game/antagonist/outsider/raider.dm
index 8388d8949d1..c4631debe7c 100644
--- a/code/game/antagonist/outsider/raider.dm
+++ b/code/game/antagonist/outsider/raider.dm
@@ -93,9 +93,11 @@ var/datum/antagonist/raider/raiders
/obj/item/weapon/gun/projectile/pistol,
/obj/item/weapon/gun/projectile/revolver,
/obj/item/weapon/gun/projectile/revolver/deckard,
- /obj/item/weapon/gun/projectile/pirate
+ /obj/item/weapon/gun/projectile/pirate,
+ /obj/item/weapon/gun/projectile/tanto
)
+
var/list/raider_holster = list(
/obj/item/clothing/accessory/holster/armpit,
/obj/item/clothing/accessory/holster/waist,
diff --git a/code/game/antagonist/station/renegade.dm b/code/game/antagonist/station/renegade.dm
index f4eacfdfca5..3c141d309c4 100644
--- a/code/game/antagonist/station/renegade.dm
+++ b/code/game/antagonist/station/renegade.dm
@@ -31,7 +31,8 @@ var/datum/antagonist/renegade/renegades
/obj/item/weapon/gun/projectile/automatic/c20r,
/obj/item/weapon/gun/projectile/automatic/tommygun,
/obj/item/weapon/gun/projectile/automatic/mini_uzi,
- /obj/item/weapon/gun/energy/crossbow
+ /obj/item/weapon/gun/energy/crossbow,
+ /obj/item/weapon/gun/projectile/tanto
)
/datum/antagonist/renegade/New()
diff --git a/code/game/antagonist/station/traitor.dm b/code/game/antagonist/station/traitor.dm
index 3b3f8214f8d..ee7877faccf 100644
--- a/code/game/antagonist/station/traitor.dm
+++ b/code/game/antagonist/station/traitor.dm
@@ -81,6 +81,7 @@ var/datum/antagonist/traitor/traitors
if(!..())
return 0
+ traitor_mob.faction = "syndicate"
spawn_uplink(traitor_mob)
// Tell them about people they might want to contact.
var/mob/living/carbon/human/M = get_nt_opposed()
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index c226d64f2cf..e0b1159928e 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -58,7 +58,8 @@ var/global/list/additional_antag_types = list()
new/datum/uplink_item(/obj/item/weapon/storage/box/syndicate, 10, "Mercenary Bundle", "BU"),
new/datum/uplink_item(/obj/item/weapon/gun/projectile/heavysniper, 12, "Anti-materiel Rifle", "AMR"),
new/datum/uplink_item(/obj/item/clothing/gloves/force/syndicate, 4, "Force Gloves", "FG"),
- new/datum/uplink_item(/obj/item/weapon/gun/projectile/automatic/tommygun, 7, "Tommy Gun", "TMG")
+ new/datum/uplink_item(/obj/item/weapon/gun/projectile/automatic/tommygun, 7, "Tommy Gun", "TMG"),
+ new/datum/uplink_item(/obj/item/weapon/grenade/spawnergrenade/manhacks, 2, "Manhack Delivery Grenade", "MH"),
),
"Stealthy and Inconspicuous Weapons" = list(
new/datum/uplink_item(/obj/item/weapon/soap/syndie, 1, "Subversive Soap", "SP"),
diff --git a/code/game/objects/items/weapons/grenades/spawnergrenade.dm b/code/game/objects/items/weapons/grenades/spawnergrenade.dm
index 6adea8e2f51..7251dfbac7e 100644
--- a/code/game/objects/items/weapons/grenades/spawnergrenade.dm
+++ b/code/game/objects/items/weapons/grenades/spawnergrenade.dm
@@ -33,6 +33,7 @@
/obj/item/weapon/grenade/spawnergrenade/manhacks
name = "manhack delivery grenade"
+ desc = "It is set to detonate in 5 seconds. It will unleash a swarm of deadly manhack robots that will attack everyone but you and your allies."
spawner_type = /mob/living/simple_animal/hostile/viscerator
deliveryamt = 5
origin_tech = "materials=3;magnets=4;syndicate=4"
diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm
index c1f31e82c00..2fb22416f81 100644
--- a/code/game/objects/items/weapons/melee/energy.dm
+++ b/code/game/objects/items/weapons/melee/energy.dm
@@ -70,7 +70,7 @@
throw_range = 10
w_class = 5
flags = CONDUCT | NOSHIELD | NOBLOODY
- origin_tech = "magnets=3;combat=4;syndicate=4"
+ origin_tech = "combat=6;phorontech=4;materials=7;syndicate=4"
attack_verb = list("stabbed", "chopped", "sliced", "cleaved", "slashed", "cut")
sharp = 1
edge = 1
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 fa462bca73a..30cb97ba573 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
@@ -123,6 +123,7 @@
new /obj/item/clothing/accessory/holster/waist(src)
new /obj/item/weapon/melee/telebaton(src)
new /obj/item/clothing/head/beret/sec/hos(src)
+ new /obj/item/ammo_magazine/tranq(src)
return
diff --git a/code/game/objects/structures/tranqcabinet.dm b/code/game/objects/structures/tranqcabinet.dm
new file mode 100644
index 00000000000..81ce419e6a5
--- /dev/null
+++ b/code/game/objects/structures/tranqcabinet.dm
@@ -0,0 +1,62 @@
+/obj/structure/tranqcabinet
+ name = "tranquilizer rifle cabinet"
+ desc = "A wall mounted cabinet designed to hold a tranquilizer rifle."
+ icon = 'icons/obj/closet.dmi'
+ icon_state = "tranq_closed"
+ anchored = 1
+ density = 0
+ var/obj/item/weapon/gun/projectile/heavysniper/tranq/has_tranq
+ var/opened = 0
+
+/obj/structure/tranqcabinet/New()
+ ..()
+ has_tranq = new/obj/item/weapon/gun/projectile/heavysniper/tranq(src)
+
+/obj/structure/tranqcabinet/attackby(obj/item/O, mob/user)
+ if(isrobot(user))
+ return
+ if(istype(O, /obj/item/weapon/gun/projectile/heavysniper/tranq))
+ if(!has_tranq && opened)
+ user.remove_from_mob(O)
+ contents += O
+ has_tranq = O
+ user << "You place [O] in [src]."
+ else
+ opened = !opened
+ else
+ opened = !opened
+ update_icon()
+
+
+/obj/structure/tranqcabinet/attack_hand(mob/user)
+ if(isrobot(user))
+ return
+ if (!user.can_use_hand())
+ return
+ if(has_tranq)
+ user.put_in_hands(has_tranq)
+ user << "You take [has_tranq] from [src]."
+ has_tranq = null
+ opened = 1
+ else
+ opened = !opened
+ update_icon()
+
+/obj/structure/tranqcabinet/attack_tk(mob/user)
+ if(has_tranq)
+ has_tranq.forceMove(loc)
+ user << "You telekinetically remove [has_tranq] from [src]."
+ has_tranq = null
+ opened = 1
+ else
+ opened = !opened
+ update_icon()
+
+/obj/structure/tranqcabinet/update_icon()
+ if(!opened)
+ icon_state = "tranq_closed"
+ return
+ if(has_tranq)
+ icon_state = "tranq_full"
+ else
+ icon_state = "tranq_empty"
\ No newline at end of file
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 3a57510f94b..3a182540088 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -1274,6 +1274,10 @@ datum/preferences
var/new_age = input(user, "Choose your character's age:\n([getMinAge()]-[getMaxAge()])", "Character Preference") as num|null
if(new_age)
age = max(min( round(text2num(new_age)), getMaxAge()),getMinAge())
+ if(age > getMaxAge())
+ age = getMaxAge()
+ if(age < getMinAge())
+ age = getMinAge()
if("species")
user << browse(null, "window=species")
@@ -1324,6 +1328,11 @@ datum/preferences
s_tone = 0
+ if(age > getMaxAge())
+ age = getMaxAge()
+ if(age < getMinAge())
+ age = getMinAge()
+
if("language")
var/languages_available
var/list/new_languages = list("None")
diff --git a/code/modules/client/preferences_gear.dm b/code/modules/client/preferences_gear.dm
index 9093f005c88..4a675cbb82d 100644
--- a/code/modules/client/preferences_gear.dm
+++ b/code/modules/client/preferences_gear.dm
@@ -78,14 +78,14 @@ var/global/list/gear_datums = list()
path = /obj/item/clothing/head/beret/sec/alt
cost = 1
slot = slot_head
- allowed_roles = list("Security Officer","Head of Security","Warden")
+ allowed_roles = list("Security Officer","Head of Security","Warden","Security Cadet","Detective")
/datum/gear/eng_beret
display_name = "beret, engie-orange"
path = /obj/item/clothing/head/beret/eng
cost = 1
slot = slot_head
-// allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer")
+ allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Engineering Apprentice")
/datum/gear/purp_beret
display_name = "beret, purple"
@@ -104,7 +104,7 @@ var/global/list/gear_datums = list()
path = /obj/item/clothing/head/beret/sec
cost = 1
slot = slot_head
- allowed_roles = list("Security Officer","Head of Security","Warden")
+ allowed_roles = list("Security Officer","Head of Security","Warden","Security Cadet","Detective")
/datum/gear/bcap
display_name = "cap, blue"
@@ -129,7 +129,7 @@ var/global/list/gear_datums = list()
path = /obj/item/clothing/head/soft/sec/corp
cost = 1
slot = slot_head
- allowed_roles = list("Security Officer","Head of Security","Warden")
+ allowed_roles = list("Security Officer","Head of Security","Warden","Security Cadet","Detective")
/datum/gear/gcap
display_name = "cap, green"
@@ -190,24 +190,28 @@ var/global/list/gear_datums = list()
path = /obj/item/clothing/head/hardhat/dblue
cost = 2
slot = slot_head
+ allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Engineering Apprentice")
/datum/gear/ohardhat
display_name = "hardhat, orange"
path = /obj/item/clothing/head/hardhat/orange
cost = 2
slot = slot_head
+ allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Engineering Apprentice")
/datum/gear/rhardhat
display_name = "hardhat, red"
path = /obj/item/clothing/head/hardhat/red
cost = 2
slot = slot_head
+ allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Engineering Apprentice")
/datum/gear/yhardhat
display_name = "hardhat, yellow"
path = /obj/item/clothing/head/hardhat
cost = 2
slot = slot_head
+ allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Engineering Apprentice")
/datum/gear/boater
display_name = "hat, boatsman"
@@ -246,8 +250,7 @@ var/global/list/gear_datums = list()
cost = 1
slot = slot_head
-// This was sprited and coded specifically for Zhan-Khazan characters. Before you
-// decide that it's 'not even Taj themed' maybe you should read the wiki, gamer. ~ Z
+//lol fuck bay ~LordFowl
/datum/gear/zhan_scarf
display_name = "Zhan headscarf"
path = /obj/item/clothing/head/tajaran/scarf
@@ -304,27 +307,28 @@ var/global/list/gear_datums = list()
path = /obj/item/clothing/glasses/hud/security
cost = 1
slot = slot_glasses
- allowed_roles = list("Security Officer","Head of Security","Warden")
+ allowed_roles = list("Security Officer","Head of Security","Warden","Security Cadet","Detective")
/datum/gear/thugshades
display_name = "Sunglasses, Fat"
path = /obj/item/clothing/glasses/sunglasses/big
cost = 1
slot = slot_glasses
- allowed_roles = list("Security Officer","Head of Security","Warden","Detective","Internal Affairs Agent","Quartermaster","Head of Personnel","Captain")
+ allowed_roles = list("Security Officer","Head of Security","Warden","Detective","Internal Affairs Agent","Quartermaster","Head of Personnel","Captain","Security Cadet")
/datum/gear/prescriptionsun
display_name = "sunglasses, presciption"
path = /obj/item/clothing/glasses/sunglasses/prescription
cost = 2
slot = slot_glasses
- allowed_roles = list("Security Officer","Head of Security","Warden","Detective","Internal Affairs Agent","Quartermaster","Head of Personnel","Captain")
+ allowed_roles = list("Security Officer","Head of Security","Warden","Detective","Internal Affairs Agent","Quartermaster","Head of Personnel","Captain","Security Cadet")
/datum/gear/blindfold
display_name = "vaurca blindfold"
path = /obj/item/clothing/glasses/sunglasses/blinders
cost = 2
slot = slot_glasses
+ whitelisted = "Vaurca"
// Mask
@@ -533,7 +537,7 @@ var/global/list/gear_datums = list()
path = /obj/item/clothing/under/rank/security/corp
cost = 1
slot = slot_w_uniform
- allowed_roles = list("Security Officer","Head of Security","Warden")
+ allowed_roles = list("Security Officer","Head of Security","Warden","Security Cadet","Detective")
/datum/gear/uniform_hop
display_name = "uniform, HoP's dress"
@@ -554,7 +558,7 @@ var/global/list/gear_datums = list()
path = /obj/item/clothing/under/rank/security/navyblue
cost = 1
slot = slot_w_uniform
- allowed_roles = list("Security Officer","Head of Security","Warden")
+ allowed_roles = list("Security Officer","Head of Security","Warden","Security Cadet","Detective")
//medical scrubs
@@ -563,24 +567,28 @@ var/global/list/gear_datums = list()
path = /obj/item/clothing/under/rank/medical/blue
slot = slot_w_uniform
cost = 1
+ allowed_roles = list("Scientist","Chief Medical Officer","Medical Doctor","Geneticist","Paramedic","Nursing Intern","Xenobiologist","Roboticist","Research Director","Detective",)
/datum/gear/greenscrub
display_name = "medical scrubs, green"
path = /obj/item/clothing/under/rank/medical/green
slot = slot_w_uniform
cost = 1
+ allowed_roles = list("Scientist","Chief Medical Officer","Medical Doctor","Geneticist","Paramedic","Nursing Intern","Xenobiologist","Roboticist","Research Director","Detective",)
/datum/gear/purplescrub
display_name = "medical scrubs, purple"
path = /obj/item/clothing/under/rank/medical/purple
slot = slot_w_uniform
cost = 1
+ allowed_roles = list("Scientist","Chief Medical Officer","Medical Doctor","Geneticist","Paramedic","Nursing Intern","Xenobiologist","Roboticist","Research Director","Detective",)
/datum/gear/blackscrub
display_name = "medical scrubs, black"
path = /obj/item/clothing/under/rank/medical/black
slot = slot_w_uniform
cost = 1
+ allowed_roles = list("Scientist","Chief Medical Officer","Medical Doctor","Geneticist","Paramedic","Nursing Intern","Xenobiologist","Roboticist","Research Director","Detective",)
// Attachments
@@ -589,30 +597,35 @@ var/global/list/gear_datums = list()
path = /obj/item/clothing/accessory/armband/cargo
slot = slot_tie
cost = 1
+ allowed_roles = list("Cargo Technician","Quartermaster","Head of Personnel","Shaft Miner")
/datum/gear/armband_emt
display_name = "armband, EMT"
path = /obj/item/clothing/accessory/armband/medgreen
slot = slot_tie
cost = 1
+ allowed_roles = list("Paramedic","Chief Medical Officer")
/datum/gear/armband_engineering
display_name = "armband, engineering"
path = /obj/item/clothing/accessory/armband/engine
slot = slot_tie
cost = 1
+ allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Engineering Apprentice")
/datum/gear/armband_hydroponics
display_name = "armband, hydroponics"
path = /obj/item/clothing/accessory/armband/hydro
slot = slot_tie
cost = 1
+ allowed_roles = list("Head of Personnel","Gardener")
/datum/gear/armband_medical
display_name = "armband, medical"
path = /obj/item/clothing/accessory/armband/med
slot = slot_tie
cost = 1
+ allowed_roles = list("Chief Medical Officer","Medical Doctor","Paramedic","Nursing Intern","Psychiatrist","Chemist",)
/datum/gear/armband
display_name = "armband, red"
@@ -625,6 +638,7 @@ var/global/list/gear_datums = list()
path = /obj/item/clothing/accessory/armband/science
slot = slot_tie
cost = 1
+ allowed_roles = list("Research Director","Scientist","Xenobiologist","Roboticist","Lab Assistant","Geneticist")
/datum/gear/armband_movement
display_name = "armband, synthetic intelligence movement"
@@ -637,21 +651,21 @@ var/global/list/gear_datums = list()
path = /obj/item/clothing/accessory/holster/armpit
slot = slot_tie
cost = 1
- allowed_roles = list("Captain", "Head of Personnel", "Security Officer", "Warden", "Head of Security","Detective")
+ allowed_roles = list("Captain", "Head of Personnel", "Security Officer", "Warden", "Head of Security","Detective","Security Cadet")
/datum/gear/hip
display_name = "holster, hip"
path = /obj/item/clothing/accessory/holster/hip
slot = slot_tie
cost = 1
- allowed_roles = list("Captain", "Head of Personnel", "Security Officer", "Warden", "Head of Security", "Detective")
+ allowed_roles = list("Captain", "Head of Personnel", "Security Officer", "Warden", "Head of Security","Detective","Security Cadet")
/datum/gear/waist
display_name = "holster, waist"
path = /obj/item/clothing/accessory/holster/waist
slot = slot_tie
cost = 1
- allowed_roles = list("Captain", "Head of Personnel", "Security Officer", "Warden", "Head of Security", "Detective")
+ allowed_roles = list("Captain", "Head of Personnel", "Security Officer", "Warden", "Head of Security","Detective","Security Cadet")
/datum/gear/tie_blue
display_name = "tie, blue"
@@ -676,14 +690,14 @@ var/global/list/gear_datums = list()
path = /obj/item/clothing/accessory/storage/brown_vest
slot = slot_tie
cost = 1
- allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer")
+ allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Engineering Apprentice")
/datum/gear/black_vest
display_name = "webbing, security"
path = /obj/item/clothing/accessory/storage/black_vest
slot = slot_tie
cost = 1
- allowed_roles = list("Security Officer","Head of Security","Warden")
+ allowed_roles = list("Security Officer","Head of Security","Warden","Security Cadet","Detective")
/datum/gear/webbing
display_name = "webbing, simple"
@@ -734,6 +748,7 @@ var/global/list/gear_datums = list()
path = /obj/item/clothing/suit/storage/hazardvest
cost = 2
slot = slot_wear_suit
+ allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Engineering Apprentice")
/datum/gear/hoodie
display_name = "hoodie, grey"
@@ -830,7 +845,7 @@ var/global/list/gear_datums = list()
path = /obj/item/clothing/suit/unathi/robe
cost = 1
slot = slot_wear_suit
-// whitelisted = "Unathi" // You don't have a monopoly on a robe!
+ whitelisted = "Unathi"
/datum/gear/blue_lawyer_jacket
display_name = "suit jacket, blue"
@@ -857,11 +872,11 @@ var/global/list/gear_datums = list()
slot = slot_wear_suit
/datum/gear/zhan_furs
- display_name = "Zhan-Khazan furs (Tajaran)"
+ display_name = "Zhan-Khazan furs"
path = /obj/item/clothing/suit/tajaran/furs
cost = 1
slot = slot_wear_suit
- whitelisted = "Tajara" // You do have a monopoly on a fur suit tho
+ whitelisted = "Tajara"
// Gloves
@@ -1041,18 +1056,21 @@ var/global/list/gear_datums = list()
path = /obj/item/clothing/shoes/jackboots
cost = 1
slot = slot_shoes
+ allowed_roles = list("Security Cadet","Security Officer","Head of Security","Warden","Detective","Internal Affairs Agent","Quartermaster","Head of Personnel","Captain")
/datum/gear/toeless_jackboots
display_name = "toe-less jackboots"
path = /obj/item/clothing/shoes/jackboots/unathi
cost = 1
slot = slot_shoes
+ allowed_roles = list("Security Cadet","Security Officer","Head of Security","Warden","Detective","Internal Affairs Agent","Quartermaster","Head of Personnel","Captain")
/datum/gear/workboots
display_name = "workboots"
path = /obj/item/clothing/shoes/workboots
cost = 1
slot = slot_shoes
+ allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Engineering Apprentice")
/datum/gear/sandal
display_name = "sandals"
diff --git a/code/modules/clothing/under/accessories/badges.dm b/code/modules/clothing/under/accessories/badges.dm
index cc6a6f99656..ee0a5ef0a83 100644
--- a/code/modules/clothing/under/accessories/badges.dm
+++ b/code/modules/clothing/under/accessories/badges.dm
@@ -15,7 +15,7 @@
/obj/item/clothing/accessory/badge/old
name = "faded badge"
- desc = "A faded badge, backed with leather. It bears the emblem of the Forensic division."
+ desc = "A faded security badge, backed with leather."
icon_state = "badge_round"
/obj/item/clothing/accessory/badge/proc/set_name(var/new_name)
diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm
index 7bd3ec275b6..e488439a760 100644
--- a/code/modules/mining/abandonedcrates.dm
+++ b/code/modules/mining/abandonedcrates.dm
@@ -148,7 +148,13 @@
new/obj/item/weapon/storage/belt/champion(src)
new/obj/item/clothing/mask/luchador(src)
if(100)
- new/obj/item/clothing/head/bearpelt(src)
+ new/obj/item/weapon/gun/projectile/tanto(src)
+ new/obj/item/ammo_magazine/t40(src)
+ new/obj/item/ammo_magazine/t40(src)
+ new/obj/item/ammo_magazine/t40/rubber(src)
+ new/obj/item/clothing/under/rank/dispatch(src)
+ new/obj/item/clothing/accessory/badge/old(src)
+ new/obj/item/clothing/head/helmet/formalcaptain(src)
/obj/structure/closet/crate/secure/loot/togglelock(mob/user as mob)
if(!locked)
@@ -177,7 +183,7 @@
/obj/structure/closet/crate/secure/loot/proc/check_input(var/input)
if(length(input) != codelen)
return 0
-
+
. = 1
lastattempt.Cut()
for(var/i in 1 to codelen)
@@ -197,7 +203,7 @@
if(lastattempt.len)
var/bulls = 0
var/cows = 0
-
+
var/list/code_contents = code.Copy()
for(var/i in 1 to codelen)
if(lastattempt[i] == code[i])
diff --git a/code/modules/mob/living/silicon/robot/syndicate_robot.dm b/code/modules/mob/living/silicon/robot/syndicate_robot.dm
index ce89ff64fbe..13e606601de 100644
--- a/code/modules/mob/living/silicon/robot/syndicate_robot.dm
+++ b/code/modules/mob/living/silicon/robot/syndicate_robot.dm
@@ -8,6 +8,7 @@
icon_state = "syndie_bloodhound"
lawchannel = "State"
req_access = list(access_syndicate)
+ faction = "syndicate"
modtype = "syndicate"
braintype = "Cyborg"
@@ -20,8 +21,8 @@
radio.keyslot = new /obj/item/device/encryptionkey/syndicate(radio)
radio.recalculateChannels()
- playsound(loc, 'sound/mecha/nominalsyndi.ogg', 75, 0)
-
+ playsound(loc, 'sound/mecha/nominalsyndi.ogg', 75, 0)
+
/mob/living/silicon/robot/syndicate/New()
if(!cell)
cell = new /obj/item/weapon/cell(src)
@@ -29,9 +30,9 @@
cell.charge = 25000
if(!jetpack)
jetpack = new /obj/item/weapon/tank/jetpack/carbondioxide/synthetic(src)
-
+
..()
-
+
/mob/living/silicon/robot/syndicate/updateicon() //because this was the only way I found out how to make their eyes and etc works
overlays.Cut()
if(stat == 0)
diff --git a/code/modules/mob/living/simple_animal/bees.dm b/code/modules/mob/living/simple_animal/bees.dm
index 50256d7ccb6..61ea0a26619 100644
--- a/code/modules/mob/living/simple_animal/bees.dm
+++ b/code/modules/mob/living/simple_animal/bees.dm
@@ -100,8 +100,9 @@
src.parent.owned_bee_swarms.Add(B)
//make some noise
- if(prob(5))
+ if(prob(10))
src.visible_message("\blue [pick("Buzzzz.","Hmmmmm.","Bzzz.")]")
+ playsound(src.loc, pick('sound/effects/Buzz1.ogg','sound/effects/Buzz2.ogg'), 70, 1)
//smoke, water and steam calms us down
var/calming = 0
diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm
index 66a8e473ef3..a7ce2464778 100644
--- a/code/modules/mob/living/simple_animal/hostile/bear.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bear.dm
@@ -9,9 +9,9 @@
icon_living = "bear"
icon_dead = "bear_dead"
icon_gib = "bear_gib"
- speak = list("RAWR!","Rawr!","GRR!","Growl!")
+ //speak = list("RAWR!","Rawr!","GRR!","Growl!") Bears don't talk.
speak_emote = list("growls", "roars")
- emote_hear = list("rawrs","grumbles","grawls")
+ emote_hear = list("grumbles","grawls")
emote_see = list("stares ferociously", "stomps")
speak_chance = 10
turns_per_move = 7
diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
index fa742733a24..f86250fa17a 100644
--- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
@@ -145,6 +145,7 @@
maxHealth = 15
melee_damage_lower = 15
melee_damage_upper = 15
+ density = 0
attacktext = "cut"
attack_sound = 'sound/weapons/bladeslice.ogg'
faction = "syndicate"
@@ -160,4 +161,9 @@
/mob/living/simple_animal/hostile/viscerator/death()
..(null,"is smashed into pieces!")
+ var/T = get_turf(src)
+ new /obj/effect/gibspawner/robot(T)
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(3, 1, T)
+ s.start()
qdel(src)
diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm
index e3a3f85af38..78c495fd981 100644
--- a/code/modules/projectiles/ammunition/boxes.dm
+++ b/code/modules/projectiles/ammunition/boxes.dm
@@ -48,6 +48,23 @@
name = "magazine (.45 flash)"
ammo_type = "/obj/item/ammo_casing/c45f"
+/obj/item/ammo_magazine/t40
+ name = "magazine (10mm)"
+ icon_state = "5.56"
+ mag_type = MAGAZINE
+ ammo_type = /obj/item/ammo_casing/t40
+ matter = list(DEFAULT_WALL_MATERIAL = 475) //metal costs are very roughly based around 1 .45 casing = 75 metal
+ caliber = "10mm"
+ max_ammo = 12
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/t40/empty
+ initial_ammo = 0
+
+/obj/item/ammo_magazine/t40/rubber
+ name = "magazine (10mm rubber)"
+ ammo_type = /obj/item/ammo_casing/t40r
+
/obj/item/ammo_magazine/mc9mm
name = "magazine (9mm)"
icon_state = "9x19p"
@@ -180,6 +197,18 @@
/obj/item/ammo_magazine/trodpack/empty
initial_ammo = 0
+/obj/item/ammo_magazine/tranq
+ name = "tranquilizer darts (.50 cal PPS)"
+ icon_state = "incendiaryshot_box"
+ origin_tech = "combat=2"
+ mag_type = SINGLE_CASING
+ caliber = "PPS"
+ matter = list(DEFAULT_WALL_MATERIAL = 4500)
+ ammo_type = /obj/item/ammo_casing/tranq
+ max_ammo = 4
+
+/obj/item/ammo_magazine/tranq/empty
+ initial_ammo = 0
/obj/item/ammo_magazine/a762
name = "magazine box (7.62mm)"
diff --git a/code/modules/projectiles/ammunition/bullets.dm b/code/modules/projectiles/ammunition/bullets.dm
index 93d202f7667..f207ae769eb 100644
--- a/code/modules/projectiles/ammunition/bullets.dm
+++ b/code/modules/projectiles/ammunition/bullets.dm
@@ -70,6 +70,16 @@
caliber = ".45"
projectile_type = /obj/item/projectile/energy/flash
+/obj/item/ammo_casing/t40
+ desc = "A 10mm bullet casing."
+ caliber = "10mm"
+ projectile_type = /obj/item/projectile/bullet/pistol
+
+/obj/item/ammo_casing/t40r
+ desc = "A 10mm rubber bullet casing."
+ caliber = "10mm"
+ projectile_type = /obj/item/projectile/bullet/pistol/rubber
+
/obj/item/ammo_casing/a12mm
desc = "A 12mm bullet casing."
caliber = "12mm"
@@ -147,6 +157,14 @@
projectile_type = /obj/item/projectile/bullet/shotgun/incendiary
matter = list(DEFAULT_WALL_MATERIAL = 450)
+/obj/item/ammo_casing/tranq
+ name = "PPS shell"
+ desc = "A .50 cal PPS bullet casing."
+ icon_state = "ishell"
+ spent_icon = "ishell-spent"
+ caliber = "PPS"
+ projectile_type = /obj/item/projectile/bullet/rifle/tranq
+
/obj/item/ammo_casing/a762
desc = "A 7.62mm bullet casing."
caliber = "a762"
diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm
index 969873ce852..5c371c988fe 100644
--- a/code/modules/projectiles/guns/energy/laser.dm
+++ b/code/modules/projectiles/guns/energy/laser.dm
@@ -118,6 +118,24 @@ obj/item/weapon/gun/energy/retro
else
usr << "You can't look through the scope without stabilizing the rifle!"
+/obj/item/weapon/gun/energy/laser/shotgun
+ name = "quad-beam laser"
+ desc = "A modified laser weapon, designed to split a single beam four times."
+ icon_state = "oldenergykill"
+ item_state = "energykill"
+ fire_sound = 'sound/weapons/Laser.ogg'
+ slot_flags = SLOT_BELT|SLOT_BACK
+ w_class = 3
+ force = 10
+ matter = list(DEFAULT_WALL_MATERIAL = 2000)
+ origin_tech = "combat=4;magnets=2"
+ projectile_type = /obj/item/projectile/beam/shotgun
+ max_shots = 12
+
+ firemodes = list(
+ list(name="diffuse", burst=4, burst_delay = 0, move_delay = 0, fire_delay = 2, dispersion = list(1.0, -1.0, 2.0, -2.0)),
+ )
+
////////Laser Tag////////////////////
/obj/item/weapon/gun/energy/lasertag
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index 57e4ceba537..d500cd6e320 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -96,8 +96,66 @@
fire_sound = 'sound/effects/stealthoff.ogg'
w_class = 3.0
origin_tech = "combat=5;phorontech=4"
+ slot_flags = SLOT_HOLSTER | SLOT_BELT
projectile_type = /obj/item/projectile/energy/phoron
+/obj/item/weapon/gun/energy/beegun
+ name = "\improper NanoTrasen Portable Apiary"
+ desc = "An experimental firearm that converts energy into bees, for purely botanical purposes."
+ icon_state = "gyrorifle"
+ item_state = "arifle"
+ charge_meter = 0
+ w_class = 4
+ fire_sound = 'sound/effects/Buzz2.ogg'
+ force = 5
+ projectile_type = /obj/item/projectile/energy/bee
+ slot_flags = SLOT_BACK
+ max_shots = 9
+
+ firemodes = list(
+ list(name="EXTERMINATE", burst=3, burst_delay = 1, move_delay = 0, fire_delay = 0, dispersion = list(0.0, 0.2, -0.2)),
+ )
+
+/obj/item/weapon/gun/energy/mousegun
+ name = "\improper NT \"Arodentia\" Exterminator ray"
+ desc = "A highly sophisticated and certainly experimental raygun designed for rapid pest-control."
+ icon_state = "floramut100"
+ item_state = "floramut"
+ charge_meter = 0
+ w_class = 3
+ fire_sound = 'sound/weapons/taser2.ogg'
+ force = 5
+ projectile_type = /obj/item/projectile/beam/mousegun
+ slot_flags = SLOT_HOLSTER | SLOT_BELT
+ max_shots = 6
+
+ firemodes = list(
+ list(name="EXTERMINATE", burst=3, burst_delay = 1, move_delay = 0, fire_delay = 3, dispersion = list(0.0, 6,0, -6.0)),
+ )
+
+ var/lightfail = 0
+
+/obj/item/weapon/gun/energy/mousegun/handle_post_fire(mob/user, atom/target, var/pointblank=0, var/reflex=0, var/playemote = 1)
+ var/T = get_turf(user)
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(3, 1, T)
+ s.start()
+ failcheck()
+ ..()
+
+/obj/item/weapon/gun/energy/mousegun/proc/failcheck()
+ lightfail = 0
+ if (prob(5))
+ for (var/mob/living/M in range(rand(1,4),src)) //Big failure, TIME FOR RADIATION BITCHES
+ if (src in M.contents)
+ M << "[src]'s reactor overloads!"
+ M << "You feel a wave of heat wash over you."
+ M.apply_effect(300, IRRADIATE)
+ crit_fail = 1 //break the gun so it stops recharging
+ processing_objects.Remove(src)
+ update_icon()
+ return 0
+
/* Vaurca Weapons */
/obj/item/weapon/gun/energy/vaurca
@@ -122,12 +180,12 @@
)
/obj/item/weapon/gun/energy/vaurca/gatlinglaser
- name = "Gatling Laser"
+ name = "gatling laser"
desc = "A highly sophisticated rapid fire laser weapon."
icon_state = "gatling"
item_state = "gatling"
fire_sound = 'sound/weapons/Laser.ogg'
- origin_tech = "combat=5;materials=2"
+ origin_tech = "combat=6;phorontech=5;materials=6"
charge_meter = 0
slot_flags = SLOT_BACK
w_class = 4
@@ -140,17 +198,45 @@
list(name="spray", burst=20, burst_delay = 1, move_delay = 5, fire_delay = 30, dispersion = list(0.0, 1.25, 1.5, 1.75, 2.0, 2.25, 2.5, 2.75, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 3.0, 3.25)),
)
+ icon_action_button = "action_blank"
+ action_button_name = "Wield gatling laser"
+
+/obj/item/weapon/gun/energy/vaurca/gatlinglaser/can_wield()
+ return 1
+
+/obj/item/weapon/gun/energy/vaurca/gatlinglaser/ui_action_click()
+ if(src in usr)
+ toggle_wield(usr)
+
+/obj/item/weapon/gun/energy/vaurca/gatlinglaser/verb/wield_rifle()
+ set name = "Wield gatling laser"
+ set category = "Object"
+ set src in usr
+
+ toggle_wield(usr)
+
+/obj/item/weapon/gun/energy/vaurca/gatlinglaser/special_check(var/mob/user)
+ ..()
+ if(!wielded)
+ user << "You cannot fire this weapon with just one hand!"
+ return 0
+ playsound(src, 'sound/weapons/chainsawhit.ogg', 90, 1)
+ user.visible_message("[user] begins spinning [src]'s barrels!")
+ sleep(30)
+ return 1
+
/obj/item/weapon/gun/energy/vaurca/blaster
name = "Zo'ra Blaster"
desc = "An elegant weapon for a more civilized time."
icon_state = "blaster"
item_state = "blaster"
+ origin_tech = "combat=2;phorontech=4,"
fire_sound = 'sound/weapons/Laser.ogg'
slot_flags = SLOT_BACK | SLOT_HOLSTER | SLOT_BELT
w_class = 3
force = 10
projectile_type = /obj/item/projectile/energy/blaster
- max_shots = 15
+ max_shots = 6
firemodes = list(
list(name="single shot", burst=1, burst_delay = 1, fire_delay = 0),
diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm
index b354003b03c..64cc0d25d8c 100644
--- a/code/modules/projectiles/guns/projectile/automatic.dm
+++ b/code/modules/projectiles/guns/projectile/automatic.dm
@@ -291,14 +291,14 @@
icon_state = (ammo_magazine)? "tommygun" : "tommygun-empty"
/obj/item/weapon/gun/projectile/automatic/railgun
- name = "Railgun"
+ name = "railgun"
desc = "An advanced rifle that magnetically propels hyperdense rods at breakneck speeds to devastating effect."
icon_state = "railgun"
item_state = "arifle"
w_class = 4
force = 10
caliber = "trod"
- origin_tech = "combat=5;materials=2"
+ origin_tech = "combat=8;materials=7"
slot_flags = SLOT_BELT|SLOT_BACK
fire_sound = 'sound/effects/Explosion2.ogg'
load_method = MAGAZINE
diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm
index d6e7fe5153c..0b3c6deaec8 100644
--- a/code/modules/projectiles/guns/projectile/pistol.dm
+++ b/code/modules/projectiles/guns/projectile/pistol.dm
@@ -51,6 +51,29 @@
name = "\improper Custom NT Mk58"
icon_state = "secgundark"
+/obj/item/weapon/gun/projectile/tanto
+ desc = "A Necropolis Industries designed sidearm, designed to compete with the NT Mk58. Uses 10mm rounds."
+ name = "\improper Tanto .40"
+ icon_state = "c05r"
+ magazine_type = /obj/item/ammo_magazine/t40
+ allowed_magazines = list(/obj/item/ammo_magazine/t40)
+ caliber = "10mm"
+ origin_tech = "combat=3;materials=2"
+ fire_sound = 'sound/weapons/Gunshot_light.ogg'
+ load_method = MAGAZINE
+
+ firemodes = list(
+ list(name="semiauto", burst=1, fire_delay=0),
+ list(name="3-round bursts", burst=3, move_delay=4, accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.0, 0.6, 1.0)),
+ )
+
+/obj/item/weapon/gun/projectile/tanto/update_icon()
+ ..()
+ if(ammo_magazine)
+ icon_state = "c05r"
+ else
+ icon_state = "c05r-e"
+
/obj/item/weapon/gun/projectile/silenced
name = "silenced pistol"
desc = "A small, quiet, easily concealable gun. Uses .45 rounds."
diff --git a/code/modules/projectiles/guns/projectile/sniper.dm b/code/modules/projectiles/guns/projectile/sniper.dm
index d21eb6cc245..f35e7e348cd 100644
--- a/code/modules/projectiles/guns/projectile/sniper.dm
+++ b/code/modules/projectiles/guns/projectile/sniper.dm
@@ -9,7 +9,6 @@
origin_tech = "combat=8;materials=2;syndicate=8"
caliber = "14.5mm"
recoil = 4 //extra kickback
- //fire_sound = 'sound/weapons/sniper.ogg'
handle_casings = HOLD_CASINGS
load_method = SINGLE_CASING
max_shells = 1
@@ -29,9 +28,7 @@
/obj/item/weapon/gun/projectile/heavysniper/can_wield()
return 1
-/obj/item/weapon/gun/projectile/heavysniper/ui_action_click()
- if(src in usr)
- toggle_wield(usr)
+
/obj/item/weapon/gun/projectile/heavysniper/verb/wield_rifle()
set name = "Wield rifle"
@@ -67,6 +64,9 @@
if(bolt_open)
user << "You can't fire [src] while the bolt is open!"
return 0
+ if(!wielded)
+ user << "You can't fire without stabilizing the rifle!"
+ return 0
return ..()
/obj/item/weapon/gun/projectile/heavysniper/load_ammo(var/obj/item/A, mob/user)
@@ -88,3 +88,36 @@
toggle_scope(2.0)
else
usr << "You can't look through the scope without stabilizing the rifle!"
+
+/obj/item/weapon/gun/projectile/heavysniper/tranq
+ name = "\improper PTR-7 tranquilizer rifle"
+ desc = "A nonlethal modification to the PTR-7 anti-materiel rifle meant for sedation and capture of large animals. Fires .50 cal PPS shells that deploy a torpor inducing drug payload."
+ icon_state = "tranqsniper"
+ item_state = "heavysniper"
+ w_class = 4
+ force = 10
+ slot_flags = SLOT_BACK
+ origin_tech = "combat=6;materials=2"
+ caliber = "PPS"
+ recoil = 1
+ silenced = 1
+ fire_sound = 'sound/weapons/Gunshot_light.ogg'
+ handle_casings = HOLD_CASINGS
+ load_method = SINGLE_CASING
+ magazine_type = null
+ allowed_magazines = list(/obj/item/ammo_magazine/tranq)
+ max_shells = 4
+ ammo_type = null
+ accuracy = -3
+ scoped_accuracy = 3
+ bolt_open = 0
+ muzzle_flash = 1
+
+ recoil_wielded = 1
+ accuracy_wielded = 2
+
+/obj/item/weapon/gun/projectile/heavysniper/tranq/update_icon()
+ if(bolt_open)
+ icon_state = "tranqsniper-open"
+ else
+ icon_state = "tranqsniper"
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index 1d98548c7ad..cce7c759cbf 100644
--- a/code/modules/projectiles/projectile/beams.dm
+++ b/code/modules/projectiles/projectile/beams.dm
@@ -147,9 +147,54 @@
/obj/item/projectile/beam/gatlinglaser
name = "heavy laser"
icon_state = "heavylaser"
- damage = 5
+ damage = 10
muzzle_type = /obj/effect/projectile/laser_omni/muzzle
tracer_type = /obj/effect/projectile/laser_omni/tracer
impact_type = /obj/effect/projectile/laser_omni/impact
+/obj/item/projectile/beam/mousegun
+ name = "diffuse electrical arc"
+ icon_state = "stun"
+ nodamage = 1
+ damage_type = HALLOSS
+
+ muzzle_type = /obj/effect/projectile/stun/muzzle
+ tracer_type = /obj/effect/projectile/stun/tracer
+ impact_type = /obj/effect/projectile/stun/impact
+
+/obj/item/projectile/beam/mousegun/on_impact(var/atom/A)
+ mousepulse(A, 1)
+ ..()
+
+/obj/item/projectile/beam/mousegun/proc/mousepulse(turf/epicenter, range, log=0)
+ if(!epicenter) return
+
+ if(!istype(epicenter, /turf))
+ epicenter = get_turf(epicenter.loc)
+
+ for(var/atom/T in range(range, epicenter))
+ var/distance = get_dist(epicenter, T)
+ if(distance < 0)
+ distance = 0
+ if(distance <= range)
+ var/mob/living/M = T
+ if (M.mob_size <= 2 && (M.find_type() & TYPE_ORGANIC))
+ M.visible_message("[M] bursts like a balloon!")
+ M.gib()
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(3, 1, M)
+ s.start()
+ T << 'sound/effects/basscannon.ogg'
+ return 1
+
+/obj/item/projectile/beam/shotgun
+ name = "diffuse laser"
+ icon_state = "laser"
+ pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
+ damage = 15
+ eyeblur = 4
+
+ muzzle_type = /obj/effect/projectile/laser/muzzle
+ tracer_type = /obj/effect/projectile/laser/tracer
+ impact_type = /obj/effect/projectile/laser/impact
diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm
index 6a2c38bd08d..8ae0b7c969f 100644
--- a/code/modules/projectiles/projectile/bullets.dm
+++ b/code/modules/projectiles/projectile/bullets.dm
@@ -161,6 +161,49 @@
penetrating = 5
hitscan = 1 //so the PTR isn't useless as a sniper weapon
+/obj/item/projectile/bullet/rifle/tranq
+ name = "dart"
+ icon_state = "dart"
+ damage = 5
+ stun = 0
+ weaken = 0
+ drowsy = 0
+ eyeblur = 0
+ damage_type = TOX
+ step_delay = 0.25
+
+/obj/item/projectile/bullet/rifle/tranq/on_hit(var/atom/target, var/blocked = 0, var/def_zone = null)
+ var/mob/living/L = target
+ if(!(isanimal(target)))
+ if(!(isipc(target)))
+ if(!isrobot(target))
+ L.apply_effect(5, DROWSY, 0)
+ if(def_zone == "torso")
+ if(blocked < 2 && !(blocked < 1))
+ target.visible_message("[target] yawns.")
+ if(blocked < 1)
+ spawn(120)
+ L.apply_effect(10, PARALYZE, 0)
+ target.visible_message("[target] moans.")
+ if(def_zone == "head" && blocked < 2)
+ spawn(35)
+ L.apply_effect(20, PARALYZE, 0)
+ if(def_zone != "torso" && def_zone != "head")
+ if(blocked < 2 && !(blocked < 1))
+ target.visible_message("[target] yawns.")
+ if(blocked < 1)
+ spawn(45)
+ L.apply_effect(15, PARALYZE, 0)
+ target.visible_message("[target] moans.")
+ if(isanimal(target))
+ target.visible_message("[target] twitches, foaming at the mouth.")
+ L.apply_damage(35, TOX) //temporary until simple_mob paralysis actually works.
+ /* var/mob/living/simple_animal/M = target
+ spawn(60)
+ target.visible_message("[target] collapses.")
+ M.Sleeping(1200)*/ //commented out until simple_mob paralysis actually works.
+ ..()
+
/obj/item/projectile/bullet/rifle/a556
damage = 40
penetrating = 1
@@ -183,10 +226,9 @@
embed = 0
edge = 1
-/obj/item/projectile/bullet/gyro/on_hit(var/atom/target, var/blocked = 0)
- if(isturf(target))
- explosion(target, -1, 0, 2)
- ..()
+/obj/item/projectile/bullet/burstbullet/on_impact(var/atom/A)
+ explosion(A, -1, 0, 2)
+ ..()
/obj/item/projectile/bullet/blank
invisibility = 101
diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm
index c6d74e2e78c..ca679df2839 100644
--- a/code/modules/projectiles/projectile/energy.dm
+++ b/code/modules/projectiles/projectile/energy.dm
@@ -125,6 +125,31 @@
explosion(A, -1, 0, 2)
..()
+/obj/item/projectile/energy/bee
+ name = "bees"
+ icon = 'icons/obj/apiary_bees_etc.dmi'
+ icon_state = "beegun"
+ check_armour = "bio"
+ damage = 0
+ damage_type = BRUTE
+ pass_flags = PASSTABLE | PASSGRILLE
+ embed = 0
+ weaken = 0
+
+/obj/item/projectile/energy/bee/on_impact(var/atom/A)
+ playsound(src.loc, pick('sound/effects/Buzz1.ogg','sound/effects/Buzz2.ogg'), 70, 1)
+ for(var/i=1, i<=8, i++)
+ var/mob/living/simple_animal/bee/x = new /mob/living/simple_animal/bee
+ x.loc = A
+ x.feral = 25
+ if(ismob(A))
+ x.target_mob = A
+ if(prob(50))
+ for(var/j = 1, j <= rand(1, 3), j++)
+ step(x, pick(NORTH,SOUTH,EAST,WEST))
+
+ ..()
+
/obj/item/projectile/energy/blaster
name = "blaster bolt"
icon_state = "laser"
diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm
index 085fff28b7b..0f96859356c 100644
--- a/code/modules/research/designs.dm
+++ b/code/modules/research/designs.dm
@@ -1310,6 +1310,14 @@ datum/design/item/weapon/nuclear_gun
build_path = /obj/item/weapon/gun/energy/gun/nuclear
locked = 1
+datum/design/item/weapon/lasshotgun
+ id = "laser_shotgun"
+ req_tech = list("combat" = 3, "materials" = 5, "powerstorage" = 4)
+ materials = list("$metal" = 5000, "$glass" = 1500, "$uranium" = 500, "$diamond" = 500)
+ reliability_base = 76
+ build_path = /obj/item/weapon/gun/energy/laser/shotgun
+ locked = 1
+
datum/design/item/weapon/stunrevolver
id = "stunrevolver"
req_tech = list("combat" = 3, "materials" = 3, "powerstorage" = 2)
@@ -1368,6 +1376,18 @@ datum/design/item/weapon/flora_gun
materials = list("$metal" = 2000, "$glass" = 500, "$uranium" = 500)
build_path = /obj/item/weapon/gun/energy/floragun
+datum/design/item/weapon/mousegun
+ id = "mousegun"
+ req_tech = list("materials" = 1, "biotech" = 4, "powerstorage" = 3)
+ materials = list("$metal" = 2000, "$glass" = 1000, "$uranium" = 500)
+ build_path = /obj/item/weapon/gun/energy/mousegun
+
+datum/design/item/weapon/beegun
+ id = "beegun"
+ req_tech = list("materials" = 6, "biotech" = 4, "powerstorage" = 4, "combat" = 6, "magnets" = 4)
+ materials = list("$metal" = 2000, "$glass" = 2000, "$silver" = 500, "$diamond" = 3000)
+ build_path = /obj/item/weapon/gun/energy/beegun
+
datum/design/item/weapon/large_grenade
id = "large_Grenade"
req_tech = list("combat" = 3, "materials" = 2)
diff --git a/code/setup.dm b/code/setup.dm
index 87fbe578c61..1a5a872a239 100644
--- a/code/setup.dm
+++ b/code/setup.dm
@@ -441,7 +441,7 @@
#define STUN "stun"
#define WEAKEN "weaken"
-#define PARALYZE "paralize"
+#define PARALYZE "paralyze"
#define IRRADIATE "irradiate"
#define AGONY "agony" // Added in PAIN!
#define SLUR "slur"
diff --git a/html/changelogs/LordFowl - MiscUpdate.yml b/html/changelogs/LordFowl - MiscUpdate.yml
new file mode 100644
index 00000000000..ccd771d2d48
--- /dev/null
+++ b/html/changelogs/LordFowl - MiscUpdate.yml
@@ -0,0 +1,42 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: LordFowl
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - rscadd: "Added three new energy-based weapons, one designed purely for pest-control."
+ - rscadd: "Added a new rare handpistol, based off of a proposed competitor to the NT Mk58."
+ - rscadd: "Added a new pet for the Head of Security - the PTR-7 Tranquilizer Rifle."
+ - rscadd: "Syndicate manhack delivery grenades are now available via the traitor uplink."
+ - rscadd: "Manhacks will no longer attack anyone belonging to the 'syndicate' faction, including Heist pirates."
+ - tweak: "Tweaked loadout customisation whitelists, generally making them more restrictive by role."
+ - bugfix: "It is no longer possible to be older or younger than your species ought to be."
diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi
index 997fbda702c..d55b7611013 100644
Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ
diff --git a/icons/obj/apiary_bees_etc.dmi b/icons/obj/apiary_bees_etc.dmi
index 130120bb08f..2a7f604e074 100644
Binary files a/icons/obj/apiary_bees_etc.dmi and b/icons/obj/apiary_bees_etc.dmi differ
diff --git a/icons/obj/closet.dmi b/icons/obj/closet.dmi
index 4503ad12941..f0e3ee940e7 100644
Binary files a/icons/obj/closet.dmi and b/icons/obj/closet.dmi differ
diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi
index 8ebf39d9769..4bb55d22550 100644
Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ
diff --git a/maps/exodus-1.dmm b/maps/exodus-1.dmm
index 8fedc56a8d2..dbcb6c747fe 100644
--- a/maps/exodus-1.dmm
+++ b/maps/exodus-1.dmm
@@ -321,7 +321,7 @@
"agi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_port)
"agj" = (/obj/effect/decal/cleanable/spiderling_remains,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_port)
"agk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/maintenance/security_port)
-"agl" = (/obj/structure/table/rack,/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas{pixel_x = -3; pixel_y = -3},/obj/item/clothing/mask/gas{pixel_x = -3; pixel_y = -3},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/warden)
+"agl" = (/obj/structure/table/rack,/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas{pixel_x = -3; pixel_y = -3},/obj/item/clothing/mask/gas{pixel_x = -3; pixel_y = -3},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/device/magnetic_lock/security,/obj/item/device/magnetic_lock/security,/obj/item/device/magnetic_lock/security,/obj/item/device/magnetic_lock/security,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/warden)
"agm" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/seccarts{pixel_x = 3; pixel_y = 2},/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/storage/box/flashbangs{pixel_x = -2; pixel_y = -2},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/warden)
"agn" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/security/warden)
"ago" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/window/brigdoor{dir = 1; name = "Weapons locker"; req_access = list(2)},/obj/item/clothing/suit/storage/vest/heavy/officer,/obj/item/clothing/suit/storage/vest/heavy/officer,/obj/item/clothing/suit/storage/vest/heavy/officer,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/warden)
@@ -358,11 +358,11 @@
"agT" = (/obj/structure/closet/secure_closet/security,/obj/item/device/flashlight/flare,/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/main)
"agU" = (/obj/structure/reagent_dispensers/peppertank{pixel_x = 30},/turf/simulated/floor{icon_state = "bluecorner"},/area/security/main)
"agV" = (/obj/structure/disposalpipe/sortjunction{dir = 1; name = "HoS Office"; sortType = "HoS Office"},/turf/simulated/wall,/area/crew_quarters/heads/hos)
-"agW" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/disposal,/obj/machinery/requests_console{announcementConsole = 1; department = "Head of Security's Desk"; departmentType = 5; name = "Head of Security RC"; pixel_x = 0; pixel_y = 30},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos)
+"agW" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/disposal,/obj/machinery/requests_console{announcementConsole = 1; department = "Head of Security's Desk"; departmentType = 5; name = "Head of Security RC"; pixel_x = 0; pixel_y = 30},/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos)
"agX" = (/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos)
"agY" = (/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/heads/hos)
"agZ" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/heads/hos)
-"aha" = (/obj/machinery/photocopier,/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos)
+"aha" = (/obj/machinery/photocopier,/obj/machinery/light{dir = 1},/obj/machinery/keycard_auth{pixel_x = 30},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos)
"ahb" = (/obj/structure/disposalpipe/segment,/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
"ahc" = (/obj/structure/table/rack,/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/maintenance/security_port)
"ahd" = (/obj/effect/decal/cleanable/generic,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/security_port)
@@ -392,7 +392,7 @@
"ahB" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/bed/chair,/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/heads/hos)
"ahC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/heads/hos)
"ahD" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos)
-"ahE" = (/obj/structure/table/woodentable,/obj/machinery/keycard_auth{pixel_x = 30},/obj/machinery/photocopier/faxmachine{department = "Head of Security"},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos)
+"ahE" = (/obj/structure/table/woodentable,/obj/machinery/photocopier/faxmachine{department = "Head of Security"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos)
"ahF" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
"ahG" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{tag = "icon-map (NORTH)"; icon_state = "map"; dir = 1},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/maintenance/research_starboard)
"ahH" = (/turf/space,/area/skipjack_station/northeast_solars)
@@ -426,7 +426,7 @@
"aij" = (/obj/structure/table/woodentable,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/item/weapon/stamp/hos,/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/heads/hos)
"aik" = (/obj/structure/table/woodentable,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/computer/skills{pixel_y = 4},/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/heads/hos)
"ail" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos)
-"aim" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/table/woodentable,/obj/machinery/recharger{pixel_y = 4},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos)
+"aim" = (/obj/structure/table/woodentable,/obj/machinery/recharger{pixel_y = 4},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/tranqcabinet{pixel_x = 32},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos)
"ain" = (/obj/structure/table/rack{dir = 1},/obj/item/clothing/suit/fire/firefighter,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating,/area/maintenance/security_port)
"aio" = (/obj/structure/closet,/obj/item/clothing/head/ushanka,/turf/simulated/floor/plating,/area/maintenance/security_port)
"aip" = (/obj/item/device/t_scanner,/obj/structure/table/steel,/turf/simulated/floor/plating,/area/maintenance/security_port)
@@ -485,7 +485,7 @@
"ajq" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -29},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos)
"ajr" = (/obj/machinery/computer/security,/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos)
"ajs" = (/obj/machinery/computer/secure_data,/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos)
-"ajt" = (/obj/structure/filingcabinet,/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos)
+"ajt" = (/obj/structure/filingcabinet,/obj/machinery/light_switch{pixel_y = -27},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos)
"aju" = (/obj/structure/closet/secure_closet/hos,/obj/item/device/radio/intercom{pixel_x = 27},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos)
"ajv" = (/obj/machinery/door/airlock/maintenance{name = "Firefighting equipment"; req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/security_port)
"ajw" = (/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/obj/item/weapon/cigbutt,/turf/simulated/floor/plating,/area/maintenance/security_port)
@@ -544,8 +544,8 @@
"akx" = (/obj/structure/noticeboard{pixel_y = 30},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office)
"aky" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/camera/network/security{c_tag = "Security - Forensic Office Fore"; dir = 2},/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office)
"akz" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/obj/item/clothing/glasses/sunglasses,/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office)
-"akA" = (/obj/machinery/alarm{pixel_y = 22},/obj/machinery/computer/security/wooden_tv,/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office)
-"akB" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/flora/pottedplant{tag = "icon-plant-21"; icon_state = "plant-21"},/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office)
+"akA" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/item/weapon/rig/ce/equipped,/obj/item/device/magnetic_lock/engineering,/obj/item/device/magnetic_lock/engineering,/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/crew_quarters/heads/chief)
+"akB" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/flora/pottedplant{tag = "icon-plant-21"; icon_state = "plant-21"},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office)
"akC" = (/turf/simulated/wall,/area/security/detectives_office)
"akD" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
"akE" = (/obj/machinery/door/airlock/maintenance{name = "Firefighting equipment"; req_access = list(12)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
@@ -5586,7 +5586,7 @@
"cdv" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "floorgrimecaution"},/area/maintenance/atmos_control)
"cdw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/atmos_control)
"cdx" = (/obj/structure/disposalpipe/segment,/obj/structure/extinguisher_cabinet{pixel_x = 25},/turf/simulated/floor/plating,/area/maintenance/atmos_control)
-"cdy" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/item/weapon/rig/ce/equipped,/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/crew_quarters/heads/chief)
+"cdy" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/item/device/magnetic_lock/engineering,/obj/item/device/magnetic_lock/engineering,/turf/simulated/floor,/area/engineering/locker_room)
"cdz" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/crew_quarters/heads/chief)
"cdA" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/crew_quarters/heads/chief)
"cdB" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_command{name = "Chief Engineer"; req_access = list(56)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/crew_quarters/heads/chief)
@@ -6101,7 +6101,6 @@
"cnq" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor,/area/engineering/locker_room)
"cnr" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/item/device/suit_cooling_unit,/turf/simulated/floor,/area/engineering/locker_room)
"cns" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/camera/network/engineering{c_tag = "Engineering Locker Room"; dir = 1},/obj/item/device/suit_cooling_unit,/turf/simulated/floor,/area/engineering/locker_room)
-"cnt" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/item/device/flashlight/heavy,/obj/item/device/flashlight/heavy,/obj/item/device/flashlight/heavy,/turf/simulated/floor,/area/engineering/locker_room)
"cnu" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Engineering Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/substation/engineering)
"cnv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/substation/engineering)
"cnw" = (/obj/machinery/door/airlock/maintenance{req_one_access = list(11,24)},/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/substation/engineering)
@@ -7500,7 +7499,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadHainaioaipabhaiqahKaheairaisaitaiuaivaiwagLahhahRaixaheaiyahUaizaiAahTahXaiBaiCahZaiDahZahZaiEaiFaidacSacSadfaiGaiHaiIagXagXaiJagXagXaiKagDaiLaFtakDakDakDakFabdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahHahHahHahHaaaaaaahHahHahHahHahHahHahHahHahHaaaaaaahHahHahHahHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeCaiNaiNaiOabhaiNahKaheaiPaiQaiRaiSaiTahOagLaiUaiVaiWaheaiXaiYaiZajaajbajcajdajeajfaiaajgajhaeMajjajiajlajkajnajmajoajpajqajrajsajtagXajuagDalrabdabdabdabdadDabdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJaaJaaJaamaamaaaaaaaaaaaaaaaaaaaaaaaaahHahHahHahHaaaaaaahHahHahHahHahHahHahHahHahHaaaaaaahHahHahHahHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhabhajvabhabhajwajxaheaheajyaheaheajzaheaheaheajAaheaheajBajCajDajEajFajGaheajHajIajJajKajLaheaheajMajOajNaheaheaheagxajPagxagxagxagxagxagDalrabdajQajRabdadDabdaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJaaaaafaaaaaqaaaaaaaaaaaaaaaaaaaaaaaaahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhagJagfajSagfajTajUajVajWajYajXajZakaakcakbakdakeakgakfakhakiakjakkakhaklakjakjakmaknaknakoakqakpakraksakuaktajMakvakwakxakyakzakAakBakCalsakEamaamMabdadDabdaaaaaaaaaaaaaaaaaaaaaaaaaaaakHakHakHakHakHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJaafakIaafaaJaaaaaaaaaaaaaaaaaaaaaaaaahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhagJagfajSagfajTajUajVajWajYajXajZakaakcakbakdakeakgakfakhakiakjakkakhaklakjakjakmaknaknakoakqakpakraksakuaktajMakvakwakxakyakzanrakBakCalsakEamaamMabdadDabdaaaaaaaaaaaaaaaaaaaaaaaaaaaakHakHakHakHakHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJaafakIaafaaJaaaaaaaaaaaaaaaaaaaaaaaaahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaamaamaaJaamaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhahKaheaheaheaheaheaheakJakKakLakMakNakOakPakQakRakSakTakUakVakWakNakXakNakNakYakZalaalbalcaldalealfalgalaalhalialjalkallalmalnaloalpakCamNabdamOanuabdanwabdaaaaafaaaaaaaaaaaaaaaaaaaaaakHakHakHakHakHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJaaJaaJaaJaaJaaaaaaaaaaltaaaaaaaaaaaJaaJaamaamaamaaaaaaahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaaaaaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhahKahealualvalwalxahealyalzahUalAalBahealCalDalCahealEalFalGahealHalJalIalKagLalLalMalNalOalPahealQalRalRalSahealTalUalValWalXalYalZakCadEambambamcambadDabdanxaafaaaaaaaaaaaaaaaaaaaaaakHakHakHakHakHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqaaaaaaaafaafaafaaaaaaamdaafaafaaaaafaafaaaaaaaamaaaaaaahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJaafameaafaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafabhahKamfamgamgamhamiamjamkamlahTammalBaheamnamoampamqamramsamtamuahTamvahTamwamxamyamyamzamAamBamCamDamEamFamGakCamHamIamJamKalValVamLakCadEambanyaogambadDabdanxaaaaaaaaaaafaaaaaaaaaaaaakHakHakHakHakHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJaafamPamPamPamPamPaafamQaafamPamPamPamPamPaafaaJaaaaaaahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHahHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -7574,14 +7573,14 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZmbWubWubWvbZnbZobZpbNVbZqbNVbZrbZsbZtbZrbZrbZubZvbZwbZxbZybZzbZAbZBbZCbZDbZEbZFbYabZGbZHbZIbZJbZKbZLbZMbZNbZObZPbWMbZQbOqbZRbZSbZTbZUbZUbZVbZWbZXbZYbUlbUlbZZcaabUlbUlcabcaccadcaecafcagcahcaicajcaicakcalcamcalcakcanbnFbNmbIPcaocapcaqcarcascatcaubNnbNnbwCbwCbwCbwCbwCcavcawcaxbwCbNubNubNubNubNubNubNubNubNubNubNubNucaycazaCFaqvaDTbUQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKTbKTbSlbMtbMtbMtbMtbMtbMtbMtbMtbMtbMtbMtbKTbKTaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamcaBaamaamaamaamaamaaaaaaaaaaaaaaaaaaaafaafaaacaCcaDcaDcaDcaEcaDcaDcaFcaGbZrcaHcaIbZrcaJcaKcaLcaMcaNcaOcaPcaQcaRcaScaTcaUcaVbYabZGcaWcaXbZJcaYbVibWMbWMbWMbWMbWMcaZbOqbDHcbacbbcbccbdcbecbfcbgcbhbUlcbicbjcbkcblcbmcbncbocbpcaecahcagcbqcaicbrcbscakcbtcbucbvcakcbwbnFbBjbIPcbxcbycbzcbxcbxbIPbIPbIPcbAcbBcbCcbDcbEbwCbwCcbFbwCbwCcbGcbHcbIcbJcbKcbLcbMcbNcbOcbPcbQcbRcbScbTbUQbUQbUQbUQaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKSbKTbUWbUUbUUbMtbMtbMtbMtbMtbMtbMtbMtbKTbKTaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcbUcbVcbWcbXcbYcbZccaccbcccbZrccdccebZrbZrccfccgcchcciccjcckcclbZBbZCbZDccmccnbYabYaccoccpbYaccqbViccrccsbWMcctbWMbUhccuccuccuccuccuccuccubUlccvccwbUlccxccycczccAcbmccBccCccDcaecahcagccEcaiccFccGcakccHccIccJcakccKbnFccLccMccNccOccPccQccNccRccSccTccUccVccWccXccUccYccZcdacdbcdccddcdecdfcdgcdhcdicdjcdhcdkcdlcdmcdncdocdpcdqcdrbUQbUQbUQbUQaaaaafaaaaaaaaaaahaahaahaafaaaaaaaafaaaaaaaafaaaaaabPlbKTbNBbKTbKTbMtbMtbMtbMtbMtbMtbMtbKTbKTaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcdscdscbWcdtcducbZcdvcdwcdxbZrcdycdzcdAcdBcdCcdDcdEcdFcdGcdHcdIcdJcdKcdLcdMcdNcdOcdPcdQcdRcdScdTcdUcdVcdWcdXcdYbWMbUhccucdZceacebceccedceecefcegcehceicejcekcelcemcbmcenceocepcaecahcagceqcaicercescakcetceucevcakcewbnFbnFcexccNceycezceAccNceBceCceDceEceEceFceGceEceHceIceJceKceHceLceMceNceOceLceLceLceLcePceNceOceLceLceQceRceSceTceUceVceWceXceYceYceYceYceYceYceYceYceYceYceYceYceYceYceYceYceZcfacfacfbbKTbKTbMtbMtcfcbMtbMtbKTbKTaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcdscdscbWcdtcducbZcdvcdwcdxbZrakAcdzcdAcdBcdCcdDcdEcdFcdGcdHcdIcdJcdKcdLcdMcdNcdOcdPcdQcdRcdScdTcdUcdVcdWcdXcdYbWMbUhccucdZceacebceccedceecefcegcehceicejcekcelcemcbmcenceocepcaecahcagceqcaicercescakcetceucevcakcewbnFbnFcexccNceycezceAccNceBceCceDceEceEceFceGceEceHceIceJceKceHceLceMceNceOceLceLceLceLcePceNceOceLceLceQceRceSceTceUceVceWceXceYceYceYceYceYceYceYceYceYceYceYceYceYceYceYceYceZcfacfacfbbKTbKTbMtbMtcfcbMtbMtbKTbKTaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacfdcfdcfdcfdcfdcfdcfdcfecffbZrbZrbZrbZrbZrcfgcfhcficficficfjcfkbZBbZCbZDcflbZFcfpcfncfocMocfqcfrbVicfscftcfucftbWMbUhccucfvcfwcfwcfwcfxcfybUlcfzcfAbUlccxcczcfBccAcbmcfCcfDcfEcaecahcagcfFcaicfGcfHcakcakcakcakcakcfIcfJbnFcexccNcfKcfLccNccNceBcfMceDceEcfNcfOcfOcfPceHcfQcfRcfSceHcfTcfUcfUcfUcfVcfWcfXcfYcfZcgacgbcgcceLcgdcgecgfbUQbUQbUQbUQaaaaafaaaaaaaaaaahaahaahaafaaaaaaaafaaaaaaaafaafaafcggcghcgibNCbKSbKTbKTbMtbMubMtbKTbKTaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcfdcgjcgkcglcgmcgncfdcgocgpcgqcgrcgscgtcgucgucgvcgwcgwcgxcgycclbZBbZCbZDcgzcaVcgAcgBcgCcgDcgEcgFbVicftcftbWMcgGbWMbUhccucgHcgIcgIcgIcgJccucgKcgLcgMcgKcgNcgOcgPcgQcbmcgRcfDcgScaecgTcgUcgVcaicgWcgXcaicgYbLVbVJcgZchachbbnFchcchdchdchechfchfchfchfchgceEchhchichichjchkchlchmchnchochpchqchqchqchrchschschtchuchvchwchxceLchychzchAchyaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafchBbKQbKQbKRbKSbKSbKTbKTbKTbKTbKUaafaafaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaafaafchCchCchCchCchCchCchCchCchCchCchCchCchCaaaaaachDchEchFchFchGchHcfdchIchJchKchLchMchNchOchPchQchRchSchTchUchVchWchXchYchZbVibVibVibVibVibVibVibViciacibbWMcicbWMbUhccuccucidciecifccuccucigcihciicgKcbmcbmcbmcbmcbmcaecijcikcaecilcimcilcaicinciocaicipceBbVJciqbVJcirbnFcisbnFbnFcitciuciuciucivbnFceEciwcixcixciycizciAciBciCciDciEciFciFciFciFciGciHciFciIciFciJciKceLciLciMciNchyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaachCciOciPciOchCciQciRciQchCciSciTciSchCaaaaaaciUchEchFchGchGciVcfdciWciXciYciZcjacjbcjccjdcjecjfcjfcjgcjfcclbZBcjhbZDcjicjjcjkcjlcjmcjlcjncjocjpcjpcjqcjqcjqcjqbUhcjrcjscjtcjtcjucjvcjwcjxcjycjzcjAcjBcjCcjDcjDcjEcjFcaecaecaecjGcjHcjIcaicaicaicaiceBceBbVJcjJbVJcjKbnFcisbnFaaaaaaaaaaaaaaaaaaaaaceEcjLcjMcjNcjOcjPcjQcjRcjScjTcjUcjVcjUcjUcjWcjXcjYchscjZchsckackbceLckcckdckechyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaachCciOckfciOchCciQckgciQchCciSckhciSchCaaaaaaciUchFchGchGchGckickjckkcklciYckmcknckockpckqckrckscktckuckvcclbZBckwchYckxckyckzckAckAckAckBckCckDckEckFckGckHcjqbUhcjrckIcjtckJckKckLckMckNckOckPckQckRckSckTcjDckUcjFckVckWckXckYckZclaclbclcclccldclcclebVJbVJbVJbVJbnFcisbnFaaaaaaaaaaaaaaaaaaaaaceEclfclgclhclicljceHclkceHcllclmclnclocloclpchschsclqclrcloclscltceLcluclvclwchyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaachCclxclyclzchCclAclBclCchCclDclEclFchCaaaaafciUclGchFchGchGchGcfdclHclIciYciYclJciYciYciYciYclKcjfclLclMcclclNclOclPclQclRclSclTclTclTclUclVclVclWcjqclXclYclZcmacjrcmbcjtcmccmdcmecmfcmgcmhcmicmjcmkcmlcmmcjDcmncjFcmocmpcmqcmrcmscmtcmqcmucmvcmwbnFcmxclcclcclcclcclccmybnFaaaaaaaaaaaaaaaaaaaaaceEcmzcmAcmBcmCceHcmDcmEcmFceLcmGcmHcmHcmHcmIcmJcmKcmLcmMcmHcmHcmNceLcmOcmPcmQcmRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafaafchCcmScmTcmUchCcmVcmTcmWchCcmVcmTcmWchCaaaaafcmXchFchFchGchGcmYcfdcmZcnacnbcnccndcnecnfcnfcngcnhcnfcnicnjcclcnkcnlcnmcnncjjcnocnocnpclVcnqcnscnrcntcjqcnucnvcnwcnxcjrcnycjtcnzcnAcnBcjrcnCcnDcnEcjFcnFcnGcnHcjDcnIcjFcnJcnKcmqcnLcnMcnLcmqaaaaaaaaabnFbnFbnFcnNcmvcmvcmwbnFbnFaaaaaaaaaaaaceHceHceHceHceHceHceHceHceHcnOcnPcnQceLceLcnRcnScnTceLceLceLceLcnUcnScnTceLceLcnVcnWcnVaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafaafchCcmScmTcmUchCcmVcmTcmWchCcmVcmTcmWchCaaaaafcmXchFchFchGchGcmYcfdcmZcnacnbcnccndcnecnfcnfcngcnhcnfcnicnjcclcnkcnlcnmcnncjjcnocnocnpclVcnqcnscnrcdycjqcnucnvcnwcnxcjrcnycjtcnzcnAcnBcjrcnCcnDcnEcjFcnFcnGcnHcjDcnIcjFcnJcnKcmqcnLcnMcnLcmqaaaaaaaaabnFbnFbnFcnNcmvcmvcmwbnFbnFaaaaaaaaaaaaceHceHceHceHceHceHceHceHceHcnOcnPcnQceLceLcnRcnScnTceLceLceLceLcnUcnScnTceLceLcnVcnWcnVaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaBaafaafaafaaaaafcnXaafcnXaafcnYaafcnZaafcnYaafcnZaafaafaaacfdcoacobchGchGcoccodcoecofcogcohcoicojcojcokcojcolcomconcolcoocopcoqcorcoscotcotcotcotcoucovcowcowcowcoxcoxcoxcoxcoycjrcozcoAcnzcoBcoCcjrcnCcnDcoDcjFcoEcoFcnHcoGcoHcjFcnJcnKcmqcoIcoJcoKcmqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaceHcoLcoMcoNcoOcoPcoQcoRcoScoTcoUcoVceHaaMaafaafaafaafaaaaaaaaacoWaaaaaaaaaaafcoXcoYcoXaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafcoZcpacpbcpccpdcpecpfcpccpgcphcpfcpicpjcpkcplcogcogcogcogcogcogcogcogcpmcpncpocppcpqcprcpscptcpucolcpvcpwcpxcolcpycpzcpAcotcpBcpCcpDcpEcpFcpGcpHcpIcpIcpJcpKcpKcpHcpLcjrcjrcpMcpNcjrcjrcjrcpOcnDcpPcjFcjFcjFcpQcpRcjFcjFcnJcpScmqcpTcpUcpTcmqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaafceHcpVcpWcpVcpXcpYcpZcqacoScoScqbcoSceHceHaaaaaaaaaaafaafaaaaacaaaaaaaaaaaaaafaaacqcaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJaaaaaaaaaaafcqdcqecqfcqgcqhcqicqjcqkcqlcqmcqncqocqpcqqcqicqrcqscqtcqucqvcqwcqxcqycqzcqAcqBcqCcqDcqEcqFcqGcqHcqIcqJcqKcqLcqMcpycqNcqOcotcpFcpFcpFcpFcpFcqPcpHcqQcqQcqQcpKcpKcpHbUhcqRcjrcqScqTcqUcqVcjrcqWcnDcqXcjFcqYcqZcracrbcjFcrccnJcpScmqcrdcrecrfcmqaaaaaaaaaaaaaaaaaacrgcrhcricrjcrgaafaaaaaaaaaaaaceHcpVcpVcpVcrkcrlcrmcrncrocrpcrqcrrcrsceHaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaacrtaaaaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/sound/effects/Buzz1.ogg b/sound/effects/Buzz1.ogg
new file mode 100644
index 00000000000..99c49e3835c
Binary files /dev/null and b/sound/effects/Buzz1.ogg differ
diff --git a/sound/effects/Buzz2.ogg b/sound/effects/Buzz2.ogg
new file mode 100644
index 00000000000..e009ce06b8f
Binary files /dev/null and b/sound/effects/Buzz2.ogg differ