Conflicts:
	baystation12.int
	code/controllers/verbs.dm
This commit is contained in:
jack-fractal
2013-11-23 11:58:50 -05:00
28 changed files with 267 additions and 80 deletions

View File

@@ -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"

View File

@@ -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

BIN
bygex.dll Normal file

Binary file not shown.

107
code/__HELPERS/bygex.dm Normal file
View File

@@ -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<font color='red'>[error]</font>"
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

View File

@@ -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]"

View File

@@ -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

View File

@@ -67,6 +67,8 @@ datum/controller/game_controller/proc/setup()
setupfactions()
setup_economy()
transfer_controller = new
for(var/i=0, i<max_secret_rooms, i++)
make_mining_asteroid_secret()
@@ -119,6 +121,7 @@ datum/controller/game_controller/proc/process()
controller_iteration++
vote.process()
transfer_controller.process()
process_newscaster()
//AIR
@@ -196,7 +199,7 @@ datum/controller/game_controller/proc/process()
timer = world.timeofday
process_nano()
nano_cost = (world.timeofday - timer) / 10
sleep(breather_ticks)
//EVENTS

View File

@@ -28,7 +28,7 @@
return
/client/proc/debug_controller(controller in list("Master","Failsafe","Ticker","Lighting","Air","Jobs","Sun","Radio","Supply Shuttle","Emergency Shuttle","Configuration","pAI", "Cameras","CultNetwork"))
/client/proc/debug_controller(controller in list("Master","Failsafe","Ticker","Lighting","Air","Jobs","Sun","Radio","Supply Shuttle","Emergency Shuttle","Configuration","pAI", "Cameras", "Transfer Controller","CultNetwork"))
set category = "Debug"
set name = "Debug Controller"
set desc = "Debug the various periodic loop controllers for the game (be careful!)"
@@ -74,8 +74,12 @@
if("Cameras")
debug_variables(cameraNetwork)
feedback_add_details("admin_verb","DCameras")
if("Transfer Controller")
debug_variables(transfer_controller)
feedback_add_details("admin_verb","DAutovoter")
if("CultNetwork")
debug_variables(cultNetwork)
feedback_add_details("admin_verb","DCultNetwork")
message_admins("Admin [key_name_admin(usr)] is debugging the [controller] controller.")
return

View File

@@ -48,7 +48,11 @@ datum/controller/vote
proc/autotransfer()
initiate_vote("crew_transfer","the server")
log_debug("The server has called an Autotransfer")
log_debug("The server has called a crew transfer vote")
/* proc/autogamemode() //This is here for whoever can figure out how to make this work
initiate_vote("gamemode","the server")
log_debug("The server has called a gamemode vote")*/
proc/reset()
initiator = null

View File

@@ -26,18 +26,22 @@
ninja.assigned_role = "MODE" //So they aren't chosen for other jobs.
ninja.special_role = "Ninja"
ninja.original = ninja.current
if(ninjastart.len == 0)
/*if(ninjastart.len == 0)
ninja.current << "<B>\red A proper starting location for you could not be found, please report this bug!</B>"
ninja.current << "<B>\red Attempting to place at a carpspawn.</B>"
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 << "<B>\red Still no spawneable locations could be found. Defaulting to latejoin.</B>"
return 1
else if (ninjastart.len == 0)
ninja.current << "<B>\red Still no spawneable locations could be found. Aborting.</B>"
return 0
ninja.current << "<B>\red Attempting to place at a carpspawn.</B>"*/
//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 << "<B>\red No spawneable locations could be found. Defaulting to latejoin.</B>"
return 1
else if (ninjastart.len == 0)
ninja.current << "<B>\red No spawneable locations could be found. Aborting.</B>"
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

View File

@@ -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("<TT><B>Nuclear Fission Explosive</B><BR>\nAuth. Disk: <A href='?src=\ref[];auth=1'>[]</A><HR>", 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

View File

@@ -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()
*/
*/

View File

@@ -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)

View File

@@ -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("<span class='warning'>[src] is not ready to fire again!")
return 0
switch(mode)
if(1)
if(!action_checks(target) && !locked) return

View File

@@ -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'

View File

@@ -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)
A.emp_act(severity)

View File

@@ -510,6 +510,12 @@
if(counter >= 5) //So things dont get squiiiiished!
jobs += "</tr><tr align='center'>"
counter = 0
if(jobban_isbanned(M, "Internal Affairs Agent"))
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Internal Affairs Agent;jobban4=\ref[M]'><font color=red>Internal Affairs Agent</font></a></td>"
else
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Internal Affairs Agent;jobban4=\ref[M]'>Internal Affairs Agent</a></td>"
jobs += "</tr></table>"
//Non-Human (Green)
@@ -587,6 +593,13 @@
else
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=wizard;jobban4=\ref[M]'>[replacetext("Wizard", " ", "&nbsp")]</a></td>"
//ERT
if(jobban_isbanned(M, "Emergency Response Team") || isbanned_dept)
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Emergency Response Team;jobban4=\ref[M]'><font color=red>Emergency Response Team</font></a></td>"
else
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Emergency Response Team;jobban4=\ref[M]'>Emergency Response Team</a></td>"
/* //Malfunctioning AI //Removed Malf-bans because they're a pain to impliment
if(jobban_isbanned(M, "malf AI") || isbanned_dept)
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=malf AI;jobban4=\ref[M]'><font color=red>[replacetext("Malf AI", " ", "&nbsp")]</font></a></td>"

View File

@@ -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

View File

@@ -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"
item_state = "syringe_kit"

View File

@@ -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

View File

@@ -32,7 +32,7 @@
else
user << "<span class='notice'>[src] already have a cell.</span>"
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"
overlays += "gloves_cell"

View File

@@ -213,4 +213,50 @@
examine()
set src in view()
..()
..()
//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")

View File

@@ -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.

View File

@@ -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()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 225 KiB

After

Width:  |  Height:  |  Size: 231 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 78 KiB