diff --git a/baystation12.dme b/baystation12.dme
index a6af9b75351..afc009508f5 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -440,6 +440,7 @@
#include "code\game\objects\items\devices\flashlight.dm"
#include "code\game\objects\items\devices\lightreplacer.dm"
#include "code\game\objects\items\devices\megaphone.dm"
+#include "code\game\objects\items\devices\modkit.dm"
#include "code\game\objects\items\devices\multitool.dm"
#include "code\game\objects\items\devices\paicard.dm"
#include "code\game\objects\items\devices\pipe_painter.dm"
@@ -741,10 +742,10 @@
#include "code\modules\customitems\item_defines.dm"
#include "code\modules\customitems\item_spawning.dm"
#include "code\modules\destilery\main.dm"
-#include "code\modules\detectivework\detective_work.dm"
-#include "code\modules\detectivework\evidence.dm"
-#include "code\modules\detectivework\footprints_and_rag.dm"
-#include "code\modules\detectivework\scanner.dm"
+#include "code\modules\DetectiveWork\detective_work.dm"
+#include "code\modules\DetectiveWork\evidence.dm"
+#include "code\modules\DetectiveWork\footprints_and_rag.dm"
+#include "code\modules\DetectiveWork\scanner.dm"
#include "code\modules\events\alien_infestation.dm"
#include "code\modules\events\blob.dm"
#include "code\modules\events\brand_intelligence.dm"
diff --git a/code/WorkInProgress/Cael_Aislinn/Economy/Accounts.dm b/code/WorkInProgress/Cael_Aislinn/Economy/Accounts.dm
index 779cddb9d39..464381ab688 100644
--- a/code/WorkInProgress/Cael_Aislinn/Economy/Accounts.dm
+++ b/code/WorkInProgress/Cael_Aislinn/Economy/Accounts.dm
@@ -338,3 +338,6 @@ var/global/list/all_money_accounts = list()
for(var/datum/money_account/D in all_money_accounts)
if(D.account_number == account_number)
return D
+
+/obj/machinery/account_database/process()
+ return 0
diff --git a/code/WorkInProgress/Cael_Aislinn/Economy/EFTPOS.dm b/code/WorkInProgress/Cael_Aislinn/Economy/EFTPOS.dm
index 5237df97d93..af06c1dfd82 100644
--- a/code/WorkInProgress/Cael_Aislinn/Economy/EFTPOS.dm
+++ b/code/WorkInProgress/Cael_Aislinn/Economy/EFTPOS.dm
@@ -70,8 +70,12 @@
D.name = "small parcel - 'EFTPOS access code'"
/obj/item/device/eftpos/proc/reconnect_database()
- for(var/obj/machinery/account_database/DB in world) //Hotfix until someone finds out why it isn't in 'machines'
- if(DB.z == src.z)
+ var/turf/location = get_turf(src)
+ if(!location)
+ return
+
+ for(var/obj/machinery/account_database/DB in machines) //Hotfix until someone finds out why it isn't in 'machines'
+ if(DB.z == location.z)
linked_db = DB
break
@@ -239,4 +243,4 @@
else
..()
- //emag?
\ No newline at end of file
+ //emag?
diff --git a/code/controllers/voting.dm b/code/controllers/voting.dm
index 9bb2197e6e8..d03aa546f92 100644
--- a/code/controllers/voting.dm
+++ b/code/controllers/voting.dm
@@ -119,8 +119,8 @@ datum/controller/vote
if(winners.len > 1)
if(mode != "gamemode" || ticker.hide_mode == 0) // Here we are making sure we don't announce potential game modes
text = "Vote Tied Between:\n"
- for(var/option in winners)
- text += "\t[option]\n"
+ for(var/option in winners)
+ text += "\t[option]\n"
. = pick(winners)
for(var/key in current_votes)
diff --git a/code/game/jobs/job/captain.dm b/code/game/jobs/job/captain.dm
index 7d93bdb3253..ec7028d99cf 100644
--- a/code/game/jobs/job/captain.dm
+++ b/code/game/jobs/job/captain.dm
@@ -35,6 +35,9 @@
L.imp_in = H
L.implanted = 1
world << "[H.real_name] is the captain!"
+ var/datum/organ/external/affected = H.organs_by_name["head"]
+ affected.implants += L
+ L.part = affected
return 1
get_access()
diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm
index b1abb4a7fbc..7e3d8c215ab 100644
--- a/code/game/jobs/job/civilian.dm
+++ b/code/game/jobs/job/civilian.dm
@@ -359,6 +359,7 @@
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
L.imp_in = H
L.implanted = 1
- return 1
-
-
+ var/datum/organ/external/affected = H.organs_by_name["head"]
+ affected.implants += L
+ L.part = affected
+ return 1
diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm
index b8f91554d47..4d0488f1229 100644
--- a/code/game/jobs/job/security.dm
+++ b/code/game/jobs/job/security.dm
@@ -42,6 +42,9 @@
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
L.imp_in = H
L.implanted = 1
+ var/datum/organ/external/affected = H.organs_by_name["head"]
+ affected.implants += L
+ L.part = affected
return 1
@@ -162,4 +165,4 @@
else
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_in_backpack)
- return 1
+ return 1
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 424e94eee07..f4ea117c397 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -1150,7 +1150,7 @@ About the new airlock wires panel:
if(src.isElectrified())
if(src.shock(user, 75))
return
- if(istype(C, /obj/item/device/detective_scanner))
+ if(istype(C, /obj/item/device/detective_scanner) || istype(C, /obj/item/taperoll))
return
src.add_fingerprint(user)
diff --git a/code/game/objects/items/devices/modkit.dm b/code/game/objects/items/devices/modkit.dm
new file mode 100644
index 00000000000..a7c221aa58f
--- /dev/null
+++ b/code/game/objects/items/devices/modkit.dm
@@ -0,0 +1,47 @@
+#define MODKIT_HELMET 1
+#define MODKIT_SUIT 2
+#define MODKIT_FULL 3
+
+/obj/item/device/modkit
+ name = "hardsuit modification kit"
+ desc = "A kit containing all the needed tools and parts to modify a hardsuit for another user."
+ icon_state = "modkit"
+ var/parts = MODKIT_FULL
+ var/from_helmet = /obj/item/clothing/head/helmet/space/rig
+ var/from_suit = /obj/item/clothing/suit/space/rig
+ var/to_helmet = /obj/item/clothing/head/cardborg
+ var/to_suit = /obj/item/clothing/suit/cardborg
+
+/obj/item/device/modkit/afterattack(obj/O, mob/user as mob)
+ var/flag
+ var/to_type
+ if(istype(O,from_helmet))
+ flag = MODKIT_HELMET
+ to_type = to_helmet
+ else if(istype(O,from_suit))
+ flag = MODKIT_SUIT
+ to_type = to_suit
+ else
+ return
+ if(!(parts & flag))
+ user << "This kit has no parts for this modification left."
+ return
+ if(istype(O,to_type))
+ user << "[O] is already modified."
+ return
+ if(!isturf(O.loc))
+ user << "[O] must be safely placed on the ground for modification."
+ return
+ playsound(user.loc, 'sound/items/Screwdriver.ogg', 100, 1)
+ var/N = new to_type(O.loc)
+ user.visible_message("\red [user] opens \the [src] and modifies \the [O] into \the [N].","\red You open \the [src] and modify \the [O] into \the [N].")
+ del(O)
+ parts &= ~flag
+ if(!parts)
+ del(src)
+
+/obj/item/device/modkit/tajaran
+ name = "tajara hardsuit modification kit"
+ desc = "A kit containing all the needed tools and parts to modify a hardsuit for another user. This one looks like it's meant for Tajara."
+ to_helmet = /obj/item/clothing/head/helmet/space/rig/tajara
+ to_suit = /obj/item/clothing/suit/space/rig/tajara
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm
index 6740fa109e5..068dece3bba 100644
--- a/code/game/objects/items/weapons/cards_ids.dm
+++ b/code/game/objects/items/weapons/cards_ids.dm
@@ -208,7 +208,7 @@
if(user.mind.special_role)
usr << "\blue The card's microscanners activate as you pass it over the ID, copying its access."
-
+/obj/item/weapon/card/id/syndicate/var/mob/registered_user = null
/obj/item/weapon/card/id/syndicate/attack_self(mob/user as mob)
if(!src.registered_name)
//Stop giving the players unsanitized unputs! You are giving ways for players to intentionally crash clients! -Nodrak
@@ -226,9 +226,32 @@
src.assignment = u
src.name = "[src.registered_name]'s ID Card ([src.assignment])"
user << "\blue You successfully forge the ID card."
+ registered_user = user
+ else if(registered_user == user)
+ switch(alert("Would you like to display the ID, or retitle it?","Choose.","Rename","Show"))
+ if("Rename")
+ var t = copytext(sanitize(input(user, "What name would you like to put on this card?", "Agent card name", ishuman(user) ? user.real_name : user.name)),1,26)
+ if(!t || t == "Unknown" || t == "floor" || t == "wall" || t == "r-wall") //Same as mob/new_player/prefrences.dm
+ alert("Invalid name.")
+ return
+ src.registered_name = t
+
+ var u = copytext(sanitize(input(user, "What occupation would you like to put on this card?\nNote: This will not grant any access levels other than Maintenance.", "Agent card job assignment", "Assistant")),1,MAX_MESSAGE_LEN)
+ if(!u)
+ alert("Invalid assignment.")
+ src.registered_name = ""
+ return
+ src.assignment = u
+ src.name = "[src.registered_name]'s ID Card ([src.assignment])"
+ user << "\blue You successfully forge the ID card."
+ return
+ if("Show")
+ ..()
else
..()
+
+
/obj/item/weapon/card/id/syndicate_command
name = "syndicate ID card"
desc = "An ID straight from the Syndicate."
diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm
index 5d6bd479c47..5637f47f983 100644
--- a/code/game/objects/items/weapons/stunbaton.dm
+++ b/code/game/objects/items/weapons/stunbaton.dm
@@ -98,6 +98,7 @@
add_fingerprint(user)
/obj/item/weapon/melee/baton/throw_impact(atom/hit_atom)
+ . = ..()
if (prob(50))
if(istype(hit_atom, /mob/living))
var/mob/living/carbon/human/H = hit_atom
@@ -116,9 +117,6 @@
H.attack_log += "\[[time_stamp()]\] Stunned by thrown [src.name] last touched by ([src.fingerprintslast])"
log_attack("Flying [src.name], last touched by ([src.fingerprintslast]) stunned [H.name] ([H.ckey])" )
- return
- return ..()
-
/obj/item/weapon/melee/baton/emp_act(severity)
switch(severity)
if(1)
diff --git a/code/game/objects/structures/stool_bed_chair_nest/stools.dm b/code/game/objects/structures/stool_bed_chair_nest/stools.dm
index ab7a55e1da8..a068af11938 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/stools.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/stools.dm
@@ -37,7 +37,7 @@
/obj/structure/stool/MouseDrop(atom/over_object)
if (istype(over_object, /mob/living/carbon/human))
var/mob/living/carbon/human/H = over_object
- if (!H.restrained() && !H.stat && in_range(src, over_object))
+ if (H==usr && !H.restrained() && !H.stat && in_range(src, over_object))
var/obj/item/weapon/stool/S = new/obj/item/weapon/stool()
S.origin = src
src.loc = S
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 92f18afcc17..e81e30db068 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -124,7 +124,7 @@ BLIND // can't see anything
body_parts_covered = HANDS
slot_flags = SLOT_GLOVES
attack_verb = list("challenged")
- species_restricted = list("exclude","Unathi","Tajara")
+ species_restricted = list("exclude","Unathi","Tajaran")
/obj/item/clothing/gloves/examine()
set src in usr
@@ -169,7 +169,7 @@ BLIND // can't see anything
permeability_coefficient = 0.50
slowdown = SHOES_SLOWDOWN
- species_restricted = list("exclude","Unathi","Tajara")
+ species_restricted = list("exclude","Unathi","Tajaran")
//Suit
/obj/item/clothing/suit
diff --git a/code/modules/clothing/gloves/stungloves.dm b/code/modules/clothing/gloves/stungloves.dm
index dd531389681..ea3dd1dc3f4 100644
--- a/code/modules/clothing/gloves/stungloves.dm
+++ b/code/modules/clothing/gloves/stungloves.dm
@@ -4,18 +4,21 @@
..()
return
if(istype(W, /obj/item/weapon/cable_coil))
- var/obj/item/weapon/cable_coil/C = W
- if(!wired)
- if(C.amount >= 2)
- C.use(2)
- wired = 1
- siemens_coefficient = 3.0
- user << "You wrap some wires around [src]."
- update_icon()
+ if(!("stunglove" in species_restricted))
+ var/obj/item/weapon/cable_coil/C = W
+ if(!wired)
+ if(C.amount >= 2)
+ C.use(2)
+ wired = 1
+ siemens_coefficient = 3.0
+ user << "You wrap some wires around [src]."
+ update_icon()
+ else
+ user << "There is not enough wire to cover [src]."
else
- user << "There is not enough wire to cover [src]."
+ user << "[src] are already wired."
else
- user << "[src] are already wired."
+ user << ""
else if(istype(W, /obj/item/weapon/cell))
if(!wired)
@@ -30,6 +33,26 @@
user << "[src] already have a cell."
else if(istype(W, /obj/item/weapon/wirecutters))
+ if("exclude" in species_restricted)
+ name = "mangled [name]"
+ species_restricted -= "Unathi"
+ species_restricted -= "Tajaran"
+ species_restricted += "stunglove"
+
+ wired = null
+
+ if(cell)
+ cell.updateicon()
+ cell.loc = get_turf(src.loc)
+ cell = null
+
+ playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
+ user.visible_message("\red [user] snips the fingertips off [src].","\red You snip the fingertips off [src].")
+
+ update_icon()
+
+ return
+
if(cell)
cell.updateicon()
cell.loc = get_turf(src.loc)
diff --git a/code/modules/clothing/spacesuits/rig.dm b/code/modules/clothing/spacesuits/rig.dm
index 24b209f9a6f..b4e7318c138 100644
--- a/code/modules/clothing/spacesuits/rig.dm
+++ b/code/modules/clothing/spacesuits/rig.dm
@@ -12,7 +12,7 @@
icon_action_button = "action_hardhat"
heat_protection = HEAD
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECITON_TEMPERATURE
- species_restricted = list("exclude","Unathi","Tajara","Skrell","Diona","Vox")
+ species_restricted = list("exclude","Unathi","Tajaran","Skrell","Diona","Vox")
attack_self(mob/user)
if(!isturf(user.loc))
@@ -47,7 +47,7 @@
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd)
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECITON_TEMPERATURE
- species_restricted = list("exclude","Unathi","Tajara","Diona","Vox")
+ species_restricted = list("exclude","Unathi","Tajaran","Diona","Vox")
//Chief Engineer's rig
/obj/item/clothing/head/helmet/space/rig/elite
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 71621e49e37..7297fee4ab1 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -202,7 +202,7 @@
if(getBrainLoss() >= 50)
if(10 <= rn && rn <= 12) if(!lying)
src << "\red Your legs won't respond properly, you fall down."
- lying = 1
+ resting = 1
proc/handle_stasis_bag()
// Handle side effects from stasis bag
diff --git a/code/modules/mob/living/silicon/say.dm b/code/modules/mob/living/silicon/say.dm
index 4dac67e8852..7c63628ced4 100644
--- a/code/modules/mob/living/silicon/say.dm
+++ b/code/modules/mob/living/silicon/say.dm
@@ -4,7 +4,7 @@
if (ending == "?")
return "queries, \"[text]\"";
else if (ending == "!")
- return "declares, \"[copytext(text, 1, length(text))]\"";
+ return "declares, \"[text]\"";
return "states, \"[text]\"";
diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm
index 48a1fd00b31..72a4a2adf7b 100644
--- a/code/modules/paperwork/stamps.dm
+++ b/code/modules/paperwork/stamps.dm
@@ -42,7 +42,7 @@
/obj/item/weapon/stamp/cmo
name = "chief medical officer's rubber stamp"
icon_state = "stamp-cmo"
- color = "medical"
+ color = "cmo"
/obj/item/weapon/stamp/denied
name = "\improper DENIED rubber stamp"
diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm
index 3efe6ee88b4..ffa49d8122d 100644
--- a/code/modules/projectiles/guns/energy/stun.dm
+++ b/code/modules/projectiles/guns/energy/stun.dm
@@ -33,14 +33,16 @@
charge_tick++
if(charge_tick < recharge_time) return 0
charge_tick = 0
-
+
if(!power_supply) return 0 //sanity
+ if(power_supply.charge >= power_supply.maxcharge) return 0 // check if we actually need to recharge
+
if(isrobot(src.loc))
var/mob/living/silicon/robot/R = src.loc
if(R && R.cell)
R.cell.use(charge_cost) //Take power from the borg...
power_supply.give(charge_cost) //... to recharge the shot
-
+
update_icon()
return 1
diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm
index 7f3dea0f7a4..9c7bc060297 100755
--- a/code/modules/recycling/sortingmachinery.dm
+++ b/code/modules/recycling/sortingmachinery.dm
@@ -157,7 +157,7 @@
/obj/item/device/destTagger
name = "destination tagger"
desc = "Used to set the destination of properly wrapped packages."
- icon_state = "forensic0"
+ icon_state = "forensic0-old"
var/currTag = 0
//The whole system for the sorttype var is determined based on the order of this list,
//disposals must always be 1, since anything that's untagged will automatically go to disposals, or sorttype = 1 --Superxpdude
diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi
index 0152c2cd2b7..a602912b1d2 100644
Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ