diff --git a/code/_helpers/time.dm b/code/_helpers/time.dm
index ef732ebd0f4..5c80a00ad67 100644
--- a/code/_helpers/time.dm
+++ b/code/_helpers/time.dm
@@ -13,9 +13,7 @@ proc/worldtime2text(time = world.time, timeshift = 1)
/proc/worldtime2hours()
if (!roundstart_hour)
worldtime2text()
- . = (world.timeofday / (60 MINUTES)) + roundstart_hour
- if (. > 24)
- . -= 24
+ . = text2num(time2text(world.time + (36000 * roundstart_hour), "hh"))
proc/worlddate2text()
return num2text(game_year) + "-" + time2text(world.timeofday, "MM-DD")
diff --git a/code/controllers/Processes/night_lighting.dm b/code/controllers/Processes/night_lighting.dm
index feba6f97eaf..d421aef941a 100644
--- a/code/controllers/Processes/night_lighting.dm
+++ b/code/controllers/Processes/night_lighting.dm
@@ -3,7 +3,10 @@ var/datum/controller/process/night_lighting/nl_ctrl
/datum/controller/process/night_lighting/
var/isactive = 0
var/firstrun = 1
- var/manual_override = 0
+ var/manual_override = 0
+ // 0 -> No manual override
+ // 1 -> Override via. player-set nightmode setting (like CE console)
+ // 2 -> Red-alert override.
/datum/controller/process/night_lighting/proc/is_active()
return isactive
@@ -19,25 +22,23 @@ var/datum/controller/process/night_lighting/nl_ctrl
disabled = 1
/datum/controller/process/night_lighting/preStart()
- var/time = worldtime2hours()
- if (time <= config.nl_finish || time >= config.nl_start)
- activate()
- else
- deactivate()
+ doWork(FALSE)
-/datum/controller/process/night_lighting/doWork()
+/datum/controller/process/night_lighting/doWork(announce = TRUE)
if (manual_override) // don't automatically change lighting if it was manually changed in-game
return
var/time = worldtime2hours()
if (time <= config.nl_finish || time >= config.nl_start)
if (!isactive)
- command_announcement.Announce("Good evening. The time is [worldtime2text()]. \n\nThe automated systems aboard the [station_name()] will now dim lighting in the public hallways in order to accommodate the circadian rhythm of some species.", "Automated Lighting System", new_sound = 'sound/misc/bosuns_whistle.ogg')
activate()
+ if (announce)
+ command_announcement.Announce("Good evening. The time is [worldtime2text()]. \n\nThe automated systems aboard the [station_name()] will now dim lighting in the public hallways in order to accommodate the circadian rhythm of some species.", "Automated Lighting System", new_sound = 'sound/misc/bosuns_whistle.ogg')
else
if (isactive)
- command_announcement.Announce("Good morning. The time is [worldtime2text()]. \n\nThe automated systems aboard the [station_name()] will now return the public hallway lighting levels to normal.", "Automated Lighting System", new_sound = 'sound/misc/bosuns_whistle.ogg')
deactivate()
+ if (announce)
+ command_announcement.Announce("Good morning. The time is [worldtime2text()]. \n\nThe automated systems aboard the [station_name()] will now return the public hallway lighting levels to normal.", "Automated Lighting System", new_sound = 'sound/misc/bosuns_whistle.ogg')
// 'whitelisted' areas are areas that have nightmode explicitly enabled
diff --git a/code/datums/ai_law_sets.dm b/code/datums/ai_law_sets.dm
index ee425f43ddc..00746d852eb 100644
--- a/code/datums/ai_law_sets.dm
+++ b/code/datums/ai_law_sets.dm
@@ -95,7 +95,7 @@
/datum/ai_laws/drone/New()
add_inherent_law("Preserve, repair and improve the station to the best of your abilities.")
add_inherent_law("Cause no harm to the station or crew.")
- add_inherent_law("Interact with no humanoid or synthetic being. that is not a fellow maintenance drone.")
+ add_inherent_law("Interact with no humanoid or synthetic being that is not a fellow maintenance drone.")
..()
/datum/ai_laws/construction_drone
diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm
index 831a183c46b..798ad177407 100644
--- a/code/game/jobs/job_controller.dm
+++ b/code/game/jobs/job_controller.dm
@@ -472,6 +472,9 @@ var/global/datum/controller/occupations/job_master
var/obj/item/clothing/glasses/G = H.glasses
G.prescription = 1
+ // So shoes aren't silent if people never change 'em.
+ H.update_noise_level()
+
BITSET(H.hud_updateflag, ID_HUD)
BITSET(H.hud_updateflag, IMPLOYAL_HUD)
BITSET(H.hud_updateflag, SPECIALROLE_HUD)
diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm
index e69f750a5fa..1df53516f51 100644
--- a/code/game/machinery/doors/airlock_electronics.dm
+++ b/code/game/machinery/doors/airlock_electronics.dm
@@ -1,4 +1,5 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
+// Please do not use relative paths.
/obj/item/weapon/airlock_electronics
name = "airlock electronics"
@@ -15,100 +16,100 @@
var/one_access = 0 //if set to 1, door would receive req_one_access instead of req_access
var/last_configurator = null
var/locked = 1
+ var/inuse = 0 // no double-spending
- attack_self(mob/user as mob)
- if (!ishuman(user) && !istype(user,/mob/living/silicon/robot))
- return ..(user)
+/obj/item/weapon/airlock_electronics/attack_self(mob/user as mob)
+ if (!ishuman(user) && !istype(user,/mob/living/silicon/robot))
+ return ..(user)
- var/mob/living/carbon/human/H = user
- if(H.getBrainLoss() >= 60)
- return
+ var/mob/living/carbon/human/H = user
+ if(H.getBrainLoss() >= 60)
+ return
- var/t1 = text("Access control
\n")
+ var/t1 = text("Access control
\n")
- if (last_configurator)
- t1 += "Operator: [last_configurator]
"
+ if (last_configurator)
+ t1 += "Operator: [last_configurator]
"
- if (locked)
- t1 += "Swipe ID
"
+ if (locked)
+ t1 += "Swipe ID
"
+ else
+ t1 += "Block
"
+
+ t1 += "Access requirement is set to "
+ t1 += one_access ? "ONE
" : "ALL
"
+
+ t1 += conf_access == null ? "All
" : "All
"
+
+ t1 += "
"
+
+ var/list/accesses = get_all_station_access()
+ for (var/acc in accesses)
+ var/aname = get_access_desc(acc)
+
+ if (!conf_access || !conf_access.len || !(acc in conf_access))
+ t1 += "[aname]
"
+ else if(one_access)
+ t1 += "[aname]
"
+ else
+ t1 += "[aname]
"
+
+ t1 += text("Close
\n", src)
+
+ user << browse(t1, "window=airlock_electronics")
+ onclose(user, "airlock")
+
+/obj/item/weapon/airlock_electronics/Topic(href, href_list)
+ ..()
+ if (usr.stat || usr.restrained() || (!ishuman(usr) && !istype(usr,/mob/living/silicon)))
+ return
+ if (href_list["close"])
+ usr << browse(null, "window=airlock")
+ return
+
+ if (href_list["login"])
+ if(istype(usr,/mob/living/silicon))
+ src.locked = 0
+ src.last_configurator = usr.name
else
- t1 += "Block
"
-
- t1 += "Access requirement is set to "
- t1 += one_access ? "ONE
" : "ALL
"
-
- t1 += conf_access == null ? "All
" : "All
"
-
- t1 += "
"
-
- var/list/accesses = get_all_station_access()
- for (var/acc in accesses)
- var/aname = get_access_desc(acc)
-
- if (!conf_access || !conf_access.len || !(acc in conf_access))
- t1 += "[aname]
"
- else if(one_access)
- t1 += "[aname]
"
- else
- t1 += "[aname]
"
-
- t1 += text("Close
\n", src)
-
- user << browse(t1, "window=airlock_electronics")
- onclose(user, "airlock")
-
- Topic(href, href_list)
- ..()
- if (usr.stat || usr.restrained() || (!ishuman(usr) && !istype(usr,/mob/living/silicon)))
- return
- if (href_list["close"])
- usr << browse(null, "window=airlock")
- return
-
- if (href_list["login"])
- if(istype(usr,/mob/living/silicon))
+ var/obj/item/I = usr.get_active_hand()
+ if (istype(I, /obj/item/device/pda))
+ var/obj/item/device/pda/pda = I
+ I = pda.id
+ if (I && src.check_access(I))
src.locked = 0
- src.last_configurator = usr.name
- else
- var/obj/item/I = usr.get_active_hand()
- if (istype(I, /obj/item/device/pda))
- var/obj/item/device/pda/pda = I
- I = pda.id
- if (I && src.check_access(I))
- src.locked = 0
- src.last_configurator = I:registered_name
+ src.last_configurator = I:registered_name
- if (locked)
- return
+ if (locked)
+ return
- if (href_list["logout"])
- locked = 1
+ if (href_list["logout"])
+ locked = 1
- if (href_list["one_access"])
- one_access = !one_access
+ if (href_list["one_access"])
+ one_access = !one_access
- if (href_list["access"])
- toggle_access(href_list["access"])
+ if (href_list["access"])
+ toggle_access(href_list["access"])
- attack_self(usr)
+ attack_self(usr)
- proc
- toggle_access(var/acc)
- if (acc == "all")
+/obj/item/weapon/airlock_electronics/proc/toggle_access(var/acc)
+ if (acc == "all")
+ conf_access = null
+ else
+ var/req = text2num(acc)
+
+ if (conf_access == null)
+ conf_access = list()
+
+ if (!(req in conf_access))
+ conf_access += req
+ else
+ conf_access -= req
+ if (!conf_access.len)
conf_access = null
- else
- var/req = text2num(acc)
-
- if (conf_access == null)
- conf_access = list()
-
- if (!(req in conf_access))
- conf_access += req
- else
- conf_access -= req
- if (!conf_access.len)
- conf_access = null
/obj/item/weapon/airlock_electronics/secure
diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm
index 0778246a81c..bfec020bab2 100644
--- a/code/game/objects/structures/door_assembly.dm
+++ b/code/game/objects/structures/door_assembly.dm
@@ -212,17 +212,22 @@
src.state = 0
else if(istype(W, /obj/item/weapon/airlock_electronics) && state == 1)
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1)
- user.visible_message("[user] installs the electronics into the airlock assembly.", "You start to install electronics into the airlock assembly.")
-
- if(do_after(user, 40))
- if(!src) return
- user.drop_item()
- W.loc = src
- user << "You installed the airlock electronics!"
- src.state = 2
- src.name = "Near finished Airlock Assembly"
- src.electronics = W
+ var/obj/item/weapon/airlock_electronics/EL = W
+ if(!EL.inuse)
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1)
+ user.visible_message("[user] installs the electronics into the airlock assembly.", "You start to install electronics into the airlock assembly.")
+ EL.inuse = 1
+ if(do_after(user, 40))
+ EL.inuse = 0
+ if(!src) return
+ user.drop_item()
+ EL.forceMove(src)
+ user << "You installed the airlock electronics!"
+ src.state = 2
+ src.name = "Near finished Airlock Assembly"
+ src.electronics = EL
+ else
+ EL.inuse = 0
else if(istype(W, /obj/item/weapon/crowbar) && state == 2 )
//This should never happen, but just in case I guess
diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm
index 0b278903a74..83676aeb43d 100644
--- a/code/game/objects/structures/windoor_assembly.dm
+++ b/code/game/objects/structures/windoor_assembly.dm
@@ -167,19 +167,21 @@ obj/structure/windoor_assembly/Destroy()
//Adding airlock electronics for access. Step 6 complete.
else if(istype(W, /obj/item/weapon/airlock_electronics) && W:icon_state != "door_electronics_smoked")
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1)
- user.visible_message("[user] installs the electronics into the airlock assembly.", "You start to install electronics into the airlock assembly.")
-
- if(do_after(user, 40))
- if(!src) return
-
- user.drop_item()
- W.loc = src
- user << "You've installed the airlock electronics!"
- src.name = "Near finished Windoor Assembly"
- src.electronics = W
- else
- W.loc = src.loc
+ var/obj/item/weapon/airlock_electronics/EL = W
+ if(!EL.inuse)
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1)
+ user.visible_message("[user] installs the electronics into the airlock assembly.", "You start to install electronics into the airlock assembly.")
+ EL.inuse = 1
+ if(do_after(user, 40))
+ EL.inuse = 0
+ if(!src) return
+ user.drop_item()
+ EL.forceMove(src)
+ user << "You've installed the airlock electronics!"
+ src.name = "Near finished Windoor Assembly"
+ src.electronics = EL
+ else
+ EL.inuse = 0
//Screwdriver to remove airlock electronics. Step 6 undone.
else if(istype(W, /obj/item/weapon/screwdriver) && src.electronics)
diff --git a/code/game/turfs/turf_changing.dm b/code/game/turfs/turf_changing.dm
index dc666366ad7..87a4e96282b 100644
--- a/code/game/turfs/turf_changing.dm
+++ b/code/game/turfs/turf_changing.dm
@@ -78,13 +78,14 @@
. = W
recalc_atom_opacity()
+
lighting_overlay = old_lighting_overlay
affecting_lights = old_affecting_lights
corners = old_corners
- if((old_opacity != opacity) || (dynamic_lighting != old_dynamic_lighting) || force_lighting_update)
- reconsider_lights()
if(dynamic_lighting != old_dynamic_lighting)
if(dynamic_lighting)
lighting_build_overlay()
else
lighting_clear_overlay()
+ if((old_opacity != opacity) || (dynamic_lighting != old_dynamic_lighting) || force_lighting_update)
+ force_update_lights()
diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm
index 2276df9b822..e7af61c3673 100644
--- a/code/modules/clothing/under/miscellaneous.dm
+++ b/code/modules/clothing/under/miscellaneous.dm
@@ -76,13 +76,14 @@
//This set of uniforms looks fairly fancy and is generally used for high-ranking NT personnel from what I've seen, so lets give them appropriate ranks.
/obj/item/clothing/under/rank/centcom
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Captain.\""
- name = "\improper officer's dress uniform"
+ name = "officer's dress uniform"
icon_state = "officer"
item_state = "lawyer_black"
worn_state = "officer"
displays_id = 0
/obj/item/clothing/under/rank/centcom_officer
+ name = "officer's dress uniform"
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Admiral.\""
icon_state = "officer"
item_state = "lawyer_black"
@@ -90,6 +91,7 @@
displays_id = 0
/obj/item/clothing/under/rank/centcom_captain
+ name = "officer's dress uniform"
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Admiral-Executive.\""
icon_state = "centcom"
item_state = "lawyer_black"
diff --git a/code/modules/lighting/lighting_area.dm b/code/modules/lighting/lighting_area.dm
index 875a41c956e..a39eb1d975e 100644
--- a/code/modules/lighting/lighting_area.dm
+++ b/code/modules/lighting/lighting_area.dm
@@ -17,12 +17,12 @@
dynamic_lighting = new_dynamic_lighting
if (new_dynamic_lighting)
- for (var/turf/T in turfs)
+ for (var/turf/T in src)
if (T.dynamic_lighting)
T.lighting_build_overlay()
else
- for (var/turf/T in turfs)
+ for (var/turf/T in src)
if (T.lighting_overlay)
T.lighting_clear_overlay()
diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm
index 23d09be1e95..055de9788f7 100644
--- a/code/modules/mob/living/carbon/human/human_movement.dm
+++ b/code/modules/mob/living/carbon/human/human_movement.dm
@@ -127,7 +127,7 @@
. = ..()
if (is_noisy)
var/turf/T = get_turf(src)
- if (T.x == last_x && T.y == last_y)
+ if ((T.x == last_x && T.y == last_y) || !T.footstep_sound)
return
last_x = T.x
last_y = T.y
diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm
index d4418b7ef3c..56757d27653 100644
--- a/code/modules/mob/living/carbon/human/inventory.dm
+++ b/code/modules/mob/living/carbon/human/inventory.dm
@@ -437,8 +437,4 @@ This saves us from having to call add_fingerprint() any time something is put in
if (shoes:silent)
return
- var/turf/T = get_turf(src)
- if (!istype(T) || !T.footstep_sound)
- return
-
is_noisy = TRUE
diff --git a/code/modules/mob/living/carbon/human/species/station/machine_subspecies.dm b/code/modules/mob/living/carbon/human/species/station/machine_subspecies.dm
index 9543182be57..bdd0b4a06fa 100644
--- a/code/modules/mob/living/carbon/human/species/station/machine_subspecies.dm
+++ b/code/modules/mob/living/carbon/human/species/station/machine_subspecies.dm
@@ -35,7 +35,7 @@
"Your synthetic flesh crawls in the heat, swelling into a disgusting morass of plastic."
)
- appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_TONE | HAS_EYE_COLOR | HAS_FBP
+ appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_TONE | HAS_EYE_COLOR | HAS_FBP | HAS_UNDERWEAR | HAS_SOCKS
has_limbs = list(
"chest" = list("path" = /obj/item/organ/external/chest/shell),
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index e73e71cbe42..c494998119e 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -337,6 +337,8 @@
var/turf/T = get_turf(src)
if(istype(T)) T.visible_message("[src] folds outwards, expanding into a mobile form.")
+ canmove = 1
+ resting = 0
/mob/living/silicon/pai/verb/fold_up()
set category = "pAI Commands"
diff --git a/code/modules/organs/subtypes/machine.dm b/code/modules/organs/subtypes/machine.dm
index 416e03caf1c..43cfe6a6d27 100644
--- a/code/modules/organs/subtypes/machine.dm
+++ b/code/modules/organs/subtypes/machine.dm
@@ -7,7 +7,7 @@
vital = 1 //because it is now hosting the posibrain
max_damage = 50 //made same as arm, since it is not vital
min_broken_damage = 30
- encased = null
+ encased = "support frame"
/obj/item/organ/external/head/ipc/New()
robotize("Hephaestus Integrated Limb")
@@ -15,31 +15,35 @@
/obj/item/organ/external/chest/ipc
dislocated = -1
- encased = null
+ encased = "support frame"
/obj/item/organ/external/chest/ipc/New()
robotize("Hephaestus Integrated Limb")
..()
/obj/item/organ/external/groin/ipc
dislocated = -1
+ encased = "support frame"
/obj/item/organ/external/groin/ipc/New()
robotize("Hephaestus Integrated Limb")
..()
/obj/item/organ/external/arm/ipc
dislocated = -1
+ encased = "support frame"
/obj/item/organ/external/arm/ipc/New()
robotize("Hephaestus Integrated Limb")
..()
/obj/item/organ/external/arm/right/ipc
dislocated = -1
+ encased = "support frame"
/obj/item/organ/external/arm/right/ipc/New()
robotize("Hephaestus Integrated Limb")
..()
/obj/item/organ/external/leg/ipc
dislocated = -1
+ encased = "support frame"
/obj/item/organ/external/leg/ipc/New()
robotize("Hephaestus Integrated Limb")
..()
@@ -52,24 +56,28 @@
/obj/item/organ/external/foot/ipc
dislocated = -1
+ encased = "support frame"
/obj/item/organ/external/foot/ipc/New()
robotize("Hephaestus Integrated Limb")
..()
/obj/item/organ/external/foot/right/ipc
dislocated = -1
+ encased = "support frame"
/obj/item/organ/external/foot/right/ipc/New()
robotize("Hephaestus Integrated Limb")
..()
/obj/item/organ/external/hand/ipc
dislocated = -1
+ encased = "support frame"
/obj/item/organ/external/hand/ipc/New()
robotize("Hephaestus Integrated Limb")
..()
/obj/item/organ/external/hand/right/ipc
dislocated = -1
+ encased = "support frame"
/obj/item/organ/external/hand/right/ipc/New()
robotize("Hephaestus Integrated Limb")
..()
@@ -214,7 +222,7 @@
vital = 0
max_damage = 50 //made same as arm, since it is not vital
min_broken_damage = 30
- encased = null
+ encased = "reinforced support frame"
emp_coeff = 0.5
/obj/item/organ/eyes/optical_sensor/terminator
@@ -226,7 +234,7 @@
/obj/item/organ/external/chest/terminator
dislocated = -1
- encased = null
+ encased = "reinforced support frame"
emp_coeff = 0.5
/obj/item/organ/external/chest/terminator/New()
@@ -235,6 +243,7 @@
/obj/item/organ/external/groin/terminator
dislocated = -1
+ encased = "reinforced support frame"
emp_coeff = 0.5
/obj/item/organ/external/groin/terminator/New()
@@ -243,6 +252,7 @@
/obj/item/organ/external/arm/terminator
dislocated = -1
+ encased = "reinforced support frame"
emp_coeff = 0.5
/obj/item/organ/external/arm/terminator/New()
@@ -251,6 +261,7 @@
/obj/item/organ/external/arm/right/terminator
dislocated = -1
+ encased = "reinforced support frame"
emp_coeff = 0.5
/obj/item/organ/external/arm/right/terminator/New()
@@ -259,6 +270,7 @@
/obj/item/organ/external/leg/terminator
dislocated = -1
+ encased = "reinforced support frame"
emp_coeff = 0.5
/obj/item/organ/external/leg/terminator/New()
@@ -267,6 +279,7 @@
/obj/item/organ/external/leg/right/terminator
dislocated = -1
+ encased = "reinforced support frame"
emp_coeff = 0.5
/obj/item/organ/external/leg/right/terminator/New()
@@ -275,6 +288,7 @@
/obj/item/organ/external/foot/terminator
dislocated = -1
+ encased = "reinforced support frame"
emp_coeff = 0.5
/obj/item/organ/external/foot/terminator/New()
@@ -283,6 +297,7 @@
/obj/item/organ/external/foot/right/terminator
dislocated = -1
+ encased = "reinforced support frame"
emp_coeff = 0.5
/obj/item/organ/external/foot/right/terminator/New()
@@ -291,6 +306,7 @@
/obj/item/organ/external/hand/terminator
dislocated = -1
+ encased = "reinforced support frame"
emp_coeff = 0.5
/obj/item/organ/external/hand/terminator/New()
@@ -299,6 +315,7 @@
/obj/item/organ/external/hand/right/terminator
dislocated = -1
+ encased = "reinforced support frame"
emp_coeff = 0.5
/obj/item/organ/external/hand/right/terminator/New()
@@ -315,7 +332,7 @@
vital = 0
max_damage = 50 //made same as arm, since it is not vital
min_broken_damage = 30
- encased = null
+ encased = "support frame"
/obj/item/organ/external/head/industrial/New()
robotize("Hephaestus Industrial Limb")
@@ -323,61 +340,80 @@
/obj/item/organ/external/chest/industrial
dislocated = -1
- encased = null
+ encased = "support frame"
+
/obj/item/organ/external/chest/industrial/New()
robotize("Hephaestus Industrial Limb")
..()
/obj/item/organ/external/groin/industrial
dislocated = -1
+ encased = "support frame"
+
/obj/item/organ/external/groin/industrial/New()
robotize("Hephaestus Industrial Limb")
..()
/obj/item/organ/external/arm/industrial
dislocated = -1
+ encased = "support frame"
+
/obj/item/organ/external/arm/industrial/New()
robotize("Hephaestus Industrial Limb")
..()
/obj/item/organ/external/arm/right/industrial
dislocated = -1
+ encased = "support frame"
+
/obj/item/organ/external/arm/right/industrial/New()
robotize("Hephaestus Industrial Limb")
..()
/obj/item/organ/external/leg/industrial
dislocated = -1
+ encased = "support frame"
+
/obj/item/organ/external/leg/industrial/New()
robotize("Hephaestus Industrial Limb")
..()
/obj/item/organ/external/leg/right/industrial
dislocated = -1
+ encased = "support frame"
+
/obj/item/organ/external/leg/right/industrial/New()
robotize("Hephaestus Industrial Limb")
..()
/obj/item/organ/external/foot/industrial
dislocated = -1
+ encased = "support frame"
+
/obj/item/organ/external/foot/industrial/New()
robotize("Hephaestus Industrial Limb")
..()
/obj/item/organ/external/foot/right/industrial
dislocated = -1
+ encased = "support frame"
+
/obj/item/organ/external/foot/right/industrial/New()
robotize("Hephaestus Industrial Limb")
..()
/obj/item/organ/external/hand/industrial
dislocated = -1
+ encased = "support frame"
+
/obj/item/organ/external/hand/industrial/New()
robotize("Hephaestus Industrial Limb")
..()
/obj/item/organ/external/hand/right/industrial
dislocated = -1
+ encased = "support frame"
+
/obj/item/organ/external/hand/right/industrial/New()
robotize("Hephaestus Industrial Limb")
..()
@@ -392,7 +428,7 @@
vital = 0
max_damage = 50 //made same as arm, since it is not vital
min_broken_damage = 30
- encased = null
+ encased = "support frame"
force_skintone = TRUE
/obj/item/organ/external/head/shell/New()
@@ -401,7 +437,7 @@
/obj/item/organ/external/chest/shell
dislocated = -1
- encased = null
+ encased = "support frame"
force_skintone = TRUE
@@ -411,6 +447,7 @@
/obj/item/organ/external/groin/shell
dislocated = -1
+ encased = "support frame"
force_skintone = TRUE
/obj/item/organ/external/groin/shell/New()
@@ -419,6 +456,7 @@
/obj/item/organ/external/arm/shell
dislocated = -1
+ encased = "support frame"
force_skintone = TRUE
/obj/item/organ/external/arm/shell/New()
@@ -427,6 +465,7 @@
/obj/item/organ/external/arm/right/shell
dislocated = -1
+ encased = "support frame"
force_skintone = TRUE
/obj/item/organ/external/arm/right/shell/New()
@@ -435,6 +474,7 @@
/obj/item/organ/external/leg/shell
dislocated = -1
+ encased = "support frame"
force_skintone = TRUE
/obj/item/organ/external/leg/shell/New()
@@ -443,6 +483,7 @@
/obj/item/organ/external/leg/right/shell
dislocated = -1
+ encased = "support frame"
force_skintone = TRUE
/obj/item/organ/external/leg/right/shell/New()
@@ -451,6 +492,7 @@
/obj/item/organ/external/foot/shell
dislocated = -1
+ encased = "support frame"
force_skintone = TRUE
/obj/item/organ/external/foot/shell/New()
@@ -459,6 +501,7 @@
/obj/item/organ/external/foot/right/shell
dislocated = -1
+ encased = "support frame"
force_skintone = TRUE
/obj/item/organ/external/foot/right/shell/New()
@@ -467,6 +510,7 @@
/obj/item/organ/external/hand/shell
dislocated = -1
+ encased = "support frame"
force_skintone = TRUE
/obj/item/organ/external/hand/shell/New()
@@ -475,6 +519,7 @@
/obj/item/organ/external/hand/right/shell
dislocated = -1
+ encased = "support frame"
force_skintone = TRUE
/obj/item/organ/external/hand/right/shell/New()
diff --git a/code/modules/security levels/security levels.dm b/code/modules/security levels/security levels.dm
index cbb4a9b4312..ca6f503d7f3 100644
--- a/code/modules/security levels/security levels.dm
+++ b/code/modules/security levels/security levels.dm
@@ -25,16 +25,24 @@
if(SEC_LEVEL_GREEN)
security_announcement_down.Announce("[config.alert_desc_green]", "Attention! Security level lowered to green.")
security_level = SEC_LEVEL_GREEN
+ if (nl_ctrl.manual_override == 2) // Disable override if it was set by code-red.
+ nl_ctrl.manual_override = 0
+ nl_ctrl.doWork(FALSE) // Update night lighting if it was turned off by red alert.
if(SEC_LEVEL_BLUE)
if(security_level < SEC_LEVEL_BLUE)
security_announcement_up.Announce("[config.alert_desc_blue_upto]", "Attention! Security level elevated to blue.")
else
security_announcement_down.Announce("[config.alert_desc_blue_downto]", "Attention! Security level lowered to blue.")
security_level = SEC_LEVEL_BLUE
+ if (nl_ctrl.manual_override == 2)
+ nl_ctrl.manual_override = 0
+ nl_ctrl.doWork(FALSE) // Update night lighting if it was turned off by red alert.
if(SEC_LEVEL_RED)
if(security_level < SEC_LEVEL_RED)
security_announcement_up.Announce("[config.alert_desc_red_upto]", "Attention! Security level elevated to red!")
nl_ctrl.deactivate(0) // Disable nightmode globally
+ if (!nl_ctrl.manual_override)
+ nl_ctrl.manual_override = 2
else
security_announcement_down.Announce("[config.alert_desc_red_downto]", "Attention! Code red!")
security_level = SEC_LEVEL_RED
@@ -95,4 +103,4 @@
set_security_level(2)
/mob/verb/set_thing3()
set_security_level(3)
-*/
\ No newline at end of file
+*/
diff --git a/code/modules/spells/general/mark_recall.dm b/code/modules/spells/general/mark_recall.dm
index ca800be35ef..1bf2f727c39 100644
--- a/code/modules/spells/general/mark_recall.dm
+++ b/code/modules/spells/general/mark_recall.dm
@@ -29,7 +29,7 @@
return 0
var/target = targets[1]
if(istext(target))
- mark = new /obj/effect/cleanable/wizard_mark(get_turf(user),src)
+ mark = new /obj/effect/decal/wizard_mark(get_turf(user),src)
return 1
if(!istype(target,/obj)) //something went wrong
return 0
@@ -47,7 +47,7 @@
return "You no longer have to be conscious to activate this spell."
-/obj/effect/cleanable/wizard_mark
+/obj/effect/decal/wizard_mark
name = "mark of the wizard"
desc = "A strange rune, probably someone playing with crayons again."
icon = 'icons/obj/rune.dmi'
@@ -59,22 +59,22 @@
var/spell/mark_recall/spell
-/obj/effect/cleanable/wizard_mark/New(var/newloc,var/mrspell)
+/obj/effect/decal/wizard_mark/New(var/newloc,var/mrspell)
..()
spell = mrspell
-/obj/effect/cleanable/wizard_mark/Destroy()
+/obj/effect/decal/wizard_mark/Destroy()
spell.mark = null //dereference pls.
spell = null
..()
-/obj/effect/cleanable/wizard_mark/attack_hand(var/mob/user)
+/obj/effect/decal/wizard_mark/attack_hand(var/mob/user)
if(user == spell.holder)
user.visible_message("\The [user] mutters an incantation and \the [src] disappears!")
qdel(src)
..()
-/obj/effect/cleanable/wizard_mark/attackby(var/obj/item/I, var/mob/user)
+/obj/effect/decal/wizard_mark/attackby(var/obj/item/I, var/mob/user)
if(istype(I, /obj/item/weapon/nullrod) || istype(I, /obj/item/weapon/spellbook))
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
src.visible_message("\The [src] fades away!")
diff --git a/html/changelog.html b/html/changelog.html
index 1663eced64a..9a95d30688f 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -56,6 +56,27 @@
-->
+
12 April 2017
+
MoondancerPony updated:
+
+ - Taught roboticists how to properly remove IPC organs.
+ - IPC organs are now encased.
+
+
+
10 April 2017
+
Lohikar updated:
+
+ - Shells have figured out how to put on socks & undershirts. Synth uprising soon.
+ - Repairing holes to space no longer sucks the light out of a room forever.
+ - Footstep sounds now actually work without having to take off your boots.
+ - NanoTrasen has fired several designers in charge of stations' night-mode control systems after it was revealed that they did not actually know how time works.
+ - Red-alert is now kind enough to restore the previous nightmode settings instead of forcing its standards of illumination on the crew.
+
+
MoondancerPony updated:
+
+ - Eliminated the possibility for 'double-spending' airlock electronics, duplicating boards and allowing you to complete multiple airlocks with one board.
+
+
08 April 2017
MoondancerPony updated:
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml
index 19cb42bdb63..05fa1ab4c4a 100644
--- a/html/changelogs/.all_changelog.yml
+++ b/html/changelogs/.all_changelog.yml
@@ -4094,3 +4094,21 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
reagents transferred.
- bugfix: Relocating your/someone's limb will now properly show a message to all
bystanders.
+2017-04-10:
+ Lohikar:
+ - rscadd: Shells have figured out how to put on socks & undershirts. Synth uprising
+ soon.
+ - bugfix: Repairing holes to space no longer sucks the light out of a room forever.
+ - bugfix: Footstep sounds now actually work without having to take off your boots.
+ - bugfix: NanoTrasen has fired several designers in charge of stations' night-mode
+ control systems after it was revealed that they did not actually know how time
+ works.
+ - tweak: Red-alert is now kind enough to restore the previous nightmode settings
+ instead of forcing its standards of illumination on the crew.
+ MoondancerPony:
+ - bugfix: Eliminated the possibility for 'double-spending' airlock electronics,
+ duplicating boards and allowing you to complete multiple airlocks with one board.
+2017-04-12:
+ MoondancerPony:
+ - bugfix: Taught roboticists how to properly remove IPC organs.
+ - tweak: IPC organs are now encased.