diff --git a/baystation12.dme b/baystation12.dme index 1c736af88b..ad42576274 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -16,6 +16,7 @@ #include "code\setup.dm" #include "code\stylesheet.dm" #include "code\world.dm" +#include "code\__HELPERS\bygex.dm" #include "code\__HELPERS\files.dm" #include "code\__HELPERS\game.dm" #include "code\__HELPERS\global_lists.dm" @@ -227,6 +228,7 @@ #include "code\game\gamemodes\malfunction\malfunction.dm" #include "code\game\gamemodes\meteor\meteor.dm" #include "code\game\gamemodes\meteor\meteors.dm" +#include "code\game\gamemodes\ninja\ninja.dm" #include "code\game\gamemodes\nuclear\nuclear.dm" #include "code\game\gamemodes\nuclear\nuclearbomb.dm" #include "code\game\gamemodes\nuclear\pinpointer.dm" diff --git a/baystation12.int b/baystation12.int index 4cd21b6565..b82874fded 100644 --- a/baystation12.int +++ b/baystation12.int @@ -1,9 +1,6 @@ // BEGIN_INTERNALS /* MAP_ICON_TYPE: 0 -LAST_COMPILE_VERSION: 501.1217 -DIR: code code\_onclick code\datums code\datums\visibility_networks code\defines\obj code\game code\game\gamemodes code\game\gamemodes\blob code\game\gamemodes\blob\blobs code\game\gamemodes\cult code\game\gamemodes\events code\game\gamemodes\malfunction code\modules code\modules\mining code\modules\telesci -LAST_COMPILE_TIME: 1385167744 AUTO_FILE_DIR: OFF */ // END_INTERNALS diff --git a/bygex.dll b/bygex.dll new file mode 100644 index 0000000000..e7bdd9f9a7 Binary files /dev/null and b/bygex.dll differ diff --git a/code/__HELPERS/bygex.dm b/code/__HELPERS/bygex.dm new file mode 100644 index 0000000000..0955b10750 --- /dev/null +++ b/code/__HELPERS/bygex.dm @@ -0,0 +1,107 @@ +#ifndef LIBREGEX_LIBRARY + #define LIBREGEX_LIBRARY "bygex" +#endif + +proc + regEx_compare(str, exp) + return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regEx_compare")(str, exp)) + + regex_compare(str, exp) + return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regex_compare")(str, exp)) + + regEx_find(str, exp) + return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regEx_find")(str, exp)) + + regex_find(str, exp) + return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regex_find")(str, exp)) + + regEx_replaceall(str, exp, fmt) + return call(LIBREGEX_LIBRARY, "regEx_replaceall")(str, exp, fmt) + + regex_replaceall(str, exp, fmt) + return call(LIBREGEX_LIBRARY, "regex_replaceall")(str, exp, fmt) + + replacetextEx(str, exp, fmt) + return call(LIBREGEX_LIBRARY, "regEx_replaceallliteral")(str, exp, fmt) + + replacetext(str, exp, fmt) + return call(LIBREGEX_LIBRARY, "regex_replaceallliteral")(str, exp, fmt) + + regEx_replace(str, exp, fmt) + return call(LIBREGEX_LIBRARY, "regEx_replace")(str, exp, fmt) + + regex_replace(str, exp, fmt) + return call(LIBREGEX_LIBRARY, "regex_replace")(str, exp, fmt) + + regEx_findall(str, exp) + return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regEx_findall")(str, exp)) + + regex_findall(str, exp) + return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regex_findall")(str, exp)) + + +//upon calling a regex match or search, a /datum/regex object is created with str(haystack) and exp(needle) variables set +//it also contains a list(matches) of /datum/match objects, each of which holds the position and length of the match +//matched strings are not returned from the dll, in order to save on memory allocation for large numbers of strings +//instead, you can use regex.str(matchnum) to fetch this string as needed. +//likewise you can also use regex.pos(matchnum) and regex.len(matchnum) as shorthands +/datum/regex + var/str + var/exp + var/error + var/anchors = 0 + var/list/matches = list() + + New(str, exp, results) + src.str = str + src.exp = exp + + if(findtext(results, "Err", 1, 4)) //error message + src.error = results + else + var/list/L = params2list(results) + var/list/M + var{i;j} + for(i in L) + M = L[i] + for(j=2, j<=M.len, j+=2) + matches += new /datum/match(text2num(M[j-1]),text2num(M[j])) + anchors = (j-2)/2 + return matches + + proc + str(i) + if(!i) return str + var/datum/match/M = matches[i] + return copytext(str, M.pos, M.pos+M.len) + + pos(i) + if(!i) return 1 + var/datum/match/M = matches[i] + return M.pos + + len(i) + if(!i) return length(str) + var/datum/match/M = matches[i] + return M.len + + end(i) + if(!i) return length(str) + var/datum/match/M = matches[i] + return M.pos + M.len + + report() //debug tool + . = ":: RESULTS ::\n:: str :: [html_encode(str)]\n:: exp :: [html_encode(exp)]\n:: anchors :: [anchors]" + if(error) + . += "\n[error]" + return + for(var/i=1, i<=matches.len, ++i) + . += "\nMatch[i]\n\t[html_encode(str(i))]\n\tpos=[pos(i)] len=[len(i)]" + +/datum/match + var/pos + var/len + + New(pos, len) + src.pos = pos + src.len = len diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index a493aa9d08..d33f976fe7 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -194,35 +194,7 @@ proc/checkhtml(var/t) /* * Text modification */ -/proc/replacetext(text, find, replacement) - var/find_len = length(find) - if(find_len < 1) return text - . = "" - var/last_found = 1 - while(1) - var/found = findtext(text, find, last_found, 0) - . += copytext(text, last_found, found) - if(found) - . += replacement - last_found = found + find_len - continue - return . - -/proc/replacetextEx(text, find, replacement) - var/find_len = length(find) - if(find_len < 1) return text - . = "" - var/last_found = 1 - while(1) - var/found = findtextEx(text, find, last_found, 0) - . += copytext(text, last_found, found) - if(found) - . += replacement - last_found = found + find_len - continue - return . - -//Adds 'u' number of zeros ahead of the text 't' + //Adds 'u' number of zeros ahead of the text 't' /proc/add_zero(t, u) while (length(t) < u) t = "0[t]" diff --git a/code/controllers/autotransfer.dm b/code/controllers/autotransfer.dm index c69290c7bd..f1240a1fae 100644 --- a/code/controllers/autotransfer.dm +++ b/code/controllers/autotransfer.dm @@ -1,13 +1,17 @@ -var/datum/controller/transfer_controller = new /transfer_controller() -var/timerbuffer = 0 //buffer for time check -/transfer_controller/New() +var/datum/controller/transfer_controller/transfer_controller + +datum/controller/transfer_controller + var/timerbuffer = 0 //buffer for time check + var/currenttick = 0 +datum/controller/transfer_controller/New() timerbuffer = config.vote_autotransfer_initial processing_objects += src -/transfer_controller/Del() +datum/controller/transfer_controller/Del() processing_objects -= src -/transfer_controller/proc/process() +datum/controller/transfer_controller/proc/process() + currenttick = currenttick + 1 if (world.time >= timerbuffer - 600) vote.autotransfer() timerbuffer = timerbuffer + config.vote_autotransfer_interval \ No newline at end of file diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index d3ddef9f37..5e7d308a9e 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -67,6 +67,8 @@ datum/controller/game_controller/proc/setup() setupfactions() setup_economy() + transfer_controller = new + for(var/i=0, i\red A proper starting location for you could not be found, please report this bug!" - ninja.current << "\red Attempting to place at a carpspawn." - for(var/obj/effect/landmark/L in landmarks_list) - if(L.name == "carpspawn") - ninjastart.Add(L) - if(ninjastart.len == 0 && latejoin.len > 0) - ninja.current << "\red Still no spawneable locations could be found. Defaulting to latejoin." - return 1 - else if (ninjastart.len == 0) - ninja.current << "\red Still no spawneable locations could be found. Aborting." - return 0 + ninja.current << "\red Attempting to place at a carpspawn."*/ + + //Until such a time as people want to place ninja spawn points, carpspawn will do fine. + for(var/obj/effect/landmark/L in landmarks_list) + if(L.name == "carpspawn") + ninjastart.Add(L) + if(ninjastart.len == 0 && latejoin.len > 0) + ninja.current << "\red No spawneable locations could be found. Defaulting to latejoin." + return 1 + else if (ninjastart.len == 0) + ninja.current << "\red No spawneable locations could be found. Aborting." + return 0 + return 1 /datum/game_mode/ninja/pre_setup() @@ -50,7 +54,7 @@ /datum/game_mode/ninja/post_setup() for(var/datum/mind/ninja in ninjas) if(ninja.current && !(istype(ninja.current,/mob/living/carbon/human))) return 0 - //forge_ninja_objectives(ninja) + forge_ninja_objectives(ninja) var/mob/living/carbon/human/N = ninja.current N.internal = N.s_store N.internals.icon_state = "internal1" @@ -78,7 +82,8 @@ return 1 /datum/game_mode/ninja/proc/forge_ninja_objectives(var/datum/mind/ninja) - var/objective_list[] = list(1,2,3,4,5) + + var/objective_list = list(1,2,3,4,5) for(var/i=rand(2,4),i>0,i--) switch(pick(objective_list)) if(1)//Kill diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index b8faeeef97..24a3df847a 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -166,8 +166,13 @@ var/bomb_set /obj/machinery/nuclearbomb/attack_hand(mob/user as mob) if (src.extended) - if (src.opened) - nukehack_win(user,50) + if (!ishuman(user)) + usr << "\red You don't have the dexterity to do this!" + return 1 + + if (!ishuman(user)) + usr << "\red You don't have the dexterity to do this!" + return 1 user.set_machine(src) var/dat = text("Nuclear Fission Explosive
\nAuth. Disk: []
", src, (src.auth ? "++++++++++" : "----------")) if (src.auth) @@ -216,6 +221,12 @@ obj/machinery/nuclearbomb/proc/nukehack_win(mob/user as mob) set name = "Make Deployable" set src in oview(1) + if (!usr.canmove || usr.stat || usr.restrained()) + return + if (!ishuman(usr)) + usr << "\red You don't have the dexterity to do this!" + return 1 + if (src.deployable) usr << "\red You close several panels to make [src] undeployable." src.deployable = 0 diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 406e5aab98..e66c7feb44 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -116,7 +116,7 @@ //Clonepod //Start growing a human clone in the pod! -/obj/machinery/clonepod/proc/growclone(var/ckey, var/clonename, var/ui, var/se, var/mindref, var/datum/species/mrace) +/obj/machinery/clonepod/proc/growclone(var/ckey, var/clonename, var/ui, var/se, var/mindref, var/datum/species/mrace, var/languages) if(mess || attempting) return 0 var/datum/mind/clonemind = locate(mindref) @@ -195,7 +195,8 @@ H.h_style = pick("Bedhead", "Bedhead 2", "Bedhead 3") H.species = mrace - H.add_language(mrace.language) + for(var/datum/language/L in languages) + H.add_language(L.name) H.update_mutantrace() H.suiciding = 0 src.attempting = 0 @@ -437,4 +438,4 @@ /* EMP grenade/spell effect if(istype(A, /obj/machinery/clonepod)) A:malfunction() -*/ \ No newline at end of file +*/ diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 3adeccdf91..184cc8e867 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -313,7 +313,7 @@ else if(!config.revival_cloning) temp = "Error: Unable to initiate cloning cycle." - else if(pod1.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"])) + else if(pod1.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["languages"])) temp = "Initiating cloning cycle..." records.Remove(C) del(C) @@ -323,7 +323,7 @@ var/mob/selected = find_dead_player("[C.fields["ckey"]]") selected << 'sound/machines/chime.ogg' //probably not the best sound but I think it's reasonable var/answer = alert(selected,"Do you want to return to life?","Cloning","Yes","No") - if(answer != "No" && pod1.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["interface"])) + if(answer != "No" && pod1.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["languages"], C.fields["interface"])) temp = "Initiating cloning cycle..." records.Remove(C) del(C) @@ -370,6 +370,7 @@ R.fields["id"] = copytext(md5(subject.real_name), 2, 6) R.fields["UI"] = subject.dna.uni_identity R.fields["SE"] = subject.dna.struc_enzymes + R.fields["languages"] = subject.languages //Add an implant if needed var/obj/item/weapon/implant/health/imp = locate(/obj/item/weapon/implant/health, subject) diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm index fd34b65baa..73c7f5bd84 100644 --- a/code/game/mecha/equipment/tools/tools.dm +++ b/code/game/mecha/equipment/tools/tools.dm @@ -439,8 +439,18 @@ var/atom/movable/locked var/mode = 1 //1 - gravsling 2 - gravpush + var/last_fired = 0 //Concept stolen from guns. + var/fire_delay = 10 //Used to prevent spam-brute against humans. action(atom/movable/target) + + if(world.time >= last_fired + fire_delay) + last_fired = world.time + else + if (world.time % 3) + occupant_message("[src] is not ready to fire again!") + return 0 + switch(mode) if(1) if(!action_checks(target) && !locked) return diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 6c38442fec..16e5ef3a9a 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -38,6 +38,7 @@ var/armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) var/list/allowed = null //suit storage stuff. var/obj/item/device/uplink/hidden/hidden_uplink = null // All items can have an uplink hidden inside, just remember to add the triggers. + var/icon_override = null //Used to override hardcoded clothing dmis in human clothing proc. /obj/item/device icon = 'icons/obj/device.dmi' diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 1cdd99d133..9123617f2a 100755 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -715,8 +715,12 @@ var/global/list/obj/item/device/pda/PDAs = list() U.show_message("\red Energy feeds back into your [src]!", 1) U << browse(null, "window=pda") explode() + log_admin("[key_name(U)] just attempted to blow up [P] with the Detomatix cartridge but failed, blowing themselves up") + message_admins("[key_name_admin(U)] just attempted to blow up [P] with the Detomatix cartridge but failed, blowing themselves up", 1) else U.show_message("\blue Success!", 1) + log_admin("[key_name(U)] just attempted to blow up [P] with the Detomatix cartridge and succeded") + message_admins("[key_name_admin(U)] just attempted to blow up [P] with the Detomatix cartridge and succeded", 1) P.explode() else U << "PDA not found." @@ -1193,4 +1197,4 @@ var/global/list/obj/item/device/pda/PDAs = list() // Pass along the pulse to atoms in contents, largely added so pAIs are vulnerable to EMP /obj/item/device/pda/emp_act(severity) for(var/atom/A in src) - A.emp_act(severity) \ No newline at end of file + A.emp_act(severity) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index fa7438e749..b5aa11c6e9 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -510,6 +510,12 @@ if(counter >= 5) //So things dont get squiiiiished! jobs += "" counter = 0 + + if(jobban_isbanned(M, "Internal Affairs Agent")) + jobs += "Internal Affairs Agent" + else + jobs += "Internal Affairs Agent" + jobs += "" //Non-Human (Green) @@ -587,6 +593,13 @@ else jobs += "[replacetext("Wizard", " ", " ")]" + //ERT + if(jobban_isbanned(M, "Emergency Response Team") || isbanned_dept) + jobs += "Emergency Response Team" + else + jobs += "Emergency Response Team" + + /* //Malfunctioning AI //Removed Malf-bans because they're a pain to impliment if(jobban_isbanned(M, "malf AI") || isbanned_dept) jobs += "[replacetext("Malf AI", " ", " ")]" diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 3c76e6753d..3e40aeb5d5 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -22,7 +22,7 @@ if(H.species.name in species_restricted) wearable = 1 - if(!wearable) + if(!wearable && (slot != 15 && slot != 16)) //Pockets. M << "\red Your species cannot wear [src]." return 0 diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index be7a028f2a..607dd9d808 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -128,7 +128,7 @@ desc = "Covers the eyes, preventing sight." icon_state = "blindfold" item_state = "blindfold" - vision_flags = BLIND + //vision_flags = BLIND // This flag is only supposed to be used if it causes permanent blindness, not temporary because of glasses /obj/item/clothing/glasses/sunglasses/prescription name = "prescription sunglasses" @@ -193,4 +193,4 @@ name = "Optical Thermal Implants" desc = "A set of implantable lenses designed to augment your vision" icon_state = "thermalimplants" - item_state = "syringe_kit" \ No newline at end of file + item_state = "syringe_kit" diff --git a/code/modules/clothing/gloves/ninja.dm b/code/modules/clothing/gloves/ninja.dm index 15e7c40c3b..a3cb36e8b6 100644 --- a/code/modules/clothing/gloves/ninja.dm +++ b/code/modules/clothing/gloves/ninja.dm @@ -19,6 +19,7 @@ var/candrain = 0 var/mindrain = 200 var/maxdrain = 400 + species_restricted = null /* This runs the gamut of what ninja gloves can do diff --git a/code/modules/clothing/gloves/stungloves.dm b/code/modules/clothing/gloves/stungloves.dm index fde681a4ea..7b52f3e4c9 100644 --- a/code/modules/clothing/gloves/stungloves.dm +++ b/code/modules/clothing/gloves/stungloves.dm @@ -32,7 +32,7 @@ else user << "[src] already have a cell." - else if(istype(W, /obj/item/weapon/wirecutters)) + else if(istype(W, /obj/item/weapon/wirecutters) || istype(W, /obj/item/weapon/scalpel)) wired = null @@ -43,7 +43,7 @@ cell = null if(clipped == 0) 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].") + user.visible_message("\red [user] cut the fingertips off [src].","\red You cut the fingertips off [src].") clipped = 1 if("exclude" in species_restricted) name = "mangled [name]" @@ -78,4 +78,4 @@ if(wired) overlays += "gloves_wire" if(cell) - overlays += "gloves_cell" \ No newline at end of file + overlays += "gloves_cell" diff --git a/code/modules/clothing/spacesuits/alien.dm b/code/modules/clothing/spacesuits/alien.dm index a6cdefafc4..f09f3b14e6 100644 --- a/code/modules/clothing/spacesuits/alien.dm +++ b/code/modules/clothing/spacesuits/alien.dm @@ -213,4 +213,50 @@ examine() set src in view() - ..() \ No newline at end of file + ..() + +//Species-specific Syndicate rigs. + +/obj/item/clothing/head/helmet/space/rig/syndi/tajara + icon_state = "rig0-syndie-taj" + item_state = "syndie_helm" + item_color = "syndie-taj" + species_restricted = list("Tajaran") + +/obj/item/clothing/suit/space/rig/syndi/tajara + item_state = "syndie_hardsuit" + icon_state = "rig-syndie-taj" + species_restricted = list("Tajaran") + +/obj/item/clothing/head/helmet/space/rig/syndi/unathi + icon_state = "rig0-syndie-unathi" + item_state = "syndie_helm" + item_color = "syndie-unathi" + species_restricted = list("Unathi") + +/obj/item/clothing/suit/space/rig/syndi/unathi + item_state = "syndie_hardsuit" + icon_state = "rig-syndie-unathi" + species_restricted = list("Unathi") + +/obj/item/clothing/head/helmet/space/rig/syndi/skrell + icon_state = "rig0-syndie-skrell" + item_state = "syndie_helm" + item_color = "syndie-skrell" + species_restricted = list("Skrell") + +/obj/item/clothing/suit/space/rig/syndi/skrell + item_state = "syndie_hardsuit" + icon_state = "rig-syndie-skrell" + species_restricted = list("Skrell") + +/obj/item/clothing/head/helmet/space/rig/syndi/human + icon_state = "rig0-syndie-human" + item_state = "syndie_helm" + item_color = "syndie-human" + species_restricted = list("Human") + +/obj/item/clothing/suit/space/rig/syndi/human + item_state = "syndie_hardsuit" + icon_state = "rig-syndie-human" + species_restricted = list("Human") diff --git a/code/modules/clothing/spacesuits/ninja.dm b/code/modules/clothing/spacesuits/ninja.dm index 8f49738fbf..9e071cae01 100644 --- a/code/modules/clothing/spacesuits/ninja.dm +++ b/code/modules/clothing/spacesuits/ninja.dm @@ -6,7 +6,7 @@ allowed = list(/obj/item/weapon/cell) armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 25) siemens_coefficient = 0.2 - + species_restricted = null /obj/item/clothing/suit/space/space_ninja name = "ninja suit" @@ -17,6 +17,7 @@ slowdown = 0 armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) siemens_coefficient = 0.2 + species_restricted = null //Workaround for spawning alien ninja without internals. //Important parts of the suit. var/mob/living/carbon/affecting = null//The wearer. diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index ebca69ecca..15b96ec4a8 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -467,7 +467,7 @@ proc/get_damage_icon_part(damage_state, body_part) if(!t_color) t_color = icon_state var/image/standing = image("icon_state" = "[t_color]_s") - standing.icon = 'icons/mob/uniform.dmi' + standing.icon = ((w_uniform.icon_override) ? w_uniform.icon_override : 'icons/mob/uniform.dmi') if(w_uniform.blood_DNA) standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "uniformblood") @@ -508,7 +508,7 @@ proc/get_damage_icon_part(damage_state, body_part) if(gloves) var/t_state = gloves.item_state if(!t_state) t_state = gloves.icon_state - var/image/standing = image("icon" = 'icons/mob/hands.dmi', "icon_state" = "[t_state]") + var/image/standing = image("icon" = ((gloves.icon_override) ? gloves.icon_override : 'icons/mob/hands.dmi'), "icon_state" = "[t_state]") if(gloves.blood_DNA) standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "bloodyhands") gloves.screen_loc = ui_gloves @@ -523,7 +523,7 @@ proc/get_damage_icon_part(damage_state, body_part) /mob/living/carbon/human/update_inv_glasses(var/update_icons=1) if(glasses) - overlays_standing[GLASSES_LAYER] = image("icon" = 'icons/mob/eyes.dmi', "icon_state" = "[glasses.icon_state]") + overlays_standing[GLASSES_LAYER] = image("icon" = ((glasses.icon_override) ? glasses.icon_override : 'icons/mob/eyes.dmi'), "icon_state" = "[glasses.icon_state]") else overlays_standing[GLASSES_LAYER] = null if(update_icons) update_icons() @@ -531,16 +531,16 @@ proc/get_damage_icon_part(damage_state, body_part) /mob/living/carbon/human/update_inv_ears(var/update_icons=1) if(l_ear || r_ear) if(l_ear) - overlays_standing[EARS_LAYER] = image("icon" = 'icons/mob/ears.dmi', "icon_state" = "[l_ear.icon_state]") + overlays_standing[EARS_LAYER] = image("icon" = ((l_ear.icon_override) ? l_ear.icon_override : 'icons/mob/ears.dmi'), "icon_state" = "[l_ear.icon_state]") if(r_ear) - overlays_standing[EARS_LAYER] = image("icon" = 'icons/mob/ears.dmi', "icon_state" = "[r_ear.icon_state]") + overlays_standing[EARS_LAYER] = image("icon" = ((r_ear.icon_override) ? r_ear.icon_override : 'icons/mob/ears.dmi'), "icon_state" = "[r_ear.icon_state]") else overlays_standing[EARS_LAYER] = null if(update_icons) update_icons() /mob/living/carbon/human/update_inv_shoes(var/update_icons=1) if(shoes) - var/image/standing = image("icon" = 'icons/mob/feet.dmi', "icon_state" = "[shoes.icon_state]") + var/image/standing = image("icon" = ((shoes.icon_override) ? shoes.icon_override : 'icons/mob/feet.dmi'), "icon_state" = "[shoes.icon_state]") if(shoes.blood_DNA) standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "shoeblood") overlays_standing[SHOES_LAYER] = standing @@ -566,7 +566,7 @@ proc/get_damage_icon_part(damage_state, body_part) if(istype(head,/obj/item/clothing/head/kitty)) standing = image("icon" = head:mob) else - standing = image("icon" = 'icons/mob/head.dmi', "icon_state" = "[head.icon_state]") + standing = image("icon" = ((head.icon_override) ? head.icon_override : 'icons/mob/head.dmi'), "icon_state" = "[head.icon_state]") if(head.blood_DNA) standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "helmetblood") overlays_standing[HEAD_LAYER] = standing @@ -579,7 +579,7 @@ proc/get_damage_icon_part(damage_state, body_part) belt.screen_loc = ui_belt //TODO var/t_state = belt.item_state if(!t_state) t_state = belt.icon_state - overlays_standing[BELT_LAYER] = image("icon" = 'icons/mob/belt.dmi', "icon_state" = "[t_state]") + overlays_standing[BELT_LAYER] = image("icon" = ((belt.icon_override) ? belt.icon_override : 'icons/mob/belt.dmi'), "icon_state" = "[t_state]") else overlays_standing[BELT_LAYER] = null if(update_icons) update_icons() @@ -588,7 +588,7 @@ proc/get_damage_icon_part(damage_state, body_part) /mob/living/carbon/human/update_inv_wear_suit(var/update_icons=1) if( wear_suit && istype(wear_suit, /obj/item/clothing/suit) ) //TODO check this wear_suit.screen_loc = ui_oclothing //TODO - var/image/standing = image("icon" = 'icons/mob/suit.dmi', "icon_state" = "[wear_suit.icon_state]") + var/image/standing = image("icon" = ((wear_suit.icon_override) ? wear_suit.icon_override : 'icons/mob/suit.dmi'), "icon_state" = "[wear_suit.icon_state]") if( istype(wear_suit, /obj/item/clothing/suit/straight_jacket) ) drop_from_inventory(handcuffed) @@ -619,7 +619,7 @@ proc/get_damage_icon_part(damage_state, body_part) /mob/living/carbon/human/update_inv_wear_mask(var/update_icons=1) if( wear_mask && ( istype(wear_mask, /obj/item/clothing/mask) || istype(wear_mask, /obj/item/clothing/tie) ) ) wear_mask.screen_loc = ui_mask //TODO - var/image/standing = image("icon" = 'icons/mob/mask.dmi', "icon_state" = "[wear_mask.icon_state]") + var/image/standing = image("icon" = ((wear_mask.icon_override) ? wear_mask.icon_override : 'icons/mob/mask.dmi'), "icon_state" = "[wear_mask.icon_state]") if( !istype(wear_mask, /obj/item/clothing/mask/cigarette) && wear_mask.blood_DNA ) standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "maskblood") overlays_standing[FACEMASK_LAYER] = standing @@ -631,7 +631,7 @@ proc/get_damage_icon_part(damage_state, body_part) /mob/living/carbon/human/update_inv_back(var/update_icons=1) if(back) back.screen_loc = ui_back //TODO - overlays_standing[BACK_LAYER] = image("icon" = 'icons/mob/back.dmi', "icon_state" = "[back.icon_state]") + overlays_standing[BACK_LAYER] = image("icon" = ((back.icon_override) ? back.icon_override : 'icons/mob/back.dmi'), "icon_state" = "[back.icon_state]") else overlays_standing[BACK_LAYER] = null if(update_icons) update_icons() diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index 4985362077..0396dd6ce0 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index 2b1a47ac9d..cafdb88f33 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index fdcee55193..7ec3f3ee2a 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index cb68bd46f3..6a72147f32 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ