diff --git a/baystation12.dme b/baystation12.dme
index 6ff7685c28..cb3cc48b23 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -80,7 +80,6 @@
#define FILE_DIR "code/game/objects/stacks"
#define FILE_DIR "code/game/objects/storage"
#define FILE_DIR "code/game/objects/tanks"
-#define FILE_DIR "code/game/structure"
#define FILE_DIR "code/game/verbs"
#define FILE_DIR "code/js"
#define FILE_DIR "code/modules"
@@ -150,6 +149,7 @@
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/tajara_sprites"
#define FILE_DIR "code/WorkInProgress/mapload"
#define FILE_DIR "code/WorkInProgress/Mini"
+#define FILE_DIR "code/WorkInProgress/Mloc"
#define FILE_DIR "code/WorkInProgress/organs"
#define FILE_DIR "code/WorkInProgress/Ported"
#define FILE_DIR "code/WorkInProgress/Ported/Abi79"
@@ -728,7 +728,6 @@
#include "code\game\objects\tanks\emergency.dm"
#include "code\game\objects\tanks\jetpack.dm"
#include "code\game\objects\tanks\oxygen.dm"
-#include "code\game\structure\structure.dm"
#include "code\game\verbs\AI_status.dm"
#include "code\game\verbs\checkkarma.dm"
#include "code\game\verbs\ooc.dm"
@@ -1035,6 +1034,7 @@
#include "code\WorkInProgress\mapload\reader.dm"
#include "code\WorkInProgress\Mini\atmos_control.dm"
#include "code\WorkInProgress\Mini\customitems.dm"
+#include "code\WorkInProgress\Mloc\Shortcuts.dm"
#include "code\WorkInProgress\Ported\head.dm"
#include "code\WorkInProgress\Ported\policetape.dm"
#include "code\WorkInProgress\Ported\Abi79\uplink_kits.dm"
diff --git a/code/WorkInProgress/Mloc/Shortcuts.dm b/code/WorkInProgress/Mloc/Shortcuts.dm
new file mode 100644
index 0000000000..8d537d1583
--- /dev/null
+++ b/code/WorkInProgress/Mloc/Shortcuts.dm
@@ -0,0 +1,33 @@
+/mob/verb/shortcut_changeintent(var/changeto as num)
+ set name = "_changeintent"
+ set hidden = 1
+ if(istype(usr,/mob/living/carbon))
+ if(changeto == 1)
+ switch(usr.a_intent)
+ if("help")
+ usr.a_intent = "disarm"
+ usr.hud_used.action_intent.icon_state = "disarm"
+ if("disarm")
+ usr.a_intent = "hurt"
+ usr.hud_used.action_intent.icon_state = "harm"
+ if("hurt")
+ usr.a_intent = "grab"
+ usr.hud_used.action_intent.icon_state = "grab"
+ if("grab")
+ usr.a_intent = "help"
+ usr.hud_used.action_intent.icon_state = "help"
+ else if(changeto == -1)
+ switch(usr.a_intent)
+ if("help")
+ usr.a_intent = "grab"
+ usr.hud_used.action_intent.icon_state = "grab"
+ if("disarm")
+ usr.a_intent = "help"
+ usr.hud_used.action_intent.icon_state = "help"
+ if("hurt")
+ usr.a_intent = "disarm"
+ usr.hud_used.action_intent.icon_state = "disarm"
+ if("grab")
+ usr.a_intent = "hurt"
+ usr.hud_used.action_intent.icon_state = "harm"
+ return
\ No newline at end of file
diff --git a/code/WorkInProgress/Ported/Abi79/uplinks.dm b/code/WorkInProgress/Ported/Abi79/uplinks.dm
index 85ffa1f891..a27345d4c0 100644
--- a/code/WorkInProgress/Ported/Abi79/uplinks.dm
+++ b/code/WorkInProgress/Ported/Abi79/uplinks.dm
@@ -193,10 +193,20 @@ A list of items and costs is stored under the datum of every game mode, alongsid
return
explode()
+ var/turf/location = get_turf(src.loc)
+ if(location)
+ location.hotspot_expose(700,125)
+ explosion(location, 0, 0, 2, 4, 1)
+
var/obj/item/weapon/implant/uplink/U = src.loc
var/mob/living/A = U.imp_in
- A.gib()
- ..()
+ var/datum/organ/external/head = A:organs["head"]
+ head.destroyed = 1
+ spawn(2)
+ head.droplimb()
+ del(src.master)
+ del(src)
+ return
/obj/item/device/uplink/radio
diff --git a/code/defines/obj.dm b/code/defines/obj.dm
index 6e19ed87e7..5655f73a1e 100644
--- a/code/defines/obj.dm
+++ b/code/defines/obj.dm
@@ -663,6 +663,25 @@
anchored = 1.0
var/list/buckled_mobs = list( )
+/obj/stool/chair/comfy
+ name = "comfy chair"
+ desc = "It looks comfy."
+
+/obj/stool/chair/comfy/brown
+ icon_state = "comfychair_brown"
+
+/obj/stool/chair/comfy/beige
+ icon_state = "comfychair_beige"
+
+/obj/stool/chair/comfy/teal
+ icon_state = "comfychair_teal"
+
+/obj/stool/chair/comfy/black
+ icon_state = "comfychair_black"
+
+/obj/stool/chair/comfy/lime
+ icon_state = "comfychair_lime"
+
/obj/structure/stool/chair/e_chair
name = "electrified chair"
desc = "Looks absolutely terrifying!"
diff --git a/code/game/atom_procs.dm b/code/game/atom_procs.dm
index 8c340f1ba2..a265cd2e1e 100644
--- a/code/game/atom_procs.dm
+++ b/code/game/atom_procs.dm
@@ -293,6 +293,9 @@
/atom/Click(location,control,params)
//world << "atom.Click() on [src] by [usr] : src.type is [src.type]"
var/list/pram = params2list(params)
+ if((pram["alt"] != null && pram["ctrl"] != null && pram["left"] != null) && istype(src,/atom/movable))
+ src:pull()
+ return
if(pram["ctrl"] != null && pram["left"] != null)
src.examine()
return
diff --git a/code/game/dna.dm b/code/game/dna.dm
index acb1d477f6..553c96c223 100644
--- a/code/game/dna.dm
+++ b/code/game/dna.dm
@@ -482,6 +482,7 @@
I.implanted = O
O.flavor_text = M.flavor_text
O.warn_flavor_changed()
+ O.update_clothing()
del(M)
return
//////////////////////////////////////////////////////////// Monkey Block
diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm
index 58949c45ee..57d4d002cd 100644
--- a/code/game/jobs/job/civilian.dm
+++ b/code/game/jobs/job/civilian.dm
@@ -53,7 +53,7 @@
flag = BOTANIST
department_flag = CIVILIAN
faction = "Station"
- total_positions = 3
+ total_positions = 2
spawn_positions = 2
supervisors = "the head of personnel"
diff --git a/code/game/jobs/job/engineering.dm b/code/game/jobs/job/engineering.dm
index c5b159aaef..b28011c762 100644
--- a/code/game/jobs/job/engineering.dm
+++ b/code/game/jobs/job/engineering.dm
@@ -51,7 +51,7 @@
flag = ATMOSTECH
department_flag = ENGSEC
faction = "Station"
- total_positions = 3
+ total_positions = 2
spawn_positions = 2
supervisors = "the chief engineer"
@@ -73,7 +73,7 @@
flag = ROBOTICIST
department_flag = ENGSEC
faction = "Station"
- total_positions = 2
+ total_positions = 1
spawn_positions = 1
supervisors = "the chief engineer and research director"
diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm
index 501200ebcf..bc3ce694f4 100644
--- a/code/game/jobs/job/medical.dm
+++ b/code/game/jobs/job/medical.dm
@@ -52,8 +52,8 @@
flag = GENETICIST
department_flag = MEDSCI
faction = "Station"
- total_positions = 2
- spawn_positions = 2
+ total_positions = 1
+ spawn_positions = 1
supervisors = "the chief medical officer and research director"
diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm
index a764f6e98f..3eedd80b16 100644
--- a/code/game/jobs/job/science.dm
+++ b/code/game/jobs/job/science.dm
@@ -49,8 +49,8 @@
flag = CHEMIST
department_flag = MEDSCI
faction = "Station"
- total_positions = 2
- spawn_positions = 2
+ total_positions = 1
+ spawn_positions = 1
supervisors = "the chief medical officer and the research director"
diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm
index 7de7e40134..b165fe74ce 100644
--- a/code/game/jobs/job_controller.dm
+++ b/code/game/jobs/job_controller.dm
@@ -246,6 +246,7 @@ var/global/datum/controller/occupations/job_master
var/obj/item/weapon/storage/backpack/BPK = new/obj/item/weapon/storage/backpack(H)
H.equip_if_possible(BPK, H.slot_back,1)
H.equip_if_possible(new /obj/item/weapon/storage/box(H.back), H.slot_in_backpack)
+ H.update_clothing()
return 1
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 8aaac08db5..fe5606c369 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -528,7 +528,7 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }.
if (src.canAIHack())
src.hack(user)
return
- else if(user)
+ else if(user && !isrobot(user))
if(!C)
return
if(C.in_use)
@@ -542,7 +542,7 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }.
return
if(istype(C, /obj/item/device/hacktool/engineer))
return
- else
+ else if(!isrobot(user))
world << "ERROR: Mob was null when calling attack_ai on [src.name] at [src.x],[src.y],[src.z]"
return
diff --git a/code/game/objects/items/clothing.dm b/code/game/objects/items/clothing.dm
index e9c35eb8eb..cd62e7f396 100644
--- a/code/game/objects/items/clothing.dm
+++ b/code/game/objects/items/clothing.dm
@@ -174,6 +174,7 @@ THERMAL GLASSES
desc = A.desc
icon_state = A.icon_state
item_state = A.item_state
+ usr.update_clothing()
color = A.color
/obj/item/clothing/under/chameleon/emp_act(severity)
diff --git a/code/game/objects/items/item.dm b/code/game/objects/items/item.dm
index 44c9d1bd3a..517a5f07e9 100755
--- a/code/game/objects/items/item.dm
+++ b/code/game/objects/items/item.dm
@@ -10,6 +10,7 @@
/obj/item/proc/dropped(mob/user as mob)
..()
+ user.update_clothing()
// So you can't drop the Offhand
if(istype(src, /obj/item/weapon/offhand))
@@ -369,6 +370,11 @@ mob/proc/flash_weak_pain()
if(istype(M, /mob/living/carbon/human))
M:attacked_by(src, user, def_zone)
+ var/mob/living/carbon/human/H = M
+ if(H)
+ H.UpdateDamageIcon()
+ H.update_clothing()
+ user.update_clothing()
else
switch(src.damtype)
if("brute")
diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm
index c48b54bb2c..b25c819d6c 100644
--- a/code/game/objects/items/weapons/cigs_lighters.dm
+++ b/code/game/objects/items/weapons/cigs_lighters.dm
@@ -266,6 +266,7 @@ ZIPPO
else
user.r_hand = W
W.layer = 20
+ user.update_clothing()
else
return ..()
src.update_icon()
diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm
index 7468693ea3..0e3aa57dd8 100644
--- a/code/game/objects/items/weapons/dna_injector.dm
+++ b/code/game/objects/items/weapons/dna_injector.dm
@@ -87,6 +87,7 @@
spawn( 0 )
O.process()
+ user.update_clothing()
return
else
for(var/mob/O in viewers(M, null))
diff --git a/code/game/objects/items/weapons/implants/implantfreedom.dm b/code/game/objects/items/weapons/implants/implantfreedom.dm
index 6d40b6aa56..d8665dd797 100644
--- a/code/game/objects/items/weapons/implants/implantfreedom.dm
+++ b/code/game/objects/items/weapons/implants/implantfreedom.dm
@@ -29,6 +29,7 @@
dropped(source)
if (W)
W.layer = initial(W.layer)
+ source.update_clothing()
return
diff --git a/code/game/objects/stool.dm b/code/game/objects/stool.dm
index 89b5977b82..62a2ff5957 100644
--- a/code/game/objects/stool.dm
+++ b/code/game/objects/stool.dm
@@ -69,6 +69,7 @@
if (M.buckled == src)
M.buckled = null
M.anchored = 0
+ M.update_clothing()
/obj/structure/stool/proc/manual_unbuckle_all(mob/user as mob)
var/N = 0;
@@ -87,6 +88,7 @@
// world << "[M] is no longer buckled to [src]"
M.anchored = 0
M.buckled = null
+ M.update_clothing()
N++
return N
@@ -109,6 +111,7 @@
M.buckled = src
M.loc = src.loc
M.dir = src.dir
+ M.update_clothing()
src:buckled_mobs += M
src.add_fingerprint(user)
return
@@ -339,6 +342,7 @@
M.pixel_y = 0
M.anchored = 0
M.buckled = null
+ M.update_clothing()
N++
if(N)
density = 0
diff --git a/code/game/structure/structure.dm b/code/game/structure/structure.dm
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm
index 6e7df37b39..039aac0192 100644
--- a/code/modules/assembly/assembly.dm
+++ b/code/modules/assembly/assembly.dm
@@ -140,6 +140,7 @@
process()
+ processing_objects.Remove(src)
return
diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm
index 3a4633f21b..f6091cb602 100644
--- a/code/modules/assembly/infrared.dm
+++ b/code/modules/assembly/infrared.dm
@@ -45,10 +45,6 @@
if(scanning)
src.overlays += text("infrared_old2")
src.small_icon_state_overlays += text("infrared_on")
- if(master && istype(master, /obj/item/weapon/chem_grenade))
- var/obj/item/weapon/chem_grenade/M = master
- M.c_state(1)
-
if(holder)
holder.update_icon()
return
diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm
index bcb5b31b7e..911ca27f02 100644
--- a/code/modules/assembly/proximity.dm
+++ b/code/modules/assembly/proximity.dm
@@ -87,15 +87,9 @@
if(timing)
overlays += text("prox_timing")
small_icon_state_overlays += text("prox_timing")
- if(master && istype(master, /obj/item/weapon/chem_grenade))
- var/obj/item/weapon/chem_grenade/M = master
- M.c_state(1)
if(scanning)
overlays += text("prox_scanning")
small_icon_state_overlays += text("prox_scanning")
- if(master && istype(master, /obj/item/weapon/chem_grenade))
- var/obj/item/weapon/chem_grenade/M = master
- M.c_state(1)
if(holder)
holder.update_icon()
diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm
index 2ba02fd7c0..4b942d4a41 100644
--- a/code/modules/assembly/timer.dm
+++ b/code/modules/assembly/timer.dm
@@ -64,9 +64,6 @@
if(timing)
overlays += text("timer_timing")
small_icon_state_overlays += text("timer_timing")
- if(master && istype(master, /obj/item/weapon/chem_grenade))
- var/obj/item/weapon/chem_grenade/M = master
- M.c_state(1)
if(holder)
holder.update_icon()
return
diff --git a/code/modules/chemical/Chemistry-Tools.dm b/code/modules/chemical/Chemistry-Tools.dm
index 5cef2efbcb..e962e41725 100644
--- a/code/modules/chemical/Chemistry-Tools.dm
+++ b/code/modules/chemical/Chemistry-Tools.dm
@@ -289,12 +289,6 @@
if(beaker_two)
beaker_two.loc = get_turf(src.loc)
- c_state(var/i = 0)
- if(i)
- icon_state = initial(icon_state) + "_armed"
- return
-
-
large
name = "Large Chem Grenade"
desc = "An oversized grenade that affects a larger area."
diff --git a/code/modules/mob/living/carbon/human/human_attackalien.dm b/code/modules/mob/living/carbon/human/human_attackalien.dm
index 1b8e5a1ef1..0f64a90468 100644
--- a/code/modules/mob/living/carbon/human/human_attackalien.dm
+++ b/code/modules/mob/living/carbon/human/human_attackalien.dm
@@ -70,4 +70,5 @@
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message(text("\red [] has tried to disarm []!", M, src), 1)
+ update_clothing()
return
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm
index 4099ab4174..9b02e587c1 100644
--- a/code/modules/mob/living/carbon/human/human_attackhand.dm
+++ b/code/modules/mob/living/carbon/human/human_attackhand.dm
@@ -124,6 +124,7 @@
playsound(loc, 'punchmiss.ogg', 25, 1, -1)
visible_message("\red [M] attempted to disarm [src]!")
+ update_clothing()
return
diff --git a/code/modules/mob/living/carbon/human/human_attackpaw.dm b/code/modules/mob/living/carbon/human/human_attackpaw.dm
index 8d01ca3e8f..568ca9969d 100644
--- a/code/modules/mob/living/carbon/human/human_attackpaw.dm
+++ b/code/modules/mob/living/carbon/human/human_attackpaw.dm
@@ -20,4 +20,5 @@
src = null
src = H.monkeyize()
contract_disease(D,1,0)
+ update_clothing()
return
diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm
index 53f49a1ce5..013050d9f9 100644
--- a/code/modules/mob/living/carbon/human/human_damage.dm
+++ b/code/modules/mob/living/carbon/human/human_damage.dm
@@ -67,4 +67,5 @@
UpdateDamageIcon()
updatehealth()
+ update_clothing()
return 1
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 67773f5f5f..0625a31bcb 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -135,4 +135,5 @@ emp_act
if(bloody)
if(src.wear_suit) src.wear_suit.add_blood(src)
if(src.w_uniform) src.w_uniform.add_blood(src)
- src.UpdateDamageIcon()
\ No newline at end of file
+ UpdateDamageIcon()
+ update_clothing()
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 7df3967af5..0fec1a769b 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -12,6 +12,7 @@
life_tick = 0
isbreathing = 1
holdbreath = 0
+ lyingcheck = 0
/mob/living/carbon/human/Life()
set invisibility = 0
@@ -85,7 +86,10 @@
handle_health_updates()
// Update clothing
- update_clothing()
+// update_clothing()
+ if(lyingcheck != lying) //This is a fix for falling down / standing up not updating icons. Instead of going through and changing every
+ update_clothing() //instance in the code where lying is modified, I've just added a new variable "lyingcheck" which will be compared
+ lyingcheck = lying //to lying, so if lying ever changes, update_clothing() will run like normal.
if(client)
handle_regular_hud_updates()
diff --git a/code/modules/mob/living/carbon/metroid/life.dm b/code/modules/mob/living/carbon/metroid/life.dm
index 8cc12f2c5a..1f9933e8a4 100644
--- a/code/modules/mob/living/carbon/metroid/life.dm
+++ b/code/modules/mob/living/carbon/metroid/life.dm
@@ -211,6 +211,7 @@
var/Tempstun = 0 // temporary temperature stuns
var/Discipline = 0 // if a metroid has been hit with a freeze gun, or wrestled/attacked off a human, they become disciplined and don't attack anymore for a while
var/SStun = 0 // stun variable
+ var/Obstacle = 1 // determines whether the turf the metroid will head to has an obstacle
proc
AIprocess() // the master AI process
@@ -228,7 +229,9 @@
switch(nutrition)
if(150 to 800) hungry = 1
if(0 to 149) starving = 1
+
AIproc = 1
+
while(AIproc && stat != 2 && (attacked > 0 || starving || hungry || rabid || Victim))
if(Victim) // can't eat AND have this little process at the same time
break
@@ -242,63 +245,63 @@
AIproc = 0
break
- if(Target)
- for(var/mob/living/carbon/metroid/M in view(1,Target))
- if(M.Victim == Target)
- Target = null
- AIproc = 0
- break
- if(!AIproc)
+ for(var/mob/living/carbon/metroid/M in view(1,Target))
+ if(M.Victim == Target)
+ Target = null
+ AIproc = 0
break
- if(Target in view(1,src))
+ if(!AIproc)
+ break
- if(istype(Target, /mob/living/silicon))
- if(!Atkcool)
- spawn()
- Atkcool = 1
- sleep(15)
- Atkcool = 0
+ if(get_obstacle_ok(Target))
+ Obstacle = 0
+ else Obstacle = 1
- if(get_obstacle_ok(Target))
- Target.attack_metroid(src)
- return
- if(prob(80) && !Target.lying)
+ if(Target in view(1,src))
- if(Target.client && Target.health >= rand(10,30))
- if(!Atkcool)
- spawn()
- Atkcool = 1
- sleep(25)
- Atkcool = 0
+ if(istype(Target, /mob/living/silicon))
+ if(!Atkcool)
+ spawn()
+ Atkcool = 1
+ sleep(15)
+ Atkcool = 0
- if(get_obstacle_ok(Target))
- Target.attack_metroid(src)
+ if(!Obstacle)
+ Target.attack_metroid(src)
+ return
+
+ if(prob(80) && !Target.lying && Target.client && Target.health >= rand(10,30))
+
+ if(!Atkcool)
+ spawn()
+ Atkcool = 1
+ sleep(25)
+ Atkcool = 0
+
+ if(!Obstacle)
+ Target.attack_metroid(src)
- if(prob(30))
- step_to(src, Target)
-
- else
- if(!Atkcool && get_obstacle_ok(Target))
- Feedon(Target)
-
- else
- if(!Atkcool && get_obstacle_ok(Target))
- Feedon(Target)
+ if(prob(30))
+ step_to(src, Target)
else
- if(Target in view(30, src))
- if(get_obstacle_ok(Target))
- step_to(src, Target)
+ if(!Atkcool && !Obstacle)
+ Feedon(Target)
- else
- Target = null
- AIproc = 0
- break
+ else
+ if(Target in view(30, src))
+ if(!Obstacle)
+ step_to(src, Target)
+
+ else
+ Target = null
+ AIproc = 0
+ break
var/sleeptime = movement_delay()
- if(sleeptime <= 0) sleeptime = 1
+ if(sleeptime < 1) sleeptime = 1
sleep(sleeptime + 2) // this is about as fast as a player Metroid can go
diff --git a/code/modules/mob/organ/organ.dm b/code/modules/mob/organ/organ.dm
index 978906f84d..1e74a8c9d1 100644
--- a/code/modules/mob/organ/organ.dm
+++ b/code/modules/mob/organ/organ.dm
@@ -293,6 +293,7 @@
var/lol = pick(cardinal)
step(H,lol)
destroyed = 1
+ src.owner.update_clothing()
proc/createwound(var/size = 1)
if(ishuman(src.owner))
diff --git a/code/modules/mob/screen.dm b/code/modules/mob/screen.dm
index 59c871e55b..edf60ec1f9 100644
--- a/code/modules/mob/screen.dm
+++ b/code/modules/mob/screen.dm
@@ -474,6 +474,7 @@
usr << "\blue You successfully remove your handcuffs."
usr:handcuffed:loc = usr:loc
usr:handcuffed = null
+ usr.update_clothing()
if(istype(usr, /mob/living/carbon/human) && istype(usr:wear_suit, /obj/item/clothing/suit/straight_jacket) && usr:canmove && (usr.last_special <= world.time))
usr.next_move = world.time + 200
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 00664be667..b256cceda1 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -464,6 +464,7 @@
m_amt = 60
var/rigged = 0 // true if rigged to explode
var/brightness = 2 //how much light it gives off
+ var/repair_state = 0
/obj/item/weapon/light/tube
name = "light tube"
@@ -497,9 +498,15 @@
if(LIGHT_BURNED)
icon_state = "[base_state]-burned"
desc = "A burnt-out [name]."
+ if(repair_state == 1)
+ desc += " It has some wires hanging out."
if(LIGHT_BROKEN)
icon_state = "[base_state]-broken"
desc = "A broken [name]."
+ if(repair_state == 1)
+ desc += " It has some wires hanging out."
+ else if(repair_state == 2)
+ desc += " It has had new wires put in."
/obj/item/weapon/light/New()
@@ -514,8 +521,9 @@
// attack bulb/tube with object
// if a syringe, can inject plasma to make it explode
+// also repairing them with wire and screwdriver
+// and glass if it's broken
/obj/item/weapon/light/attackby(var/obj/item/I, var/mob/user)
- ..()
if(istype(I, /obj/item/weapon/reagent_containers/syringe))
var/obj/item/weapon/reagent_containers/syringe/S = I
@@ -526,8 +534,36 @@
rigged = 1
S.reagents.clear_reagents()
- else
- ..()
+ return
+ if(status != 0)
+ if(istype(I, /obj/item/weapon/cable_coil) && repair_state == 0)
+ user << "You put some new wiring into the [src]."
+ I:use(1)
+ repair_state = 1
+ update()
+ return
+ if(istype(I, /obj/item/weapon/screwdriver) && repair_state == 1)
+ user << "You attach the new wiring."
+ playsound(src.loc, 'Screwdriver.ogg', 100, 1)
+ if(status == LIGHT_BURNED)
+ repair_state = 0
+ status = LIGHT_OK
+ else
+ repair_state = 2
+ update()
+ return
+ if(istype(I, /obj/item/stack/sheet/glass) && status == LIGHT_BROKEN)
+ user << "You repair the glass of the [src]." //this is worded terribly
+ I:use(1)
+ force = 2 //because breaking it changes the force, this changes it back
+ if(repair_state == 2)
+ repair_state = 0
+ status = LIGHT_OK
+ else
+ status = LIGHT_BURNED
+ update()
+ return
+ ..()
return
// called after an attack with a light item
diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi
index cf7cc1e282..28e0bd88ef 100644
Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ
diff --git a/interface/skin.dmf b/interface/skin.dmf
index 2bc55b414d..0a20c2a156 100644
--- a/interface/skin.dmf
+++ b/interface/skin.dmf
@@ -59,6 +59,14 @@ macro "macro"
name = "CTRL+D"
command = "drop-item"
is-disabled = false
+ elem
+ name = "CTRL+E"
+ command = "_changeintent 1"
+ is-disabled = false
+ elem
+ name = "CTRL+Q"
+ command = "_changeintent -1"
+ is-disabled = false
elem
name = "CTRL+S"
command = "swap-hand"