From da1ef913f5a7be3728676c1778b96c2cfddb76b0 Mon Sep 17 00:00:00 2001 From: Kelenius Date: Fri, 11 Mar 2016 10:55:52 +0300 Subject: [PATCH 01/64] Attempts to port bay's travis update attempts See https://github.com/Baystation12/Baystation12/pull/10096 --- .travis.yml | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/.travis.yml b/.travis.yml index f26102a3b3..88ab3f20c6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,28 +1,36 @@ #pretending we're C because otherwise ruby will initialize, even with "language: dm". language: c +sudo: false env: BYOND_MAJOR="508" BYOND_MINOR="1287" -before_install: - - sudo apt-get update -qq - - sudo apt-get install libc6:i386 libgcc1:i386 libstdc++6:i386 -qq - - sudo apt-get install python -qq - - sudo apt-get install python-pip -qq - - sudo pip install PyYaml -q - - sudo pip install beautifulsoup4 -q +cache: + directories: + - $HOME/BYOND-${BYOND_MAJOR}.${BYOND_MINOR} + +addons: + apt: + packages: + - libc6-i386 + - libgcc1:i386 + - libstdc++6:i386 + - python + - python-pip + +before_script: + - chmod +x ./install-byond.sh + - ./install-byond.sh install: - - curl "http://www.byond.com/download/build/${BYOND_MAJOR}/${BYOND_MAJOR}.${BYOND_MINOR}_byond_linux.zip" -o byond.zip - - unzip byond.zip - - cd byond - - sudo make install - - cd .. + - pip install --user PyYaml -q + - pip install --user beautifulsoup4 -q script: - shopt -s globstar - (! grep 'step_[xy]' maps/**/*.dmm) - (! find nano/templates/ -type f -exec md5sum {} + | sort | uniq -D -w 32 | grep nano) - (num=`grep -E '\\\\(red|blue|green|black|b|i[^mc])' **/*.dm | wc -l`; [ $num -le 1355 ]) + - source $HOME/BYOND-${BYOND_MAJOR}.${BYOND_MINOR}/byond/bin/byondsetup - DreamMaker polaris.dme From 14d70628cb7bd7903b9319c9cfcd7bfafba4609a Mon Sep 17 00:00:00 2001 From: Kelenius Date: Fri, 11 Mar 2016 11:01:34 +0300 Subject: [PATCH 02/64] Updates byond version in travis --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 88ab3f20c6..a54ff6f539 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,8 +3,8 @@ language: c sudo: false env: - BYOND_MAJOR="508" - BYOND_MINOR="1287" + BYOND_MAJOR="509" + BYOND_MINOR="1318" cache: directories: From 1aae55b4ca96450ac2693e44753a29e9f25a231c Mon Sep 17 00:00:00 2001 From: Kelenius Date: Fri, 11 Mar 2016 11:09:18 +0300 Subject: [PATCH 03/64] Apparently this isn't necessary in travis? --- .travis.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index a54ff6f539..19edae7801 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,8 +16,6 @@ addons: - libc6-i386 - libgcc1:i386 - libstdc++6:i386 - - python - - python-pip before_script: - chmod +x ./install-byond.sh From aca432f9f35485d364880a6a9b0574fe5a558472 Mon Sep 17 00:00:00 2001 From: Kelenius Date: Fri, 11 Mar 2016 11:25:10 +0300 Subject: [PATCH 04/64] Ensures .int and example.yml are unchanged Adds \color macro count --- .travis.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 19edae7801..8dfb2f3b44 100644 --- a/.travis.yml +++ b/.travis.yml @@ -29,6 +29,9 @@ script: - shopt -s globstar - (! grep 'step_[xy]' maps/**/*.dmm) - (! find nano/templates/ -type f -exec md5sum {} + | sort | uniq -D -w 32 | grep nano) - - (num=`grep -E '\\\\(red|blue|green|black|b|i[^mc])' **/*.dm | wc -l`; [ $num -le 1355 ]) + - (! grep -E "<\s*span\s+class\s*=\s*('[^'>]+|[^'>]+')\s*>" **/*.dm) + - md5sum -c - <<< "567c349d4b5d52ff28f9b7ea5f1ae6f9 *baystation12.int" + - md5sum -c - <<< "88490b460c26947f5ec1ab1bb9fa9f17 *html/changelogs/example.yml" + - (num=`grep -E '\\\\(red|blue|green|black|b|i[^mc])' **/*.dm | wc -l`; echo "$num escapes (expecting 1355 or less)"; [ $num -le 1355 ]) - source $HOME/BYOND-${BYOND_MAJOR}.${BYOND_MINOR}/byond/bin/byondsetup - DreamMaker polaris.dme From 98487242f6e7723ed63b05a459034ca112839f4c Mon Sep 17 00:00:00 2001 From: Kelenius Date: Fri, 11 Mar 2016 11:31:53 +0300 Subject: [PATCH 05/64] Updates macro count, makes it a var Previous commit added GinjaNinja32's script for checking for ]+|[^'>]+')\s*>" **/*.dm) - - md5sum -c - <<< "567c349d4b5d52ff28f9b7ea5f1ae6f9 *baystation12.int" - md5sum -c - <<< "88490b460c26947f5ec1ab1bb9fa9f17 *html/changelogs/example.yml" - - (num=`grep -E '\\\\(red|blue|green|black|b|i[^mc])' **/*.dm | wc -l`; echo "$num escapes (expecting 1355 or less)"; [ $num -le 1355 ]) + - (num=`grep -E '\\\\(red|blue|green|black|b|i[^mc])' **/*.dm | wc -l`; echo "$num escapes (expecting ${MACRO_COUNT} or less)"; [ $num -le ${MACRO_COUNT} ]) - source $HOME/BYOND-${BYOND_MAJOR}.${BYOND_MINOR}/byond/bin/byondsetup - DreamMaker polaris.dme diff --git a/code/game/gamemodes/changeling/powers/armblade.dm b/code/game/gamemodes/changeling/powers/armblade.dm index e1d6609851..865c380b79 100644 --- a/code/game/gamemodes/changeling/powers/armblade.dm +++ b/code/game/gamemodes/changeling/powers/armblade.dm @@ -43,7 +43,7 @@ /obj/item/weapon/melee/arm_blade/dropped(mob/user) visible_message("With a sickening crunch, [creator] reforms their arm blade into an arm!", "We assimilate the weapon back into our body.", - "You hear organic matter ripping and tearing!") playsound(src, 'sound/effects/blobattack.ogg', 30, 1) spawn(1) if(src) diff --git a/code/game/gamemodes/changeling/powers/rapid_regen.dm b/code/game/gamemodes/changeling/powers/rapid_regen.dm index a320c33b96..6f2d43e5da 100644 --- a/code/game/gamemodes/changeling/powers/rapid_regen.dm +++ b/code/game/gamemodes/changeling/powers/rapid_regen.dm @@ -48,7 +48,7 @@ new /obj/effect/gibspawner/human(T) visible_message("With a sickening squish, [src] reforms their whole body, casting their old parts on the floor!", "We reform our body. We are whole once more.", - "You hear organic matter ripping and tearing!") feedback_add_details("changeling_powers","RR") return 1 \ No newline at end of file From 16f7b42640a46aa09a1a873d09f39172136dcb4e Mon Sep 17 00:00:00 2001 From: Kelenius Date: Fri, 11 Mar 2016 11:39:05 +0300 Subject: [PATCH 06/64] Enables tag matcher and https://github.com/Baystation12/Baystation12/pull/11642 --- .travis.yml | 2 ++ tools/indentation.awk | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 tools/indentation.awk diff --git a/.travis.yml b/.travis.yml index 523b6fdb4b..3654665f1a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -31,7 +31,9 @@ script: - (! grep 'step_[xy]' maps/**/*.dmm) - (! find nano/templates/ -type f -exec md5sum {} + | sort | uniq -D -w 32 | grep nano) - (! grep -E "<\s*span\s+class\s*=\s*('[^'>]+|[^'>]+')\s*>" **/*.dm) + - awk -f tools/indentation.awk **/*.dm - md5sum -c - <<< "88490b460c26947f5ec1ab1bb9fa9f17 *html/changelogs/example.yml" - (num=`grep -E '\\\\(red|blue|green|black|b|i[^mc])' **/*.dm | wc -l`; echo "$num escapes (expecting ${MACRO_COUNT} or less)"; [ $num -le ${MACRO_COUNT} ]) - source $HOME/BYOND-${BYOND_MAJOR}.${BYOND_MINOR}/byond/bin/byondsetup + - python tools/TagMatcher/tag-matcher.py ../.. - DreamMaker polaris.dme diff --git a/tools/indentation.awk b/tools/indentation.awk new file mode 100644 index 0000000000..e4742bf2f9 --- /dev/null +++ b/tools/indentation.awk @@ -0,0 +1,32 @@ +#! /usr/bin/awk -f + +# Finds incorrect indentation of absolute path definitions in DM code +# For example, the following fails on the indicated line: + +#/datum/path/foo +# x = "foo" +# /datum/path/bar // FAIL +# x = "bar" + +{ + if ( comma != 1 ) { # No comma/'list('/etc at the end of the previous line + if ( $0 ~ /^[\t ]+\/[^/*]/ ) { # Current line's first non-whitespace character is a slash, followed by something that is not another slash or an asterisk + print FILENAME, ":", $0 + fail = 1 + } + } + + if ($0 ~ /,[\t ]*\\?\r?$/ || # comma at EOL + $0 ~ /list[\t ]*\([\t ]*\\?\r?$/ || # start of a list() + $0 ~ /pick[\t ]*\([\t ]*\\?\r?$/ ) { # start of a pick() + comma = 1 + } else { + comma = 0 + } +} + +END { + if ( fail ) { + exit 1 + } +} From 3fdda5e8c50b63c2484db1886cf7c746d8c3b129 Mon Sep 17 00:00:00 2001 From: Kelenius Date: Fri, 11 Mar 2016 11:59:51 +0300 Subject: [PATCH 07/64] Fixes issues travis found --- code/_helpers/names.dm | 2 +- code/controllers/hooks.dm | 10 +- code/datums/supplypacks.dm | 10 +- code/game/area/Space Station 13 areas.dm | 4 +- code/game/machinery/computer/arcade.dm | 4 +- code/game/objects/items/toys.dm | 12 +- code/modules/admin/admin_verbs.dm | 144 +++++++++--------- code/modules/admin/verbs/modifyvariables.dm | 6 +- code/modules/admin/verbs/randomverbs.dm | 2 +- code/modules/economy/economy_misc.dm | 2 +- code/modules/maps/swapmaps.dm | 4 +- code/modules/materials/materials.dm | 10 +- .../mob/living/carbon/human/examine.dm | 2 +- .../living/carbon/human/species/species.dm | 2 +- code/modules/mob/living/silicon/ai/ai.dm | 2 +- .../living/silicon/robot/drone/drone_items.dm | 6 +- .../mob/living/simple_animal/simple_animal.dm | 2 +- code/modules/paperwork/pen.dm | 4 +- code/modules/power/cable.dm | 2 +- code/modules/reagents/Chemistry-Readme.dm | 4 +- code/modules/reagents/dispenser/supply.dm | 4 +- .../artifact/artifact_unknown.dm | 4 +- .../xenoarchaeology/finds/finds_misc.dm | 4 +- maps/RandomZLevels/stationCollision.dm | 26 ++-- 24 files changed, 136 insertions(+), 136 deletions(-) diff --git a/code/_helpers/names.dm b/code/_helpers/names.dm index 437661b7fc..54a922c30d 100644 --- a/code/_helpers/names.dm +++ b/code/_helpers/names.dm @@ -161,7 +161,7 @@ var/syndicate_code_response//Code response for traitors. Obviously, some people will be better at this than others but in theory, everyone should be able to do it and it only enhances roleplay. Can probably be done through "{ }" but I don't really see the practical benefit. One example of an earlier system is commented below. - /N + -N */ /proc/generate_code_phrase()//Proc is used for phrase and response in master_controller.dm diff --git a/code/controllers/hooks.dm b/code/controllers/hooks.dm index 48f1199ef7..e7888304e5 100644 --- a/code/controllers/hooks.dm +++ b/code/controllers/hooks.dm @@ -9,11 +9,11 @@ * * To add some code to be called by the hook, define a proc under the type, as so: * @code - /hook/foo/proc/bar() - if(1) - return 1 //Sucessful - else - return 0 //Error, or runtime. +/hook/foo/proc/bar() + if(1) + return 1 //Sucessful + else + return 0 //Error, or runtime. * @endcode * All hooks must return nonzero on success, as runtimes will force return null. */ diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index eed8492ffd..ed0eedfa51 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -610,7 +610,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/solar_assembly, /obj/item/solar_assembly, /obj/item/solar_assembly, - /obj/item/solar_assembly, // 21 Solar Assemblies. 1 Extra for the controller + /obj/item/solar_assembly, // 21 Solar Assemblies. 1 Extra for the controller, /obj/item/weapon/circuitboard/solar_control, /obj/item/weapon/tracker_electronics, /obj/item/weapon/paper/solar) @@ -672,8 +672,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /datum/supply_packs/mecha_ripley name = "Circuit Crate (\"Ripley\" APLU)" contains = list(/obj/item/weapon/book/manual/ripley_build_and_repair, - /obj/item/weapon/circuitboard/mecha/ripley/main, //TEMPORARY due to lack of circuitboard printer - /obj/item/weapon/circuitboard/mecha/ripley/peripherals) //TEMPORARY due to lack of circuitboard printer + /obj/item/weapon/circuitboard/mecha/ripley/main, + /obj/item/weapon/circuitboard/mecha/ripley/peripherals) cost = 30 containertype = /obj/structure/closet/crate/secure containername = "APLU \"Ripley\" Circuit Crate" @@ -682,8 +682,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /datum/supply_packs/mecha_odysseus name = "Circuit Crate (\"Odysseus\")" - contains = list(/obj/item/weapon/circuitboard/mecha/odysseus/peripherals, //TEMPORARY due to lack of circuitboard printer - /obj/item/weapon/circuitboard/mecha/odysseus/main) //TEMPORARY due to lack of circuitboard printer + contains = list(/obj/item/weapon/circuitboard/mecha/odysseus/peripherals, + /obj/item/weapon/circuitboard/mecha/odysseus/main) cost = 25 containertype = /obj/structure/closet/crate/secure containername = "\"Odysseus\" Circuit Crate" diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index 8ab1944f5e..37f6ede31c 100755 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -2759,10 +2759,10 @@ var/list/the_station_areas = list ( /area/rnd, /area/storage, /area/construction, - /area/ai_monitored/storage/eva, //do not try to simplify to "/area/ai_monitored" --rastaf0 + /area/ai_monitored/storage/eva, /area/ai_monitored/storage/secure, /area/ai_monitored/storage/emergency, - /area/turret_protected/ai_upload, //do not try to simplify to "/area/turret_protected" --rastaf0 + /area/turret_protected/ai_upload, /area/turret_protected/ai_upload_foyer, /area/turret_protected/ai, ) diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 87cfeea09b..189fe5b40a 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -393,14 +393,14 @@ dat += "
You ran out of food and starved." if(emagged) user.nutrition = 0 //yeah you pretty hongry - user << "Your body instantly contracts to that of one who has not eaten in months. Agonizing cramps seize you as you fall to the floor." + user << "Your body instantly contracts to that of one who has not eaten in months. Agonizing cramps seize you as you fall to the floor." if(fuel <= 0) dat += "
You ran out of fuel, and drift, slowly, into a star." if(emagged) var/mob/living/M = user M.adjust_fire_stacks(5) M.IgniteMob() //flew into a star, so you're on fire - user << "You feel an immense wave of heat emanate from \the [src]. Your skin bursts into flames." + user << "You feel an immense wave of heat emanate from \the [src]. Your skin bursts into flames." dat += "

OK...

" if(emagged) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 0068473fb7..63a88dadbb 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -407,12 +407,12 @@ * Bosun's whistle */ - /obj/item/toy/bosunwhistle - name = "bosun's whistle" - desc = "A genuine Admiral Krush Bosun's Whistle, for the aspiring ship's captain! Suitable for ages 8 and up, do not swallow." - icon = 'icons/obj/toy.dmi' - icon_state = "bosunwhistle" - var/cooldown = 0 +/obj/item/toy/bosunwhistle + name = "bosun's whistle" + desc = "A genuine Admiral Krush Bosun's Whistle, for the aspiring ship's captain! Suitable for ages 8 and up, do not swallow." + icon = 'icons/obj/toy.dmi' + icon_state = "bosunwhistle" + var/cooldown = 0 w_class = 1 slot_flags = SLOT_EARS diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 39e6be78f9..0444fbf15c 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -1,78 +1,78 @@ //admin verb groups - They can overlap if you so wish. Only one of each verb will exist in the verbs list regardless var/list/admin_verbs_default = list( - /datum/admins/proc/show_player_panel, /*shows an interface for individual players, with various links (links require additional flags*/ + /datum/admins/proc/show_player_panel, //shows an interface for individual players, with various links (links require additional flags, /client/proc/player_panel, - /client/proc/toggleadminhelpsound, /*toggles whether we hear a sound when adminhelps/PMs are used*/ - /client/proc/deadmin_self, /*destroys our own admin datum so we can play as a regular player*/ - /client/proc/hide_verbs, /*hides all our adminverbs*/ - /client/proc/hide_most_verbs, /*hides all our hideable adminverbs*/ - /client/proc/debug_variables, /*allows us to -see- the variables of any instance in the game. +VAREDIT needed to modify*/ -// /client/proc/check_antagonists, /*shows all antags*/ + /client/proc/toggleadminhelpsound, //toggles whether we hear a sound when adminhelps/PMs are used, + /client/proc/deadmin_self, //destroys our own admin datum so we can play as a regular player, + /client/proc/hide_verbs, //hides all our adminverbs, + /client/proc/hide_most_verbs, //hides all our hideable adminverbs, + /client/proc/debug_variables, //allows us to -see- the variables of any instance in the game. +VAREDIT needed to modify, +// /client/proc/check_antagonists, //shows all antags, // /client/proc/cmd_mod_say, /client/proc/cmd_mentor_check_new_players -// /client/proc/deadchat /*toggles deadchat on/off*/ +// /client/proc/deadchat //toggles deadchat on/off, ) var/list/admin_verbs_admin = list( - /client/proc/player_panel_new, /*shows an interface for all players, with links to various panels*/ + /client/proc/player_panel_new, //shows an interface for all players, with links to various panels, /datum/admins/proc/set_tcrystals, /datum/admins/proc/add_tcrystals, - /client/proc/invisimin, /*allows our mob to go invisible/visible*/ -// /datum/admins/proc/show_traitor_panel, /*interface which shows a mob's mind*/ -Removed due to rare practical use. Moved to debug verbs ~Errorage - /datum/admins/proc/show_game_mode, /*Configuration window for the current game mode.*/ - /datum/admins/proc/force_mode_latespawn, /*Force the mode to try a latespawn proc*/ - /datum/admins/proc/force_antag_latespawn, /*Force a specific template to try a latespawn proc*/ - /datum/admins/proc/toggleenter, /*toggles whether people can join the current game*/ - /datum/admins/proc/toggleguests, /*toggles whether guests can join the current game*/ - /datum/admins/proc/announce, /*priority announce something to all clients.*/ - /client/proc/colorooc, /*allows us to set a custom colour for everythign we say in ooc*/ - /client/proc/admin_ghost, /*allows us to ghost/reenter body at will*/ - /client/proc/toggle_view_range, /*changes how far we can see*/ - /datum/admins/proc/view_txt_log, /*shows the server log (diary) for today*/ - /datum/admins/proc/view_atk_log, /*shows the server combat-log, doesn't do anything presently*/ - /client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/ - /client/proc/cmd_admin_pm_panel, /*admin-pm list*/ - /client/proc/cmd_admin_subtle_message, /*send an message to somebody as a 'voice in their head'*/ - /client/proc/cmd_admin_delete, /*delete an instance/object/mob/etc*/ - /client/proc/cmd_admin_check_contents, /*displays the contents of an instance*/ - /datum/admins/proc/access_news_network, /*allows access of newscasters*/ - /client/proc/giveruntimelog, /*allows us to give access to runtime logs to somebody*/ - /client/proc/getserverlog, /*allows us to fetch server logs (diary) for other days*/ - /client/proc/jumptocoord, /*we ghost and jump to a coordinate*/ - /client/proc/Getmob, /*teleports a mob to our location*/ - /client/proc/Getkey, /*teleports a mob with a certain ckey to our location*/ -// /client/proc/sendmob, /*sends a mob somewhere*/ -Removed due to it needing two sorting procs to work, which were executed every time an admin right-clicked. ~Errorage + /client/proc/invisimin, //allows our mob to go invisible/visible, +// /datum/admins/proc/show_traitor_panel, //interface which shows a mob's mind -Removed due to rare practical use. Moved to debug verbs ~Errorage, + /datum/admins/proc/show_game_mode, //Configuration window for the current game mode., + /datum/admins/proc/force_mode_latespawn, //Force the mode to try a latespawn proc, + /datum/admins/proc/force_antag_latespawn, //Force a specific template to try a latespawn proc, + /datum/admins/proc/toggleenter, //toggles whether people can join the current game, + /datum/admins/proc/toggleguests, //toggles whether guests can join the current game, + /datum/admins/proc/announce, //priority announce something to all clients., + /client/proc/colorooc, //allows us to set a custom colour for everythign we say in ooc, + /client/proc/admin_ghost, //allows us to ghost/reenter body at will, + /client/proc/toggle_view_range, //changes how far we can see, + /datum/admins/proc/view_txt_log, //shows the server log (diary) for today, + /datum/admins/proc/view_atk_log, //shows the server combat-log, doesn't do anything presently, + /client/proc/cmd_admin_pm_context, //right-click adminPM interface, + /client/proc/cmd_admin_pm_panel, //admin-pm list, + /client/proc/cmd_admin_subtle_message, //send an message to somebody as a 'voice in their head', + /client/proc/cmd_admin_delete, //delete an instance/object/mob/etc, + /client/proc/cmd_admin_check_contents, //displays the contents of an instance, + /datum/admins/proc/access_news_network, //allows access of newscasters, + /client/proc/giveruntimelog, //allows us to give access to runtime logs to somebody, + /client/proc/getserverlog, //allows us to fetch server logs (diary) for other days, + /client/proc/jumptocoord, //we ghost and jump to a coordinate, + /client/proc/Getmob, //teleports a mob to our location, + /client/proc/Getkey, //teleports a mob with a certain ckey to our location, +// /client/proc/sendmob, //sends a mob somewhere, -Removed due to it needing two sorting procs to work, which were executed every time an admin right-clicked. ~Errorage, /client/proc/Jump, - /client/proc/jumptokey, /*allows us to jump to the location of a mob with a certain ckey*/ - /client/proc/jumptomob, /*allows us to jump to a specific mob*/ - /client/proc/jumptoturf, /*allows us to jump to a specific turf*/ - /client/proc/admin_call_shuttle, /*allows us to call the emergency shuttle*/ - /client/proc/admin_cancel_shuttle, /*allows us to cancel the emergency shuttle, sending it back to centcomm*/ - /client/proc/cmd_admin_direct_narrate, /*send text directly to a player with no padding. Useful for narratives and fluff-text*/ - /client/proc/cmd_admin_world_narrate, /*sends text to all players with no padding*/ + /client/proc/jumptokey, //allows us to jump to the location of a mob with a certain ckey, + /client/proc/jumptomob, //allows us to jump to a specific mob, + /client/proc/jumptoturf, //allows us to jump to a specific turf, + /client/proc/admin_call_shuttle, //allows us to call the emergency shuttle, + /client/proc/admin_cancel_shuttle, //allows us to cancel the emergency shuttle, sending it back to centcomm, + /client/proc/cmd_admin_direct_narrate, //send text directly to a player with no padding. Useful for narratives and fluff-text, + /client/proc/cmd_admin_world_narrate, //sends text to all players with no padding, /client/proc/cmd_admin_create_centcom_report, - /client/proc/check_words, /*displays cult-words*/ - /client/proc/check_ai_laws, /*shows AI and borg laws*/ - /client/proc/rename_silicon, /*properly renames silicons*/ - /client/proc/manage_silicon_laws, /* Allows viewing and editing silicon laws. */ + /client/proc/check_words, //displays cult-words, + /client/proc/check_ai_laws, //shows AI and borg laws, + /client/proc/rename_silicon, //properly renames silicons, + /client/proc/manage_silicon_laws, // Allows viewing and editing silicon laws. , /client/proc/check_antagonists, - /client/proc/admin_memo, /*admin memo system. show/delete/write. +SERVER needed to delete admin memos of others*/ - /client/proc/dsay, /*talk in deadchat using our ckey/fakekey*/ - /client/proc/toggleprayers, /*toggles prayers on/off*/ -// /client/proc/toggle_hear_deadcast, /*toggles whether we hear deadchat*/ - /client/proc/toggle_hear_radio, /*toggles whether we hear the radio*/ - /client/proc/investigate_show, /*various admintools for investigation. Such as a singulo grief-log*/ + /client/proc/admin_memo, //admin memo system. show/delete/write. +SERVER needed to delete admin memos of others, + /client/proc/dsay, //talk in deadchat using our ckey/fakekey, + /client/proc/toggleprayers, //toggles prayers on/off, +// /client/proc/toggle_hear_deadcast, //toggles whether we hear deadchat, + /client/proc/toggle_hear_radio, //toggles whether we hear the radio, + /client/proc/investigate_show, //various admintools for investigation. Such as a singulo grief-log, /client/proc/secrets, - /datum/admins/proc/toggleooc, /*toggles ooc on/off for everyone*/ - /datum/admins/proc/togglelooc, /*toggles looc on/off for everyone*/ - /datum/admins/proc/toggleoocdead, /*toggles ooc on/off for everyone who is dead*/ - /datum/admins/proc/togglehubvisibility, /*toggles visibility on the BYOND Hub.*/ - /datum/admins/proc/toggledsay, /*toggles dsay on/off for everyone*/ - /client/proc/game_panel, /*game panel, allows to change game-mode etc*/ - /client/proc/cmd_admin_say, /*admin-only ooc chat*/ + /datum/admins/proc/toggleooc, //toggles ooc on/off for everyone, + /datum/admins/proc/togglelooc, //toggles looc on/off for everyone, + /datum/admins/proc/toggleoocdead, //toggles ooc on/off for everyone who is dead, + /datum/admins/proc/togglehubvisibility, //toggles visibility on the BYOND Hub., + /datum/admins/proc/toggledsay, //toggles dsay on/off for everyone, + /client/proc/game_panel, //game panel, allows to change game-mode etc, + /client/proc/cmd_admin_say, //admin-only ooc chat, /datum/admins/proc/PlayerNotes, /client/proc/cmd_mod_say, /datum/admins/proc/show_player_info, - /client/proc/free_slot, /*frees slot for chosen job*/ + /client/proc/free_slot, //frees slot for chosen job, /client/proc/cmd_admin_change_custom_event, /client/proc/cmd_admin_rejuvenate, /client/proc/toggleattacklogs, @@ -86,13 +86,13 @@ var/list/admin_verbs_admin = list( /client/proc/response_team, // Response Teams admin verb /client/proc/toggle_antagHUD_use, /client/proc/toggle_antagHUD_restrictions, - /client/proc/allow_character_respawn, /* Allows a ghost to respawn */ + /client/proc/allow_character_respawn, // Allows a ghost to respawn , /client/proc/event_manager_panel, /client/proc/empty_ai_core_toggle_latejoin, /client/proc/empty_ai_core_toggle_latejoin, /client/proc/aooc, - /client/proc/change_human_appearance_admin, /* Allows an admin to change the basic appearance of human-based mobs */ - /client/proc/change_human_appearance_self, /* Allows the human-based mob itself change its basic appearance */ + /client/proc/change_human_appearance_admin, // Allows an admin to change the basic appearance of human-based mobs , + /client/proc/change_human_appearance_self, // Allows the human-based mob itself change its basic appearance , /client/proc/change_security_level, /client/proc/view_chemical_reaction_logs, /client/proc/makePAI, @@ -131,7 +131,7 @@ var/list/admin_verbs_spawn = list( /datum/admins/proc/spawn_custom_item, /datum/admins/proc/check_custom_items, /datum/admins/proc/spawn_plant, - /datum/admins/proc/spawn_atom, /*allows us to spawn instances*/ + /datum/admins/proc/spawn_atom, //allows us to spawn instances, /client/proc/respawn_character, /client/proc/virus2_editor, /client/proc/spawn_chemdisp_cartridge @@ -149,7 +149,7 @@ var/list/admin_verbs_server = list( /datum/admins/proc/immreboot, /client/proc/everyone_random, /datum/admins/proc/toggleAI, - /client/proc/cmd_admin_delete, /*delete an instance/object/mob/etc*/ + /client/proc/cmd_admin_delete, //delete an instance/object/mob/etc, /client/proc/cmd_debug_del_all, /datum/admins/proc/adrev, /datum/admins/proc/adspawn, @@ -161,7 +161,7 @@ var/list/admin_verbs_server = list( /client/proc/nanomapgen_DumpImage ) var/list/admin_verbs_debug = list( - /client/proc/getruntimelog, /*allows us to access runtime logs to somebody*/ + /client/proc/getruntimelog, //allows us to access runtime logs to somebody, /client/proc/cmd_admin_list_open_jobs, /client/proc/Debug2, /client/proc/kill_air, @@ -194,7 +194,7 @@ var/list/admin_verbs_debug = list( /client/proc/jumptomob, /client/proc/jumptocoord, /client/proc/dsay, - /client/proc/admin_ghost /*allows us to ghost/reenter body at will*/ + /client/proc/admin_ghost //allows us to ghost/reenter body at will, ) var/list/admin_verbs_paranoid_debug = list( @@ -288,12 +288,12 @@ var/list/admin_verbs_hideable = list( /datum/admins/proc/set_tcrystals ) var/list/admin_verbs_mod = list( - /client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/ - /client/proc/cmd_admin_pm_panel, /*admin-pm list*/ - /client/proc/debug_variables, /*allows us to -see- the variables of any instance in the game.*/ + /client/proc/cmd_admin_pm_context, //right-click adminPM interface, + /client/proc/cmd_admin_pm_panel, //admin-pm list, + /client/proc/debug_variables, //allows us to -see- the variables of any instance in the game., /client/proc/toggledebuglogs, /datum/admins/proc/PlayerNotes, - /client/proc/admin_ghost, /*allows us to ghost/reenter body at will*/ + /client/proc/admin_ghost, //allows us to ghost/reenter body at will, /client/proc/cmd_mod_say, /client/proc/toggleattacklogs, /datum/admins/proc/show_player_info, @@ -304,10 +304,10 @@ var/list/admin_verbs_mod = list( /client/proc/check_antagonists, /client/proc/aooc, /client/proc/jobbans, - /client/proc/cmd_admin_subtle_message, /*send an message to somebody as a 'voice in their head'*/ + /client/proc/cmd_admin_subtle_message, //send an message to somebody as a 'voice in their head', /datum/admins/proc/paralyze_mob, /client/proc/cmd_admin_direct_narrate, - /client/proc/allow_character_respawn /* Allows a ghost to respawn */ + /client/proc/allow_character_respawn // Allows a ghost to respawn , ) var/list/admin_verbs_mentor = list( diff --git a/code/modules/admin/verbs/modifyvariables.dm b/code/modules/admin/verbs/modifyvariables.dm index 50ddc81f41..51f1fbceb3 100644 --- a/code/modules/admin/verbs/modifyvariables.dm +++ b/code/modules/admin/verbs/modifyvariables.dm @@ -1,7 +1,7 @@ var/list/forbidden_varedit_object_types = list( - /datum/admins, //Admins editing their own admin-power object? Yup, sounds like a good idea. - /obj/machinery/blackbox_recorder, //Prevents people messing with feedback gathering - /datum/feedback_variable //Prevents people messing with feedback gathering + /datum/admins, //Admins editing their own admin-power object? Yup, sounds like a good idea, + /obj/machinery/blackbox_recorder, //Prevents people messing with feedback gathering, + /datum/feedback_variable //Prevents people messing with feedback gathering, ) var/list/VVlocked = list("vars", "client", "virus", "viruses", "cuffed", "last_eaten", "unlock_content", "bound_x", "bound_y", "step_x", "step_y", "force_ending") diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index c1cde11dad..ef5bdb4e6d 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -235,7 +235,7 @@ Ccomp's first proc. var/list/mobs = list() var/list/ghosts = list() var/list/sortmob = sortAtom(mob_list) // get the mob list. - /var/any=0 + var/any=0 for(var/mob/dead/observer/M in sortmob) mobs.Add(M) //filter it where it's only ghosts any = 1 //if no ghosts show up, any will just be 0 diff --git a/code/modules/economy/economy_misc.dm b/code/modules/economy/economy_misc.dm index b296ac3e0b..0ca50b2611 100644 --- a/code/modules/economy/economy_misc.dm +++ b/code/modules/economy/economy_misc.dm @@ -50,7 +50,7 @@ /var/list/economic_species_modifier = list( /datum/species/human = 10, /datum/species/skrell = 12, - /datum/species/teshari = 9, // Skrell sponsored! + /datum/species/teshari = 9, // Skrell sponsored, /datum/species/tajaran = 7, /datum/species/unathi = 7 ) diff --git a/code/modules/maps/swapmaps.dm b/code/modules/maps/swapmaps.dm index 127af2e7a1..6c4909f229 100644 --- a/code/modules/maps/swapmaps.dm +++ b/code/modules/maps/swapmaps.dm @@ -419,8 +419,8 @@ swapmap Build procs: Take 2 turfs as corners, plus an item type. An item may be like: - /turf/wall - /obj/fence{icon_state="iron"} + turf/wall + obj/fence{icon_state="iron"} */ proc/BuildFilledRectangle(turf/T1,turf/T2,item) if(!Contains(T1) || !Contains(T2)) return diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm index 760303ac23..9c9f989f67 100644 --- a/code/modules/materials/materials.dm +++ b/code/modules/materials/materials.dm @@ -5,11 +5,11 @@ self-explanatory but the various object types may have their own documentation. ~Z PATHS THAT USE DATUMS - /turf/simulated/wall - /obj/item/weapon/material - /obj/structure/barricade - /obj/item/stack/material - /obj/structure/table + turf/simulated/wall + obj/item/weapon/material + obj/structure/barricade + obj/item/stack/material + obj/structure/table VALID ICONS WALLS diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index f22aecce45..00316afc6a 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -48,7 +48,7 @@ else if(gender == FEMALE) use_gender = "a gynoid" - msg += ", [use_gender]!" + msg += ", [use_gender]!" else if(species.name != "Human") msg += ", \a [species.name]!" diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index a8222dc280..893c502ecb 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -48,7 +48,7 @@ // Combat vars. var/total_health = 100 // Point at which the mob will enter crit. - var/list/unarmed_types = list( // Possible unarmed attacks that the mob will use in combat. + var/list/unarmed_types = list( // Possible unarmed attacks that the mob will use in combat, /datum/unarmed_attack, /datum/unarmed_attack/bite ) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index cecb005613..fca9f79e38 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -20,7 +20,7 @@ var/list/ai_verbs_default = list( /mob/living/silicon/ai/proc/toggle_hidden_verbs, ) -var/list/ai_verbs_hidden = list( // For why this exists, refer to https://xkcd.com/1172/ +var/list/ai_verbs_hidden = list( // For why this exists, refer to https://xkcd.com/1172/, /mob/living/silicon/ai/proc/ai_announcement, /mob/living/silicon/ai/proc/ai_call_shuttle, /mob/living/silicon/ai/proc/ai_camera_track, diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm index 88f989f15e..cf61a6ddd6 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm @@ -63,9 +63,9 @@ /obj/item/device/mmi, /obj/item/robot_parts, /obj/item/borg/upgrade, - /obj/item/device/flash, //to build borgs - /obj/item/organ/internal/brain, //to insert into MMIs. - /obj/item/stack/cable_coil, //again, for borg building + /obj/item/device/flash, //to build borgs, + /obj/item/organ/internal/brain, //to insert into MMIs, + /obj/item/stack/cable_coil, //again, for borg building, /obj/item/weapon/circuitboard, /obj/item/slime_extract, /obj/item/weapon/reagent_containers/glass, diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 06daf72260..2de63692a9 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -110,7 +110,7 @@ turns_since_move++ if(turns_since_move >= turns_per_move) if(!(stop_automated_movement_when_pulled && pulledby)) //Soma animals don't move when pulled - /var/moving_to = 0 // otherwise it always picks 4, fuck if I know. Did I mention fuck BYOND + var/moving_to = 0 // otherwise it always picks 4, fuck if I know. Did I mention fuck BYOND moving_to = pick(cardinal) dir = moving_to //How about we turn them the direction they are moving, yay. Move(get_step(src,moving_to)) diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 7d612158b1..7ee79cb923 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -111,8 +111,8 @@ /* * Parapens */ - /obj/item/weapon/pen/reagent/paralysis - origin_tech = "materials=2;syndicate=5" +/obj/item/weapon/pen/reagent/paralysis + origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5) /obj/item/weapon/pen/reagent/paralysis/New() ..() diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index bfcf1aefa3..f467cf4dd5 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -12,7 +12,7 @@ 9 1 5 \ | / - 8 - 0 - 4 + 8 - 0 - 4, / | \ 10 2 6 diff --git a/code/modules/reagents/Chemistry-Readme.dm b/code/modules/reagents/Chemistry-Readme.dm index 9a49d409e0..2b7e3a832a 100644 --- a/code/modules/reagents/Chemistry-Readme.dm +++ b/code/modules/reagents/Chemistry-Readme.dm @@ -127,7 +127,7 @@ About the Holder: trans_to_obj(var/turf/target, var/amount = 1, var/multiplier = 1, var/copy = 0) If target has reagents, transfers [amount] to it. Otherwise, same as trans_to_turf(). - /atom/proc/create_reagents(var/max_vol) + atom/proc/create_reagents(var/max_vol) Creates a new reagent datum. About Reagents: @@ -285,7 +285,7 @@ About the Tools: By default, all atom have a reagents var - but its empty. if you want to use an object for the chem. system you'll need to add something like this in its new proc: - /atom/proc/create_reagents(var/max_volume) + atom/proc/create_reagents(var/max_volume) Other important stuff: diff --git a/code/modules/reagents/dispenser/supply.dm b/code/modules/reagents/dispenser/supply.dm index f4a12d45d3..0487e8f401 100644 --- a/code/modules/reagents/dispenser/supply.dm +++ b/code/modules/reagents/dispenser/supply.dm @@ -145,7 +145,7 @@ group = "Reagents" #define SEC_PACK(_tname, _type, _name, _cname, _cost, _access)\ - /datum/supply_packs/dispenser_cartridges{\ + datum/supply_packs/dispenser_cartridges{\ _tname {\ name = _name ;\ containername = _cname ;\ @@ -157,7 +157,7 @@ }\ } #define PACK(_tname, _type, _name, _cname, _cost)\ - /datum/supply_packs/dispenser_cartridges{\ + datum/supply_packs/dispenser_cartridges{\ _tname {\ name = _name ;\ containername = _cname ;\ diff --git a/code/modules/research/xenoarchaeology/artifact/artifact_unknown.dm b/code/modules/research/xenoarchaeology/artifact/artifact_unknown.dm index b0a31faecc..2f6cc45e75 100644 --- a/code/modules/research/xenoarchaeology/artifact/artifact_unknown.dm +++ b/code/modules/research/xenoarchaeology/artifact/artifact_unknown.dm @@ -26,7 +26,7 @@ var/list/valid_primary_effect_types = list(\ /datum/artifact_effect/forcefield,\ /datum/artifact_effect/gasoxy,\ /datum/artifact_effect/gasplasma,\ -/* /datum/artifact_effect/gassleeping,\*/ +// /datum/artifact_effect/gassleeping,\ /datum/artifact_effect/heal,\ /datum/artifact_effect/hurt,\ /datum/artifact_effect/emp,\ @@ -45,7 +45,7 @@ var/list/valid_secondary_effect_types = list(\ /datum/artifact_effect/gasnitro,\ /datum/artifact_effect/gasoxy,\ /datum/artifact_effect/gasphoron,\ -/* /datum/artifact_effect/gassleeping,\*/ +// /datum/artifact_effect/gassleeping,\ /datum/artifact_effect/goodfeeling,\ /datum/artifact_effect/heal,\ /datum/artifact_effect/hurt,\ diff --git a/code/modules/research/xenoarchaeology/finds/finds_misc.dm b/code/modules/research/xenoarchaeology/finds/finds_misc.dm index f494505b63..90afe5a737 100644 --- a/code/modules/research/xenoarchaeology/finds/finds_misc.dm +++ b/code/modules/research/xenoarchaeology/finds/finds_misc.dm @@ -13,8 +13,8 @@ //large finds /* - /obj/machinery/syndicate_beacon - /obj/machinery/wish_granter + obj/machinery/syndicate_beacon + obj/machinery/wish_granter if(18) item_type = "jagged green crystal" additional_desc = pick("It shines faintly as it catches the light.","It appears to have a faint inner glow.","It seems to draw you inward as you look it at.","Something twinkles faintly as you look at it.","It's mesmerizing to behold.") diff --git a/maps/RandomZLevels/stationCollision.dm b/maps/RandomZLevels/stationCollision.dm index 3bc32eab3b..6d87f40186 100644 --- a/maps/RandomZLevels/stationCollision.dm +++ b/maps/RandomZLevels/stationCollision.dm @@ -17,24 +17,24 @@ /* * Areas - */ - //Gateroom gets its own APC specifically for the gate - /area/awaymission/gateroom +*/ +//Gateroom gets its own APC specifically for the gate +/area/awaymission/gateroom - //Library, medbay, storage room - /area/awaymission/southblock +//Library, medbay, storage room +/area/awaymission/southblock - //Arrivals, security, hydroponics, shuttles (since they dont move, they dont need specific areas) - /area/awaymission/arrivalblock +//Arrivals, security, hydroponics, shuttles (since they dont move, they dont need specific areas) +/area/awaymission/arrivalblock - //Crew quarters, cafeteria, chapel - /area/awaymission/midblock +//Crew quarters, cafeteria, chapel +/area/awaymission/midblock - //engineering, bridge (not really north but it doesnt really need its own APC) - /area/awaymission/northblock +//engineering, bridge (not really north but it doesnt really need its own APC) +/area/awaymission/northblock - //That massive research room - /area/awaymission/research +//That massive research room +/area/awaymission/research //Syndicate shuttle /area/awaymission/syndishuttle From 1cd71da6eda749f9202ba9faea888195ff440e10 Mon Sep 17 00:00:00 2001 From: Kelenius Date: Fri, 11 Mar 2016 12:02:01 +0300 Subject: [PATCH 08/64] Fixes one stay missed line --- code/modules/admin/admin_verbs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 0444fbf15c..b678c42e45 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -83,7 +83,7 @@ var/list/admin_verbs_admin = list( /client/proc/check_customitem_activity, /client/proc/man_up, /client/proc/global_man_up, - /client/proc/response_team, // Response Teams admin verb + /client/proc/response_team, // Response Teams admin verb, /client/proc/toggle_antagHUD_use, /client/proc/toggle_antagHUD_restrictions, /client/proc/allow_character_respawn, // Allows a ghost to respawn , From 7fb2c0d467aa3621c0ebbcd978d004ec5aa4e173 Mon Sep 17 00:00:00 2001 From: Kelenius Date: Fri, 11 Mar 2016 12:32:20 +0300 Subject: [PATCH 09/64] Ports tag matcher update https://github.com/Baystation12/Baystation12/pull/12218 --- .travis.yml | 2 +- tools/TagMatcher/tag-matcher.py | 94 ++++++++++++++++++++------------- 2 files changed, 57 insertions(+), 39 deletions(-) diff --git a/.travis.yml b/.travis.yml index 3654665f1a..da060b19fe 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,7 +30,7 @@ script: - shopt -s globstar - (! grep 'step_[xy]' maps/**/*.dmm) - (! find nano/templates/ -type f -exec md5sum {} + | sort | uniq -D -w 32 | grep nano) - - (! grep -E "<\s*span\s+class\s*=\s*('[^'>]+|[^'>]+')\s*>" **/*.dm) + - (! grep -En "<\s*span\s+class\s*=\s*('[^'>]+|[^'>]+')\s*>" **/*.dm) - awk -f tools/indentation.awk **/*.dm - md5sum -c - <<< "88490b460c26947f5ec1ab1bb9fa9f17 *html/changelogs/example.yml" - (num=`grep -E '\\\\(red|blue|green|black|b|i[^mc])' **/*.dm | wc -l`; echo "$num escapes (expecting ${MACRO_COUNT} or less)"; [ $num -le ${MACRO_COUNT} ]) diff --git a/tools/TagMatcher/tag-matcher.py b/tools/TagMatcher/tag-matcher.py index 91ad5efb04..78797a4d93 100644 --- a/tools/TagMatcher/tag-matcher.py +++ b/tools/TagMatcher/tag-matcher.py @@ -18,6 +18,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ''' import argparse, re, sys +from collections import defaultdict from os import path, walk opt = argparse.ArgumentParser() @@ -37,66 +38,83 @@ tag_tuples = [ ('', re.compile('', re.IGNORECASE), re.compile(' ('', re.compile('', re.IGNORECASE), re.compile('', re.IGNORECASE))] # The keys of this dictionary will be the file path of each parsed *.dm file -# The values of this dictionary will be in the format provided by populate_match_list(). -matches = { } +# The values of this dictionary is a another dictionary with the key/value pair: tag/list of unmatched lines +mismatches_by_file = { } -# Support def for setting up a dictionary, populating it with all defined tuple names as key with each being assigned the value 0. -# One such dictionary is created for each parsed file. -def populate_match_list(): - match_list = { } +# Loops over all defined tag tuples and returns a dictionary with the key/value pair: tag/mismatch_count (positive means excess of opening tag, negative means excess of closing tags) +def get_tag_matches(line): + mismatch_count_by_tag = { } for tag_tuple in tag_tuples: - match_list[tag_tuple[0]] = 0 - return match_list + mismatch_count = 0 + mismatch_count += len(tag_tuple[1].findall(line)) + mismatch_count -= len(tag_tuple[2].findall(line)) + if mismatch_count != 0: + mismatch_count_by_tag[tag_tuple[0]] = mismatch_count + return mismatch_count_by_tag -# This def shall be provided by a dictionary in the format given by populate_match_list() and a line of text. -# It loops over all defined tag tuples, adding the number of open tags found and subtracting the number of close tag found to the corresponding tuple name in the match list. -# This def is currently run with the same match_list for a given file and for all lines of that file. -def get_tag_matches(match_list, line): - for tag_tuple in tag_tuples: - match_list[tag_tuple[0]] += len(tag_tuple[1].findall(line)) - match_list[tag_tuple[0]] -= len(tag_tuple[2].findall(line)) - return - -# Support def that simply checks if a given dictionary in the format given by populate_match_list() contains any value that is non-zero. -# That is, a tag which had a non-equal amount of open/closing tags. +# Support def that simply checks if a given dictionary in the format tag/list of unmatched lines has mismatch entries. def has_mismatch(match_list): - for tag, match_number in match_list.iteritems(): - if(match_number != 0): + for tag, list_of_mismatched_lines in match_list.iteritems(): + if(len(list_of_mismatched_lines) > 0): return 1 return 0 + +def arrange_mismatches(mismatches_by_tag, mismatch_line, mismatch_counts): + for tag, mismatch_count in mismatch_counts.iteritems(): + stack_of_existing_mismatches = mismatches_by_tag[tag] + for i in range(0, abs(mismatch_count)): + if len(stack_of_existing_mismatches) == 0: + if(mismatch_count > 0): + stack_of_existing_mismatches.append(mismatch_line) + else: + stack_of_existing_mismatches.append(-mismatch_line) + else: + if stack_of_existing_mismatches[0] > 0: + if mismatch_count > 0: + stack_of_existing_mismatches.append(mismatch_line) + else: + stack_of_existing_mismatches.pop() + else: + if mismatch_count < 0: + stack_of_existing_mismatches.append(-mismatch_line) + else: + stack_of_existing_mismatches.pop() + # This section parses all *.dm files in the given directory, recursively. for root, subdirs, files in walk(args.dir): for filename in files: if filename.endswith('.dm'): file_path = path.join(root, filename) - with open(file_path, 'r') as f: - # For each file, generate the match dictionary. - matches[file_path] = populate_match_list() - for x in f: + with open(file_path, 'r') as file: + mismatches_by_file[file_path] = defaultdict(list) + for line_number, line in enumerate(file, 1): # Then for each line in the file, conduct the tuple open/close matching. - get_tag_matches(matches[file_path], x) + mismatches_by_tag = get_tag_matches(line) + arrange_mismatches(mismatches_by_file[file_path], line_number, mismatches_by_tag) # Pretty printing section. # Loops over all matches and checks if there is a mismatch of tags. # If so, then and only then is the corresponding file path printed along with the number of unmatched open/close tags. -total_mismatch = 0 -for file, match_list in matches.iteritems(): - if(has_mismatch(match_list)): +total_mismatches = 0 +for file, mismatches_by_tag in mismatches_by_file.iteritems(): + if has_mismatch(mismatches_by_tag): print(file) - for tag, match_number in match_list.iteritems(): + for tag, mismatch_list in mismatches_by_tag.iteritems(): # A positive number means an excess of opening tag, a negative number means an excess of closing tags. - if(match_number > 0): - total_mismatch += match_number - print('\t{0} - Excess of {1} opening tag(s)'.format(tag, match_number)) - elif (match_number < 0): - total_mismatch -= match_number - print('\t{0} - Excess of {1} closing tag(s)'.format(tag, -match_number)) + total_mismatches += len(mismatch_list) + if len(mismatch_list) > 0: + if mismatch_list[0] > 0: + print('\t{0} - Excess of {1} opening tag(s)'.format(tag, len(mismatch_list))) + elif mismatch_list[0] < 0: + print('\t{0} - Excess of {1} closing tag(s)'.format(tag, len(mismatch_list))) + for mismatch_line in sorted(set(mismatch_list)): + print('\t\tLine {0}'.format(abs(mismatch_line))) # Simply prints the total number of mismatches found and if so returns 1 to, for example, fail Travis builds. -if(total_mismatch == 0): +if(total_mismatches == 0): print('No mismatches found.') else: print('') - print('Total number of mismatches: {0}'.format(total_mismatch)) + print('Total number of mismatches: {0}'.format(total_mismatches)) sys.exit(1) From 359889a15c24c8865413f409d059647effa46813 Mon Sep 17 00:00:00 2001 From: Kelenius Date: Sat, 12 Mar 2016 11:38:52 +0300 Subject: [PATCH 10/64] Axes old wire, fixes costs in lathe --- code/defines/obj/weapon.dm | 15 --------------- code/game/objects/items/stacks/rods.dm | 2 +- .../objects/items/stacks/tiles/tile_types.dm | 10 +++++----- code/game/objects/items/weapons/wires.dm | 18 ------------------ code/modules/materials/materials.dm | 4 ++-- polaris.dme | 1 - 6 files changed, 8 insertions(+), 42 deletions(-) delete mode 100644 code/game/objects/items/weapons/wires.dm diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 83033257e3..c245e68cc6 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -269,21 +269,6 @@ throw_range = 5 w_class = 2.0 -/obj/item/weapon/wire - desc = "This is just a simple piece of regular insulated wire." - name = "wire" - icon = 'icons/obj/power.dmi' - icon_state = "item_wire" - var/amount = 1.0 - var/laying = 0.0 - var/old_lay = null - matter = list(DEFAULT_WALL_MATERIAL = 40) - attack_verb = list("whipped", "lashed", "disciplined", "tickled") - - suicide_act(mob/user) - viewers(user) << "[user] is strangling \himself with \the [src]! It looks like \he's trying to commit suicide." - return (OXYLOSS) - /obj/item/weapon/module icon = 'icons/obj/module.dmi' icon_state = "std_module" diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index 3d6a5c9626..a0496b367d 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -9,7 +9,7 @@ throwforce = 15.0 throw_speed = 5 throw_range = 20 - matter = list(DEFAULT_WALL_MATERIAL = 1875) + matter = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT / 2) max_amount = 60 attack_verb = list("hit", "bludgeoned", "whacked") diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index 96a6656795..9926a14330 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -76,7 +76,7 @@ desc = "Those could work as a pretty decent throwing weapon" //why? icon_state = "tile" force = 6.0 - matter = list(DEFAULT_WALL_MATERIAL = 937.5) + matter = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT / 4) throwforce = 15.0 throw_speed = 5 throw_range = 20 @@ -92,13 +92,13 @@ name = "steel floor tile" singular_name = "steel floor tile" icon_state = "tile_steel" - matter = list("plasteel" = 937.5) + matter = list("plasteel" = SHEET_MATERIAL_AMOUNT / 4) /obj/item/stack/tile/floor_white name = "white floor tile" singular_name = "white floor tile" icon_state = "tile_white" - matter = list("plastic" = 937.5) + matter = list("plastic" = SHEET_MATERIAL_AMOUNT / 4) /obj/item/stack/tile/floor_yellow name = "yellow floor tile" @@ -110,13 +110,13 @@ name = "dark floor tile" singular_name = "dark floor tile" icon_state = "fr_tile" - matter = list("plasteel" = 937.5) + matter = list("plasteel" = SHEET_MATERIAL_AMOUNT / 4) /obj/item/stack/tile/floor_freezer name = "freezer floor tile" singular_name = "freezer floor tile" icon_state = "tile_freezer" - matter = list("plastic" = 937.5) + matter = list("plastic" = SHEET_MATERIAL_AMOUNT / 4) /obj/item/stack/tile/floor/cyborg name = "floor tile synthesizer" diff --git a/code/game/objects/items/weapons/wires.dm b/code/game/objects/items/weapons/wires.dm deleted file mode 100644 index 0a70fdbe1c..0000000000 --- a/code/game/objects/items/weapons/wires.dm +++ /dev/null @@ -1,18 +0,0 @@ -// WIRES - -/obj/item/weapon/wire/proc/update() - if (src.amount > 1) - src.icon_state = "spool_wire" - src.desc = text("This is just spool of regular insulated wire. It consists of about [] unit\s of wire.", src.amount) - else - src.icon_state = "item_wire" - src.desc = "This is just a simple piece of regular insulated wire." - return - -/obj/item/weapon/wire/attack_self(mob/user as mob) - if (src.laying) - src.laying = 0 - user << "You're done laying wire!" - else - user << "You are not using this to lay wire..." - return diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm index 760303ac23..f15eeb29c7 100644 --- a/code/modules/materials/materials.dm +++ b/code/modules/materials/materials.dm @@ -356,7 +356,7 @@ var/list/name_to_material hardness = 80 weight = 23 stack_origin_tech = list(TECH_MATERIAL = 2) - composite_material = list(DEFAULT_WALL_MATERIAL = 3750, "platinum" = 3750) //todo + composite_material = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT, "platinum" = SHEET_MATERIAL_AMOUNT) //todo /material/plasteel/titanium name = "titanium" @@ -467,7 +467,7 @@ var/list/name_to_material hardness = 40 weight = 30 stack_origin_tech = "materials=2" - composite_material = list(DEFAULT_WALL_MATERIAL = 1875,"glass" = 3750) + composite_material = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT / 2, "glass" = SHEET_MATERIAL_AMOUNT) window_options = list("One Direction" = 1, "Full Window" = 4, "Windoor" = 5) created_window = /obj/structure/window/reinforced wire_product = null diff --git a/polaris.dme b/polaris.dme index 0f86c98851..7eb2ee9e27 100644 --- a/polaris.dme +++ b/polaris.dme @@ -674,7 +674,6 @@ #include "code\game\objects\items\weapons\trays.dm" #include "code\game\objects\items\weapons\weaponry.dm" #include "code\game\objects\items\weapons\weldbackpack.dm" -#include "code\game\objects\items\weapons\wires.dm" #include "code\game\objects\items\weapons\circuitboards\broken.dm" #include "code\game\objects\items\weapons\circuitboards\circuitboard.dm" #include "code\game\objects\items\weapons\circuitboards\mecha.dm" From afbc235b96ea63bf4d5fc85df19cbee7cd6dbe98 Mon Sep 17 00:00:00 2001 From: Kelenius Date: Tue, 15 Mar 2016 16:39:40 +0300 Subject: [PATCH 11/64] Mob inventory cleanup --- code/ZAS/Fire.dm | 2 +- code/_onclick/click.dm | 5 +- code/_onclick/hud/human.dm | 4 +- code/game/antagonist/antagonist_create.dm | 2 +- code/game/antagonist/station/renegade.dm | 3 +- .../changeling/generic_equip_procs.dm | 2 +- .../gamemodes/changeling/powers/armblade.dm | 2 +- code/game/objects/items.dm | 21 +-- .../items/devices/radio/electropack.dm | 2 +- code/game/objects/items/stacks/medical.dm | 2 +- code/game/objects/items/weapons/autopsy.dm | 15 +- .../objects/items/weapons/cigs_lighters.dm | 55 +++--- code/game/objects/items/weapons/cosmetics.dm | 6 +- .../objects/items/weapons/flamethrower.dm | 4 +- .../objects/items/weapons/gift_wrappaper.dm | 4 +- .../items/weapons/implants/implantpad.dm | 4 +- .../items/weapons/material/twohanded.dm | 2 +- .../objects/items/weapons/melee/energy.dm | 2 +- code/game/objects/items/weapons/mop_deploy.dm | 2 +- .../items/weapons/storage/laundry_basket.dm | 2 +- code/game/objects/items/weapons/tools.dm | 8 +- code/game/objects/objs.dm | 9 +- code/game/objects/structures/extinguisher.dm | 2 +- code/game/objects/structures/janicart.dm | 6 +- code/game/objects/structures/noticeboard.dm | 15 +- code/game/objects/structures/safe.dm | 2 +- code/game/objects/structures/watercloset.dm | 2 +- code/modules/assembly/mousetrap.dm | 2 +- code/modules/clothing/head/misc_special.dm | 2 +- code/modules/clothing/masks/miscellaneous.dm | 2 +- .../clothing/spacesuits/rig/rig_attackby.dm | 4 +- .../detectivework/tools/evidencebag.dm | 8 +- code/modules/games/cards.dm | 8 +- code/modules/hydroponics/grown.dm | 4 +- code/modules/hydroponics/seed.dm | 4 +- code/modules/hydroponics/trays/tray_tools.dm | 2 +- code/modules/materials/materials.dm | 5 +- code/modules/mining/mine_turfs.dm | 7 +- code/modules/mob/inventory.dm | 129 +++++-------- code/modules/mob/living/bot/floorbot.dm | 2 +- .../carbon/alien/diona/diona_attacks.dm | 2 +- code/modules/mob/living/carbon/give.dm | 30 +-- code/modules/mob/living/carbon/human/emote.dm | 4 +- .../living/carbon/human/species/species.dm | 2 +- code/modules/mob/living/inventory.dm | 172 ++++++++++++++++++ code/modules/mob/living/living.dm | 60 ++++++ code/modules/mob/mob.dm | 120 +----------- code/modules/mob/mob_defines.dm | 7 - code/modules/mob/mob_grab.dm | 6 +- code/modules/mob/mob_helpers.dm | 6 - code/modules/mob/update_icons.dm | 9 + code/modules/organs/organ_external.dm | 10 +- code/modules/paperwork/paper.dm | 5 +- code/modules/paperwork/photography.dm | 2 +- code/modules/projectiles/gun.dm | 4 +- .../projectiles/guns/projectile/pistol.dm | 8 +- .../targeting/targeting_overlay.dm | 3 +- .../xenoarchaeology/artifact/artifact.dm | 7 +- polaris.dme | 1 + 59 files changed, 432 insertions(+), 390 deletions(-) create mode 100644 code/modules/mob/living/inventory.dm diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm index 7222470f71..bb4ec95a84 100644 --- a/code/ZAS/Fire.dm +++ b/code/ZAS/Fire.dm @@ -406,7 +406,7 @@ datum/gas_mixture/proc/check_recombustability(list/fuel_objs) //Get heat transfer coefficients for clothing. for(var/obj/item/clothing/C in src) - if(l_hand == C || r_hand == C) + if(item_is_in_hands(C)) continue if( C.max_heat_protection_temperature >= last_temperature ) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 9fa5fa3654..7d7468b91a 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -94,10 +94,7 @@ if(W == A) // Handle attack_self W.attack_self(src) - if(hand) - update_inv_l_hand(0) - else - update_inv_r_hand(0) + update_inv_active_hand(0) return 1 //Atoms on your person diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 751021892c..63ef549122 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -162,7 +162,7 @@ inv_box.name = "r_hand" inv_box.icon = ui_style inv_box.icon_state = "r_hand_inactive" - if(mymob && !mymob.hand) //This being 0 or null means the right hand is in use + if(!target.hand) //This being 0 or null means the right hand is in use inv_box.icon_state = "r_hand_active" inv_box.screen_loc = ui_rhand inv_box.slot_id = slot_r_hand @@ -177,7 +177,7 @@ inv_box.name = "l_hand" inv_box.icon = ui_style inv_box.icon_state = "l_hand_inactive" - if(mymob && mymob.hand) //This being 1 means the left hand is in use + if(target.hand) //This being 1 means the left hand is in use inv_box.icon_state = "l_hand_active" inv_box.screen_loc = ui_lhand inv_box.slot_id = slot_l_hand diff --git a/code/game/antagonist/antagonist_create.dm b/code/game/antagonist/antagonist_create.dm index 072dd88bee..65c7a080cd 100644 --- a/code/game/antagonist/antagonist_create.dm +++ b/code/game/antagonist/antagonist_create.dm @@ -76,7 +76,7 @@ P.info = "The nuclear authorization code is: [code]" P.name = "nuclear bomb code" if(leader && leader.current) - if(get_turf(P) == get_turf(leader.current) && !(leader.current.l_hand && leader.current.r_hand)) + if(get_turf(P) == get_turf(leader.current)) leader.current.put_in_hands(P) if(!code_owner && leader) diff --git a/code/game/antagonist/station/renegade.dm b/code/game/antagonist/station/renegade.dm index cd9dd9b83b..b077977fd7 100644 --- a/code/game/antagonist/station/renegade.dm +++ b/code/game/antagonist/station/renegade.dm @@ -50,8 +50,7 @@ var/datum/antagonist/renegade/renegades var/gun_type = pick(spawn_guns) var/obj/item/gun = new gun_type(get_turf(player)) - if(!(player.l_hand && player.r_hand)) - player.put_in_hands(gun) + player.put_in_hands(gun) /proc/rightandwrong() diff --git a/code/game/gamemodes/changeling/generic_equip_procs.dm b/code/game/gamemodes/changeling/generic_equip_procs.dm index 5569db8512..930e50c9c8 100644 --- a/code/game/gamemodes/changeling/generic_equip_procs.dm +++ b/code/game/gamemodes/changeling/generic_equip_procs.dm @@ -244,7 +244,7 @@ var/mob/living/carbon/human/M = src - if(M.l_hand && M.r_hand) //Make sure our hands aren't full. + if(M.hands_are_full()) //Make sure our hands aren't full. src << "Our hands are full. Drop something first." return 0 diff --git a/code/game/gamemodes/changeling/powers/armblade.dm b/code/game/gamemodes/changeling/powers/armblade.dm index e1d6609851..0ce0df27ce 100644 --- a/code/game/gamemodes/changeling/powers/armblade.dm +++ b/code/game/gamemodes/changeling/powers/armblade.dm @@ -55,7 +55,7 @@ ..() /obj/item/weapon/melee/arm_blade/process() //Stolen from ninja swords. - if(!creator || loc != creator || (creator.l_hand != src && creator.r_hand != src)) + if(!creator || loc != creator || !creator.item_is_in_hands(src)) // Tidy up a bit. if(istype(loc,/mob/living)) var/mob/living/carbon/human/host = loc diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index a07b82cd17..c72c9061b5 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -73,13 +73,10 @@ /obj/item/equipped() ..() - var/mob/M = loc + var/mob/living/M = loc if(!istype(M)) return - if(M.l_hand) - M.l_hand.update_held_icon() - if(M.r_hand) - M.r_hand.update_held_icon() + M.update_held_icons() /obj/item/Destroy() if(ismob(loc)) @@ -95,8 +92,8 @@ //Checks if the item is being held by a mob, and if so, updates the held icons /obj/item/proc/update_held_icon() - if(ismob(src.loc)) - var/mob/M = src.loc + if(isliving(src.loc)) + var/mob/living/M = src.loc if(M.l_hand == src) M.update_inv_l_hand() else if(M.r_hand == src) @@ -157,7 +154,7 @@ size = "huge" return ..(user, distance, "", "It is a [size] item.") -/obj/item/attack_hand(mob/user as mob) +/obj/item/attack_hand(mob/living/user as mob) if (!user) return if (hasorgans(user)) var/mob/living/carbon/human/H = user @@ -396,17 +393,15 @@ var/list/global/slot_flags_enumeration = list( if((!istype(usr, /mob/living/carbon)) || (istype(usr, /mob/living/carbon/brain)))//Is humanoid, and is not a brain usr << "You can't pick things up!" return + var/mob/living/carbon/C = usr if( usr.stat || usr.restrained() )//Is not asleep/dead and is not restrained usr << "You can't pick things up!" return if(src.anchored) //Object isn't anchored usr << "You can't pick that up!" return - if(!usr.hand && usr.r_hand) //Right hand is not full - usr << "Your right hand is full." - return - if(usr.hand && usr.l_hand) //Left hand is not full - usr << "Your left hand is full." + if(C.get_active_hand()) //Hand is not full + usr << "Your hand is full." return if(!istype(src.loc, /turf)) //Object is on a turf usr << "You can't pick that up!" diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index e5e94fc93d..5b769ed803 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -12,7 +12,7 @@ var/code = 2 -/obj/item/device/radio/electropack/attack_hand(mob/user as mob) +/obj/item/device/radio/electropack/attack_hand(mob/living/user as mob) if(src == user.back) user << "You need help taking this off!" return diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index b8b79a5ca1..451b2c41af 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -209,7 +209,7 @@ amount = 5 max_amount = 5 -/obj/item/stack/medical/splint/attack(mob/living/carbon/M as mob, mob/user as mob) +/obj/item/stack/medical/splint/attack(mob/living/carbon/M as mob, mob/living/user as mob) if(..()) return 1 diff --git a/code/game/objects/items/weapons/autopsy.dm b/code/game/objects/items/weapons/autopsy.dm index c17d8ba650..d196bc4ea7 100644 --- a/code/game/objects/items/weapons/autopsy.dm +++ b/code/game/objects/items/weapons/autopsy.dm @@ -160,20 +160,7 @@ P.icon_state = "paper_words" if(istype(usr,/mob/living/carbon)) - // place the item in the usr's hand if possible - if(!usr.r_hand) - P.loc = usr - usr.r_hand = P - P.layer = 20 - else if(!usr.l_hand) - P.loc = usr - usr.l_hand = P - P.layer = 20 - - if (ismob(src.loc)) - var/mob/M = src.loc - M.update_inv_l_hand() - M.update_inv_r_hand() + usr.put_in_hands(src) /obj/item/weapon/autopsy_scanner/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob) if(!istype(M)) diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index b156d569ad..4772063b4c 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -445,39 +445,36 @@ CIGARETTE PACKETS ARE IN FANCY.DM /obj/item/weapon/flame/lighter/attack_self(mob/living/user) if(!base_state) base_state = icon_state - if(user.r_hand == src || user.l_hand == src) - if(!lit) - lit = 1 - icon_state = "[base_state]on" - item_state = "[base_state]on" - if(istype(src, /obj/item/weapon/flame/lighter/zippo) ) - user.visible_message("Without even breaking stride, [user] flips open and lights [src] in one smooth movement.") - else - if(prob(95)) - user.visible_message("After a few attempts, [user] manages to light the [src].") - else - user << "You burn yourself while lighting the lighter." - if (user.l_hand == src) - user.apply_damage(2,BURN,"l_hand") - else - user.apply_damage(2,BURN,"r_hand") - user.visible_message("After a few attempts, [user] manages to light the [src], they however burn their finger in the process.") - - set_light(2) - processing_objects.Add(src) + if(!lit) + lit = 1 + icon_state = "[base_state]on" + item_state = "[base_state]on" + if(istype(src, /obj/item/weapon/flame/lighter/zippo) ) + user.visible_message("Without even breaking stride, [user] flips open and lights [src] in one smooth movement.") else - lit = 0 - icon_state = "[base_state]" - item_state = "[base_state]" - if(istype(src, /obj/item/weapon/flame/lighter/zippo) ) - user.visible_message("You hear a quiet click, as [user] shuts off [src] without even looking at what they're doing.") + if(prob(95)) + user.visible_message("After a few attempts, [user] manages to light the [src].") else - user.visible_message("[user] quietly shuts off the [src].") + user << "You burn yourself while lighting the lighter." + if (user.get_left_hand() == src) + user.apply_damage(2,BURN,"l_hand") + else + user.apply_damage(2,BURN,"r_hand") + user.visible_message("After a few attempts, [user] manages to light the [src], they however burn their finger in the process.") - set_light(0) - processing_objects.Remove(src) + set_light(2) + processing_objects.Add(src) else - return ..() + lit = 0 + icon_state = "[base_state]" + item_state = "[base_state]" + if(istype(src, /obj/item/weapon/flame/lighter/zippo) ) + user.visible_message("You hear a quiet click, as [user] shuts off [src] without even looking at what they're doing.") + else + user.visible_message("[user] quietly shuts off the [src].") + + set_light(0) + processing_objects.Remove(src) return diff --git a/code/game/objects/items/weapons/cosmetics.dm b/code/game/objects/items/weapons/cosmetics.dm index 218d2fb21c..d92ad00bab 100644 --- a/code/game/objects/items/weapons/cosmetics.dm +++ b/code/game/objects/items/weapons/cosmetics.dm @@ -77,7 +77,5 @@ icon_state = "purplecomb" item_state = "purplecomb" -/obj/item/weapon/haircomb/attack_self(mob/user) - if(user.r_hand == src || user.l_hand == src) - user.visible_message(text("[] uses [] to comb their hair with incredible style and sophistication. What a [].", user, src, user.gender == FEMALE ? "lady" : "guy")) - return +/obj/item/weapon/haircomb/attack_self(mob/living/user) + user.visible_message(text("[] uses [] to comb their hair with incredible style and sophistication. What a [].", user, src, user.gender == FEMALE ? "lady" : "guy")) diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index bbdd46cdb3..8cd4c373e9 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -39,8 +39,8 @@ return null var/turf/location = loc if(istype(location, /mob/)) - var/mob/M = location - if(M.l_hand == src || M.r_hand == src) + var/mob/living/M = location + if(M.item_is_in_hands(src)) location = M.loc if(isturf(location)) //start a fire if possible location.hotspot_expose(700, 2) diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm index 43b58a1726..73c198c8ab 100644 --- a/code/game/objects/items/weapons/gift_wrappaper.dm +++ b/code/game/objects/items/weapons/gift_wrappaper.dm @@ -125,12 +125,12 @@ icon_state = "wrap_paper" var/amount = 20.0 -/obj/item/weapon/wrapping_paper/attackby(obj/item/weapon/W as obj, mob/user as mob) +/obj/item/weapon/wrapping_paper/attackby(obj/item/weapon/W as obj, mob/living/user as mob) ..() if (!( locate(/obj/structure/table, src.loc) )) user << "You MUST put the paper on a table!" if (W.w_class < 4) - if ((istype(user.l_hand, /obj/item/weapon/wirecutters) || istype(user.r_hand, /obj/item/weapon/wirecutters))) + if (user.get_type_in_hands(/obj/item/weapon/wirecutters)) var/a_used = 2 ** (src.w_class - 1) if (src.amount < a_used) user << "You need more paper!" diff --git a/code/game/objects/items/weapons/implants/implantpad.dm b/code/game/objects/items/weapons/implants/implantpad.dm index 476ed726cd..a6feac2998 100644 --- a/code/game/objects/items/weapons/implants/implantpad.dm +++ b/code/game/objects/items/weapons/implants/implantpad.dm @@ -24,8 +24,8 @@ return - attack_hand(mob/user as mob) - if ((src.case && (user.l_hand == src || user.r_hand == src))) + attack_hand(mob/living/user as mob) + if ((src.case && user.item_is_in_hands(src))) user.put_in_active_hand(case) src.case.add_fingerprint(user) diff --git a/code/game/objects/items/weapons/material/twohanded.dm b/code/game/objects/items/weapons/material/twohanded.dm index 2c11456b70..b404b69f0b 100644 --- a/code/game/objects/items/weapons/material/twohanded.dm +++ b/code/game/objects/items/weapons/material/twohanded.dm @@ -29,7 +29,7 @@ /obj/item/weapon/material/twohanded/update_held_icon() var/mob/living/M = loc - if(istype(M) && !issmall(M) && ((M.r_hand == src && !M.l_hand) || (M.l_hand == src && !M.r_hand))) + if(istype(M) && !issmall(M) && M.item_is_in_hands(src) && !M.hands_are_full()) wielded = 1 force = force_wielded name = "[base_name] (wielded)" diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index 6a236e1b8f..ac8da3d835 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -214,7 +214,7 @@ spawn(1) if(src) qdel(src) /obj/item/weapon/melee/energy/blade/process() - if(!creator || loc != creator || (creator.l_hand != src && creator.r_hand != src)) + if(!creator || loc != creator || !creator.item_is_in_hands(src)) // Tidy up a bit. if(istype(loc,/mob/living)) var/mob/living/carbon/human/host = loc diff --git a/code/game/objects/items/weapons/mop_deploy.dm b/code/game/objects/items/weapons/mop_deploy.dm index 66ae01797e..e50f82966b 100644 --- a/code/game/objects/items/weapons/mop_deploy.dm +++ b/code/game/objects/items/weapons/mop_deploy.dm @@ -59,7 +59,7 @@ spawn(1) if(src) del(src) /obj/item/weapon/mop_deploy/process() - if(!creator || loc != creator || (creator.l_hand != src && creator.r_hand != src)) + if(!creator || loc != creator || !creator.item_is_in_hands(src)) // Tidy up a bit. if(istype(loc,/mob/living)) var/mob/living/carbon/human/host = loc diff --git a/code/game/objects/items/weapons/storage/laundry_basket.dm b/code/game/objects/items/weapons/storage/laundry_basket.dm index 92dd28c61a..ffb4867ca6 100644 --- a/code/game/objects/items/weapons/storage/laundry_basket.dm +++ b/code/game/objects/items/weapons/storage/laundry_basket.dm @@ -21,7 +21,7 @@ var/linked -/obj/item/weapon/storage/laundry_basket/attack_hand(mob/user as mob) +/obj/item/weapon/storage/laundry_basket/attack_hand(mob/living/user as mob) if(ishuman(user)) var/mob/living/carbon/human/H = user var/obj/item/organ/external/temp = H.get_organ("r_hand") diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 0a5b1ec686..a79d6575e5 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -173,7 +173,7 @@ user << text("\icon[] [] contains []/[] units of fuel!", src, src.name, get_fuel(),src.max_fuel ) -/obj/item/weapon/weldingtool/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/weapon/weldingtool/attackby(obj/item/W as obj, mob/living/user as mob) if(istype(W,/obj/item/weapon/screwdriver)) if(welding) user << "Stop welding first!" @@ -222,9 +222,9 @@ //I'm not sure what this does. I assume it has to do with starting fires... //...but it doesnt check to see if the welder is on or not. var/turf/location = src.loc - if(istype(location, /mob/)) - var/mob/M = location - if(M.l_hand == src || M.r_hand == src) + if(istype(location, /mob/living)) + var/mob/living/M = location + if(M.item_is_in_hands(src)) location = get_turf(M) if (istype(location, /turf)) location.hotspot_expose(700, 5) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index b8bd8d95e1..151320f96f 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -93,11 +93,12 @@ // check for TK users if (istype(usr, /mob/living/carbon/human)) - if(istype(usr.l_hand, /obj/item/tk_grab) || istype(usr.r_hand, /obj/item/tk_grab/)) - if(!(usr in nearby)) - if(usr.client && usr.machine==src) + var/mob/living/carbon/human/H = usr + if(H.get_type_in_hands(/obj/item/tk_grab)) + if(!(H in nearby)) + if(H.client && H.machine==src) is_in_use = 1 - src.attack_hand(usr) + src.attack_hand(H) in_use = is_in_use /obj/proc/updateDialog() diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index c8ccd4b32b..961a28fe12 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -28,7 +28,7 @@ update_icon() -/obj/structure/extinguisher_cabinet/attack_hand(mob/user) +/obj/structure/extinguisher_cabinet/attack_hand(mob/living/user) if(isrobot(user)) return if (ishuman(user)) diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 17957cc589..b3ad998895 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -107,7 +107,7 @@ if(!isliving(usr)) return var/mob/living/user = usr - + if(href_list["take"]) switch(href_list["take"]) if("garbage") @@ -213,10 +213,10 @@ ..() -/obj/structure/bed/chair/janicart/relaymove(mob/user, direction) +/obj/structure/bed/chair/janicart/relaymove(mob/living/user, direction) if(user.stat || user.stunned || user.weakened || user.paralysis) unbuckle_mob() - if(istype(user.l_hand, /obj/item/key) || istype(user.r_hand, /obj/item/key)) + if(user.get_type_in_hands(/obj/item/key)) step(src, direction) update_mob() else diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm index 3647d565f7..f46bc2dbf3 100644 --- a/code/game/objects/structures/noticeboard.dm +++ b/code/game/objects/structures/noticeboard.dm @@ -64,15 +64,14 @@ return var/obj/item/P = locate(href_list["write"]) if((P && P.loc == src)) //ifthe paper's on the board - if(istype(usr.r_hand, /obj/item/weapon/pen)) //and you're holding a pen - add_fingerprint(usr) - P.attackby(usr.r_hand, usr) //then do ittttt - else - if(istype(usr.l_hand, /obj/item/weapon/pen)) //check other hand for pen - add_fingerprint(usr) - P.attackby(usr.l_hand, usr) + var/mob/living/M = usr + if(istype(M)) + var/obj/item/weapon/pen/E = M.get_type_in_hands(/obj/item/weapon/pen) + if(E) + add_fingerprint(M) + P.attackby(E, usr) else - usr << "You'll need something to write with!" + M << "You'll need something to write with!" if(href_list["read"]) var/obj/item/weapon/paper/P = locate(href_list["read"]) if((P && P.loc == src)) diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index a3904f65a1..7003f4d3a2 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -90,7 +90,7 @@ FLOOR SAFES var/mob/living/carbon/human/user = usr var/canhear = 0 - if(istype(user.l_hand, /obj/item/clothing/accessory/stethoscope) || istype(user.r_hand, /obj/item/clothing/accessory/stethoscope)) + if(user.get_type_in_hands(/obj/item/clothing/accessory/stethoscope)) canhear = 1 if(href_list["open"]) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 8df5be2629..4ac596267d 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -358,7 +358,7 @@ if (ishuman(user)) var/mob/living/carbon/human/H = user var/obj/item/organ/external/temp = H.organs_by_name["r_hand"] - if (user.hand) + if (H.hand) temp = H.organs_by_name["l_hand"] if(temp && !temp.is_usable()) user << "You try to move your [temp.name], but cannot!" diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index c3c395f15a..b731905e5f 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -94,7 +94,7 @@ ..() - on_found(mob/finder as mob) + on_found(mob/living/finder as mob) if(armed) finder.visible_message("[finder] accidentally sets off [src], breaking their fingers.", \ "You accidentally trigger [src]!") diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index a8887c17f5..a15a6aeb55 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -76,7 +76,7 @@ var/turf/location = src.loc if(istype(location, /mob/)) var/mob/living/carbon/human/M = location - if(M.l_hand == src || M.r_hand == src || M.head == src) + if(M.item_is_in_hands(src) || M.head == src) location = M.loc if (istype(location, /turf)) diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index f4cd0dbbc8..c2feb949a2 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -22,7 +22,7 @@ say_verbs = list("mumbles", "says") // Clumsy folks can't take the mask off themselves. -/obj/item/clothing/mask/muzzle/attack_hand(mob/user as mob) +/obj/item/clothing/mask/muzzle/attack_hand(mob/living/user as mob) if(user.wear_mask == src && !user.IsAdvancedToolUser()) return 0 ..() diff --git a/code/modules/clothing/spacesuits/rig/rig_attackby.dm b/code/modules/clothing/spacesuits/rig/rig_attackby.dm index c9526f1626..cda9d51796 100644 --- a/code/modules/clothing/spacesuits/rig/rig_attackby.dm +++ b/code/modules/clothing/spacesuits/rig/rig_attackby.dm @@ -1,6 +1,6 @@ -/obj/item/weapon/rig/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/weapon/rig/attackby(obj/item/W as obj, mob/living/user as mob) - if(!istype(user,/mob/living)) return 0 + if(!istype(user)) return 0 if(electrified != 0) if(shock(user)) //Handles removing charge from the cell, as well. No need to do that here. diff --git a/code/modules/detectivework/tools/evidencebag.dm b/code/modules/detectivework/tools/evidencebag.dm index 31c5b6a358..6aa4bdf99f 100644 --- a/code/modules/detectivework/tools/evidencebag.dm +++ b/code/modules/detectivework/tools/evidencebag.dm @@ -15,7 +15,7 @@ var/mob/living/carbon/human/user = usr - if (!(user.l_hand == src || user.r_hand == src)) + if(!user.item_is_in_hands(src)) return //bag must be in your hands to use if (isturf(I.loc)) @@ -31,10 +31,8 @@ var/obj/item/weapon/storage/U = I.loc user.client.screen -= I U.contents.Remove(I) - else if(user.l_hand == I) //in a hand - user.drop_l_hand() - else if(user.r_hand == I) //in a hand - user.drop_r_hand() + else if(user.item_is_in_hands(I)) + user.drop_from_inventory(I) else return diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index 1ea1a9a356..1b353e3407 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -77,12 +77,8 @@ usr << "There are no cards in the deck." return - var/obj/item/weapon/hand/H - if(user.l_hand && istype(user.l_hand,/obj/item/weapon/hand)) - H = user.l_hand - else if(user.r_hand && istype(user.r_hand,/obj/item/weapon/hand)) - H = user.r_hand - else + var/obj/item/weapon/hand/H = user.get_type_in_hands(/obj/item/weapon/hand) + if(!H) H = new(get_turf(src)) user.put_in_hands(H) diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 160dec82f4..608398a039 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -172,7 +172,7 @@ if(seed) seed.thrown_at(src,hit_atom) ..() -/obj/item/weapon/reagent_containers/food/snacks/grown/attackby(var/obj/item/weapon/W, var/mob/user) +/obj/item/weapon/reagent_containers/food/snacks/grown/attackby(var/obj/item/weapon/W, var/mob/living/user) if(seed) if(seed.get_trait(TRAIT_PRODUCES_POWER) && istype(W, /obj/item/stack/cable_coil)) @@ -181,7 +181,7 @@ //TODO: generalize this. user << "You add some cable to the [src.name] and slide it inside the battery casing." var/obj/item/weapon/cell/potato/pocell = new /obj/item/weapon/cell/potato(get_turf(user)) - if(src.loc == user && !(user.l_hand && user.r_hand) && istype(user,/mob/living/carbon/human)) + if(src.loc == user && istype(user,/mob/living/carbon/human)) user.put_in_hands(pocell) pocell.maxcharge = src.potency * 10 pocell.charge = pocell.maxcharge diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm index 0dc46f9e35..0974a705ce 100644 --- a/code/modules/hydroponics/seed.dm +++ b/code/modules/hydroponics/seed.dm @@ -150,7 +150,7 @@ var/body_coverage = HEAD|FACE|EYES|UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS for(var/obj/item/clothing/clothes in target) - if(target.l_hand == clothes|| target.r_hand == clothes) + if(target.item_is_in_hands(clothes)) continue body_coverage &= ~(clothes.body_parts_covered) @@ -182,7 +182,7 @@ continue var/body_coverage = HEAD|FACE|EYES|UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS for(var/obj/item/clothing/clothes in M) - if(M.l_hand == clothes || M.r_hand == clothes) + if(M.item_is_in_hands(clothes)) continue body_coverage &= ~(clothes.body_parts_covered) if(!body_coverage) diff --git a/code/modules/hydroponics/trays/tray_tools.dm b/code/modules/hydroponics/trays/tray_tools.dm index 1a76ad22fd..856af9b3e8 100644 --- a/code/modules/hydroponics/trays/tray_tools.dm +++ b/code/modules/hydroponics/trays/tray_tools.dm @@ -34,7 +34,7 @@ var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(get_turf(src)) P.name = "paper - [form_title]" P.info = "[last_data]" - if(istype(user,/mob/living/carbon/human) && !(user.l_hand && user.r_hand)) + if(istype(user,/mob/living/carbon/human)) user.put_in_hands(P) user.visible_message("\The [src] spits out a piece of paper.") return diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm index 760303ac23..25edc57728 100644 --- a/code/modules/materials/materials.dm +++ b/code/modules/materials/materials.dm @@ -128,7 +128,7 @@ var/list/name_to_material S.add_fingerprint(user) S.add_to_stacks(user) -/material/proc/build_wired_product(var/mob/user, var/obj/item/stack/used_stack, var/obj/item/stack/target_stack) +/material/proc/build_wired_product(var/mob/living/user, var/obj/item/stack/used_stack, var/obj/item/stack/target_stack) if(!wire_product) user << "You cannot make anything out of \the [target_stack]" return @@ -140,8 +140,7 @@ var/list/name_to_material target_stack.use(1) user << "You attach wire to the [name]." var/obj/item/product = new wire_product(get_turf(user)) - if(!(user.l_hand && user.r_hand)) - user.put_in_hands(product) + user.put_in_hands(product) // Make sure we have a display name and shard icon even if they aren't explicitly set. /material/New() diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 7a2783767b..8e9155d044 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -172,10 +172,9 @@ var/list/mining_overlay_cache = list() if(istype(AM,/mob/living/carbon/human)) var/mob/living/carbon/human/H = AM - if((istype(H.l_hand,/obj/item/weapon/pickaxe)) && (!H.hand)) - attackby(H.l_hand,H) - else if((istype(H.r_hand,/obj/item/weapon/pickaxe)) && H.hand) - attackby(H.r_hand,H) + var/obj/item/weapon/pickaxe/P = H.get_inactive_hand() + if(istype(P)) + src.attackby(P, H) else if(istype(AM,/mob/living/silicon/robot)) var/mob/living/silicon/robot/R = AM diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 77eedec900..d5fde7978d 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -1,43 +1,3 @@ -//This proc is called whenever someone clicks an inventory ui slot. -/mob/proc/attack_ui(slot) - var/obj/item/W = get_active_hand() - if(istype(W)) - equip_to_slot_if_possible(W, slot) - -/mob/proc/put_in_any_hand_if_possible(obj/item/W as obj, del_on_fail = 0, disable_warning = 1, redraw_mob = 1) - if(equip_to_slot_if_possible(W, slot_l_hand, del_on_fail, disable_warning, redraw_mob)) - return 1 - else if(equip_to_slot_if_possible(W, slot_r_hand, del_on_fail, disable_warning, redraw_mob)) - return 1 - return 0 - -//This is a SAFE proc. Use this instead of equip_to_slot()! -//set del_on_fail to have it delete W if it fails to equip -//set disable_warning to disable the 'you are unable to equip that' warning. -//unset redraw_mob to prevent the mob from being redrawn at the end. -/mob/proc/equip_to_slot_if_possible(obj/item/W as obj, slot, del_on_fail = 0, disable_warning = 0, redraw_mob = 1) - if(!istype(W)) return 0 - - if(!W.mob_can_equip(src, slot)) - if(del_on_fail) - qdel(W) - else - if(!disable_warning) - src << "\red You are unable to equip that." //Only print if del_on_fail is false - return 0 - - equip_to_slot(W, slot, redraw_mob) //This proc should not ever fail. - return 1 - -//This is an UNSAFE proc. It merely handles the actual job of equipping. All the checks on whether you can or can't eqip need to be done before! Use mob_can_equip() for that task. -//In most cases you will want to use equip_to_slot_if_possible() -/mob/proc/equip_to_slot(obj/item/W as obj, slot) - return - -//This is just a commonly used configuration for the equip_to_slot_if_possible() proc, used to equip people when the rounds tarts and when events happen and such. -/mob/proc/equip_to_slot_or_del(obj/item/W as obj, slot) - return equip_to_slot_if_possible(W, slot, 1, 1, 0) - //The list of slots by priority. equip_to_appropriate_slot() uses this list. Doesn't matter if a mob type doesn't have a slot. var/list/slot_equipment_priority = list( \ slot_back,\ @@ -58,6 +18,49 @@ var/list/slot_equipment_priority = list( \ slot_r_store\ ) +/mob + var/obj/item/weapon/storage/s_active = null // Even ghosts can/should be able to peek into boxes on the ground + +//This proc is called whenever someone clicks an inventory ui slot. +/mob/proc/attack_ui(var/slot) + var/obj/item/W = get_active_hand() + if(istype(W)) + equip_to_slot_if_possible(W, slot) + +/* Inventory manipulation */ + +/mob/proc/put_in_any_hand_if_possible(obj/item/W as obj, del_on_fail = 0, disable_warning = 1, redraw_mob = 1) + if(equip_to_slot_if_possible(W, slot_l_hand, del_on_fail, disable_warning, redraw_mob)) + return 1 + else if(equip_to_slot_if_possible(W, slot_r_hand, del_on_fail, disable_warning, redraw_mob)) + return 1 + return 0 + +//This is a SAFE proc. Use this instead of equip_to_slot()! +//set del_on_fail to have it delete W if it fails to equip +//set disable_warning to disable the 'you are unable to equip that' warning. +//unset redraw_mob to prevent the mob from being redrawn at the end. +/mob/proc/equip_to_slot_if_possible(obj/item/W as obj, slot, del_on_fail = 0, disable_warning = 0, redraw_mob = 1) + if(!W.mob_can_equip(src, slot)) + if(del_on_fail) + qdel(W) + else + if(!disable_warning) + src << "\red You are unable to equip that." //Only print if del_on_fail is false + return 0 + + equip_to_slot(W, slot, redraw_mob) //This proc should not ever fail. + return 1 + +//This is an UNSAFE proc. It merely handles the actual job of equipping. All the checks on whether you can or can't eqip need to be done before! Use mob_can_equip() for that task. +//In most cases you will want to use equip_to_slot_if_possible() +/mob/proc/equip_to_slot(obj/item/W as obj, slot) + return + +//This is just a commonly used configuration for the equip_to_slot_if_possible() proc, used to equip people when the rounds tarts and when events happen and such. +/mob/proc/equip_to_slot_or_del(obj/item/W as obj, slot) + return equip_to_slot_if_possible(W, slot, 1, 1, 0) + //Checks if a given slot can be accessed at this time, either to equip or unequip I /mob/proc/slot_is_accessible(var/slot, var/obj/item/I, mob/user=null) return 1 @@ -65,8 +68,6 @@ var/list/slot_equipment_priority = list( \ //puts the item "W" into an appropriate slot in a human's inventory //returns 0 if it cannot, 1 if successful /mob/proc/equip_to_appropriate_slot(obj/item/W) - if(!istype(W)) return 0 - for(var/slot in slot_equipment_priority) if(equip_to_slot_if_possible(W, slot, del_on_fail=0, disable_warning=1, redraw_mob=1)) return 1 @@ -74,32 +75,15 @@ var/list/slot_equipment_priority = list( \ return 0 /mob/proc/equip_to_storage(obj/item/newitem) - // Try put it in their backpack - if(istype(src.back,/obj/item/weapon/storage)) - var/obj/item/weapon/storage/backpack = src.back - if(backpack.contents.len < backpack.storage_slots) - newitem.forceMove(src.back) - return 1 - - // Try to place it in any item that can store stuff, on the mob. - for(var/obj/item/weapon/storage/S in src.contents) - if (S.contents.len < S.storage_slots) - newitem.forceMove(S) - return 1 return 0 -//These procs handle putting s tuff in your hand. It's probably best to use these rather than setting l_hand = ...etc -//as they handle all relevant stuff like adding it to the player's screen and updating their overlays. +/* Hands */ //Returns the thing in our active hand /mob/proc/get_active_hand() - if(hand) return l_hand - else return r_hand //Returns the thing in our inactive hand /mob/proc/get_inactive_hand() - if(hand) return r_hand - else return l_hand //Puts the item into your l_hand if possible and calls all necessary triggers/updates. returns 1 on success. /mob/proc/put_in_l_hand(var/obj/item/W) @@ -150,16 +134,15 @@ var/list/slot_equipment_priority = list( \ //Drops the item in our left hand /mob/proc/drop_l_hand(var/atom/Target) - return drop_from_inventory(l_hand, Target) + return 0 //Drops the item in our right hand /mob/proc/drop_r_hand(var/atom/Target) - return drop_from_inventory(r_hand, Target) + return 0 //Drops the item in our active hand. TODO: rename this to drop_active_hand or something /mob/proc/drop_item(var/atom/Target) - if(hand) return drop_l_hand(Target) - else return drop_r_hand(Target) + return /* Removes the object from any slots the mob might have, calling the appropriate icon update proc. @@ -173,19 +156,6 @@ var/list/slot_equipment_priority = list( \ the search through all the slots, without having to duplicate the rest of the item dropping. */ /mob/proc/u_equip(obj/W as obj) - if (W == r_hand) - r_hand = null - update_inv_r_hand(0) - else if (W == l_hand) - l_hand = null - update_inv_l_hand(0) - else if (W == back) - back = null - update_inv_back(0) - else if (W == wear_mask) - wear_mask = null - update_inv_wear_mask(0) - return /mob/proc/isEquipped(obj/item/I) if(!I) @@ -229,11 +199,6 @@ var/list/slot_equipment_priority = list( \ //Returns the item equipped to the specified slot, if any. /mob/proc/get_equipped_item(var/slot) - switch(slot) - if(slot_l_hand) return l_hand - if(slot_r_hand) return r_hand - if(slot_back) return back - if(slot_wear_mask) return wear_mask return null //Outdated but still in use apparently. This should at least be a human proc. diff --git a/code/modules/mob/living/bot/floorbot.dm b/code/modules/mob/living/bot/floorbot.dm index 30e137c21a..783af91c65 100644 --- a/code/modules/mob/living/bot/floorbot.dm +++ b/code/modules/mob/living/bot/floorbot.dm @@ -288,7 +288,7 @@ /* Assembly */ -/obj/item/weapon/storage/toolbox/mechanical/attackby(var/obj/item/stack/tile/floor/T, mob/user as mob) +/obj/item/weapon/storage/toolbox/mechanical/attackby(var/obj/item/stack/tile/floor/T, mob/living/user as mob) if(!istype(T, /obj/item/stack/tile/floor)) ..() return diff --git a/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm b/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm index b9338f361f..9bf9e62dfb 100644 --- a/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm +++ b/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm @@ -2,7 +2,7 @@ var/mob/living/carbon/human/H = over_object if(!istype(H) || !Adjacent(H)) return ..() - if(H.a_intent == "grab" && hat && !(H.l_hand && H.r_hand)) + if(H.a_intent == "grab" && hat && !H.hands_are_full()) hat.loc = get_turf(src) H.put_in_hands(hat) H.visible_message("\The [H] removes \the [src]'s [hat].") diff --git a/code/modules/mob/living/carbon/give.dm b/code/modules/mob/living/carbon/give.dm index 5c4be494ee..14c8efbbad 100644 --- a/code/modules/mob/living/carbon/give.dm +++ b/code/modules/mob/living/carbon/give.dm @@ -3,40 +3,40 @@ set name = "Give" // TODO : Change to incapacitated() on merge. - if(usr.stat || usr.lying || usr.resting || usr.buckled) + if(src.stat || src.lying || src.resting || src.buckled) return if(!istype(target) || target.stat || target.lying || target.resting || target.buckled || target.client == null) return - var/obj/item/I = usr.get_active_hand() + var/obj/item/I = src.get_active_hand() if(!I) - I = usr.get_inactive_hand() + I = src.get_inactive_hand() if(!I) - usr << "You don't have anything in your hands to give to \the [target]." + src << "You don't have anything in your hands to give to \the [target]." return - if(alert(target,"[usr] wants to give you \a [I]. Will you accept it?",,"No","Yes") == "No") - target.visible_message("\The [usr] tried to hand \the [I] to \the [target], \ + if(alert(target,"[src] wants to give you \a [I]. Will you accept it?",,"No","Yes") == "No") + target.visible_message("\The [src] tried to hand \the [I] to \the [target], \ but \the [target] didn't want it.") return if(!I) return if(!Adjacent(target)) - usr << "You need to stay in reaching distance while giving an object." - target << "\The [usr] moved too far away." + src << "You need to stay in reaching distance while giving an object." + target << "\The [src] moved too far away." return - if(I.loc != usr || (usr.l_hand != I && usr.r_hand != I)) - usr << "You need to keep the item in your hands." - target << "\The [usr] seems to have given up on passing \the [I] to you." + if(I.loc != src || !src.item_is_in_hands(I)) + src << "You need to keep the item in your hands." + target << "\The [src] seems to have given up on passing \the [I] to you." return - if(target.r_hand != null && target.l_hand != null) + if(target.hands_are_full()) target << "Your hands are full." - usr << "Their hands are full." + src << "Their hands are full." return - if(usr.unEquip(I)) + if(src.unEquip(I)) target.put_in_hands(I) // If this fails it will just end up on the floor, but that's fitting for things like dionaea. - target.visible_message("\The [usr] handed \the [I] to \the [target].") + target.visible_message("\The [src] handed \the [I] to \the [target].") diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 885d3e0866..87c0524571 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -538,9 +538,9 @@ if ("handshake") m_type = 1 if (!src.restrained() && !src.r_hand) - var/mob/M = null + var/mob/living/M = null if (param) - for (var/mob/A in view(1, null)) + for (var/mob/living/A in view(1, null)) if (param == A.name) M = A break diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index a8222dc280..797b9b1fe6 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -207,7 +207,7 @@ var/covered = 0 // Basic coverage can help. for(var/obj/item/clothing/clothes in H) - if(H.l_hand == clothes|| H.r_hand == clothes) + if(H.item_is_in_hands(clothes)) continue if((clothes.body_parts_covered & UPPER_TORSO) && (clothes.body_parts_covered & LOWER_TORSO)) covered = 1 diff --git a/code/modules/mob/living/inventory.dm b/code/modules/mob/living/inventory.dm new file mode 100644 index 0000000000..1cd446eaec --- /dev/null +++ b/code/modules/mob/living/inventory.dm @@ -0,0 +1,172 @@ +/mob/living + var/hand = null + var/obj/item/l_hand = null + var/obj/item/r_hand = null + var/obj/item/weapon/back = null//Human/Monkey + var/obj/item/weapon/tank/internal = null//Human/Monkey + var/obj/item/clothing/mask/wear_mask = null//Carbon + +/mob/living/equip_to_storage(obj/item/newitem) + // Try put it in their backpack + if(istype(src.back,/obj/item/weapon/storage)) + var/obj/item/weapon/storage/backpack = src.back + if(backpack.contents.len < backpack.storage_slots) + newitem.forceMove(src.back) + return 1 + + // Try to place it in any item that can store stuff, on the mob. + for(var/obj/item/weapon/storage/S in src.contents) + if (S.contents.len < S.storage_slots) + newitem.forceMove(S) + return 1 + return 0 + +//Returns the thing in our active hand +/mob/living/get_active_hand() + if(hand) return l_hand + else return r_hand + +//Returns the thing in our inactive hand +/mob/living/get_inactive_hand() + if(hand) return r_hand + else return l_hand + +//Drops the item in our active hand. TODO: rename this to drop_active_hand or something +/mob/living/drop_item(var/atom/Target) + if(hand) return drop_l_hand(Target) + else return drop_r_hand(Target) + +//Drops the item in our left hand +/mob/living/drop_l_hand(var/atom/Target) + return drop_from_inventory(l_hand, Target) + +//Drops the item in our right hand +/mob/living/drop_r_hand(var/atom/Target) + return drop_from_inventory(r_hand, Target) + +/mob/living/proc/hands_are_full() + return (r_hand && l_hand) + +/mob/living/proc/item_is_in_hands(var/obj/item/I) + return (I == r_hand || I == l_hand) + +/mob/living/proc/update_held_icons() + if(l_hand) + l_hand.update_held_icon() + if(r_hand) + r_hand.update_held_icon() + +/mob/living/proc/get_type_in_hands(var/T) + if(istype(l_hand, T)) + return l_hand + if(istype(r_hand, T)) + return r_hand + return null + +/mob/living/proc/get_left_hand() + return l_hand + +/mob/living/proc/get_right_hand() + return r_hand + +/mob/living/u_equip(obj/W as obj) + if (W == r_hand) + r_hand = null + update_inv_r_hand(0) + else if (W == l_hand) + l_hand = null + update_inv_l_hand(0) + else if (W == back) + back = null + update_inv_back(0) + else if (W == wear_mask) + wear_mask = null + update_inv_wear_mask(0) + return + +/mob/living/get_equipped_item(var/slot) + switch(slot) + if(slot_l_hand) return l_hand + if(slot_r_hand) return r_hand + if(slot_back) return back + if(slot_wear_mask) return wear_mask + return null + +/mob/living/show_inv(mob/user as mob) + user.set_machine(src) + var/dat = {" +
[name]
+

+
Head(Mask): [(wear_mask ? wear_mask : "Nothing")] +
Left Hand: [(l_hand ? l_hand : "Nothing")] +
Right Hand: [(r_hand ? r_hand : "Nothing")] +
Back: [(back ? back : "Nothing")] [((istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank) && !( internal )) ? text(" Set Internal", src) : "")] +
[(internal ? text("Remove Internal") : "")] +
Empty Pockets +
Refresh +
Close +
"} + user << browse(dat, text("window=mob[];size=325x500", name)) + onclose(user, "mob[name]") + return + +/mob/living/ret_grab(obj/effect/list_container/mobl/L as obj, flag) + if ((!( istype(l_hand, /obj/item/weapon/grab) ) && !( istype(r_hand, /obj/item/weapon/grab) ))) + if (!( L )) + return null + else + return L.container + else + if (!( L )) + L = new /obj/effect/list_container/mobl( null ) + L.container += src + L.master = src + if (istype(l_hand, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = l_hand + if (!( L.container.Find(G.affecting) )) + L.container += G.affecting + if (G.affecting) + G.affecting.ret_grab(L, 1) + if (istype(r_hand, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = r_hand + if (!( L.container.Find(G.affecting) )) + L.container += G.affecting + if (G.affecting) + G.affecting.ret_grab(L, 1) + if (!( flag )) + if (L.master == src) + var/list/temp = list( ) + temp += L.container + //L = null + qdel(L) + return temp + else + return L.container + return + +/mob/living/mode() + set name = "Activate Held Object" + set category = "Object" + set src = usr + + if(istype(loc,/obj/mecha)) return + + if(hand) + var/obj/item/W = l_hand + if (W) + W.attack_self(src) + update_inv_l_hand() + else + var/obj/item/W = r_hand + if (W) + W.attack_self(src) + update_inv_r_hand() + return + +/mob/living/abiotic(var/full_body = 0) + if(full_body && ((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )) || (src.back || src.wear_mask))) + return 1 + + if((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract ))) + return 1 + return 0 diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 374ade2f21..70a3f4c3a2 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -865,3 +865,63 @@ default behaviour is: sleep(350) lastpuke = 0 +/mob/living/update_canmove() + if(!resting && cannot_stand() && can_stand_overridden()) + lying = 0 + canmove = 1 + else + if(istype(buckled, /obj/vehicle)) + var/obj/vehicle/V = buckled + if(cannot_stand()) + lying = 0 + canmove = 1 + pixel_y = V.mob_offset_y - 5 + else + if(buckled.buckle_lying != -1) lying = buckled.buckle_lying + canmove = 1 + pixel_y = V.mob_offset_y + else if(buckled) + anchored = 1 + canmove = 0 + if(istype(buckled)) + if(buckled.buckle_lying != -1) + lying = buckled.buckle_lying + if(buckled.buckle_movable) + anchored = 0 + canmove = 1 + + else if(cannot_stand()) + lying = 1 + canmove = 0 + else if(stunned) + canmove = 0 + else if(captured) + anchored = 1 + canmove = 0 + lying = 0 + else + lying = 0 + canmove = 1 + + if(lying) + density = 0 + if(l_hand) unEquip(l_hand) + if(r_hand) unEquip(r_hand) + else + density = initial(density) + + for(var/obj/item/weapon/grab/G in grabbed_by) + if(G.state >= GRAB_AGGRESSIVE) + canmove = 0 + break + + //Temporarily moved here from the various life() procs + //I'm fixing stuff incrementally so this will likely find a better home. + //It just makes sense for now. ~Carn + if( update_icon ) //forces a full overlay update + update_icon = 0 + regenerate_icons() + else if( lying != lying_prev ) + update_icons() + return canmove + diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 2b548c64fc..f745b6d5c5 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -195,21 +195,6 @@ /mob/proc/show_inv(mob/user as mob) - user.set_machine(src) - var/dat = {" -
[name]
-

-
Head(Mask): [(wear_mask ? wear_mask : "Nothing")] -
Left Hand: [(l_hand ? l_hand : "Nothing")] -
Right Hand: [(r_hand ? r_hand : "Nothing")] -
Back: [(back ? back : "Nothing")] [((istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank) && !( internal )) ? text(" Set Internal", src) : "")] -
[(internal ? text("Remove Internal") : "")] -
Empty Pockets -
Refresh -
Close -
"} - user << browse(dat, text("window=mob[];size=325x500", name)) - onclose(user, "mob[name]") return //mob verbs are faster than object verbs. See http://www.byond.com/forum/?post=1326139&page=2#comment8198716 for why this isn't atom/verb/examine() @@ -248,37 +233,6 @@ /mob/proc/ret_grab(obj/effect/list_container/mobl/L as obj, flag) - if ((!( istype(l_hand, /obj/item/weapon/grab) ) && !( istype(r_hand, /obj/item/weapon/grab) ))) - if (!( L )) - return null - else - return L.container - else - if (!( L )) - L = new /obj/effect/list_container/mobl( null ) - L.container += src - L.master = src - if (istype(l_hand, /obj/item/weapon/grab)) - var/obj/item/weapon/grab/G = l_hand - if (!( L.container.Find(G.affecting) )) - L.container += G.affecting - if (G.affecting) - G.affecting.ret_grab(L, 1) - if (istype(r_hand, /obj/item/weapon/grab)) - var/obj/item/weapon/grab/G = r_hand - if (!( L.container.Find(G.affecting) )) - L.container += G.affecting - if (G.affecting) - G.affecting.ret_grab(L, 1) - if (!( flag )) - if (L.master == src) - var/list/temp = list( ) - temp += L.container - //L = null - qdel(L) - return temp - else - return L.container return /mob/verb/mode() @@ -286,18 +240,6 @@ set category = "Object" set src = usr - if(istype(loc,/obj/mecha)) return - - if(hand) - var/obj/item/W = l_hand - if (W) - W.attack_self(src) - update_inv_l_hand() - else - var/obj/item/W = r_hand - if (W) - W.attack_self(src) - update_inv_r_hand() return /* @@ -735,65 +677,6 @@ //Updates canmove, lying and icons. Could perhaps do with a rename but I can't think of anything to describe it. /mob/proc/update_canmove() - - if(!resting && cannot_stand() && can_stand_overridden()) - lying = 0 - canmove = 1 - else - if(istype(buckled, /obj/vehicle)) - var/obj/vehicle/V = buckled - if(cannot_stand()) - lying = 0 - canmove = 1 - pixel_y = V.mob_offset_y - 5 - else - if(buckled.buckle_lying != -1) lying = buckled.buckle_lying - canmove = 1 - pixel_y = V.mob_offset_y - else if(buckled) - anchored = 1 - canmove = 0 - if(istype(buckled)) - if(buckled.buckle_lying != -1) - lying = buckled.buckle_lying - if(buckled.buckle_movable) - anchored = 0 - canmove = 1 - - else if(cannot_stand()) - lying = 1 - canmove = 0 - else if(stunned) - canmove = 0 - else if(captured) - anchored = 1 - canmove = 0 - lying = 0 - else - lying = 0 - canmove = 1 - - if(lying) - density = 0 - if(l_hand) unEquip(l_hand) - if(r_hand) unEquip(r_hand) - else - density = initial(density) - - for(var/obj/item/weapon/grab/G in grabbed_by) - if(G.state >= GRAB_AGGRESSIVE) - canmove = 0 - break - - //Temporarily moved here from the various life() procs - //I'm fixing stuff incrementally so this will likely find a better home. - //It just makes sense for now. ~Carn - if( update_icon ) //forces a full overlay update - update_icon = 0 - regenerate_icons() - else if( lying != lying_prev ) - update_icons() - return canmove @@ -1007,8 +890,7 @@ mob/proc/yank_out_object() R.adjustFireLoss(10) selection.forceMove(get_turf(src)) - if(!(U.l_hand && U.r_hand)) - U.put_in_hands(selection) + U.put_in_hands(selection) for(var/obj/item/weapon/O in pinned) if(O == selection) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index eaa88e6212..7eb32ea8db 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -60,7 +60,6 @@ var/next_move = null var/transforming = null //Carbon var/other = 0.0 - var/hand = null var/eye_blind = null //Carbon var/eye_blurry = null //Carbon var/ear_deaf = null //Carbon @@ -119,12 +118,6 @@ var/m_intent = "run"//Living var/lastKnownIP = null var/obj/buckled = null//Living - var/obj/item/l_hand = null//Living - var/obj/item/r_hand = null//Living - var/obj/item/weapon/back = null//Human/Monkey - var/obj/item/weapon/tank/internal = null//Human/Monkey - var/obj/item/weapon/storage/s_active = null//Carbon - var/obj/item/clothing/mask/wear_mask = null//Carbon var/seer = 0 //for cult//Carbon, probably Human diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index c85b8d96a2..ec83ced425 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -5,8 +5,10 @@ ///Called by client/Move() ///Checks to see if you are grabbing anything and if moving will affect your grab. /client/proc/Process_Grab() - for(var/obj/item/weapon/grab/G in list(mob.l_hand, mob.r_hand)) - G.reset_kill_state() //no wandering across the station/asteroid while choking someone + if(istype(mob, /mob/living)) + var/mob/living/L = mob + for(var/obj/item/weapon/grab/G in list(L.l_hand, L.r_hand)) + G.reset_kill_state() //no wandering across the station/asteroid while choking someone /obj/item/weapon/grab name = "grab" diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index e351f08289..7375cbd213 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -288,12 +288,6 @@ It's fairly easy to fix if dealing with single letters but not so much with comp /mob/proc/abiotic(var/full_body = 0) - if(full_body && ((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )) || (src.back || src.wear_mask))) - return 1 - - if((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract ))) - return 1 - return 0 //converts intent-strings into numbers and back diff --git a/code/modules/mob/update_icons.dm b/code/modules/mob/update_icons.dm index a6ae6dc4a0..ceca667c39 100644 --- a/code/modules/mob/update_icons.dm +++ b/code/modules/mob/update_icons.dm @@ -19,6 +19,15 @@ /mob/proc/update_inv_back() return +/mob/proc/update_inv_active_hand() + return + +/mob/living/update_inv_active_hand(var/A) + if(hand) + update_inv_l_hand(A) + else + update_inv_r_hand(A) + /mob/proc/update_inv_l_hand() return diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 65a740c068..84b88cb81a 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -98,7 +98,7 @@ if (2) take_damage(4) -/obj/item/organ/external/attack_self(var/mob/user) +/obj/item/organ/external/attack_self(var/mob/living/user) if(!contents.len) return ..() var/list/removable_objects = list() @@ -113,8 +113,7 @@ var/obj/item/I = pick(removable_objects) I.loc = get_turf(user) //just in case something was embedded that is not an item if(istype(I)) - if(!(user.l_hand && user.r_hand)) - user.put_in_hands(I) + user.put_in_hands(I) user.visible_message("\The [user] rips \the [I] out of \the [src]!") return //no eating the limb until everything's been removed return ..() @@ -128,7 +127,7 @@ usr << "There is \a [I] sticking out of it." return -/obj/item/organ/external/attackby(obj/item/weapon/W as obj, mob/user as mob) +/obj/item/organ/external/attackby(obj/item/weapon/W as obj, mob/living/user as mob) switch(stage) if(0) if(istype(W,/obj/item/weapon/scalpel)) @@ -145,8 +144,7 @@ if(contents.len) var/obj/item/removing = pick(contents) removing.loc = get_turf(user.loc) - if(!(user.l_hand && user.r_hand)) - user.put_in_hands(removing) + user.put_in_hands(removing) user.visible_message("[user] extracts [removing] from [src] with [W]!") else user.visible_message("[user] fishes around fruitlessly in [src] with [W].") diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 9cb37d98a9..fd13a451e7 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -337,8 +337,9 @@ var/obj/item/i = usr.get_active_hand() // Check to see if he still got that darn pen, also check if he's using a crayon or pen. var/iscrayon = 0 if(!istype(i, /obj/item/weapon/pen)) - if(usr.back && istype(usr.back,/obj/item/weapon/rig)) - var/obj/item/weapon/rig/r = usr.back + var/mob/living/M = usr + if(istype(M) && M.back && istype(M.back,/obj/item/weapon/rig)) + var/obj/item/weapon/rig/r = M.back var/obj/item/rig_module/device/pen/m = locate(/obj/item/rig_module/device/pen) in r.installed_modules if(!r.offline && m) i = m.device diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index 90ed7ccf59..5787ff2d02 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -91,7 +91,7 @@ var/global/photo_count = 0 /obj/item/weapon/storage/photo_album/MouseDrop(obj/over_object as obj) if((istype(usr, /mob/living/carbon/human))) - var/mob/M = usr + var/mob/living/carbon/human/M = usr if(!( istype(over_object, /obj/screen) )) return ..() playsound(loc, "rustle", 50, 1, -5) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 3e801be0d1..44b36db8ac 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -93,7 +93,7 @@ if(requires_two_hands) var/mob/living/M = loc if(istype(M)) - if((M.l_hand == src && !M.r_hand) || (M.r_hand == src && !M.l_hand)) + if(M.item_is_in_hands(src) && !M.hands_are_full()) name = "[initial(name)] (wielded)" item_state = wielded_icon else @@ -179,7 +179,7 @@ var/held_acc_mod = 0 var/held_disp_mod = 0 if(requires_two_hands) - if((user.l_hand == src && user.r_hand) || (user.r_hand == src && user.l_hand)) + if(user.item_is_in_hands(src) && user.hands_are_full()) held_acc_mod = -3 held_disp_mod = 3 diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm index 4763b83bb6..4cba9ea012 100644 --- a/code/modules/projectiles/guns/projectile/pistol.dm +++ b/code/modules/projectiles/guns/projectile/pistol.dm @@ -171,10 +171,10 @@ name = "holdout signal pistol" magazine_type = /obj/item/ammo_magazine/mc9mm/flash -/obj/item/weapon/gun/projectile/pistol/attack_hand(mob/user as mob) +/obj/item/weapon/gun/projectile/pistol/attack_hand(mob/living/user as mob) if(user.get_inactive_hand() == src) if(silenced) - if(user.l_hand != src && user.r_hand != src) + if(!user.item_is_in_hands(src)) ..() return user << "You unscrew [silenced] from [src]." @@ -185,9 +185,9 @@ return ..() -/obj/item/weapon/gun/projectile/pistol/attackby(obj/item/I as obj, mob/user as mob) +/obj/item/weapon/gun/projectile/pistol/attackby(obj/item/I as obj, mob/living/user as mob) if(istype(I, /obj/item/weapon/silencer)) - if(user.l_hand != src && user.r_hand != src) //if we're not in his hands + if(!user.item_is_in_hands(src)) //if we're not in his hands user << "You'll need [src] in your hands to do that." return user.drop_item() diff --git a/code/modules/projectiles/targeting/targeting_overlay.dm b/code/modules/projectiles/targeting/targeting_overlay.dm index 7a6fdcc0ca..46b01a9d1b 100644 --- a/code/modules/projectiles/targeting/targeting_overlay.dm +++ b/code/modules/projectiles/targeting/targeting_overlay.dm @@ -113,7 +113,8 @@ obj/aiming_overlay/proc/update_aiming_deferred() var/cancel_aim = 1 - if(!(aiming_with in owner) || (istype(owner, /mob/living/carbon/human) && (owner.l_hand != aiming_with && owner.r_hand != aiming_with))) + var/mob/living/carbon/human/H = owner + if(!(aiming_with in owner) || (istype(H) && !H.item_is_in_hands(aiming_with))) owner << "You must keep hold of your weapon!" else if(owner.eye_blind) owner << "You are blind and cannot see your target!" diff --git a/code/modules/research/xenoarchaeology/artifact/artifact.dm b/code/modules/research/xenoarchaeology/artifact/artifact.dm index a3256d6f53..71819efc65 100644 --- a/code/modules/research/xenoarchaeology/artifact/artifact.dm +++ b/code/modules/research/xenoarchaeology/artifact/artifact.dm @@ -108,10 +108,9 @@ . = ..() if(istype(AM,/mob/living/carbon/human)) var/mob/living/carbon/human/H = AM - if((istype(H.l_hand,/obj/item/weapon/pickaxe)) && (!H.hand)) - attackby(H.l_hand,H) - else if((istype(H.r_hand,/obj/item/weapon/pickaxe)) && H.hand) - attackby(H.r_hand,H) + var/obj/item/weapon/pickaxe/P = H.get_inactive_hand() + if(istype(P)) + src.attackby(P, H) else if(istype(AM,/mob/living/silicon/robot)) var/mob/living/silicon/robot/R = AM diff --git a/polaris.dme b/polaris.dme index 1e71b20403..261a87d946 100644 --- a/polaris.dme +++ b/polaris.dme @@ -1267,6 +1267,7 @@ #include "code\modules\mob\living\autohiss.dm" #include "code\modules\mob\living\damage_procs.dm" #include "code\modules\mob\living\default_language.dm" +#include "code\modules\mob\living\inventory.dm" #include "code\modules\mob\living\life.dm" #include "code\modules\mob\living\living.dm" #include "code\modules\mob\living\living_defense.dm" From 5c1e5a89e6b679cdaf67b5d66a5324170bccfa6a Mon Sep 17 00:00:00 2001 From: Hubblenaut Date: Fri, 18 Mar 2016 13:07:38 +0100 Subject: [PATCH 12/64] Adds wallets to loadout menu --- .../objects/items/weapons/storage/wallets.dm | 24 +++++----- .../loadout/loadout_accessories.dm | 4 ++ code/modules/economy/cash.dm | 44 ++++++++++--------- 3 files changed, 39 insertions(+), 33 deletions(-) diff --git a/code/game/objects/items/weapons/storage/wallets.dm b/code/game/objects/items/weapons/storage/wallets.dm index 9b4f9271a2..81cee4552a 100644 --- a/code/game/objects/items/weapons/storage/wallets.dm +++ b/code/game/objects/items/weapons/storage/wallets.dm @@ -73,18 +73,16 @@ else return ..() + /obj/item/weapon/storage/wallet/random/New() ..() - var/item1_type = pick( /obj/item/weapon/spacecash/c10,/obj/item/weapon/spacecash/c100,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c20,/obj/item/weapon/spacecash/c200,/obj/item/weapon/spacecash/c50, /obj/item/weapon/spacecash/c500) - var/item2_type - if(prob(50)) - item2_type = pick( /obj/item/weapon/spacecash/c10,/obj/item/weapon/spacecash/c100,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c20,/obj/item/weapon/spacecash/c200,/obj/item/weapon/spacecash/c50, /obj/item/weapon/spacecash/c500) - var/item3_type = pick( /obj/item/weapon/coin/silver, /obj/item/weapon/coin/silver, /obj/item/weapon/coin/gold, /obj/item/weapon/coin/iron, /obj/item/weapon/coin/iron, /obj/item/weapon/coin/iron ) - - spawn(2) - if(item1_type) - new item1_type(src) - if(item2_type) - new item2_type(src) - if(item3_type) - new item3_type(src) + var/amount = rand(50, 100) + rand(50, 100) // Triangular distribution from 100 to 200 + var/obj/item/weapon/spacecash/SC = null + for(var/i in list(100, 50, 20, 10, 5, 1)) + if(amount < i) + continue + SC = new(src) + while(amount >= i) + amount -= i + SC.adjust_worth(i, 0) + SC.update_icon() \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout_accessories.dm b/code/modules/client/preference_setup/loadout/loadout_accessories.dm index 3e25595383..53b499664c 100644 --- a/code/modules/client/preference_setup/loadout/loadout_accessories.dm +++ b/code/modules/client/preference_setup/loadout/loadout_accessories.dm @@ -28,6 +28,10 @@ display_name = "armband, science" path = /obj/item/clothing/accessory/armband/science +/datum/gear/accessory/wallet + display_name = "wallet" + path = /obj/item/weapon/storage/wallet/random + /datum/gear/accessory/holster display_name = "holster, armpit" path = /obj/item/clothing/accessory/holster/armpit diff --git a/code/modules/economy/cash.dm b/code/modules/economy/cash.dm index d40772a530..f18eac3b9d 100644 --- a/code/modules/economy/cash.dm +++ b/code/modules/economy/cash.dm @@ -21,8 +21,7 @@ if(istype(W, /obj/item/weapon/spacecash/ewallet)) return 0 var/obj/item/weapon/spacecash/SC = W - SC.worth += src.worth - SC.update_icon() + SC.adjust_worth(src.worth) if(istype(user, /mob/living/carbon/human)) var/mob/living/carbon/human/h_user = user h_user.drop_from_inventory(src) @@ -59,26 +58,32 @@ src.overlays += banknote src.desc = "They are worth [worth] Thalers." +/obj/item/weapon/spacecash/proc/adjust_worth(var/adjust_worth = 0, var/update = 1) + worth += adjust_worth + if(worth > 0) + if(update) + update_icon() + return worth + else + qdel(src) + return 0 + +/obj/item/weapon/spacecash/proc/set_worth(var/new_worth = 0, var/update = 1) + worth = max(0, new_worth) + if(update) + update_icon() + return worth + /obj/item/weapon/spacecash/attack_self() var/amount = input(usr, "How many Thalers do you want to take? (0 to [src.worth])", "Take Money", 20) as num amount = round(Clamp(amount, 0, src.worth)) - if(amount==0) return 0 + if(!amount) + return - src.worth -= amount - src.update_icon() - if(!worth) - usr.drop_from_inventory(src) - if(amount in list(1000,500,200,100,50,20,1)) - var/cashtype = text2path("/obj/item/weapon/spacecash/c[amount]") - var/obj/cash = new cashtype (usr.loc) - usr.put_in_hands(cash) - else - var/obj/item/weapon/spacecash/SC = new (usr.loc) - SC.worth = amount - SC.update_icon() - usr.put_in_hands(SC) - if(!worth) - qdel(src) + adjust_worth(-amount) + var/obj/item/weapon/spacecash/SC = new (usr.loc) + SC.set_worth(amount) + usr.put_in_hands(SC) /obj/item/weapon/spacecash/c1 name = "1 Thaler" @@ -130,8 +135,7 @@ proc/spawn_money(var/sum, spawnloc, mob/living/carbon/human/human_user as mob) var/obj/item/weapon/spacecash/SC = new (spawnloc) - SC.worth = sum - SC.update_icon() + SC.set_worth(sum) if (ishuman(human_user) && !human_user.get_active_hand()) human_user.put_in_hands(SC) return From eb6f621ca92f790d5301c3ae6c798f320ccd7edc Mon Sep 17 00:00:00 2001 From: Datraen Date: Fri, 18 Mar 2016 15:20:48 -0400 Subject: [PATCH 13/64] Adds a check to the greytide virus to see if the APCs are operating. --- code/game/area/areas.dm | 14 ++++++++------ code/modules/events/prison_break.dm | 7 +++++-- html/changelogs/Datraen-PBAPCCheck.yml | 6 ++++++ 3 files changed, 19 insertions(+), 8 deletions(-) create mode 100644 html/changelogs/Datraen-PBAPCCheck.yml diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 07b3dcacc5..81f0da074d 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -292,12 +292,14 @@ var/list/mob/living/forced_ambiance_list = new mob << "The sudden appearance of gravity makes you fall to the floor!" /area/proc/prison_break() - for(var/obj/machinery/power/apc/temp_apc in src) - temp_apc.overload_lighting(70) - for(var/obj/machinery/door/airlock/temp_airlock in src) - temp_airlock.prison_open() - for(var/obj/machinery/door/window/temp_windoor in src) - temp_windoor.open() + var/obj/machinery/power/apc/theAPC = get_apc() + if(theAPC.operating) + for(var/obj/machinery/power/apc/temp_apc in src) + temp_apc.overload_lighting(70) + for(var/obj/machinery/door/airlock/temp_airlock in src) + temp_airlock.prison_open() + for(var/obj/machinery/door/window/temp_windoor in src) + temp_windoor.open() /area/proc/has_gravity() return has_gravity diff --git a/code/modules/events/prison_break.dm b/code/modules/events/prison_break.dm index d10659e24e..5173236627 100644 --- a/code/modules/events/prison_break.dm +++ b/code/modules/events/prison_break.dm @@ -61,9 +61,12 @@ /datum/event/prison_break/tick() if(activeFor == releaseWhen) if(areas && areas.len > 0) + var/obj/machinery/power/apc/theAPC = null for(var/area/A in areas) - for(var/obj/machinery/light/L in A) - L.flicker(10) + theAPC = A.get_apc() + if(theAPC.operating) //If the apc's off, it's a little hard to overload the lights. + for(var/obj/machinery/light/L in A) + L.flicker(10) /datum/event/prison_break/end() diff --git a/html/changelogs/Datraen-PBAPCCheck.yml b/html/changelogs/Datraen-PBAPCCheck.yml new file mode 100644 index 0000000000..03e3702eba --- /dev/null +++ b/html/changelogs/Datraen-PBAPCCheck.yml @@ -0,0 +1,6 @@ +author: Datraen + +delete-after: True + +changes: + - bugfix: "Adds a check to prison breaks that makes sure the APC is on before continuing." From 7f95bf177e653de3c2c9991578ee7bf813773897 Mon Sep 17 00:00:00 2001 From: Datraen Date: Sun, 20 Mar 2016 14:54:05 -0400 Subject: [PATCH 14/64] Checks to see if the turf is a floor before continuing to spawn artifacts. --- code/modules/research/xenoarchaeology/master_controller.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/modules/research/xenoarchaeology/master_controller.dm b/code/modules/research/xenoarchaeology/master_controller.dm index 332b1ce06a..99307f3793 100644 --- a/code/modules/research/xenoarchaeology/master_controller.dm +++ b/code/modules/research/xenoarchaeology/master_controller.dm @@ -9,9 +9,12 @@ #define ARTIFACTSPAWNNUM_LOWER 6 #define ARTIFACTSPAWNNUM_UPPER 12 -datum/controller/game_controller/proc/SetupXenoarch() +/datum/controller/game_controller/proc/SetupXenoarch() //create digsites for(var/turf/simulated/mineral/M in block(locate(1,1,1), locate(world.maxx, world.maxy, world.maxz))) + if(M.density) + continue + if(isnull(M.geologic_data)) M.geologic_data = new/datum/geosample(M) From 1683761d6a67b1b851eade325ad4b3d12c116b72 Mon Sep 17 00:00:00 2001 From: Kelenius Date: Mon, 21 Mar 2016 14:22:44 +0300 Subject: [PATCH 15/64] Fixes #1171 --- code/modules/clothing/spacesuits/rig/modules/utility.dm | 6 +++--- code/modules/hydroponics/trays/tray.dm | 2 +- .../Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm | 7 +++++++ code/modules/virus2/effect.dm | 2 +- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/code/modules/clothing/spacesuits/rig/modules/utility.dm b/code/modules/clothing/spacesuits/rig/modules/utility.dm index 0171c11746..679a822aec 100644 --- a/code/modules/clothing/spacesuits/rig/modules/utility.dm +++ b/code/modules/clothing/spacesuits/rig/modules/utility.dm @@ -139,7 +139,7 @@ list("dexalin plus", "dexalinp", 0, 80), list("antibiotics", "spaceacillin", 0, 80), list("antitoxins", "anti_toxin", 0, 80), - list("nutrients", "nutriment", 0, 80), + list("nutrients", "glucose", 0, 80), list("hyronalin", "hyronalin", 0, 80), list("radium", "radium", 0, 80) ) @@ -156,7 +156,7 @@ list("dexalin plus", "dexalinp", 0, 20), list("antibiotics", "spaceacillin", 0, 20), list("antitoxins", "anti_toxin", 0, 20), - list("nutrients", "nutriment", 0, 80), + list("nutrients", "glucose", 0, 80), list("hyronalin", "hyronalin", 0, 20), list("radium", "radium", 0, 20) ) @@ -245,7 +245,7 @@ list("synaptizine", "synaptizine", 0, 30), list("hyperzine", "hyperzine", 0, 30), list("oxycodone", "oxycodone", 0, 30), - list("nutrients", "nutriment", 0, 80), + list("nutrients", "glucose", 0, 80), ) interface_name = "combat chem dispenser" diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index d49680bd41..cfafd90ea2 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -152,7 +152,7 @@ return if(weedlevel > 0) - nymph.reagents.add_reagent("nutriment", weedlevel) + nymph.reagents.add_reagent("glucose", weedlevel) weedlevel = 0 nymph.visible_message("[nymph] begins rooting through [src], ripping out weeds and eating them noisily.","You begin rooting through [src], ripping out weeds and eating them noisily.") else if(nymph.nutrition > 100 && nutrilevel < 10) diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm index 47d03e5974..637470e7cc 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm @@ -22,6 +22,13 @@ M.nutrition += nutriment_factor * removed // For hunger and fatness M.add_chemical_effect(CE_BLOODRESTORE, 4 * removed) +/datum/reagent/nutriment/glucose + name = "Glucose" + id = "glucose" + color = "#FFFFFF" + + injectable = 1 + /datum/reagent/nutriment/protein // Bad for Skrell! name = "animal protein" id = "protein" diff --git a/code/modules/virus2/effect.dm b/code/modules/virus2/effect.dm index 0d6e696b5e..8ca82b96a1 100644 --- a/code/modules/virus2/effect.dm +++ b/code/modules/virus2/effect.dm @@ -292,7 +292,7 @@ else data = pick("bicaridine", "kelotane", "anti_toxin", "inaprovaline", "space_drugs", "sugar", "tramadol", "dexalin", "cryptobiolin", "impedrezene", "hyperzine", "ethylredoxrazine", - "mindbreaker", "nutriment") + "mindbreaker", "glucose") var/datum/reagent/R = chemical_reagents_list[data] name = "[initial(name)] ([initial(R.name)])" From 5d9596a72d87d29118c53a0add753fffef74bee7 Mon Sep 17 00:00:00 2001 From: Yoshax Date: Mon, 21 Mar 2016 18:56:27 +0000 Subject: [PATCH 16/64] Makes it possible to have more than 16 preferences --- code/__defines/misc.dm | 20 --- code/_helpers/game.dm | 2 +- code/_helpers/logging.dm | 4 +- code/_helpers/text.dm | 2 +- code/game/area/areas.dm | 2 +- code/game/machinery/telecomms/broadcaster.dm | 19 +-- code/game/objects/items/devices/PDA/PDA.dm | 2 +- code/game/sound.dm | 2 +- code/game/verbs/ooc.dm | 8 +- code/modules/admin/admin.dm | 2 +- code/modules/admin/admin_verbs.dm | 32 ---- code/modules/admin/verbs/adminhelp.dm | 2 +- code/modules/admin/verbs/adminpm.dm | 2 +- code/modules/admin/verbs/deadsay.dm | 6 +- code/modules/admin/verbs/playsound.dm | 2 +- code/modules/admin/verbs/pray.dm | 2 +- .../preference_setup/general/01_basic.dm | 2 +- .../preference_setup/global/02_settings.dm | 102 +++++++++-- .../preference_setup/global/setting_datums.dm | 161 ++++++++++++++++++ code/modules/client/preferences.dm | 3 +- code/modules/client/preferences_toggles.dm | 159 ----------------- code/modules/mob/emote.dm | 4 +- code/modules/mob/hear_say.dm | 6 +- code/modules/mob/living/carbon/brain/emote.dm | 2 +- .../mob/living/carbon/human/whisper.dm | 2 +- code/modules/mob/living/say.dm | 2 +- .../living/silicon/robot/drone/drone_say.dm | 4 +- .../simple_animal/borer/borer_captive.dm | 2 +- .../mob/living/simple_animal/borer/say.dm | 2 +- code/modules/mob/mob_helpers.dm | 2 +- code/modules/mob/say.dm | 2 +- code/modules/mob/typing_indicator.dm | 47 ++--- .../finds/finds_talkingitem.dm | 2 +- polaris.dme | 2 +- 34 files changed, 305 insertions(+), 310 deletions(-) create mode 100644 code/modules/client/preference_setup/global/setting_datums.dm delete mode 100644 code/modules/client/preferences_toggles.dm diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm index 9741282f93..e9f44499a4 100644 --- a/code/__defines/misc.dm +++ b/code/__defines/misc.dm @@ -25,26 +25,6 @@ #define PROCESS_KILL 26 // Used to trigger removal from a processing list. #define MAX_GEAR_COST 10 // Used in chargen for accessory loadout limit. -// Preference toggles. -#define SOUND_ADMINHELP 0x1 -#define SOUND_MIDI 0x2 -#define SOUND_AMBIENCE 0x4 -#define SOUND_LOBBY 0x8 -#define CHAT_OOC 0x10 -#define CHAT_DEAD 0x20 -#define CHAT_GHOSTEARS 0x40 -#define CHAT_GHOSTSIGHT 0x80 -#define CHAT_PRAYER 0x100 -#define CHAT_RADIO 0x200 -#define CHAT_ATTACKLOGS 0x400 -#define CHAT_DEBUGLOGS 0x800 -#define CHAT_LOOC 0x1000 -#define CHAT_GHOSTRADIO 0x2000 -#define SHOW_TYPING 0x4000 -#define CHAT_NOICONS 0x8000 - -#define TOGGLES_DEFAULT (SOUND_ADMINHELP|SOUND_MIDI|SOUND_AMBIENCE|SOUND_LOBBY|CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_ATTACKLOGS|CHAT_LOOC) - // For secHUDs and medHUDs and variants. The number is the location of the image on the list hud_list of humans. #define HEALTH_HUD 1 // A simple line rounding the mob's number health. #define STATUS_HUD 2 // Alive, dead, diseased, etc. diff --git a/code/_helpers/game.dm b/code/_helpers/game.dm index 3964ddeeba..06b277257f 100644 --- a/code/_helpers/game.dm +++ b/code/_helpers/game.dm @@ -244,7 +244,7 @@ var/turf/ear = get_turf(M) if(ear) // Ghostship is magic: Ghosts can hear radio chatter from anywhere - if(speaker_coverage[ear] || (istype(M, /mob/observer/dead) && (M.client) && (M.client.prefs.toggles & CHAT_GHOSTRADIO))) + if(speaker_coverage[ear] || (istype(M, /mob/observer/dead) && M.is_preference_enabled(/datum/client_preference/ghost_radio))) . |= M // Since we're already looping through mobs, why bother using |= ? This only slows things down. return . diff --git a/code/_helpers/logging.dm b/code/_helpers/logging.dm index 23119c69ad..d29c78e83a 100644 --- a/code/_helpers/logging.dm +++ b/code/_helpers/logging.dm @@ -31,7 +31,7 @@ diary << "\[[time_stamp()]]DEBUG: [text][log_end]" for(var/client/C in admins) - if(C.prefs.toggles & CHAT_DEBUGLOGS) + if(C.is_preference_enabled(/datum/client_preference/admin/show_debug_logs)) C << "DEBUG: [text]" @@ -91,7 +91,7 @@ if(dir & WEST) comps += "WEST" if(dir & UP) comps += "UP" if(dir & DOWN) comps += "DOWN" - + return english_list(comps, nothing_text="0", and_text="|", comma_text="|") //more or less a logging utility diff --git a/code/_helpers/text.dm b/code/_helpers/text.dm index 224301a898..72549c9ee1 100644 --- a/code/_helpers/text.dm +++ b/code/_helpers/text.dm @@ -304,7 +304,7 @@ proc/TextPreview(var/string,var/len=40) // to always create it and then throw it out. /var/icon/text_tag_icons = new('./icons/chattags.dmi') /proc/create_text_tag(var/tagname, var/tagdesc = tagname, var/client/C = null) - if(C && (C.prefs.toggles & CHAT_NOICONS)) + if(!(C && C.is_preference_enabled(/datum/client_preference/chat_tags))) return tagdesc return "[tagdesc]" diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 07b3dcacc5..3bf5efab88 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -243,7 +243,7 @@ var/list/mob/living/forced_ambiance_list = new /area/proc/play_ambience(var/mob/living/L) // Ambience goes down here -- make sure to list each area seperately for ease of adding things in later, thanks! Note: areas adjacent to each other should have the same sounds to prevent cutoff when possible.- LastyScratch - if(!(L && L.client && (L.client.prefs.toggles & SOUND_AMBIENCE))) return + if(!(L && L.is_preference_enabled(/datum/client_preference/play_ambiance))) return // If we previously were in an area with force-played ambiance, stop it. if(L in forced_ambiance_list) diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index b64f5923c8..30c92af922 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -286,19 +286,14 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept for (var/mob/R in receive) /* --- Loop through the receivers and categorize them --- */ - - if (R.client) - if(R.client.prefs) - if(!(R.client.prefs.toggles & CHAT_RADIO)) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios. - continue - else - log_debug("Client prefs found to be null in /proc/Broadcast_Message() for mob [R] and client [R.ckey], this should be investigated.") + if (!R.is_preference_enabled(/datum/client_preference/holder/hear_radio)) + continue if(istype(R, /mob/new_player)) // we don't want new players to hear messages. rare but generates runtimes. continue // Ghosts hearing all radio chat don't want to hear syndicate intercepts, they're duplicates - if(data == 3 && istype(R, /mob/observer/dead) && R.client && R.client.prefs && (R.client.prefs.toggles & CHAT_GHOSTRADIO)) + if(data == 3 && istype(R, /mob/observer/dead) && R.is_preference_enabled(/datum/client_preference/ghost_radio)) continue // --- Check for compression --- @@ -494,12 +489,8 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept /* --- Loop through the receivers and categorize them --- */ - if (R.client) - if(R.client.prefs) - if(!(R.client.prefs.toggles & CHAT_RADIO)) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios. - continue - else - log_debug("Client prefs found to be null in /proc/Broadcast_SimpleMessage() for mob [R] and client [R.ckey], this should be investigated.") + if(!R.is_preference_enabled(/datum/client_preference/holder/hear_radio)) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios. + continue // --- Check for compression --- diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index ed2e134154..b3915ffcee 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -990,7 +990,7 @@ var/global/list/obj/item/device/pda/PDAs = list() tnote.Add(list(list("sent" = 1, "owner" = "[P.owner]", "job" = "[P.ownjob]", "message" = "[t]", "target" = "\ref[P]"))) P.tnote.Add(list(list("sent" = 0, "owner" = "[owner]", "job" = "[ownjob]", "message" = "[t]", "target" = "\ref[src]"))) for(var/mob/M in player_list) - if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTEARS)) // src.client is so that ghosts don't have to listen to mice + if(M.stat == DEAD && M.client && (M.is_preference_enabled(/datum/client_preference/ghost_ears))) // src.client is so that ghosts don't have to listen to mice if(istype(M, /mob/new_player)) continue M.show_message("PDA Message - [owner] -> [P.owner]: [t]") diff --git a/code/game/sound.dm b/code/game/sound.dm index ce2b992d9b..fea1bdcb38 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -157,7 +157,7 @@ var/const/FALLOFF_SOUNDS = 0.5 /client/proc/playtitlemusic() if(!ticker || !ticker.login_music) return - if(prefs.toggles & SOUND_LOBBY) + if(is_preference_enabled(/datum/client_preference/play_lobby_music)) src << sound(ticker.login_music, repeat = 0, wait = 0, volume = 85, channel = 1) // MAD JAMS /proc/get_rand_frequency() diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index f2a2d74f11..1e976a2afc 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -15,7 +15,7 @@ msg = sanitize(msg) if(!msg) return - if(!(prefs.toggles & CHAT_OOC)) + if(!is_preference_enabled(/datum/client_preference/show_ooc)) src << "You have OOC muted." return @@ -50,7 +50,7 @@ ooc_style = "admin" for(var/client/target in clients) - if(target.prefs.toggles & CHAT_OOC) + if(target.is_preference_enabled(/datum/client_preference/show_ooc)) var/display_name = src.key if(holder) if(holder.fakekey) @@ -83,7 +83,7 @@ if(!msg) return - if(!(prefs.toggles & CHAT_LOOC)) + if(!is_preference_enabled(/datum/client_preference/show_looc)) src << "You have LOOC muted." return @@ -117,7 +117,7 @@ display_name = mob.name for(var/client/target in clients) - if(target.prefs.toggles & CHAT_LOOC) + if(target.is_preference_enabled(/datum/client_preference/show_looc)) var/prefix = "" var/admin_stuff = "" var/send = 0 diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index a3e6a5032d..7e2effce61 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -16,7 +16,7 @@ var/global/floorIsLava = 0 var/rendered = "ATTACK: [text]" for(var/client/C in admins) if((R_ADMIN|R_MOD) & C.holder.rights) - if(C.prefs.toggles & CHAT_ATTACKLOGS) + if(C.is_preference_enabled(/datum/client_preference/admin/show_attack_logs)) var/msg = rendered C << msg diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 228030f157..0ea7169874 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -2,7 +2,6 @@ var/list/admin_verbs_default = list( /datum/admins/proc/show_player_panel, /*shows an interface for individual players, with various links (links require additional flags*/ /client/proc/player_panel, - /client/proc/toggleadminhelpsound, /*toggles whether we hear a sound when adminhelps/PMs are used*/ /client/proc/deadmin_self, /*destroys our own admin datum so we can play as a regular player*/ /client/proc/hide_verbs, /*hides all our adminverbs*/ /client/proc/hide_most_verbs, /*hides all our hideable adminverbs*/ @@ -57,9 +56,7 @@ var/list/admin_verbs_admin = list( /client/proc/check_antagonists, /client/proc/admin_memo, /*admin memo system. show/delete/write. +SERVER needed to delete admin memos of others*/ /client/proc/dsay, /*talk in deadchat using our ckey/fakekey*/ - /client/proc/toggleprayers, /*toggles prayers on/off*/ // /client/proc/toggle_hear_deadcast, /*toggles whether we hear deadchat*/ - /client/proc/toggle_hear_radio, /*toggles whether we hear the radio*/ /client/proc/investigate_show, /*various admintools for investigation. Such as a singulo grief-log*/ /client/proc/secrets, /datum/admins/proc/toggleooc, /*toggles ooc on/off for everyone*/ @@ -75,8 +72,6 @@ var/list/admin_verbs_admin = list( /client/proc/free_slot, /*frees slot for chosen job*/ /client/proc/cmd_admin_change_custom_event, /client/proc/cmd_admin_rejuvenate, - /client/proc/toggleattacklogs, - /client/proc/toggledebuglogs, /client/proc/toggleghostwriters, /client/proc/toggledrones, /datum/admins/proc/show_skills, @@ -187,7 +182,6 @@ var/list/admin_verbs_debug = list( /client/proc/enable_debug_verbs, /client/proc/callproc, /client/proc/callproc_target, - /client/proc/toggledebuglogs, /client/proc/SDQL_query, /client/proc/SDQL2_query, /client/proc/Jump, @@ -218,8 +212,6 @@ var/list/admin_verbs_rejuv = list( var/list/admin_verbs_hideable = list( /client/proc/deadmin_self, // /client/proc/deadchat, - /client/proc/toggleprayers, - /client/proc/toggle_hear_radio, /datum/admins/proc/show_traitor_panel, /datum/admins/proc/toggleenter, /datum/admins/proc/toggleguests, @@ -291,11 +283,9 @@ var/list/admin_verbs_mod = list( /client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/ /client/proc/cmd_admin_pm_panel, /*admin-pm list*/ /client/proc/debug_variables, /*allows us to -see- the variables of any instance in the game.*/ - /client/proc/toggledebuglogs, /datum/admins/proc/PlayerNotes, /client/proc/admin_ghost, /*allows us to ghost/reenter body at will*/ /client/proc/cmd_mod_say, - /client/proc/toggleattacklogs, /datum/admins/proc/show_player_info, /client/proc/player_panel_new, /client/proc/dsay, @@ -903,17 +893,6 @@ var/list/admin_verbs_mentor = list( message_admins("A job slot for [job] has been opened by [key_name_admin(usr)]") return -/client/proc/toggleattacklogs() - set name = "Toggle Attack Log Messages" - set category = "Preferences" - - prefs.toggles ^= CHAT_ATTACKLOGS - if (prefs.toggles & CHAT_ATTACKLOGS) - usr << "You now will get attack log messages" - else - usr << "You now won't get attack log messages" - - /client/proc/toggleghostwriters() set name = "Toggle ghost writers" set category = "Server" @@ -942,17 +921,6 @@ var/list/admin_verbs_mentor = list( src << "Enabled maint drones." message_admins("Admin [key_name_admin(usr)] has enabled maint drones.", 1) -/client/proc/toggledebuglogs() - set name = "Toggle Debug Log Messages" - set category = "Preferences" - - prefs.toggles ^= CHAT_DEBUGLOGS - if (prefs.toggles & CHAT_DEBUGLOGS) - usr << "You now will get debug log messages" - else - usr << "You now won't get debug log messages" - - /client/proc/man_up(mob/T as mob in mob_list) set category = "Fun" set name = "Man Up" diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index f4ce67aa2c..504a8419bf 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -100,7 +100,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," if((R_ADMIN|R_MOD|R_MENTOR|R_SERVER) & X.holder.rights) if(X.is_afk()) admin_number_afk++ - if(X.prefs.toggles & SOUND_ADMINHELP) + if(X.is_preference_enabled(/datum/client_preference/holder/play_adminhelp_ping)) X << 'sound/effects/adminhelp.ogg' if(X.holder.rights == R_MENTOR) X << mentor_msg // Mentors won't see coloring of names on people with special_roles (Antags, etc.) diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index f031bc2835..898cc4e835 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -104,7 +104,7 @@ //play the recieving admin the adminhelp sound (if they have them enabled) //non-admins shouldn't be able to disable this - if(C.prefs && C.prefs.toggles & SOUND_ADMINHELP) + if(C.is_preference_enabled(/datum/client_preference/holder/play_adminhelp_ping)) C << 'sound/effects/adminhelp.ogg' log_admin("PM: [key_name(src)]->[key_name(C)]: [msg]") diff --git a/code/modules/admin/verbs/deadsay.dm b/code/modules/admin/verbs/deadsay.dm index e6da3c736a..93646dd7b5 100644 --- a/code/modules/admin/verbs/deadsay.dm +++ b/code/modules/admin/verbs/deadsay.dm @@ -8,11 +8,11 @@ if(!src.mob) return if(prefs.muted & MUTE_DEADCHAT) - src << "\red You cannot send DSAY messages (muted)." + src << "You cannot send DSAY messages (muted).
" return - if(!(prefs.toggles & CHAT_DEAD)) - src << "\red You have deadchat muted." + if(!is_preference_enabled(/datum/client_preference/show_dsay)) + src << "You have deadchat muted.
" return if (src.handle_spam_prevention(msg,MUTE_DEADCHAT)) diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm index 3a4b40d985..eb7451c61c 100644 --- a/code/modules/admin/verbs/playsound.dm +++ b/code/modules/admin/verbs/playsound.dm @@ -16,7 +16,7 @@ var/list/sounds_cache = list() log_admin("[key_name(src)] played sound [S]") message_admins("[key_name_admin(src)] played sound [S]", 1) for(var/mob/M in player_list) - if(M.client.prefs.toggles & SOUND_MIDI) + if(M.is_preference_enabled(/datum/client_preference/play_admin_midis)) M << uploaded_sound feedback_add_details("admin_verb","PGS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index e43c5400d9..600549cdfa 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -21,7 +21,7 @@ for(var/client/C in admins) if(R_ADMIN & C.holder.rights) - if(C.prefs.toggles & CHAT_PRAYER) + if(C.is_preference_enabled(/datum/client_preference/admin/show_chat_prayers)) C << msg usr << "Your prayers have been received by the gods." diff --git a/code/modules/client/preference_setup/general/01_basic.dm b/code/modules/client/preference_setup/general/01_basic.dm index 367d3e247b..efd55d37ec 100644 --- a/code/modules/client/preference_setup/general/01_basic.dm +++ b/code/modules/client/preference_setup/general/01_basic.dm @@ -21,7 +21,7 @@ /datum/category_item/player_setup_item/general/basic/sanitize_character() if(!pref.species) pref.species = "Human" - var/datum/species/S = all_species[pref.species] + var/datum/species/S = all_species[pref.species ? pref.species : "Human"] pref.age = sanitize_integer(pref.age, S.min_age, S.max_age, initial(pref.age)) pref.gender = sanitize_inlist(pref.gender, valid_player_genders, pick(valid_player_genders)) pref.real_name = sanitize_name(pref.real_name, pref.species) diff --git a/code/modules/client/preference_setup/global/02_settings.dm b/code/modules/client/preference_setup/global/02_settings.dm index 7b61a86cb4..c44f9c4e44 100644 --- a/code/modules/client/preference_setup/global/02_settings.dm +++ b/code/modules/client/preference_setup/global/02_settings.dm @@ -1,3 +1,6 @@ +/datum/preferences + var/preferences = null + /datum/category_item/player_setup_item/player_global/settings name = "Settings" sort_order = 2 @@ -5,34 +8,101 @@ /datum/category_item/player_setup_item/player_global/settings/load_preferences(var/savefile/S) S["lastchangelog"] >> pref.lastchangelog S["default_slot"] >> pref.default_slot - S["toggles"] >> pref.toggles + S["preferences"] >> pref.preferences /datum/category_item/player_setup_item/player_global/settings/save_preferences(var/savefile/S) S["lastchangelog"] << pref.lastchangelog S["default_slot"] << pref.default_slot - S["toggles"] << pref.toggles + S["preferences"] << pref.preferences /datum/category_item/player_setup_item/player_global/settings/sanitize_preferences() + if(!istype(pref.preferences, /list)) + pref.preferences = list() + var/mob/pref_mob = preference_mob() + for(var/cp in get_client_preferences()) + var/datum/client_preference/client_pref = cp + if(!client_pref.enabled_by_default || !client_pref.may_toggle(pref_mob)) + continue + pref.preferences += client_pref.key + + for(var/preference in pref.preferences) + if(!get_client_preference_by_key(preference)) + pref.preferences -= preference + pref.lastchangelog = sanitize_text(pref.lastchangelog, initial(pref.lastchangelog)) pref.default_slot = sanitize_integer(pref.default_slot, 1, config.character_slots, initial(pref.default_slot)) - pref.toggles = sanitize_integer(pref.toggles, 0, 65535, initial(pref.toggles)) /datum/category_item/player_setup_item/player_global/settings/content(var/mob/user) - . += "Play admin midis: [(pref.toggles & SOUND_MIDI) ? "Yes" : "No"]
" - . += "Play lobby music: [(pref.toggles & SOUND_LOBBY) ? "Yes" : "No"]
" - . += "Ghost ears: [(pref.toggles & CHAT_GHOSTEARS) ? "All Speech" : "Nearest Creatures"]
" - . += "Ghost sight: [(pref.toggles & CHAT_GHOSTSIGHT) ? "All Emotes" : "Nearest Creatures"]
" - . += "Ghost radio: [(pref.toggles & CHAT_GHOSTRADIO) ? "All Chatter" : "Nearest Speakers"]
" + . = list() + . += "Preferences
" + . += "" + var/mob/pref_mob = preference_mob() + for(var/cp in get_client_preferences()) + var/datum/client_preference/client_pref = cp + if(!client_pref.may_toggle(pref_mob)) + continue + + . += "" + if(pref_mob.is_preference_enabled(client_pref.key)) + . += "" + else + . += "" + . += "" + + . += "
[client_pref.description]: [client_pref.enabled_description] [client_pref.disabled_description][client_pref.enabled_description] [client_pref.disabled_description]
" + return jointext(.) /datum/category_item/player_setup_item/player_global/settings/OnTopic(var/href,var/list/href_list, var/mob/user) - if(href_list["toggle"]) - var/toggle_flag = text2num(href_list["toggle"]) - pref.toggles ^= toggle_flag - if(toggle_flag == SOUND_LOBBY && isnewplayer(user)) - if(pref.toggles & SOUND_LOBBY) - user << sound(ticker.login_music, repeat = 0, wait = 0, volume = 85, channel = 1) - else - user << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) + var/mob/pref_mob = preference_mob() + if(href_list["toggle_on"]) + . = pref_mob.set_preference(href_list["toggle_on"], TRUE) + else if(href_list["toggle_off"]) + . = pref_mob.set_preference(href_list["toggle_off"], FALSE) + if(.) return TOPIC_REFRESH return ..() + + +/client/proc/is_preference_enabled(var/preference) + if(ispath(preference)) + var/datum/client_preference/cp = get_client_preference_by_type(preference) + preference = cp.key + + return (preference in prefs.preferences) + +/client/proc/set_preference(var/preference, var/set_preference) + var/datum/client_preference/cp + if(ispath(preference)) + cp = get_client_preference_by_type(preference) + else + cp = get_client_preference_by_key(preference) + + if(!cp) + return FALSE + + var/enabled + if(set_preference && !(preference in prefs.preferences)) + prefs.preferences += preference + enabled = TRUE + . = TRUE + else if(!set_preference && (preference in prefs.preferences)) + prefs.preferences -= preference + enabled = FALSE + . = TRUE + if(.) + cp.toggled(mob, enabled) + +/mob/proc/is_preference_enabled(var/preference) + if(!client) + return FALSE + return client.is_preference_enabled(preference) + +/mob/proc/set_preference(var/preference, var/set_preference) + if(!client) + return FALSE + if(!client.prefs) + log_debug("Client prefs found to be null for mob [src] and client [ckey], this should be investigated.") + return FALSE + + return client.set_preference(preference, set_preference) \ No newline at end of file diff --git a/code/modules/client/preference_setup/global/setting_datums.dm b/code/modules/client/preference_setup/global/setting_datums.dm new file mode 100644 index 0000000000..dd872e2c16 --- /dev/null +++ b/code/modules/client/preference_setup/global/setting_datums.dm @@ -0,0 +1,161 @@ +var/list/_client_preferences +var/list/_client_preferences_by_key +var/list/_client_preferences_by_type + +/proc/get_client_preferences() + if(!_client_preferences) + _client_preferences = list() + for(var/ct in subtypes(/datum/client_preference)) + var/datum/client_preference/client_type = ct + if(initial(client_type.description)) + _client_preferences += new client_type() + return _client_preferences + +/proc/get_client_preference_by_key(var/preference) + if(!_client_preferences_by_key) + _client_preferences_by_key = list() + for(var/ct in get_client_preferences()) + var/datum/client_preference/client_pref = ct + _client_preferences_by_key[client_pref.key] = client_pref + return _client_preferences_by_key[preference] + +/proc/get_client_preference_by_type(var/preference) + if(!_client_preferences_by_type) + _client_preferences_by_type = list() + for(var/ct in get_client_preferences()) + var/datum/client_preference/client_pref = ct + _client_preferences_by_type[client_pref.type] = client_pref + return _client_preferences_by_type[preference] + +/datum/client_preference + var/description + var/key + var/enabled_by_default = TRUE + var/enabled_description = "Yes" + var/disabled_description = "No" + +/datum/client_preference/proc/may_toggle(var/mob/preference_mob) + return TRUE + +/datum/client_preference/proc/toggled(var/mob/preference_mob, var/enabled) + return + +/********************* +* Player Preferences * +*********************/ + +/datum/client_preference/play_admin_midis + description ="Play admin midis" + key = "SOUND_MIDI" + +/datum/client_preference/play_lobby_music + description ="Play lobby music" + key = "SOUND_LOBBY" + +/datum/client_preference/play_lobby_music/toggled(var/mob/preference_mob, var/enabled) + if(enabled) + preference_mob << sound(ticker.login_music, repeat = 0, wait = 0, volume = 85, channel = 1) + else + preference_mob << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) + +/datum/client_preference/play_ambiance + description ="Play ambience" + key = "SOUND_AMBIENCE" + +/datum/client_preference/play_ambiance/toggled(var/mob/preference_mob, var/enabled) + if(!enabled) + preference_mob << sound(null, repeat = 0, wait = 0, volume = 0, channel = 1) + preference_mob << sound(null, repeat = 0, wait = 0, volume = 0, channel = 2) + +/datum/client_preference/ghost_ears + description ="Ghost ears" + key = "CHAT_GHOSTEARS" + enabled_description = "All Speech" + disabled_description = "Nearby" + +/datum/client_preference/ghost_sight + description ="Ghost sight" + key = "CHAT_GHOSTSIGHT" + enabled_description = "All Emotes" + disabled_description = "Nearby" + +/datum/client_preference/ghost_radio + description ="Ghost radio" + key = "CHAT_GHOSTRADIO" + enabled_description = "All Chatter" + disabled_description = "Nearby" + +/datum/client_preference/chat_tags + description ="Chat tags" + key = "CHAT_SHOWICONS" + enabled_description = "Show" + disabled_description = "Hide" + +/datum/client_preference/show_typing_indicator + description ="Typing indicator" + key = "SHOW_TYPING" + enabled_description = "Show" + disabled_description = "Hide" + +/datum/client_preference/show_typing_indicator/toggled(var/mob/preference_mob, var/enabled) + if(!enabled) + preference_mob.set_typing_indicator(0) + +/datum/client_preference/show_ooc + description ="OOC chat" + key = "CHAT_OOC" + enabled_description = "Show" + disabled_description = "Hide" + +/datum/client_preference/show_looc + description ="LOOC chat" + key = "CHAT_LOOC" + enabled_description = "Show" + disabled_description = "Hide" + +/datum/client_preference/show_dsay + description ="Dead chat" + key = "CHAT_DEAD" + enabled_description = "Show" + disabled_description = "Hide" + +/******************** +* Admin Preferences * +********************/ +/datum/client_preference/admin/may_toggle(var/mob/preference_mob) + return check_rights(R_ADMIN, 0, preference_mob) + +/datum/client_preference/admin/show_attack_logs + description = "Attack Log Messages" + key = "CHAT_ATTACKLOGS" + enabled_description = "Show" + disabled_description = "Hide" + enabled_by_default = FALSE + +/datum/client_preference/admin/show_debug_logs + description = "Debug Log Messages" + key = "CHAT_DEBUGLOGS" + enabled_description = "Show" + disabled_description = "Hide" + enabled_by_default = FALSE + +/datum/client_preference/admin/show_chat_prayers + description = "Chat Prayers" + key = "CHAT_PRAYER" + enabled_description = "Show" + disabled_description = "Hide" + +/datum/client_preference/holder/may_toggle(var/mob/preference_mob) + return preference_mob && preference_mob.client && preference_mob.client.holder + +/datum/client_preference/holder/play_adminhelp_ping + description = "Adminhelps" + key = "SOUND_ADMINHELP" + enabled_description = "Hear" + disabled_description = "Silent" + +/datum/client_preference/holder/hear_radio + description = "Radio chatter" + key = "CHAT_RADIO" + enabled_description = "Show" + disabled_description = "Hide" diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 313e507498..f000ccfe7d 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -19,7 +19,6 @@ datum/preferences var/ooccolor = "#010000" //Whatever this is set to acts as 'reset' color and is thus unusable as an actual custom color var/be_special = 0 //Special role selection var/UI_style = "Midnight" - var/toggles = TOGGLES_DEFAULT var/UI_style_color = "#ffffff" var/UI_style_alpha = 255 @@ -204,7 +203,7 @@ datum/preferences dat += player_setup.content(user) dat += "" - user << browse(dat, "window=preferences;size=625x736") + user << browse(dat, "window=preferences;size=635x736") /datum/preferences/proc/process_link(mob/user, list/href_list) if(!user) return diff --git a/code/modules/client/preferences_toggles.dm b/code/modules/client/preferences_toggles.dm deleted file mode 100644 index 09ee55b173..0000000000 --- a/code/modules/client/preferences_toggles.dm +++ /dev/null @@ -1,159 +0,0 @@ -//toggles -/client/verb/toggle_ghost_ears() - set name = "Show/Hide GhostEars" - set category = "Preferences" - set desc = ".Toggle Between seeing all mob speech, and only speech of nearby mobs" - prefs.toggles ^= CHAT_GHOSTEARS - src << "As a ghost, you will now [(prefs.toggles & CHAT_GHOSTEARS) ? "see all speech in the world" : "only see speech from nearby mobs"]." - prefs.save_preferences() - feedback_add_details("admin_verb","TGE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/toggle_ghost_sight() - set name = "Show/Hide GhostSight" - set category = "Preferences" - set desc = ".Toggle Between seeing all mob emotes, and only emotes of nearby mobs" - prefs.toggles ^= CHAT_GHOSTSIGHT - src << "As a ghost, you will now [(prefs.toggles & CHAT_GHOSTSIGHT) ? "see all emotes in the world" : "only see emotes from nearby mobs"]." - prefs.save_preferences() - feedback_add_details("admin_verb","TGS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/toggle_ghost_radio() - set name = "Enable/Disable GhostRadio" - set category = "Preferences" - set desc = ".Toggle between hearing all radio chatter, or only from nearby speakers" - prefs.toggles ^= CHAT_GHOSTRADIO - src << "As a ghost, you will now [(prefs.toggles & CHAT_GHOSTRADIO) ? "hear all radio chat in the world" : "only hear from nearby speakers"]." - prefs.save_preferences() - feedback_add_details("admin_verb","TGR") - -/client/proc/toggle_hear_radio() - set name = "Show/Hide RadioChatter" - set category = "Preferences" - set desc = "Toggle seeing radiochatter from radios and speakers" - if(!holder) return - prefs.toggles ^= CHAT_RADIO - prefs.save_preferences() - usr << "You will [(prefs.toggles & CHAT_RADIO) ? "now" : "no longer"] see radio chatter from radios or speakers" - feedback_add_details("admin_verb","THR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/proc/toggleadminhelpsound() - set name = "Hear/Silence Adminhelps" - set category = "Preferences" - set desc = "Toggle hearing a notification when admin PMs are recieved" - if(!holder) return - prefs.toggles ^= SOUND_ADMINHELP - prefs.save_preferences() - usr << "You will [(prefs.toggles & SOUND_ADMINHELP) ? "now" : "no longer"] hear a sound when adminhelps arrive." - feedback_add_details("admin_verb","AHS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/deadchat() // Deadchat toggle is usable by anyone. - set name = "Show/Hide Deadchat" - set category = "Preferences" - set desc ="Toggles seeing deadchat" - prefs.toggles ^= CHAT_DEAD - prefs.save_preferences() - - if(src.holder) - src << "You will [(prefs.toggles & CHAT_DEAD) ? "now" : "no longer"] see deadchat." - else - src << "As a ghost, you will [(prefs.toggles & CHAT_DEAD) ? "now" : "no longer"] see deadchat." - - feedback_add_details("admin_verb","TDV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/proc/toggleprayers() - set name = "Show/Hide Prayers" - set category = "Preferences" - set desc = "Toggles seeing prayers" - prefs.toggles ^= CHAT_PRAYER - prefs.save_preferences() - src << "You will [(prefs.toggles & CHAT_PRAYER) ? "now" : "no longer"] see prayerchat." - feedback_add_details("admin_verb","TP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/toggletitlemusic() - set name = "Hear/Silence LobbyMusic" - set category = "Preferences" - set desc = "Toggles hearing the GameLobby music" - prefs.toggles ^= SOUND_LOBBY - prefs.save_preferences() - if(prefs.toggles & SOUND_LOBBY) - src << "You will now hear music in the game lobby." - if(istype(mob, /mob/new_player)) - playtitlemusic() - else - src << "You will no longer hear music in the game lobby." - if(istype(mob, /mob/new_player)) - src << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) // stop the jamsz - feedback_add_details("admin_verb","TLobby") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/togglemidis() - set name = "Hear/Silence Midis" - set category = "Preferences" - set desc = "Toggles hearing sounds uploaded by admins" - prefs.toggles ^= SOUND_MIDI - prefs.save_preferences() - if(prefs.toggles & SOUND_MIDI) - src << "You will now hear any sounds uploaded by admins." - var/sound/break_sound = sound(null, repeat = 0, wait = 0, channel = 777) - break_sound.priority = 250 - src << break_sound //breaks the client's sound output on channel 777 - else - src << "You will no longer hear sounds uploaded by admins; any currently playing midis have been disabled." - feedback_add_details("admin_verb","TMidi") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/listen_ooc() - set name = "Show/Hide OOC" - set category = "Preferences" - set desc = "Toggles seeing OutOfCharacter chat" - prefs.toggles ^= CHAT_OOC - prefs.save_preferences() - src << "You will [(prefs.toggles & CHAT_OOC) ? "now" : "no longer"] see messages on the OOC channel." - feedback_add_details("admin_verb","TOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - - -/client/verb/listen_looc() - set name = "Show/Hide LOOC" - set category = "Preferences" - set desc = "Toggles seeing Local OutOfCharacter chat" - prefs.toggles ^= CHAT_LOOC - prefs.save_preferences() - - src << "You will [(prefs.toggles & CHAT_LOOC) ? "now" : "no longer"] see messages on the LOOC channel." - feedback_add_details("admin_verb","TLOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - - -/client/verb/toggle_chattags() - set name = "Show/Hide Chat Tags" - set category = "Preferences" - set desc = "Toggles seeing chat tags/icons" - prefs.toggles ^= CHAT_NOICONS - prefs.save_preferences() - - src << "You will [!(prefs.toggles & CHAT_NOICONS) ? "now" : "no longer"] see chat tag icons." - feedback_add_details("admin_verb","TCTAG") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - - -/client/verb/Toggle_Soundscape() //All new ambience should be added here so it works with this verb until someone better at things comes up with a fix that isn't awful - set name = "Hear/Silence Ambience" - set category = "Preferences" - set desc = "Toggles hearing ambient sound effects" - prefs.toggles ^= SOUND_AMBIENCE - prefs.save_preferences() - if(prefs.toggles & SOUND_AMBIENCE) - src << "You will now hear ambient sounds." - else - src << "You will no longer hear ambient sounds." - src << sound(null, repeat = 0, wait = 0, volume = 0, channel = 1) - src << sound(null, repeat = 0, wait = 0, volume = 0, channel = 2) - feedback_add_details("admin_verb","TAmbi") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -//be special -/client/verb/toggle_be_special(role in be_special_flags) - set name = "Toggle SpecialRole Candidacy" - set category = "Preferences" - set desc = "Toggles which special roles you would like to be a candidate for, during events." - var/role_flag = be_special_flags[role] - if(!role_flag) return - prefs.be_special ^= role_flag - prefs.save_preferences() - src << "You will [(prefs.be_special & role_flag) ? "now" : "no longer"] be considered for [role] events (where possible)." - feedback_add_details("admin_verb","TBeSpecial") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm index 340546002f..8ab162dbc4 100644 --- a/code/modules/mob/emote.dm +++ b/code/modules/mob/emote.dm @@ -33,7 +33,7 @@ continue if(findtext(message," snores.")) //Because we have so many sleeping people. break - if(M.stat == 2 && (M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(src,null))) + if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_sight) && !(M in viewers(src,null))) M.show_message(message, m_type) if (m_type & 1) @@ -66,7 +66,7 @@ src << "You cannot send deadchat emotes (muted)." return - if(!(client.prefs.toggles & CHAT_DEAD)) + if(!is_preference_enabled(/datum/client_preference/show_dsay)) src << "You have deadchat muted." return diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index fabca03049..375b1e1e13 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -4,7 +4,7 @@ if(!client) return - if(speaker && !speaker.client && istype(src,/mob/observer/dead) && client.prefs.toggles & CHAT_GHOSTEARS && !speaker in view(src)) + if(speaker && !speaker.client && istype(src,/mob/observer/dead) && is_preference_enabled(/datum/client_preference/ghost_ears) && !(speaker in view(src))) //Does the speaker have a client? It's either random stuff that observers won't care about (Experiment 97B says, 'EHEHEHEHEHEHEHE') //Or someone snoring. So we make it where they won't hear it. return @@ -51,12 +51,12 @@ var/track = null if(istype(src, /mob/observer/dead)) - if(italics && client.prefs.toggles & CHAT_GHOSTRADIO) + if(italics && is_preference_enabled(/datum/client_preference/ghost_radio)) return if(speaker_name != speaker.real_name && speaker.real_name) speaker_name = "[speaker.real_name] ([speaker_name])" track = "([ghost_follow_link(speaker, src)]) " - if(client.prefs.toggles & CHAT_GHOSTEARS && speaker in view(src)) + if(is_preference_enabled(/datum/client_preference/ghost_ears) && (speaker in view(src))) message = "[message]" if((sdisabilities & DEAF) || ear_deaf) diff --git a/code/modules/mob/living/carbon/brain/emote.dm b/code/modules/mob/living/carbon/brain/emote.dm index 1995ff5e1c..f29167f1f3 100644 --- a/code/modules/mob/living/carbon/brain/emote.dm +++ b/code/modules/mob/living/carbon/brain/emote.dm @@ -70,7 +70,7 @@ for(var/mob/M in dead_mob_list) if (!M.client || istype(M, /mob/new_player)) continue //skip monkeys, leavers, and new_players - if(M.stat == DEAD && (M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(src,null))) + if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_sight) && !(M in viewers(src,null))) M.show_message(message) diff --git a/code/modules/mob/living/carbon/human/whisper.dm b/code/modules/mob/living/carbon/human/whisper.dm index 8817c43528..157310291a 100644 --- a/code/modules/mob/living/carbon/human/whisper.dm +++ b/code/modules/mob/living/carbon/human/whisper.dm @@ -116,7 +116,7 @@ for (var/mob/M in dead_mob_list) //does this include players who joined as observers as well? if (!(M.client)) continue - if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTEARS)) + if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears)) listening |= M //Pass whispers on to anything inside the immediate listeners. diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index fe33cfdcb9..54af2697ec 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -248,7 +248,7 @@ proc/get_radio_key_from_channel(var/channel) for(var/mob/M in player_list) - if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTEARS)) + if(M.stat == DEAD && M.client && M.is_preference_enabled(/datum/client_preference/ghost_ears)) listening |= M continue if(M.loc && M.locs[1] in hearturfs) diff --git a/code/modules/mob/living/silicon/robot/drone/drone_say.dm b/code/modules/mob/living/silicon/robot/drone/drone_say.dm index 40f0119c99..b0f89a70ea 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_say.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_say.dm @@ -9,7 +9,7 @@ message = sanitize(message) - if (stat == 2) + if (stat == DEAD) return say_dead(message) if(copytext(message,1,2) == "*") @@ -34,7 +34,7 @@ for (var/mob/M in player_list) if (istype(M, /mob/new_player)) continue - else if(M.stat == 2 && M.client.prefs.toggles & CHAT_GHOSTEARS) + else if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears)) if(M.client) M << "[src] transmits, \"[message]\"" return 1 return ..(message, 0) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/borer/borer_captive.dm b/code/modules/mob/living/simple_animal/borer/borer_captive.dm index b153c78c8c..2d6bfc34b3 100644 --- a/code/modules/mob/living/simple_animal/borer/borer_captive.dm +++ b/code/modules/mob/living/simple_animal/borer/borer_captive.dm @@ -28,7 +28,7 @@ for (var/mob/M in player_list) if (istype(M, /mob/new_player)) continue - else if(M.stat == 2 && M.client.prefs.toggles & CHAT_GHOSTEARS) + else if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears)) M << "The captive mind of [src] whispers, \"[message]\"" /mob/living/captive_brain/emote(var/message) diff --git a/code/modules/mob/living/simple_animal/borer/say.dm b/code/modules/mob/living/simple_animal/borer/say.dm index a5e5a34d58..0d4cdad06e 100644 --- a/code/modules/mob/living/simple_animal/borer/say.dm +++ b/code/modules/mob/living/simple_animal/borer/say.dm @@ -38,5 +38,5 @@ for (var/mob/M in player_list) if (istype(M, /mob/new_player)) continue - else if(M.stat == 2 && M.client.prefs.toggles & CHAT_GHOSTEARS) + else if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears)) M << "[src.truename] whispers to [host], \"[message]\"" \ No newline at end of file diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 871215a519..9f1eb24dd1 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -391,7 +391,7 @@ proc/is_blind(A) name = realname for(var/mob/M in player_list) - if(M.client && ((!istype(M, /mob/new_player) && M.stat == DEAD) || (M.client.holder && !is_mentor(M.client))) && (M.client.prefs.toggles & CHAT_DEAD)) + if(M.client && ((!istype(M, /mob/new_player) && M.stat == DEAD) || (M.client.holder && !is_mentor(M.client))) && M.is_preference_enabled(/datum/client_preference/show_dsay)) var/follow var/lname if(subject) diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 8eabd67951..7a954a4b31 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -54,7 +54,7 @@ src << "Deadchat is globally muted." return - if(client && !(client.prefs.toggles & CHAT_DEAD)) + if(is_preference_enabled(/datum/client_preference/show_dsay)) usr << "You have deadchat muted." return diff --git a/code/modules/mob/typing_indicator.dm b/code/modules/mob/typing_indicator.dm index 147edb1afe..8a8d92f2c7 100644 --- a/code/modules/mob/typing_indicator.dm +++ b/code/modules/mob/typing_indicator.dm @@ -15,8 +15,8 @@ mob/var/obj/effect/decal/typing_indicator typing_indicator.icon_state = "typing" if(client && !stat) - typing_indicator.invisibility = invisibility - if(client.prefs.toggles & SHOW_TYPING) + typing_indicator.invisibility = invisibility + if(!is_preference_enabled(/datum/client_preference/show_typing_indicator)) overlays -= typing_indicator else if(state) @@ -54,35 +54,20 @@ mob/var/obj/effect/decal/typing_indicator me_verb(message) /mob/proc/handle_typing_indicator() - if(client) - if(!(client.prefs.toggles & SHOW_TYPING) && !hud_typing) - var/temp = winget(client, "input", "text") + if(is_preference_enabled(/datum/client_preference/show_typing_indicator) && !hud_typing) + var/temp = winget(client, "input", "text") - if (temp != last_typed) - last_typed = temp - last_typed_time = world.time + if (temp != last_typed) + last_typed = temp + last_typed_time = world.time - if (world.time > last_typed_time + TYPING_INDICATOR_LIFETIME) - set_typing_indicator(0) - return - if(length(temp) > 5 && findtext(temp, "Say \"", 1, 7)) - set_typing_indicator(1) - else if(length(temp) > 3 && findtext(temp, "Me ", 1, 5)) - set_typing_indicator(1) + if (world.time > last_typed_time + TYPING_INDICATOR_LIFETIME) + set_typing_indicator(0) + return + if(length(temp) > 5 && findtext(temp, "Say \"", 1, 7)) + set_typing_indicator(1) + else if(length(temp) > 3 && findtext(temp, "Me ", 1, 5)) + set_typing_indicator(1) - else - set_typing_indicator(0) - -/client/verb/typing_indicator() - set name = "Show/Hide Typing Indicator" - set category = "Preferences" - set desc = "Toggles showing an indicator when you are typing emote or say message." - prefs.toggles ^= SHOW_TYPING - prefs.save_preferences() - src << "You will [(prefs.toggles & SHOW_TYPING) ? "no longer" : "now"] display a typing indicator." - - // Clear out any existing typing indicator. - if(prefs.toggles & SHOW_TYPING) - if(istype(mob)) mob.set_typing_indicator(0) - - feedback_add_details("admin_verb","TID") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! \ No newline at end of file + else + set_typing_indicator(0) \ No newline at end of file diff --git a/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm b/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm index 0dd7e46ed8..69aaac47c0 100644 --- a/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm +++ b/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm @@ -121,7 +121,7 @@ continue //skip monkeys and leavers if (istype(M, /mob/new_player)) continue - if(M.stat == 2 && M.client.prefs.toggles & CHAT_GHOSTEARS) + if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears)) listening|=M for(var/mob/M in listening) diff --git a/polaris.dme b/polaris.dme index 6a7b2f7782..17eecd50cd 100644 --- a/polaris.dme +++ b/polaris.dme @@ -972,7 +972,6 @@ #include "code\modules\client\preferences_factions.dm" #include "code\modules\client\preferences_savefile.dm" #include "code\modules\client\preferences_spawnpoints.dm" -#include "code\modules\client\preferences_toggles.dm" #include "code\modules\client\ui_style.dm" #include "code\modules\client\preference_setup\preference_setup.dm" #include "code\modules\client\preference_setup\antagonism\01_basic.dm" @@ -987,6 +986,7 @@ #include "code\modules\client\preference_setup\global\02_settings.dm" #include "code\modules\client\preference_setup\global\03_pai.dm" #include "code\modules\client\preference_setup\global\04_communicators.dm" +#include "code\modules\client\preference_setup\global\setting_datums.dm" #include "code\modules\client\preference_setup\loadout\loadout.dm" #include "code\modules\client\preference_setup\loadout\loadout_accessories.dm" #include "code\modules\client\preference_setup\loadout\loadout_cosmetics.dm" From dfe77a0669d40e971cf2e11fd61bfb2a553d3541 Mon Sep 17 00:00:00 2001 From: Yoshax Date: Mon, 21 Mar 2016 19:12:13 +0000 Subject: [PATCH 17/64] Adds changelog --- html/changelogs/Yoshax-morepreferences.txt | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/Yoshax-morepreferences.txt diff --git a/html/changelogs/Yoshax-morepreferences.txt b/html/changelogs/Yoshax-morepreferences.txt new file mode 100644 index 0000000000..9318611ecb --- /dev/null +++ b/html/changelogs/Yoshax-morepreferences.txt @@ -0,0 +1,4 @@ +author: Yoshax + +delete-after: True + - tweak Player preferences has been overhauled. Please update your preferences, found at "Character Setup" > "Global" > "Preferences", as they have been reset. \ No newline at end of file From f3066a926f66378cba400f1e17f9697d7304d056 Mon Sep 17 00:00:00 2001 From: Ithalan Date: Tue, 22 Mar 2016 02:27:31 +0100 Subject: [PATCH 18/64] Fixes Anomaly Analyzer reading the wrong variable for the effect's range, resulting in nearly all anomalies erronously showing as transmitting their effect on touch. --- .../research/xenoarchaeology/machinery/artifact_analyser.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/research/xenoarchaeology/machinery/artifact_analyser.dm b/code/modules/research/xenoarchaeology/machinery/artifact_analyser.dm index b449237d77..ebab6fac76 100644 --- a/code/modules/research/xenoarchaeology/machinery/artifact_analyser.dm +++ b/code/modules/research/xenoarchaeology/machinery/artifact_analyser.dm @@ -181,7 +181,7 @@ out += " have been detected " //how the artifact does it's effect - switch(A.my_effect.effect_type) + switch(A.my_effect.effect) if(1) out += " emitting in an ambient energy field." if(2) @@ -224,7 +224,7 @@ out += "low level radiation" //how the artifact does it's effect - switch(A.secondary_effect.effect_type) + switch(A.secondary_effect.effect) if(1) out += " emitting in an ambient energy field." if(2) From 8d687ccbbc6c50d48cd8ea8fffda9a7bc138f1e8 Mon Sep 17 00:00:00 2001 From: Datraen Date: Tue, 22 Mar 2016 09:03:19 -0400 Subject: [PATCH 19/64] Adds Changelog --- html/changelogs/Datraen-SpawnTurf.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/Datraen-SpawnTurf.yml diff --git a/html/changelogs/Datraen-SpawnTurf.yml b/html/changelogs/Datraen-SpawnTurf.yml new file mode 100644 index 0000000000..ab5d705c17 --- /dev/null +++ b/html/changelogs/Datraen-SpawnTurf.yml @@ -0,0 +1,6 @@ +author: Datraen + +delete-after: True + +changes: + - bugfix: "Artifacts will no longer spawn on floor turfs." From ea579b2da68eff0c207ef8c6d4f93f85391b9385 Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Fri, 4 Mar 2016 21:52:41 +0100 Subject: [PATCH 20/64] Preferences now store client key instead of the client itself. For reasons unbeknown to me, the client var is reset when the client logs outs and thus the preference mob cease to be. Now stores the client key, and acquires the appropriate mob based on that, if possible. Also removes the sanitation check because the holder isn't set before the preferences are created. Fixes #12341. --- .../client/preference_setup/global/02_settings.dm | 7 +++++++ .../client/preference_setup/preference_setup.dm | 11 +++++------ code/modules/client/preferences.dm | 12 +++++++++++- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/code/modules/client/preference_setup/global/02_settings.dm b/code/modules/client/preference_setup/global/02_settings.dm index c44f9c4e44..2e1c058138 100644 --- a/code/modules/client/preference_setup/global/02_settings.dm +++ b/code/modules/client/preference_setup/global/02_settings.dm @@ -25,10 +25,13 @@ continue pref.preferences += client_pref.key +<<<<<<< HEAD for(var/preference in pref.preferences) if(!get_client_preference_by_key(preference)) pref.preferences -= preference +======= +>>>>>>> 19b7ebf... Preferences now store client key instead of the client itself. pref.lastchangelog = sanitize_text(pref.lastchangelog, initial(pref.lastchangelog)) pref.default_slot = sanitize_integer(pref.default_slot, 1, config.character_slots, initial(pref.default_slot)) @@ -50,7 +53,11 @@ . += "" . += "" +<<<<<<< HEAD return jointext(.) +======= + return jointext(., "") +>>>>>>> 19b7ebf... Preferences now store client key instead of the client itself. /datum/category_item/player_setup_item/player_global/settings/OnTopic(var/href,var/list/href_list, var/mob/user) var/mob/pref_mob = preference_mob() diff --git a/code/modules/client/preference_setup/preference_setup.dm b/code/modules/client/preference_setup/preference_setup.dm index 81c1f4c463..f02ecddc7b 100644 --- a/code/modules/client/preference_setup/preference_setup.dm +++ b/code/modules/client/preference_setup/preference_setup.dm @@ -212,13 +212,13 @@ /datum/category_item/player_setup_item/Topic(var/href,var/list/href_list) if(..()) return 1 - var/mob/user = usr - if(!user.client) + var/mob/pref_mob = preference_mob() + if(!pref_mob || !pref_mob.client) return 1 - . = OnTopic(href, href_list, user) + . = OnTopic(href, href_list, usr) if(. == TOPIC_REFRESH) - user.client.prefs.ShowChoices(user) + pref_mob.client.prefs.ShowChoices(usr) /datum/category_item/player_setup_item/CanUseTopic(var/mob/user) return 1 @@ -227,5 +227,4 @@ return TOPIC_NOACTION /datum/category_item/player_setup_item/proc/preference_mob() - if(pref && pref.client && pref.client.mob) - return pref.client.mob + return get_mob_by_key(pref.client_ckey) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index f000ccfe7d..288e7bffcb 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -109,10 +109,14 @@ datum/preferences // OOC Metadata: var/metadata = "" +<<<<<<< HEAD // Communicator identity data var/communicator_visibility = 0 var/client/client = null +======= + var/client_ckey = null +>>>>>>> 19b7ebf... Preferences now store client key instead of the client itself. var/datum/category_collection/player_setup_collection/player_setup @@ -125,7 +129,7 @@ datum/preferences gear = list() if(istype(C)) - client = C + client_ckey = C.ckey if(!IsGuestKey(C.key)) load_path(C.ckey) if(load_preferences()) @@ -186,6 +190,12 @@ datum/preferences /datum/preferences/proc/ShowChoices(mob/user) if(!user || !user.client) return + + if(!get_mob_by_key(client_ckey)) + user << "No mob exists for the given client!" + close_load_dialog(user) + return + var/dat = "
" if(path) From 78abc7f7906790c2ef93261e5c37fa0678913f27 Mon Sep 17 00:00:00 2001 From: Yoshax Date: Tue, 22 Mar 2016 16:07:58 +0000 Subject: [PATCH 21/64] Fixes cherry picking errors --- .../client/preference_setup/global/02_settings.dm | 12 +----------- code/modules/client/preferences.dm | 8 ++------ 2 files changed, 3 insertions(+), 17 deletions(-) diff --git a/code/modules/client/preference_setup/global/02_settings.dm b/code/modules/client/preference_setup/global/02_settings.dm index 2e1c058138..203b561eed 100644 --- a/code/modules/client/preference_setup/global/02_settings.dm +++ b/code/modules/client/preference_setup/global/02_settings.dm @@ -25,13 +25,6 @@ continue pref.preferences += client_pref.key -<<<<<<< HEAD - for(var/preference in pref.preferences) - if(!get_client_preference_by_key(preference)) - pref.preferences -= preference - -======= ->>>>>>> 19b7ebf... Preferences now store client key instead of the client itself. pref.lastchangelog = sanitize_text(pref.lastchangelog, initial(pref.lastchangelog)) pref.default_slot = sanitize_integer(pref.default_slot, 1, config.character_slots, initial(pref.default_slot)) @@ -53,11 +46,8 @@ . += "" . += "" -<<<<<<< HEAD - return jointext(.) -======= + return jointext(., "") ->>>>>>> 19b7ebf... Preferences now store client key instead of the client itself. /datum/category_item/player_setup_item/player_global/settings/OnTopic(var/href,var/list/href_list, var/mob/user) var/mob/pref_mob = preference_mob() diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 288e7bffcb..3b9929fc6f 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -109,15 +109,11 @@ datum/preferences // OOC Metadata: var/metadata = "" -<<<<<<< HEAD + var/client_ckey = null + // Communicator identity data var/communicator_visibility = 0 - var/client/client = null -======= - var/client_ckey = null ->>>>>>> 19b7ebf... Preferences now store client key instead of the client itself. - var/datum/category_collection/player_setup_collection/player_setup /datum/preferences/New(client/C) From f3cde3af017eed832d13433d9afdfb72c87d30b7 Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Mon, 7 Mar 2016 18:33:36 +0100 Subject: [PATCH 22/64] Both enabled and disabled preferences are now stored. The purpose is to ensure that new preferences that are in neither list get the appropriate enabled/disabled setting without having to utilize the savefile update path. Also attempts to optimize the acquirement of the preference mob. --- .../preference_setup/global/02_settings.dm | 69 ++++++++++++------- .../preference_setup/preference_setup.dm | 9 ++- code/modules/client/preferences.dm | 2 + 3 files changed, 56 insertions(+), 24 deletions(-) diff --git a/code/modules/client/preference_setup/global/02_settings.dm b/code/modules/client/preference_setup/global/02_settings.dm index 203b561eed..718ed5d12e 100644 --- a/code/modules/client/preference_setup/global/02_settings.dm +++ b/code/modules/client/preference_setup/global/02_settings.dm @@ -1,29 +1,52 @@ /datum/preferences - var/preferences = null + var/preferences_enabled = null + var/preferences_disabled = null /datum/category_item/player_setup_item/player_global/settings name = "Settings" sort_order = 2 /datum/category_item/player_setup_item/player_global/settings/load_preferences(var/savefile/S) - S["lastchangelog"] >> pref.lastchangelog - S["default_slot"] >> pref.default_slot - S["preferences"] >> pref.preferences + S["lastchangelog"] >> pref.lastchangelog + S["default_slot"] >> pref.default_slot + S["preferences"] >> pref.preferences_enabled + S["preferences_disabled"] >> pref.preferences_disabled /datum/category_item/player_setup_item/player_global/settings/save_preferences(var/savefile/S) - S["lastchangelog"] << pref.lastchangelog - S["default_slot"] << pref.default_slot - S["preferences"] << pref.preferences + S["lastchangelog"] << pref.lastchangelog + S["default_slot"] << pref.default_slot + S["preferences"] << pref.preferences_enabled + S["preferences_disabled"] << pref.preferences_disabled /datum/category_item/player_setup_item/player_global/settings/sanitize_preferences() - if(!istype(pref.preferences, /list)) - pref.preferences = list() - var/mob/pref_mob = preference_mob() - for(var/cp in get_client_preferences()) - var/datum/client_preference/client_pref = cp - if(!client_pref.enabled_by_default || !client_pref.may_toggle(pref_mob)) - continue - pref.preferences += client_pref.key + var/mob/pref_mob = preference_mob() + + // Ensure our preferences are lists. + if(!istype(pref.preferences_enabled, /list)) + pref.preferences_enabled = list() + if(!istype(pref.preferences_disabled, /list)) + pref.preferences_disabled = list() + + // Arrange preferences that have never been enabled/disabled. + var/list/client_preference_keys = list() + for(var/cp in get_client_preferences()) + var/datum/client_preference/client_pref = cp + client_preference_keys += client_pref.key + if((client_pref.key in pref.preferences_enabled) || (client_pref.key in pref.preferences_disabled)) + continue + + if(client_pref.enabled_by_default && client_pref.may_toggle(pref_mob)) + pref.preferences_enabled += client_pref.key + else + pref.preferences_disabled += client_pref.key + + // Clean out preferences that no longer exist. + for(var/key in pref.preferences_enabled) + if(!(key in client_preference_keys)) + pref.preferences_enabled -= key + for(var/key in pref.preferences_disabled) + if(!(key in client_preference_keys)) + pref.preferences_disabled -= key pref.lastchangelog = sanitize_text(pref.lastchangelog, initial(pref.lastchangelog)) pref.default_slot = sanitize_integer(pref.default_slot, 1, config.character_slots, initial(pref.default_slot)) @@ -46,7 +69,6 @@ . += "" . += "" - return jointext(., "") /datum/category_item/player_setup_item/player_global/settings/OnTopic(var/href,var/list/href_list, var/mob/user) @@ -60,13 +82,12 @@ return ..() - /client/proc/is_preference_enabled(var/preference) if(ispath(preference)) var/datum/client_preference/cp = get_client_preference_by_type(preference) preference = cp.key - return (preference in prefs.preferences) + return (preference in prefs.preferences_enabled) /client/proc/set_preference(var/preference, var/set_preference) var/datum/client_preference/cp @@ -79,12 +100,14 @@ return FALSE var/enabled - if(set_preference && !(preference in prefs.preferences)) - prefs.preferences += preference + if(set_preference && !(preference in prefs.preferences_enabled)) + prefs.preferences_enabled += preference + prefs.preferences_disabled -= preference enabled = TRUE . = TRUE - else if(!set_preference && (preference in prefs.preferences)) - prefs.preferences -= preference + else if(!set_preference && (preference in prefs.preferences_enabled)) + prefs.preferences_enabled -= preference + prefs.preferences_disabled |= preference enabled = FALSE . = TRUE if(.) @@ -102,4 +125,4 @@ log_debug("Client prefs found to be null for mob [src] and client [ckey], this should be investigated.") return FALSE - return client.set_preference(preference, set_preference) \ No newline at end of file + return client.set_preference(preference, set_preference) diff --git a/code/modules/client/preference_setup/preference_setup.dm b/code/modules/client/preference_setup/preference_setup.dm index f02ecddc7b..a890db16f5 100644 --- a/code/modules/client/preference_setup/preference_setup.dm +++ b/code/modules/client/preference_setup/preference_setup.dm @@ -227,4 +227,11 @@ return TOPIC_NOACTION /datum/category_item/player_setup_item/proc/preference_mob() - return get_mob_by_key(pref.client_ckey) + if(!pref.client) + for(var/client/C) + if(C.ckey == pref.client_ckey) + pref.client = C + break + + if(pref.client) + return pref.client.mob diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 3b9929fc6f..cc339556c3 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -109,6 +109,7 @@ datum/preferences // OOC Metadata: var/metadata = "" + var/client/client = null var/client_ckey = null // Communicator identity data @@ -125,6 +126,7 @@ datum/preferences gear = list() if(istype(C)) + client = C client_ckey = C.ckey if(!IsGuestKey(C.key)) load_path(C.ckey) From 3d78390ce6f99b0164cc8bbfb4a3cf27ececc1df Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Tue, 15 Mar 2016 09:05:04 +0100 Subject: [PATCH 23/64] Adjusts preference defaults. They are no longer affected by whether clients are allowed to toggle them. --- code/modules/client/preference_setup/global/02_settings.dm | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/code/modules/client/preference_setup/global/02_settings.dm b/code/modules/client/preference_setup/global/02_settings.dm index 718ed5d12e..b7322645be 100644 --- a/code/modules/client/preference_setup/global/02_settings.dm +++ b/code/modules/client/preference_setup/global/02_settings.dm @@ -19,8 +19,6 @@ S["preferences_disabled"] << pref.preferences_disabled /datum/category_item/player_setup_item/player_global/settings/sanitize_preferences() - var/mob/pref_mob = preference_mob() - // Ensure our preferences are lists. if(!istype(pref.preferences_enabled, /list)) pref.preferences_enabled = list() @@ -35,7 +33,7 @@ if((client_pref.key in pref.preferences_enabled) || (client_pref.key in pref.preferences_disabled)) continue - if(client_pref.enabled_by_default && client_pref.may_toggle(pref_mob)) + if(client_pref.enabled_by_default) pref.preferences_enabled += client_pref.key else pref.preferences_disabled += client_pref.key From c7dd36a29773f1ed528a34240a9661b04e7c613c Mon Sep 17 00:00:00 2001 From: Yoshax Date: Tue, 22 Mar 2016 22:45:39 +0000 Subject: [PATCH 24/64] Make human vessels properly adjust capacity on species change --- code/modules/mob/living/carbon/human/human.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 37034b29ca..74d8b54a93 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1115,9 +1115,11 @@ spawn(0) regenerate_icons() if(vessel.total_volume < species.blood_volume) + vessel.maximum_volume = species.blood_volume vessel.add_reagent("blood", species.blood_volume - vessel.total_volume) else if(vessel.total_volume > species.blood_volume) vessel.remove_reagent("blood", vessel.total_volume - species.blood_volume) + vessel.maximum_volume = species.blood_volume fixblood() // Rebuild the HUD. If they aren't logged in then login() should reinstantiate it for them. From e62863e1b3e26e0d69f98164bbec92c0c3f9f917 Mon Sep 17 00:00:00 2001 From: Mark9013100 Date: Tue, 22 Mar 2016 23:03:21 -0400 Subject: [PATCH 25/64] Renames the security .45 --- code/modules/projectiles/guns/projectile/pistol.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm index 4cba9ea012..c3a48cd374 100644 --- a/code/modules/projectiles/guns/projectile/pistol.dm +++ b/code/modules/projectiles/guns/projectile/pistol.dm @@ -1,6 +1,6 @@ /obj/item/weapon/gun/projectile/colt var/unique_reskin - name = "vintage .45 pistol" + name = ".45 pistol" desc = "A cheap Martian knock-off of a Colt M1911. Uses .45 rounds." magazine_type = /obj/item/ammo_magazine/c45m icon_state = "colt" From 1f5a7ea1f2601c08eeaab9399d749099656504da Mon Sep 17 00:00:00 2001 From: Neerti Date: Tue, 22 Mar 2016 23:14:00 -0400 Subject: [PATCH 26/64] Adds a new optional 'ambitions' system. Players can set custom objective-like goals for themselves, which everyone can see at the end of the round. --- code/datums/mind.dm | 7 +++++-- code/game/antagonist/antagonist_create.dm | 5 +++++ code/game/antagonist/antagonist_objectives.dm | 18 ++++++++++++++++++ code/game/antagonist/antagonist_print.dm | 3 +++ 4 files changed, 31 insertions(+), 2 deletions(-) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index c058e2ff5d..bee722f1b4 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -61,10 +61,13 @@ //put this here for easier tracking ingame var/datum/money_account/initial_account - + //used for antag tcrystal trading, more info in code\game\objects\items\telecrystals.dm var/accept_tcrystals = 0 + //used for optional self-objectives that antagonists can give themselves, which are displayed at the end of the round. + var/ambitions + /datum/mind/New(var/key) src.key = key @@ -147,7 +150,7 @@ if(href_list["add_antagonist"]) var/datum/antagonist/antag = all_antag_types[href_list["add_antagonist"]] - if(antag) + if(antag) if(antag.add_antagonist(src, 1, 1, 0, 1, 1)) // Ignore equipment and role type for this. log_admin("[key_name_admin(usr)] made [key_name(src)] into a [antag.role_text].") else diff --git a/code/game/antagonist/antagonist_create.dm b/code/game/antagonist/antagonist_create.dm index 072dd88bee..97ad11af30 100644 --- a/code/game/antagonist/antagonist_create.dm +++ b/code/game/antagonist/antagonist_create.dm @@ -105,6 +105,11 @@ show_objectives(player) + player.current << "Once you decide on a goal to pursue, you can optionally display it to \ + everyone at the end of the shift with the Set Ambition verb, located in the IC tab. You can change this at any time, \ + and it otherwise has no bearing on your round." + player.current.verbs |= /mob/living/proc/write_ambition + // Clown clumsiness check, I guess downstream might use it. if (player.current.mind) if (player.current.mind.assigned_role == "Clown") diff --git a/code/game/antagonist/antagonist_objectives.dm b/code/game/antagonist/antagonist_objectives.dm index f9b3f8116b..b47bab2fe5 100644 --- a/code/game/antagonist/antagonist_objectives.dm +++ b/code/game/antagonist/antagonist_objectives.dm @@ -30,3 +30,21 @@ world << "[loss_text]" if(loss_feedback_tag) feedback_set_details("round_end_result","[loss_feedback_tag]") +/mob/living/proc/write_ambition() + set name = "Set Ambition" + set category = "IC" + set src = usr + + if(!mind) + return + if(!src.mind.special_role) + src << "While you may perhaps have goals, this verb's meant to only be visible \ + to antagonists. Please make a bug report!" + return + var/new_ambitions = input(src, "Write a short sentence of what your character hopes to accomplish \ + today as an antagonist. Remember that this is purely optional. It will be shown at the end of the \ + round for everybody else.", "Ambitions", mind.ambitions) as null|message + new_ambitions = sanitize(new_ambitions) + if(new_ambitions) + mind.ambitions = new_ambitions + src << "You've set your goal to be '[new_ambitions]'." diff --git a/code/game/antagonist/antagonist_print.dm b/code/game/antagonist/antagonist_print.dm index ea107824d5..62f9eabbd1 100644 --- a/code/game/antagonist/antagonist_print.dm +++ b/code/game/antagonist/antagonist_print.dm @@ -7,6 +7,9 @@ for(var/datum/mind/P in current_antagonists) text += print_player_full(P) text += get_special_objective_text(P) + if(P.ambitions) + text += "
Their goals for today were..." + text += "
[P.ambitions]" if(!global_objectives.len && P.objectives && P.objectives.len) var/failed var/num = 1 From 2ad91fc60cbcf6af734da046e4f2f196bc13ab48 Mon Sep 17 00:00:00 2001 From: Chinsky Date: Fri, 18 Mar 2016 04:15:52 +0300 Subject: [PATCH 27/64] Fixes IB surgery not checking for open ribs etc Guess it wasn't updated after Zuh's encased changes --- code/modules/surgery/other.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm index 721f124e4e..82c6ad543c 100644 --- a/code/modules/surgery/other.dm +++ b/code/modules/surgery/other.dm @@ -27,7 +27,7 @@ internal_bleeding = 1 break - return affected.open >= 2 && internal_bleeding + return affected.open == (affected.encased ? 3 : 2) && internal_bleeding begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) @@ -206,4 +206,4 @@ fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) user.visible_message("[user]'s [tool] can't quite seem to get through the metal...", \ - "Your [tool] can't quite seem to get through the metal. It's weakening, though - try again.") \ No newline at end of file + "Your [tool] can't quite seem to get through the metal. It's weakening, though - try again.") From 9edc1dd5497d15f7c2f2ad841840fe54c64c4680 Mon Sep 17 00:00:00 2001 From: Brian Cook Date: Fri, 4 Mar 2016 01:00:22 -0800 Subject: [PATCH 28/64] Watercooler can be wrenched/unwrenched now Fixed capitalization in some cases --- code/modules/reagents/reagent_dispenser.dm | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index d68be94b9b..42a9204e56 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -206,6 +206,21 @@ ..() reagents.add_reagent("water",500) +/obj/structure/reagent_dispensers/water_cooler/attackby(obj/item/weapon/W as obj, mob/user as mob) + if (istype(W,/obj/item/weapon/wrench)) + src.add_fingerprint(user) + if(anchored) + user.visible_message("\The [user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.") + else + user.visible_message("\The [user] begins securing \the [src] to the floor.", "You start securing \the [src] to the floor.") + + if(do_after(user, 20, src)) + if(!src) return + user << "You [anchored? "un" : ""]secured \the [src]!" + anchored = !anchored + return + else + return ..() /obj/structure/reagent_dispensers/beerkeg name = "beer keg" From 3e0c5f2e4926256386b115afd83d5d2008ca3418 Mon Sep 17 00:00:00 2001 From: Atlantis Date: Wed, 17 Feb 2016 12:39:40 +0100 Subject: [PATCH 29/64] Light switches now glow - Adds a relatively weak light to light switches (slightly weaker than a light bulb), so it is not that hard to find them when the room is dark. Colour can be red or green depending on whether the light switch is turned on or off. - Increases light switch power usage to 20 Watts. For comparsion, a light bulb has 60 so it feels apropriate. - Light switches now run off LIGHT APC channel rather than EQUIP. - Updated: Light switches now layer above darkness when powered. Light intensity slightly reduced. --- code/game/machinery/lightswitch.dm | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index ded7ebc9b9..7bf740889c 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -7,10 +7,12 @@ icon = 'icons/obj/power.dmi' icon_state = "light1" anchored = 1.0 + use_power = 1 + idle_power_usage = 20 + power_channel = LIGHT var/on = 1 var/area/area = null var/otherarea = null - // luminosity = 1 /obj/machinery/light_switch/New() ..() @@ -31,8 +33,12 @@ /obj/machinery/light_switch/proc/updateicon() if(stat & NOPOWER) icon_state = "light-p" + set_light(0) + layer = OBJ_LAYER else icon_state = "light[on]" + set_light(2, 1.5, on ? "#82FF4C" : "#F86060") + layer = LIGHTING_LAYER+0.1 /obj/machinery/light_switch/examine(mob/user) if(..(user, 1)) From eb085f1160783b7ca39e0f222789779d378e1655 Mon Sep 17 00:00:00 2001 From: Yoshax Date: Wed, 23 Mar 2016 13:43:34 +0000 Subject: [PATCH 30/64] Adjusts lightswitch light cost --- code/game/machinery/lightswitch.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index 7bf740889c..74f60a3a72 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -8,7 +8,7 @@ icon_state = "light1" anchored = 1.0 use_power = 1 - idle_power_usage = 20 + idle_power_usage = 10 power_channel = LIGHT var/on = 1 var/area/area = null From ce1e4bc33b17cd2705bc34c32a139988bb778584 Mon Sep 17 00:00:00 2001 From: Mark9013100 Date: Wed, 23 Mar 2016 16:09:21 -0400 Subject: [PATCH 31/64] Capitalizes pill description. --- code/modules/reagents/reagent_containers/pill.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index e31c009677..7fc7707c28 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -3,7 +3,7 @@ //////////////////////////////////////////////////////////////////////////////// /obj/item/weapon/reagent_containers/pill name = "pill" - desc = "a pill." + desc = "A pill." icon = 'icons/obj/chemical.dmi' icon_state = null item_state = "pill" From 200057397a4a93095818cbabcab462a33ec0f116 Mon Sep 17 00:00:00 2001 From: Mark9013100 Date: Wed, 23 Mar 2016 16:19:41 -0400 Subject: [PATCH 32/64] Layering fixes for bedsheets/curtains --- code/game/objects/structures/bedsheet_bin.dm | 2 +- code/game/objects/structures/curtains.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index 23d819afa0..1a2ef15eae 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -19,7 +19,7 @@ LINEN BINS /obj/item/weapon/bedsheet/attack_self(mob/user as mob) user.drop_item() if(layer == initial(layer)) - layer = 5 + layer = MOB_LAYER + 0.1 else layer = initial(layer) add_fingerprint(user) diff --git a/code/game/objects/structures/curtains.dm b/code/game/objects/structures/curtains.dm index cc67d80ac3..ab2b940ace 100644 --- a/code/game/objects/structures/curtains.dm +++ b/code/game/objects/structures/curtains.dm @@ -1,5 +1,5 @@ #define SHOWER_OPEN_LAYER OBJ_LAYER + 0.4 -#define SHOWER_CLOSED_LAYER MOB_LAYER + 0.1 +#define SHOWER_CLOSED_LAYER MOB_LAYER + 0.2 /obj/structure/curtain name = "curtain" From a0fb25d5379114e84ce38eeeeeaae93ed1d7aca8 Mon Sep 17 00:00:00 2001 From: Mark9013100 Date: Wed, 23 Mar 2016 16:51:26 -0400 Subject: [PATCH 33/64] Adds a inhands sprite for the CSI kit --- icons/mob/items/lefthand.dmi | Bin 120052 -> 120449 bytes icons/mob/items/righthand.dmi | Bin 121554 -> 121848 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/items/lefthand.dmi b/icons/mob/items/lefthand.dmi index 728255c84172d2f19c7887cb81d555c6b83003cf..ff683bc069e80a8558f783cb697ee023db91d86d 100644 GIT binary patch delta 19698 zcmY(q1zc3k_XoVB2$F)7fP{ilBHc(^q|)8e-EavBkrV;xRJyxM0qI_H0qI?q?%MaR z&+q?!-gjW{-a9ipcjkM}oH^&rnd8Dcfu(n1Suk8H9~24<1U600Ki3o>vH104=?Zabg;xqH9jHX`jbO0`|Q)3qVv(o zL^DnHN}LCQd;YC{+d4nA77uItcbQaVnk%O4)~>2&AEw6lf-S zUp{k#sR%da-4ym5UAE8!uIm2sVaU6(6!FC0Z>7sRm_t$zDlqu7sH>|VOb#meX@&rH z>!}4rMG>hG^5?9}w7zGLW*xIJG|LU#-=5|FT|>RogFqfZUdg_E|4R8Qa^6EWpDVor z6^|7<0jE7PVHt0pQrp5-4bOye@v*3Z7)k5{SM zd=r=U{Sz=b`Ch+w(m0|_70k(o1^Ll)Tc1uv6l-#?E^PCbN(zO#3GrWJM`i+YNXox+ zwd`#&Q(;k;(cC31?#S1_jDNsZ&w#e&Oi!7Y7TZZ;lWt2MNc*#k0c~doKEY^(aw>R}iW=F_xcB3pxzwc5*zsAm75n z*@!;jV^3|u{p-)Sw}F$kr3#^+#pg}660+!Y@Ck#BlvMR09zcOtG%|H#U$K(Ew>5rq zx1suf6++P!;s$CT;1#XIos`Z}&-@7>ea&gP1D^K9#AxEEwirWR%gU}fm*NCjH+rYh zMk>+=bpjbA6DxZWvd=`9dV;(Rd?Kg&-{h0DkS=t?pF zDm7{~1ZFiY5o(GFGL^Vm`w4KKztlP+Jaa-fB&+lbJ*vL-E<)^d*m}cS?c;IYvY4{P zOdX|S<-F`CGNYqfwCM3$n*QsRS{!bWb^!`Dw_iRpTbnDR=-Wvm5CIkX;a9IT<+`gT3mPYp_FzsSqQsMoV z(%(5685E?5DH`g-$sQ6rPv#@ldShdv zJpI{LVebou@QQDeMup9?^`_&nqJ_POm}{V#mDoE7$Vt45W+&L;X%@%vE@n{J)4prC z^3X0~4iLr3%}itV;LtX{VCeY*RBB;Lg*_Hec`$u98Hd`{{@H?ho!GYDZBQmhg|9AC zHlc%zolVWEH3AEQYTo^nYb|ro8SbJ!cj22fX*LnW(3kvWwfyS-e&|<=vXSVQE@B=p zdl2sRUae8zavz)3q4q@W3>=sp2AfG$-_5na{~{psJ2Pcs|)^5qkVx>6%tc$W8@3%h$@kD#b)U<4T> z;4qj#B8vSB7q#SJ58ghGyCGsx7@!s0c)jHE3ztzPjMgNq?%BONhnTifhB7Yp%SxB>E;lf>K-xtTK#s z)A}Gdl^`^C-XJz)aIb=3L`+Pv z?dJX-cPE(j$vct`eu`MS*1^Vg3+yy1aNL8oU(~K*Nwi9jI(92hxxG2~gT!ELmO^sV zkKBBG+>A4PFo#1OBl|h_1wrgd#|h?Lr(Xbcz+1|KaYv;r%0eu&8}n~?#|eOWcM=O) zJu3e#oYvbuOnpn=ff?_cG!p?+&yo+$Ck~9*(utPA9L@9jzao$Fu#M^+YL-y2?y4Un zL-f7)7DH3f{5ofU9(Nmjm5(mXXHZ6vo%-X^1ki7bs@&pqeA-(($MqK4dpY1?Z*zG< z$Hp-1qw@3TX^)|i9#tVcK4lJ=FXy`77S9}|=fEcK`nZnIqGb+-F!&bZHR&*0#%#$` zWhl5K;ymr(b@5%HvK88Dp+qdT1>w@dquE(Cim|h^ZT`r)A2rEde-;Z(p<$Aq-ux`A z+{dn2re(lN(e<0AXPZA-yCfw)9bN;?10^eocGWWTEE<@VU5QEh0*JpXQO| zyicn9#3uKd&1tahftuoH4wvc2uNm#$r|toJ#>rf|qw!3eVv}<2?X~Y_=IQw$>6pv)g{`U| z-0q<C*5{uAa;@U8O7;Q_>gvjhtN!5pP~Dmfu`g&YeAP?*_OgHgG+$`a!^!LEvg=f(+ux z$`@cVBAg2Znr{LfYRX=HW>>x~k3Hiytkg>ral_Xv)BEhDUwP??=xy3zZSCPnnL2up z01gXTId4K{B8lF)2MP!}?23I1YoeNpva07&Xf~F5xWqvaj%e8(UJ`WO>5B@UYcw?~n4;kJrdU#onjZnM_N%XBiyUnPgK!7Kj?#$6pP# z2|Lakai{xAPU@cgkWqki)Oi?0vfz9uS35!Wtwi)`FP$3rTDF!CGhev{!)q2n?p`t-a$WDIK!XVkXmSu=1Yh*WqX_0Y z)Sc8CD9elj9r#wou1;QIKt3#u$k;IMA5skb?#kq>*`dsRT+SIsEPhN9dXGAY;dVbv z)#Jzi%i(!v2}{Aolva-J1p_~EBxB{>nCA)y#-ew~NN7PyxFs=%Ok1!%*K*llPo6nG zST1ip1H#^5l0>cE-J_>`QCT?eqVj3AF)rgoK!=a90RKEPC7#;kE}(0&IkzxYhNULr zDs^dix)K;q{OE@JDt0^@Yu5_OSme}Z=tn}F<_lRWm!JZ17jc2-@VS(^myb1s8Io*r z!|+7$?&Woj98o$LEp&6w9G=kkqf5Rli2$thUTeu3_2O1{to&{St%THrC-RkPd1Zpr zCH!azEv=2-L#+!gsaj!1kz22A?FNlvV(zs2ZU)SNIJzR!|JI8=r`nwp#hLe6{9@SV z(lP1qkN~JtsUi0-A{r~&+r-$%^-;n<%OQORN{MR2O!7IBncegXN-n*Q5CTeDfH!)q zBqM(cac2-YSR+%POQ)?(+5E}zAe>Sr!XXjomqGw-Zoo}FmLLwcgCO#ltDUF+s=+b5 z=iqdKsODw?CFH>mTVkRbadR!Jr)DDD*`e8&>kmg(_}D46pNf#(IueW$D4ut73f;^h zNMoFe$zS$1PW7bPpXwoXaw*w?6s6Y>KMLmMbd4;0R5t$IOzFG&vDZDwiMaid{|zkU z!R7)7MBMo}OUThk60)4?!1Xs#*IwS*+F`+YUVfo|Iv^fq$3dP%4u!urM`#G zn-d=A)@-V=gqiX0+4KzD?i|{T0yh(qU+OZGu&jy_ieAo-3{-As-fHh?0aaZZOC0ad z3q@oS!k= zNM1+3MS6wJ7C$D$9W@gWR*ncx4g3|@v2;6(YHPnq_qgaBg7t>*!tSS!oi1BEDhxRw z5~QauAHWrggq=JYS3k=KHnML!9RkV&F7LFzJj>tE76GO8_u~83a6QqW*EG zL5owdbRAZ4tuf@*r(t#W4J}oV42-njYCf<)^k_@{>0_@5`;&666rawu5!PJLJ%YFF z&9@P{GCcjAb-mx+0A)xL#2(#9GR#K4bHK8r?X|fQUH;i~0I7*Pauq7+$v!R-jLRr0 z*XwL^$T!uG0o-QJkgo3)ocgO=q;css)12}@L?zF)Uz4gC^Y&RZd2Q7RY<7kDUYQG$&r`oiJN{jvN^9F_H; zulSQ4%xCvts#vxt*JdiP{2m2~?$d>Rb?r8jMo*Jr;QnE>=x)bfLyklO|EdnBrF+ba z8&(A()cpQ6r#rL3j548FZ<4rXsx4#ISHJ%*@|r7DvTy~gq5PnPZ$w)GB?OY3UUr{L z$}7&vnoBEkxFGvqPJYx~N|47CDWyrvEqWE_zjT6!D(Qz|9sSU|*Y}&T>{xr@|$smS82~}bmAt4k5U~5w>$7kVzd#2a&8Q}1&yt9*v$`Wr9wu7QJ*+QRxuRymWnLlSk=bn_hy3dt}WX#U|M}*-n z&G6(ojF^UR=3Dd!JHNsIbQ;`f>LV6?ru~PR?xLId8hkI)^}AcAW$&Liz54hOC@k&a z`SRh&O(*^M7_@if3^x3Jx{7jvh%Ow>tCet~I!+Ct7SkdBY|t)NmLP_q*ahC-9%0Fw zHIWJ0M?`utba4L5Kf-OoJ6cuJ*#2d`-z$e=!^0O$KwYQGLN{ck(+q4BZLJlCUG#R9 zG?9Q-45{k5G;WrxEU&CA=bwQV8N+W=4k-; zG?G@rw*g@T);b9O*L)+apRBK)&S3BA+93?u`;LvO0l6a4o3%}n%mlXhP{P;qON^6C z2j%c-{qaK3HKz8pd*!H?4%k8>_@3yqD_h3-dK+M`-_QUV4%!U)+6SlJjjM~lhZ6TZ zJ$N))T47U5Bhq$0Hh-T!dUE#6zgdfXjk2#Jme&BYO=W&5#qa9uGbl@#!M82c1MS=_ zN~ilin8FGhqi>Ui`Ko_IZG~c-$Xe@r?M@hj)}jROEW!SSUYilF%@D3KgDRgMoJ2#HhWO#o$>58*VZ6Q7ZclW6fR~YQA|af zhYuD@3uOCq$et#FncDA}-jz2`A)u=p2cDbap8G~mF@(YE_D#b@>9)i--_a_0+4Ny7&e6tDJ1Ah$$)sW*TFvBY`So|}m4)@W9_Hqsfnn(j?tnabSQSSrzS z@Pu&|^qK5p4KZNN@-vD*Mu}j%QUQO8aDbzKilfDF28f!zMXsn6g<8 ze$PgH=d~Dg)JtzbovhZ}7{(etQce@QD-|Jp(Ksa1+A@$Q3xQvQws;-$={tV!QqEl5Ed)M^d;~hKorOp3g&x8KM*9*wCi%o9q zU*qF36g54Dz8;AmFUuS*N&+pkV~FEL$rg5c?|sHFf22bFP@JQ;U$}3Hl9AWyyO>n? zTaL^U6!2r|PpGf06&VWgqmf$Mq16FRxRQbbJev#(3X1X1boQ0@9(jVSQ=hL4QK{9$vQ{48LRMfJN!kxbamuN!jD+!efCq(RC= zHP5yx-Dd^fhChQ0_VqblGn|jv``8HPN~^f_)e2AXpdKJr)~Kne)uv!Ok6th{%iJ3I z0t3?wLw0{Z-Bk?(?D5V`W^Wzs?F&d9cH8BA&g<#JqD1Xdk#$5cPu|NOnPr)+_~|fC z7!j{)Jh^E;0?-c5Tk3le95Q zabUaUZ91F*M z$8O;LARrd!0_Vj{As)zJYsUvzL9l$m*6C~_L&Jmd>b5U-r5u5g$6abZr@N#@r|ZD_ zy8o&&gJegAcS%ES>H^rJR`p5j47z1-#(zsnVxE+!3QoIwfBhhZM%JhAtnKFN7kJy7 zamYB0Bo3SSCzIaw_4yN5i&N-nyw~`3-EBBhIq2$RB6t^K2uJJXBW>JG*&lWux9<(;F!G*bejkB+pgNap|iYM#l zsb5d`aeVA)8PZYC`|F2F{atniDE5$il!a_zTi7;dAhbZy<)x0&yS9@SEKz*b8T+ev zMjhIw9U#hL8jc;n_*rx8r=^CB-vS&zOzk$_o=A!s8KGPk4j|(QW%h`_tIv+_r6T!A?u&* z)C4VJNm_GFJNA^VMC(@?OjkACYLqXrf&B40Kje{8?cZs8=i$a_AYY|3bMNR^F$7|F zj^~N>%1(>M6DZ)xCG;r8hfOVMrY-ga|i3fZ|$fOwBTQo1ZxLf?H-Qgr&p-s%>Rn+_QyB*w+o3T~NuL%hWjKQRqaOCDxSn5^__NWBaE0i@H5)13&mbH;?$UjKR@_ zGi7&;eENj_UPI%OQ&~|_N=GN9T$f)3cuSWhnK6y_8W1|?i-&-wgHfuaKkhNZBVszD zo6K9qAE!zQA9{;ytNlvHe6DmS+6@7(^FHI=$*_fYd(V4@R)|Pz?LlswtyUoJr6aPz zoeo_XE)45Vefr-r-0*m@{aHbpt|P48R@+JQ+NnFVKvZz*JFrlJK??(DupqJZlD#*? zrto*<#m33qEsH7Z=9g{(G|zudMA7lq{a#j?r?zIXJJ&WejOp)xt=HyD4H>O8RltT( z&fKMOyHkKKIbzsiT)aPlM<3G*e@deI{g{ZI+Mn#VpqnvEv%&fA*F^#v9s#7(a{9+% zhNx^LdbxnL&R5aU2?4Hn=kUlqJ5*;dPfR0f`K9f7lIz;YVsK%MZ&5eLVt2UreK{Mg zjpy43p34WGzS%$MdR?0;O?&#e^qbJi?bb}CX>~pLP(u?7f6B;+0l99Hq^Nx>{zT}(7|Lc%(R ziEVIKCKLfJ4{I5DdvbE3D!K7fQS)^5qy8FmjMysj(wBYQ@;<1P36Es7`e2{xh!gnC zfkF19GI*bAZWkP zae{!3)!EHwoh74(+w6{%HZY){F4ISNWahMt=nIgAf9YyPY z2a%xbT>E!8Npz=yRSBW$b))Bj$rs?P-Ud4S&CBkJ}wEZl*I!+$piuR?{(=J6#fnD_vX+kF3_g{;y+ZhGq9?(A!4; zOOOmKaF^tNNiQe{8N_!us{#-Ur_X7!<$Bi3U7~nkIalryoJP$eEmJ{{xB0aew*c zy@x_1!MKDG11iHiQZHZ#^ajG(lYcua;kLU8hHXp$5m*J9ot8X5?2TrmMuLA^8BBM= zH&uos>|!?m%O(6THw?_>nyJ&R9QG{y*RRy)|8~xtNqB>$c)3N$qdV*bP5m{n%Vo)1 z;gO7Wmu+$zG#*Es3n-^ZL)1ZOZ8^Z$3B5zA%JM`xg(E&b9;mcFc}CjcJF)SOY4RvM z{P=i>cclMiFs|`(N1%}B{v&(_?#Y|0k^Fhd1k;}A%EdE&-nzwpx4KF5%YM-PxPJTG z+92E7Se~v1QD?f?t(wjw`*UaU{?Wn-P47LBrhlpqUrcOT_tHc)Up#0;{uSgIc?Ei2 zjizqvO{30F00(-}>2O2T(4yIf*@DI2PoH0KauT**#4O<1hC(MMf|-^$*wi(5Iyq5x@~PfV(e0) z&B%L_GE>r1oh5E}rWfHUVTfkC`J6%d)rMp`8`oXkCCq*#Z*=NxrTq1!U<{qjuX5Ce zG(D!IQa8uz8DYwObN#q+%TgMb>x(;w zpT)WoIz!mxSGdK1LL`;(E985;YWqbIb#U`4Z~s9003;77V!9M-)ESy*P;(;SOa~H> z^bRq-Y(+gtV16G0ayw37$J1ZEb`dN&D1NhCN6X_;Yk<6@_goIN;IB7b{QJ&bqt1ch zTSC%ja1m)x{)=}8_^#f@IK=IsvM{U)9AjGE`;n26sc36&*NZVSc77#!KO)67skQb4 z?$T?g@3^IvzH}&Rk1+AZD-t1#VUUFFNKD014S5DeGf2`;c>?w?yvEIhEe5F|Fu=Wl zq{dM`d(UU%JCA8eVH`QxxFm$2X|Tj;VOZX6oHv$$|AANGCCig1COvCPZR@@6u8E&N ze@+a^dWOg6)9PNl;{*G@-FM^Dy3`MQUA+Xq1F`Oq45#WA9+g{n`&HNJm(uPpQG&o! z>kriez%`CP{VS?0(4F>YxIYm-)aUl;a-oRE3FYI2>J?xWwbx~7K$)h-)75j5t?Z&K z!a8ia#gQuuVm0$`bTcn6y&)YlJf@E!uCfY~P$)A9!I>7X^-sdJx+J<2U5V4WwzimV zVLn~a#8ct_exq*51+kh#J%uQxHwFM8Hh+CewD}QJ#gt`+?Ykc5ZYz<}$6!1idAzs808!C+a1~hKUP5{XxGbRJM*c+4Kj7R& z^=+E<+I`XByIR^~QVd)%FgJe;u2%OTpq{`?72s{d=e(u}=>QjNNJqImB&&64D+LGF zIV^fA`*MyB67bDEpTyJfO`x8QDG$W%UP73cj5&pXjSV&gn7fK9ORi%k-N$w8jbTtg z&pMK`?fgupv?DdRcm{3ZuF{A6xj7w{$B!}gr*Q(dYyY6Z&h&wuUF0MI(H$e*gi^I5 z1mwFQu9~f;AbOh?s1**+xvQi6^C|ry`X#kTl(r?4Nw+u!*Vy-@T4m)k9`db_g6`pT zh8zHHsCh9ZdIC_Ij23)`T}gU>absqZdD{%6T*HgYN9*i#@6ig}gE*e=uUN!P-12xL z=lHP=$fe7jN={d+B~NdzMLbb2LF^3c8|NzJ7f`nis7BOO?*eM&A9zt#r$9B4%2aEC zcunf{$7V5I??~E*VnvI=ip$@kf)P zv4E2+PSFN@bbEa>_8uG8+5hYgt}|(5$nMR(F01K9Xcf6=9YxeC7 z1}H~TNpziY-t4b*Q=R)CeQ_?7#EqiwwZ5|_xpk!_sw{r10=tA1=C=JBEbJiy z5H_#FTRt8=;h}~_%Tm0h7k2&yjq|)dcX}x4FSetiw0H3LPZX^nhdyeYV&JBUu+alf}Jipg=Vp@P77Sm*)&chTzXmne~e39=ebHEU+qFD`Qm2RU5C=c8%hRnsE#Yx zqd)TbkC<{A;=X_1vZ>ozYHwd+2z)IB0Qcbh(I4o!ef3VmDuJ|lGzkqBQ2+hK;m={v zJX>I1?v9ZlzrWJjp;~cSU~cj7wrq>Kua@rthD{wk*~I@Ze=)A0hhXPa%=_5t{c7XT zzHzsCST)^fxuGN;=xWN1F*({8YPi@)bvoVAzQ-T{=Qnwpxcei*nq-t7HG|1W*ITDo>BAw%At5lHD0ob>?+ z^w8kGg@O7R*2&r{`5EX*8V3c}_)j8+)Z&S5DU zIbV;ppK-rNx8A;>w3OeC%jU}$IeL8Gu;&FtzhWd8qv!39xDd6sr5YozsI4DD+LU@7 zdz?gD;iY%Pu^KxnXE12e>XZOZ@t%?k64mQucNAY?nIr@o#jNsiJLY9;PvzIKqbfAF zr88L}nCEufBkH%@%}9|>mTVRWC}cN}Zt7tNc0gK)2h64H*=+Gx7M zC+~tr#7u=T77Y!Jk(}N11IjNgL70VvoO{%~4;X-^MGv4xauxE9(Xb^fGs56xIv5v_FX8M-FD;JPHZa=Upe_!W)m63bi?eI*7R@YM2a zNwJN!O86g6b!?R2b-U9Fx3fve)Dp*< z7ug@vmGYlBLzx0w9K^oIiBl6`49&vn^%~RMa#*`p5_thmR}Cx9@G2%q3uI%ai{})6jElJd6V>* zBQDzi;@{$Qu?hb_%KbuC)YSb)1pjA9FulM}vIYI$|MYv{Uo_GG%z`qvc(CGs^&&I` zKD}p1lEN?U3BOZvpH!Ga^uHz_mMH5m%(9lo*xtkqYZ0rmR57mQst0`in(XQN+EhyO z1^YGh;~$Q~p6|&aKY46BxQ%cMO+9I6Bi$!m;m>2e8~RO z+nw`N0`+QMro&c~v%yy+$7^c+kPvVdhs1(+=1?7#>lD=Z+wdKZL7=p7@K1!K9$`(&s?HkUwMCk{mzxuV=4>o%Gh=#ZV$sO#E{e6W=wJs+T*q-)R$({Xh zx7SdwO_YO;x@;>mm-CaxW!&DNGP*3q6|$E~;)R^=vNZrzwEV2r(*DYSh0*Z#Rl+h) z1F!>1_w4w0h@aO+UoGkON*)IFDUQVYNWyHi?Pz2gnRTbjQefv7G>{tz3tRwZ<2^J@ z1?IiRiA{;u^!&AaVn!=0p_=#lk=!YVgNiUOftEJSjTZZx)E-Y4(?ZUmR$Dx3Tlyk) z*IRkuXoIR~I(tJ=)~u%d4t=Lx{n|1jP{DCY@&-$z&6%86$Fn82;+jDh%_2Oy(}mU7 zHwCIQmrgszTjxGKZ}xPb$ujMmmlM2T+j9bICt;1Q4ntS$U;Ow8gk7I~K64HzhV?X{b& zy;tWW0+dDzdR?T?3#UB8o5sRAXa)TF)V`|c;jedT(<43Ir@?75m@ZL_Z-vhmmDMv0 z-u4r12AtposDBy^jfIuH1NQuq?svDx#xnk0*2hFXM_%TH=WMt4M$HieNE5{7_)Qwa67aawbwTbdYB36E>>)%7!X_pXJWteCJ4K~=!maVnA16PUv~WT=0y zHT{^Dq~8wfxl+=Bt^bTq*3UBN=26tcB`!v*%o>Rof)3M_CpHn@cL;8s^G8IcElba? zOGzU&YyID;TEBLVsCkoQ`rW<82Ff+nM*)5f*KDXO_B|=8&QNo4&LaBb zk6dUhD1R*h3d_SN!@Lxp(Ae*^!>8nen2~c(shKUd;EE`$(1b= zMzl4b50s1PIPt-SkC79a?pvc6o5Shd`W~>yl2_Nf^Qg1#k_))DrTAy3*7eEMuw}>g z+r$01Zk~}sp#8QAIJ=#BURM8YK6=)KR@VfCt*n|}quhIGFYG9?>&i4EiPW?ygwDog zvq02*b4jmf`K9LiE!NfV<(I+eZ|007ZvX~9fQ2=^>A52PBOd*CNpDai-gIvuECW zQ=a5jJ+a?Go1mfG&GUd$=Mxxbgt(7Q08iN2mUp477=P`*MiGFWQe*=ls~8z{)uP5Am16C$MJ^j>y8yMXXy z@;??UsLuG+00W#SFY_x`{?hCBE;>39%a;N)CVCD7^*j&dN1z2Fy+ti8Yv-ouiP*_{S!Qv+nd|c@;-)9AM}wUI#&;7yv1^p`3*&jG+5i%jE#;OrMd)QUhbj5s=FwXod#5`MybK$!}0Nor`&{J9&mQ$ z$bET!{R^&-4eA?dFd`|-mTU2tIwRyTU_yNVIQkZX{E zfgDgZS8QVb4Vr3wagoXxR-V(w(?Jspqlry7Jn-LFV4{bs1eI=jMHIq&jEfbK>l z%s&l56v%Kn%Wtbyut$s{B(UK*u3p|GsbJ>au#rtaaoim8!+_jeok7jT_@il{yMrm^ zFt_P}vD~oOt3?id;C$0x@XbSUZ$)6_ABepz1DuR2hJu0;5(Jd|T|3~8Ovzp`Q!-dd zv4NHu-=r|jr!#Bnr|aowS)PBMVl!OyJ}(>ug=f)JG4`nIiDxmE_;0Sjo$;sd_#4yk zzLlR&3#G-*TD|gMc@@)}`v!9UdzbrD?`oypC}jlo=JxyAO4?o2ISd6ZnA_XiaYvVR zopEnKnO~nyxQIhD0Wj{*YR^{X)yQIBwUo5Hy*Kdi$w2?W+Z&7vX!D%0wKV25gBCZ$ z!NY`awO|t|Sz)-w)t>;AmP1`qLV0Z3yr;C4o#%NNcMs@OTK&7d^*5@)Yn&**W}E-W zL!lKC&;KYgUcU!Xh(fr!7r*HO7C%3|dv~V7DR}P+@IbfwC-ddo^cNqdp-`*}0MGiL z048k-OgnSjX=-W;$7%$pKSdFi>vf|`0en&$)9+qN=~1Ce*)*N7$*c21E9p!pNZtAx zMUO;=OgRMDJl`{TVNJKG3{|@FMKI`Y6+hRMGY{D(_hErVre2S_L1M5v(pTGkZj?da z9%}CPEVW!&@`J~-9q12tvHU^_15QwjS-a$yn+OD#f2}YN+r6epDoLF;`FO&pP7cTq zP>)>w?fuB?Zl08>rAa|?!yTAl_2kupLO$e(VX#Z>lYiOR39b>lurT%0Vg?kK)=udTZm7hZ={rudG#TcUNo_kY=jL=|4`67Ix{3jMeAqr_(cOB|L!Hl3|_XkiOo0mG(AhWKt zo{xzu4*mIDh(!(o?ehIA)m#q3(=PKVoN!PV0;qj^Fft20 z)rEZ5DmqB7qAmHVH*BCyR1|72uI~*;yA>7|j`_7j(}}`Ge#ZSLRNm<8)7@6)V3tSG zP^jMlje^}y$=!v|hSdD3={Nq9Y`zYg!#!WfsDYVV&|nzYLoR$?QUKRfkX_4Ws{r?@ z;~qzQxr(bCx^m??hSv5~dz=7sk)au(Hly(@)VtZI=aXu{F%^FXY&E{^y-I;)ejeP4 z1?ZI4ZpNvVB{!75iR3D7#}!+SV}@QVF`P2)@3o>bMlZf@rvG9?tT?-9TJkiQA8Cm0+=k`(Wr*Av3JmrrQQKfd)5 zXu;a2Z(6jpW4KGjpjIR`Yrh%5GOkAVt<+7;n!&WU?2YK~Q*u^dC?R~ou7}m_Z)1t< z#R4frTwIOzEB@#G=1Er27YuHv`qO0v*3f0m9R;Ipd+Mj48S>=Glb(fy0;rH#i^Ruw zotgNXH4F+glOZ$?>oz@UnySjyyYeCN@-fPJlx|e+4S{-jF@nK#o0DYuLrLL()nzfZ zYOeDCq@>UoLXwQTFem{om716O6$ez8;2TJVb!WmlltJHWi|<9%-cjN(>igHPWb-BH z-9e@-52He&kP&cgz4sFNZqMtnwG!3*t%oyZ9eY+>| zUt}I*3B*-xm_<9kkt85N(-VF0>A!@pDJ!}8zoTvF9OthB8p;9x+lmA&Vz&Qw0{><7 z)poVv{ddF<-BUTG04TJEOf*UPC&rWiH?WT!NFvpij^JR#k`zE(9DH*7-;0>4+EXzp zJ-xlx*5)0ICZI4|*F&UW#br5b$TlxQ*Te*~jnd?d30Hq)wzzL+Qc?1h%Qx+S0Pr9R z$q!h7QeuC_Ci%H4}+_w{u&*h6om zC5qSI4pt87q2*bxTXVFR-@K7tJ)*C#ufqE^Bw!~&JC-*UrocfED;Kp_of0H2dVa}x zHHZ^nm~NgpRsHXLAK3dGsUb|zIW5%fLWra3js@v)YqmeE2`Uy=Wu8pi$+}tQSi4!{ z>xY-G^gYg6?g#7#nk6wHaz9AeTlaF+@Qr?)wWf=JF)adjsjJ64&ztLp1(Ipe0HPB= zDcKM${C^TR*U)lrGuYy^cT3^c#IM4VmjJ*0v86;kPAzb8$9LZ$Ox2~flv9b4WTujO zn{l>MVu{UN99zOMSsyNUV7yy0+Xh{(0&)b;=Ykvgjc@*_van#wR{t-cl9Y6o2%xCc z06pz)4L(DlA?N(3+4h(jAO#oa0b=pGiR^RmuF-QU$z**%xNZM_g?;p_97eYJ>I$NY ztx9G_E-|*MVEclzwEHd7hrXr_w4!3a# z_K$;b?k({pQnWI@*WVaU;bdojX1=@jG}Ko=rI9P=yJ8<0*0Gci2GhV)p3`I7`q;$q zyK;9a6h2uOc2c)n!Bz5^Hp7!s{2vhjy95llBJ>nkcxzqL7$|39lE>FuJ-~olsTzCDp z6LXC3vs#-8@*@FwS_eI}o^A&wVy#9Pkmaf0UpO=3ZVFP+j|TcJRO~R%ZVCibguJ=j zk2Fyq_v&>Q%MtWLDNz6ALxCOf#knVbD9DXK_}}m)#{D^&r5L@Sy&KU@2Q0`#5#PRX zqFibjpT21#9)?jMfX_4o>ykJYf;O5V0WII$*^1jk?JVa_43-3_8iyBL0x!#?%9>cF z8bxVE@Bi+fCLTJ)$(q|NzM=^hZ>EQpw$e0@xx7alrXQ(KJY~0-t(RXTg2y6q6M%%R z)WpzyN)9P7wytd>sGy|aTRE4(PBDeif-&5pjNPCR+BWOppFpkM$m9{ zGB;iqmSg>Q&2LvL3it+w3o&tW4qdNeml{Zt%E=jN9I1cJW-BT;6z^ri50%s@S*HvD zeIBYrZ>+*ApAgXFFY7^sPi|fr*T)0}jVXYg9aHr#ysBCbT1CNNo z9#!+T7>$-=)sT0*w#4yjBboUGsnT9v&_Xx{S>#w*p<*=yak}e9F@sGy+TFdU-;}!z zrSt1HIZ47R^&8{!71<3C&#tkT`<|CPYM06=E$_X2N2{CW12R^Xt~4ePvBc%RAP`En zTX$#m)M#e+8T+&K9K-U?p?r3ynyME?epICt4&_OW9zVK^PVQp_bYSi+QENRswc$?L z6iUZuAL!4JvaonkXFD5|m&ameVIdukLkg8P3jF5G(?2kvs;m1YE$tx~AZR*Mu@0g7 z^i_f?Kxbf&VVC_OlS}m0SmX z_o`?|gVNJOw?bZ42Q!ge-wSY3A(o?Ij%w z4CXCAP_1w5--k>)%&`qmLvtUscTkjfYjr7iG`A;#vn*OeqY3!=MCt1^>$?*F#_i3t zWXYwCwatj3{0XC}%g+!BlZ?O)OzK@)NBOgT^^hWOaV2id>bwpPZH-gxJPv7a+~5%7 z;^TvjyCWEXm2CAssD5s%RmpulI5_y}n;aXvPglJGonT1#+vy!9MFlReU==qEmgX7v zIy(e$RbSkj4uFyp+d$GA3*x(H_mXxr#KxR_WJHGqD z8y(9E`sY?RKch^*PY`245{VFVk=RSW@hWe}6O5l5V;XD@mY8fFZvew-jNv0VFy%zPyN9VP0BHOcTT@vclwM zO!1XcC2|2gXKvrk8|%!|F_YwlR_XvGZo=TvEYJGiurplb)1ut(lre?bqjb9gLp(B(GXF8d)uzM z-#Jwvqaqrb|9e$Lv3YPnFv%R?PT}MoU6`$oOH2%{sj0D`lrX`AGbmaowKsWImfOea z-TS@cR>=Mb@#1CbD7|zU)U%0jI%46e`Zc8@AWQ#O>(QhQ??d=ixH{+}$fkO5PY^eg zH$yj4IEpg&Ss!<7XO~9pLZtnBFg$ic)biAJFj<@yU2YYmf|R_dDIaRAwiwu6y+frF zBkpqs9{5bHWnfD9_ASo`uV1Cs++tE8N3p=ZClN;LX64?nn&M^EQ2&I$H*hoW6$4;A zQ(*#uEvwO$(SI@SPP_`51bK<)cS2plw|LHE#!{LXJdKF&BhLc9w&Pud@T^YqOR60Z&@YTR>p^m#cwgTr+h zgxFzbhainppu&cB;pFcsB%s*<@O_BYEO5mT#+(3yzQUC1tYc3^b!AI${K%z0&@J2e zxncduT+RUxFTAnZ@(z;2)!UP_Sf#VKDo5}a2)Q4foV%{3Q3V;F)m=Qo_pzgD9v}GV z-gvtUht%qmT0O{n-B%v%XTCL30E*as1B!<*DL#*W^7%X2mAC;)5=+^D>ZT3fnvc!u zs}7C!7RVwQ+4KAZh9{N?M5_3)tzWA{qrg48r&Liac@xpeYa`C#y`q=XnKU^mF?2!lKaSg!4wo-zONXD{!1NmT zlo5pK9+$0+FHY{DqUvF|B5q62o!cNgO|;}7J9GQ0%^<6JrA}rhz{^8Ah*;)3M zeCZpX1D4XpYQWMo*;l5h_W_u%Lc742uTi@pEa%_6P+;@LG zhM;QuwH=@S!GC3JV|&N)ueBay8ztG3ERWY5*Y$N^#F$QZ?%X-3njEh=E|QVV0Mu!u z=2rSZPr2&u+og6{&z?PH&z?Q~mRWHNHaDwp!D_SW?%QSQ1J=|FS&-_@&SSda7OW;& zMb_8o`1d=>JD+}BPAOV1?|k}kdHnmGqMFmck7_6XeScIt`MYuLrTW~eZ7R91qi-H| zxDCE{svLapR5|_^ugc?3W;dJH@5Z&4CHHl-e7;jBPnJ*2nibPLUV8CGId$@6%eTcY zwbgBKYnD8A?3k}M$BrFq zw*6BlPk)wbUB`|c)1@{q{_<7dI>V{AZw{tZ*1Ve@-$&edGomIH6&1RVId$@6nV+BU z%GYMFZMAYc)%r6sGAx@za&ofF$jFf2{`R+hZ^_BYVa+EwIa#W=jEoF9a^%RcpKFKP z$dMyuMn;BVbGE8Jz)V?IRwkR?|DS-*o8B9>et$h5r^hW+9f1EMfthmi=FPs(Bj4WU zV}#lVW^He{H;>1o`<#pz)9JUsnnY70vX)RgVb=p5Syq1y05Ic|I$I_EcAi_H)psXK zz)TUb8 z7I2R`B>gsQ-aG-5CjH*`xy0g#=H$Jay?4CLo4e$^ zZGn^wpn5O1p1f{Z0I3Z?3m!|B!GE^nColGwzj)!WDf9cui~VKQ(Mvdb`&8W4KMw$q z+wNKH*jA6?|2!`26o8U*gd6fXi5s^mUNP`%jx`}WQej=V;ir1ep+hCe$?^V9Q&m;v zsPI!!ho;|p>#e?JdTfhZ>f>}O09A*ks|y}A9rk`3^a>^Y!`3stbp)i+xg zm!n6I#*Q63px%cQ!kIm$(~THDLIS|U4?i6A{&(Ja2LQqfiWz`fs}0}{>1s~Y2s;Lh zcAi@(FPGK{HE*luLgaK=A2f)8UE82|TnG8;rQjzXuR3}OKY6jg;l~sN3qK2cKaZN~ z%XszD8C!LKlC!7_T&^RaF&s_^F;VU_dsu zY*}mc^bA#fyjp0xKlR!kx75e!RM6-R9?t|lFQ-J2&?Arx9LIlMXKWLGDre4|@q2IA zF`X!%%W>w+8NavX%a>!~#EBuhL&;ulYW*QZVM1EKMLB5am3gV0y)9D5c8ieBFViXkk|23+Xu};pw0F=lj#;o24q-5ZyfBQ(YG!tW1 z@59Dwf=u^TRLi>E0V_m0000z|Gl?iPVBSKo>hD8RTEH(ds2uS`v}9i^06@m}R`HJs*u76z{7;w!z7K@)}U2+{_@3*_~dY%eT(8yt3CX@m&t}@Tm94)YYY{Yun zM5Fr*~t{yO{l?^2;d@~0;~hebgRJ{Op9MEM8QPhj|M`8${Q;cw*|9`Nzyk5sNk z6%;q$MGDM!N4tqa6r zoK+8zoJ|TGA`_aX+U60ul_viF?@^={mDqtE$%zjXdG3sL6o$#(l@S8SRc7R zuAw|DHhCbA{{x6Q$vy&u8u-9Y?9PPl3U?-u{2Uf$5(Yfn+VFqQeaxWKusT`L?d0kk zhHfU zswrG6p0?r3oqG{-DTv03nbiaW3iz5!4o;xbzKec~Rpm+KcB$=Ie&RTs+@atP$xFeh z5D==~St>LO8r2&DmSY4s?q~9}R(>2ckqZ&q9LnHz^U0sw?ES13A`UByyvI%*2%y;| zMEQ@%C568vc_}Ra^4DLP2y=UTPD8!RRHnr&U8REIJkO>0ao}pR!iMLj9-vSnzKBe3 z*TejqxZpRx8x2FDY5MbDa^%S0`8l1~_Qb~4HYzpIc;Mb+4c{FYHjTCR=1J^u??p4y z!zXB@HU2>w(C@`F2={tXe5F?D>RY>*MNWC!9&7WBVRJ2(`%BrhlMvIx=)8#I>R}1; z9ZaeTk7o!YB4i>Rn($M`cQT)01d@pNhSvnO2uzu%U?i>%(HKGRZIZ%_3gV>RS z*nNARASsWuK%sU*1c z3 zz>+n1?ddy&tgso|sO1MRJKT4Vr7KAwWf983E#jMA0|G-^I*!cDFN_9I4_(Pwn#gu% zMy(!e#6;|u^yF(SrcGF$6pSAI6+xtl4!t?{d#UVmv7YoU(Oz*YKyoo7;8!bm`}LUf z3M<4)yJVQl=7!owigAQ^x)slGnbk zpT)@(-g!kY4`V7f%Hs4LCZ+u(NeBXlT{f8b`hJA1*Wlvkld}3fv%355vxLn0?eJ0t z_Z>0rPKDTQw26pNpL)G?u`9+RlX3(f;A znCAwNiYts07q~$`f3+Ij!jqzj&rj~Xk|LDQnC9$yQjhy-2eYkfrrj}4_6 z2U*waJ`Tw#%;|fNq&>$CxNR{~f@7r``BM*li15N(0svcVvI6Wf^PDI)ifQBmQT|9X zOqPT#K$=22q5bUMT^)jldikCyGUW&LUG9?dcpVN)R*ZfJOtWK~7BQyS)f+ZFG^ID^ zUyQjGSbC<$iSylvJSDIQ&;*DDFrM#;2(<+;^ffOXWz46x`Qr439_=L+7PcNxQc=nl zUFPNir#A1CoR|K@$(9LFfxOnE;nlR?_Y~-p6`M1g9XhI}8m(uCCT7`Jwb)I3pMf1a z@aE$_{0O0B!y-I!&hDw>uUo94I1fR5-4iqOHIWqMJ7&Sl;%2(t0eFWFt)^ktVnf=R z_5Qx-yI%t;9~rsVtR3_7)4dH0$0LjPV$8}Mvb|f~p9J53ov`&Hk>oKOMOXCf^y_<1 zp3ti2t+>tN;5^bE&^w^=wEr~CF#bhN}3{1AmT9nrF1!n^H zmo7W;FoQ;;bLi)z?}KX=nUmM%@pHiM@{r}LjT!7?Xdd{pO=b5ik=lxh2iVZif zuDe5B(iX~Zt}Eg0$@73;zP0O}7L4_;>{9YJShKOenrf<)Y%{#TKcZs14RHi&vh)) zuZLz_gXak@VvqE1(5EhobM93I25+QSlS@~}*5&=oA466*;YKXgQ}d|_r}PlWJj|1) z7_E2jJkPm*sga;N|}CRpjy5Xu!1x%$G!RKv;GHl$9}m`@aY1+Ms|n5 z7w62I%Up;*3-M-7Ey+1JDB?mQ#c`HfHiD8fky!KqfS9 zbI-mm-7%)L`T#BHM=N7A`3w6;qj$(iXeXnr+>=po&CxOX0z8c+QV570B&oLiWy6MH{bFL!Bl`d5!w zBJ!ktN9N7dX+y33Ram#@`3!~+VkPwOpz;oBlxZGsKGz%GO`9{CD9pVR=iFT@vmty=Ud57e+A<=IIRGI_T4=S5kpRHx|&^UCB#xcxjb-IWlyd=E#K!Io)3h1;@E9T60eJ^dfOg zrL{~HO>w+^O3vL5UsP^q-OBv-HN?rT)GWer&Pp;Km$->I2f#;qzSSx#`EU}ApRCI* zPTcANm`heYHLe-z0^g?Y5Q~yPwNedNwSNwH&Xp?3dH~Nfp(1k^d{*WLi2zFE1>d%2 zwU#0cLG~Xzm+1Sr{CDu~__yB}j9=ZJdcf9k`Mnt_`#vhWyMTdE-eF_#8D_vn;UbY(ttR95DcUe_0p>&(`ua2+Lz_fI zjaI=e_q?X4dH)?}H7)9ZcV=~mZZEj_M~8qevgcymzBzl3AFSOk2YE)_o@pb)$<|PB7p6L?AdMw5n80!&kitub~MZBgBKW>w7Rg2~=JWN!)AM&ZDga zP~vVoTfUB#bDmEgErd5UMTC@(w~JepPG`aS>BMYmu&za3GDw8xj1z$1+%2W~cT z9yizOEr3=uLm48bXM2l@F{Tv78`k;4DWf-q2Gi-Yu4|yJ{zHe-PZx9uN=hrv$(lHEDhHWNxMwsG;jSq*lEmT%>2Ldf@Y@N=0(8A5)8vWs z;pLG0xz)S3IHK1vgo>*z{VY_QB`r9jFY#F+>EtUhrg@8UgBiu-w$g*ORQ`U)gEDR{ zT|q~!BGOAIab&Cmsha0C$JZOQuENi+5vEgKL8^tub8g z`!dqfnjevu)0o0*j$WX8qt+S}fm1kHL=`kr+!>jeFl-wd24S(g={HzRdA4*Fa0fSK ztg@&yCIvy*9abid;`yGLt9YKZI_|J}JrVw>pxU-!I#nLiNC0^H^l9a!phcxkn^JLn zCfeoc?QiKxaOmlZpy*$0=lq#kb!Lxpx3@4r`+T5F@S6Exl;DrT(>9R-(R}lofz*1G z*N#d#XvMFmb>>GT;h~0+RJ={pWTbI=1K=*KXSBXQg!BfBfgP|I1Tmp0+VXV*T^|{~RKJB{_6r&?PbE zVQ2uU@{9>wrI~j?Z`JT0*H87Wwjlxa)~Ys%?YtsZ4a0Jy*m4B)Duj@BrK5MjFprh6bRK%fP(s?NzorXx2fVmH(8bjVhpIzB8&DYukn|(%xyJ5&D%=tQ}r(PG^&G>1YsFTHDZSYPDkif6o zE&cq%KY77+a=uvlm0!RKv5@KGW&FCE(%ELm@|jv&$}!v@{jFE07q9=C5x29(x|$LF zNl1};q31Igazw>C>g~Ot$;d1Z`{;VGn_<@*qa_vXKx~cFH(BZS64?h%f8ld)HI<(* z#0Z!=E}+O(d!pjWV$0iadMsSexPnf^yM5~u>so8)5soNT@l$Szh^@vJ87TX+#Hs@A zzUigg?;Ot(^QIT!NQCq8$ChJ;msYU}{&e8+#Bbqx>La61jOwrloHKow7|Cxn@-QVU zi#sAbJon5J0^qI<0=M;7`|V3-!t^i9`W1^(xe=dFcFyQ7@j}>x-l$ZnWkHN<_yzYs(s$_FD(}Cl>1f zrO;}3a}ht3PmI>Yiyv!wSLw9v$>5cch#2kbjAuXR`F0|+4x>I@|0Lcp^&EBC7OU|k zIo+FQ2S2n2$nrf!#+P?HLkK&MzO5hON+c6++Sil8PD9_g2RSS@J^1tI4=15hC0#_ZVRhh!;@)QthWK^BYcrt>V(+nyeKqhj~5k+@B=An?SXX?VCx7 z^FNA1A;%UXOX^|ul!hN)X{xJ#dN~{(esB9XQN2~Y$U<5?{P#^cYVfIh-|%n}H8nNU zFfR*>)W+uKykB$V%;}VaLs68PgG|@^Hc$(_kN_l%{7`%M)ohK_Im~5cLmY3E=FVhf zWL`)}NbHo!*(ZIUod3{u8tOs|a@4kY-P3iNbId`8)k7$i$Afh`Q~)+Hc!YP*oyJg4 ziR0PX5Tk{l?Y&Xd^thObmA+7_y9pBKb(EddJM)w!!4!JDFzVgh*(#I+a;AH6$1wj8 zSnZa%53w*a6TBt9malKEO;cqm5MG;0hbIFOr%p$akpzV{j!=@6xHzVEfx0YnM9dn$ z-$FxJr-T5O&!`>1CLk~oCUCaIEOxCI)7hO-Hwe|kb!?&bU1d6Wb)tkAq;L$Su2Kje zRYOW}Sgso>hjW{Gw1&EieutM*x}O7%y8AU18_825?*wDd+>`GarinA}7w&@J zYF)7;o&iG*heyBv#Lu)^dd%>F$NB>X{=K)OcHXwo{aMbwzCJe*IzLaI+$PEKs-#Tp zhi2e1C2)Hd7cIWB`z*#?7^z_N?=|pJLog0G1%DIr7C>Qa6zH$U)9hEJBi%~*Lpa387;OhRWr|c zFMk?TY9?v1D>n=l-p?9J3QEE*L)$Y=QwqIbYvDnRrqlU+VTf+UW=V@83TcTzLkauCb+9 zCK{sR!1&1l;Ux>0~);$ zua=HMqlI21gjQTMqMcqhMt-P^CXz;imzP}fcvs*H%C>_`OYO|CQuOkG+gGLO?divg z^-f}rr97vt+8b%5M4?A&i8r+zd2K`{&S|wFr@N0avTLpj9QdA_ycM8YIv6e|7QdD} zxzRLA0TL5Kh&irxg!~phrhwN*HjKfr67&Y0Z5)o4Tls*VsVYFnJj!q-KR>neb7q zaUtsFXLsbwh1zEywOp4#395J&HW5+@z55z?db*}G^c5jcGL5WF5)snE^oOlB1&|`2 zgx|lTavaIPr|SUPJ>^e)+b6XW0UZa0DD`u^Yz4?=P!I5sot-@hr&^T}6V>@N!#*kd zbU(`xd7tC!msHz6FO$dDSdfscp=>cafw||hS3V*P8@8-ay!OaBWu+Mufkc$^-!(vi z0X~ZguYhj?S!^r;m^5*w~oQV$m(|4Gy_kNf@e{AGD7J9SF2rHGh3L-fjeV9;h6kPD0sh zwTeVtPQvW#%K5w;0ozODE-Ud@Mwhp~y^AMA;1;__qKd$=BuG>c^Ag;1(&nw;UxO-% z(ZSw=aIIGucXDjsYP?$C2|R8ySJZO<$tYkK*5IlZb zE5boK`0f-3`(*i@34fjp2QXB}i4!_Eq{3p|IXpL~tFEc}_h`Kz;!i{`+<_8DDUF1Q zNNSvW-u`vh3(k@~_$aEW91!+8*F*cyK|EVsAwJ72@)x(}``XH;JCVI?@NW{=m&6YH zZLKELWd@0pRw&?SP=}VKkK+{)U6|K^FD}uC&h|VO;MC!*-x@i+#WsWNL>k+BDc;aG zF+F!;dRFl{cLnptqd>8M?k!Mfhxup88kxytLZZOIS_`OQt)o(_77AporYz{)nEAM zWU-bzefhVlU!)@O|Gn0``=Tc?zTHg7!tsW=HAjX_9d###6MBECDqAgyWHbZ>aWX`flh5IW0>({e{L z!TJEvBhywG_(0m>p9EA`?}p*U1-l9A_J#+b?@MXiEkOew*ZfbK1pFdxqVU zdguS^4Fh{I?VBGUBENcpxeL-pynnNSxIDafUmkyx$~jnq@@`nl9K4Z^6G`Nm(OjzU z)i-r$`Ftf2a)^+qt35?>KRUmB$b7HoHy*jUi^~hm5`8A%I>~XaMFGp3fiy1je-t2~ zdX7c`O@}4`bzyeJ>N2sVT6fiE(Osw4IF#7*)(C{ZZh=vDkX@T|pdbjk2rcnui#8`n zeCiFA6Y~HAyPY5_t7=LnP8#PbWkE0$9GcJHO}LKP((!87qIR`e{BF{EqWOTo(}1f$ zvJiDWwS+^c+`Y^4e$>+(7JFkKrSpN zogPeEHt(|gwZ1MhXr?$@^vD9N5ffAMY-oPkS*K;n97~SCorZc3c(pmz=?8S{fyL4? z&w@5u%Fy?;QL7fvlF>#-UwpReVL=Cr9-2eMk|?x>-|Ox*D5|qGbC?hOE)^9O zt4pA2J*P?BqQY-3xg*>-d@a_Mo?V|zw`&DHu1ym({>G86Ib+ufkh8vxwBicL)DkRJ zkp-ixCp)v`pe6kdt`2sb?#zz&S*sFwZ|8IW!ImH$19Wmtw|Ut;ywDvhouLAH;y&k2 ziZ=PLlWT3KQ^&BaS%YIJ!?pZw!?l~Coc@W;PmteA>*Ekqd|nBHPRkI?Rzf<#irKVw zd0XS2QRUj zs)v6MHA69UOHAdDgMZemILRt5&hYi?*LR6MJw1A4fpF?xY}$wxbzg_pAG|~irPfu~ zQ+mQ_41q<_zgK%=1e%rIAIZMRYzMF9US_7fO@9ukM$_=!^FPa?e}=`GuDNxUDP%Lj zW^3~(_>&!tKeoQbl%Rviifb3Zy@mEO##X zlJS*uGA#~q_q0)i@9*u|-`f}mCFnw(lM_l#fK|jnPw@33YLF;kI>dXfv(eM4KB-Q; zwzd}HKl)u(5whh^R8U$fD&QpcgLB@j~x*f)eoTKJpe-@CV#s!^=#%enF3 zzWlYX_=d!pPyA-W?qUQsH|qXfXS(|FsXy&7i|In0hiBybN5DUHw6D9wY*Zl{oQifo z8CR;Brce6R+Z*pPoSM9}>0h50Q>0wxy;Qi5Du$dih*O9)VMuk~k?TPf@3{9o?uS$C zUQk7eW_^z(jyPq`lPfqUCs!}u6cQRM-|i!d#H^DRA*K^eLd&<1=Py$pXhmtLitl5 zKH}j;s5eLjuvX#)BwH$!=mP{^IvPgG0)dEl>|yyo;lqUN-pEc5NW_YKtikDlJ7Pm} zYs9coSGxDsbZH|ntfUG=CupA)SLo=mKt^DWfZJdV{bzpxe-XcH!7uUgX;{u#K1X=3 zg}A{ohQ>Jfp1ONcS(&Vf2{Xje0FrE&hNd>Eanm=8`{PCa0ZMcNqJAX`Yn=hz1TGD$R7aqGYOnKD%^2#thmwMSda>!2UqZDA7D?N z5J93SOqP2OVOJ795$-I^Qg0hQ!mr`QqxFz;Qi?6(N6)Mf$zi3ZpH)nAop{~FB zM^CbhJDm-2k0!W0f0ot*ZVu1}=p)m(q<CkCjQd14j^vT_l%sB+I-O)@%zBI(|2i%m|pl3 z#y(#=ThgWJ$d+>nbQyN1EvEK(VwKokWGd{c{plXC2LxY9oCwW2&oh($xdl@~A!K`9 zP3PwycNQASJv}|Ot1aHegZ2t3i)=ClGlIG|7~JjD@@bNfmL)zcf`a_V*JgGr$M-FO z7bjp3d-UYjd|W}`pQ9reBe}nat3A%w=ZCRULajX!kEhFx>fLS>6I)@q_^QFq;6=1# zfI-2kRZ=K#^!x>GR}su|DEVxdTXIQKNo4Aln;n_@?Mh#8rBuUjyz9!t2cj>C;ign& zVJLl{7gS$9gA_NHNZTX1Y_dMaAOH+ne(k|$OuG57!?+3VC1>rFXA=MX0S%Z?w3@wp zzT8Rt`{PG$r~3usHYwDh?d)DSE}T&^9q>}zF7^MX-{Voy;dQeZF{3!$=tl=$yRGN5 zw|3qqyYrNoez1Lp^Ka)y%N zOY4P+DG&U>4WyQz!m|_%6BHc(xD4&HNueJ~qOq6zHc1}^ovO9fdi3Op$<^uZOq;I= zWMAl2Gjul`4!2R;tg@JV78i=S#6(bZ=kU97-D;vHDfsI-9rJ-^+I ze^ZmNwrUz*vF2w`c@z?I?$hwmF#1+4dH}hr;*cmNqmt09a6{x&P-cKWn<;1r)^ZuO zMW&|GEKPc|+_0cw$?ciU)HC^Kh5xDYUjz2|FQ{ z1XY8svqGhDd(3Pl2>Cl_lq-ssukN4m>bX}EYmkW&siq8R_g=K~4e>u*?N+RZ4$iH_ zIy9@&SJ|MH>F14fNBN5X#jDVLPOADwBHE1(wSGA;L4Q(I56ZP2lEBUu73zp_5w(Ph z0lvk9N?K1-IU-Eo;W%-y={j=MmQJ7=O|d~!G|*^E@9*t&XsnfA4cemj#i#ZW?wqK+ z@x6K*{52p^MwkM$+2e)nZhFi4v%&4BC14>x!wgRRwlZ9@&9kyKL#8syfFXkkLwGGg|C{(8&6VI`nxkT=bPaEGfP|$ zQVGH7osUc`l^CN&Fx`{m|K#IFrlK!OAERV*cPrfT)2%RPCetL22;q!5!yEoj z>h6ASWInakUf_~$&LiArnoMK;!y=}TnY|SMPoSMNjs+VZSYsxHpD+v)w2piAr?>oK zft#{S-+>5u2FvZ};)ff!8l@7&Wdt{J^L@&m?U(X%fS$UD3gd05j0+}aaHN=(`>UE+ zVjN6a|A~<*=OvAUp}(oetu;i*ckaX6Y1`i3UaP~ye`=+A54&M}Q?U{xQ8d%`B?a-o zLB8)D;1@Ammj?8*UaPBX&RnVtgE0IBKa)7o?ZT|(6*C2gpPAzbnIa;p{J)U(ep}ZT zHx+^{P{DF$yJG(iM!{mZSs{vkEp%NnI(1uZ6GMYGMN?J1v|d~n&gZpHn8(I}+xe$H zi7&}~Ez_kh9%nE2aj9n%+`AO}{ExQdNMAW*9%%(4Up*^-COK_R0^( zdW+AQ>e$n~Zam_&)qHDz?!)Kb1|f5!b&NBt=Ic)6V}Fm4yRr5lk+vn%j-`k7o)%AT zZ{`Z&vwTa8enn_&1LM>5>LGQp?ukw| z@c0ZYSid9;4*rAQsEb%;rat@!Lu0PK4cw!;d zyAAu^l+>_}8}#N^fENR9pXrLT}@lrSTueHw475ZaOvXTN9H$4rBKzsW87l%UH3J z`e)^(%R2q5O&fL8zRZ#@JId?D@)-*QrZOn%(MVXrRqnl2i|NUgp8&mx8?_egx4ezD z57s?OZOB-G^A?Xq-IdbM_o=t3U$BUEo?I3zyY{C(P@{zj){#C=I;)?lOTJCg6Iu7+8+n(s|e%lUWvkKMJ|St#U`%*XoEO?iJc`Go3Gt& z-FJDtMfu`Ar9@N7HYH$W_}8G!AXIgpw6Kx(M{lNTAQ9h&KAVD`ZHHcYKORg;rJ3%V zvUFu<{8}6s&OdnMX$GtQ+IFCpLF~4kfrrt~eMIsRz2-UGwJ*`!+7bQ$U3{D~BuA~l zT5#HEx=+K-xG+juO&ciAfVm_e{8O&Z?x(lfUOcMd$FC}YOQ&7Mf!3d=Dbn(|6L!M~ zZ57XQTsw#2y+SYeMo-@8G9!Ztc9nx95%=y6_^b|VP4ZF`*K;BC90P3w{r6iReynAYxVUGST+NW~AYSJ66RZ0^#3*m<4l zz$3a%?R0xlE(sNa1Wz!bOQm`GQ`g*$j;SZs2aGBNpPjJTTwyK48)b^LR~2qe>=wQH`_ycTkP_qfI}Wn8!Eeu&ma zjrF@sshW|;zrEzDn;d=)W zn+SWm&pOAG%|l+=jelF8NTlaKfYBmbz=$B{j&|C-EbNKM4g3WTVav0#-6d8WLb^xb znewz{;uw7`a#KX_Ks);ijK=}4{q^O1;J20wBi^}NG0awB6JwHkJaV|PD&`(oHQwhu zhW_abiFoL4cY}um3ZV3SoxStriFLv98*Dx#5?N4I7HuV3db~Mo3dV8k{OHxSv^u9T ztYWzgnwC$t#|w&!dF|*|#=KD;J2Rvp3v8<*ua^3wuZ*~DE%R1@Hi2iQnIWbe+7%FR z4&3F^#pjTYd+hmG9aqGWU;v2u3q%Fm7j&)pc3!*4hFi?*t)9%O*fkt|py@-ck`$G7 z{~X`b9YIswYfo?Kh0T`ckK9}cgh-2yA`Z%CBPI5)go(jRSb6f2=o)XW?HU^Nrkw@! z7oy@2KvoFVc>j?-LGb7?U(wL$Gj{f$^d6BiCg0@hpF8NTv@-LI28rxZMO0OhiG{ck zvVi7%OphtzFw$bmXIGnYAN%8{eG~aO!&p`pF{z=l;!bb1yboYS3~7uhf3?W-$;*i= zqmw;*h0>zpVl>^*W~aNmJ4lveY`&Ecz-aEUW{1HK1J-$ifWw*RHdHjUw7!>>4e@V6 zuuqmy;MfJ!s~KmMZK-zS>$M+0jMWTjC^)qJvGFNB%zXY@Dy}SM@iP#6CLzh94?Fm^ zc~1nlxm53bzviV)3%fN9Y{BYApWN|Xq%h>#WSa6D7`>Kn;TwgzJ4UIlE97K#eFn4~(= zS$4fU6Gwf__if0lVYeG}7X5B6w_jw^$VJ(DfC9BIj95Qd3F^IZNGy}Mc5P34OvET& zuo+usEZzED^@=#lbaj`u0s!FR2Ho=#?u`7fHjG--K_k~H^b+`v*SsufWd(pf3O z%*4dB)47aR2~Qq9Iv={C{v(r6aP^3G^UO<;+jL(c;;Q|%G6jU2;~08O`Qm!o@H za^#>wNN1xc#~i*P292vQWN}2^)bunhjS^_Hl$Dj2_gqfO0CggAWlh43O_IYE*`3$N*f^g5P(|z(re3x}2TU%s$p7B6x zxuN@1`~p-xthpuBqI{{sFzKQMJfbsr<%@jyN`hFh$O{@(%T{pVEvc>wXDq_WP)7B} z?|nr1?G~1=Zt2m}9gA$Jb1Uoi_=jD8mU`7u3Hb59cix?6=h3Tueae(vm9?s z@qHg`6cv<^WNI+rK}?^BI}vuQLY(Gj_6@Jb8Brp80L;f8UYM%J)Xr7A3J48WuJ%a3 zaS7LNZ?bxJ;L}EmIEdagNFrU8v-$IgX%m)(osH$_VAr5c{0ZEut+w70Kp%LZuJV#T zW?gMP`mlGSqaC=64N~SZ@9z-`bBFq`^aF_FSS7JR$Nma9>IFqkqo;kFs(;@6$a}SOnu@@I-n#P#`Rck)4-^)6OU~HuiyA zUDLqd3N!>=KotTZIh4u&R%<>OUZ^)!lI(TshP)2}ZCoLs$tzr!Vf&*RW16oj=eVDp z)-x>r7uo8j^M&{|aOtlQfBQ68ls7QRT?I2jMwFoMnpZ+-NtDjFB{EqHdG1d7*;#^? zFIX}k5-%IW81)#iB9I8!DvLBEcnVwCq91>ziT#-qy$~J)Y(Kw9B)lvvhc_X`x}RiJ zOWzj(L*A=b7p+I-tTKwB9ibB#O`iQ0JnOKhN5$oBm=FSb;rkG$tr4ckM%T#wG<{aL zBYHADFd({e@*Ug-cousQ6My(o2M%9#fPXeIL3Ka*?1i>}R{mTqmuzqXfyA9^Q-h+S zA~(izFoM_=ZT+Zvqu3(@`Cd&e2q-D&_!h_V9WA2M2IoEWA_w^2pA=Ou#n64m_1Lj$ zV2e8p-HmCrE%9;cA-Wd-C5(8=TJD4dJ(fKFPp<#usf(KdvcaGf zDd$qUQ$Y&?^c!LXg6KCV$npo1!c5e(F}4!C^LvYmo*6;r$Z)bj56CPp@`M0y%azYX z4CrAtE&MQKl>5pc`;h7q9WoHo>kaKt2BWJjJ{MK{$B9Fzy7E91M$Y0qW9}0;l zoAS{1B_(FX(Y^iuLJsIt&OHPj8mj-A(pdMu$wu^hq@>ir|5qrZQL~rw71}XHw{N|7 z4=%%{HH~qTNb@k10r(4MMfteLxu_lsF^R+qrTJfy(RQ@8TwBtvg)^=*~oxIto zr>{Npe%>$#1nk$$D5&bvPq3EqIuGR5;4R){tA=1OnNvJ`(}Iz~5yv$A2Xz5udLNu1 z_j-wlH>@Pj9mn6v2A%c%r*+?(!4S@m@c^7bmDcUnI`wF+T6gH2ZhpXgE|$Rsj6o!i z=M#btLcm(4;(RPfuVE&(Q0t-ZOcg|D;y}EZXQn!+oUvk9AM&!WdZ5aS|9>;DmFqx? znke%<;i^vNln`_{%l)nbA)}bVKGYIYw8%*ll%kOfo6{VTP(=^uaX>R zZ87qA{_C(aC>$(enR#S3AltdJKPNnI=J3C{C*5chv}6&d!-zdZ zk0=pAVreN_=bS<}jhqFy{SwPJD8WylV^t?;;1BdzG=!STUHN>UL6Uq#nL`UHyFzAp zEiMg%6oClXvMuq()F&jXTwE*($)I>Nc4b{FC~b<@s?uf|U`P<|bOuhu*1l!{?O_2( zGatpQhce7>tN4Ii;L<<*p?&KT&3%nkl4c5xGqRd>I&b2*w@(5EdCFnqhG>wAH*ep;d8v1IUw^RUCcDk#|tJZD(1-0DG>ET#__I35(r*j zU-+985$7*VMoAWB5p2)Mz~Ys$Gi!769|HFyvHj*@bEbqD_-JX<`KADAIvT<%9J0jw zC^fR#H~;Hjzq>-}?i?8iW-5=Iy%=mkWfNZlV}Bb{6PEJ9CPV#Ul0h!e80d}H5^Bax zES8|Q!b+1_OaxHsytbJ(9?+~QyK)T>VV_JNxXVzBI4b4F?>Gq&<`(e6k?yDxfOQn( zQ~urdJcdBZx%90LBX{H`*TCBY_%E;ww41g}n^N`BGxlfeJ1M+roLOS7Prw`dn`VQW zKzr|zo}Ty5--2uf?n|Z8VU~-Xv|f|>>@Nuc_>kr0oS;M~)jQfTsXAzwC(7^U2lesJ zQh7U;e`r%W1_a!2WvuPR>N27_)5Yzdo0K+gVj>L!^xYMTTs`>Ro`kQLGN$h0OV$o+ zo$+CLL&aM3y!oKtHw&iLMK<&E)HDYw9HV;aCzz%~+1Y_nR!&0Y;k3{in6=L!wu+AG zQzL_h5iRzPhR%sWeXWxB<-XO3BH_}EOZPlDg%#}tg2HJNQTxN5Sa$OFpR0vRnp?KQ zk`ifM-PDVo&$_MPE*{nqxsm@!N>$pZ-7ETm5B>GjYqPIUFt++c$k#^B>$F`<7$65O z3Q_iL!dd_<OfJWyLPW3vm8zi1@3IGcvTfyR1Hx373cYM@?IiskNunLKJu&JyrSgGO>z z1$INkvumv7-sdG?J#S`dY1idDTD^4dz26E|wmyKUW@~Go^E}ntf_a9p`5@!w;*x>{ ze7{B-fy}bsD}8-or^dPHI=Ky4CQOO0jY#?+3BAJahys?N{6s&1 zTIAL|UK{>HRfKx$(fc_}NJw{m?MK-IY!_0A=>W6O_bq~B+T07(2qC9M^E*q22V#`E zb52&Z_slMHf2=tDI3s?!+x5|8afh1sM^OZSEEbKeRlR%TO-qiKeU^rCLRzOXM7!Pk zyP%$41X$Xr)k5?g4_pMdhPo#qg8DkZc514ig6{sy%A@t}ELV$LpER(jmOo1=NCUx& zsUGHugL!OL;MhUE*s1)W2#yqNy*m(#$!li4O&(iy7sMNlqLLC(2$2CclZCW+U2;H< zl-9+s;emm-@;aZ!##nt2lg?^ky=H@4f$DyLXg?Lt1lgXzp8ahmxQP#tZBeJ|aR;R>%6TvZ4j&p424^^O7 zq2&8X8G~GT#d4Ct0r##dP^IKP-qf%clzvjmGz0wtYLO6nND;}z_L3a)?CFQMcp;B- z(}p{BbyT+(+nk1rp8?DGIg`Tz)rM)~)l3f`);TN@u}?962BVzwLs87DyZoYeo>DUB zo(VJN?Yhfu_Q)uI2vHBng%&?g=u>{i*jNLkSE&KL zzmy@#d%k6k9EOvk5921CQZZ=V{mW>^4JlfH2aY#4sO;sNV$#rTD1ow8lr{J63+^TT z#M@S@x&g^*%OP+X(ttI3sRrj^OjhHP@0+hDgYkXc@i$G_EXoxP6bzH_=02U0xU_bU z+gE6=DWw7vZUNHgOwrhZt^86sZ83rxFXtH|jej~x9SH3<1}9HC@f3k#L(OKV(LcB) zJ84UA(^hRU^t&X5mj`?v_UP{9ZM^c;99oH|gY_&q$bU+0joNjtnDjq?{@fIrO`xG? zA?y1n{1e>5Zo8Fd#d0guhqm_i1LFNkE(vh_-1t{0m9X0bh@(>>kycFiNKW}x-~=c{ z#=kxh=NROt%qvP?+K~Bs%^7rpV$&AEIJiCDUBg~n-`%HD`54|(Sc^O`AT;#W_{bi{ z!L;tS?Py`rMQgZW0iJeraXip9jk;glWD3)m=Dl)Z;?z202^N9w_3Jwi9@R`3JW%NQl4+pCWUob)id{%{RQ%nD z`jQt8?hh?m*r5U>gBdUXoW8QE0Wh-Thdrz&E@%iZU~^7n4PUv3rKZn64%nQB{+XSd zvmh4J(?jT$5lZRZlkLRYu31g^`c2>J}9v2M%3gT93=TR>F>hA9sHJD!9}Z zW1W#=b5jg6e0*(dmIUa#@6Kt|t8hIQl6msv37jY4=>U=KU`foq`8SGL0K`eL)B7CO zV?pJS$CPd7LtLYiqx!326TrjysH z1B05OiFeS!ZP_bh$z84%{r4=H{cmD5v|65y?GI>kJ>uRQ?`@o%}2xRNbmmj{5A7ynOcf z%q;rJ7jO3LGlff`+N5R*~ro%&gOf?DzQcngA6{sX?8#zZ$qPEh=tqu6YRDzwdN!p z&oUQD?ehVEtpO~k1nVi+!CzFwc<(jhl8{)-N0@E-|9=5^28a24Uyl}?KiR)Vhbt>F zIAgHP%*?dxLSog`)ksWC^oF2l3oiiqp>#Ecp8=+UFT+8jN4wAuDgo;Xpebsar=RF~Sk z`14nN>kOsdzB!muS@Ujsd>?V+&4`**R8;6b=H!VJe`S7tzAImwfwtAk?NsZ}$jGp4 z4#~;MG9x2He*4?s_Pr%1Cx1Npy%$_bt0zyBA3Z z7Gu?Kj)(kOEO;zgKJ|4i4xGP^vDul}T3m(!UE09Nj>eXR+5u{|^t*FqV$L}Hu4Xm1 z7MJPUR~#h=Pge?IvnraMZtj5xQTcIWXzT>jYagk@TAjQf^bpPW z5w~JZ$gWb7Q)FstDga>1mNn?#KfBc~Q0;R7;M}=$ID7VNMBSrSQHP{oxpD<(&z|)y zf7fFhtgKHs7uzwS3pCX3QZu?x8*6ck-#zM(^jolb^EgbH@O$6q5(~qcllN-&-tjhX zeh?ETeAs0CKzk~B?CCN2U|~Gvn+tr2A~Cx zCCfnD@uL^}$)CM&$dvj0=*52W$l*&k+6Zrp$Zh*9KHXM}Rlhkd>=b~KbA%f5 zIf)y$DONG?YmPM`J5pg?sNtu2&cTDl$jR~kPIKhQ5l4leiaIp?=9_Q!Ez@ILf80_Z zr&9r_Iy7Bf@Tl>y_gfH6C>dy7YD~2b|8+;YE(V}P))8#OCUQPE2cSS>2s*Y$96bMh zso6Z#yp0Y)1BIW3y`IO;|2>B}yN_e*$!nH&%MuY8g@IpltO?nXx*$+EA)Pklb8^5J zNe67GTmn7X^XUt)pK6X~%z=oA?18~BxrG~o zy<^9Zi4>$rJ;P7!*m{mfe?&y)<00@wF7VolAu?~{mq1DewicK9mXFQO1di>&nn~Zn zoWj3`^o!e)k?nln6uNg1zVLJIj;s8|Ph-i*cJjfr8!SIP01*)p5fM294}mAL4g*jk zmw0DGwmf;_N|T`TwG~5TkEHf^XmW8_SAhr6(k#*PsN<>6N iL_|bHL`1Ij{{eHy5@dPC605%e0000qaAvm3u!Fv9fv!KISb z1n~8=^y+XN)_i-@470ZJ)mjkyBC)s_DjUDIX?(hNps*|*2tIOm2!1ZQzD5%X;3pyk z(Pea_cszAGF^la|i1`mu^KioYio?qbr{pI4X0xQ|X3pMzAD>bI!mV?aYb~)nSsZ{^ z>vwfqbKP02q>3tSkDe;H=so^n6XxaH(krs0`vl2PEf5ENw0C$aU5cz4tb#<`U@Nfk5&S_&6i5mhouf2ZFndB~0jR=>Y(UwCWZ z{5rJF!r8sp(}?BSMuaEY$ss8RQBUG;5rEyUwWcXJJn4i4)j(eUq}%sdqK?kw19~{$ z9_sI*_o6Mfo*!QX`Sd%4VF3*kt^(*p$Az~YE$m(xBNj^X#0RQj-Hh+e1uw#=l2|Ol zTA<0fcu|lLGp@9wiQ%@d3EpS63D<|-IXiL>&InP?8Tt#_oh?w_AQD(vqto&Cc7npWFw6+D5p!eFzSTFi>k+4dM$+D z>!}Uu2vjnFK|QqONR#fCN+#DLYwTJZn%qkl65k#xbNxEZ+c%1LvOH-+IyU0{ zAKdT3%3i; z#ZlXP`<_233{^F%|CNK0O^Q(>tcv+PV7kQQN$h$pAO6hJJJO%4CD~jM>e_d6@e{#%dIo~8<}y9UV;&|{FO&DH|Qun1@&pBy{3tm&Z>PYkGu>>7qK+5BMovW8YBd$|t@h}P%8*Nibw-s4bYASsAy9*`MOvSJ6zh8&!CsW) z`ySEjfskY>cYW`R#y~P`qt{3)lF*)}*GBe8ir&WVX6j9q%C|t?} zi=~McE0i5q7WJ>}$pDi)Z5e80NhY}zO*@&9+Tx~qMx~9zm_~nP=<4M zy}HrudzB*}hzu~jnJ4;W678vOBs&;i+)3QhnV=l@<2sC?nlDWiIEbBiPxDh0!C0A# z#m5;t!4Wm6NZ(o?+Qxmg{b*T|v)yLCk=~RZebbpHkTL?VZEwtIVUB80k>t(0NeBmZ z5E|78|1sZmyjYKD*862One(I))W|=se0CB^gXt8;)9zX^-u?MMfpHw{wS)@v!)*T_1)BuN#x4wA=kG$V)$V@CEp#46Y-?Dgz17gd#hQd z;`)C&x>W7kzis`4h;n)!_8X@l>Qt4RY~leGlieZbL0ZJYx(8r#aOhQ^#2&5pOChQ9 zOXT_~?^Ckh*d^zypJzI)yqrd{xofMBWe>+UgED?791u{Wf{|C49o813LRb z@vdapbEr|Mo0PN}jaoN;QK#r-mk0W#351LaDoj!{;VD-AZ3pWaIWv)w`HgfN9c0z+ z1w-Y?f4`>IN~9+niiqFP_F#W)3QEOHfvZ-j6&@$t8UFXrT5Meu{Czxo0DBB zndS6c;ra;od`kynoUYdU=e)d$bA%OJ%zf1VhWrKLOB;jlEb~o?&-yL>j^k>SVtFx+ zql$AEucSg==HGP4jJDEVTwYI&lXgz2!g_Pb*y2q+HVmg@u;(Jz$4g3vTHJlqt^e^)H69jFF zrXNek5MVB(xJ|z3zOozNixYRRI%@LVN|!%g%bs>h9%d_|##>n!t##N^)HTG1?EkG* z&D~dNv>2D41eaw8yrtV3KAct|tX9uS%JNCZQfnf5yhf{G+EC)FP&iDHM%7 z4*v>sdpeW;pp!hTEppnMY7-3_G~mLR#ojc!-e;RH41U~ml_@(#4B#x;P9U_ruO~>v z+}&@Zr}+T=mUQRLYf@toJAG?3D}F>TXkeHiZZkCd^6b7`y4On&B3waDVIJBH_H(;X2iuzrPzE02s}4 zNW7t?zhn^G?WOpS08}wQZt)8lWcg;$^XZZ~c)Bs&MMrTVQ)i1hHiv2fJpEF0bI?7y zO4m*s``Y}X{dh2Csc+^sAJ4BVfl`M>e<@OXHrfPL61Jg z%Q<-k{~TXqD@F6u-c%99JGFawB#UawMI4k?$M|ruA0e<85fj6tvdBgNG_Wb&9G3}g zKn)DLx4g$ts&+1;d_D_RR@p4kDkSiYg0lSa7XG7Sp8{??%Am^a-sKtR2zvu*39Sv` z1AHnc(e3Y8Ao8?Q%QQb0g)M8gT@Rv#js{!Zq}Hxe9`{fCT7*=@6zR6tmkX#J%)3-{ z;`7uy0qz1eiMEvPUB zBOzbE+^wZl>eYU%y+2x&EOmZVZ{KOJWaT!cJDNvYzor z?@wuO4=?HPH61oS_@)pCNQh$hZ%VQ?Ob>9NiUSk*-2^?hXI+MHnH?Vn6qoFWlwxRy zit|jde3-fAQ-}Lg2RphYIL3|b)3$qqp02e_Qd3ZC@*w$omv&8e!|tqw`jrH#hp4uJ z<+Yrg)$7x5N)I8WPdDwOqC5h-HzheVinTcU`jyguuZw;Os-<=T;`EJZzzeQzAI10h zp$ZLK?3|JTR5lHYqwgt#&>QPr&|7eAf8vqe*KYb7^V6i{F0ZKwndxpjtISs?qT^&)AZ}2At2-IkAes8z{pi{;2H;de@0aV2Di+ zLzXR9%D!}OwU2kZ*Qss|Cs8`PSYG%FUv6+-Gq|@>1I;w0i}3k$R-s>C12bExV+lSV zB}GZR`+K?9lzWptHrCAzxpsa&Uo@}k)X1ZEyE`5({)txHmcY>S+O86DaM%>}cD0MD zMCz>t`p10VW+bAS^MlGsGU8wi>+jb!C$5vH$E_cfOSGXX^9}h^i;4>=m4ihtMfDfS zEybS9VgMZyG}ht{e;w6Dm0}Ov#jVd9N|HTtoCK}@HY`scD82kJBqT0b4;j7nsCEav)M;P;t$h`dd z{qvuvR92vg*Ku{NWrQznA5MRB8!FUK3GD}hhSci)N8QT%xgWGn%u1U+UD2s?eEx93 zS@bSRgb@DM0iQN5&KH~(L`7!$*f>;1&aPfz;2i2HwX$iI+vYbSm@3lE>7Owx?yhs% z8>!uzOo6KGTpq9W7;wqGPfZS}q!PGl1ZHmnJI`jd-|ao>0M{ewNG64R&sO$6FJRHZ z|8-4epKayV#sc?et&AlHyKvCZWx7jrU?35gW&`>rAvP+%CWq*7zv0N?dpK~d^J?!= zHE&gFW^DJ{u+5|FE6{cmC>DYGK5bIH%`b=}eRbTPVm*v^Q2!P6O~Hd7veT?vLY~)w zmJZUtPEJ&F#k?MMCnOa(BmR8q20pmnJnHM8Pf*jgJu93pTc{@5~d`o4Jz-ul5~7Tt@ba1~(Rt zX{|d~>t%IU5g$v3uzav7@Tc66xyqRpng*^ij)#9|Tk?I0KgU{TX7xKI1DfATQflSG zu-pf(FWOloZ$6yrIf;Hyub$mA-n`M+_vNocR6b=D_IS`Zz|m&naZ=QiQLD#M4$Xa) z;vlkJHGe#+ieF%<1;Qc7YiZ$cxeT#>G2&(IG(CG$Elu~uB{k2KZO& zA60~=RZ<>=ORvD{504zY#d)@%wdY0D~C?5>u>a-dhs{C*XwHIrG~N6_Symlc8P^ zvpw^N;RlWAH`N?3Y11r3u#v!KYK)QE@0r%ua)dF_yietnO z#3*WH=yhdk1)_r0%<8+a#YXqF%4vgkT*1HIsMvuekW%Xz2>ZsBX$CkVZ{EH=b`1MQ zrIpY~3!N$)HF@OzdmH-u_ivWOeruZ4<{KF#W%ZSF%dYy~uMH?l3vr#>l57|E3lH(5 z!B_MCK#4aZY0;gIn)7ViAANuNAg^vwBev?*>1L7L^%?%m`JMda;su_^f%T`wkOZ7N z5$F9NarY)^*y8l+#B*q1iFe(95>{`$H&X$5FQCz_1vvVRHs$4sg3W~sI4_-R4ncD- zt@EfLLtb6x5=+Zm^4+_41jNK>kk1RiT!K>5PI!JDsAsUN;DwSVwP`K;%STP@qO(Tz zM)2ZP=8tt+aKa~##rjiF5GVbINYMuKVcPxKatu-D{Zhxv7e!P8FLkS}lecD28tY_k zi@F&Bfa$L>8dItfj<>bki%Z^5hx7-{htx&-&bI{Yr>$@AA%-(O6Z z5l_>E+5#+SpW+vUzFp%6Hq{s_yE;13baOtl>DMamO+8O&CZHGyvaPV{z5o%@tDBos z3zBx$^V8uRyX8c`&-2`8yy2$RIUbjH{Edf&&Wm~KDcl4-7| zQ`>^uq)L}=7yI!+J6`8gK)$;C{_H7ZM#kR~-AYRf=eOr7`k>`s6)kxY0;4Rt%|a3s z9R~(LI8uCG3=3G@7(cxm1A@#Z1Lq0~&p}M&ifS->yz7~`5Jt)WPSk!qXk*w7Hzq&L z@o2dMRMgkDu3-tpKq%4cjC||z>CE51JC1}IS)BmjWPdtAEp>bz+9r1J zBQQqW4Oi{DYTv|99LcYuU52LdD?M`|*X?T)Xj{&RQ)esJPL1Lb+bE6Da{~1$L0o4-Ddl!5e23tDr)UQio?`NqR zqWG)zWaOOZ4giqmC~7xjOFK216$Qf@^0&&N)j5TlGDWlI*7nFXGkC$NAYA5x0^Urv zCy^-JFzgoQuc)QIQtbH{&mw zRNhUFv6w+XtD~bM?iw&g`{TGF!dQ8oa@yx$7-lXF2w8S7PwLj3Z#6aO$tOoWhujZR zjr|COTI?*^v|ju`qeLGBsE0dMh2R>{=x$h0fl$F8E^<>ro0x=7C0q^_B<%10b?sR= z5O%-#VjQTb6kU1kJf>5LEu_bDrb@#>X$%fURWoV%y;*4K*>TLg9|EZ%Nh5FmQ~)y1 zf{u>9S`LsJxm~2TjzN%=f+$fkH9Zjo@P1MC>E>8n1X`x-Y zzErn5XJNMzZOLeKccp-n4_bN^5jOVuJqL zD5Jg+QRX)d^+qy>+}$Dq&yPi7R7)C*Rw+B0+{;(_b^kC;lD823SHH5~STleO!Z&Wm zl|ze8NXQpXRwV3mqin?AYVvA)6#%&Fb_P2bHWz#RFp|tpKR|2wuby1R2z=@`z!_?~JduB&BBt$e(#x#X=;qV{ zwcM20zd?NT@Ve{{LQ-5@tT!a}q?E#D^7WA#KFPs*gFyH>I@OOU#-SAgV&qDctd4~N&ZwdutzguLve49|AP zRNnT`D7MUhxM6iaA0zz%9JTrIrtzq_ikDzhQoyx{fUz+GWz89?9RgR+iFE*mm}P+O4EdH}YT% z^i{2U0}Gm*ndV9frtaIDi6+UAizVmT&H4QKs3%hX-8()8xIcpK`qB;7OyT~to=cyD z3`CCKJYxH&mc~!?If}pqz_wP;I55+x*7go)C|*mf#1|G8)-g6VmJR?Eb5tLblF~CX z%gs{m(j3XIN?a1#LlWcTpU1Fif84WC{3pc9yf{dOKEB6w=4|wY)z@;B24^Np8?(?4 zcYz`LQ_sj{F}(8gaOA?s>A0MgYLHVDONEU;SC+Ch4Y=)fOa&TGzK0kHyU!2Sr!-26II%5U}Aj8z6v0eJlAz=!ZRK%4-UWW+(Hn8L6p~c`{6pghaB4QSC67b8HKah;qNw1Y zW>9$0rsm_I`rs^g+8UZcCa3o;D5Sr1pR8HZ&W@tZ_~oGNpp*%E|K>BTJBI~4{<*jI z_GP7?f}ZaU4GvBoz$-c;ToTLhf*D|>W`hUNQ3>}Xhien#0Aq()Qw86rQj8QlvtfiQ zGi9dz6`(2r`IJo$8MapMrfp`+O#j8Gv@WgB40?`+ht$4hLXLWpgzHk6_rkRiPue9# zRVkWKchL-5l00)+-=E{@f!(gLz5L{%;f#rejSUS|)zS*W4wURV_q={`+k%2~*Ukoc zS)zKS1MUf%_O-qo9KXKYxDzaR8^XuoZJTT# zzxc{Sp0zu`0WHm9qXiv>Z#EZGa|wAo!GHEJkbuUU37r5*{IStlm$*@g8t-WbM*FE0M$F2q$TTUpE`3h!hxa|Lzq?b`*YPC%gRP8_53}7Px|&6#S;*{()Md0 zk`mCppgQiR&{dd4*3@XwOCldj!f)PCyH?MX?Wk`++r=Nf_wZ;4@-NpaGU^JY_z23W zN?%_6eBM)^MeHv?zvm{#Dlf)kj@K;VSK+pJo1q-*1M$9>!n*75=O#E>i@9m68lvVU z>h>_KN%zdPaue43G{7{1vdJw9K!a4I3)a+&=zAjNl2Tt-{-J{{+n zdcHReYJveYgGzz5RQ(dGrv0M=YfzjkwLd@k#eUEnS*w_L= z{$9*l^X-%_DrC`XkKK5rPVeU_ZIgLay8BVJY4hGt_E?QkDae!WbQ2lY!K3D)`tWOzVmTU#6D3M=G& z3OrQ6b&*#`QBkon_9f7zSaO66`kjV0GcYg^q~{UN11~69d;sC2q}-~pmCsu9)!Qgp zEPO}NKfp2+&f_9(SicwW@N>1A$WV8u@DSSPvr5|YIV%OnWm_Tt{*5s;7w3F>sEg2q z1Vb6&DX1C|sm*Gpw{=CNzY&CMlHVERF}Sgjjf2-pml+GS*9yxyk}P@JyY z5L!sl3I`)5qX)s~lh&G@?u(?t!!MHi6LIb;$~;gY3yJ)KUk*R?QdX9EjQ+7=FnyZ0 zd(2pi;j$R*Gdf;v3Agqbjadp08`l57rU@ZhnSuoC#v@a zq3wb4O9#$)CK3Jp{e92JpU)z+Cnuln9eDmR2vYp~AT1&rrSV4{41Y_Ir@rWIjmf2@ zGmRS;y}!C}IEDLYtp%^6%@oe`?H2am+uMbjLrKFlcc9#C`)@^jgy{o?De>JFgZn$= zPDUlgP6f0e2*+OvXqv`VySrlZYmSsO@ZNrGUJpahP)%|^>Bjy*@++T~&KA}x4!@zm zgx|`SuhGV3L8pt&VqZSy-Y2!3Ei$0TO5L@c0PUob#FhU_0Xhgy+S@cI&6@^9~Fcxe&*6b2_TfZ z!K`Na`rnH90#`Qd(O0SrCNnZ4epQ{c<3&L`i8?ad!;@WjG6Ma>UGmn-UCcIZQzJ!! z$1T&)q$ccO@bwb3z6evfM#SvB)D@tZ-Y%(=egn@r>IC%7o!_DyYr+9zsxVkA!M2ct zNZ(Skkj)Ai9c%nMXZ`Prb~?|JDj7sNEimDouUPxZI9a~ZvreuNgRm+B01?_vV}XxK zBV6`D11<>~FC9a%qyC7utkR*}8k6hGH8PZ^+QSypu?E3fmL& z?z%6N?fNn@-z~8Lc*Hk|_FzN{jZ(AG@XdY|lk|#+?IupsWy#*ru4&0?2(k_jVjc z=U4Bo&F#R`YHot95@CA3scGFCy;vwPfJ8a}(HPMJ<~p68qIfsENlId-$zM9mSSbX( zc3R)3SboDBwM@-rX+K#Mwot7bSBUTz!Vi7lZ44nv@B)>y`ObA1B{O@ulwiBaQI;NY zErFW)Y~^fc98|u0i1JwA9)=ruA%;kG@0KJcof0cKoEPx_2Z;yE5!^RW`K4x)=m!&L z%zvP!s{J1_?g>u??q>Iie19b-_W!W^_XPGw$UPogm)jaj9^`1XFK)<)O+U56zsKt= zM4vfg`}ZmT2fTwn^hBbulJO{Hv3qeSj{#-r9i-sX&>Nxu>dvU+@@Ayx(U!uz3#}R2 z-%S2#JgksI2Jz}g$CGn7XL9|MWhjX5K*hZH)+fbiVhTB zY17pv)$yRo zK$Ejv{tpiC)U%|PSkP05kdf9o%5mY+A!}^kdxP5^d|$N3z`*^0f3)7k1~}WD#CC@t z^4C+#bA3{1!}XwOA=2)tuo&+EcY1n{Qk`@2tTj}1w3IM6d z0vI3-Iu>A^`p6kNFw*zzX7_xW`x3t#CpmH7s`EPu?y3Xh&%KIMoo!|J-w%L%U*+E1 zp9#i7|3;9a7jI=xaLMD-_ELdaVJ~>ZaF$T617W4(q4Nsvifn}%8$acsz9TQFbCFY2 z{9&A&V}BPeKc7)rO5kbW8LeOP7>MyiT*T}9a-7xRv6ck%&5_?sDmuXn9zVaYBZ7uq zucowXcnOzE;1N(wOeljTE+rZL+LI^$L);%Gx8d10DN5J><2-idchjAS`5T1$o>S%& zADbTCTi}iL_0N%8;+glqsY{;KWwn~a_04mXB&4MGtq=x4#|3N|W3y0Dj|5n^Rf{*u zH?LHFHwpSW7FO1RIe06X!Pi%pi?R{W^9Dr0!TJ2&9leK5W>1Cf%4@r;jo9g$TaXf~ zxjE^-{Z=mhSa{JBzF=v%#t|!ZxkwtkPXq?Lz>qpl!C)x=&SU|Zf#NwLH-DVat{I@ZP%N4iDO!B&sFi5o4@d^x~W3Y zQCjkZV_w1D;4afMewirP1TPU%QR%J$7c(uLp-F|)ik~I;_7MH|PM0N5O^{Rx@%1sIG>?Wmb$w7Q4AzYC?OyLCMW87T`|kJ z!||(4RvfU5*&9ul3bg!0LPnM;6^K`*7h5N-GLtJeXfG~OZKH2hSklBQwRKTsRmzaIrsZaz$Uze7G47+8lmVMZ;q%fjX~hU)=Ce~<@o zqZYnH^WH@O>zDXdTCqm6Mf2ry;k4Tzps6HqZ2yM)de|)_Bm|{KYDV<1rk%K{Z=T`R zg-#C3%_{a|uVeJGX*U|Xtt|o8UW2{I!E3)hTy~O8TC;+8pZ$=>DzJwA@tl74_fHWM zQJZXc)E5+pCZ9aP%9MvpIq-n{t}37=eeI2&b1O>PH5}Q`A!IAn9YGGvw^{CyV46&4 z>F4Dx74j=jnihc63dx#E92iNU|Hk~xXm=(uWnRPji{EsWl@u7HF-0l`tzE+(K%V_Q zl>iHD>y+qE`?KiXQvjNJb^%$#Pd&j1QWQq1?0_-JavTCGwj8*eDieWtHF7cF@p>soBX+gh1+@4^X`=p`ech z*R@kX-JlZiI@hPbOFF=TY%iWY0v{8DQS|HY?YhFT#i0h`Ft6hRFL4wI?11C{JO}u$ zEF56gw0DAZdK<`IK^6g|=gkHuzU1bK2z$gN_fCia49R+k*uJ-CIp+u)SkI!fw6A^dShTg2^b&S*gJ*nQJM!jDR z4;QfaB@bO^PbW3aV%19g-52G?CWcF`R-6v6oyxda2aJmdl+b(r0g0y;GodHGh^$$%oHMIjT(SA_P#>aD(FOPSZ`mYUK zXdvLB{d=XP0{6)4xh4f;dL(FL-%XSzo+p>vQ?^^H|Vmqn`V6 zGtq`^X=k?BO4spV3YT>$?3J=|MDh8YlR{9N>3O+P*rUKA>X!v-+S z45x^PRLeDn-S6h9o}?f!A|G* zr_bsQ-}1vG8^WXYd_FO1UN#ON(zAcTsooTJ*!+C5?Zd8HHBn=@Xa--y`27Z(s=dhd zq`{oe^{k~?09n*^ds6jA2=IDYc5hVWrkH!L&vW4*x*=dzOnTWL!=7$I*%eNQuP{DR zW-6Z~WQTeWgBX$Bj-_{c9%Wrtiwh}thtrX8AF-9|VN0 zOzro@7x#vjutz*l24XR;?bt`A> zaHE-9fNe(~0B1J=4NVw)(H%cr;+kdA9VQM=!c6^o=enU!F*}hem9!RTM8(9c?&PHY2pZ<3c;*%uYbWKk;X0rHDzmw+ zaS1QSx*k+(dj2oq+obdPx$g-Atbu#r2QGI&2$*ERZPWr82l9;JtQ4jrpeqc?Or_Fy zYEKKoG7Jv#-d#w6HEtbVQ1O^NnyZ8cf(9nCprAL%je*ewH^!x!xzW1q?~S6X?z4LsT!}&Z_2rlODqO3% zidSlCk6*B|{sBdxrlFz35mceus3GX7k{{FfLhce#T^l_)Sg)}(e@;EG2puybX~yoj z)0ut>Z@5MMxqe%3;5%~)Twpr^1Q7ui|Kn4!Ji533fzBRKORjkF+qa`2CG#%)A=gK| zMiV7KC3hx#XFLZR(lazvbwfFmr%}+?*LQM5$VyiSg9#Lre;U*%1!Hn4PLcQvaF@i% z**|9V^t{5^CfE=bS7)jw@p1(;Z`K6HptxX6$o{FVmxL>gx2Gi&4-uLcJw25Q$)&c1 zS9u9HxpRK>f38w!=l|nrf`Z;e$eNM;^EdzVE%IU;%TbhK!zNL10kx3zb(4ssB(~SL zU;hs!g!{p&^<#}s<_oilMDXS+vFf|^W+{ry;3md@pd9>)&>u_|)f`BbG~})Sah+QT zhN}rUDA=r*$~d|VOUYB?RDOX^+B-O~my?!}^6rKyy}u%FY5E`$^B?VU{~iH0oSYE#0uAlMYxSS4s~7BhU22WDMBW7uN1n=3kq+kU z1{0IU`Rc+D6awPZI3g8DKf|N{`W_TSSp$OM?@Gi(Vyy)v?V2t6y1f?%wi{b$w$nu) zQ-+%_QN2Zv`03C1`vLI9AFFJ%1qmQvAIA#X-hWvtvo=!S{`_{$OO)@qprB@m()+g< z6VrQ@9G_laeRcj{MvIW&mO;-8OTn(N zoSR!6#9N&s*4ciR$GDPzBys;)5f*9pW&QB)F;t#Ipjt|knVGo+bz+)TYUabe)BWFO znP!5qb7M8nCq%tE?*G89y~-*Ehh}~tF1-_yF&IiQ*LN`AxtU+CBR-ubMP6??`QiX9 zwu0%7BL8jF?F5U|1ww9V#-9F&nH2lEUf9_W8tKdRRVJ#N7(skSoyYZJ(n zSL}j_ary*CCqYw2GuF-P&6wXEt(q;pug$5}EZiRGfTZH`x)uC_d$k9&`D3m|$kG0p zJeNG_VffhQ4`B8|1?;Ut>zIIt5@$b)E|z-S!V>ze-CthBf;o{8qmRZ(MG|n6#xgIG zPy?z=xDl9p@X5H{R0pJiOn~3bj}dO9JC~O&Y+EE-i21Y zTlLjsB?eC_t;0P3=MVbuqpmP@JVVw@czf|Hzuh|4;s%wCqe>n($;)#XUGrU0m?6^g zeH_;-KIjwiYq`*Gb0tYP8Z}se^lM=`FXE^Eit*G;i$^rlto8 zKQ-~*SoNH1-{^tSw$x9*R#?dsC!8DQXiVm<6mTRAeB5{nD$i9xu{-3)-YE4l~m2X zj*Dk#6Gy!l&1~i2_0gUr*Zoa1gK2+E;*RU{J$?|uHUjk)PX4c_>b-8=6l5MjyXN9* zG3LE)aQqBXEv^Wrj<>}>j_mRNIp`k7NmMD)y?mtsfII=Y~z@*3@CvS5LImE^F z*@|*o0AR_947~ojq;7nCymObe7_xlmf9_@Vm|^P_kCc^_RT)HC0#@-#oL{%N9wXC1gm2;82=4Yc0c z%+w%pso-=o0@aTNJ#44;c~I@!G0gv1725$%$o~k)8b($Zlr&L7Y#sVjvIpqcv~vn| z8UItG9MgVP9pzEY>;am>jEs_zvW@2(OC<*tOe-_IoAM3E{Z=f|90a$?oME`W@gxeHXwn4W9X;rIeoo>rmRf5YK~$ZwNxo+a&RH* zIwloXA%lJo14O@k2u&Im)e2R5@A_PVo3XK?;&F6z^f&R^Xxh-+YD>@82@JV-Ghj^X z!I}L=w5C9iq}IhgFzcsj=vmq21e-0Fv*<2{xygeWa#^Iif17~MW+oCBnaUGRj^sQCCi#)<}7*442UH((!K9%%q`+ef#O(GwxkF$f;ss zxmPSYkT(i6P5+*|xjL;ZE8~G29%^2h=s6!-y!O@7QTEA;js}B0;|Juv;JRjEYHAu3 z91c_uM&PU*{WI5;iX)#%C(rwsnM7R+`F@+{gXy9)cdx}*9V;Hn4<~qb=UaUt*;^Mk z(_ahZb@2q&U6+8n8<1nmQB39nQ&m(YIYV>ni-pySLPh~c2c%S@A7c0x-{r<=OU(yC zH%A>&hP?Zol@-jIPwQsRe3B$F=>U+|3drh3mIM1>Qfa21=~-A<&5b!yYgbDV#vV85rXLXJL^40~9|| zBcENR2idPHu`Qb%BH6t&p&*iTo94z`H;MP~q8M z$4ysf0Oba+j?fuGA@aDY&0e<sWkBD*g$m2vC^l`hN93T4X+^|wn*ek|t(_@QL>;$(raMr8T4XSO zuMKBsj(;8>GMDLCl_ODfH8j5UE_q?g=~4FqeSMDD;if@}pm`F&r}QVJ^Zcz_qnmn< zU%+F3aAvJMoQzC&D}7}2ep0>?fy2V^`M$@;=>^xy>G^xOIsG7>nmjt6Hq4v`;9yK` zap|zg882G>?lMMgA~`v^s8{h>`BYX{L+ZA$8{|}d<<0?Fi~I`&Bk1lf0Us_mWMlks zDclx}Z*`Qqh3QZ+lmrL8(J40z6ZpfWXaeWoT!F2)tp+n!1P9oyYNPG)TUv!SFj-9I zt0(BEeC+h^1m>+1{`iABwHT6)`oGvI^nYI3+808vA2KFF&9!xrH zY;Ici_V%_x7t^@C86m(Va-`vUx8M)Fnm=`*9}zyFm@Gn}sYer9IN#%xw^z4m^kbwR z`#Zu=@=y|x5?tED0V-+S1*uIV{kV>uc4JGXeg z(24t+!nXEa2X-4|hr4ezdA)K^DaGmFhJ%;sL-z#BZwyhF)_gD&!P4L-_@rrExS zYwq!|R82~ME6fSDNCUA29W*xmIyJ2w<6Mx-hw6t)Aj1$gLzn3T1*q_)q+_XgO>|J} zfVDs#&U-MuX!7V@2lfd*_qEL6Rq7;1`%TTw6q$i9^}G30#sQj(7+3QA-*wjIQ;a`d z!&1T#CCJN_0qDIwyzRy}H^|&tyW5lW5<0z4x!UPfG|o=8WCR(Z$sTiiJZWuh3Q{($ zCuYMbR@Z{!|A?m6fdUN4d(GeDE}^|w`jYMjx8=J;-X_|A?;wn*{9pg(e}Of<3PU;e zlmCIJ^z`4=Vtpo2pn$>vhj*?31zzA!q`|Jeh1nDlTXf~Tt3LSH?rM)MGSq?H$zl;H zP@UhBSGeTzMYISTY@@OinJwhryMR0q6pU@&k5I8I68P?eHvRF2rsb@g`6(izvIpeL z_1n5|0;NKm(LNhIOgdcmLac=|KSfT=lsoqLAc^;Gjb0=g;3l zS`K0jj{e3pteWb2D)lA{=-eQ35h$|NhHfZGiMdCvuCB)Vel$~zU|E0nWFDi(Xb|>x zFhS!b>qw3S!;XHl9vSRUJDs}W4|kfjN*_t&J>6qTJVN+@#{=|ao<|^=R60dHCLiLp zoB`d;@%kzwCWC|h-p4LAC2#R(!wb(ti*Tva`s3VY8)w`A0-}gpkoLonnosVoND1Sr zSa4leq_RqcvDc2vhNK@1Wh$jgK)fx)&qa57`}R&Q*TVNSLgF6a=!v$R&M8u>r?WnU zwC#8mk#VP8&uP6){c?B1430y-(o28>xc7!0r^cQ9+5H#zq%15g z-9spov~D));P70|2t&Z8b?zu0&ZhuUshOzjbtaOlcn$#$MOjlaC40{@zOiz0Dp9#_ z67M50YhIkYdyJS8q!`$D?3bYmfQ^Q<%ChZTn=}A=J;%g^~kVR>%j4k<}!$vF9KLil()>)tvH*_kQSqV_iP-JxRZItdUV1?*=YD{80TZk*^gc^*cZ znz_fgHR?V#nNs=Zdy00V(^V5pXLqcD&cLvA%3!OxuUxw^oMxoJYjDelPeUhmIIxDV zu<{N0dqQ(ngOn`?sENuiQwdm@$vUNNWA7t7J3D$w$>vvpr&oS?#dbRc1 zGH-XWUU&Uat;B^8nvd5osEt#^)52YmAQqn9z{wKNj7Lzijn2`%o!K!LF$d!%qjkU!R2RQU;zKJk?KD=Rfx^IT@JB5N3E?-1vFu(bMS% zwt=O?HU)f+`e0fAU01PJYdR1EC4&u678Ezy-2Ugq3g3!!Q2yfgbB-|kPfpbh1D(&l z(jLNkYJ^e=_f(ejQt?+{=)Z>m)etf?h}lp=Kn^KqS3W=Vees({b?DS`US|lm!xS5Y zY`W#pf$**B_!yWa|EV^0&n+Z4m=HY0N#vXA}&z!mUx#v0OdEU?aeZr}1>8`dt{se3i?iMSExF*y%JyGjnCha|WdxQ{y z-B)^HxL6eY3XCD~zPSZ@t~?k<^dHB{^mK&R*xKx>(J1r0U9)(h@wTx15GThFl4ta0-&%pepmO;QVo&5&6_Dyl zOLgK-5t2CGJll%)CR_H31~n!&7rA9%*22<8R%0=H+x3FYR9E1Ggmw${89xXNH)KEl zUg6J~v<#L_xD`BF<{`K6nFY^aFj&Dun;t)8_8KQqYj2P%B4ia6FA5sxMy2wIMw|dU zZu@rzY(KarUa7#1OsthV0B$`b5yJuT}Qv zA3GgvE}h#kn0tIyRS4)8nXgyrqnmgiO7u^X>>SRSiP9X`X$bm&ak%H%bF)gsWLSCY zW*s^sjE(PodtStQykT|Ap;!O+X0>|B-6M)M;zyMsOi|VuJC-@ma>J4AbG&fH*4=wQ zSNQijw#vIzGd{p%DLfwSSZ_b}^6+Ea4#bSEvYB6eh0)15RnBaMo3=(;xm-25ZJUr= zT@5MEV94XLJ5B6M=(JG1y(p?e&0(ChzjzIBZrT+^@-Q`#=MHCGZTo=hYc2PjrBdN#x^mj!g4lUb>wi-W7f+(jh62)*-|JS6S7+5KUZkZ7S3NtDYn!>D<1ZHllIAlfOjNQ1WE`k~ z76IM6toZ7K6Qa?}h^Yo9%a93-<74j=--Nw~+c{TxDyl@r^FgB6H8Qn%k&4rEAR zxk3pVQ}_l6zUw#Jem<#fyM&wado3B5k@vw|ETY^7k~{Q$d6x6)tJb8MrG=nQa{MLB zB(~o!NLT&BshbmmNT}}X(1~A&q(~*y>Q9H;%IqG#FgaTL62CZ#u zo`9xT)+1z`PxuDQJ*pj(M@|TTklz9Rss^t~R_am0f%2|zWJ$4gDZzZnHWkC-B0&uI zr>Z7~lMf}t$+To+9yu7uTQJ!XT8}%pYcYLhSF-cj)a&Str`Vyr;Cj>*LNI3+y{h6( zFVUM_UAnQq-IBS_T**#f@RSz>T50H92uZdM#(*d3BYzb9vFW-ur0v@dV|nxF4D35{ zyGm07Qc>0BCjs3Fg12qzTn)!H>gi5+7Xo~M?=CEq+iz)qQHAh)Y)E1zSSlDLB_+F8 zwtNvZcMS{-0Mc@rFE4ID$*Q8FLhIhWBC*I$z`nO6zE=xeV+9Dyi$N9;<2lCo_BU8=^iIHS;|4Yc&H>f#+bIN)~foWI#41o?&ln&`b(;- zMzurKmV1{mqvUP6;oIBvenDbPmuZCZn7Q{$B zs~AmPU=WHR3Y}_u6x2zN!8TKTpD*lrKVGT!J=*Vtbe@up8m+-UPNrv^{l1jEQgtxv zdfB}0Q7n44L9OnQq?5BVAW+cq<&F0Wf#pIO`;+Km1zc2T=w7X1aB#O=1$yw4HC*Er zoCAUpneHN`jm93#!H)g47I;YixZU^dYu>fG9#z1{;c-B=NPso_O-Yes_u7ZiNGrBh zqnB;0zdStjj18`PJ4f5xu>-qMb&?Wm7ngnEpJ`oAqldp-DZ0Q0DZV~FRl9!-h9rUV z$-MdU@AxYcpzeAB-SLCtc@~^iewd}d@Mk9%qNEkm!}EjDZzg1; zEz{mOW%PuAVyX)2=oj3dY#Ud^6}nw&4L$I$1RtQD#!)x%qCj)tI#O?+2GSY4*K3WL zKKY|Pc^m{5B+}|sZqwMJTe9O7_2vzKYFe60)-aj%1_-4w8-j39e(QHFXXChwPe9zW z+bXVxQ+<{X7I{#ZmB;=95ngR{=Lp;~%+CCLjZI2XibM0JzeCSRbVPdT*NM001+{d= zOSXZwh0WW@uhbo(YpPJE1b55Xwn>WZk{j=lJKs3Tp=Om`*Sg_?HH|&1%lYYbA8mGS z-H9W4bXF#u9&>mYD)y||p(s^f-zGe~T~ba_i#J3t_60n^zPUK1eA}#U}jO|rdC!~ zZt4|HwpA!9>ztNfeP`{^!6@+r>II!7jw{go*h1k@!!OpO(-1&eCgHx0lUde?qP#N` zS%*EQ_u5FYYXnihV@nQ{5?2eRi8 zk#%D*xsYzm^?n;NNOuNp%f9_~3V53TnYDUZxGVE;{QSsrag}@%j=@4Llg$)+A;H3U zhG#do)r2qfR79|n+J!+STPjdm3y$7=NNR36$3ex-c^Osb5oLC5&K(n?Q&3*{eZnE7 z$$#)7h+{*V^TT?aH}Kf)TIubC#2xml0}7VrInl&#iyxXfJgQwrcul9WyHXrW=-`Cb zKB_XRFfg-`;IJC;c5X%=PU7B%?&{HAPspsm(+ly~xkm`_$=#6ST9za_) z@Hz13xp_qSDnG&idn<_gPX14YvL_#H%qdjc~I(DhhyHh*6_y8Z|uJH@OWKCd|Ia2zgR}!-rSq+=;}4fnDR>l zJv;|I&^nL6^>uC^#EWaex9TcN(w$Z$C}ULM;apfn8?eZf?doT@d_c}JOhd0vb%UCzba7>4mvA&G(Zj7nG|tzP62mLCLcqR^wrUOgVfcsOU|MkHMK zwK*yvM+=(@3*mq|7;aT+Qa=uppS8%W7)9r==H_U_K8Bu2uPo8`4-mW~z5BNnr| zyB?vkzjAefb)4n9Vxq>c-3Bo%Cx;JJMNW@pJWs`e?9x*Fr-_=8LfvGP(zPXGt{Ti$ zU0pri0e4ik$lq(g*zXW=wL3Y+F>rewr}MdA3CHcsr{@IOnpb3EyO_pwsoZNXi3AKmAJb8J8XJf$0nMd9agSqHnhxpQhyZbi^XjbT~DA6u}D1z^9<7%mlomnMSTs?(mj%6pO zw~KzRKX0KYqu*LR-Mf%S(af>W5et9Wh+78J!e_$DRWj(Ss!|*?bSqqvs$5lnv(;FC z#P|{7xW#PeQV%u)DZq<_64ugO_b*z50PinDIPNy9axIJy$9eK0VB-WMF#z^G?Q_yfk4U=oKVXGv zd(&}6MK^5g&H;x#Fl@P}OCXt+77S3+Z}$}f`kri@&Fcca1a}*_;jR3vGhFwN32dx8 zSBWM?mmQR8I$tSS9ELw&q2rp=z&4vbmqQ9@t1W!~=PRih=|=y-c4nb09blNmb@$N& z_QU@l+T&z@#fX0?4sY}r|KgNVk9!ubwove%{@V%(jgw`hjFNd|B#n|?howyw9@*Mv z3yF*CczFR3QccalOd)S{SrF;Yk(AiIC!68vrRNZYO49z@r1p%@(QW`WoZUwTV zo=?^_CbqT-&z_y{iDXoOZ{DPXD1ksG))^4@GDLXhhYL(pd+{z-%^`bC+v`&-Qw_el z4<1PW*{1(6@7=j>@C9I?ybBnir;BMrU|aKA~q#$N#}0OTg3eaO~|Tb0QmkkmjC8}uAk zl^^Zos%-CpWgrLiB(J>b&$Hv%fRYJYF zxBckwe#w@JGDX7QD&O*OZmItXkmvYMU7@9QM!oQ^ntEX74PXmBL&H(P7`M8{8wyYZ zL0K5gp3esXKf{hJh)^aRnwXR{7GhNd_yUqX(~Xz7qL&>j!xyKjW_uIa1p!a0#GmFK>7S3Q!>fe#eIOnqBP9^MFSz6i&I*@_J8~q9` zOic@r!vFJ&*Ky}eASLjpq|`hkXv1gx9HKp4)P_G@6t>~NO@$^!d7DLmappc&!FI#I zz}&Dz%fsUeU@a`4)?0cyvz$`F5T(Sy9<4;3Hj_a>g;g_Jm{YT_H0s23u1__v94r1q z7Nq`XIg775_xqrn?lr6lFU=@u)S2W4 z=luKmo%d9I?iAQP;z8Sm7XgoAn`Si{twYY;#JpV;B9C=;RyUSqULi)`c}jFx55uSG zlGpZS`5vp$vDZ&*1-#D7ZmgwOBS$SYilyJB(4#uU(03>qSk&>)g& zq&Q~U!)U9TT=T`22`o`rKv}w+w{dahP-pB{`0L8VT*2v0)j;(abio)O;!dn{;r-;% zcI40%`vC9l;CB*7q+$>t-S!UUD5;<;Zpl2cZVc&JLW zo^%Brv{P=YFO$tk4749T#>vdO@tI{5x>1}2o_^escFTs-)1nNUc59^>?>Jp~5rQDh z<%k)=Y8TE@x78rtt<{WS$kTIbHypMP8Mi6}r0O2|BuCa5^COG$qZZJ-^A!c=wgKVB z8UG=$r>#h16SpvPb3+o(!VL?j22tfh&ZwR*~QYu|oMN#*6an%CuF27NiUM M+D2Mcns+1r51TsbMF0Q* delta 22629 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�n|7S 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 Rj1dfW{i=a3R@?T;{{gGyZhrs( From 5f734effbcda1f72edd5203d41bb1f49994fe767 Mon Sep 17 00:00:00 2001 From: Mark9013100 Date: Wed, 23 Mar 2016 20:06:30 -0400 Subject: [PATCH 34/64] Armor can now hold maglights --- code/datums/supplypacks.dm | 14 +++++++++----- .../crates_lockers/closets/secure/security.dm | 1 + code/modules/clothing/suits/armor.dm | 4 ++-- code/modules/clothing/suits/jobs.dm | 4 ++-- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 1bf774c850..c4f43411fb 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -1001,7 +1001,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee containername = "Security barrier crate" group = "Security" -/datum/supply_packs/securitybarriers +/datum/supply_packs/securityshieldgen name = "Wall shield Generators" contains = list(/obj/machinery/shieldwallgen, /obj/machinery/shieldwallgen, @@ -1729,7 +1729,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/device/camera_film, /obj/item/device/camera_film, /obj/item/weapon/storage/photo_album, - /obj/item/device/reagent_scanner) + /obj/item/device/reagent_scanner, + /obj/item/device/flashlight/maglight) cost = 35 containertype = "/obj/structure/closet/crate/secure" containername = "Forensic equipment" @@ -1785,7 +1786,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/clothing/accessory/storage/black_vest, /obj/item/clothing/head/soft/sec/corp, /obj/item/clothing/under/rank/security/corp, - /obj/item/weapon/gun/energy/taser) + /obj/item/weapon/gun/energy/taser, + /obj/item/device/flashlight/maglight) cost = 30 containertype = "/obj/structure/closet/crate/secure" containername = "Officer equipment" @@ -1811,7 +1813,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/weapon/reagent_containers/spray/pepper, /obj/item/weapon/melee/baton/loaded, /obj/item/weapon/storage/box/holobadge, - /obj/item/clothing/head/beret/sec/corporate/warden) + /obj/item/clothing/head/beret/sec/corporate/warden, + /obj/item/device/flashlight/maglight) cost = 45 containertype = "/obj/structure/closet/crate/secure" containername = "Warden equipment" @@ -1835,7 +1838,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/clothing/accessory/holster/waist, /obj/item/weapon/melee/telebaton, /obj/item/weapon/shield/riot/tele, - /obj/item/clothing/head/beret/sec/corporate/hos) + /obj/item/clothing/head/beret/sec/corporate/hos, + /obj/item/device/flashlight/maglight) cost = 65 containertype = "/obj/structure/closet/crate/secure" containername = "Head of security equipment" diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index fcbe9e9060..0a3ca35122 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -297,6 +297,7 @@ new /obj/item/taperoll/police(src) new /obj/item/weapon/gun/projectile/colt/detective(src) new /obj/item/clothing/accessory/holster/armpit(src) + new /obj/item/device/flashlight/maglight(src) return /obj/structure/closet/secure_closet/detective/update_icon() diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 41b0209e4d..f98f222b93 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -1,6 +1,6 @@ /obj/item/clothing/suit/armor - allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs) + allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/flashlight/maglight) body_parts_covered = UPPER_TORSO|LOWER_TORSO item_flags = THICKMATERIAL @@ -263,7 +263,7 @@ icon_state = "kvest" item_state = "kvest" armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 0, rad = 0) - allowed = list(/obj/item/weapon/gun,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs) + allowed = list(/obj/item/weapon/gun,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/flashlight/maglight) body_parts_covered = UPPER_TORSO|LOWER_TORSO item_flags = THICKMATERIAL diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 3931b3ec67..8a3daf68ff 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -96,7 +96,7 @@ item_state = "det_suit" blood_overlay_type = "coat" body_parts_covered = UPPER_TORSO|ARMS - allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter,/obj/item/device/taperecorder) + allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter,/obj/item/device/taperecorder,/obj/item/device/uv_light) armor = list(melee = 50, bullet = 10, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0) /obj/item/clothing/suit/storage/det_trench/grey @@ -109,7 +109,7 @@ desc = "A forensics technician jacket." item_state = "det_suit" body_parts_covered = UPPER_TORSO|ARMS - allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/taperecorder) + allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/taperecorder,/obj/item/device/uv_light) armor = list(melee = 10, bullet = 10, laser = 15, energy = 10, bomb = 0, bio = 0, rad = 0) /obj/item/clothing/suit/storage/forensics/red From e87f19da39f4a050bab5a462d82e32b973628ddd Mon Sep 17 00:00:00 2001 From: Mark9013100 Date: Thu, 24 Mar 2016 03:22:53 -0400 Subject: [PATCH 35/64] Adds a sprite for the combat turtleneck --- code/modules/clothing/under/syndicate.dm | 4 ++-- icons/mob/uniform.dmi | Bin 414941 -> 416330 bytes icons/obj/clothing/uniforms.dmi | Bin 79551 -> 79911 bytes 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm index 2dc37f79f7..66edeaaf09 100644 --- a/code/modules/clothing/under/syndicate.dm +++ b/code/modules/clothing/under/syndicate.dm @@ -11,9 +11,9 @@ /obj/item/clothing/under/syndicate/combat //ERT tactleneck name = "combat turtleneck" desc = "It's some non-descript, slightly suspicious looking, civilian clothing." - icon_state = "syndicate" + icon_state = "combat" item_state = "bl_suit" - worn_state = "syndicate" + worn_state = "combat" has_sensor = 1 armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) siemens_coefficient = 0.9 diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index 69ed74959fddcf2091feada33b68440a2856f3c5..ca80f8ba10695f2375dd75cc1bf1bcb504f6cbcb 100644 GIT binary patch delta 18266 zcmcG$byOVB)-F5*0wH(^8Y~bjxVr@c!2$^h5NvRF_a-5@hCpx+7Cg8^aQEQuu7l6a z*PL_i@4oL{-&*(m=dLw9)74dNRke5Ry`N{#LIGJ{C0X3Hb?^5zP_IO5h;e{pE-&-o~b^AQTTJpeaUa6<#Phc%p!&||QGwd`L*O~_

~aba=%DS5#CS9UJ>H28_KoX(%Yz@m?yy zH2SL?b20pKto+imiR$CWj}YTC3uF;($&H7H2WR4XUijePAnBQnzNl!GM8R7bW8)X$ zvUHHv16P)#PokpNMf^l3CntTbiauC|Mn-LEeF1sMAR6|!X)zrheIa>6w+lH*~C{;fm=()=#31o8ojG#gIqTx{}IYc;K@ zDj{xLm?IldFd@v$%x~o7ztJl*$jHjRoZF8hiHL|mK|qIc=U#+$K8Wh}zq#=&nYGNC zR|eaCZqt_pYkvMo6nTm~dVjkdgD^bmXPJo5O{crx02IgS4ZK|idtvRNuK9S49@CEe=J9FJ+`KDsmHV|47qfF8H;$$t8@KE#?OY zG;)4kXM^DpgguWCY;GU%oF^a2(>{VU`T!q3zr@-`GV%~_r(y2`uw}UqNQq|iZ|CQy z8&^^DIwtsNkhgh+DvpN$?8DilpY@v?!67wZTCVtIpd|#e`I7dBkycGtZgQMm+>cFd z`i#9gCVWn6vo`W%Ti@o7@6+9gRjN2-({8N&4o=)h78fIfgCCJ%qo>87RMyn==aTph z4ZYolownF#=Aw=z!7D z$n5MaJ^{gV(?xme3FOKFQ2(zf;ok*_Io%2P-d*|G@FV*A`c`fI9`GWtF0Z0iPTZHB zg$c;Wn9q?CKVX4}1}XB9&p%j;8VDrkqI*zK3}Rkjut#z)J)_+lR&yXOq~ z^yyRmqs1mBCMJAgyl8qc%7+ghYSue5@9yrFIq$p&t6O8zd{^xL0)F&lSkB;RerHr6 z_B}JYvi$<_1IJh?P4v_DVCnCy2f!r^xrFstmAMv))Km2{X+}V+otY8rWytga%?ziT z8|e9R(8@D36bPby3Q3D0G1*)yJL&a~^m%gXfVJ4+9KY)=-;nJ zKX=CNqEzlpdfNcZ6Z~-(ZFBybuUEIr*|Jsa!0o{nxQ>?M{Q*iwfhWAk1sH&{Z28UK0Hq%dXkZG zKXujA{Fh|ccV$$%Qsd%sV#UgmhrVJGel^WvNV-E>Q@&&;PC{u94h{X2xw;z76+)u} zPoGf+kYNKdTm?h0c!PZ;$49u`lX+xBG>*WxE@~RHl;17q1IIkHoP-~F_jQ8Du)00) z0(yd)!xIun>DMxxSEhs|eIE}y9XiqS5~)z+AdWIe;LzN>MWn?Y<2YeAKtx1@GS$+9 zMoNzC{pxk60fk2WGRYDCma_zj-B+pdm5~9yo^r<2^0Ir4#n`EB)B(97Vdd{6Wcm}> zlXiv-t$RraeGchqqpx0g{9dzPyd&M;VGIkw?=Fvd;{CqEZK&q#ME)It;SL@!E%+9$ zf-gosI)m3XOWQvjT%wA+)Y(QX@noJ*ql{c}P=K=9(b<_RDb2K#yH_^ zOT)GJ>p@g; zA{uHh3YDSCDvgMc!my**u2zNNb}kZPZ5%!4Yp?vgx3uXpGldEqzm(B5fIoz_x#$gL zr$HANu8nu6{fI!`jFOTP#bi#n?X1jk8wNEb8iR(GvDK9IO>&|3nhvAQY~!a8e}M_4 zucskWAZyQ1B6GGx-G^_N=;(D3f@+|ik6*XM4(0}Vga7kcpZTe0)3ImMe3kT0@E9%; zmUgh*`U64iYI4Casi&C;VCmdl^c6Qj0TTW-8JjO*N3OTX>95r2}*uf3n7820- zf{4rLA6d;T9jfcfm107Z!vC)y4XSwE2P*&V5Sl}dG&>+ad8Hn8H}}^Wo6EZW5a9RQGmwm<^D`|<5t12riX3u#K;JZ%$}j9X1$Vv zg2JCKm32C6pQsJuN~oDzsI{%tDla0c6(GkO&uL1>yVwG&(pYnlc0Np67D#*PB^y&yiYYK(Foh<8!_ZowaN2h>zq#Xrvx0biz;z^-5abX8Ut*bNqS+aZb$9fO-x2?6&@rc!s zP4=~xJl7cqp&Jq#KX$8Wnh0tETu7POksjpKFBzwK^41-@WAdg~UVa(@tOWHn7t}01 zmXk)+@NuE|vHs#kf)d0}HjmI_tf?MWU-MIRNAEca+PGG!m*V^GcWdU$uKU?~X$*


[name] +

+
Head(Mask):
[(wear_mask ? wear_mask : "Nothing")] +
Left Hand: [(l_hand ? l_hand : "Nothing")] +
Right Hand: [(r_hand ? r_hand : "Nothing")] +
Back: [(back ? back : "Nothing")] [((istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank) && !( internal )) ? text(" Set Internal", src) : "")] +
[(internal ? text("Remove Internal") : "")] +
Empty Pockets +
Refresh +
Close +
"} + user << browse(dat, text("window=mob[];size=325x500", name)) + onclose(user, "mob[name]") + return + +/mob/living/ret_grab(obj/effect/list_container/mobl/L as obj, flag) + if ((!( istype(l_hand, /obj/item/weapon/grab) ) && !( istype(r_hand, /obj/item/weapon/grab) ))) + if (!( L )) + return null + else + return L.container + else + if (!( L )) + L = new /obj/effect/list_container/mobl( null ) + L.container += src + L.master = src + if (istype(l_hand, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = l_hand + if (!( L.container.Find(G.affecting) )) + L.container += G.affecting + if (G.affecting) + G.affecting.ret_grab(L, 1) + if (istype(r_hand, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = r_hand + if (!( L.container.Find(G.affecting) )) + L.container += G.affecting + if (G.affecting) + G.affecting.ret_grab(L, 1) + if (!( flag )) + if (L.master == src) + var/list/temp = list( ) + temp += L.container + //L = null + qdel(L) + return temp + else + return L.container + return + +/mob/living/mode() + set name = "Activate Held Object" + set category = "Object" + set src = usr + + if(istype(loc,/obj/mecha)) return + + if(hand) + var/obj/item/W = l_hand + if (W) + W.attack_self(src) + update_inv_l_hand() + else + var/obj/item/W = r_hand + if (W) + W.attack_self(src) + update_inv_r_hand() + return + +/mob/living/abiotic(var/full_body = 0) + if(full_body && ((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )) || (src.back || src.wear_mask))) + return 1 + + if((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract ))) + return 1 + return 0 diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 374ade2f21..70a3f4c3a2 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -865,3 +865,63 @@ default behaviour is: sleep(350) lastpuke = 0 +/mob/living/update_canmove() + if(!resting && cannot_stand() && can_stand_overridden()) + lying = 0 + canmove = 1 + else + if(istype(buckled, /obj/vehicle)) + var/obj/vehicle/V = buckled + if(cannot_stand()) + lying = 0 + canmove = 1 + pixel_y = V.mob_offset_y - 5 + else + if(buckled.buckle_lying != -1) lying = buckled.buckle_lying + canmove = 1 + pixel_y = V.mob_offset_y + else if(buckled) + anchored = 1 + canmove = 0 + if(istype(buckled)) + if(buckled.buckle_lying != -1) + lying = buckled.buckle_lying + if(buckled.buckle_movable) + anchored = 0 + canmove = 1 + + else if(cannot_stand()) + lying = 1 + canmove = 0 + else if(stunned) + canmove = 0 + else if(captured) + anchored = 1 + canmove = 0 + lying = 0 + else + lying = 0 + canmove = 1 + + if(lying) + density = 0 + if(l_hand) unEquip(l_hand) + if(r_hand) unEquip(r_hand) + else + density = initial(density) + + for(var/obj/item/weapon/grab/G in grabbed_by) + if(G.state >= GRAB_AGGRESSIVE) + canmove = 0 + break + + //Temporarily moved here from the various life() procs + //I'm fixing stuff incrementally so this will likely find a better home. + //It just makes sense for now. ~Carn + if( update_icon ) //forces a full overlay update + update_icon = 0 + regenerate_icons() + else if( lying != lying_prev ) + update_icons() + return canmove + diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm index 88f989f15e..977dfce221 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm @@ -11,8 +11,6 @@ //Has a list of items that it can hold. var/list/can_hold = list( /obj/item/weapon/cell, - /obj/item/weapon/firealarm_electronics, - /obj/item/weapon/airalarm_electronics, /obj/item/weapon/airlock_electronics, /obj/item/weapon/tracker_electronics, /obj/item/weapon/module/power_control, diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 5340ee39fb..8b9271a40c 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -71,7 +71,7 @@ //Parrots will generally sit on their pertch unless something catches their eye. //These vars store their preffered perch and if they dont have one, what they can use as a perch var/obj/parrot_perch = null - var/obj/desired_perches = list(/obj/structure/computerframe, /obj/structure/displaycase, \ + var/obj/desired_perches = list(/obj/structure/frame, /obj/structure/displaycase, \ /obj/structure/filingcabinet, /obj/machinery/teleport, \ /obj/machinery/computer, /obj/machinery/clonepod, \ /obj/machinery/dna_scannernew, /obj/machinery/telecomms, \ diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index abcaf66ae6..fdbb295b94 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -195,21 +195,6 @@ /mob/proc/show_inv(mob/user as mob) - user.set_machine(src) - var/dat = {" -
[name]
-

-
Head(Mask): [(wear_mask ? wear_mask : "Nothing")] -
Left Hand: [(l_hand ? l_hand : "Nothing")] -
Right Hand: [(r_hand ? r_hand : "Nothing")] -
Back: [(back ? back : "Nothing")] [((istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank) && !( internal )) ? text(" Set Internal", src) : "")] -
[(internal ? text("Remove Internal") : "")] -
Empty Pockets -
Refresh -
Close -
"} - user << browse(dat, text("window=mob[];size=325x500", name)) - onclose(user, "mob[name]") return //mob verbs are faster than object verbs. See http://www.byond.com/forum/?post=1326139&page=2#comment8198716 for why this isn't atom/verb/examine() @@ -248,37 +233,6 @@ /mob/proc/ret_grab(obj/effect/list_container/mobl/L as obj, flag) - if ((!( istype(l_hand, /obj/item/weapon/grab) ) && !( istype(r_hand, /obj/item/weapon/grab) ))) - if (!( L )) - return null - else - return L.container - else - if (!( L )) - L = new /obj/effect/list_container/mobl( null ) - L.container += src - L.master = src - if (istype(l_hand, /obj/item/weapon/grab)) - var/obj/item/weapon/grab/G = l_hand - if (!( L.container.Find(G.affecting) )) - L.container += G.affecting - if (G.affecting) - G.affecting.ret_grab(L, 1) - if (istype(r_hand, /obj/item/weapon/grab)) - var/obj/item/weapon/grab/G = r_hand - if (!( L.container.Find(G.affecting) )) - L.container += G.affecting - if (G.affecting) - G.affecting.ret_grab(L, 1) - if (!( flag )) - if (L.master == src) - var/list/temp = list( ) - temp += L.container - //L = null - qdel(L) - return temp - else - return L.container return /mob/verb/mode() @@ -286,18 +240,6 @@ set category = "Object" set src = usr - if(istype(loc,/obj/mecha)) return - - if(hand) - var/obj/item/W = l_hand - if (W) - W.attack_self(src) - update_inv_l_hand() - else - var/obj/item/W = r_hand - if (W) - W.attack_self(src) - update_inv_r_hand() return /* @@ -735,65 +677,6 @@ //Updates canmove, lying and icons. Could perhaps do with a rename but I can't think of anything to describe it. /mob/proc/update_canmove() - - if(!resting && cannot_stand() && can_stand_overridden()) - lying = 0 - canmove = 1 - else - if(istype(buckled, /obj/vehicle)) - var/obj/vehicle/V = buckled - if(cannot_stand()) - lying = 0 - canmove = 1 - pixel_y = V.mob_offset_y - 5 - else - if(buckled.buckle_lying != -1) lying = buckled.buckle_lying - canmove = 1 - pixel_y = V.mob_offset_y - else if(buckled) - anchored = 1 - canmove = 0 - if(istype(buckled)) - if(buckled.buckle_lying != -1) - lying = buckled.buckle_lying - if(buckled.buckle_movable) - anchored = 0 - canmove = 1 - - else if(cannot_stand()) - lying = 1 - canmove = 0 - else if(stunned) - canmove = 0 - else if(captured) - anchored = 1 - canmove = 0 - lying = 0 - else - lying = 0 - canmove = 1 - - if(lying) - density = 0 - if(l_hand) unEquip(l_hand) - if(r_hand) unEquip(r_hand) - else - density = initial(density) - - for(var/obj/item/weapon/grab/G in grabbed_by) - if(G.state >= GRAB_AGGRESSIVE) - canmove = 0 - break - - //Temporarily moved here from the various life() procs - //I'm fixing stuff incrementally so this will likely find a better home. - //It just makes sense for now. ~Carn - if( update_icon ) //forces a full overlay update - update_icon = 0 - regenerate_icons() - else if( lying != lying_prev ) - update_icons() - return canmove @@ -1007,8 +890,7 @@ mob/proc/yank_out_object() R.adjustFireLoss(10) selection.forceMove(get_turf(src)) - if(!(U.l_hand && U.r_hand)) - U.put_in_hands(selection) + U.put_in_hands(selection) for(var/obj/item/weapon/O in pinned) if(O == selection) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index eaa88e6212..7eb32ea8db 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -60,7 +60,6 @@ var/next_move = null var/transforming = null //Carbon var/other = 0.0 - var/hand = null var/eye_blind = null //Carbon var/eye_blurry = null //Carbon var/ear_deaf = null //Carbon @@ -119,12 +118,6 @@ var/m_intent = "run"//Living var/lastKnownIP = null var/obj/buckled = null//Living - var/obj/item/l_hand = null//Living - var/obj/item/r_hand = null//Living - var/obj/item/weapon/back = null//Human/Monkey - var/obj/item/weapon/tank/internal = null//Human/Monkey - var/obj/item/weapon/storage/s_active = null//Carbon - var/obj/item/clothing/mask/wear_mask = null//Carbon var/seer = 0 //for cult//Carbon, probably Human diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index c85b8d96a2..ec83ced425 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -5,8 +5,10 @@ ///Called by client/Move() ///Checks to see if you are grabbing anything and if moving will affect your grab. /client/proc/Process_Grab() - for(var/obj/item/weapon/grab/G in list(mob.l_hand, mob.r_hand)) - G.reset_kill_state() //no wandering across the station/asteroid while choking someone + if(istype(mob, /mob/living)) + var/mob/living/L = mob + for(var/obj/item/weapon/grab/G in list(L.l_hand, L.r_hand)) + G.reset_kill_state() //no wandering across the station/asteroid while choking someone /obj/item/weapon/grab name = "grab" diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 871215a519..316e0e2f30 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -288,12 +288,6 @@ It's fairly easy to fix if dealing with single letters but not so much with comp /mob/proc/abiotic(var/full_body = 0) - if(full_body && ((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )) || (src.back || src.wear_mask))) - return 1 - - if((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract ))) - return 1 - return 0 //converts intent-strings into numbers and back diff --git a/code/modules/mob/update_icons.dm b/code/modules/mob/update_icons.dm index a6ae6dc4a0..ceca667c39 100644 --- a/code/modules/mob/update_icons.dm +++ b/code/modules/mob/update_icons.dm @@ -19,6 +19,15 @@ /mob/proc/update_inv_back() return +/mob/proc/update_inv_active_hand() + return + +/mob/living/update_inv_active_hand(var/A) + if(hand) + update_inv_l_hand(A) + else + update_inv_r_hand(A) + /mob/proc/update_inv_l_hand() return diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index e3452512d1..ac27e85841 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -98,7 +98,7 @@ if (2) take_damage(4) -/obj/item/organ/external/attack_self(var/mob/user) +/obj/item/organ/external/attack_self(var/mob/living/user) if(!contents.len) return ..() var/list/removable_objects = list() @@ -113,8 +113,7 @@ var/obj/item/I = pick(removable_objects) I.loc = get_turf(user) //just in case something was embedded that is not an item if(istype(I)) - if(!(user.l_hand && user.r_hand)) - user.put_in_hands(I) + user.put_in_hands(I) user.visible_message("\The [user] rips \the [I] out of \the [src]!") return //no eating the limb until everything's been removed return ..() @@ -128,7 +127,7 @@ usr << "There is \a [I] sticking out of it." return -/obj/item/organ/external/attackby(obj/item/weapon/W as obj, mob/user as mob) +/obj/item/organ/external/attackby(obj/item/weapon/W as obj, mob/living/user as mob) switch(stage) if(0) if(istype(W,/obj/item/weapon/scalpel)) @@ -145,8 +144,7 @@ if(contents.len) var/obj/item/removing = pick(contents) removing.loc = get_turf(user.loc) - if(!(user.l_hand && user.r_hand)) - user.put_in_hands(removing) + user.put_in_hands(removing) user.visible_message("[user] extracts [removing] from [src] with [W]!") else user.visible_message("[user] fishes around fruitlessly in [src] with [W].") diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm index a7d489ba53..dc7ec84777 100644 --- a/code/modules/paperwork/faxmachine.dm +++ b/code/modules/paperwork/faxmachine.dm @@ -14,6 +14,7 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins use_power = 1 idle_power_usage = 30 active_power_usage = 200 + frame_type = "fax" var/obj/item/weapon/card/id/scan = null // identification var/authenticated = 0 diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index 67eb5c9aeb..57691fed9b 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -17,12 +17,10 @@ density = 1 anchored = 1 - /obj/structure/filingcabinet/chestdrawer name = "chest drawer" icon_state = "chestdrawer" - /obj/structure/filingcabinet/filingcabinet //not changing the path to avoid unecessary map issues, but please don't name stuff like this in the future -Pete icon_state = "tallcabinet" @@ -46,6 +44,16 @@ playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) anchored = !anchored user << "You [anchored ? "wrench" : "unwrench"] \the [src]." + else if(istype(P, /obj/item/weapon/screwdriver)) + user << "You begin taking the [name] apart." + if(do_after(user, 10)) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You take the [name] apart." + new /obj/item/stack/material/steel( src.loc, 4 ) + for(var/obj/item/I in contents) + I.forceMove(loc) + qdel(src) + return else user << "You can't put [P] in [src]!" @@ -151,7 +159,7 @@ var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(src) P.info = "
Medical Record

" P.info += "Name: [G.fields["name"]] ID: [G.fields["id"]]
\nSex: [G.fields["sex"]]
\nAge: [G.fields["age"]]
\nFingerprint: [G.fields["fingerprint"]]
\nPhysical Status: [G.fields["p_stat"]]
\nMental Status: [G.fields["m_stat"]]
" - + P.info += "
\n
Medical Data

\nBlood Type: [M.fields["b_type"]]
\nDNA: [M.fields["b_dna"]]
\n
\nMinor Disabilities: [M.fields["mi_dis"]]
\nDetails: [M.fields["mi_dis_d"]]
\n
\nMajor Disabilities: [M.fields["ma_dis"]]
\nDetails: [M.fields["ma_dis_d"]]
\n
\nAllergies: [M.fields["alg"]]
\nDetails: [M.fields["alg_d"]]
\n
\nCurrent Diseases: [M.fields["cdi"]] (per disease info placed in log/comment section)
\nDetails: [M.fields["cdi_d"]]
\n
\nImportant Notes:
\n\t[M.fields["notes"]]
\n
\n
Comments/Log

" var/counter = 1 while(M.fields["com_[counter]"]) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index cc8feae5b2..bb4a9d1a23 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -337,8 +337,9 @@ var/obj/item/i = usr.get_active_hand() // Check to see if he still got that darn pen, also check if he's using a crayon or pen. var/iscrayon = 0 if(!istype(i, /obj/item/weapon/pen)) - if(usr.back && istype(usr.back,/obj/item/weapon/rig)) - var/obj/item/weapon/rig/r = usr.back + var/mob/living/M = usr + if(istype(M) && M.back && istype(M.back,/obj/item/weapon/rig)) + var/obj/item/weapon/rig/r = M.back var/obj/item/rig_module/device/pen/m = locate(/obj/item/rig_module/device/pen) in r.installed_modules if(!r.offline && m) i = m.device diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 6d24a8f238..f29883a54c 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -9,11 +9,21 @@ idle_power_usage = 30 active_power_usage = 200 power_channel = EQUIP + circuit = /obj/item/weapon/circuitboard/photocopier + frame_type = "photocopier" var/obj/item/copyitem = null //what's in the copier! var/copies = 1 //how many copies to print! var/toner = 30 //how much toner is left! woooooo~ var/maxcopies = 10 //how many copies can be copied at once- idea shamelessly stolen from bs12's copier! +/obj/machinery/photocopier/New() + component_parts = list() + component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) + component_parts += new /obj/item/weapon/stock_parts/motor(src) + component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) + component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) + RefreshParts() + /obj/machinery/photocopier/attack_ai(mob/user as mob) return attack_hand(user) @@ -126,6 +136,12 @@ playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) anchored = !anchored user << "You [anchored ? "wrench" : "unwrench"] \the [src]." + + else if(default_deconstruction_screwdriver(user, O)) + return + else if(default_deconstruction_crowbar(user, O)) + return + return /obj/machinery/photocopier/ex_act(severity) diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index 90ed7ccf59..5787ff2d02 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -91,7 +91,7 @@ var/global/photo_count = 0 /obj/item/weapon/storage/photo_album/MouseDrop(obj/over_object as obj) if((istype(usr, /mob/living/carbon/human))) - var/mob/M = usr + var/mob/living/carbon/human/M = usr if(!( istype(over_object, /obj/screen) )) return ..() playsound(loc, "rustle", 50, 1, -5) diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm index a6954e9e2f..f37cdce706 100644 --- a/code/modules/paperwork/stamps.dm +++ b/code/modules/paperwork/stamps.dm @@ -52,6 +52,10 @@ name = "centcomm rubber stamp" icon_state = "stamp-cent" +/obj/item/weapon/stamp/qm + name = "quartermaster's stamp" + icon_state = "stamp-qm" + // Syndicate stamp to forge documents. /obj/item/weapon/stamp/chameleon/attack_self(mob/user as mob) diff --git a/code/modules/power/batteryrack.dm b/code/modules/power/batteryrack.dm index a70b19421e..2d7f38e3b9 100644 --- a/code/modules/power/batteryrack.dm +++ b/code/modules/power/batteryrack.dm @@ -9,6 +9,7 @@ input_level_max = 0 output_level_max = 0 icon_state = "gsmes" + circuit = /obj/item/weapon/circuitboard/batteryrack var/cells_amount = 0 var/capacitors_amount = 0 var/global/list/br_cache = null @@ -22,7 +23,6 @@ //Maybe this should be moved up to obj/machinery /obj/machinery/power/smes/batteryrack/proc/add_parts() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/batteryrack component_parts += new /obj/item/weapon/cell/high component_parts += new /obj/item/weapon/cell/high component_parts += new /obj/item/weapon/cell/high @@ -49,7 +49,7 @@ /obj/machinery/power/smes/batteryrack/update_icon() overlays.Cut() if(stat & BROKEN) return - + if(!br_cache) br_cache = list() br_cache.len = 7 @@ -60,7 +60,7 @@ br_cache[5] = image('icons/obj/power.dmi', "gsmes_og2") br_cache[6] = image('icons/obj/power.dmi', "gsmes_og3") br_cache[7] = image('icons/obj/power.dmi', "gsmes_og4") - + if (output_attempt) overlays += br_cache[1] if(inputting) @@ -83,9 +83,10 @@ if (charge < (capacity / 100)) if (!output_attempt && !input_attempt) playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1) - var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc) + var/obj/structure/frame/M = new /obj/structure/frame(src.loc) + M.frame_type = "machine" M.state = 2 - M.icon_state = "box_1" + M.icon_state = "machine_1" for(var/obj/I in component_parts) I.loc = src.loc qdel(src) @@ -117,12 +118,12 @@ /obj/machinery/power/smes/batteryrack/makeshift name = "makeshift PSU" desc = "A rack of batteries connected by a mess of wires posing as a PSU." + circuit = /obj/item/weapon/circuitboard/ghettosmes var/overcharge_percent = 0 /obj/machinery/power/smes/batteryrack/makeshift/add_parts() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/ghettosmes component_parts += new /obj/item/weapon/cell/high component_parts += new /obj/item/weapon/cell/high component_parts += new /obj/item/weapon/cell/high diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 400e7281b6..41e182b91b 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -287,14 +287,15 @@ else user << "\blue You close the access panel." else if(istype(O, /obj/item/weapon/crowbar) && open) - var/obj/machinery/constructable_frame/machine_frame/new_frame = new /obj/machinery/constructable_frame/machine_frame(src.loc) + var/obj/structure/frame/new_frame = new /obj/structure/frame(src.loc) for(var/obj/item/I in component_parts) I.loc = src.loc while ( sheets > 0 ) DropFuel() + new_frame.frame_type = "machine" new_frame.state = 2 - new_frame.icon_state = "box_1" + new_frame.icon_state = "machine_1" qdel(src) /obj/machinery/power/port_gen/pacman/attack_hand(mob/user as mob) diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 05dae4fdbf..2971484715 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -12,6 +12,7 @@ density = 1 anchored = 1 use_power = 0 + circuit = /obj/item/weapon/circuitboard/smes var/capacity = 5e6 // maximum charge var/charge = 1e6 // actual charge diff --git a/code/modules/power/smes_construction.dm b/code/modules/power/smes_construction.dm index 497e16a885..f14c084882 100644 --- a/code/modules/power/smes_construction.dm +++ b/code/modules/power/smes_construction.dm @@ -116,7 +116,6 @@ /obj/machinery/power/smes/buildable/New(var/install_coils = 1) component_parts = list() component_parts += new /obj/item/stack/cable_coil(src,30) - component_parts += new /obj/item/weapon/circuitboard/smes(src) src.wires = new /datum/wires/smes(src) // Allows for mapped-in SMESs with larger capacity/IO @@ -345,9 +344,10 @@ return usr << "\red You have disassembled the SMES cell!" - var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc) + var/obj/structure/frame/M = new /obj/structure/frame(src.loc) + M.frame_type = "machine" M.state = 2 - M.icon_state = "box_1" + M.icon_state = "machine_1" for(var/obj/I in component_parts) I.loc = src.loc component_parts -= I diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 232adb345b..dd1c2a56b6 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -407,25 +407,27 @@ var/list/solars_list = list() if(do_after(user, 20)) if (src.stat & BROKEN) user << "\blue The broken glass falls out." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) new /obj/item/weapon/material/shard( src.loc ) var/obj/item/weapon/circuitboard/solar_control/M = new /obj/item/weapon/circuitboard/solar_control( A ) for (var/obj/C in src) C.loc = src.loc A.circuit = M + A.frame_type = "computer" A.state = 3 - A.icon_state = "3" + A.icon_state = "computer_3" A.anchored = 1 qdel(src) else user << "\blue You disconnect the monitor." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) var/obj/item/weapon/circuitboard/solar_control/M = new /obj/item/weapon/circuitboard/solar_control( A ) for (var/obj/C in src) C.loc = src.loc A.circuit = M + A.frame_type = "computer" A.state = 4 - A.icon_state = "4" + A.icon_state = "computer_4" A.anchored = 1 qdel(src) else diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 3e801be0d1..44b36db8ac 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -93,7 +93,7 @@ if(requires_two_hands) var/mob/living/M = loc if(istype(M)) - if((M.l_hand == src && !M.r_hand) || (M.r_hand == src && !M.l_hand)) + if(M.item_is_in_hands(src) && !M.hands_are_full()) name = "[initial(name)] (wielded)" item_state = wielded_icon else @@ -179,7 +179,7 @@ var/held_acc_mod = 0 var/held_disp_mod = 0 if(requires_two_hands) - if((user.l_hand == src && user.r_hand) || (user.r_hand == src && user.l_hand)) + if(user.item_is_in_hands(src) && user.hands_are_full()) held_acc_mod = -3 held_disp_mod = 3 diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm index 4763b83bb6..c3a48cd374 100644 --- a/code/modules/projectiles/guns/projectile/pistol.dm +++ b/code/modules/projectiles/guns/projectile/pistol.dm @@ -1,6 +1,6 @@ /obj/item/weapon/gun/projectile/colt var/unique_reskin - name = "vintage .45 pistol" + name = ".45 pistol" desc = "A cheap Martian knock-off of a Colt M1911. Uses .45 rounds." magazine_type = /obj/item/ammo_magazine/c45m icon_state = "colt" @@ -171,10 +171,10 @@ name = "holdout signal pistol" magazine_type = /obj/item/ammo_magazine/mc9mm/flash -/obj/item/weapon/gun/projectile/pistol/attack_hand(mob/user as mob) +/obj/item/weapon/gun/projectile/pistol/attack_hand(mob/living/user as mob) if(user.get_inactive_hand() == src) if(silenced) - if(user.l_hand != src && user.r_hand != src) + if(!user.item_is_in_hands(src)) ..() return user << "You unscrew [silenced] from [src]." @@ -185,9 +185,9 @@ return ..() -/obj/item/weapon/gun/projectile/pistol/attackby(obj/item/I as obj, mob/user as mob) +/obj/item/weapon/gun/projectile/pistol/attackby(obj/item/I as obj, mob/living/user as mob) if(istype(I, /obj/item/weapon/silencer)) - if(user.l_hand != src && user.r_hand != src) //if we're not in his hands + if(!user.item_is_in_hands(src)) //if we're not in his hands user << "You'll need [src] in your hands to do that." return user.drop_item() diff --git a/code/modules/projectiles/targeting/targeting_overlay.dm b/code/modules/projectiles/targeting/targeting_overlay.dm index 7a6fdcc0ca..46b01a9d1b 100644 --- a/code/modules/projectiles/targeting/targeting_overlay.dm +++ b/code/modules/projectiles/targeting/targeting_overlay.dm @@ -113,7 +113,8 @@ obj/aiming_overlay/proc/update_aiming_deferred() var/cancel_aim = 1 - if(!(aiming_with in owner) || (istype(owner, /mob/living/carbon/human) && (owner.l_hand != aiming_with && owner.r_hand != aiming_with))) + var/mob/living/carbon/human/H = owner + if(!(aiming_with in owner) || (istype(H) && !H.item_is_in_hands(aiming_with))) owner << "You must keep hold of your weapon!" else if(owner.eye_blind) owner << "You are blind and cannot see your target!" diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 0febaa68bc..d176ab205e 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -310,6 +310,7 @@ use_power = 1 idle_power_usage = 5 active_power_usage = 100 + circuit = /obj/item/weapon/circuitboard/grinder var/inuse = 0 var/obj/item/weapon/reagent_containers/beaker = null var/limit = 10 @@ -326,6 +327,10 @@ /obj/machinery/reagentgrinder/New() ..() beaker = new /obj/item/weapon/reagent_containers/glass/beaker/large(src) + component_parts = list() + component_parts += new /obj/item/weapon/stock_parts/motor(src) + component_parts += new /obj/item/weapon/stock_parts/gear(src) + RefreshParts() return /obj/machinery/reagentgrinder/update_icon() @@ -333,6 +338,11 @@ return /obj/machinery/reagentgrinder/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(beaker) + if(default_deconstruction_screwdriver(user, O)) + return + if(default_deconstruction_crowbar(user, O)) + return if (istype(O,/obj/item/weapon/reagent_containers/glass) || \ istype(O,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass) || \ diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 9ba46eb271..a5903e744d 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -40,7 +40,7 @@ /obj/machinery/sleeper, /obj/machinery/smartfridge/, /obj/machinery/biogenerator, - /obj/machinery/constructable_frame, + /obj/structure/frame, /obj/machinery/radiocarbon_spectrometer ) @@ -246,6 +246,17 @@ var/image/lid = image(icon, src, "lid_[initial(icon_state)]") overlays += lid +/obj/item/weapon/reagent_containers/glass/cooler_bottle + desc = "A bottle for a water-cooler." + name = "water-cooler bottle" + icon = 'icons/obj/vending.dmi' + icon_state = "water_cooler_bottle" + matter = list(DEFAULT_WALL_MATERIAL = 200) + w_class = 3.0 + amount_per_transfer_from_this = 20 + possible_transfer_amounts = list(10,20,30,60,120) + volume = 120 + /* /obj/item/weapon/reagent_containers/glass/blender_jug name = "Blender Jug" diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index e31c009677..7fc7707c28 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -3,7 +3,7 @@ //////////////////////////////////////////////////////////////////////////////// /obj/item/weapon/reagent_containers/pill name = "pill" - desc = "a pill." + desc = "A pill." icon = 'icons/obj/chemical.dmi' icon_state = null item_state = "pill" diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index d68be94b9b..7ae41565b7 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -202,10 +202,51 @@ icon_state = "water_cooler" possible_transfer_amounts = null anchored = 1 - New() - ..() - reagents.add_reagent("water",500) + var/bottle = 0 +/obj/structure/reagent_dispensers/water_cooler/New() + if(bottle == 1) + ..() + reagents.add_reagent("water",120) + else + icon_state = "water_cooler_0" + +/obj/structure/reagent_dispensers/water_cooler/attackby(obj/item/I as obj, mob/user as mob) + if(istype(I, /obj/item/weapon/wrench)) + if(bottle) + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + if(do_after(user, 20)) + user << "You unfasten the jug." + var/obj/item/weapon/reagent_containers/glass/cooler_bottle/G = new /obj/item/weapon/reagent_containers/glass/cooler_bottle( src.loc ) + for(var/datum/reagent/R in reagents.reagent_list) + var/total_reagent = reagents.get_reagent_amount(R.id) + G.reagents.add_reagent(R.id, total_reagent) + reagents.clear_reagents() + bottle = 0 + icon_state = "water_cooler_0" + return + + if(istype(I, /obj/item/weapon/screwdriver)) + if(!bottle) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You take the water-cooler apart." + new /obj/item/stack/material/plastic( src.loc, 4 ) + qdel(src) + return + + if(istype(I, /obj/item/weapon/reagent_containers/glass/cooler_bottle)) + if(!bottle) + var/obj/item/weapon/reagent_containers/glass/cooler_bottle/G = I + user << "You start to screw the bottle onto the water-cooler." + if(do_after(user, 20)) + bottle = 1 + icon_state = "water_cooler" + user << "You screw the bottle onto the water-cooler but accidently spill some!" //you spill some because it for somereason transfers 5 units to the bottle after it gets attached but before it's deleted... + for(var/datum/reagent/R in G.reagents.reagent_list) + var/total_reagent = G.reagents.get_reagent_amount(R.id) + reagents.add_reagent(R.id, total_reagent) + qdel(G) + return /obj/structure/reagent_dispensers/beerkeg name = "beer keg" diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index 957c3b574d..0e591e97b0 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -8,6 +8,8 @@ desc = "A conveyor belt." layer = 2 // so they appear under stuff anchored = 1 + circuit = /obj/item/weapon/circuitboard/conveyor + frame_type = "conveyor" var/operating = 0 // 1 if running forward, -1 if backwards, 0 if off var/operable = 1 // true if can operate (no broken segments in this belt run) var/forwards // this is the default (forward) direction, set by the map dir @@ -37,6 +39,14 @@ operating = 1 setmove() + component_parts = list() + component_parts += new /obj/item/weapon/stock_parts/gear(src) + component_parts += new /obj/item/weapon/stock_parts/motor(src) + component_parts += new /obj/item/weapon/stock_parts/gear(src) + component_parts += new /obj/item/weapon/stock_parts/motor(src) + component_parts += new /obj/item/stack/cable_coil(src,5) + RefreshParts() + /obj/machinery/conveyor/proc/setmove() if(operating == 1) movedir = forwards @@ -81,6 +91,23 @@ if(isrobot(user)) return //Carn: fix for borgs dropping their modules on conveyor belts if(I.loc != user) return // This should stop mounted modules ending up outside the module. + if(default_deconstruction_screwdriver(user, I)) + return + if(default_deconstruction_crowbar(user, I)) + return + + if(istype(I, /obj/item/device/multitool)) + if(panel_open) + var/input = sanitize(input(usr, "What id would you like to give this conveyor?", "Multitool-Conveyor interface", id)) + if(!input) + usr << "No input found please hang up and try your call again." + return + id = input + for(var/obj/machinery/conveyor_switch/C in world) + if(C.id == id) + C.conveyors += src + return + user.drop_item(get_turf(src)) return @@ -221,6 +248,36 @@ S.position = position S.update() +/obj/machinery/conveyor_switch/attackby(var/obj/item/I, mob/user) + if(default_deconstruction_screwdriver(user, I)) + return + + if(istype(I, /obj/item/weapon/weldingtool)) + if(panel_open) + var/obj/item/weapon/weldingtool/WT = I + if(!WT.remove_fuel(0, user)) + user << "The welding tool must be on to complete this task." + return + playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) + if(do_after(user, 20)) + if(!src || !WT.isOn()) return + user << "You deconstruct the frame." + new /obj/item/stack/material/steel( src.loc, 2 ) + qdel(src) + return + + if(istype(I, /obj/item/device/multitool)) + if(panel_open) + var/input = sanitize(input(usr, "What id would you like to give this conveyor switch?", "Multitool-Conveyor interface", id)) + if(!input) + usr << "No input found please hang up and try your call again." + return + id = input + for(var/obj/machinery/conveyor/C in world) + if(C.id == id) + conveyors += C + return + /obj/machinery/conveyor_switch/oneway var/convdir = 1 //Set to 1 or -1 depending on which way you want the convayor to go. (In other words keep at 1 and set the proper dir on the belts.) desc = "A conveyor control switch. It appears to only go in one direction." diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index 0e3858e662..6831034edf 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -8,6 +8,7 @@ using metal and glass, it uses glass and reagents (usually sulphuric acid). name = "Circuit Imprinter" icon_state = "circuit_imprinter" flags = OPENCONTAINER + circuit = /obj/item/weapon/circuitboard/circuit_imprinter var/list/datum/design/queue = list() var/progress = 0 @@ -24,7 +25,6 @@ using metal and glass, it uses glass and reagents (usually sulphuric acid). /obj/machinery/r_n_d/circuit_imprinter/New() ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/circuit_imprinter(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src) diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index ccf20c0ce7..3fbb141f7e 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -11,7 +11,7 @@ Note: Must be placed within 3 tiles of the R&D Console icon_state = "d_analyzer" var/obj/item/weapon/loaded_item = null var/decon_mod = 0 - + circuit = /obj/item/weapon/circuitboard/destructive_analyzer use_power = 1 idle_power_usage = 30 active_power_usage = 2500 @@ -19,7 +19,6 @@ Note: Must be placed within 3 tiles of the R&D Console /obj/machinery/r_n_d/destructive_analyzer/New() ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/destructive_analyzer(src) component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index 8809ee2955..7d5bae00ca 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -2,7 +2,7 @@ name = "Protolathe" icon_state = "protolathe" flags = OPENCONTAINER - + circuit = /obj/item/weapon/circuitboard/protolathe use_power = 1 idle_power_usage = 30 active_power_usage = 5000 @@ -20,7 +20,6 @@ /obj/machinery/r_n_d/protolathe/New() ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/protolathe(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index a5e5a00043..fcaaa7a212 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -13,11 +13,11 @@ idle_power_usage = 800 var/delay = 10 req_access = list(access_rd) //Only the R&D can change server settings. + circuit = /obj/item/weapon/circuitboard/rdserver /obj/machinery/r_n_d/server/New() ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/rdserver(src) component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) component_parts += new /obj/item/stack/cable_coil(src) component_parts += new /obj/item/stack/cable_coil(src) diff --git a/code/modules/research/xenoarchaeology/artifact/artifact.dm b/code/modules/research/xenoarchaeology/artifact/artifact.dm index a3256d6f53..71819efc65 100644 --- a/code/modules/research/xenoarchaeology/artifact/artifact.dm +++ b/code/modules/research/xenoarchaeology/artifact/artifact.dm @@ -108,10 +108,9 @@ . = ..() if(istype(AM,/mob/living/carbon/human)) var/mob/living/carbon/human/H = AM - if((istype(H.l_hand,/obj/item/weapon/pickaxe)) && (!H.hand)) - attackby(H.l_hand,H) - else if((istype(H.r_hand,/obj/item/weapon/pickaxe)) && H.hand) - attackby(H.r_hand,H) + var/obj/item/weapon/pickaxe/P = H.get_inactive_hand() + if(istype(P)) + src.attackby(P, H) else if(istype(AM,/mob/living/silicon/robot)) var/mob/living/silicon/robot/R = AM diff --git a/code/modules/research/xenoarchaeology/machinery/artifact_analyser.dm b/code/modules/research/xenoarchaeology/machinery/artifact_analyser.dm index b449237d77..ebab6fac76 100644 --- a/code/modules/research/xenoarchaeology/machinery/artifact_analyser.dm +++ b/code/modules/research/xenoarchaeology/machinery/artifact_analyser.dm @@ -181,7 +181,7 @@ out += " have been detected " //how the artifact does it's effect - switch(A.my_effect.effect_type) + switch(A.my_effect.effect) if(1) out += " emitting in an ambient energy field." if(2) @@ -224,7 +224,7 @@ out += "low level radiation" //how the artifact does it's effect - switch(A.secondary_effect.effect_type) + switch(A.secondary_effect.effect) if(1) out += " emitting in an ambient energy field." if(2) diff --git a/code/modules/research/xenoarchaeology/master_controller.dm b/code/modules/research/xenoarchaeology/master_controller.dm index 332b1ce06a..65f4b9f1fc 100644 --- a/code/modules/research/xenoarchaeology/master_controller.dm +++ b/code/modules/research/xenoarchaeology/master_controller.dm @@ -9,9 +9,12 @@ #define ARTIFACTSPAWNNUM_LOWER 6 #define ARTIFACTSPAWNNUM_UPPER 12 -datum/controller/game_controller/proc/SetupXenoarch() +/datum/controller/game_controller/proc/SetupXenoarch() //create digsites for(var/turf/simulated/mineral/M in block(locate(1,1,1), locate(world.maxx, world.maxy, world.maxz))) + if(!(M.density)) + continue + if(isnull(M.geologic_data)) M.geologic_data = new/datum/geosample(M) diff --git a/code/modules/security levels/keycard authentication.dm b/code/modules/security levels/keycard authentication.dm index 87514a5473..b4301cf557 100644 --- a/code/modules/security levels/keycard authentication.dm +++ b/code/modules/security levels/keycard authentication.dm @@ -3,6 +3,7 @@ desc = "This device is used to trigger station functions, which require more than one ID card to authenticate." icon = 'icons/obj/monitors.dmi' icon_state = "auth_off" + circuit = /obj/item/weapon/circuitboard/keycard_auth var/active = 0 //This gets set to 1 on all devices except the one where the initial request was made. var/event = "" var/screen = 1 @@ -40,6 +41,24 @@ event_triggered_by = usr broadcast_request() //This is the device making the initial event request. It needs to broadcast to other devices + if(istype(W, /obj/item/weapon/screwdriver)) + user << "You remove the faceplate from the [src]" + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.frame_type = "keycard" + A.pixel_x = pixel_x + A.pixel_y = pixel_y + A.set_dir(dir) + A.circuit = M + A.anchored = 1 + for (var/obj/C in src) + C.forceMove(loc) + A.state = 3 + A.icon_state = "keycard_3" + M.deconstruct(src) + qdel(src) + return + /obj/machinery/keycard_auth/power_change() ..() if(stat &NOPOWER) diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm index 721f124e4e..82c6ad543c 100644 --- a/code/modules/surgery/other.dm +++ b/code/modules/surgery/other.dm @@ -27,7 +27,7 @@ internal_bleeding = 1 break - return affected.open >= 2 && internal_bleeding + return affected.open == (affected.encased ? 3 : 2) && internal_bleeding begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) @@ -206,4 +206,4 @@ fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) user.visible_message("[user]'s [tool] can't quite seem to get through the metal...", \ - "Your [tool] can't quite seem to get through the metal. It's weakening, though - try again.") \ No newline at end of file + "Your [tool] can't quite seem to get through the metal. It's weakening, though - try again.") diff --git a/html/changelogs/Datraen-PBAPCCheck.yml b/html/changelogs/Datraen-PBAPCCheck.yml new file mode 100644 index 0000000000..03e3702eba --- /dev/null +++ b/html/changelogs/Datraen-PBAPCCheck.yml @@ -0,0 +1,6 @@ +author: Datraen + +delete-after: True + +changes: + - bugfix: "Adds a check to prison breaks that makes sure the APC is on before continuing." diff --git a/html/changelogs/Datraen-SpawnTurf.yml b/html/changelogs/Datraen-SpawnTurf.yml new file mode 100644 index 0000000000..ab5d705c17 --- /dev/null +++ b/html/changelogs/Datraen-SpawnTurf.yml @@ -0,0 +1,6 @@ +author: Datraen + +delete-after: True + +changes: + - bugfix: "Artifacts will no longer spawn on floor turfs." diff --git a/icons/mob/items/lefthand.dmi b/icons/mob/items/lefthand.dmi index 728255c84172d2f19c7887cb81d555c6b83003cf..ff683bc069e80a8558f783cb697ee023db91d86d 100644 GIT binary patch delta 19698 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 M+D2Mcns+1r51TsbMF0Q* delta 22629 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�n|7S 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 Rj1dfW{i=a3R@?T;{{gGyZhrs( diff --git a/icons/obj/monitors.dmi b/icons/obj/monitors.dmi index a817a42648cc916bdb64f9c5e8909181a260902a..940051fea1090e993607ab6ded916c422b20e8be 100644 GIT binary patch literal 42104 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 diff --git a/icons/obj/radio.dmi b/icons/obj/radio.dmi index 75196e856d0cc7e1ad4fb5a04a7c1eace21810ba..e5cd99b2071b1c3991ddac002f9ba160e2d4e4a4 100644 GIT binary patch literal 17416 zcmb8XbzD^4yZ=2yOCt>;r4rID(kTi8igb6EbdIz%qI5UX-JMEzcZYNiF!SuW@9+8k z?%z4*d7g9r7+-sD=QVrnwXe0-=ej=c#aE^GvN)I&m>>`cNA8W(2M`EMgZN;efj}T4 z|56BW;^(2F?j&XM*~rnt-pRtw76fuj`7u3Y>(7A=TIF`fENXH2$n^TK)5MbZaRt%2NRXx&OC`sgIiUC0Hwp|y4Gi33zfZ_Vvh7-g@qUoge8?sZl@WvXXEreH{x z?8N1*Lrmo$2Cuc|cjlW2#_F$+EE%OwiF3P9c%MjRj{OEsS6sKA5asf%xerP#<1iDS0-gZIB(j>qYqPFQ~~T z^wZB#Ge-~3>I+A*DC1(|L!_3MEI*%gF;125te(9p-5x2N|J3xBh~T*QKuz^WY>QC(?zSm^h9fBvmm)(J#tyy!Tma@&8;E^f$28(z4EMq2x&q zdZuhr?FU^SaOS^LHx84b*=>8;8aQ!@(Kn!R4|?i&@Ok@D@dyY+1Co;xS8+@Elj^Qc zq}B>skr4+|W@;Fde#H{^$1u+tM2TmyhNHn~TPe=9xdXId*hf znr$?c45RaDKjcaG(vr?uvhP}F;0J0X@mW;zXn!YH*MS^9T0A^F;_+CSy>>%t6n$A4ItyEKa@+ zj1^AMzJ9G$4d>m%%0IS8ak@D-`6i4L`|ZjODcaeSl?eueaYe|`|Arf$f87cS#3Eg< z2sa5byJqDFwHuMIZ*`fOy$^lflc~at!^Fg-UgN>nud%mN6u1qdcs+xzClfa9eC2 zBZM~Sk;(TG4x#%yH;|a657Ia8JJB!;3B%4obWkgF|K<1Z-$N`V2E9P5i_1Fgzkg&U z;d4`iLKJyHr-gqXt2eo@j)Ruv%_m7arbX@<4p-Xr>{Bn>+$=|ZufD)<-=L8x6l7&} za(G@@FH3F?F~m{kmAQ6w@DQ(NA&rNx)Ws8bzE%ios(P_HR~JtyGJC>4*7ce5X1}Pc z{CwfK{5GwLfRgfMBdnpNDdR&SJ~eez){Gvhj;P2KBs?6uyRQxPQ{3(uq8Xu;Dj{J} z=(d#Kvco-)ANvE1_}z|eDsVTLCae{go^JO>UVd{5Lnx2Zx3pyvlE~&t&&Y@&E-udK z$kdrTehdP6*WIW%v0Zow$MwIUd0QqcC-?Okv@(`~Aa{noq!KLqd{ory=H!oHn;Ymd z>!8Y6NfMd8O%9C*h2@N#8L6^%WcXT?1N1OPkj`;#VQnp?t^I_J*r%_qJ45Jn5(yr5_A35uRBc%THcw~j33e$h+LPis-QC1|t+RUpuO8gBE+!b~x2NYCf?b^TQh7{n)1=yXHY z+LldKKi5{G#K_^WF2%#o|N4G`z6XCh^gzol$$O`vi?{%3KaQP00QRo_t^LIN_*B7E zC9e1R=|45-u(+p)!Ta zWsZdE6I5+y7FAJEY2xHD-*fg1P=ZEv)zFqUzr>J%`t960Uh_~){m9)NwR}>F{z2$G ze61*%|FkatK)I$4uguFGZLThyxFUAMO1akLH64Fr#+DZHl@MzR7zh9l|KXY$4-}^f z9Ll0(d-&c&^FhAtyfI=#*LknsI2iv~w#keA_N|k6aJ|bu5=jcoPKoE=|8rFp;y7`Bi zrbYxb>?K%DF$`&z%w7`?Z`-0r8uz)$JRG@;quge35TDZBa5WPyBNt@>-`gHD$PgU< z>YLGgfbFip6!Fi&km98#lVVY&_wR=@gdJ{MZ{;tkff?tC_r|AR7kZuoC~bGux?B&3 zht`Zg-Y#DRdpFcpSJQBC*sI??`Z5U}^aA>^;dpX|%oC-LMZ@Bp8+7>K$){$wh7lS7 z^LpreXbaREnL)lH$R^iaaYjyu+dWmiKg6n|+Z;)mUjors(qp8MB1+z7-UV|E5aPkV_G?& zlLQWAi@UY3TKCyQRPDx+5eWj<8J(2dC&E7398^~I&Yp(4`)}{fZwNr;jBJ>q6g~lJ zKLkcFTnH0v!|3Fp%?GhyoKD0{TMHvqBnRGfuy1g_?bUS!MPQm1(jFRUOWBNIv5E0leWN_Y7pGD!jKTR*T zu~;^?jRCx6gpRu60Mc)c(Msl`Xx{nC&1J>0OTVYM%kI$xK{QPO1UrNV<5z|T=RcNN z#1)$Vy88a-%O0fRlf76 zwAeJl!b_`bM`*sjs5}&`7fUTC_O4x>(qRq19$Q&ijZLbfd%KoN_Hm>|*z#=oe*8$d zZBfJciLw0!ZbJT4)^kCRQ6n;C0(oHF{J?L+1%&Jxda8qjH>W}36LRveIXTbV>M0o> z!XiW0N$_0jz+o01PAWv~q!p}LD}sS@pTo~Dl9CjSjOaT%JMqbg_D7HN^YbaQva`xX zUXkY=>@sHO1vgRV1*3O%Eh&tifA<4Kfxn&xc~Vl+NngBH3Kx7uXe=ELEaX6=M#*c@ zUcGv?c%_8B0Qvql*Pz1>wcco3zWJmR3x5FxxUzOQS9P;K$&@1Osp{m-gn^AIt*%aH zX=PPmKV}FL^AQLCEK|*dS`zaaA9YZz5IYV84GL>(0@t_ux-mSw<^mt8I+K#{!XQ9< z-NxMcxe3pW3{PxL^X9IrcBIyZ2=m>>>}Aw>PB*dYinrlEOJ0}Le#WaSo^O<#ychin zI^yQ0Dx244LxSGv1(mLm$ALM4DZy%{bS=&Eh+rxp;TF{1=zOqxd@RZ)&&a|O9`<7P z{&*xe7nr+^kHmefu`6}7qyMb?A+xddM@4i1&0F-@nX(j*V&7im=cqzqVUJkMSrih_Yonn=@${#R$iRzKVA=9bQy>1o1V;s5{R70zSdR=>XbU{}344NhNz5BwNSb3lAut{ousYHWJRQj z3K$ZG#N&KvdiNV-+*EJBQdJ<%NI^kSPIL5BN=hoLr34jvq^qK$Lc`7;rFGDBOWF8C zcrBUYV6c_HcUy1Sk;cRI4W8UxH-iv4Nl^-Ea+cT7& zvFWnx5^@L#ko8EfWHmNoE{phRr%GyRQBE^3WS5jg6cst3s7?+7op}{Zy&jtQ$A&c| zB&6G~-g9(xw7rY`73t@);U1xq>EbuY2|I0Dl5ak$iSD2IPV#iYxB1)1owOKptiKAl z)gF^OVX5+7_=V0+*DfuX;O(j_=xl?x*EeFv$@9esn;`(mV+X_yB z)pftag>-QHLLVN`IwX!|Y%dwDyf=yPJl3}{+?@@djcHD@zGF&-#EG?#$ zQSql?H?jLqkQZ?U4J+?hls78n<{M>W-K}h@f?95UVPA;_@Wjsjjc(!Nedq$`pRexu zZGLb+2$2CxD6ooa?B^*2y*3^0uD0l{T-tgUADx%K*N9`Brg8N92&=aJEevm)SgG|YqGTkEC!P1>L`AGe)dP!Uvvyk z5cyafaRxAk{9$o5PPBT;z?-JFncoJlP=bngG{T5?p8U}f{%|-1|M`+v8`V)?e>KEe z_A^YBf{Y_W3&JX+f&z#SWfhfxzr}~+uqAuLlNGP?h-XlK4^Lph>6`k@@%Y^&FnoBB z{3ST&hSUvy4dw%i8jF;*wrRkRyKQB1bQFUAR2v5*;0r@`t4F7=kcv30S1&$3pj1+E z41fk%xv{b09GjZrns0pt+DAcrrA1!fB)By7z6B_N1Ec3%HCucu9<0@P0&W2&ba^GB?Cv_FB<87VR zR`KNuxt01AvVnB2O*$-=+e9QOVBq(_+Qx=IGCE#oUmrTqhm0@TNlU1sO<-EnHs#BG zdAB2j`P|kxZ;3Ir6MV$WH)1iZZbzUmI6ppp4~udW%1B9hl4zlWMH6}ZCf8TDWV^BL zE;vYRZU%iIlJ+pm_)g=XLx@DfW8JgLW?DRQWSSk%mH*lE=LT1YbBps`OE|#0DJU(K za2Tue=L>rsY60VZic<}PqA!e`wJ=VsG4(#KJ@c(sIDw=hf8!+74^!W!4{Y6g7kxLL zCS&-O;y}TJx+-6IbVVVpCH&X4(T^V->^q7spC!G!c!ermsP-vKPqPrq<&p0%Y+)W2 zKg2L!lkOt{9xUx7?~?M+0`Fp{t;V&!m(FXmZHbDYhmWf8Vx(y5jdpXw!qehwPODS{ z;e@#a0iz%BY9(Z&gM+$$n+GOuu2fr0R5X;8!62m<_ZYN#n3aR@4iD<&ZTJeDi$Jk; zRh=rjs!J9&0Wp?bE%uj?iy%V|tVrv(R)1_NQfxBjsKk=QFe{ttcXEYe=0cbKh&M;~Z(shIuOW@x6eT4kCzqGfpFeX~ zm$2@(xDR9+;S0jiS^aYVp^vQiK0^L2k0Rn7KBj#Azx7eOX+Jg|)&>diqsSx^7boQ$ zx@?A8^+WYRqZ}L6EdQ2GL6i|?Dw+1X*Zj7N<`{TbUE?{=5=y)5tQs5M2LQ9AZ7CtD zup*N_zdNuh8yXs}Zd>edzzF~gYxoZczAi~UWgd9caF1t|3S<3Vb;B|OuMPWyY@-2 z00RTMFC0ts`JqumLr8ddcg3Q1)v;t(Cx;o)ps)!$rk*GY3Q9&p1G%!R46^+)FrcYP zz^Ewd)J+~a7>V$%MhOLml(w;j0R>Sc5JSg^oFILi(cSMY$6}o-v=y(|sDvAo!BqZ{ z{guK`f$B}BI6r?DD`pRn(n9yz|I8KAn*}6OSpiv4?L!R+vhnd8%ItMA#D9D8=_ccP zTcN(8(a~b6q(p3$Czv-S1_A-GC7IjUpn~#;d=;u3uuUg03hoWb*##wl$yTdF)n=(f zLDcX!uvE^m9t{Fx{!6lE;L<2)FbxTq_J`oT#>v9G0a-OQ#8sx!v>Y55jl;O+n)5XA z0}l5$4z?v07F9*dzbOtMmD$*E-nBAVlCZZOhpWpFL(aE-kB77h%F2Q@OSY$5`0Y;f z7*t?*7Gim^!&R@M0V(^Hk3Cjputkvcyjru04hJ+C5gF7ugJ=1P7PJ8j+4h@@k2g>Q zTc_#_MKL`+Jr&is?7~6<$Ff50Iqm!j1B(xjodl`WR9yjqq_60yIyma=0;HlCKtmnI zI@G%+y=Gs1fSo79yO{lMgM;iRN-AHKH+$bJXKaI6!DiY;)~MeZ}l_W&LKLjDuJ`8SoMFFllg}_OK|D9y+;$@yL16qNGEUPM#AdxWs_f zd!siZC`LD6rc96jigJ=t> zp6}&z&}w92jJ8Kh->1O@KJpf|yg6aldSJ+xCK7UpEF~osE7lZGIP3rV_S|&OxuynC zI-<9GExY^U;9a~QVEeU7GSbXZCD?)~%O<>>Ia7flsV>FIXDR#F{nHp!sz0gbAt~Ux zz(>&o`Hm}nZ0Zo8yGEySH$&BoC9Z`e9Y%`azPz*j}cucd;YhsqK#ux#!}*oThXb$z(5! zE_mw8px8b$6OZ+3fIZG3{q_9a1cAVifJF&1XPtWH zclZZ-Cm3E6MsHpY4mM_u*5FeXtFz=Jw5OF8J$eePtH(S3f9r@0s*f8-OHFE~8erz@ zBti2xHmo}RYD7l~QI94;o9Tkg<;1VI%!EmR71a57aZ}34c;Ohj=X4M+fXKym@ z+e)76!|*iFRaA9xsi~=-2)N;kh=>3(Kvu)O!TbS2M^EpNSv+{So(#l#9cWeXjSeIC z)xGid1dzYxVxqFix6#a=$_1K;;!h~u0=Fh*e*IR#hIP~N)$rzD<;A>O65g7ctV`rd z26zcVgM|OMryhq0EiOfW{~nN+_rmrMkkZ>xi>j!pWdhn91s#3C8ziax=~G~h)wKOW z+>veL&{dTe`)?<=(2DMyv$ua~iLz-tMMcG%yIXyrxHG!vv^c*qf(}du=769!F}ckc zT8}hTglQr42Z10QY~;ZA;sqKlE$!m`kTad#t!NI|2CmQraSi`jI%&TL2zR@>8+#7# zNAF9Rc@ErvlU(7M-D$LT@v43;?|0)@Q>(UIC^wd))2y*+Hpl(}zkI6ZK2{MZd^@7s zYkW`@}*fFF!&$no>% zPY!;;B!s?TDoPb~tp)kQ2c(2<{fwN&hKKQBm`;;P*WpI&;%Ap!IVJa^KKBA3{od+d zqZl_YB7s|aa8z+R^fDW6ih33;bNwtX<9F$E;DMu4MTbXxHG0+msZioeyV!<+7z~DK z&ZD{87i@Fo5iLWKuK?wuabGgfa0 z`5~wr{;=Of)FW12QD1AcJo!Ywh!4~l;^E?qNdI(e4AqT|jmfyUxX?%)@JK=Ii=?QT4X$4 zb%g@>nMx*67G99pObR!bRvr&g7n>i`kGGQjRtnK@v*$^Uk{K$@(m0nuttOL`A4T-Z ziG-1D>@#SC9sKoG8;sF$1?DPuF_I=6#{NFFbFRuvdSa!~xrkOs=m{ueVz0htkL&Zu z)2a&y1R|b3nIr0P5ooH8)(zM%*oh8rB7zHEARYjVgariZ&Zo!-9qGnmZ>Fh-4X3`w z0ok8z%5Anj9D^W}{Gzh`Iz>{vw5B2;M787Q?k>zy0=q$bxMZ$!b(B`y18Py_G)|oi z1^S1x{EgY~?@Vajq)4ZM91pfRF{2@&`ay#N1uD$leSOFp>v#~-bW1ViILyM+(>L!) zT;7_4Ze|ME%e{KM7hU#~)9LByk@192srx-{eL5~#HR^1sfR_}VkPt#I8yS+PrD2ic zoq2dw&3`C2pufPsCnPxu8(p zcVtjAO6f(V@jy#jNGO!McJY8I3AR0y-0-{fd*BfxE35Qx3D>a;1!d+Rz)9eT!tYY) zIyc0`JA-k@t*>q3T7lOvPVEn!w(s@=y{4l9yv3u>`O+o{WI*0@IBWI-iuUC7Rbm0u z)0V%c@_ePrENT@R*J3$Gcr|ARy~~`OBs0ssyAOjg*q@I0Mh*qz($dp+olI-l%`It) zL&x{=(3R;B8GPbVl#J_-Tw*ZD$v1^JgIoLU+t4qpF4QqN4+HURV9@yE@Ne<#I*&iW z+v{{dkebgCqTZ_uY|59{zW1D<)wN)1G|(aZ#z_2jEhuIw>#Ynvp$9Wf4aW=fjY@Gb9S<$^56VH~*RAyG zA0B=e4H-f2(ft!6w>)yf3vd~&u5C4dUZb_TZr^2i{=A1~b4V7tzF&nkGmq-^;K9#a z`m+SKwB*WOb?fT2Zzp$0<#YMFE%Rhy;M?x;$ZhZ@^wIU=m+R#lJ(Rmk(de6TYHZKs z#S+f-x4VdRd8>!57x=;9OgvCp+L1ugW#SwkJqwFG(SttZH5${!!Bo6*Su0C}PkFkw z%0tYR(^JeQD7YfI-6^?ElFr*~qO7EZx2b&QB{f+&o>hdwT`X*N%xso>u~%t!i9q=< zIr5@sYNf&`c<>^^aw2U0p+VGOJe=GdUMAZx!pn4>QBpEs-IkO@aX4GiRl4!a+v2jv zPe$sQbtjwdfbGN5acjsG+{3Be3~ga$EG+#ZcZw8wE|J?TM+D7~s2nkS8f};a1VQN? zehF>*eiYQ#QOg%s8m02nzCnyGrD*W1#!cscumA+~>vLw*b#oPe{PC`^eAZ%HtD#;% z!V9FcN>qO(yZ@`yR{S5|c8NeYwnFltMPs4!9%p!{D6(@!nVgz>?#~QXdLH7ko}&mw zjOIcN8Q^B&<^s4{neophUUBWkitI(PJ`l`+O-u^W6m~o(y~Y{5$Elm3E}taeS9L{b zUi=1~D9u-zrNW~8jw*cbxqME1arF|?;K#nxER8wpr_0Z7wkH} zYoQN=iEouJjM^S@r;gtpx$6;mPn`P}Z-wtd6AP!$MOm#jZ|z*EMvr}cJFT^N&JEO; z59yZfu?NmcwN}QhySb=?a_2%!M6lmg5e#^d#ql?(^NV(!dG$=!@lbjWqOWE?_Gph_ z@ZfXS2z&OiP(`UwC5t?Y z=|ej3EgWxVKSZI0hw*`NyzbLQrBp%4oBeYj!tzDe1v83^JMz2b6o_5YC<-q#-;xOl zw<@W-Pp$4yQ;XJ)AjZqi9jvP8@x0UH%4(iiLK2JCQkG9Yr;a~vR7s5~_E*Aa80Crc z8QE%lRO2qggm|4plKmM}__o`_NG%$*UtiUZb!7{Iv9T*)Kw*(g>FxYxQtelz)0c!4Ca*=t!tF-~^Ve zC#cUdN8*r%LY_$NV@O#7QIj*3j}bzb;ZUMT5M2!=0xP5Nlme0UP1Sc%MojyoP#8oi zGC&=O4iYR9clFY~u>UTKDu5_L1Q&fzsgIbc!pUPPF``SQN&4qRmnZSy3+7(N@q9JT zH@?MtQ3#5M<|be{h~YmYJ^!2d@c+xJ{4dUAS1AF(BRXMWZ*~8Vf97l6&96~D%I_@& z|AL(ai>kNW=z8ou*JZC=)7|vvoVNp+HIGe9OyE2{vOT$06U!cxSXsgXN}DX&)npM7 z5g3@55;iuhNfZYe$46V2vk12l)V?VfTYtQ~-0-pbGlRF!Ch!3lQKOM(^qclkAy(pvHqvt zr^UT0k$h!$uLIGdno)kbz4Nl;NoTP^um7RB_{IzE9`F%g06ydDlKgo`yV=Os&SZx7 za!x7;f8wZ$_xuqS)`miuu)E#G#p<8b*Cuwyi%dp}2DPSl7~nmuY|$)?e$}yo$0Br@ zh$7(D$C|7xq=VR4hl^PP>;6Um`&lyMCNkkkkiNGb^}h=2Pc@owcc%6^3BZXm9y9C9 zVi$|%lcpsy*4EhDzFwHYk0qXch1@?7pD3eblE_cp>}yWR z-ovpV)XdDxN{B-7;=JpJ7ocRCYrG6@J`)bU;M0DDtPv~+bnPT=-S#e$Qg$RU0Y3rz#!?lI1vLy7e8)nEhQOHU5xtnm^V-8l!>C~ zB}d6Fv27b*QTh>o@dYBc;~g71NW0MyHKIX5TXQr?%ziJAVFT&9m%4g*I_Y%Rir$w9MPV#}bl5+zRMs=IPBltb zn4p}PdIK#W1HShZMmYQnaP}HTywin(a1uS0DolybfS)Ciqit~7!W41OUhx9bGJI;g zl#qSguN&H!|24O^*KKZD6Ncw(&>X5JqSi3F~@oQ&ZFFXr?46`~^*rkF_-m z2v{a@nSTrp1_Wgv+bfz6WRa!c+`YuVI0GA#z84$p$VC{V$+d}|`(^*IQK>%z#u9rn?<$8u7_nLnv>|A0HX}8tYk%CsYw}bi|KRdV$QPgAov@FE~ zwY0SK!kY#Op#?Dya4J3;T6&rYnXu-35*iE$n&#odE;3MpqJK6y+qMa?2}e~j6X`yT zv?#&&o$n5!TboFqKex2K`B8$; z(s@E@2+ac^R6MN}3;GP5CYN6<2k(JOH84(UZuzIjsY*b+B^PL*s7&ToyK5y=Z$ouG zGTAx6g9I6g(&z>IMo=4)4$3Ciy0>4WfexevgPM+%*Y4~#z}ozGtztIbzO8#K{OvE_ z&fA&-t+?s?{o`iN<{YfA%J3|x^?BD+-2xRB=_+AK4) z7iaiw9q24b^L}pkw*w!n8)iPDeEKXnfODd$@}=OlS+=V(YPXPIYpV#TedK*wx2S3< ziihXg_6uF1-iv&NeZTA{wM09 zG}O`{pqp3Eb`1{Sd15d8&7EB33J>viVM!yLR)Fet!;v98V+`M*%Ubc)i~=%lacX^e zxatkBQyk?g|1T^^#hW}hix|(ttIyl|z8@ZI+mZ%*czP;-_(1nl1mx!C2E=YxR~K?m zPfyo4bp`lzZo-|%UbmzdSXTr*4l(W}C4p&i1G>op9DzUpO|#bC;jijxzYw;iwOy=8 zv>FUd;ehu~@Z`zhJ5IYC7U5IjVbKb|1wI#iZ+60%=>SIyAX~bx?J2XtSC7r#obZ%#xp`Y-f3KUEYchkJUgD8}E8;nU zIt|shUcEWzwboz&1g1tc`O6Hy`dw1Ity&g&UQ4teooO~-U0c2RE3PlXo12^c@^(m8 z2{IC1vLf_jZNxq}gjRX9VGQTwg|L)YpY2cArGE{tJoV1^ph_<;Yun`i1(n0#SO*{2J^k)B=!2a9d4R^e8Gtgvy z@{}+s8qGuQhdzsTz0$s9d9papo8Os?DX4(loa3O%lXOszOzH2XL#V$KcWY|_w24BG zxo6IX9Ltv_08>KSe{8#0Kel$~d%WD@53{o->6n#%`ZwBU`>k!afYG*skGlYYwM`b_ z;vp35n6k2ZdJ1+eY=qjk+ZSg31Z5Dg<$*QHJ^8^YN2<*kvucNIN3ZTlEiVfT_80NY z=KTkcbJH$_bWA?({WFJ;5V!ZhrH&Eb=7VHIkCsQAr1QNIlsJG7OF%{zl8``F-#}sX z1MqWg9X_WD=yNLI;bBpZccYac8zKY4mck5#3c2?~Qqe1sxSV1}$iLUEFE>f}C{2OW zO;RF#pKu<@z_X#I#KgtX;=I8$!a#n-lyAEQki*VLi)I4^gmZ5~y*kqF`GJD&)o^NM zo$Jx}3d)!gn}`Hi=zZmFw_{glAl9jRFIQI;0KS4&0m#1D>ZR8MK0ZEVd)riM$s*-+ zO9DaaQH)Jah9uksfU({o%-{b0%-~I`Nysdtmo*NA(lS;-F%|&YtVv0q*gLG{ZJOMr zs)g~qifsqPV%M0FEdFC5oIiE8iMgp#5Gh$yfYkZzU0PJ~6d!!bYsBn%2B>aM%7@6M z5Xfn7ijc)O8vZr68UE+l)`4qlD}BhI59fr@DRb~dJ3>qh3^Bm2u0w+WE(i!@xK7C7 zy4(zYC+~$+r}t@U^y6ndOR?!*T2p06Ug@&69ytVP)R89%Z}?w4AOhxF(XzdI0IXa& zM9E1|2qoW&JoPh$zA;sZx&f=R)mG3-oV69aC|2U zf$ZPM_uF$Q1eWPst?4IWqED#wv))nS<`vqzPNS5Egx~>w(%QknKnZwN-IguhC$oCe z+IQj)V24M_icN3Vc`OZJMb#bH8}_L_iz~KWz@ESa(ufVX$ z^1raLK}kT*lH-eVZiM1W>eCl&+nfiA>-$Lo(apCC@1ujPz}nzu^?-O&`3bw7+t}EM zX|#y_Qr0mp>+kdXc)3%L{yyTXqHs@9D=z>!)wk0Cw0Asa+lEdyVBu#Sh06f(!ZY+R zQHHLV0KpM%nRQ(Vke?f!z>-hkSoPGxrU36Xc{W7rt}KOJ)soyhbfVafxn3u+0>NRr z=li7Ni@JYJcOo0W6sl^ipuOAa>Mqui6A1+Yv|QacI-I+fE%h2_bTvGNXT?Wd7u$Nk zwhJOmR261oLFYz?Y{DeLJ)A&w3X+tJzB7RNo$eah8=Zf@l#D_SfImMN}7eO}ZjA9&6|5C)OfJ^0H zRe3aK?BrAp1}&$q4-*r=)Gw}@HzUYA8_IpDcCr<(2Vjl&l$G!4IXMaXBB}h}=1O>Z zHH-J}ePKlu#HD7;w$G=I+Bg)5T3~`nB2bLCx!?F7a&p-zY6F7T?H=_CPB%9T^=~=y z@bO9HPk_@P+my)KZikwO+kym{FIWo!oWR_&Qe>+B{mhr=@8S}2XQrmJuD4l>?zqu} zwE?;Brz?V()H|_pV&+0Xat#*!jaXvlI^8x6W(ZfZJqGzBZx4`aqw#CtHJ`aL`3)6ac z^jaL6gRKS!RCU&Y)kwTJrziy=sQ=#ovcW$^0TRQF(p*^?!(BXFQDr1b5OAPNN=|lH z;WYbMN9u9UY`-;+6R?|4518hFdC#WDg+`7b2X3G*H;@75pcm5&u=!(uza&^Yz*_nf zS?SMN0Jh-K+!U?>iGz4X4Uc81X#nn(Hd97T=syvIk|B5i*vd~$k1MGP7 z(G3*ZIWpqr`$LaqL&UZEI-lO2A_<()^7#!;GFmkNttXl+eXWaH$&hBY+KW^LRq6JH zyZZa1AD#nq!S!vFh|k|-V!#|rR%B-=H!vBxl^DAQ%%Yx;%zzq! zHL%=s4d@O6_P0MtVR0_rC39~^@PYiXL(NKK;KQL4*|cdt7~defwhfCZi*@XcOiopw0eJwx4QN;9EhsQ4a17oGCMJ4Wk#T! zgilWXDEGtHLsuW1+z(8CKXD!ot;a6G*^icf+~EJUNeCa<>9KH1eGMn^5!S<-4IaTT zXFOj;&Zmyd_IdDVo}c?wb0S1dI&j%K+`4p^{`yUG_dFn>`1bSct4XY>o;rbOJK-R9(ee*nSA(c=C zy${8Cv-lOsS-9tsmaX$#ItV zXnMG~)LO&)sI!0m#AI(iK?3@%9KI3d-gGPD?=y8<1_A*akHlxjg3k4PnCoxB?es-z z$tAM%@9o6$*uNaT^P~W3KgIle-a~0uVsI=9lFw~D*sTAe8Xb18sSKVE z9{4shyqEev_~YD7QA|v1Eca%FF~!$rIP7k<3VGRl%q&I;=oa^>I_X6n*R|c#4L9RU zOT?}d^H&}A9>{|Ke^R@pXJt}-CtAd_Xi-%qS3a6;)7yOtQ{`TNc?i;iGMFVUqR*dM zqK1tShd_bG4RGa9+|Qy&9@fiXOy--}&Jmk}bR^zzVKWhJlt}?}?w#`)0%dGtv*DB& zC>fgcZ#7PJMeBc&2&S(X6K4It;h2fGM*W&sVC*GKzlgBwykn19Ynr4!J*_n|B^d4K zyj~Sn3XYZ)$@<7L$IBq$3hzG!JTyDI zqwC$#75KvewdHX4{(T>r&s6x*Vkn%Uh#fAHo`ruhym+KV|DrMUpr0zPg%Nvcq0K%-in+@_jLe!lhrzvnlv7r-x1gRp9aKilCyO*omf-&*Q&N%=$*{iT<>Tz0ATT4en1H#n1%SSf^s>}ZY zMPjRVb#>PF3^}hudU%9|SmeLKvGmjj;H~J(k}Jr^V6ufbL@AwDpdhTM~NUKX1ypB|a6TuTjo+jIj|E2ov}cZbIL zVcd)5=0GUaqhQL?R(P^`wrh;T`zI1d7!up}xTHUJjYC;M6-Wc{xzz1j;ka{Oq16kt z?of(D3u?l2h^v#K(Q~V(e<1<})noJ!Ah2M7;jDE|rHb~wDuOwM zJ+Mwt1)ljD4<4oTSiz#ugTf&Iw)fwXh?v9a_ZPZe4^#0V$ZJy>$2|a~;xw8!zR*p4 z@oRC<@FX^UIjoe83Z%dCjQ?oes0US+T>>D2wYk|rC}?Pzg}oW6>~-(^bFn4E)L3Rv(6+wnw9Ndr)y- zX)wXtN^8m^u3qkJ^2OQEhE3V+k+ehx19Vd`KN-dR)URiE(EgP&v zQa|E#9);)DILRL9s+SoBl|_Ww9g&IL{m8i0Tl@6uQ{}seXkeg|xyW`0QTy@~8S|Q? z|HQvebiy|#)dMmLAhF;pdQ%guYC}0)s^Jghbr@F{Jnx!}OmjFt;3op3@fnLY3aFsb z%dg0-MM?9w7TJ;fG5(ZsN%x^fRcc#z8VH2Mg!sDv#oKMri}Qkl;_g8;_BE1#A^3^O z_BJn#Uhh2s!Y!}9t6zb-DraeyP!vG?)yStm_*|PwxCIBa2v|`&8hUam?f=W=B;b*0PhiCfO3q(H zGPo~Y>Hr>Da!;B>i&FpyhR@mA4K`M!w0E-TK=|j?#vODF^h!CP41`6M%%KVZL&uyV z=!W3SO^4o>NX>Io)2qk3>h9#<&sO+0XyJjT{or3YhoK`L>y-vfvps#9sx0V%k3E%s zt{v{k6aTsbq8V6Ss?w`=+9r{|jfI2+e3ZOpXZfo%6*P&)!;JQfKBVIJ1G|^;$bvwC zZ-FcX@$vXudU_OaX>(`ioj2n*F~p^_>$bmkFK=7)Z70Y{p2ES_sUytcseHiS`T&9C Mq~A-GO6dFjKOx@Og#Z8m literal 16286 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 E04y)*W&i*H literal 10608 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%0A+VL~>FaJ4w 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 N*|$n>ie4M~|1Ty^WYGWs diff --git a/icons/obj/watercloset.dmi b/icons/obj/watercloset.dmi index 89d382c824d22bc68cb41d4a59543da9e6592d11..0a5aeb5b44613eda25dc959138ff5f013320af71 100644 GIT binary patch literal 14431 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 literal 14351 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 UtvmIBZ}

A^L|0HmAz9b#(y^n9oQ^!t%}O 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 diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index 1d7ddbf51f9ed0836e038165ecd4dcf7473774ec..04ce2aa9c7deffcaabb316021e06aa94c861efa9 100644 GIT binary patch delta 6405 zcmai2byQT*x4twe(t-lgDJk6`-5}Bo-5t_(Q2_x-N$C)fZfTKn5JbA00m-33q~=|J z>#g_Kd+W`*bLXyo&e?Z==kC4l_e~cPv-AivkqI0M)HU>$w|!;p<>=w<=ifGZk1WS@f0UFnhSgB$r5 zDVOw4X0)iQ%Ri+&aKb$4C)|~Ks!~$aE2um8+QHMW5s2R7yQMYmTJ-`~)TClu0wLVM z8r;9x_1IF_J6^lI@bJ@7?YIq%B>&NX_pn%Eu3kUB4yNG}yRk1?^E^{>^HWD=V!aZk zrx3f68e?5+l0Z^ifZKj1Y~LrBU5&$unc%$Hi-Fg(ZTC>1Aar*ylT#_(*U zCOmz z^>Wr6PiqG84Hf(F`?hr>&7{A6>AS^l*iB-v{#xwQ>pM)IEct?f$*XZDKhRO@&&@bx znltlhoqwm!>u$QgV; zPbj%wBOyFuvNn)Q?Z?3L%oI^;t5iws_@u?yf;haNq-xRVEheqCIglCM%7I!FPgceq<_wfsp`Rubz zpX<)OWvb|w}d?YO=xp3yjD1Af5%89YQNXD9wuiunm{wWf%$?ittL{L4q;a@}-( zRgXl~FoUzZsvXjjqI9n)nDq7T+N`(_QZnxkp!r4YpNox`31Blxu{7?Rw#_Rf^Yyn7 zh?Deve1+xI&;EfzR>#eDMlaKp&{Rc|_Z1LRvfG&Ou-sOdj3ZH)oO7#dAs7^?>#P_I zHJs*W?qLwef2RYVo$DV*mungEHu5`)<5NwaP@&$ViExwiW%r?KkgG!;A;+Al>eQ-S z2MDU1M$B5#Ra)iuW2flm_s`f`>+E8@#gf?a9bOudPouTKB@2?{%$Q%hzNLy0xzQU3 zuCDb+$nE#^NG2Ov1Y06sHez6`e@>>yAVup=7Q~|-OuE7%O# z)6ma6^dtxkspi#8^J6&us=gKLNph^dj!S2>_l*63DDDz+A2$d(CvD`Rfo zVI-uim{?=Y2~jAUK5uvU$jvd^wLJr&f z@%D#p7GjSWTmLRjoYYj$U8BAdFhp!T5+}6&1iDAT&pW*H-_=Pf;tP`H_c!~LB9#=K z%5*Qe#<5MG3V8>Gw_-bn#c0KG6M>=DXn#x7$qhS>@V+Utej`b6%xn536lyo0aM^`%;eO#yecW1!F<1?$Q zED&S(;-STY{}cwsC?Cr zhKek3BqNyJB{vlVWTmJ{q|n5V8B~yC7NATuPwqned;JuNR+(rm%y3>s|l`QxU@b&GBU@aqnzSCZ4tk6ioT|^iQ^Eg zIv;86H}y)75o`5-=dLm{-UsK0E=;-9FpQ(Bg>e`9EFbJHTb!|wUnzQ9jngOEF|p6; z`wr54c2SYE&$?eMdjeBI)GVRSj}hsF|LLfAX!Rc{BKS!?m)@RYHJ@UkQPP6(lE-Q; z+2NR30DXa~zw`U*vrpv;^KI>^Pal@S6s+Wbj9V{AE~h(i6pVA>aB;n#ZI7YR7OvpZ z5gFtri!WMYATOTrFdmdP*iI$K_0X8ZRi{3&O77zk2{<6M$7W@skNoI~zLKCjcRK!e z_&wt9$xp;b6JZOgtqU6ujo2a(=JulJ9UnC=<|Gdz;~f^hO(=@W6y;|roEh`xl7jST z;yt&-$pGW!LHpq((dR{4C9UfVWHLFYVg46UacTlGGBP^y_hnqkb%yxRzywn5vX@Xg zC5_93#l}ccgj#WTZ>qw;CxnP<&;H9-vo))hGkl7j@!e~CU93bIx-jtj_wQ1OH{Ep5 z0px%F%tl&aE3&zYIxYV@z93Ez^V?z~gjTk`pT%jWWTz8jNcKuky>(whCSFAC97=HRPtI;&= z+&QhcaVSdJ$H#}V8qEAUU2V!CTaXx7<&L_${V=jcO3JD!Z(u+%KR=&uf68O~>vTk# z#|z0~*Z`-aCO}*AZ1iTD1Ov9VL`F$=!~3nCi%?H*ev~JCnm58KCMK4@k1FH0M^hFO z#rOedXn}Eu_gbERz()~8Z)+;*-5;2)GI77wK~OB+x*sgIf<1N(^yK#$mmg3|1k0m; zxRs>#LOG9)SI2i7)BXiMw&xnoBf7^#za{SIKqf4B1Z!yWq8Jn|bG z$q3#dzEH)3w)Xaj?{QRYTwMLdYCje{sXR?W87OZRZ*sJwO@ zyVDUJdxkm2JIzy_s}ymRSdOM(Ftv0jEF_OoHp~R_c)I?dCQomxs%pL54##2f_ECMTNv}Lup(+NZ($huk}o|X~@?N zKjeI|=ENS8uBj==RbEl?4tC-3yVZmuSn8QV8gvkwwbW|G9rZ-)3Uta2?3{Rcwsiy# z*b>_3wx7B7S6VY0Z@|Q%`&SzpoF5ZOlJ~c zA_4N%a79hcxGO(kCd|c7Y;G17tej8 zTd_+^)261T%5gW>*XwL-ZCM|$_xFYpG1Dq4$qUGyOaB!R5?Vio(;B=>bu<*41qmhyCR6Xj@rGPoRJU z;V7;onIJ7fFAWy;gQ~|kqti=Z+(j-;U-&m`9D>DHx83m|C%GIOnXINJL8X3$8{E9k zZkX~}$dz}th$ni`#eS=6D+JE!SGK4Kcqg$8qHZl`Qk#sQGcb%#LlC&DV68f24<8oP z)e$QwDC`Ps+F$^K-hhLPOW&^?aY6CFpCS_~D>(=1@e|-h*hEHYVA8hh>)Hh*5auCL zse&xK{-cKTdziGLQa_mLy=B@|W+kJF(<}hkiUE+J;O5A3_=~h)u%SAOA&_FsxxKyf zy1`F`0Faa%*n8lhv9y#qNwa@xQl;M;FAYG=dG+T<{tSNmcuFD7Y?0TKGyL|y@@s2( zt2XPg!lN9*O~6*KVjv8v62xlvTOe%4Ea*YqaOfqQ_5SWb)AW{g;+!k$t&#_4Z7y2k=3`h*eVl!cf?T)jBJ`3KeNAK@R#?;8gN z0)S>R-jmKlc&54tRYFmxpW*xI1l_@7o~KWBOe8@vRp%%YnMSEQpw@AM#q;*+oZduu zy3&a8-o1OZp|^owpjuqw@jX~%XJ;))Hw(mD_~I%Dh4;mEL0eA`t81m^SE&zjlJ^Ca z)AjZB7IlV1af(UGOhgHA;(HNCCqq2WW+nyUF;F%2aH~LhGC6Z>$6w+^EkRahxn2p5 zuvUKfgq`o8rNsv@lVlWjGv{@)!KV)Y+^?95G31P#oXO6n*5GM<6ah8FD8;1Cpg-%# z<`qRtOZr8(=6M`Bcc`R#tm?j5)yW)m-p~*6rFh!qNgS(DlflRpsk!fo$z|GBY+f`{7O4m zyF5rpn?~?6i#0Ro+9)>JR^ZQtB%ZgQbLfsOFEM>sF3qeuOA{8@hdX#|a5cjQrwu!R zqpr^Pa52#@SKkscZO-rxrSqiUgm!6*l~fzn$=cZ37B|8Eb+i{fpA(-YLYeTc_jQ)A zdwGFe!0_PUcqL*-`|4e6S(`yeac3zGbA4nOsMCO}(>11PJm%bJ z+GYxnJC9Zn=E%cS1=O!mj6_p47!>YX39|gouncg*S~m{~<0x>0ahk+DEA?HkG6lz6 zac&o4@}dJB#c~_-;6Dbubz`q-@&u$S3A9MJjw=Yij#k}q)O0XV&&{#TU{g-)Tefhuoyzx;M;O zG%QTr(#FX{sq|nDb#rrinpcKEeW!Adf*krw(6lVMT?R|-uXNFNTM%hzXh3^5+Y!)E z&H6blja-sK`cqQvt@Op078}`;W@%~yM!{gV6e6$nK0K%)mNxxtL?4Ko<48iVcPoIL z3Tk5l-YZevHa+)hu8 zccpYgU)&D!LCUii>fA#ZfI5#S;wItwlL`z7*0}ap@Y-s2m?fwW#q#4I_3{$MP*_eU4Iym-KkT)Tq8nSxPCC#|^>N;-aPBQ31*?GE> zxaR9sIU6^(;`8UP#gHJB@h!oB`KSrtVZ!WGs>WzclV^;w8q!wlKTAi)ydF|LwNr5q zIjPDJIc0~5Uh5sg8pe$_Orzn5mVi?hsq20Ioqh^)G64UUME`3r_;pufXT`6B(O51g zG8iwf-5(F&y&iiv=HK~nv!O&8=c_AG18vBo(qF-Zz>(Aj4d_Jt$L13?xS7yZB#CQZ zO*P!jA}6biLJ|tz;sOJcTjpuD=aj)LQmF1Pnk}c)kflqMNc$cC@!yfYW3Ai$(%s3f z>;AAki;Wd?)O=aX?bVFt7C~umsy-0lK6Rg+BT-!j!oUo_J;OpyI}yDjc+%#IgD;@T zQ&WXPx`IuiP{=-uu$(;}@PNH(nv~QF0RDygW3AM?I`=Okue?Yys>+=^eflec;uq{z zQ|z`lH+b3P{LR_kle~MjH&w}r&j_A~eZuxA!dehJp1)dAMYTERcx*kMKu14&Ks%Hd zqXK zOT$!B3zX;g>QqmfGvo}$e-k!8S?2$bqR}e;2|Eq!{Ah;7zz_)3K`*-ho8f`~3&lIc z;EU-v8&^XIAUeP5EryeA4>7u6Y5`*6IDdS)B6$UchztQo5|U_4NL#pPxd~-KZU5=h zr+ut>!97F}lVmhDPPY(pTV%_nIedtr5fs>A;Ii1_`OVR|tfq#dzrVkEYOckz2+Bf` z{QUg9ZR$^8rxhfh{(Ui~wMzmzF%I*B^z`+y+m{H8(kz9tpaV@NglC8k;zommgJ*17 z^75a`EO8Rc%b&i`(RpK^7Vu0P@VEO&!OYD3xx9RQ6BDMV$E=wv5zVZYwz|{SCN+^; zUD5l2SDMaenl6TfV)HYL}!^qs6=k9D+IAj+!w)b#ka!SPJ;GM8javi)FX`DMY0GgUOj((-`@b)67%LM=nXfu_WNF3bUzJF3l zwrE~J1Co?Kja)m=RCim|IT&X}MJW^dxuAJsclL<4J}PCQAas5Wohw+kgUrO4df^#< z!oBmOVUm8(A6SQ;?Ut?%-yoA*#n3Y)>Dyw%Gi@5c;=GKf_G*%%*0p`no@U|8(5?XR zZy-MON^RJfKAfn<7fBgrGwR^#s=!3@`iIRfKR$5mPmP6zWt_?a5yJi_7z2kP-+HXm zJ%uQDNM)bCeLi^=T*y~^j+orA%8pYMFzv1Z)4BVT;d@78q+0n76D&SY$kDZprBmh= zvV_)(SaZKYW1}shoh;{@lJwaoCJ70kL+?(-3*cL9)kN)ffdu5yYD_L5qt1sCSUsC! zle#N-ur)m`w@fx(%>R2UxC^(z|>*cD+8W~=!#f3I-TphpR%?b)$Xv_UmfV;~o$e~z{~$tO&b zDk?%12i@>9rMw-Ofp0$8(lCbm&)W2}O668}kjErNKS5X3S$Q`YQcsK@b!TeiwsK&m zH}x5}%^S>7FO%OVU4`}>fRsyGp^OE0)}$^#7zFOESHN$`>%ln(R8B3P2mpYT1rmeg zeLnyU4-Y%y5V>~|DM5NHyfHL#0cC#H1v(5SPBaOT>~gGOv`nF+0|^?nJH{(B?fbd8 zG(NE1VhY<1t*sCls9qx4+a9)i;r;Gio=#r#)t-vcIRx`U9e6wLP-kYLX!&MNJJM!6 z&|V>t$bXNOjz}Bj4E+WLwFkOG@~<%Ip!zV}$$R@zWhl!uqo51h?ekcXbFEAPynuj! z7XM?06t!nEC*x{HMvo!7jn@2K8tq>u$Qh$;3Fy@Mmr0EmwW2nu#1j=#AzTmSy~(ZSJi%<%!#*BX=cStp%p4AeCqy8(&w_Yvq} z#Xdf5K7ExJfeO<^6Yk4f=O6{AA>GO8DNfGv`1qTU>x(+lr~lfVqxqW`ZIX(>>{T4U ztkWtUz^4BAt4H39mM{#`#&NoSQ#kUi_Z2J$Ym?}iMy~@IZDDIN{L7{1(NR%~?Tr`% zsNFhp$L*CtkD`^mTeCb!dWR-n#0_lU^+-W_It9@KeN+@Q<*Q{a-uxHotuki- delta 6042 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 Date: Thu, 24 Mar 2016 10:17:26 -0400 Subject: [PATCH 36/64] Fixes a check in xenoarch master controller. --- code/modules/research/xenoarchaeology/master_controller.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/research/xenoarchaeology/master_controller.dm b/code/modules/research/xenoarchaeology/master_controller.dm index 99307f3793..65f4b9f1fc 100644 --- a/code/modules/research/xenoarchaeology/master_controller.dm +++ b/code/modules/research/xenoarchaeology/master_controller.dm @@ -12,7 +12,7 @@ /datum/controller/game_controller/proc/SetupXenoarch() //create digsites for(var/turf/simulated/mineral/M in block(locate(1,1,1), locate(world.maxx, world.maxy, world.maxz))) - if(M.density) + if(!(M.density)) continue if(isnull(M.geologic_data)) From 03d1fbcf10b6cdbb88e313ba6cc035b63ff4f97b Mon Sep 17 00:00:00 2001 From: Mark9013100 Date: Thu, 24 Mar 2016 14:52:55 -0400 Subject: [PATCH 37/64] Gives the QM a proper stamp --- code/modules/paperwork/stamps.dm | 4 ++++ maps/polaris-1.dmm | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm index a6954e9e2f..f37cdce706 100644 --- a/code/modules/paperwork/stamps.dm +++ b/code/modules/paperwork/stamps.dm @@ -52,6 +52,10 @@ name = "centcomm rubber stamp" icon_state = "stamp-cent" +/obj/item/weapon/stamp/qm + name = "quartermaster's stamp" + icon_state = "stamp-qm" + // Syndicate stamp to forge documents. /obj/item/weapon/stamp/chameleon/attack_self(mob/user as mob) diff --git a/maps/polaris-1.dmm b/maps/polaris-1.dmm index a712597e8c..beccc178dc 100644 --- a/maps/polaris-1.dmm +++ b/maps/polaris-1.dmm @@ -1646,6 +1646,7 @@ "aFH" = (/obj/item/weapon/stool/padded,/obj/machinery/ai_status_display{pixel_y = 32},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool) "aFI" = (/obj/structure/table/glass,/obj/item/inflatable{pixel_x = 6; pixel_y = 6},/obj/item/inflatable{pixel_x = 2; pixel_y = 2},/obj/item/inflatable{pixel_x = -2; pixel_y = -3},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool) "aFJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/pool) +"aFK" = (/obj/structure/table/standard,/obj/item/weapon/clipboard,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/weapon/stamp/qm,/turf/simulated/floor/tiled,/area/quartermaster/qm) "aFN" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/security/armoury) "aFO" = (/obj/machinery/door/blast/regular{id = "Armoury"; name = "Emergency Access"},/turf/simulated/floor/tiled,/area/security/armoury) "aFP" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled,/area/security/brig) @@ -6650,7 +6651,6 @@ "cyK" = (/obj/machinery/door/airlock/glass_mining{name = "Quartermaster"; req_access = list(41)},/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/qm) "cyL" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/quartermaster/qm) "cyM" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/quartermaster/qm) -"cyN" = (/obj/structure/table/standard,/obj/item/weapon/clipboard,/obj/item/weapon/stamp{name = "Quartermaster's stamp"; pixel_x = 0; pixel_y = 0},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/quartermaster/qm) "cyO" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/quartermaster/qm) "cyP" = (/obj/machinery/computer/security/mining,/turf/simulated/floor/tiled,/area/quartermaster/qm) "cyQ" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor,/area/maintenance/apmaint) @@ -9934,7 +9934,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaadaadaadaadaadcuScuScvgcuUcuScuVcuWcuScuScuScuXcvocuZcuXcvrcvbcuXcvccvdcvecvfcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpjcvNcvhcrFcvicvjcpjcpjcpjcpjcrIcqfcqfcqfcqfcqgcpjbRRcvlcqdcpjcrIcqfcqgcpjcrIcqfcqgcpjcvmcrucrucrGcvncpjcpjahyahyahyahyahycwjcvpcuocrLcrLcrLcrLcrLcuqcvqcwjahyahyahycqvcwqcrOcrPcqycvscqvahyahyahycRUcWQcJacJacJacJacEVcEVcWRcrQcBkcsYcsYcsYcvucvucvucvucvuctbcDpcwzcsYcsYcsYcducrQaahaahcrXcvwcvxcvwcrXcrXcvycrXcrXcwFcwGcrZcrZcvBcrZcrZcvCcvDcvCcrZcvEcvFcvEcsacsacvGcsacsacvHcvIcsccsccvJcsccsccvKcvLcvKcscaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacxfcvOcvPcvQcvRcvScvTcvUdEKdEJcvXcvYcvZcwacwbcwccuXcpXcpXcpXcpXcpXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahcpjcwdcwecwfcwgcwdcpjdELdELdELahyahyahyahyahyahycpjcwhcwicwhcpjahyahyahyahyahyahyahycxAcqicqicqicwkcqicxAahyahyahyahyahyahycovcuncwlcwmcwncwocuncuncuqcwpcovahyahyahycsKcqycrOcrPcqycqycsKahyahyahyczZcZMcJacJadcEdcLcDncEVcEVcrQcvucvucsYcsYcBicDqdBUcxPbdUctbcxRcsYcFdcFdcFdcFdcrQaahaahcrXcwBcwCcwDcwDcwDcwJcwHcwLcwKcwUcwTcwXcwVcwMcwNcwMcwOcwPcrZcwQcwRcwScwScwScyacyecybcyqcyfcwYcwZcxacxbcxccxbcxdcxecscaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacxNcxgcxgcxgcxgcvScvTcxhcxhcxicuXcxjcxkcxlcxmcxncuXcxocxpcxqcxraahaahaahaahaahcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxscxtcxucxvcxwcwhcwhcwhcwhcwhcwhcwhcwhcwhcwhcwhcxxcxycwhahyahyahyahyahyahyahyahycxzcyBcxBczkcxDcyBcxzahyahyahyahyahyahycovcovcxEcxFcxGcxHcxIcxJcxKcovcovahyahyahycumcsScxLcxMcqyctucsOahyahyahyczZczZdcYdcEdcEdcEcJacDnddacrQcEFcxPcsYcsYcxQcxQcxQcxQcxQctbcxRcsYcFdcFdcFdcFbcrQaahaahcrXcxVdEMcxXcxYcxZcytcyrcrXcyccydcrZcAkcyucygcyhcyidENcykcrZcyldEPcyncyocypcAqcAucsacyscAxcBocBncyvcywcyxcyydEQcyAcscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMczTcyCcyDcyEcyFcxgcxgcvScyGcyHcyIcyJcyKcyLcyMcyNcyOcyPcuXcxqcxqcxqcxrcxrcxrcxrcxrcxrcxrcyQcyRcyScyScyScyScyScyScyScyScyScyScyScyTcyScyUcyVcyWcyXcyYcyVcyZczaczbczaczaczaczaczaczaczaczaczaczccwhahyahyahyahyahycxzcxzcxzcxzczdczebTgczgczhcxzcxzcxzcxzahyahyahyahycovcovcovcziczjczicovcovcovahyahyahyahyahycvacrOcrPcqycvaahyahyahyahyahyczZczZczZczZddeczZczZczZcrQcxQcxQcDocwycwycwycFccHvcHrcJzcHxcsYcFdcFdcFdcFdcrQaahaahcrXcrXcrXcrXcrXcrXcBqcrXcrXczpcuAcrZcrZcBrcrZcrZcrZcrZcrZcrZcsacsacsacsacsacBucsacsacuLcBvcsccsccsccsccsccsccsccsccscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMczTcyCcyDcyEcyFcxgcxgcvScyGcyHcyIcyJcyKcyLcyMaFKcyOcyPcuXcxqcxqcxqcxrcxrcxrcxrcxrcxrcxrcyQcyRcyScyScyScyScyScyScyScyScyScyScyScyTcyScyUcyVcyWcyXcyYcyVcyZczaczbczaczaczaczaczaczaczaczaczaczccwhahyahyahyahyahycxzcxzcxzcxzczdczebTgczgczhcxzcxzcxzcxzahyahyahyahycovcovcovcziczjczicovcovcovahyahyahyahyahycvacrOcrPcqycvaahyahyahyahyahyczZczZczZczZddeczZczZczZcrQcxQcxQcDocwycwycwycFccHvcHrcJzcHxcsYcFdcFdcFdcFdcrQaahaahcrXcrXcrXcrXcrXcrXcBqcrXcrXczpcuAcrZcrZcBrcrZcrZcrZcrZcrZcrZcsacsacsacsacsacBucsacsacuLcBvcsccsccsccsccsccsccsccsccscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMczrczsczrczscztczuczvczwczxczyczzcxgcArczBczCczDczEcuXcuXczFczGczGczGczGczGczGczGczGczGczGczHcxqcxrcxrcxrcxrcxrczIczIczJcxrcOHczKcxqcxrczLczMczNczOczPcwhczQczQddgddmddkczQczQcwhcwhcwhcwhczRcwhahyahyahyahyahycxzczSczScABczUczVczWczXczYcAIcAacAacxzaahahyahyahyahyaahaahczicAbcziaahaahaahahyahyahyahyahycqvcAccAdcAecqvahyahyahyahyahyahyahyahycBgcQzcBgahyaahcrQcJNcxTcKMcxTcxTcFacFacKNcxTcxTcMecDrcFdcFdcFdcmYcrQaahaahaahaahaahaahcAicAjcBxcAlcAicAmcAncAocApcCccBbcAoaahaahaahaahaahaahaahcAscAtcClcAvcAscAwcCmcAycAzcAAcBAcAyaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcACcADcACcAEcAFcxgcxgcvScvTcAGczzcAHcBTcAJcAKcMdbWMcuXcxqcANcxqcxqcxrcxrcxrcxrcxrcxrcxrcxrcAOcxrcxraahaahaahcxrcAPcAPcAPcxrcxrcxrcxrcwdcwdcAQcARcAScwdcwdcwhcwhcwhcwhcwhczQcwhcwhaahaahcwhczRcwhaahahyahyahyahycxzcATczecAUcAVczeczeczgcAWcAXczecAYcxzaahahyahyaahaahaahaahczicAZcziaahaahaahcBacCScBccBacqvcqvcBdcBecBfcqvcBgcBgcBgcBgcBgahyahyahycBgcQzcBgaahaahcrQcvucvucMXcGzcGAcGAcGAcNJcGAcGzcNMcsYcNVcNVcNWcNXcrQaahaahcAicAicAicAicAicBmcDycDxcAiczpcBpcAocDDcDCcBscAocAocAocAocAocAscAscAscAscBtcDMcDNcAscBwcBvcAycFkcBycBzcAycAycAycAycAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcEBcyCcBBcBCcxgcxgcxgcBDcvTcAGczzcBEcuXcvrcvbcuXcuXcuXcxrcANcBFcxrcxraahaahaahaahaahaahcxrcBGcBHcxraahaahaahcBIcBIcBJcBIcBIaahaahaahaahcwdcBKcxucxvcwdaahaahaahaahaahcwhczQcwhaahaahaahcwhczRcwhaahaahaahahyahycxzcxzcxzcxzcBLcBMcBNcBOcbocxzcxzcxzcxzaahaahaahaahaahaahaahczicAbczicziczicBacBacBQcBRcBacBScEIcrOcrPcqycBUcBgcBVcBWcBXcBgcBgahyahycBgcQzcBgaTWaahcrQcNRcxPcMXcGzcHscHtcHucNUdFccGzcNMcsYcPccPccPccOVcrQaahaahcAicBZcCacCbcAicAicFlcAicAicCdcvAcAocFmcCecAocAocCfcCgcChcAocCicCjcCkcAscAscFncAscAscvHcFycAycAycCncAycAycCocCpcCqcAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa From 288be19de42e428d5d41fce9903342adf17792eb Mon Sep 17 00:00:00 2001 From: Yoshax Date: Fri, 25 Mar 2016 19:28:49 +0000 Subject: [PATCH 38/64] Changes some antag items to not have 'suspicious' in their name --- code/game/objects/items/weapons/storage/backpack.dm | 2 +- code/game/objects/items/weapons/storage/toolbox.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index db9db8a360..11d4c4b974 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -152,7 +152,7 @@ storage_slots = 12 /obj/item/weapon/storage/backpack/dufflebag/syndie - name = "suspicious looking dufflebag" + name = "black dufflebag" desc = "A large dufflebag for holding extra tactical supplies." icon_state = "duffle_syndie" item_state = "duffle_syndiemed" diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm index 11c2d6a853..d47f278e84 100644 --- a/code/game/objects/items/weapons/storage/toolbox.dm +++ b/code/game/objects/items/weapons/storage/toolbox.dm @@ -64,7 +64,7 @@ new /obj/item/stack/cable_coil(src,30,color) /obj/item/weapon/storage/toolbox/syndicate - name = "suspicious looking toolbox" + name = "black and red toolbox" icon_state = "syndicate" item_state = "toolbox_syndi" origin_tech = list(TECH_COMBAT = 1, TECH_ILLEGAL = 1) From b356f5cf216aa33e9353d2b99dfa5d0c1b9b1f64 Mon Sep 17 00:00:00 2001 From: SinTwo Date: Tue, 22 Mar 2016 16:37:45 -0400 Subject: [PATCH 39/64] Construction Update --- .../components/unary/cold_sink.dm | 2 +- .../components/unary/heat_source.dm | 2 +- code/ZAS/Fire.dm | 2 +- code/_onclick/click.dm | 5 +- code/_onclick/hud/human.dm | 4 +- code/datums/supplypacks.dm | 14 +- code/datums/wires/alarm.dm | 2 +- code/defines/obj/weapon.dm | 26 ++ code/game/antagonist/antagonist_create.dm | 2 +- code/game/antagonist/station/renegade.dm | 3 +- code/game/area/areas.dm | 14 +- code/game/dna/dna_modifier.dm | 2 +- .../changeling/generic_equip_procs.dm | 2 +- .../gamemodes/changeling/powers/armblade.dm | 2 +- code/game/machinery/alarm.dm | 236 +++------- code/game/machinery/autolathe.dm | 5 +- code/game/machinery/autolathe_datums.dm | 94 +++- code/game/machinery/biogenerator.dm | 2 +- code/game/machinery/cloning.dm | 2 +- code/game/machinery/computer/camera.dm | 3 +- code/game/machinery/computer/computer.dm | 15 +- code/game/machinery/computer/guestpass.dm | 30 +- code/game/machinery/computer/prisonshuttle.dm | 26 -- code/game/machinery/computer3/computer.dm | 20 +- .../machinery/computer3/computers/camera.dm | 2 +- code/game/machinery/doors/firedoor.dm | 2 +- .../game/machinery/doors/firedoor_assembly.dm | 2 +- code/game/machinery/frame.dm | 412 ++++++++++++++++++ code/game/machinery/hologram.dm | 25 ++ code/game/machinery/iv_drip.dm | 13 + code/game/machinery/kitchen/microwave.dm | 13 + code/game/machinery/lightswitch.dm | 8 +- code/game/machinery/machinery.dm | 69 +-- code/game/machinery/newscaster.dm | 54 +-- code/game/machinery/recharger.dm | 15 + code/game/machinery/rechargestation.dm | 2 +- code/game/machinery/status_display.dm | 24 + code/game/machinery/status_display_ai.dm | 23 + code/game/machinery/telecomms/logbrowser.dm | 31 +- .../telecomms/machine_interactions.dm | 4 +- code/game/machinery/telecomms/telemonitor.dm | 31 +- .../machinery/telecomms/traffic_control.dm | 33 +- code/game/machinery/vending.dm | 22 +- code/game/machinery/wall_frames.dm | 144 +++++- code/game/machinery/washing_machine.dm | 48 +- code/game/mecha/mech_bay.dm | 2 +- code/game/mecha/mech_fabricator.dm | 4 +- code/game/objects/items.dm | 21 +- .../items/devices/radio/electropack.dm | 2 +- .../objects/items/devices/radio/intercom.dm | 47 +- code/game/objects/items/stacks/medical.dm | 2 +- code/game/objects/items/weapons/autopsy.dm | 15 +- .../objects/items/weapons/cigs_lighters.dm | 55 ++- .../circuitboards/computer/camera_monitor.dm | 10 + .../items/weapons/circuitboards/frame.dm | 253 +++++++++++ .../items/weapons/circuitboards/other.dm | 4 +- code/game/objects/items/weapons/cosmetics.dm | 6 +- .../objects/items/weapons/flamethrower.dm | 4 +- .../objects/items/weapons/gift_wrappaper.dm | 4 +- .../items/weapons/implants/implantpad.dm | 4 +- .../items/weapons/material/twohanded.dm | 2 +- .../objects/items/weapons/melee/energy.dm | 2 +- code/game/objects/items/weapons/mop_deploy.dm | 2 +- .../items/weapons/storage/laundry_basket.dm | 2 +- code/game/objects/items/weapons/tools.dm | 8 +- code/game/objects/objs.dm | 9 +- .../crates_lockers/closets/secure/security.dm | 1 + code/game/objects/structures/curtains.dm | 15 + code/game/objects/structures/extinguisher.dm | 25 +- code/game/objects/structures/janicart.dm | 6 +- code/game/objects/structures/mirror.dm | 62 ++- code/game/objects/structures/noticeboard.dm | 35 +- code/game/objects/structures/safe.dm | 2 +- code/game/objects/structures/watercloset.dm | 2 +- code/game/supplyshuttle.dm | 14 + code/modules/assembly/mousetrap.dm | 2 +- code/modules/clothing/head/misc_special.dm | 2 +- code/modules/clothing/masks/miscellaneous.dm | 2 +- .../clothing/spacesuits/rig/rig_attackby.dm | 4 +- code/modules/clothing/suits/armor.dm | 4 +- code/modules/clothing/suits/jobs.dm | 4 +- .../detectivework/tools/evidencebag.dm | 8 +- code/modules/economy/ATM.dm | 20 + code/modules/events/prison_break.dm | 7 +- code/modules/games/cards.dm | 8 +- code/modules/hydroponics/grown.dm | 4 +- code/modules/hydroponics/seed.dm | 4 +- code/modules/hydroponics/seed_machines.dm | 12 +- code/modules/hydroponics/trays/tray_tools.dm | 2 +- code/modules/library/lib_items.dm | 2 +- code/modules/materials/material_recipes.dm | 22 +- code/modules/materials/materials.dm | 5 +- code/modules/mining/drilling/drill.dm | 2 +- code/modules/mining/mine_turfs.dm | 7 +- code/modules/mob/inventory.dm | 129 ++---- code/modules/mob/living/bot/floorbot.dm | 2 +- .../carbon/alien/diona/diona_attacks.dm | 2 +- code/modules/mob/living/carbon/give.dm | 30 +- code/modules/mob/living/carbon/human/emote.dm | 4 +- code/modules/mob/living/carbon/human/human.dm | 2 + .../living/carbon/human/species/species.dm | 2 +- code/modules/mob/living/inventory.dm | 172 ++++++++ code/modules/mob/living/living.dm | 60 +++ .../living/silicon/robot/drone/drone_items.dm | 2 - .../mob/living/simple_animal/parrot.dm | 2 +- code/modules/mob/mob.dm | 120 +---- code/modules/mob/mob_defines.dm | 7 - code/modules/mob/mob_grab.dm | 6 +- code/modules/mob/mob_helpers.dm | 6 - code/modules/mob/update_icons.dm | 9 + code/modules/organs/organ_external.dm | 10 +- code/modules/paperwork/faxmachine.dm | 1 + code/modules/paperwork/filingcabinet.dm | 14 +- code/modules/paperwork/paper.dm | 5 +- code/modules/paperwork/photocopier.dm | 16 + code/modules/paperwork/photography.dm | 2 +- code/modules/paperwork/stamps.dm | 4 + code/modules/power/batteryrack.dm | 13 +- code/modules/power/port_gen.dm | 5 +- code/modules/power/smes.dm | 1 + code/modules/power/smes_construction.dm | 6 +- code/modules/power/solar.dm | 10 +- code/modules/projectiles/gun.dm | 4 +- .../projectiles/guns/projectile/pistol.dm | 10 +- .../targeting/targeting_overlay.dm | 3 +- code/modules/reagents/Chemistry-Machinery.dm | 10 + .../reagents/reagent_containers/glass.dm | 13 +- .../reagents/reagent_containers/pill.dm | 2 +- code/modules/reagents/reagent_dispenser.dm | 47 +- code/modules/recycling/conveyor2.dm | 57 +++ code/modules/research/circuitprinter.dm | 2 +- code/modules/research/destructive_analyzer.dm | 3 +- code/modules/research/protolathe.dm | 3 +- code/modules/research/server.dm | 2 +- .../xenoarchaeology/artifact/artifact.dm | 7 +- .../machinery/artifact_analyser.dm | 4 +- .../xenoarchaeology/master_controller.dm | 5 +- .../security levels/keycard authentication.dm | 19 + code/modules/surgery/other.dm | 4 +- html/changelogs/Datraen-PBAPCCheck.yml | 6 + html/changelogs/Datraen-SpawnTurf.yml | 6 + icons/mob/items/lefthand.dmi | Bin 120052 -> 120449 bytes icons/mob/items/righthand.dmi | Bin 121554 -> 121848 bytes icons/obj/monitors.dmi | Bin 43502 -> 42104 bytes icons/obj/radio.dmi | Bin 16286 -> 17416 bytes icons/obj/stock_parts.dmi | Bin 10608 -> 68894 bytes icons/obj/vending.dmi | Bin 69633 -> 68171 bytes icons/obj/watercloset.dmi | Bin 14351 -> 14431 bytes maps/polaris-1.dmm | 42 +- maps/polaris-2.dmm | 4 +- maps/polaris-3.dmm | 12 +- maps/polaris-4.dmm | 2 +- maps/polaris-5.dmm | 2 +- polaris.dme | 5 +- 154 files changed, 2223 insertions(+), 926 deletions(-) create mode 100644 code/game/machinery/frame.dm create mode 100644 code/game/objects/items/weapons/circuitboards/frame.dm create mode 100644 code/modules/mob/living/inventory.dm create mode 100644 html/changelogs/Datraen-PBAPCCheck.yml create mode 100644 html/changelogs/Datraen-SpawnTurf.yml diff --git a/code/ATMOSPHERICS/components/unary/cold_sink.dm b/code/ATMOSPHERICS/components/unary/cold_sink.dm index 9fcdad8613..faefa64883 100644 --- a/code/ATMOSPHERICS/components/unary/cold_sink.dm +++ b/code/ATMOSPHERICS/components/unary/cold_sink.dm @@ -10,6 +10,7 @@ anchored = 1 use_power = 0 idle_power_usage = 5 // 5 Watts for thermostat related circuitry + circuit = /obj/item/weapon/circuitboard/unary_atmos/cooler var/heatsink_temperature = T20C // The constant temperature reservoir into which the freezer pumps heat. Probably the hull of the station or something. var/internal_volume = 600 // L @@ -24,7 +25,6 @@ ..() initialize_directions = dir component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/unary_atmos/cooler(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/capacitor(src) component_parts += new /obj/item/weapon/stock_parts/capacitor(src) diff --git a/code/ATMOSPHERICS/components/unary/heat_source.dm b/code/ATMOSPHERICS/components/unary/heat_source.dm index e139f6faf3..aa51d9669f 100644 --- a/code/ATMOSPHERICS/components/unary/heat_source.dm +++ b/code/ATMOSPHERICS/components/unary/heat_source.dm @@ -10,6 +10,7 @@ anchored = 1 use_power = 0 idle_power_usage = 5 //5 Watts for thermostat related circuitry + circuit = /obj/item/weapon/circuitboard/unary_atmos/heater var/max_temperature = T20C + 680 var/internal_volume = 600 //L @@ -25,7 +26,6 @@ initialize_directions = dir component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/unary_atmos/heater(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/capacitor(src) component_parts += new /obj/item/weapon/stock_parts/capacitor(src) diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm index 7222470f71..bb4ec95a84 100644 --- a/code/ZAS/Fire.dm +++ b/code/ZAS/Fire.dm @@ -406,7 +406,7 @@ datum/gas_mixture/proc/check_recombustability(list/fuel_objs) //Get heat transfer coefficients for clothing. for(var/obj/item/clothing/C in src) - if(l_hand == C || r_hand == C) + if(item_is_in_hands(C)) continue if( C.max_heat_protection_temperature >= last_temperature ) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 9fa5fa3654..7d7468b91a 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -94,10 +94,7 @@ if(W == A) // Handle attack_self W.attack_self(src) - if(hand) - update_inv_l_hand(0) - else - update_inv_r_hand(0) + update_inv_active_hand(0) return 1 //Atoms on your person diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 751021892c..63ef549122 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -162,7 +162,7 @@ inv_box.name = "r_hand" inv_box.icon = ui_style inv_box.icon_state = "r_hand_inactive" - if(mymob && !mymob.hand) //This being 0 or null means the right hand is in use + if(!target.hand) //This being 0 or null means the right hand is in use inv_box.icon_state = "r_hand_active" inv_box.screen_loc = ui_rhand inv_box.slot_id = slot_r_hand @@ -177,7 +177,7 @@ inv_box.name = "l_hand" inv_box.icon = ui_style inv_box.icon_state = "l_hand_inactive" - if(mymob && mymob.hand) //This being 1 means the left hand is in use + if(target.hand) //This being 1 means the left hand is in use inv_box.icon_state = "l_hand_active" inv_box.screen_loc = ui_lhand inv_box.slot_id = slot_l_hand diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 1bf774c850..c4f43411fb 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -1001,7 +1001,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee containername = "Security barrier crate" group = "Security" -/datum/supply_packs/securitybarriers +/datum/supply_packs/securityshieldgen name = "Wall shield Generators" contains = list(/obj/machinery/shieldwallgen, /obj/machinery/shieldwallgen, @@ -1729,7 +1729,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/device/camera_film, /obj/item/device/camera_film, /obj/item/weapon/storage/photo_album, - /obj/item/device/reagent_scanner) + /obj/item/device/reagent_scanner, + /obj/item/device/flashlight/maglight) cost = 35 containertype = "/obj/structure/closet/crate/secure" containername = "Forensic equipment" @@ -1785,7 +1786,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/clothing/accessory/storage/black_vest, /obj/item/clothing/head/soft/sec/corp, /obj/item/clothing/under/rank/security/corp, - /obj/item/weapon/gun/energy/taser) + /obj/item/weapon/gun/energy/taser, + /obj/item/device/flashlight/maglight) cost = 30 containertype = "/obj/structure/closet/crate/secure" containername = "Officer equipment" @@ -1811,7 +1813,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/weapon/reagent_containers/spray/pepper, /obj/item/weapon/melee/baton/loaded, /obj/item/weapon/storage/box/holobadge, - /obj/item/clothing/head/beret/sec/corporate/warden) + /obj/item/clothing/head/beret/sec/corporate/warden, + /obj/item/device/flashlight/maglight) cost = 45 containertype = "/obj/structure/closet/crate/secure" containername = "Warden equipment" @@ -1835,7 +1838,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/clothing/accessory/holster/waist, /obj/item/weapon/melee/telebaton, /obj/item/weapon/shield/riot/tele, - /obj/item/clothing/head/beret/sec/corporate/hos) + /obj/item/clothing/head/beret/sec/corporate/hos, + /obj/item/device/flashlight/maglight) cost = 65 containertype = "/obj/structure/closet/crate/secure" containername = "Head of security equipment" diff --git a/code/datums/wires/alarm.dm b/code/datums/wires/alarm.dm index c34b0291fb..ace1ba9ec3 100644 --- a/code/datums/wires/alarm.dm +++ b/code/datums/wires/alarm.dm @@ -11,7 +11,7 @@ var/const/AALARM_WIRE_AALARM = 16 /datum/wires/alarm/CanUse(var/mob/living/L) var/obj/machinery/alarm/A = holder - if(A.wiresexposed && A.buildstage == 2) + if(A.wiresexposed) return 1 return 0 diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 83033257e3..a366dc9846 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -599,3 +599,29 @@ icon = 'icons/obj/stock_parts.dmi' icon_state = "smes_coil" origin_tech = list(TECH_MATERIAL = 19, TECH_ENGINEERING = 19, TECH_PHORON = 19, TECH_POWER = 19, TECH_BLUESPACE = 19, TECH_BIO = 19, TECH_COMBAT = 19, TECH_MAGNET = 19, TECH_DATA = 19, TECH_ILLEGAL = 19, TECH_ARCANE = 19) + +// Additional construction stock parts + +/obj/item/weapon/stock_parts/gear + name = "gear" + desc = "A gear used for construction." + icon = 'icons/obj/stock_parts.dmi' + icon_state = "gear" + origin_tech = list(TECH_ENGINEERING = 1) + matter = list(DEFAULT_WALL_MATERIAL = 50) + +/obj/item/weapon/stock_parts/motor + name = "motor" + desc = "A motor used for construction." + icon = 'icons/obj/stock_parts.dmi' + icon_state = "motor" + origin_tech = list(TECH_ENGINEERING = 1) + matter = list(DEFAULT_WALL_MATERIAL = 60, "glass" = 10) + +/obj/item/weapon/stock_parts/spring + name = "spring" + desc = "A spring used for construction." + icon = 'icons/obj/stock_parts.dmi' + icon_state = "spring" + origin_tech = list(TECH_ENGINEERING = 1) + matter = list(DEFAULT_WALL_MATERIAL = 40) \ No newline at end of file diff --git a/code/game/antagonist/antagonist_create.dm b/code/game/antagonist/antagonist_create.dm index 072dd88bee..65c7a080cd 100644 --- a/code/game/antagonist/antagonist_create.dm +++ b/code/game/antagonist/antagonist_create.dm @@ -76,7 +76,7 @@ P.info = "The nuclear authorization code is: [code]" P.name = "nuclear bomb code" if(leader && leader.current) - if(get_turf(P) == get_turf(leader.current) && !(leader.current.l_hand && leader.current.r_hand)) + if(get_turf(P) == get_turf(leader.current)) leader.current.put_in_hands(P) if(!code_owner && leader) diff --git a/code/game/antagonist/station/renegade.dm b/code/game/antagonist/station/renegade.dm index cd9dd9b83b..b077977fd7 100644 --- a/code/game/antagonist/station/renegade.dm +++ b/code/game/antagonist/station/renegade.dm @@ -50,8 +50,7 @@ var/datum/antagonist/renegade/renegades var/gun_type = pick(spawn_guns) var/obj/item/gun = new gun_type(get_turf(player)) - if(!(player.l_hand && player.r_hand)) - player.put_in_hands(gun) + player.put_in_hands(gun) /proc/rightandwrong() diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 07b3dcacc5..81f0da074d 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -292,12 +292,14 @@ var/list/mob/living/forced_ambiance_list = new mob << "The sudden appearance of gravity makes you fall to the floor!" /area/proc/prison_break() - for(var/obj/machinery/power/apc/temp_apc in src) - temp_apc.overload_lighting(70) - for(var/obj/machinery/door/airlock/temp_airlock in src) - temp_airlock.prison_open() - for(var/obj/machinery/door/window/temp_windoor in src) - temp_windoor.open() + var/obj/machinery/power/apc/theAPC = get_apc() + if(theAPC.operating) + for(var/obj/machinery/power/apc/temp_apc in src) + temp_apc.overload_lighting(70) + for(var/obj/machinery/door/airlock/temp_airlock in src) + temp_airlock.prison_open() + for(var/obj/machinery/door/window/temp_windoor in src) + temp_windoor.open() /area/proc/has_gravity() return has_gravity diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index b37342ced5..3138c65439 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -47,6 +47,7 @@ idle_power_usage = 50 active_power_usage = 300 interact_offline = 1 + circuit = /obj/item/weapon/circuitboard/clonescanner var/locked = 0 var/mob/living/carbon/occupant = null var/obj/item/weapon/reagent_containers/glass/beaker = null @@ -55,7 +56,6 @@ /obj/machinery/dna_scannernew/New() ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/clonescanner(src) component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) diff --git a/code/game/gamemodes/changeling/generic_equip_procs.dm b/code/game/gamemodes/changeling/generic_equip_procs.dm index 5569db8512..930e50c9c8 100644 --- a/code/game/gamemodes/changeling/generic_equip_procs.dm +++ b/code/game/gamemodes/changeling/generic_equip_procs.dm @@ -244,7 +244,7 @@ var/mob/living/carbon/human/M = src - if(M.l_hand && M.r_hand) //Make sure our hands aren't full. + if(M.hands_are_full()) //Make sure our hands aren't full. src << "Our hands are full. Drop something first." return 0 diff --git a/code/game/gamemodes/changeling/powers/armblade.dm b/code/game/gamemodes/changeling/powers/armblade.dm index c5441d90ee..92b86ce2ee 100644 --- a/code/game/gamemodes/changeling/powers/armblade.dm +++ b/code/game/gamemodes/changeling/powers/armblade.dm @@ -68,7 +68,7 @@ ..() /obj/item/weapon/melee/arm_blade/process() //Stolen from ninja swords. - if(!creator || loc != creator || (creator.l_hand != src && creator.r_hand != src)) + if(!creator || loc != creator || !creator.item_is_in_hands(src)) // Tidy up a bit. if(istype(loc,/mob/living)) var/mob/living/carbon/human/host = loc diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index d3603fe96e..699898fde0 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -54,6 +54,7 @@ var/wiresexposed = 0 // If it's been screwdrivered open. var/aidisabled = 0 var/shorted = 0 + circuit = /obj/item/weapon/circuitboard/airalarm var/datum/wires/alarm/wires @@ -61,7 +62,6 @@ var/screen = AALARM_SCREEN_MAIN var/area_uid var/area/alarm_area - var/buildstage = 2 //2 is built, 1 is building, 0 is frame. var/target_temperature = T0C+20 var/regulating_temperature = 0 @@ -105,23 +105,8 @@ wires = null return ..() -/obj/machinery/alarm/New(var/loc, var/dir, var/building = 0) +/obj/machinery/alarm/New() ..() - - if(building) - if(loc) - src.loc = loc - - if(dir) - src.set_dir(dir) - - buildstage = 0 - wiresexposed = 1 - pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24) - pixel_y = (dir & 3)? (dir ==1 ? -24 : 24) : 0 - update_icon() - return - first_run() /obj/machinery/alarm/proc/first_run() @@ -148,7 +133,7 @@ elect_master() /obj/machinery/alarm/process() - if((stat & (NOPOWER|BROKEN)) || shorted || buildstage != 2) + if((stat & (NOPOWER|BROKEN)) || shorted) return var/turf/simulated/location = loc @@ -605,9 +590,6 @@ data["thresholds"] = thresholds /obj/machinery/alarm/CanUseTopic(var/mob/user, var/datum/topic_state/state, var/href_list = list()) - if(buildstage != 2) - return STATUS_CLOSE - if(aidisabled && isAI(user)) user << "AI control for \the [src] interface has been disabled." return STATUS_CLOSE @@ -763,73 +745,43 @@ /obj/machinery/alarm/attackby(obj/item/W as obj, mob/user as mob) src.add_fingerprint(user) + if(istype(W, /obj/item/weapon/screwdriver)) // Opening that Air Alarm up. + //user << "You pop the Air Alarm's maintence panel open." + wiresexposed = !wiresexposed + user << "The wires have been [wiresexposed ? "exposed" : "unexposed"]" + update_icon() + return - switch(buildstage) - if(2) - if(istype(W, /obj/item/weapon/screwdriver)) // Opening that Air Alarm up. - //user << "You pop the Air Alarm's maintence panel open." - wiresexposed = !wiresexposed - user << "The wires have been [wiresexposed ? "exposed" : "unexposed"]" - update_icon() - return + if (wiresexposed && istype(W, /obj/item/weapon/wirecutters)) + user.visible_message("[user] has cut the wires inside \the [src]!", "You have cut the wires inside \the [src].") + playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + new/obj/item/stack/cable_coil(get_turf(src), 5) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.frame_type = "airalarm" + A.pixel_x = pixel_x + A.pixel_y = pixel_y + A.set_dir(dir) + A.circuit = M + A.anchored = 1 + for (var/obj/C in src) + C.forceMove(loc) + A.state = 2 + A.icon_state = "airalarm_2" + M.deconstruct(src) + qdel(src) + return - if (wiresexposed && istype(W, /obj/item/weapon/wirecutters)) - user.visible_message("[user] has cut the wires inside \the [src]!", "You have cut the wires inside \the [src].") - playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) - new/obj/item/stack/cable_coil(get_turf(src), 5) - buildstage = 1 - update_icon() - return - - if (istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda))// trying to unlock the interface with an ID card - if(stat & (NOPOWER|BROKEN)) - user << "It does nothing" - return - else - if(allowed(usr) && !wires.IsIndexCut(AALARM_WIRE_IDSCAN)) - locked = !locked - user << "You [ locked ? "lock" : "unlock"] the Air Alarm interface." - else - user << "Access denied." + if (istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda))// trying to unlock the interface with an ID card + if(stat & (NOPOWER|BROKEN)) + user << "It does nothing" return - - if(1) - if(istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = W - if (C.use(5)) - user << "You wire \the [src]." - buildstage = 2 - update_icon() - first_run() - return - else - user << "You need 5 pieces of cable to do wire \the [src]." - return - - else if(istype(W, /obj/item/weapon/crowbar)) - user << "You start prying out the circuit." - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - if(do_after(user,20)) - user << "You pry out the circuit!" - var/obj/item/weapon/airalarm_electronics/circuit = new /obj/item/weapon/airalarm_electronics() - circuit.loc = user.loc - buildstage = 0 - update_icon() - return - if(0) - if(istype(W, /obj/item/weapon/airalarm_electronics)) - user << "You insert the circuit!" - qdel(W) - buildstage = 1 - update_icon() - return - - else if(istype(W, /obj/item/weapon/wrench)) - user << "You remove the fire alarm assembly from the wall!" - new /obj/item/frame/air_alarm(get_turf(user)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - qdel(src) - + else + if(allowed(usr) && !wires.IsIndexCut(AALARM_WIRE_IDSCAN)) + locked = !locked + user << "You [ locked ? "lock" : "unlock"] the Air Alarm interface." + else + user << "Access denied." return ..() /obj/machinery/alarm/power_change() @@ -839,14 +791,10 @@ /obj/machinery/alarm/examine(mob/user) ..(user) - if (buildstage < 2) - user << "It is not wired." - if (buildstage < 1) - user << "The circuit is missing." /* AIR ALARM CIRCUIT Just a object used in constructing air alarms -*/ + /obj/item/weapon/airalarm_electronics name = "air alarm electronics" icon = 'icons/obj/doors/door_assembly.dmi' @@ -854,7 +802,7 @@ Just a object used in constructing air alarms desc = "Looks like a circuit. Probably is." w_class = 2.0 matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) - +*/ /* FIRE ALARM */ @@ -875,20 +823,13 @@ FIRE ALARM power_channel = ENVIRON var/last_process = 0 var/wiresexposed = 0 - var/buildstage = 2 // 2 = complete, 1 = no wires, 0 = circuit gone var/seclevel + circuit = /obj/item/weapon/circuitboard/firealarm /obj/machinery/firealarm/update_icon() overlays.Cut() if(wiresexposed) - switch(buildstage) - if(2) - icon_state="fire_b2" - if(1) - icon_state="fire_b1" - if(0) - icon_state="fire_b0" set_light(0) return @@ -932,56 +873,36 @@ FIRE ALARM /obj/machinery/firealarm/attackby(obj/item/W as obj, mob/user as mob) src.add_fingerprint(user) - if (istype(W, /obj/item/weapon/screwdriver) && buildstage == 2) + if (istype(W, /obj/item/weapon/screwdriver)) wiresexposed = !wiresexposed update_icon() return if(wiresexposed) - switch(buildstage) - if(2) - if (istype(W, /obj/item/device/multitool)) - src.detecting = !( src.detecting ) - if (src.detecting) - user.visible_message("\The [user] has reconnected [src]'s detecting unit!", "You have reconnected [src]'s detecting unit.") - else - user.visible_message("\The [user] has disconnected [src]'s detecting unit!", "You have disconnected [src]'s detecting unit.") - else if (istype(W, /obj/item/weapon/wirecutters)) - user.visible_message("\The [user] has cut the wires inside \the [src]!", "You have cut the wires inside \the [src].") - new/obj/item/stack/cable_coil(get_turf(src), 5) - playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) - buildstage = 1 - update_icon() - if(1) - if(istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = W - if (C.use(5)) - user << "You wire \the [src]." - buildstage = 2 - return - else - user << "You need 5 pieces of cable to wire \the [src]." - return - else if(istype(W, /obj/item/weapon/crowbar)) - user << "You pry out the circuit!" - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - spawn(20) - var/obj/item/weapon/firealarm_electronics/circuit = new /obj/item/weapon/firealarm_electronics() - circuit.loc = user.loc - buildstage = 0 - update_icon() - if(0) - if(istype(W, /obj/item/weapon/firealarm_electronics)) - user << "You insert the circuit!" - qdel(W) - buildstage = 1 - update_icon() - - else if(istype(W, /obj/item/weapon/wrench)) - user << "You remove the fire alarm assembly from the wall!" - new /obj/item/frame/fire_alarm(get_turf(user)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - qdel(src) + if (istype(W, /obj/item/device/multitool)) + src.detecting = !( src.detecting ) + if (src.detecting) + user.visible_message("\The [user] has reconnected [src]'s detecting unit!", "You have reconnected [src]'s detecting unit.") + else + user.visible_message("\The [user] has disconnected [src]'s detecting unit!", "You have disconnected [src]'s detecting unit.") + else if (istype(W, /obj/item/weapon/wirecutters)) + user.visible_message("\The [user] has cut the wires inside \the [src]!", "You have cut the wires inside \the [src].") + new/obj/item/stack/cable_coil(get_turf(src), 5) + playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.frame_type = "firealarm" + A.pixel_x = pixel_x + A.pixel_y = pixel_y + A.set_dir(dir) + A.circuit = M + A.anchored = 1 + for (var/obj/C in src) + C.forceMove(loc) + A.state = 2 + A.icon_state = "firealarm_2" + M.deconstruct(src) + qdel(src) return src.alarm() @@ -1016,9 +937,6 @@ FIRE ALARM if(user.stat || stat & (NOPOWER|BROKEN)) return - if (buildstage != 2) - return - user.set_machine(src) var/area/A = src.loc var/d1 @@ -1061,9 +979,6 @@ FIRE ALARM if (usr.stat || stat & (BROKEN|NOPOWER)) return - if (buildstage != 2) - return - if ((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) usr.set_machine(src) if (href_list["reset"]) @@ -1106,23 +1021,6 @@ FIRE ALARM //playsound(src.loc, 'sound/ambience/signal.ogg', 75, 0) return - - -/obj/machinery/firealarm/New(loc, dir, building) - ..() - - if(loc) - src.loc = loc - - if(dir) - src.set_dir(dir) - - if(building) - buildstage = 0 - wiresexposed = 1 - pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24) - pixel_y = (dir & 3)? (dir ==1 ? -24 : 24) : 0 - /obj/machinery/firealarm/proc/set_security_level(var/newlevel) if(seclevel != newlevel) seclevel = newlevel @@ -1135,7 +1033,7 @@ FIRE ALARM /* FIRE ALARM CIRCUIT Just a object used in constructing fire alarms -*/ + /obj/item/weapon/firealarm_electronics name = "fire alarm electronics" icon = 'icons/obj/doors/door_assembly.dmi' @@ -1143,7 +1041,7 @@ Just a object used in constructing fire alarms desc = "A circuit. It has a label on it, it says \"Can handle heat levels up to 40 degrees celsius!\"" w_class = 2.0 matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) - +*/ /obj/machinery/partyalarm name = "\improper PARTY BUTTON" desc = "Cuban Pete is in the house!" diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 972d9a717b..14512fb839 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -7,7 +7,7 @@ use_power = 1 idle_power_usage = 10 active_power_usage = 2000 - + circuit = /obj/item/weapon/circuitboard/autolathe var/list/machine_recipes var/list/stored_material = list(DEFAULT_WALL_MATERIAL = 0, "glass" = 0) var/list/storage_capacity = list(DEFAULT_WALL_MATERIAL = 0, "glass" = 0) @@ -30,14 +30,13 @@ wires = new(src) //Create parts for lathe. component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/autolathe(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) component_parts += new /obj/item/weapon/stock_parts/console_screen(src) RefreshParts() - + /obj/machinery/autolathe/Destroy() qdel(wires) wires = null diff --git a/code/game/machinery/autolathe_datums.dm b/code/game/machinery/autolathe_datums.dm index 8c4c244799..244b74f17f 100644 --- a/code/game/machinery/autolathe_datums.dm +++ b/code/game/machinery/autolathe_datums.dm @@ -158,12 +158,12 @@ /datum/autolathe/recipe/airalarm name = "air alarm electronics" - path = /obj/item/weapon/airalarm_electronics + path = /obj/item/weapon/circuitboard/airalarm category = "Engineering" /datum/autolathe/recipe/firealarm name = "fire alarm electronics" - path = /obj/item/weapon/firealarm_electronics + path = /obj/item/weapon/circuitboard/firealarm category = "Engineering" /datum/autolathe/recipe/powermodule @@ -171,6 +171,96 @@ path = /obj/item/weapon/module/power_control category = "Engineering" +/datum/autolathe/recipe/statusdisplay + name = "status display electronics" + path = /obj/item/weapon/circuitboard/status_display + category = "Engineering" + +/datum/autolathe/recipe/aistatusdisplay + name = "ai status display electronics" + path = /obj/item/weapon/circuitboard/ai_status_display + category = "Engineering" + +/datum/autolathe/recipe/newscaster + name = "newscaster electronics" + path = /obj/item/weapon/circuitboard/newscaster + category = "Engineering" + +/datum/autolathe/recipe/atm + name = "atm electronics" + path = /obj/item/weapon/circuitboard/atm + category = "Engineering" + +/datum/autolathe/recipe/intercom + name = "intercom electronics" + path = /obj/item/weapon/circuitboard/intercom + category = "Engineering" + +/datum/autolathe/recipe/holopad + name = "holopad electronics" + path = /obj/item/weapon/circuitboard/holopad + category = "Engineering" + +/datum/autolathe/recipe/guestpass + name = "guestpass console electronics" + path = /obj/item/weapon/circuitboard/guestpass + category = "Engineering" + +/datum/autolathe/recipe/entertainment + name = "entertainment camera electronics" + path = /obj/item/weapon/circuitboard/security/telescreen/entertainment + category = "Engineering" + +/datum/autolathe/recipe/keycard + name = "keycard authenticator electronics" + path = /obj/item/weapon/circuitboard/keycard_auth + category = "Engineering" + +/datum/autolathe/recipe/photocopier + name = "photocopier electronics" + path = /obj/item/weapon/circuitboard/photocopier + category = "Engineering" + +/datum/autolathe/recipe/fax + name = "fax machine electronics" + path = /obj/item/weapon/circuitboard/fax + category = "Engineering" + +/datum/autolathe/recipe/conveyor + name = "conveyor electronics" + path = /obj/item/weapon/circuitboard/conveyor + category = "Engineering" + +/datum/autolathe/recipe/microwave + name = "microwave electronics" + path = /obj/item/weapon/circuitboard/microwave + category = "Engineering" + +/datum/autolathe/recipe/vending + name = "vending machine electronics" + path = /obj/item/weapon/circuitboard/vending + category = "Engineering" + +/datum/autolathe/recipe/washing + name = "washing machine electronics" + path = /obj/item/weapon/circuitboard/washing + category = "Engineering" + +/datum/autolathe/recipe/motor + name = "motor" + path = /obj/item/weapon/stock_parts/motor + category = "Engineering" + +/datum/autolathe/recipe/gear + name = "gear" + path = /obj/item/weapon/stock_parts/gear + category = "Engineering" + +/datum/autolathe/recipe/spring + name = "spring" + path = /obj/item/weapon/stock_parts/spring + category = "Engineering" + /datum/autolathe/recipe/rcd_ammo name = "matter cartridge" path = /obj/item/weapon/rcd_ammo diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm index 61ed92d58e..f2500f0afa 100644 --- a/code/game/machinery/biogenerator.dm +++ b/code/game/machinery/biogenerator.dm @@ -5,6 +5,7 @@ icon_state = "biogen-stand" density = 1 anchored = 1 + circuit = /obj/item/weapon/circuitboard/biogenerator use_power = 1 idle_power_usage = 40 var/processing = 0 @@ -23,7 +24,6 @@ beaker = new /obj/item/weapon/reagent_containers/glass/bottle(src) component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/biogenerator(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index a06b22927d..3f7a8d600c 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -30,6 +30,7 @@ desc = "An electronically-lockable pod for growing organic tissue." density = 1 anchored = 1 + circuit = /obj/item/weapon/circuitboard/clonepod icon = 'icons/obj/cloning.dmi' icon_state = "pod_0" req_access = list(access_genetics) //For premature unlocking. @@ -47,7 +48,6 @@ /obj/machinery/clonepod/New() ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/clonepod(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index e7f92e0237..4b64cbadce 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -215,7 +215,8 @@ icon_screen = "entertainment" light_color = "#FFEEDB" light_range_on = 2 - circuit = null + network = list(NETWORK_THUNDER) + circuit = /obj/item/weapon/circuitboard/security/telescreen/entertainment /obj/machinery/computer/security/wooden_tv name = "security camera monitor" desc = "An old TV hooked into the stations camera network." diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index d9d5f4707b..6f380739cc 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -7,7 +7,7 @@ use_power = 1 idle_power_usage = 300 active_power_usage = 300 - var/circuit = null //The path to the circuit board type. If circuit==null, the computer can't be disassembled. + frame_type = "computer" var/processing = 0 var/icon_keyboard = "generic_key" @@ -98,23 +98,28 @@ /obj/machinery/computer/attackby(I as obj, user as mob) if(istype(I, /obj/item/weapon/screwdriver) && circuit) + user << "You start disconnecting the monitor." playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) if(do_after(user, 20)) - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) var/obj/item/weapon/circuitboard/M = new circuit( A ) A.circuit = M A.anchored = 1 + A.density = 1 + A.frame_type = M.board_type for (var/obj/C in src) - C.loc = src.loc + C.forceMove(loc) if (src.stat & BROKEN) user << "The broken glass falls out." new /obj/item/weapon/material/shard( src.loc ) A.state = 3 - A.icon_state = "3" + A.icon_state = "[A.frame_type]_3" else user << "You disconnect the monitor." A.state = 4 - A.icon_state = "4" + A.icon_state = "[A.frame_type]_4" + A.pixel_x = pixel_x + A.pixel_y = pixel_y M.deconstruct(src) qdel(src) else diff --git a/code/game/machinery/computer/guestpass.dm b/code/game/machinery/computer/guestpass.dm index ccbce91b61..648df34dc0 100644 --- a/code/game/machinery/computer/guestpass.dm +++ b/code/game/machinery/computer/guestpass.dm @@ -46,6 +46,7 @@ icon_keyboard = null icon_screen = "pass" density = 0 + circuit = /obj/item/weapon/circuitboard/guestpass var/obj/item/weapon/card/id/giver var/list/accesses = list() @@ -60,11 +61,30 @@ ..() uid = "[rand(100,999)]-G[rand(10,99)]" -/obj/machinery/computer/guestpass/attackby(obj/O, mob/user) - if(istype(O, /obj/item/weapon/card/id)) - if(!giver && user.unEquip(O)) - O.loc = src - giver = O +/obj/machinery/computer/guestpass/attackby(obj/I, mob/user) + if(istype(I, /obj/item/weapon/screwdriver) && circuit) + user << "You start disconnecting the monitor." + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + if(do_after(user, 20)) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.frame_type = "guestpass" + A.pixel_x = pixel_x + A.pixel_y = pixel_y + A.circuit = M + A.anchored = 1 + for (var/obj/C in src) + C.forceMove(loc) + user << "You disconnect the monitor." + A.state = 4 + A.icon_state = "guestpass_4" + M.deconstruct(src) + qdel(src) + return + if(istype(I, /obj/item/weapon/card/id)) + if(!giver && user.unEquip(I)) + I.loc = src + giver = I updateUsrDialog() else if(giver) user << "There is already ID card inside." diff --git a/code/game/machinery/computer/prisonshuttle.dm b/code/game/machinery/computer/prisonshuttle.dm index c2c4598706..1c54fb0f4c 100644 --- a/code/game/machinery/computer/prisonshuttle.dm +++ b/code/game/machinery/computer/prisonshuttle.dm @@ -26,32 +26,6 @@ var/prison_shuttle_timeleft = 0 attack_ai(var/mob/user as mob) return src.attack_hand(user) - attackby(I as obj, user as mob) - if(istype(I, /obj/item/weapon/screwdriver)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - if(do_after(user, 20)) - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - var/obj/item/weapon/circuitboard/prison_shuttle/M = new /obj/item/weapon/circuitboard/prison_shuttle( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.anchored = 1 - - if (src.stat & BROKEN) - user << "The broken glass falls out." - new /obj/item/weapon/material/shard( src.loc ) - A.state = 3 - A.icon_state = "3" - else - user << "You disconnect the monitor." - A.state = 4 - A.icon_state = "4" - - qdel(src) - else - return src.attack_hand(user) - - attack_hand(var/mob/user as mob) if(!src.allowed(user) && (!hacked)) user << "Access Denied." diff --git a/code/game/machinery/computer3/computer.dm b/code/game/machinery/computer3/computer.dm index 37d9a67d92..e0040a6d83 100644 --- a/code/game/machinery/computer3/computer.dm +++ b/code/game/machinery/computer3/computer.dm @@ -29,7 +29,7 @@ // when you had to search the list to find what you had. // Mostly decorative, holds the OS rom - var/obj/item/part/computer/circuitboard/circuit + var/obj/item/part/computer/circuitboard/circuitb // Storage var/obj/item/part/computer/storage/hdd/hdd = null @@ -97,11 +97,11 @@ overlays += kb if(!built) - if(!circuit || !istype(circuit)) - circuit = new(src) - if(circuit.OS) - os = circuit.OS - circuit.OS.computer = src + if(!circuitb || !istype(circuitb)) + circuitb = new(src) + if(circuitb.OS) + os = circuitb.OS + circuitb.OS.computer = src else os = null @@ -121,10 +121,10 @@ floppy.addfile(P) program = P else - circuit.OS = P - circuit.OS.computer = src - os = circuit.OS - circuit.name = "Circuitboard ([P])" + circuitb.OS = P + circuitb.OS.computer = src + os = circuitb.OS + circuitb.name = "Circuitboard ([P])" if(hdd) // Spawn files diff --git a/code/game/machinery/computer3/computers/camera.dm b/code/game/machinery/computer3/computers/camera.dm index 5a1b3acc0e..0f92519c36 100644 --- a/code/game/machinery/computer3/computers/camera.dm +++ b/code/game/machinery/computer3/computers/camera.dm @@ -26,7 +26,7 @@ New() ..(built=0) os = program - circuit.OS = os + circuitb.OS = os /obj/machinery/computer3/security/mining diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 08d47db158..266aeb2f23 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -221,7 +221,7 @@ if (stat & BROKEN) new /obj/item/weapon/circuitboard/broken(src.loc) else - new/obj/item/weapon/airalarm_electronics(src.loc) + new/obj/item/weapon/circuitboard/airalarm(src.loc) var/obj/structure/firedoor_assembly/FA = new/obj/structure/firedoor_assembly(src.loc) FA.anchored = 1 diff --git a/code/game/machinery/doors/firedoor_assembly.dm b/code/game/machinery/doors/firedoor_assembly.dm index c01fff5bed..a96065d2c6 100644 --- a/code/game/machinery/doors/firedoor_assembly.dm +++ b/code/game/machinery/doors/firedoor_assembly.dm @@ -36,7 +36,7 @@ obj/structure/firedoor_assembly/attackby(C as obj, mob/user as mob) new/obj/item/stack/cable_coil(src.loc, 1) wired = 0 - else if(istype(C, /obj/item/weapon/airalarm_electronics) && wired) + else if(istype(C, /obj/item/weapon/circuitboard/airalarm) && wired) if(anchored) playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) user.visible_message("[user] has inserted a circuit into \the [src]!", diff --git a/code/game/machinery/frame.dm b/code/game/machinery/frame.dm new file mode 100644 index 0000000000..35f0cf6af0 --- /dev/null +++ b/code/game/machinery/frame.dm @@ -0,0 +1,412 @@ +/obj/structure/frame + anchored = 0 + name = "frame" + icon = 'icons/obj/stock_parts.dmi' + icon_state = "machine_0" + var/state = 0 + var/obj/item/weapon/circuitboard/circuit = null + var/need_circuit = 1 + var/frame_type = "machine" + + var/list/components = null + var/list/req_components = null + var/list/req_component_names = null + + var/list/alarms = list("firealarm", "airalarm", "intercom", "keycard") + var/list/machines = list("machine", "photocopier", "fax", "microwave", "conveyor", "vending", "recharger", "wrecharger", "washing", "grinder") + var/list/computers = list("computer", "holopad") + var/list/displays = list("display", "guestpass", "newscaster", "atm") + var/list/no_circuit = list("wrecharger", "recharger", "grinder","conveyor") + +/obj/structure/frame/proc/update_desc() + var/D + if(req_components) + var/list/component_list = new + for(var/I in req_components) + if(req_components[I] > 0) + component_list += "[num2text(req_components[I])] [req_component_names[I]]" + D = "Requires [english_list(component_list)]." + desc = D + +/obj/structure/frame/proc/check_components(mob/user as mob) + components = list() + req_components = circuit.req_components.Copy() + for(var/A in circuit.req_components) + req_components[A] = circuit.req_components[A] + req_component_names = circuit.req_components.Copy() + for(var/A in req_components) + var/cp = text2path(A) + var/obj/ct = new cp() // have to quickly instantiate it get name + req_component_names[A] = ct.name + +/obj/structure/frame/New(var/loc, var/dir, var/building = 0, var/obj/item/frame/frame_type, mob/user as mob) + ..() + if(building) + src.frame_type = frame_type + icon_state = "[frame_type]_0" + + if(frame_type in alarms) + if(loc) + src.loc = loc + + state = 0 + if(frame_type == "airalarm" || frame_type == "firealarm" || frame_type == "keycard") + if(dir) + src.set_dir(dir) + pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24) + pixel_y = (dir & 3)? (dir == 1 ? -24 : 24) : 0 + + if(frame_type == "intercom") + if(dir) + src.set_dir(dir) + pixel_x = (dir & 3)? 0 : (dir == 4 ? -28 : 28) + pixel_y = (dir & 3)? (dir == 1 ? -28 : 28) : 0 + + update_icon() + return + + if(frame_type in displays) + if(loc) + src.loc = loc + + if(frame_type == "display" || frame_type == "atm") + pixel_x = (dir & 3)? 0 : (dir == 4 ? -32 : 32) + pixel_y = (dir & 3)? (dir == 1 ? -32 : 32) : 0 + + if(frame_type == "newscaster") + pixel_x = (dir & 3)? 0 : (dir == 4 ? -28 : 28) + pixel_y = (dir & 3)? (dir == 1 ? -30 : 30) : 0 + + if(frame_type == "guestpass") + pixel_x = (dir & 3)? 0 : (dir == 4 ? -30 : 30) + pixel_y = (dir & 3)? (dir == 1 ? -30 : 30) : 0 + + update_icon() + return + + if(frame_type in no_circuit) + need_circuit = 0 + if(frame_type == "wrecharger") + circuit = new /obj/item/weapon/circuitboard/recharger/wrecharger(src) + if(loc) + src.loc = loc + + state = 0 + + pixel_x = (dir & 3)? 0 : (dir == 4 ? -26 : 32) + pixel_y = (dir & 3)? (dir == 1 ? -32 : 32) : 0 + + update_icon() + return + if(frame_type == "recharger") + circuit = new /obj/item/weapon/circuitboard/recharger(src) + if(frame_type == "grinder") + circuit = new /obj/item/weapon/circuitboard/grinder(src) + if(frame_type == "conveyor") + circuit = new /obj/item/weapon/circuitboard/conveyor(src) + if(dir) + src.set_dir(dir) + + if(frame_type == "computer") + density = 1 + if(frame_type in machines) + density = 1 + return + +/obj/structure/frame/attackby(obj/item/P as obj, mob/user as mob) + if(istype(P, /obj/item/weapon/wrench)) + if(state == 0) + user << "You start to wrench the frame into place." + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + if(do_after(user, 20)) + src.anchored = 1 + if(!need_circuit && circuit) + src.state = 2 + check_components() + update_desc() + src.icon_state = "[frame_type]_2" + user << "You wrench the frame into place and set the outer cover." + else + src.state = 1 + user << "You wrench the frame into place." + return + + if(state == 1) + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + if(do_after(user, 20)) + user << "You unfasten the frame." + src.anchored = 0 + src.state = 0 + return + + if(istype(P, /obj/item/weapon/weldingtool)) + if(state == 0) + var/obj/item/weapon/weldingtool/WT = P + if(!WT.remove_fuel(0, user)) + user << "The welding tool must be on to complete this task." + return + playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) + if(do_after(user, 20)) + if(!src || !WT.isOn()) return + user << "You deconstruct the frame." + if(frame_type == "holopad" || frame_type == "microwave") + new /obj/item/stack/material/steel( src.loc, 4 ) + else if(frame_type == "fax" || frame_type == "newscaster" || frame_type == "recharger" || frame_type == "wrecharger" || frame_type == "grinder") + new /obj/item/stack/material/steel( src.loc, 3 ) + else if(frame_type == "firealarm" || frame_type == "airalarm" || frame_type == "intercom" || frame_type == "guestpass") + new /obj/item/stack/material/steel( src.loc, 2 ) + else if(frame_type == "keycard") + new /obj/item/stack/material/steel( src.loc, 1 ) + else + new /obj/item/stack/material/steel( src.loc, 5 ) + qdel(src) + return + + if(istype(P, /obj/item/weapon/circuitboard) && need_circuit && !circuit) + if(state == 1) + var/obj/item/weapon/circuitboard/B = P + if(B.board_type == frame_type) + playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + user << "You place the circuit board inside the frame." + src.icon_state = "[frame_type]_1" + src.circuit = P + user.drop_item() + P.loc = src + if(frame_type in machines) //because machines are assholes + check_components() + update_desc() + return + else + user << "This frame does not accept circuit boards of this type!" + return + + if(istype(P, /obj/item/weapon/screwdriver)) + if(state == 1) + if(need_circuit && circuit) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You screw the circuit board into place." + src.state = 2 + src.icon_state = "[frame_type]_2" + return + + if(state == 2) + if(need_circuit && circuit) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You unfasten the circuit board." + src.state = 1 + src.icon_state = "[frame_type]_1" + return + + if(!need_circuit && circuit) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You unfasten the outer cover." + src.state = 1 + src.icon_state = "[frame_type]_0" + return + + if(state == 3) + if(frame_type in machines) + var/component_check = 1 + for(var/R in req_components) + if(req_components[R] > 0) + component_check = 0 + break + if(component_check) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + var/obj/machinery/new_machine = new src.circuit.build_path(src.loc, src.dir) + if(!new_machine.component_parts) + for(var/obj/O in src.components) + O.forceMove(null) + new_machine.RefreshParts() + + src.circuit.construct(new_machine) + new_machine.pixel_x = src.pixel_x + new_machine.pixel_y = src.pixel_y + qdel(src) + return + + if(frame_type in alarms) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You fasten the cover." + var/obj/machinery/B = new src.circuit.build_path ( src.loc ) + B.pixel_x = src.pixel_x + B.pixel_y = src.pixel_y + B.set_dir(dir) + src.circuit.construct(B) + qdel(src) + return + + if(state == 4) + if(frame_type in computers) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You connect the monitor." + var/obj/machinery/B = new src.circuit.build_path ( src.loc ) + B.pixel_x = src.pixel_x + B.pixel_y = src.pixel_y + src.circuit.construct(B) + qdel(src) + return + + if(frame_type in displays) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You connect the monitor." + var/obj/machinery/B = new src.circuit.build_path ( src.loc ) + B.pixel_x = src.pixel_x + B.pixel_y = src.pixel_y + src.circuit.construct(B) + qdel(src) + return + + if(istype(P, /obj/item/weapon/crowbar)) + if(state == 1) + if(need_circuit && circuit) + playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) + user << "You remove the circuit board." + src.state = 1 + src.icon_state = "[frame_type]_0" + circuit.loc = src.loc + src.circuit = null + if(frame_type in machines) //becuase machines are assholes + req_components = null + return + + if(state == 3) + if(frame_type in machines) + playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) + if(components.len == 0) + user << "There are no components to remove." + else + user << "You remove the components." + for(var/obj/item/weapon/W in components) + W.forceMove(loc) + check_components() + update_desc() + user << desc + return + + if(state == 4) + if(frame_type in computers) + playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) + user << "You remove the glass panel." + src.state = 3 + src.icon_state = "[frame_type]_3" + new /obj/item/stack/material/glass( src.loc, 2 ) + return + + if(frame_type in displays) + playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) + user << "You remove the glass panel." + src.state = 3 + src.icon_state = "[frame_type]_3" + new /obj/item/stack/material/glass( src.loc, 2 ) + return + + if(istype(P, /obj/item/stack/cable_coil)) + if(state == 2) + var/obj/item/stack/cable_coil/C = P + if (C.get_amount() < 5) + user << "You need five coils of wire to add them to the frame." + return + user << "You start to add cables to the frame." + playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + if(do_after(user, 20) && state == 2) + if (C.use(5)) + user << "You add cables to the frame." + state = 3 + icon_state = "[frame_type]_3" + if(frame_type in machines) + user << desc + return + + if(istype(P, /obj/item/weapon/wirecutters)) + if(state == 3) + if(frame_type in computers) + playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + user << "You remove the cables." + src.state = 2 + src.icon_state = "[frame_type]_2" + new /obj/item/stack/cable_coil( src.loc, 5 ) + return + + if(frame_type in displays) + playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + user << "You remove the cables." + src.state = 2 + src.icon_state = "[frame_type]_2" + new /obj/item/stack/cable_coil( src.loc, 5 ) + return + + if(frame_type in alarms) + playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + user << "You remove the cables." + src.state = 2 + src.icon_state = "[frame_type]_2" + new /obj/item/stack/cable_coil( src.loc, 5 ) + return + + if(frame_type in machines) + playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + user << "You remove the cables." + src.state = 2 + src.icon_state = "[frame_type]_2" + new /obj/item/stack/cable_coil( src.loc, 5 ) + return + + if(istype(P, /obj/item/stack/material) && P.get_material_name() == "glass") + if(state == 3) + if(frame_type in computers) + var/obj/item/stack/G = P + if (G.get_amount() < 2) + user << "You need two sheets of glass to put in the glass panel." + return + playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + user << "You start to put in the glass panel." + if(do_after(user, 20) && state == 3) + if (G.use(2)) + user << "You put in the glass panel." + src.state = 4 + src.icon_state = "[frame_type]_4" + return + + if(frame_type in displays) + var/obj/item/stack/G = P + if (G.get_amount() < 2) + user << "You need two sheets of glass to put in the glass panel." + return + playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + user << "You start to put in the glass panel." + if(do_after(user, 20) && state == 3) + if (G.use(2)) + user << "You put in the glass panel." + src.state = 4 + src.icon_state = "[frame_type]_4" + return + + if(istype(P, /obj/item)) + if(state == 3) + if(frame_type in machines) + for(var/I in req_components) + if(istype(P, text2path(I)) && (req_components[I] > 0)) + playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + if(istype(P, /obj/item/stack)) + var/obj/item/stack/CP = P + if(CP.get_amount() > 1) + var/camt = min(CP.amount, req_components[I]) // amount of cable to take, idealy amount required, but limited by amount provided + var/obj/item/stack/CC = new /obj/item/stack(src) + CC.amount = camt + CC.update_icon() + CP.use(camt) + components += CC + req_components[I] -= camt + update_desc() + break + user.drop_item() + P.forceMove(src) + components += P + req_components[I]-- + update_desc() + break + user << desc + if(P && P.loc != src && !istype(P, /obj/item/stack/cable_coil) && !istype(P, /obj/item/stack/material)) + user << "You cannot add that component to the machine!" + return \ No newline at end of file diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index d34acd5d2d..58c8423a23 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -36,6 +36,7 @@ var/const/HOLOPAD_MODE = RANGE_BASED desc = "It's a floor-mounted device for projecting holographic images. It is activated remotely." icon_state = "holopad0" show_messages = 1 + circuit = /obj/item/weapon/circuitboard/holopad layer = TURF_LAYER+0.1 //Preventing mice and drones from sneaking under them. @@ -47,6 +48,30 @@ var/const/HOLOPAD_MODE = RANGE_BASED var/last_request = 0 //to prevent request spam. ~Carn var/holo_range = 5 // Change to change how far the AI can move away from the holopad before deactivating. +/obj/machinery/hologram/holopad/attackby(obj/item/I as obj, user as mob) + if(istype(I, /obj/item/weapon/screwdriver) && circuit) + user << "You start removing the glass." + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + if(do_after(user, 20)) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.circuit = M + A.anchored = 1 + A.density = 1 + A.frame_type = "holopad" + for (var/obj/C in src) + C.forceMove(loc) + user << "You remove the glass." + A.state = 4 + A.icon_state = "holopad_4" + M.deconstruct(src) + for (var/mob/living/silicon/ai/master in masters) + clear_holo(master) + qdel(src) + else + src.attack_hand(user) + return + /obj/machinery/hologram/holopad/attack_hand(var/mob/living/carbon/human/user) //Carn: Hologram requests. if(!istype(user)) return diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index d2fa5478cb..1df586b809 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -62,6 +62,19 @@ user << "You attach \the [W] to \the [src]." src.update_icon() return + + if(istype(W, /obj/item/weapon/screwdriver)) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You start to dismantle the IV drip." + if(do_after(user, 15)) + user << "You dismantle the IV drip." + var/obj/item/stack/rods/A = new /obj/item/stack/rods( src.loc ) + A.amount = 6 + if(src.beaker) + src.beaker.loc = get_turf(src) + src.beaker = null + qdel(src) + return else return ..() diff --git a/code/game/machinery/kitchen/microwave.dm b/code/game/machinery/kitchen/microwave.dm index e78f2b5227..ace68645d8 100644 --- a/code/game/machinery/kitchen/microwave.dm +++ b/code/game/machinery/kitchen/microwave.dm @@ -10,6 +10,7 @@ idle_power_usage = 5 active_power_usage = 100 flags = OPENCONTAINER | NOREACT + circuit = /obj/item/weapon/circuitboard/microwave var/operating = 0 // Is it on? var/dirty = 0 // = {0..100} Does it need cleaning? var/broken = 0 // ={0,1,2} How broken is it??? @@ -29,6 +30,13 @@ ..() reagents = new/datum/reagents(100) reagents.my_atom = src + + component_parts = list() + component_parts += new /obj/item/weapon/stock_parts/console_screen(src) + component_parts += new /obj/item/weapon/stock_parts/motor(src) + component_parts += new /obj/item/weapon/stock_parts/capacitor(src) + RefreshParts() + if (!available_recipes) available_recipes = new for (var/type in (typesof(/datum/recipe)-/datum/recipe)) @@ -82,6 +90,11 @@ else user << "It's broken!" return 1 + else if(default_deconstruction_screwdriver(user, O)) + return + else if(default_deconstruction_crowbar(user, O)) + return + else if(src.dirty==100) // The microwave is all dirty so can't be used! if(istype(O, /obj/item/weapon/reagent_containers/spray/cleaner)) // If they're trying to clean it then let them user.visible_message( \ diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index ded7ebc9b9..74f60a3a72 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -7,10 +7,12 @@ icon = 'icons/obj/power.dmi' icon_state = "light1" anchored = 1.0 + use_power = 1 + idle_power_usage = 10 + power_channel = LIGHT var/on = 1 var/area/area = null var/otherarea = null - // luminosity = 1 /obj/machinery/light_switch/New() ..() @@ -31,8 +33,12 @@ /obj/machinery/light_switch/proc/updateicon() if(stat & NOPOWER) icon_state = "light-p" + set_light(0) + layer = OBJ_LAYER else icon_state = "light[on]" + set_light(2, 1.5, on ? "#82FF4C" : "#F86060") + layer = LIGHTING_LAYER+0.1 /obj/machinery/light_switch/examine(mob/user) if(..(user, 1)) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 6c391b75b5..9ad2fd73eb 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -112,6 +112,8 @@ Class Procs: var/panel_open = 0 var/global/gl_uid = 1 var/interact_offline = 0 // Can the machine be interacted with while de-powered. + var/circuit = null + var/frame_type = "machine" /obj/machinery/New(l, d=0) ..(l) @@ -225,11 +227,6 @@ Class Procs: istype(usr, /mob/living/silicon))) usr << "You don't have the dexterity to do this!" return 1 -/* - //distance checks are made by atom/proc/DblClick - if ((get_dist(src, user) > 1 || !istype(src.loc, /turf)) && !istype(user, /mob/living/silicon)) - return 1 -*/ if (ishuman(user)) var/mob/living/carbon/human/H = user if(H.getBrainLoss() >= 55) @@ -280,29 +277,13 @@ Class Procs: return 1 return 0 -/obj/machinery/proc/default_deconstruction_crowbar(var/mob/user, var/obj/item/weapon/crowbar/C) - if(!istype(C)) - return 0 - if(!panel_open) - return 0 - . = dismantle() - -/obj/machinery/proc/default_deconstruction_screwdriver(var/mob/user, var/obj/item/weapon/screwdriver/S) - if(!istype(S)) - return 0 - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - panel_open = !panel_open - user << "You [panel_open ? "open" : "close"] the maintenance hatch of [src]." - update_icon() - return 1 - /obj/machinery/proc/default_part_replacement(var/mob/user, var/obj/item/weapon/storage/part_replacer/R) if(!istype(R)) return 0 if(!component_parts) return 0 if(panel_open) - var/obj/item/weapon/circuitboard/CB = locate(/obj/item/weapon/circuitboard) in component_parts + var/obj/item/weapon/circuitboard/CB = circuit var/P for(var/obj/item/weapon/stock_parts/A in component_parts) for(var/D in CB.req_components) @@ -328,13 +309,45 @@ Class Procs: user << " [C.name]" return 1 +/obj/machinery/proc/default_deconstruction_crowbar(var/mob/user, var/obj/item/weapon/crowbar/C) + if(!istype(C)) + return 0 + if(!panel_open) + return 0 + . = dismantle() + +/obj/machinery/proc/default_deconstruction_screwdriver(var/mob/user, var/obj/item/weapon/screwdriver/S) + if(!istype(S)) + return 0 + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + panel_open = !panel_open + user << "You [panel_open ? "open" : "close"] the maintenance hatch of [src]." + update_icon() + return 1 + /obj/machinery/proc/dismantle() playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) - var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(loc) - M.set_dir(src.dir) - M.state = 2 - M.icon_state = "box_1" - for(var/obj/I in component_parts) - I.loc = loc + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.circuit = M + A.anchored = 1 + A.density = 1 + A.frame_type = M.board_type + if(A.frame_type in A.no_circuit) + A.need_circuit = 0 + for (var/obj/D in src) + D.forceMove(loc) + if(A.components) + A.components.Cut() + else + A.components = list() + component_parts = list() + A.icon_state = "[A.frame_type]_3" + A.state = 3 + A.pixel_x = pixel_x + A.pixel_y = pixel_y + A.check_components() + A.update_desc() + M.deconstruct(src) qdel(src) return 1 diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 5a2663a7d1..7bfe32d719 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -167,7 +167,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co light_range = 0 anchored = 1 var/obj/machinery/exonet_node/node = null - + circuit = /obj/item/weapon/circuitboard/newscaster /obj/machinery/newscaster/security_unit //Security unit name = "Security Newscaster" @@ -751,32 +751,34 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co -/obj/machinery/newscaster/attackby(obj/item/I as obj, mob/user as mob) - if (src.isbroken) - playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 100, 1) - for (var/mob/O in hearers(5, src.loc)) - O.show_message("[user.name] further abuses the shattered [src.name].") - else - if(istype(I, /obj/item/weapon) ) - var/obj/item/weapon/W = I - if(W.force <15) - for (var/mob/O in hearers(5, src.loc)) - O.show_message("[user.name] hits the [src.name] with the [W.name] with no visible effect." ) - playsound(src.loc, 'sound/effects/Glasshit.ogg', 100, 1) +/obj/machinery/newscaster/attackby(I as obj, user as mob) + if(istype(I, /obj/item/weapon/screwdriver) && circuit) + user << "You start disconnecting the monitor." + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + if(do_after(user, 20)) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.frame_type = "newscaster" + A.pixel_x = pixel_x + A.pixel_y = pixel_y + A.circuit = M + A.anchored = 1 + for (var/obj/C in src) + C.forceMove(loc) + if (src.stat & isbroken == 1) + user << "The broken glass falls out." + new /obj/item/weapon/material/shard( src.loc ) + A.state = 3 + A.icon_state = "newscaster_3" else - src.hitstaken++ - if(src.hitstaken==3) - for (var/mob/O in hearers(5, src.loc)) - O.show_message("[user.name] smashes the [src.name]!" ) - src.isbroken=1 - playsound(src.loc, 'sound/effects/Glassbr3.ogg', 100, 1) - else - for (var/mob/O in hearers(5, src.loc)) - O.show_message("[user.name] forcefully slams the [src.name] with the [I.name]!" ) - playsound(src.loc, 'sound/effects/Glasshit.ogg', 100, 1) - else - user << "This does nothing." - src.update_icon() + user << "You disconnect the monitor." + A.state = 4 + A.icon_state = "newscaster_4" + M.deconstruct(src) + qdel(src) + else + src.attack_hand(user) + return /obj/machinery/newscaster/attack_ai(mob/user as mob) return src.attack_hand(user) //or maybe it'll have some special functions? No idea. diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 992a93c40a..72c125e8b2 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -14,6 +14,15 @@ obj/machinery/recharger var/icon_state_charging = "recharger1" var/icon_state_idle = "recharger0" //also when unpowered var/portable = 1 + circuit = /obj/item/weapon/circuitboard/recharger + frame_type = "recharger" + +obj/machinery/recharger/New() + component_parts = list() + component_parts += new /obj/item/weapon/stock_parts/capacitor(src) + component_parts += new /obj/item/stack/cable_coil(src, 5) + RefreshParts() + return obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob) if(istype(user,/mob/living/silicon)) @@ -52,6 +61,10 @@ obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob) anchored = !anchored user << "You [anchored ? "attached" : "detached"] the recharger." playsound(loc, 'sound/items/Ratchet.ogg', 75, 1) + else if(default_deconstruction_screwdriver(user, G)) + return + else if(default_deconstruction_crowbar(user, G)) + return obj/machinery/recharger/attack_hand(mob/user as mob) if(istype(user,/mob/living/silicon)) @@ -156,3 +169,5 @@ obj/machinery/recharger/wallcharger icon_state_charging = "wrecharger1" icon_state_idle = "wrecharger0" portable = 0 + circuit = /obj/item/weapon/circuitboard/recharger/wrecharger + frame_type = "wrecharger" \ No newline at end of file diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index efcc8314c1..c3759100fb 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -5,6 +5,7 @@ icon_state = "borgcharger0" density = 1 anchored = 1 + circuit = /obj/item/weapon/circuitboard/recharge_station use_power = 1 idle_power_usage = 50 var/mob/occupant = null @@ -25,7 +26,6 @@ ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/recharge_station(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) component_parts += new /obj/item/weapon/stock_parts/capacitor(src) diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index dd862a7754..8b0d78cb96 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -17,6 +17,7 @@ density = 0 use_power = 1 idle_power_usage = 10 + circuit = /obj/item/weapon/circuitboard/status_display var/mode = 1 // 0 = Blank // 1 = Shuttle timer // 2 = Arbitrary message(s) @@ -51,6 +52,29 @@ radio_controller.remove_object(src,frequency) return ..() +/obj/machinery/status_display/attackby(I as obj, user as mob) + if(istype(I, /obj/item/weapon/screwdriver) && circuit) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + if(do_after(user, 20)) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.frame_type = "display" + A.pixel_x = pixel_x + A.pixel_y = pixel_y + A.circuit = M + A.anchored = 1 + for (var/obj/C in src) + C.forceMove(loc) + user << "You disconnect the monitor." + A.state = 4 + A.icon_state = "display_4" + M.deconstruct(src) + qdel(src) + else + src.attack_hand(user) + return + + // register for radio system /obj/machinery/status_display/initialize() ..() diff --git a/code/game/machinery/status_display_ai.dm b/code/game/machinery/status_display_ai.dm index 0b7371c1b0..51fcfb4f51 100644 --- a/code/game/machinery/status_display_ai.dm +++ b/code/game/machinery/status_display_ai.dm @@ -59,6 +59,7 @@ var/list/ai_status_emotions = list( name = "AI display" anchored = 1 density = 0 + circuit = /obj/item/weapon/circuitboard/ai_status_display var/mode = 0 // 0 = Blank // 1 = AI emoticon @@ -68,6 +69,28 @@ var/list/ai_status_emotions = list( var/emotion = "Neutral" +/obj/machinery/ai_status_display/attackby(I as obj, user as mob) + if(istype(I, /obj/item/weapon/screwdriver) && circuit) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + if(do_after(user, 20)) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.frame_type = "display" + A.pixel_x = pixel_x + A.pixel_y = pixel_y + A.circuit = M + A.anchored = 1 + for (var/obj/C in src) + C.forceMove(loc) + user << "You disconnect the monitor." + A.state = 4 + A.icon_state = "display_4" + M.deconstruct(src) + qdel(src) + else + src.attack_hand(user) + return + /obj/machinery/ai_status_display/attack_ai/(mob/user as mob) var/list/ai_emotions = get_ai_emotions(user.ckey) var/emote = input("Please, select a status!", "AI Status", null, null) in ai_emotions diff --git a/code/game/machinery/telecomms/logbrowser.dm b/code/game/machinery/telecomms/logbrowser.dm index 072c99322f..b9cc3428f9 100644 --- a/code/game/machinery/telecomms/logbrowser.dm +++ b/code/game/machinery/telecomms/logbrowser.dm @@ -10,6 +10,7 @@ var/screen = 0 // the screen number: var/list/servers = list() // the servers located by the computer var/obj/machinery/telecomms/server/SelectedServer + circuit = /obj/item/weapon/circuitboard/comm_server var/network = "NULL" // the network to probe var/temp = "" // temporary feedback messages @@ -188,36 +189,6 @@ updateUsrDialog() return - attackby(var/obj/item/weapon/D as obj, var/mob/user as mob) - if(istype(D, /obj/item/weapon/screwdriver)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - if(do_after(user, 20)) - if (src.stat & BROKEN) - user << "The broken glass falls out." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - new /obj/item/weapon/material/shard( src.loc ) - var/obj/item/weapon/circuitboard/comm_server/M = new /obj/item/weapon/circuitboard/comm_server( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.state = 3 - A.icon_state = "3" - A.anchored = 1 - qdel(src) - else - user << "You disconnect the monitor." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - var/obj/item/weapon/circuitboard/comm_server/M = new /obj/item/weapon/circuitboard/comm_server( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.state = 4 - A.icon_state = "4" - A.anchored = 1 - qdel(src) - src.updateUsrDialog() - return - /obj/machinery/computer/telecomms/server/emag_act(var/remaining_charges, var/mob/user) if(!emagged) playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1) diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index 2859083c9d..2b3561395f 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -98,8 +98,8 @@ // Drop a circuit board too C.loc = user.loc - // Create a machine frame and delete the current machine - var/obj/machinery/constructable_frame/machine_frame/F = new + // Create a frame and delete the current machine + var/obj/structure/frame/F = new F.loc = src.loc qdel(src) diff --git a/code/game/machinery/telecomms/telemonitor.dm b/code/game/machinery/telecomms/telemonitor.dm index 24549bd8b7..6567012a80 100644 --- a/code/game/machinery/telecomms/telemonitor.dm +++ b/code/game/machinery/telecomms/telemonitor.dm @@ -14,6 +14,7 @@ var/screen = 0 // the screen number: var/list/machinelist = list() // the machines located by the computer var/obj/machinery/telecomms/SelectedMachine + circuit = /obj/item/weapon/circuitboard/comm_monitor var/network = "NULL" // the network to probe @@ -123,36 +124,6 @@ updateUsrDialog() return - attackby(var/obj/item/weapon/D as obj, var/mob/user as mob) - if(istype(D, /obj/item/weapon/screwdriver)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - if(do_after(user, 20)) - if (src.stat & BROKEN) - user << "The broken glass falls out." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - new /obj/item/weapon/material/shard( src.loc ) - var/obj/item/weapon/circuitboard/comm_monitor/M = new /obj/item/weapon/circuitboard/comm_monitor( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.state = 3 - A.icon_state = "3" - A.anchored = 1 - qdel(src) - else - user << "You disconnect the monitor." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - var/obj/item/weapon/circuitboard/comm_monitor/M = new /obj/item/weapon/circuitboard/comm_monitor( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.state = 4 - A.icon_state = "4" - A.anchored = 1 - qdel(src) - src.updateUsrDialog() - return - /obj/machinery/computer/telecomms/monitor/emag_act(var/remaining_charges, var/mob/user) if(!emagged) playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1) diff --git a/code/game/machinery/telecomms/traffic_control.dm b/code/game/machinery/telecomms/traffic_control.dm index e941a268ef..0d372b2aaa 100644 --- a/code/game/machinery/telecomms/traffic_control.dm +++ b/code/game/machinery/telecomms/traffic_control.dm @@ -14,6 +14,7 @@ var/mob/lasteditor var/list/viewingcode = list() var/obj/machinery/telecomms/server/SelectedServer + circuit = /obj/item/weapon/circuitboard/comm_traffic var/network = "NULL" // the network to probe var/temp = "" // temporary feedback messages @@ -206,40 +207,10 @@ updateUsrDialog() return - attackby(var/obj/item/weapon/D as obj, var/mob/user as mob) - if(istype(D, /obj/item/weapon/screwdriver)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - if(do_after(user, 20)) - if (src.stat & BROKEN) - user << "The broken glass falls out." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - new /obj/item/weapon/material/shard( src.loc ) - var/obj/item/weapon/circuitboard/comm_traffic/M = new /obj/item/weapon/circuitboard/comm_traffic( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.state = 3 - A.icon_state = "3" - A.anchored = 1 - qdel(src) - else - user << "You disconnect the monitor." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - var/obj/item/weapon/circuitboard/comm_traffic/M = new /obj/item/weapon/circuitboard/comm_traffic( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.state = 4 - A.icon_state = "4" - A.anchored = 1 - qdel(src) - src.updateUsrDialog() - return - /obj/machinery/computer/telecomms/traffic/emag_act(var/remaining_charges, var/mob/user) if(!emagged) playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1) emagged = 1 user << "You you disable the security protocols" src.updateUsrDialog() - return 1 + return 1 \ No newline at end of file diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index b1b8d497b3..8099103d8a 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -36,6 +36,8 @@ layer = 2.9 anchored = 1 density = 1 + circuit = /obj/item/weapon/circuitboard/vending + frame_type = "vending" var/icon_vend //Icon_state when vending var/icon_deny //Icon_state when denying access @@ -94,6 +96,14 @@ /obj/machinery/vending/New() ..() wires = new(src) + component_parts = list() + component_parts += new /obj/item/weapon/stock_parts/spring(src) + component_parts += new /obj/item/weapon/stock_parts/spring(src) + component_parts += new /obj/item/weapon/stock_parts/motor(src) + component_parts += new /obj/item/weapon/stock_parts/motor(src) + component_parts += new /obj/item/weapon/stock_parts/console_screen(src) + component_parts += new /obj/item/stack/material/glass/reinforced(src, 2) + RefreshParts() spawn(4) if(src.product_slogans) src.slogan_list += splittext(src.product_slogans, ";") @@ -232,6 +242,8 @@ user << "You [anchored? "un" : ""]secured \the [src]!" anchored = !anchored return + else if(default_deconstruction_crowbar(user, W)) + return else @@ -922,7 +934,15 @@ icon_state = "engivend" icon_deny = "engivend-deny" req_access = list(access_engine_equip) - products = list(/obj/item/clothing/glasses/meson = 2,/obj/item/device/multitool = 4,/obj/item/weapon/airlock_electronics = 10,/obj/item/weapon/module/power_control = 10,/obj/item/weapon/airalarm_electronics = 10,/obj/item/weapon/cell/high = 10) + products = list(/obj/item/clothing/glasses/meson = 2,/obj/item/device/multitool = 4,/obj/item/weapon/cell/high = 10, + /obj/item/weapon/airlock_electronics = 10,/obj/item/weapon/module/power_control = 10, + /obj/item/weapon/circuitboard/airalarm = 10,/obj/item/weapon/circuitboard/firealarm = 10,/obj/item/weapon/circuitboard/status_display = 2, + /obj/item/weapon/circuitboard/ai_status_display = 2,/obj/item/weapon/circuitboard/newscaster = 2,/obj/item/weapon/circuitboard/holopad = 2, + /obj/item/weapon/circuitboard/intercom = 4,/obj/item/weapon/circuitboard/security/telescreen/entertainment = 4, + /obj/item/weapon/circuitboard/atm = 0,/obj/item/weapon/circuitboard/guestpass = 0,/obj/item/weapon/circuitboard/keycard_auth = 0, + /obj/item/weapon/circuitboard/photocopier = 0,/obj/item/weapon/circuitboard/fax = 0,/obj/item/weapon/circuitboard/conveyor = 0, + /obj/item/weapon/circuitboard/microwave = 0,/obj/item/weapon/circuitboard/vending = 0,/obj/item/weapon/circuitboard/washing = 0, + /obj/item/weapon/stock_parts/motor = 0,/obj/item/weapon/stock_parts/spring = 0,/obj/item/weapon/stock_parts/gear = 0) contraband = list(/obj/item/weapon/cell/potato = 3) premium = list(/obj/item/weapon/storage/belt/utility = 3) diff --git a/code/game/machinery/wall_frames.dm b/code/game/machinery/wall_frames.dm index c9182586c8..fd0fd3ce7c 100644 --- a/code/game/machinery/wall_frames.dm +++ b/code/game/machinery/wall_frames.dm @@ -1,13 +1,14 @@ /obj/item/frame - name = "frame" - desc = "Used for building machines." - icon = 'icons/obj/monitors.dmi' - icon_state = "fire_bitem" + name = "frame parts" + desc = "Used for building frames." + icon = 'icons/obj/stock_parts.dmi' + icon_state = "frame_bitem" flags = CONDUCT - var/build_machine_type - var/refund_amt = 2 + var/build_machine_type = /obj/structure/frame + var/refund_amt = 5 var/refund_type = /obj/item/stack/material/steel var/reverse = 0 //if resulting object faces opposite its dir (like light fixtures) + var/frame_type = null /obj/item/frame/attackby(obj/item/weapon/W as obj, mob/user as mob) if (istype(W, /obj/item/weapon/wrench)) @@ -16,7 +17,82 @@ return ..() -/obj/item/frame/proc/try_build(turf/on_wall) +/obj/item/frame/attack_self(mob/user as mob) + ..() + if(!build_machine_type) + return + + var/ndir + if(!frame_type) + var/response = input(usr, "What kind of frame would you like to make?", "Frame type request", null) in list("Computer", "Machine", "Holopad", "Conveyor", + "Photocopier", "Fax", "Microwave", "Vending Machine", + "Recharger", "Washing Machine", "Grinder", + "Cancel") + + if(response == "Cancel") + return + + frame_type = lowertext(response) + + switch(response) + if("Holopad") + new /obj/item/stack/material/steel( usr.loc, 1 ) //holopads are smaller, they only need 4 sheets + if("Conveyor") + ndir = get_dir(src,usr) + if (!(ndir in cardinal)) + return + if("Fax") + new /obj/item/stack/material/steel( usr.loc, 2 ) //faxes are smaller, they only need 3 sheets + if("Microwave") + new /obj/item/stack/material/steel( usr.loc, 1 ) //microwaves are smaller, they only need 4 sheets + if("Vending Machine") + frame_type = "vending" + if("Recharger") + new /obj/item/stack/material/steel( usr.loc, 2 ) //rechargers are smaller, they only need 3 sheets + if("Washing Machine") + frame_type = "washing" + if("Grinder") + new /obj/item/stack/material/steel( usr.loc, 2 ) //grinders are smaller, they only need 3 sheets + + var/obj/machinery/M = new build_machine_type(get_turf(src.loc), ndir, 1, frame_type) + M.fingerprints = src.fingerprints + M.fingerprintshidden = src.fingerprintshidden + M.fingerprintslast = src.fingerprintslast + qdel(src) + +/obj/item/frame/proc/try_build(turf/on_wall, mob/user as mob) + if(!frame_type) + var/response = input(usr, "What kind of frame would you like to make?", "Frame type request", null) in list("Fire Alarm", "Air Alarm", "Display", "Newscaster", + "ATM", "Guest Pass Console", "Intercom", "Keycard Authenticator", + "Wall Charger", + "Cancel") + + if(response == "Cancel") + return + + frame_type = lowertext(response) + + switch(response) + if("Fire Alarm") + frame_type = "firealarm" + new /obj/item/stack/material/steel( usr.loc, 3 ) //fire alarms are smaller, they only need 2 sheets + if("Air Alarm") + frame_type = "airalarm" + new /obj/item/stack/material/steel( usr.loc, 3 ) //air alarms are smaller, they only need 2 sheets + if("Intercom") + new /obj/item/stack/material/steel( usr.loc, 3 ) //intercoms are smaller, they only need 2 sheets + if("Newscaster") + new /obj/item/stack/material/steel( usr.loc, 2 ) //newscasters are smaller, they only need 3 sheets + if("Guest Pass Console") + frame_type = "guestpass" + new /obj/item/stack/material/steel( usr.loc, 3 ) //guestpass consoles are smaller, they only need 2 sheets + if("Keycard Authenticator") + frame_type = "keycard" + new /obj/item/stack/material/steel( usr.loc, 4 ) //keycard authenticators are smaller, they only need 1 sheets + if("Wall Charger") + frame_type = "wrecharger" + new /obj/item/stack/material/steel( usr.loc, 2 ) //wall rechargers are smaller, they only need 3 sheets + if(!build_machine_type) return @@ -35,7 +111,7 @@ var/turf/loc = get_turf(usr) var/area/A = loc.loc if (!istype(loc, /turf/simulated/floor)) - usr << "\The [src] Alarm cannot be placed on this spot." + usr << "\The frame cannot be placed on this spot." return if (A.requires_power == 0 || A.name == "Space") usr << "\The [src] Alarm cannot be placed in this area." @@ -44,23 +120,12 @@ if(gotwallitem(loc, ndir)) usr << "There's already an item on this wall!" return - - var/obj/machinery/M = new build_machine_type(loc, ndir, 1) + var/obj/machinery/M = new build_machine_type(loc, ndir, 1, frame_type) M.fingerprints = src.fingerprints M.fingerprintshidden = src.fingerprintshidden M.fingerprintslast = src.fingerprintslast qdel(src) -/obj/item/frame/fire_alarm - name = "fire alarm frame" - desc = "Used for building fire alarms." - build_machine_type = /obj/machinery/firealarm - -/obj/item/frame/air_alarm - name = "air alarm frame" - desc = "Used for building air alarms." - build_machine_type = /obj/machinery/alarm - /obj/item/frame/light name = "light fixture frame" desc = "Used for building lights." @@ -68,9 +133,48 @@ icon_state = "tube-construct-item" build_machine_type = /obj/machinery/light_construct reverse = 1 + frame_type = 1 /obj/item/frame/light/small name = "small light fixture frame" icon_state = "bulb-construct-item" refund_amt = 1 build_machine_type = /obj/machinery/light_construct/small + frame_type = 1 + +/obj/item/frame/extinguisher_cabinet + name = "extinguisher cabinet frame" + desc = "Used for building fire extinguisher cabinets." + icon = 'icons/obj/closet.dmi' + icon_state = "extinguisher_empty" + refund_amt = 4 + build_machine_type = /obj/structure/extinguisher_cabinet + frame_type = 1 + +/obj/item/frame/noticeboard + name = "noticeboard frame" + desc = "Used for building noticeboards." + icon = 'icons/obj/stationobjs.dmi' + icon_state = "nboard00" + refund_amt = 4 + refund_type = /obj/item/stack/material/wood + build_machine_type = /obj/structure/noticeboard + frame_type = 1 + +/obj/item/frame/mirror + name = "mirror frame" + desc = "Used for building mirrors." + icon = 'icons/obj/watercloset.dmi' + icon_state = "mirror_frame" + refund_amt = 1 + build_machine_type = /obj/structure/mirror + frame_type = 1 + +/obj/item/frame/fireaxe_cabinet + name = "fire axe cabinet frame" + desc = "Used for building fire axe cabinets." + icon = 'icons/obj/closet.dmi' + icon_state = "fireaxe0101" + refund_amt = 4 + build_machine_type = /obj/structure/closet/fireaxecabinet + frame_type = 1 \ No newline at end of file diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index a22482a416..830a848bfe 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -4,6 +4,7 @@ icon_state = "wm_10" density = 1 anchored = 1.0 + circuit = /obj/item/weapon/circuitboard/washing var/state = 1 //1 = empty, open door //2 = empty, closed door @@ -13,14 +14,19 @@ //6 = blood, open door //7 = blood, closed door //8 = blood, running - var/panel = 0 - //0 = closed - //1 = open var/hacked = 1 //Bleh, screw hacking, let's have it hacked by default. //0 = not hacked //1 = hacked var/gibs_ready = 0 var/obj/crayon + var/list/washing = list() + +/obj/machinery/washing_machine/New() + component_parts = list() + component_parts += new /obj/item/weapon/stock_parts/motor(src) + component_parts += new /obj/item/weapon/stock_parts/gear(src) + component_parts += new /obj/item/weapon/stock_parts/gear(src) + RefreshParts() /obj/machinery/washing_machine/verb/start() set name = "Start Washing" @@ -34,25 +40,25 @@ usr << "The washing machine cannot run in this state." return - if( locate(/mob,contents) ) + if( locate(/mob,washing) ) state = 8 else state = 5 update_icon() sleep(200) - for(var/atom/A in contents) + for(var/atom/A in washing) A.clean_blood() - for(var/obj/item/I in contents) + for(var/obj/item/I in washing) I.decontaminate() //Tanning! - for(var/obj/item/stack/material/hairlesshide/HH in contents) + for(var/obj/item/stack/material/hairlesshide/HH in washing) var/obj/item/stack/material/wetleather/WL = new(src) WL.amount = HH.amount qdel(HH) - if( locate(/mob,contents) ) + if( locate(/mob,washing) ) state = 7 gibs_ready = 1 else @@ -70,9 +76,14 @@ /obj/machinery/washing_machine/update_icon() - icon_state = "wm_[state][panel]" + icon_state = "wm_[state][panel_open]" /obj/machinery/washing_machine/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(state == 2 && washing.len < 1) + if(default_deconstruction_screwdriver(user, W)) + return + if(default_deconstruction_crowbar(user, W)) + return /*if(istype(W,/obj/item/weapon/screwdriver)) panel = !panel user << "You [panel ? "open" : "close"] the [src]'s maintenance panel"*/ @@ -142,10 +153,11 @@ user << "This item does not fit." return - if(contents.len < 5) + if(washing.len < 5) if ( state in list(1, 3) ) user.drop_item() W.loc = src + washing += W state = 3 else user << "You can't put the item in right now." @@ -161,15 +173,17 @@ state = 2 if(2) state = 1 - for(var/atom/movable/O in contents) + for(var/atom/movable/O in washing) O.loc = src.loc + washing.Cut() if(3) state = 4 if(4) state = 3 - for(var/atom/movable/O in contents) + for(var/atom/movable/O in washing) O.loc = src.loc crayon = null + washing.Cut() state = 1 if(5) user << "The [src] is busy." @@ -178,13 +192,13 @@ if(7) if(gibs_ready) gibs_ready = 0 - if(locate(/mob,contents)) - var/mob/M = locate(/mob,contents) + if(locate(/mob,washing)) + var/mob/M = locate(/mob,washing) M.gib() - for(var/atom/movable/O in contents) + for(var/atom/movable/O in washing) O.loc = src.loc crayon = null state = 1 + washing.Cut() - - update_icon() + update_icon() \ No newline at end of file diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index cf50e69525..23c30d3a3d 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -5,6 +5,7 @@ icon_state = "recharge_floor" density = 0 layer = TURF_LAYER + 0.1 + circuit = /obj/item/weapon/circuitboard/mech_recharger var/obj/mecha/charging = null var/charge = 45 @@ -14,7 +15,6 @@ ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/mech_recharger(src) component_parts += new /obj/item/weapon/stock_parts/capacitor(src) component_parts += new /obj/item/weapon/stock_parts/capacitor(src) component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 0685e6efd2..425b959d31 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -9,6 +9,7 @@ idle_power_usage = 20 active_power_usage = 5000 req_access = list(access_robotics) + circuit = /obj/item/weapon/circuitboard/mechfab var/speed = 1 var/mat_efficiency = 1 @@ -29,7 +30,6 @@ ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/mechfab(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) @@ -89,7 +89,7 @@ return ui_interact(user) -/obj/machinery/mecha_part_fabricator/ui_interact(var/mob/user, var/ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) +/obj/machinery/mecha_part_fabricator/ui_interact(var/mob/user, var/ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) var/data[0] var/datum/design/current = queue.len ? queue[1] : null diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 6961e957ff..f66b668664 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -76,13 +76,10 @@ /obj/item/equipped() ..() - var/mob/M = loc + var/mob/living/M = loc if(!istype(M)) return - if(M.l_hand) - M.l_hand.update_held_icon() - if(M.r_hand) - M.r_hand.update_held_icon() + M.update_held_icons() /obj/item/Destroy() if(ismob(loc)) @@ -98,8 +95,8 @@ //Checks if the item is being held by a mob, and if so, updates the held icons /obj/item/proc/update_held_icon() - if(ismob(src.loc)) - var/mob/M = src.loc + if(isliving(src.loc)) + var/mob/living/M = src.loc if(M.l_hand == src) M.update_inv_l_hand() else if(M.r_hand == src) @@ -160,7 +157,7 @@ size = "huge" return ..(user, distance, "", "It is a [size] item.") -/obj/item/attack_hand(mob/user as mob) +/obj/item/attack_hand(mob/living/user as mob) if (!user) return if (hasorgans(user)) var/mob/living/carbon/human/H = user @@ -399,17 +396,15 @@ var/list/global/slot_flags_enumeration = list( if((!istype(usr, /mob/living/carbon)) || (istype(usr, /mob/living/carbon/brain)))//Is humanoid, and is not a brain usr << "You can't pick things up!" return + var/mob/living/carbon/C = usr if( usr.stat || usr.restrained() )//Is not asleep/dead and is not restrained usr << "You can't pick things up!" return if(src.anchored) //Object isn't anchored usr << "You can't pick that up!" return - if(!usr.hand && usr.r_hand) //Right hand is not full - usr << "Your right hand is full." - return - if(usr.hand && usr.l_hand) //Left hand is not full - usr << "Your left hand is full." + if(C.get_active_hand()) //Hand is not full + usr << "Your hand is full." return if(!istype(src.loc, /turf)) //Object is on a turf usr << "You can't pick that up!" diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index e5e94fc93d..5b769ed803 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -12,7 +12,7 @@ var/code = 2 -/obj/item/device/radio/electropack/attack_hand(mob/user as mob) +/obj/item/device/radio/electropack/attack_hand(mob/living/user as mob) if(src == user.back) user << "You need help taking this off!" return diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index ed8cf4ce0b..7aaf609eca 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -6,8 +6,10 @@ w_class = 4.0 canhear_range = 2 flags = CONDUCT | NOBLOODY + var/circuit = /obj/item/weapon/circuitboard/intercom var/number = 0 var/last_tick //used to delay the powercheck + var/wiresexposed = 0 /obj/item/device/radio/intercom/custom name = "station intercom (Custom)" @@ -81,6 +83,41 @@ spawn (0) attack_self(user) +/obj/item/device/radio/intercom/attackby(obj/item/W as obj, mob/user as mob) + src.add_fingerprint(user) + if(istype(W, /obj/item/weapon/screwdriver)) // Opening the intercom up. + wiresexposed = !wiresexposed + user << "The wires have been [wiresexposed ? "exposed" : "unexposed"]" + if(wiresexposed) + if(!on) + icon_state = "intercom-p_open" + else + icon_state = "intercom_open" + else + icon_state = "intercom" + return + if (wiresexposed && istype(W, /obj/item/weapon/wirecutters)) + user.visible_message("[user] has cut the wires inside \the [src]!", "You have cut the wires inside \the [src].") + playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + new/obj/item/stack/cable_coil(get_turf(src), 5) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.frame_type = "intercom" + A.pixel_x = pixel_x + A.pixel_y = pixel_y + A.circuit = M + A.set_dir(dir) + A.anchored = 1 + for (var/obj/C in src) + C.forceMove(loc) + A.state = 2 + A.icon_state = "intercom_2" + M.deconstruct(src) + qdel(src) + else + src.attack_hand(user) + return + /obj/item/device/radio/intercom/receive_range(freq, level) if (!on) return -1 @@ -110,9 +147,15 @@ on = A.powered(EQUIP) // set "on" to the power status if(!on) - icon_state = "intercom-p" + if(wiresexposed) + icon_state = "intercom-p_open" + else + icon_state = "intercom-p" else - icon_state = initial(icon_state) + if(wiresexposed) + icon_state = "intercom_open" + else + icon_state = initial(icon_state) /obj/item/device/radio/intercom/locked var/locked_frequency diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index b8b79a5ca1..451b2c41af 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -209,7 +209,7 @@ amount = 5 max_amount = 5 -/obj/item/stack/medical/splint/attack(mob/living/carbon/M as mob, mob/user as mob) +/obj/item/stack/medical/splint/attack(mob/living/carbon/M as mob, mob/living/user as mob) if(..()) return 1 diff --git a/code/game/objects/items/weapons/autopsy.dm b/code/game/objects/items/weapons/autopsy.dm index c17d8ba650..d196bc4ea7 100644 --- a/code/game/objects/items/weapons/autopsy.dm +++ b/code/game/objects/items/weapons/autopsy.dm @@ -160,20 +160,7 @@ P.icon_state = "paper_words" if(istype(usr,/mob/living/carbon)) - // place the item in the usr's hand if possible - if(!usr.r_hand) - P.loc = usr - usr.r_hand = P - P.layer = 20 - else if(!usr.l_hand) - P.loc = usr - usr.l_hand = P - P.layer = 20 - - if (ismob(src.loc)) - var/mob/M = src.loc - M.update_inv_l_hand() - M.update_inv_r_hand() + usr.put_in_hands(src) /obj/item/weapon/autopsy_scanner/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob) if(!istype(M)) diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index b156d569ad..4772063b4c 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -445,39 +445,36 @@ CIGARETTE PACKETS ARE IN FANCY.DM /obj/item/weapon/flame/lighter/attack_self(mob/living/user) if(!base_state) base_state = icon_state - if(user.r_hand == src || user.l_hand == src) - if(!lit) - lit = 1 - icon_state = "[base_state]on" - item_state = "[base_state]on" - if(istype(src, /obj/item/weapon/flame/lighter/zippo) ) - user.visible_message("Without even breaking stride, [user] flips open and lights [src] in one smooth movement.") - else - if(prob(95)) - user.visible_message("After a few attempts, [user] manages to light the [src].") - else - user << "You burn yourself while lighting the lighter." - if (user.l_hand == src) - user.apply_damage(2,BURN,"l_hand") - else - user.apply_damage(2,BURN,"r_hand") - user.visible_message("After a few attempts, [user] manages to light the [src], they however burn their finger in the process.") - - set_light(2) - processing_objects.Add(src) + if(!lit) + lit = 1 + icon_state = "[base_state]on" + item_state = "[base_state]on" + if(istype(src, /obj/item/weapon/flame/lighter/zippo) ) + user.visible_message("Without even breaking stride, [user] flips open and lights [src] in one smooth movement.") else - lit = 0 - icon_state = "[base_state]" - item_state = "[base_state]" - if(istype(src, /obj/item/weapon/flame/lighter/zippo) ) - user.visible_message("You hear a quiet click, as [user] shuts off [src] without even looking at what they're doing.") + if(prob(95)) + user.visible_message("After a few attempts, [user] manages to light the [src].") else - user.visible_message("[user] quietly shuts off the [src].") + user << "You burn yourself while lighting the lighter." + if (user.get_left_hand() == src) + user.apply_damage(2,BURN,"l_hand") + else + user.apply_damage(2,BURN,"r_hand") + user.visible_message("After a few attempts, [user] manages to light the [src], they however burn their finger in the process.") - set_light(0) - processing_objects.Remove(src) + set_light(2) + processing_objects.Add(src) else - return ..() + lit = 0 + icon_state = "[base_state]" + item_state = "[base_state]" + if(istype(src, /obj/item/weapon/flame/lighter/zippo) ) + user.visible_message("You hear a quiet click, as [user] shuts off [src] without even looking at what they're doing.") + else + user.visible_message("[user] quietly shuts off the [src].") + + set_light(0) + processing_objects.Remove(src) return diff --git a/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm b/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm index 60f8bce268..0016fc730a 100644 --- a/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm +++ b/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm @@ -29,6 +29,16 @@ network = list("MINE") req_access = list() +/obj/item/weapon/circuitboard/security/telescreen/entertainment + name = T_BOARD("entertainment camera monitor") + build_path = /obj/machinery/computer/security/telescreen/entertainment + board_type = "display" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +/obj/item/weapon/circuitboard/security/telescreen/entertainment/New() + ..() + network = NETWORK_THUNDER + /obj/item/weapon/circuitboard/security/construct(var/obj/machinery/computer/security/C) if (..(C)) C.network = network.Copy() diff --git a/code/game/objects/items/weapons/circuitboards/frame.dm b/code/game/objects/items/weapons/circuitboards/frame.dm new file mode 100644 index 0000000000..30be1d52f7 --- /dev/null +++ b/code/game/objects/items/weapons/circuitboards/frame.dm @@ -0,0 +1,253 @@ +#ifndef T_BOARD +#error T_BOARD macro is not defined but we need it! +#endif + +//Circuitboards for frames (mostly wall based frames). Most of these don't fit into other categories. + +//Display + +/obj/item/weapon/circuitboard/guestpass + name = T_BOARD("guestpass console") + build_path = /obj/machinery/computer/guestpass + board_type = "guestpass" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +/obj/item/weapon/circuitboard/status_display + name = T_BOARD("status display") + build_path = /obj/machinery/status_display + board_type = "display" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +/obj/item/weapon/circuitboard/ai_status_display + name = T_BOARD("ai status display") + build_path = /obj/machinery/ai_status_display + board_type = "display" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +/obj/item/weapon/circuitboard/newscaster + name = T_BOARD("newscaster") + build_path = /obj/machinery/newscaster + board_type = "newscaster" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +/obj/item/weapon/circuitboard/atm + name = T_BOARD("atm") + build_path = /obj/machinery/atm + board_type = "atm" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +//Alarm + +/obj/item/weapon/circuitboard/firealarm + name = T_BOARD("fire alarm") + build_path = /obj/machinery/firealarm + board_type = "firealarm" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +/obj/item/weapon/circuitboard/airalarm + name = T_BOARD("air alarm") + build_path = /obj/machinery/alarm + board_type = "airalarm" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +/obj/item/weapon/circuitboard/intercom + name = T_BOARD("intercom") + build_path = /obj/item/device/radio/intercom + board_type = "intercom" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +/obj/item/weapon/circuitboard/keycard_auth + name = T_BOARD("keycard authenticator") + build_path = /obj/machinery/keycard_auth + board_type = "keycard" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +//Computer + +/obj/item/weapon/circuitboard/holopad + name = T_BOARD("holopad") + build_path = /obj/machinery/hologram/holopad + board_type = "holopad" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +//Machine + +/obj/item/weapon/circuitboard/photocopier + name = T_BOARD("photocopier") + build_path = /obj/machinery/photocopier + board_type = "photocopier" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + req_components = list( + "/obj/item/weapon/stock_parts/scanning_module" = 1, + "/obj/item/weapon/stock_parts/motor" = 1, + "/obj/item/weapon/stock_parts/micro_laser" = 1, + "/obj/item/weapon/stock_parts/matter_bin" = 1) + +/obj/item/weapon/circuitboard/fax + name = T_BOARD("fax") + build_path = /obj/machinery/photocopier/faxmachine + board_type = "fax" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + req_components = list( + "/obj/item/weapon/stock_parts/scanning_module" = 1, + "/obj/item/weapon/stock_parts/motor" = 1, + "/obj/item/weapon/stock_parts/micro_laser" = 1, + "/obj/item/weapon/stock_parts/matter_bin" = 1) + +/obj/item/weapon/circuitboard/conveyor + name = T_BOARD("conveyor") + build_path = /obj/machinery/conveyor + board_type = "conveyor" + req_components = list( + "/obj/item/weapon/stock_parts/gear" = 2, + "/obj/item/weapon/stock_parts/motor" = 2, + "/obj/item/stack/cable_coil" = 5) + +/obj/item/weapon/circuitboard/microwave + name = T_BOARD("microwave") + build_path = /obj/machinery/microwave + board_type = "microwave" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + req_components = list( + "/obj/item/weapon/stock_parts/console_screen" = 1, + "/obj/item/weapon/stock_parts/motor" = 1, + "/obj/item/weapon/stock_parts/capacitor" = 1) + +/obj/item/weapon/circuitboard/vending + name = T_BOARD("vending") + build_path = /obj/machinery/vending + board_type = "vending" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + req_components = list( + "/obj/item/weapon/stock_parts/console_screen" = 1, + "/obj/item/weapon/stock_parts/motor" = 2, + "/obj/item/weapon/stock_parts/spring" = 2, + "/obj/item/stack/material/glass/reinforced" = 2) + +/obj/item/weapon/circuitboard/recharger + name = T_BOARD("recharger") + build_path = /obj/machinery/recharger + board_type = "recharger" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + req_components = list( + "/obj/item/weapon/stock_parts/capacitor" = 1, + "/obj/item/stack/cable_coil" = 5) + +/obj/item/weapon/circuitboard/recharger/wrecharger + name = T_BOARD("wall recharger") + build_path = /obj/machinery/recharger/wallcharger + board_type = "wrecharger" + +/obj/item/weapon/circuitboard/washing + name = T_BOARD("washing machine") + build_path = /obj/machinery/washing_machine + board_type = "washing" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + req_components = list( + "/obj/item/weapon/stock_parts/motor" = 1, + "/obj/item/weapon/stock_parts/gear" = 2) + +/obj/item/weapon/circuitboard/grinder + name = T_BOARD("reagent grinder") + build_path = /obj/machinery/reagentgrinder + board_type = "grinder" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + req_components = list( + "/obj/item/weapon/stock_parts/motor" = 1, + "/obj/item/weapon/stock_parts/gear" = 1, + "/obj/item/weapon/reagent_containers/glass/beaker/large" = 1) + +//for testing - If this is still in when I commit, someone shoot me. --leaving in for now, shouldn't be able to get these on station anyways. +/obj/item/weapon/storage/box/frame_parts + display_contents_with_number = 1 + New() + ..() + new /obj/item/weapon/circuitboard/guestpass( src ) + new /obj/item/weapon/circuitboard/status_display( src ) + new /obj/item/weapon/circuitboard/ai_status_display( src ) + new /obj/item/weapon/circuitboard/newscaster( src ) + new /obj/item/weapon/circuitboard/atm( src ) + new /obj/item/weapon/circuitboard/firealarm( src ) + new /obj/item/weapon/circuitboard/airalarm( src ) + new /obj/item/weapon/circuitboard/intercom( src ) + new /obj/item/weapon/circuitboard/keycard_auth( src ) + new /obj/item/weapon/circuitboard/holopad( src ) + new /obj/item/weapon/circuitboard/photocopier( src ) + new /obj/item/weapon/circuitboard/fax( src ) + new /obj/item/weapon/circuitboard/microwave( src ) + new /obj/item/weapon/circuitboard/vending( src ) + new /obj/item/weapon/circuitboard/washing( src ) + new /obj/item/weapon/stock_parts/scanning_module( src ) + new /obj/item/weapon/stock_parts/motor( src ) + new /obj/item/weapon/stock_parts/micro_laser( src ) + new /obj/item/weapon/stock_parts/matter_bin( src ) + new /obj/item/weapon/stock_parts/gear( src ) + new /obj/item/weapon/stock_parts/console_screen( src ) + new /obj/item/weapon/stock_parts/capacitor( src ) + new /obj/item/weapon/stock_parts/spring( src ) + new /obj/item/weapon/stock_parts/scanning_module( src ) + new /obj/item/weapon/stock_parts/motor( src ) + new /obj/item/weapon/stock_parts/micro_laser( src ) + new /obj/item/weapon/stock_parts/matter_bin( src ) + new /obj/item/weapon/stock_parts/gear( src ) + new /obj/item/weapon/stock_parts/console_screen( src ) + new /obj/item/weapon/stock_parts/capacitor( src ) + new /obj/item/weapon/stock_parts/spring( src ) + new /obj/item/weapon/stock_parts/scanning_module( src ) + new /obj/item/weapon/stock_parts/motor( src ) + new /obj/item/weapon/stock_parts/micro_laser( src ) + new /obj/item/weapon/stock_parts/matter_bin( src ) + new /obj/item/weapon/stock_parts/gear( src ) + new /obj/item/weapon/stock_parts/console_screen( src ) + new /obj/item/weapon/stock_parts/capacitor( src ) + new /obj/item/weapon/stock_parts/spring( src ) + new /obj/item/weapon/stock_parts/scanning_module( src ) + new /obj/item/weapon/stock_parts/motor( src ) + new /obj/item/weapon/stock_parts/micro_laser( src ) + new /obj/item/weapon/stock_parts/matter_bin( src ) + new /obj/item/weapon/stock_parts/gear( src ) + new /obj/item/weapon/stock_parts/console_screen( src ) + new /obj/item/weapon/stock_parts/capacitor( src ) + new /obj/item/weapon/stock_parts/spring( src ) + new /obj/item/weapon/stock_parts/scanning_module( src ) + new /obj/item/weapon/stock_parts/motor( src ) + new /obj/item/weapon/stock_parts/micro_laser( src ) + new /obj/item/weapon/stock_parts/matter_bin( src ) + new /obj/item/weapon/stock_parts/gear( src ) + new /obj/item/weapon/stock_parts/console_screen( src ) + new /obj/item/weapon/stock_parts/capacitor( src ) + new /obj/item/weapon/stock_parts/spring( src ) + new /obj/item/weapon/stock_parts/scanning_module( src ) + new /obj/item/weapon/stock_parts/motor( src ) + new /obj/item/weapon/stock_parts/micro_laser( src ) + new /obj/item/weapon/stock_parts/matter_bin( src ) + new /obj/item/weapon/stock_parts/gear( src ) + new /obj/item/weapon/stock_parts/console_screen( src ) + new /obj/item/weapon/stock_parts/capacitor( src ) + new /obj/item/weapon/stock_parts/spring( src ) + new /obj/item/weapon/stock_parts/scanning_module( src ) + new /obj/item/weapon/stock_parts/motor( src ) + new /obj/item/weapon/stock_parts/micro_laser( src ) + new /obj/item/weapon/stock_parts/matter_bin( src ) + new /obj/item/weapon/stock_parts/gear( src ) + new /obj/item/weapon/stock_parts/console_screen( src ) + new /obj/item/weapon/stock_parts/capacitor( src ) + new /obj/item/weapon/stock_parts/spring( src ) + new /obj/item/weapon/stock_parts/scanning_module( src ) + new /obj/item/weapon/stock_parts/motor( src ) + new /obj/item/weapon/stock_parts/micro_laser( src ) + new /obj/item/weapon/stock_parts/matter_bin( src ) + new /obj/item/weapon/stock_parts/gear( src ) + new /obj/item/weapon/stock_parts/console_screen( src ) + new /obj/item/weapon/stock_parts/capacitor( src ) + new /obj/item/weapon/stock_parts/spring( src ) + new /obj/item/weapon/stock_parts/scanning_module( src ) + new /obj/item/weapon/stock_parts/motor( src ) + new /obj/item/weapon/stock_parts/micro_laser( src ) + new /obj/item/weapon/stock_parts/matter_bin( src ) + new /obj/item/weapon/stock_parts/gear( src ) + new /obj/item/weapon/stock_parts/console_screen( src ) + new /obj/item/weapon/stock_parts/capacitor( src ) + new /obj/item/weapon/stock_parts/spring( src ) + new /obj/item/stack/cable_coil( src , 5 ) + new /obj/item/stack/material/glass/reinforced( src , 2 ) \ No newline at end of file diff --git a/code/game/objects/items/weapons/circuitboards/other.dm b/code/game/objects/items/weapons/circuitboards/other.dm index 6d016a96fa..da70371e4a 100644 --- a/code/game/objects/items/weapons/circuitboards/other.dm +++ b/code/game/objects/items/weapons/circuitboards/other.dm @@ -1,5 +1,5 @@ #ifndef T_BOARD -#error T_BOARD macro is not defined but we need it! +#error T_BOARD macro is not defined but we need it! #endif //Stuff that doesn't fit into any category goes here @@ -7,4 +7,4 @@ /obj/item/weapon/circuitboard/aicore name = T_BOARD("AI core") origin_tech = list(TECH_DATA = 4, TECH_BIO = 2) - board_type = "other" + board_type = "other" \ No newline at end of file diff --git a/code/game/objects/items/weapons/cosmetics.dm b/code/game/objects/items/weapons/cosmetics.dm index 218d2fb21c..d92ad00bab 100644 --- a/code/game/objects/items/weapons/cosmetics.dm +++ b/code/game/objects/items/weapons/cosmetics.dm @@ -77,7 +77,5 @@ icon_state = "purplecomb" item_state = "purplecomb" -/obj/item/weapon/haircomb/attack_self(mob/user) - if(user.r_hand == src || user.l_hand == src) - user.visible_message(text("[] uses [] to comb their hair with incredible style and sophistication. What a [].", user, src, user.gender == FEMALE ? "lady" : "guy")) - return +/obj/item/weapon/haircomb/attack_self(mob/living/user) + user.visible_message(text("[] uses [] to comb their hair with incredible style and sophistication. What a [].", user, src, user.gender == FEMALE ? "lady" : "guy")) diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index bbdd46cdb3..8cd4c373e9 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -39,8 +39,8 @@ return null var/turf/location = loc if(istype(location, /mob/)) - var/mob/M = location - if(M.l_hand == src || M.r_hand == src) + var/mob/living/M = location + if(M.item_is_in_hands(src)) location = M.loc if(isturf(location)) //start a fire if possible location.hotspot_expose(700, 2) diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm index 43b58a1726..73c198c8ab 100644 --- a/code/game/objects/items/weapons/gift_wrappaper.dm +++ b/code/game/objects/items/weapons/gift_wrappaper.dm @@ -125,12 +125,12 @@ icon_state = "wrap_paper" var/amount = 20.0 -/obj/item/weapon/wrapping_paper/attackby(obj/item/weapon/W as obj, mob/user as mob) +/obj/item/weapon/wrapping_paper/attackby(obj/item/weapon/W as obj, mob/living/user as mob) ..() if (!( locate(/obj/structure/table, src.loc) )) user << "You MUST put the paper on a table!" if (W.w_class < 4) - if ((istype(user.l_hand, /obj/item/weapon/wirecutters) || istype(user.r_hand, /obj/item/weapon/wirecutters))) + if (user.get_type_in_hands(/obj/item/weapon/wirecutters)) var/a_used = 2 ** (src.w_class - 1) if (src.amount < a_used) user << "You need more paper!" diff --git a/code/game/objects/items/weapons/implants/implantpad.dm b/code/game/objects/items/weapons/implants/implantpad.dm index 476ed726cd..a6feac2998 100644 --- a/code/game/objects/items/weapons/implants/implantpad.dm +++ b/code/game/objects/items/weapons/implants/implantpad.dm @@ -24,8 +24,8 @@ return - attack_hand(mob/user as mob) - if ((src.case && (user.l_hand == src || user.r_hand == src))) + attack_hand(mob/living/user as mob) + if ((src.case && user.item_is_in_hands(src))) user.put_in_active_hand(case) src.case.add_fingerprint(user) diff --git a/code/game/objects/items/weapons/material/twohanded.dm b/code/game/objects/items/weapons/material/twohanded.dm index 2c11456b70..b404b69f0b 100644 --- a/code/game/objects/items/weapons/material/twohanded.dm +++ b/code/game/objects/items/weapons/material/twohanded.dm @@ -29,7 +29,7 @@ /obj/item/weapon/material/twohanded/update_held_icon() var/mob/living/M = loc - if(istype(M) && !issmall(M) && ((M.r_hand == src && !M.l_hand) || (M.l_hand == src && !M.r_hand))) + if(istype(M) && !issmall(M) && M.item_is_in_hands(src) && !M.hands_are_full()) wielded = 1 force = force_wielded name = "[base_name] (wielded)" diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index 6a236e1b8f..ac8da3d835 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -214,7 +214,7 @@ spawn(1) if(src) qdel(src) /obj/item/weapon/melee/energy/blade/process() - if(!creator || loc != creator || (creator.l_hand != src && creator.r_hand != src)) + if(!creator || loc != creator || !creator.item_is_in_hands(src)) // Tidy up a bit. if(istype(loc,/mob/living)) var/mob/living/carbon/human/host = loc diff --git a/code/game/objects/items/weapons/mop_deploy.dm b/code/game/objects/items/weapons/mop_deploy.dm index 66ae01797e..e50f82966b 100644 --- a/code/game/objects/items/weapons/mop_deploy.dm +++ b/code/game/objects/items/weapons/mop_deploy.dm @@ -59,7 +59,7 @@ spawn(1) if(src) del(src) /obj/item/weapon/mop_deploy/process() - if(!creator || loc != creator || (creator.l_hand != src && creator.r_hand != src)) + if(!creator || loc != creator || !creator.item_is_in_hands(src)) // Tidy up a bit. if(istype(loc,/mob/living)) var/mob/living/carbon/human/host = loc diff --git a/code/game/objects/items/weapons/storage/laundry_basket.dm b/code/game/objects/items/weapons/storage/laundry_basket.dm index 92dd28c61a..ffb4867ca6 100644 --- a/code/game/objects/items/weapons/storage/laundry_basket.dm +++ b/code/game/objects/items/weapons/storage/laundry_basket.dm @@ -21,7 +21,7 @@ var/linked -/obj/item/weapon/storage/laundry_basket/attack_hand(mob/user as mob) +/obj/item/weapon/storage/laundry_basket/attack_hand(mob/living/user as mob) if(ishuman(user)) var/mob/living/carbon/human/H = user var/obj/item/organ/external/temp = H.get_organ("r_hand") diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 0a5b1ec686..a79d6575e5 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -173,7 +173,7 @@ user << text("\icon[] [] contains []/[] units of fuel!", src, src.name, get_fuel(),src.max_fuel ) -/obj/item/weapon/weldingtool/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/weapon/weldingtool/attackby(obj/item/W as obj, mob/living/user as mob) if(istype(W,/obj/item/weapon/screwdriver)) if(welding) user << "Stop welding first!" @@ -222,9 +222,9 @@ //I'm not sure what this does. I assume it has to do with starting fires... //...but it doesnt check to see if the welder is on or not. var/turf/location = src.loc - if(istype(location, /mob/)) - var/mob/M = location - if(M.l_hand == src || M.r_hand == src) + if(istype(location, /mob/living)) + var/mob/living/M = location + if(M.item_is_in_hands(src)) location = get_turf(M) if (istype(location, /turf)) location.hotspot_expose(700, 5) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index fa4fa27f75..bc10bc4359 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -90,11 +90,12 @@ // check for TK users if (istype(usr, /mob/living/carbon/human)) - if(istype(usr.l_hand, /obj/item/tk_grab) || istype(usr.r_hand, /obj/item/tk_grab/)) - if(!(usr in nearby)) - if(usr.client && usr.machine==src) + var/mob/living/carbon/human/H = usr + if(H.get_type_in_hands(/obj/item/tk_grab)) + if(!(H in nearby)) + if(H.client && H.machine==src) is_in_use = 1 - src.attack_hand(usr) + src.attack_hand(H) in_use = is_in_use /obj/proc/updateDialog() diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index fcbe9e9060..0a3ca35122 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -297,6 +297,7 @@ new /obj/item/taperoll/police(src) new /obj/item/weapon/gun/projectile/colt/detective(src) new /obj/item/clothing/accessory/holster/armpit(src) + new /obj/item/device/flashlight/maglight(src) return /obj/structure/closet/secure_closet/detective/update_icon() diff --git a/code/game/objects/structures/curtains.dm b/code/game/objects/structures/curtains.dm index cc67d80ac3..fd3427e21e 100644 --- a/code/game/objects/structures/curtains.dm +++ b/code/game/objects/structures/curtains.dm @@ -35,6 +35,21 @@ icon_state = "open" layer = SHOWER_OPEN_LAYER +/obj/structure/curtain/attackby(obj/item/P, mob/user) + if(istype(P, /obj/item/weapon/wirecutters)) + playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + user << "You start to cut the shower curtains." + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + if(do_after(user, 10)) + user << "You cut the shower curtains." + var/obj/item/stack/material/plastic/A = new /obj/item/stack/material/plastic( src.loc ) + A.amount = 3 + qdel(src) + return + else + src.attack_hand(user) + return + /obj/structure/curtain/black name = "black curtain" color = "#222222" diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index c8ccd4b32b..dcc0270abc 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -8,9 +8,19 @@ var/obj/item/weapon/extinguisher/has_extinguisher var/opened = 0 -/obj/structure/extinguisher_cabinet/New() +/obj/structure/extinguisher_cabinet/New(var/loc, var/dir, var/building = 0) ..() - has_extinguisher = new/obj/item/weapon/extinguisher(src) + + if(building) + if(loc) + src.loc = loc + + pixel_x = (dir & 3)? 0 : (dir == 4 ? -27 : 27) + pixel_y = (dir & 3)? (dir ==1 ? -27 : 27) : 0 + update_icon() + return + else + has_extinguisher = new/obj/item/weapon/extinguisher(src) /obj/structure/extinguisher_cabinet/attackby(obj/item/O, mob/user) if(isrobot(user)) @@ -23,12 +33,21 @@ user << "You place [O] in [src]." else opened = !opened + if(istype(O, /obj/item/weapon/wrench)) + if(!has_extinguisher) + user << "You start to unwrench the extinguisher cabinet." + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + if(do_after(user, 15)) + user << "You unwrench the extinguisher cabinet." + new /obj/item/frame/extinguisher_cabinet( src.loc ) + qdel(src) + return else opened = !opened update_icon() -/obj/structure/extinguisher_cabinet/attack_hand(mob/user) +/obj/structure/extinguisher_cabinet/attack_hand(mob/living/user) if(isrobot(user)) return if (ishuman(user)) diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 17957cc589..b3ad998895 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -107,7 +107,7 @@ if(!isliving(usr)) return var/mob/living/user = usr - + if(href_list["take"]) switch(href_list["take"]) if("garbage") @@ -213,10 +213,10 @@ ..() -/obj/structure/bed/chair/janicart/relaymove(mob/user, direction) +/obj/structure/bed/chair/janicart/relaymove(mob/living/user, direction) if(user.stat || user.stunned || user.weakened || user.paralysis) unbuckle_mob() - if(istype(user.l_hand, /obj/item/key) || istype(user.r_hand, /obj/item/key)) + if(user.get_type_in_hands(/obj/item/key)) step(src, direction) update_mob() else diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index 88e771f8ed..a8747e07ec 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -8,9 +8,18 @@ anchored = 1 var/shattered = 0 var/list/ui_users = list() + var/glass = 1 + +/obj/structure/mirror/New(var/loc, var/dir, var/building = 0, mob/user as mob) + if(building) + glass = 0 + icon_state = "mirror_frame" + pixel_x = (dir & 3)? 0 : (dir == 4 ? -28 : 28) + pixel_y = (dir & 3)? (dir == 1 ? -30 : 30) : 0 + return /obj/structure/mirror/attack_hand(mob/user as mob) - + if(!glass) return if(shattered) return if(ishuman(user)) @@ -22,6 +31,7 @@ AC.ui_interact(user) /obj/structure/mirror/proc/shatter() + if(!glass) return if(shattered) return shattered = 1 icon_state = "mirror_broke" @@ -34,18 +44,57 @@ if(prob(Proj.get_structure_damage() * 2)) if(!shattered) shatter() - else + else if(glass) playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) ..() /obj/structure/mirror/attackby(obj/item/I as obj, mob/user as mob) - if(shattered) + if(istype(I, /obj/item/weapon/wrench)) + if(!glass) + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + if(do_after(user, 20)) + user << "You unfasten the frame." + new /obj/item/frame/mirror( src.loc ) + qdel(src) + return + if(istype(I, /obj/item/weapon/crowbar)) + if(shattered && glass) + user << "The broken glass falls out." + icon_state = "mirror_frame" + glass = !glass + new /obj/item/weapon/material/shard( src.loc ) + return + if(!shattered && glass) + playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) + user << "You remove the glass." + glass = !glass + icon_state = "mirror_frame" + new /obj/item/stack/material/glass( src.loc, 2 ) + return + + if(istype(I, /obj/item/stack/material/glass)) + if(!glass) + var/obj/item/stack/material/glass/G = I + if (G.get_amount() < 2) + user << "You need two sheets of glass to add them to the frame." + return + user << "You start to add the glass to the frame." + if(do_after(user, 20)) + if (G.use(2)) + shattered = 0 + glass = 1 + icon_state = "mirror" + user << "You add the glass to the frame." + return + + if(shattered && glass) playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) return if(prob(I.force * 2)) visible_message("[user] smashes [src] with [I]!") - shatter() + if(glass) + shatter() else visible_message("[user] hits [src] with [I]!") playsound(src.loc, 'sound/effects/Glasshit.ogg', 70, 1) @@ -53,13 +102,14 @@ /obj/structure/mirror/attack_generic(var/mob/user, var/damage) user.do_attack_animation(src) - if(shattered) + if(shattered && glass) playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) return 0 if(damage) user.visible_message("[user] smashes [src]!") - shatter() + if(glass) + shatter() else user.visible_message("[user] hits [src] and bounces off!") return 1 diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm index 3647d565f7..174634e3cb 100644 --- a/code/game/objects/structures/noticeboard.dm +++ b/code/game/objects/structures/noticeboard.dm @@ -7,6 +7,18 @@ anchored = 1 var/notices = 0 +/obj/structure/noticeboard/New(var/loc, var/dir, var/building = 0) + ..() + + if(building) + if(loc) + src.loc = loc + + pixel_x = (dir & 3)? 0 : (dir == 4 ? -32 : 32) + pixel_y = (dir & 3)? (dir ==1 ? -27 : 27) : 0 + update_icon() + return + /obj/structure/noticeboard/initialize() for(var/obj/item/I in loc) if(notices > 4) break @@ -28,6 +40,14 @@ user << "You pin the paper to the noticeboard." else user << "You reach to pin your paper to the board but hesitate. You are certain your paper will not be seen among the many others already attached." + if(istype(O, /obj/item/weapon/wrench)) + user << "You start to unwrench the noticeboard." + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + if(do_after(user, 15)) + user << "You unwrench the noticeboard." + new /obj/item/frame/noticeboard( src.loc ) + qdel(src) + return /obj/structure/noticeboard/attack_hand(var/mob/user) examine(user) @@ -64,15 +84,14 @@ return var/obj/item/P = locate(href_list["write"]) if((P && P.loc == src)) //ifthe paper's on the board - if(istype(usr.r_hand, /obj/item/weapon/pen)) //and you're holding a pen - add_fingerprint(usr) - P.attackby(usr.r_hand, usr) //then do ittttt - else - if(istype(usr.l_hand, /obj/item/weapon/pen)) //check other hand for pen - add_fingerprint(usr) - P.attackby(usr.l_hand, usr) + var/mob/living/M = usr + if(istype(M)) + var/obj/item/weapon/pen/E = M.get_type_in_hands(/obj/item/weapon/pen) + if(E) + add_fingerprint(M) + P.attackby(E, usr) else - usr << "You'll need something to write with!" + M << "You'll need something to write with!" if(href_list["read"]) var/obj/item/weapon/paper/P = locate(href_list["read"]) if((P && P.loc == src)) diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index a3904f65a1..7003f4d3a2 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -90,7 +90,7 @@ FLOOR SAFES var/mob/living/carbon/human/user = usr var/canhear = 0 - if(istype(user.l_hand, /obj/item/clothing/accessory/stethoscope) || istype(user.r_hand, /obj/item/clothing/accessory/stethoscope)) + if(user.get_type_in_hands(/obj/item/clothing/accessory/stethoscope)) canhear = 1 if(href_list["open"]) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 8df5be2629..4ac596267d 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -358,7 +358,7 @@ if (ishuman(user)) var/mob/living/carbon/human/H = user var/obj/item/organ/external/temp = H.organs_by_name["r_hand"] - if (user.hand) + if (H.hand) temp = H.organs_by_name["l_hand"] if(temp && !temp.is_usable()) user << "You try to move your [temp.name], but cannot!" diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm index cc91ee49a2..47a3c5a63e 100644 --- a/code/game/supplyshuttle.dm +++ b/code/game/supplyshuttle.dm @@ -55,6 +55,20 @@ var/list/mechtoys = list( /mob/living/silicon/robot/drone ) +/obj/structure/plasticflaps/attackby(obj/item/P, mob/user) + if(istype(P, /obj/item/weapon/wirecutters)) + playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + user << "You start to cut the plastic flaps." + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + if(do_after(user, 10)) + user << "You cut the plastic flaps." + var/obj/item/stack/material/plastic/A = new /obj/item/stack/material/plastic( src.loc ) + A.amount = 4 + qdel(src) + return + else + return + /obj/structure/plasticflaps/CanPass(atom/A, turf/T) if(istype(A) && A.checkpass(PASSGLASS)) return prob(60) diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index c3c395f15a..b731905e5f 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -94,7 +94,7 @@ ..() - on_found(mob/finder as mob) + on_found(mob/living/finder as mob) if(armed) finder.visible_message("[finder] accidentally sets off [src], breaking their fingers.", \ "You accidentally trigger [src]!") diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index a8887c17f5..a15a6aeb55 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -76,7 +76,7 @@ var/turf/location = src.loc if(istype(location, /mob/)) var/mob/living/carbon/human/M = location - if(M.l_hand == src || M.r_hand == src || M.head == src) + if(M.item_is_in_hands(src) || M.head == src) location = M.loc if (istype(location, /turf)) diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index 214f63c223..ad83edfbc4 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -22,7 +22,7 @@ say_verbs = list("mumbles", "says") // Clumsy folks can't take the mask off themselves. -/obj/item/clothing/mask/muzzle/attack_hand(mob/user as mob) +/obj/item/clothing/mask/muzzle/attack_hand(mob/living/user as mob) if(user.wear_mask == src && !user.IsAdvancedToolUser()) return 0 ..() diff --git a/code/modules/clothing/spacesuits/rig/rig_attackby.dm b/code/modules/clothing/spacesuits/rig/rig_attackby.dm index c9526f1626..cda9d51796 100644 --- a/code/modules/clothing/spacesuits/rig/rig_attackby.dm +++ b/code/modules/clothing/spacesuits/rig/rig_attackby.dm @@ -1,6 +1,6 @@ -/obj/item/weapon/rig/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/weapon/rig/attackby(obj/item/W as obj, mob/living/user as mob) - if(!istype(user,/mob/living)) return 0 + if(!istype(user)) return 0 if(electrified != 0) if(shock(user)) //Handles removing charge from the cell, as well. No need to do that here. diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 41b0209e4d..f98f222b93 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -1,6 +1,6 @@ /obj/item/clothing/suit/armor - allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs) + allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/flashlight/maglight) body_parts_covered = UPPER_TORSO|LOWER_TORSO item_flags = THICKMATERIAL @@ -263,7 +263,7 @@ icon_state = "kvest" item_state = "kvest" armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 0, rad = 0) - allowed = list(/obj/item/weapon/gun,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs) + allowed = list(/obj/item/weapon/gun,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/flashlight/maglight) body_parts_covered = UPPER_TORSO|LOWER_TORSO item_flags = THICKMATERIAL diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 3931b3ec67..8a3daf68ff 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -96,7 +96,7 @@ item_state = "det_suit" blood_overlay_type = "coat" body_parts_covered = UPPER_TORSO|ARMS - allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter,/obj/item/device/taperecorder) + allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter,/obj/item/device/taperecorder,/obj/item/device/uv_light) armor = list(melee = 50, bullet = 10, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0) /obj/item/clothing/suit/storage/det_trench/grey @@ -109,7 +109,7 @@ desc = "A forensics technician jacket." item_state = "det_suit" body_parts_covered = UPPER_TORSO|ARMS - allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/taperecorder) + allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/taperecorder,/obj/item/device/uv_light) armor = list(melee = 10, bullet = 10, laser = 15, energy = 10, bomb = 0, bio = 0, rad = 0) /obj/item/clothing/suit/storage/forensics/red diff --git a/code/modules/detectivework/tools/evidencebag.dm b/code/modules/detectivework/tools/evidencebag.dm index 31c5b6a358..6aa4bdf99f 100644 --- a/code/modules/detectivework/tools/evidencebag.dm +++ b/code/modules/detectivework/tools/evidencebag.dm @@ -15,7 +15,7 @@ var/mob/living/carbon/human/user = usr - if (!(user.l_hand == src || user.r_hand == src)) + if(!user.item_is_in_hands(src)) return //bag must be in your hands to use if (isturf(I.loc)) @@ -31,10 +31,8 @@ var/obj/item/weapon/storage/U = I.loc user.client.screen -= I U.contents.Remove(I) - else if(user.l_hand == I) //in a hand - user.drop_l_hand() - else if(user.r_hand == I) //in a hand - user.drop_r_hand() + else if(user.item_is_in_hands(I)) + user.drop_from_inventory(I) else return diff --git a/code/modules/economy/ATM.dm b/code/modules/economy/ATM.dm index ce8c4e765d..bc0388d40d 100644 --- a/code/modules/economy/ATM.dm +++ b/code/modules/economy/ATM.dm @@ -22,6 +22,7 @@ log transactions anchored = 1 use_power = 1 idle_power_usage = 10 + circuit = /obj/item/weapon/circuitboard/atm var/datum/money_account/authenticated_account var/number_incorrect_tries = 0 var/previous_account_number = 0 @@ -79,6 +80,25 @@ log transactions return 1 /obj/machinery/atm/attackby(obj/item/I as obj, mob/user as mob) + if(istype(I, /obj/item/weapon/screwdriver) && circuit) + user << "You start disconnecting the monitor." + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + if(do_after(user, 20)) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.frame_type = "atm" + A.pixel_x = pixel_x + A.pixel_y = pixel_y + A.circuit = M + A.anchored = 1 + for (var/obj/C in src) + C.forceMove(loc) + user << "You disconnect the monitor." + A.state = 4 + A.icon_state = "atm_4" + M.deconstruct(src) + qdel(src) + return if(istype(I, /obj/item/weapon/card)) if(emagged > 0) //prevent inserting id into an emagged ATM diff --git a/code/modules/events/prison_break.dm b/code/modules/events/prison_break.dm index d10659e24e..5173236627 100644 --- a/code/modules/events/prison_break.dm +++ b/code/modules/events/prison_break.dm @@ -61,9 +61,12 @@ /datum/event/prison_break/tick() if(activeFor == releaseWhen) if(areas && areas.len > 0) + var/obj/machinery/power/apc/theAPC = null for(var/area/A in areas) - for(var/obj/machinery/light/L in A) - L.flicker(10) + theAPC = A.get_apc() + if(theAPC.operating) //If the apc's off, it's a little hard to overload the lights. + for(var/obj/machinery/light/L in A) + L.flicker(10) /datum/event/prison_break/end() diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index 1ea1a9a356..1b353e3407 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -77,12 +77,8 @@ usr << "There are no cards in the deck." return - var/obj/item/weapon/hand/H - if(user.l_hand && istype(user.l_hand,/obj/item/weapon/hand)) - H = user.l_hand - else if(user.r_hand && istype(user.r_hand,/obj/item/weapon/hand)) - H = user.r_hand - else + var/obj/item/weapon/hand/H = user.get_type_in_hands(/obj/item/weapon/hand) + if(!H) H = new(get_turf(src)) user.put_in_hands(H) diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 160dec82f4..608398a039 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -172,7 +172,7 @@ if(seed) seed.thrown_at(src,hit_atom) ..() -/obj/item/weapon/reagent_containers/food/snacks/grown/attackby(var/obj/item/weapon/W, var/mob/user) +/obj/item/weapon/reagent_containers/food/snacks/grown/attackby(var/obj/item/weapon/W, var/mob/living/user) if(seed) if(seed.get_trait(TRAIT_PRODUCES_POWER) && istype(W, /obj/item/stack/cable_coil)) @@ -181,7 +181,7 @@ //TODO: generalize this. user << "You add some cable to the [src.name] and slide it inside the battery casing." var/obj/item/weapon/cell/potato/pocell = new /obj/item/weapon/cell/potato(get_turf(user)) - if(src.loc == user && !(user.l_hand && user.r_hand) && istype(user,/mob/living/carbon/human)) + if(src.loc == user && istype(user,/mob/living/carbon/human)) user.put_in_hands(pocell) pocell.maxcharge = src.potency * 10 pocell.charge = pocell.maxcharge diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm index 0dc46f9e35..0974a705ce 100644 --- a/code/modules/hydroponics/seed.dm +++ b/code/modules/hydroponics/seed.dm @@ -150,7 +150,7 @@ var/body_coverage = HEAD|FACE|EYES|UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS for(var/obj/item/clothing/clothes in target) - if(target.l_hand == clothes|| target.r_hand == clothes) + if(target.item_is_in_hands(clothes)) continue body_coverage &= ~(clothes.body_parts_covered) @@ -182,7 +182,7 @@ continue var/body_coverage = HEAD|FACE|EYES|UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS for(var/obj/item/clothing/clothes in M) - if(M.l_hand == clothes || M.r_hand == clothes) + if(M.item_is_in_hands(clothes)) continue body_coverage &= ~(clothes.body_parts_covered) if(!body_coverage) diff --git a/code/modules/hydroponics/seed_machines.dm b/code/modules/hydroponics/seed_machines.dm index b1d3134344..015ab88ccb 100644 --- a/code/modules/hydroponics/seed_machines.dm +++ b/code/modules/hydroponics/seed_machines.dm @@ -94,16 +94,10 @@ user << "You load [W] into [src]." return - if(istype(W,/obj/item/weapon/screwdriver)) - open = !open - user << "You [open ? "open" : "close"] the maintenance panel." + if(default_deconstruction_screwdriver(user, W)) + return + if(default_deconstruction_crowbar(user, W)) return - - if(open) - if(istype(W, /obj/item/weapon/crowbar)) - dismantle() - return - if(istype(W,/obj/item/weapon/disk/botany)) if(loaded_disk) user << "There is already a data disk loaded." diff --git a/code/modules/hydroponics/trays/tray_tools.dm b/code/modules/hydroponics/trays/tray_tools.dm index 1a76ad22fd..856af9b3e8 100644 --- a/code/modules/hydroponics/trays/tray_tools.dm +++ b/code/modules/hydroponics/trays/tray_tools.dm @@ -34,7 +34,7 @@ var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(get_turf(src)) P.name = "paper - [form_title]" P.info = "[last_data]" - if(istype(user,/mob/living/carbon/human) && !(user.l_hand && user.r_hand)) + if(istype(user,/mob/living/carbon/human)) user.put_in_hands(P) user.visible_message("\The [src] spits out a piece of paper.") return diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index 13caccfba0..3dbb74d933 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -45,7 +45,7 @@ user << "You begin dismantling \the [src]." if(do_after(user,25)) user << "You dismantle \the [src]." - new /obj/item/stack/material/wood(get_turf(src), amount = 3) + new /obj/item/stack/material/wood(get_turf(src), 3) for(var/obj/item/weapon/book/b in contents) b.loc = (get_turf(src)) qdel(src) diff --git a/code/modules/materials/material_recipes.dm b/code/modules/materials/material_recipes.dm index 18c96cf622..cf83cef983 100644 --- a/code/modules/materials/material_recipes.dm +++ b/code/modules/materials/material_recipes.dm @@ -47,9 +47,11 @@ recipes += new/datum/stack_recipe("cannon frame", /obj/item/weapon/cannonframe, 10, time = 15, one_per_turf = 0, on_floor = 0) recipes += new/datum/stack_recipe("regular floor tile", /obj/item/stack/tile/floor, 1, 4, 20) recipes += new/datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60) - recipes += new/datum/stack_recipe("computer frame", /obj/structure/computerframe, 5, time = 25, one_per_turf = 1, on_floor = 1) + recipes += new/datum/stack_recipe("frame", /obj/item/frame, 5, time = 25, one_per_turf = 1, on_floor = 1) + recipes += new/datum/stack_recipe("mirror frame", /obj/item/frame/mirror, 1, time = 5, one_per_turf = 0, on_floor = 1) + recipes += new/datum/stack_recipe("fire extinguisher cabinet frame", /obj/item/frame/extinguisher_cabinet, 4, time = 5, one_per_turf = 0, on_floor = 1) + //recipes += new/datum/stack_recipe("fire axe cabinet frame", /obj/item/frame/fireaxe_cabinet, 4, time = 5, one_per_turf = 0, on_floor = 1) recipes += new/datum/stack_recipe("wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1) - recipes += new/datum/stack_recipe("machine frame", /obj/machinery/constructable_frame/machine_frame, 5, time = 25, one_per_turf = 1, on_floor = 1) recipes += new/datum/stack_recipe("turret frame", /obj/machinery/porta_turret_construct, 5, time = 25, one_per_turf = 1, on_floor = 1) recipes += new/datum/stack_recipe_list("airlock assemblies", list( \ new/datum/stack_recipe("standard airlock assembly", /obj/structure/door_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1), \ @@ -70,13 +72,17 @@ new/datum/stack_recipe("emergency shutter", /obj/structure/firedoor_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("multi-tile airlock assembly", /obj/structure/door_assembly/multi_tile, 4, time = 50, one_per_turf = 1, on_floor = 1), \ )) - + recipes += new/datum/stack_recipe("IV drip", /obj/machinery/iv_drip, 4, time = 20, one_per_turf = 1, on_floor = 1) + recipes += new/datum/stack_recipe("conveyor switch", /obj/machinery/conveyor_switch, 2, time = 20, one_per_turf = 1, on_floor = 1) recipes += new/datum/stack_recipe("grenade casing", /obj/item/weapon/grenade/chem_grenade) recipes += new/datum/stack_recipe("light fixture frame", /obj/item/frame/light, 2) recipes += new/datum/stack_recipe("small light fixture frame", /obj/item/frame/light/small, 1) recipes += new/datum/stack_recipe("apc frame", /obj/item/frame/apc, 2) - recipes += new/datum/stack_recipe("air alarm frame", /obj/item/frame/air_alarm, 2) - recipes += new/datum/stack_recipe("fire alarm frame", /obj/item/frame/fire_alarm, 2) + recipes += new/datum/stack_recipe_list("filing cabinets", list( \ + new/datum/stack_recipe("filing cabinet", /obj/structure/filingcabinet, 4, time = 20, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("tall filing cabinet", /obj/structure/filingcabinet/filingcabinet, 4, time = 20, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("chest drawer", /obj/structure/filingcabinet/chestdrawer, 4, time = 20, one_per_turf = 1, on_floor = 1), \ + )) /material/plasteel/generate_recipes() ..() @@ -84,6 +90,7 @@ recipes += new/datum/stack_recipe("Metal crate", /obj/structure/closet/crate, 10, time = 50, one_per_turf = 1) recipes += new/datum/stack_recipe("knife grip", /obj/item/weapon/material/butterflyhandle, 4, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]") recipes += new/datum/stack_recipe("dark floor tile", /obj/item/stack/tile/floor_dark, 1, 4, 20) + recipes += new/datum/stack_recipe("roller bed", /obj/item/roller, 5, time = 30, on_floor = 1) /material/sandstone/generate_recipes() ..() @@ -99,6 +106,10 @@ recipes += new/datum/stack_recipe("reagent dispenser cartridge (small)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/small, 1, on_floor=0) // 100u recipes += new/datum/stack_recipe("white floor tile", /obj/item/stack/tile/floor_white, 1, 4, 20) recipes += new/datum/stack_recipe("freezer floor tile", /obj/item/stack/tile/floor_freezer, 1, 4, 20) + recipes += new/datum/stack_recipe("shower curtain", /obj/structure/curtain, 4, time = 15, one_per_turf = 1, on_floor = 1) + recipes += new/datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 4, time = 25, one_per_turf = 1, on_floor = 1) + recipes += new/datum/stack_recipe("airtight plastic flaps", /obj/structure/plasticflaps/mining, 5, time = 25, one_per_turf = 1, on_floor = 1) + recipes += new/datum/stack_recipe("water-cooler", /obj/structure/reagent_dispensers/water_cooler, 4, time = 1, one_per_turf = 1, on_floor = 1) /material/wood/generate_recipes() ..() @@ -110,6 +121,7 @@ recipes += new/datum/stack_recipe("beehive assembly", /obj/item/beehive_assembly, 4) recipes += new/datum/stack_recipe("beehive frame", /obj/item/honey_frame, 1) recipes += new/datum/stack_recipe("book shelf", /obj/structure/bookcase, 5, time = 15, one_per_turf = 1, on_floor = 1) + recipes += new/datum/stack_recipe("noticeboard frame", /obj/item/frame/noticeboard, 4, time = 5, one_per_turf = 0, on_floor = 1) /material/cardboard/generate_recipes() ..() diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm index 760303ac23..25edc57728 100644 --- a/code/modules/materials/materials.dm +++ b/code/modules/materials/materials.dm @@ -128,7 +128,7 @@ var/list/name_to_material S.add_fingerprint(user) S.add_to_stacks(user) -/material/proc/build_wired_product(var/mob/user, var/obj/item/stack/used_stack, var/obj/item/stack/target_stack) +/material/proc/build_wired_product(var/mob/living/user, var/obj/item/stack/used_stack, var/obj/item/stack/target_stack) if(!wire_product) user << "You cannot make anything out of \the [target_stack]" return @@ -140,8 +140,7 @@ var/list/name_to_material target_stack.use(1) user << "You attach wire to the [name]." var/obj/item/product = new wire_product(get_turf(user)) - if(!(user.l_hand && user.r_hand)) - user.put_in_hands(product) + user.put_in_hands(product) // Make sure we have a display name and shard icon even if they aren't explicitly set. /material/New() diff --git a/code/modules/mining/drilling/drill.dm b/code/modules/mining/drilling/drill.dm index 381072871f..baa3306c88 100644 --- a/code/modules/mining/drilling/drill.dm +++ b/code/modules/mining/drilling/drill.dm @@ -9,6 +9,7 @@ name = "mining drill head" desc = "An enormous drill." icon_state = "mining_drill" + circuit = /obj/item/weapon/circuitboard/miningdrill var/braces_needed = 2 var/list/supports = list() var/supported = 0 @@ -43,7 +44,6 @@ ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/miningdrill(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/capacitor(src) component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 7a2783767b..8e9155d044 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -172,10 +172,9 @@ var/list/mining_overlay_cache = list() if(istype(AM,/mob/living/carbon/human)) var/mob/living/carbon/human/H = AM - if((istype(H.l_hand,/obj/item/weapon/pickaxe)) && (!H.hand)) - attackby(H.l_hand,H) - else if((istype(H.r_hand,/obj/item/weapon/pickaxe)) && H.hand) - attackby(H.r_hand,H) + var/obj/item/weapon/pickaxe/P = H.get_inactive_hand() + if(istype(P)) + src.attackby(P, H) else if(istype(AM,/mob/living/silicon/robot)) var/mob/living/silicon/robot/R = AM diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 77eedec900..d5fde7978d 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -1,43 +1,3 @@ -//This proc is called whenever someone clicks an inventory ui slot. -/mob/proc/attack_ui(slot) - var/obj/item/W = get_active_hand() - if(istype(W)) - equip_to_slot_if_possible(W, slot) - -/mob/proc/put_in_any_hand_if_possible(obj/item/W as obj, del_on_fail = 0, disable_warning = 1, redraw_mob = 1) - if(equip_to_slot_if_possible(W, slot_l_hand, del_on_fail, disable_warning, redraw_mob)) - return 1 - else if(equip_to_slot_if_possible(W, slot_r_hand, del_on_fail, disable_warning, redraw_mob)) - return 1 - return 0 - -//This is a SAFE proc. Use this instead of equip_to_slot()! -//set del_on_fail to have it delete W if it fails to equip -//set disable_warning to disable the 'you are unable to equip that' warning. -//unset redraw_mob to prevent the mob from being redrawn at the end. -/mob/proc/equip_to_slot_if_possible(obj/item/W as obj, slot, del_on_fail = 0, disable_warning = 0, redraw_mob = 1) - if(!istype(W)) return 0 - - if(!W.mob_can_equip(src, slot)) - if(del_on_fail) - qdel(W) - else - if(!disable_warning) - src << "\red You are unable to equip that." //Only print if del_on_fail is false - return 0 - - equip_to_slot(W, slot, redraw_mob) //This proc should not ever fail. - return 1 - -//This is an UNSAFE proc. It merely handles the actual job of equipping. All the checks on whether you can or can't eqip need to be done before! Use mob_can_equip() for that task. -//In most cases you will want to use equip_to_slot_if_possible() -/mob/proc/equip_to_slot(obj/item/W as obj, slot) - return - -//This is just a commonly used configuration for the equip_to_slot_if_possible() proc, used to equip people when the rounds tarts and when events happen and such. -/mob/proc/equip_to_slot_or_del(obj/item/W as obj, slot) - return equip_to_slot_if_possible(W, slot, 1, 1, 0) - //The list of slots by priority. equip_to_appropriate_slot() uses this list. Doesn't matter if a mob type doesn't have a slot. var/list/slot_equipment_priority = list( \ slot_back,\ @@ -58,6 +18,49 @@ var/list/slot_equipment_priority = list( \ slot_r_store\ ) +/mob + var/obj/item/weapon/storage/s_active = null // Even ghosts can/should be able to peek into boxes on the ground + +//This proc is called whenever someone clicks an inventory ui slot. +/mob/proc/attack_ui(var/slot) + var/obj/item/W = get_active_hand() + if(istype(W)) + equip_to_slot_if_possible(W, slot) + +/* Inventory manipulation */ + +/mob/proc/put_in_any_hand_if_possible(obj/item/W as obj, del_on_fail = 0, disable_warning = 1, redraw_mob = 1) + if(equip_to_slot_if_possible(W, slot_l_hand, del_on_fail, disable_warning, redraw_mob)) + return 1 + else if(equip_to_slot_if_possible(W, slot_r_hand, del_on_fail, disable_warning, redraw_mob)) + return 1 + return 0 + +//This is a SAFE proc. Use this instead of equip_to_slot()! +//set del_on_fail to have it delete W if it fails to equip +//set disable_warning to disable the 'you are unable to equip that' warning. +//unset redraw_mob to prevent the mob from being redrawn at the end. +/mob/proc/equip_to_slot_if_possible(obj/item/W as obj, slot, del_on_fail = 0, disable_warning = 0, redraw_mob = 1) + if(!W.mob_can_equip(src, slot)) + if(del_on_fail) + qdel(W) + else + if(!disable_warning) + src << "\red You are unable to equip that." //Only print if del_on_fail is false + return 0 + + equip_to_slot(W, slot, redraw_mob) //This proc should not ever fail. + return 1 + +//This is an UNSAFE proc. It merely handles the actual job of equipping. All the checks on whether you can or can't eqip need to be done before! Use mob_can_equip() for that task. +//In most cases you will want to use equip_to_slot_if_possible() +/mob/proc/equip_to_slot(obj/item/W as obj, slot) + return + +//This is just a commonly used configuration for the equip_to_slot_if_possible() proc, used to equip people when the rounds tarts and when events happen and such. +/mob/proc/equip_to_slot_or_del(obj/item/W as obj, slot) + return equip_to_slot_if_possible(W, slot, 1, 1, 0) + //Checks if a given slot can be accessed at this time, either to equip or unequip I /mob/proc/slot_is_accessible(var/slot, var/obj/item/I, mob/user=null) return 1 @@ -65,8 +68,6 @@ var/list/slot_equipment_priority = list( \ //puts the item "W" into an appropriate slot in a human's inventory //returns 0 if it cannot, 1 if successful /mob/proc/equip_to_appropriate_slot(obj/item/W) - if(!istype(W)) return 0 - for(var/slot in slot_equipment_priority) if(equip_to_slot_if_possible(W, slot, del_on_fail=0, disable_warning=1, redraw_mob=1)) return 1 @@ -74,32 +75,15 @@ var/list/slot_equipment_priority = list( \ return 0 /mob/proc/equip_to_storage(obj/item/newitem) - // Try put it in their backpack - if(istype(src.back,/obj/item/weapon/storage)) - var/obj/item/weapon/storage/backpack = src.back - if(backpack.contents.len < backpack.storage_slots) - newitem.forceMove(src.back) - return 1 - - // Try to place it in any item that can store stuff, on the mob. - for(var/obj/item/weapon/storage/S in src.contents) - if (S.contents.len < S.storage_slots) - newitem.forceMove(S) - return 1 return 0 -//These procs handle putting s tuff in your hand. It's probably best to use these rather than setting l_hand = ...etc -//as they handle all relevant stuff like adding it to the player's screen and updating their overlays. +/* Hands */ //Returns the thing in our active hand /mob/proc/get_active_hand() - if(hand) return l_hand - else return r_hand //Returns the thing in our inactive hand /mob/proc/get_inactive_hand() - if(hand) return r_hand - else return l_hand //Puts the item into your l_hand if possible and calls all necessary triggers/updates. returns 1 on success. /mob/proc/put_in_l_hand(var/obj/item/W) @@ -150,16 +134,15 @@ var/list/slot_equipment_priority = list( \ //Drops the item in our left hand /mob/proc/drop_l_hand(var/atom/Target) - return drop_from_inventory(l_hand, Target) + return 0 //Drops the item in our right hand /mob/proc/drop_r_hand(var/atom/Target) - return drop_from_inventory(r_hand, Target) + return 0 //Drops the item in our active hand. TODO: rename this to drop_active_hand or something /mob/proc/drop_item(var/atom/Target) - if(hand) return drop_l_hand(Target) - else return drop_r_hand(Target) + return /* Removes the object from any slots the mob might have, calling the appropriate icon update proc. @@ -173,19 +156,6 @@ var/list/slot_equipment_priority = list( \ the search through all the slots, without having to duplicate the rest of the item dropping. */ /mob/proc/u_equip(obj/W as obj) - if (W == r_hand) - r_hand = null - update_inv_r_hand(0) - else if (W == l_hand) - l_hand = null - update_inv_l_hand(0) - else if (W == back) - back = null - update_inv_back(0) - else if (W == wear_mask) - wear_mask = null - update_inv_wear_mask(0) - return /mob/proc/isEquipped(obj/item/I) if(!I) @@ -229,11 +199,6 @@ var/list/slot_equipment_priority = list( \ //Returns the item equipped to the specified slot, if any. /mob/proc/get_equipped_item(var/slot) - switch(slot) - if(slot_l_hand) return l_hand - if(slot_r_hand) return r_hand - if(slot_back) return back - if(slot_wear_mask) return wear_mask return null //Outdated but still in use apparently. This should at least be a human proc. diff --git a/code/modules/mob/living/bot/floorbot.dm b/code/modules/mob/living/bot/floorbot.dm index 30e137c21a..783af91c65 100644 --- a/code/modules/mob/living/bot/floorbot.dm +++ b/code/modules/mob/living/bot/floorbot.dm @@ -288,7 +288,7 @@ /* Assembly */ -/obj/item/weapon/storage/toolbox/mechanical/attackby(var/obj/item/stack/tile/floor/T, mob/user as mob) +/obj/item/weapon/storage/toolbox/mechanical/attackby(var/obj/item/stack/tile/floor/T, mob/living/user as mob) if(!istype(T, /obj/item/stack/tile/floor)) ..() return diff --git a/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm b/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm index b9338f361f..9bf9e62dfb 100644 --- a/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm +++ b/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm @@ -2,7 +2,7 @@ var/mob/living/carbon/human/H = over_object if(!istype(H) || !Adjacent(H)) return ..() - if(H.a_intent == "grab" && hat && !(H.l_hand && H.r_hand)) + if(H.a_intent == "grab" && hat && !H.hands_are_full()) hat.loc = get_turf(src) H.put_in_hands(hat) H.visible_message("\The [H] removes \the [src]'s [hat].") diff --git a/code/modules/mob/living/carbon/give.dm b/code/modules/mob/living/carbon/give.dm index 5c4be494ee..14c8efbbad 100644 --- a/code/modules/mob/living/carbon/give.dm +++ b/code/modules/mob/living/carbon/give.dm @@ -3,40 +3,40 @@ set name = "Give" // TODO : Change to incapacitated() on merge. - if(usr.stat || usr.lying || usr.resting || usr.buckled) + if(src.stat || src.lying || src.resting || src.buckled) return if(!istype(target) || target.stat || target.lying || target.resting || target.buckled || target.client == null) return - var/obj/item/I = usr.get_active_hand() + var/obj/item/I = src.get_active_hand() if(!I) - I = usr.get_inactive_hand() + I = src.get_inactive_hand() if(!I) - usr << "You don't have anything in your hands to give to \the [target]." + src << "You don't have anything in your hands to give to \the [target]." return - if(alert(target,"[usr] wants to give you \a [I]. Will you accept it?",,"No","Yes") == "No") - target.visible_message("\The [usr] tried to hand \the [I] to \the [target], \ + if(alert(target,"[src] wants to give you \a [I]. Will you accept it?",,"No","Yes") == "No") + target.visible_message("\The [src] tried to hand \the [I] to \the [target], \ but \the [target] didn't want it.") return if(!I) return if(!Adjacent(target)) - usr << "You need to stay in reaching distance while giving an object." - target << "\The [usr] moved too far away." + src << "You need to stay in reaching distance while giving an object." + target << "\The [src] moved too far away." return - if(I.loc != usr || (usr.l_hand != I && usr.r_hand != I)) - usr << "You need to keep the item in your hands." - target << "\The [usr] seems to have given up on passing \the [I] to you." + if(I.loc != src || !src.item_is_in_hands(I)) + src << "You need to keep the item in your hands." + target << "\The [src] seems to have given up on passing \the [I] to you." return - if(target.r_hand != null && target.l_hand != null) + if(target.hands_are_full()) target << "Your hands are full." - usr << "Their hands are full." + src << "Their hands are full." return - if(usr.unEquip(I)) + if(src.unEquip(I)) target.put_in_hands(I) // If this fails it will just end up on the floor, but that's fitting for things like dionaea. - target.visible_message("\The [usr] handed \the [I] to \the [target].") + target.visible_message("\The [src] handed \the [I] to \the [target].") diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 885d3e0866..87c0524571 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -538,9 +538,9 @@ if ("handshake") m_type = 1 if (!src.restrained() && !src.r_hand) - var/mob/M = null + var/mob/living/M = null if (param) - for (var/mob/A in view(1, null)) + for (var/mob/living/A in view(1, null)) if (param == A.name) M = A break diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 37034b29ca..74d8b54a93 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1115,9 +1115,11 @@ spawn(0) regenerate_icons() if(vessel.total_volume < species.blood_volume) + vessel.maximum_volume = species.blood_volume vessel.add_reagent("blood", species.blood_volume - vessel.total_volume) else if(vessel.total_volume > species.blood_volume) vessel.remove_reagent("blood", vessel.total_volume - species.blood_volume) + vessel.maximum_volume = species.blood_volume fixblood() // Rebuild the HUD. If they aren't logged in then login() should reinstantiate it for them. diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index a8222dc280..797b9b1fe6 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -207,7 +207,7 @@ var/covered = 0 // Basic coverage can help. for(var/obj/item/clothing/clothes in H) - if(H.l_hand == clothes|| H.r_hand == clothes) + if(H.item_is_in_hands(clothes)) continue if((clothes.body_parts_covered & UPPER_TORSO) && (clothes.body_parts_covered & LOWER_TORSO)) covered = 1 diff --git a/code/modules/mob/living/inventory.dm b/code/modules/mob/living/inventory.dm new file mode 100644 index 0000000000..1cd446eaec --- /dev/null +++ b/code/modules/mob/living/inventory.dm @@ -0,0 +1,172 @@ +/mob/living + var/hand = null + var/obj/item/l_hand = null + var/obj/item/r_hand = null + var/obj/item/weapon/back = null//Human/Monkey + var/obj/item/weapon/tank/internal = null//Human/Monkey + var/obj/item/clothing/mask/wear_mask = null//Carbon + +/mob/living/equip_to_storage(obj/item/newitem) + // Try put it in their backpack + if(istype(src.back,/obj/item/weapon/storage)) + var/obj/item/weapon/storage/backpack = src.back + if(backpack.contents.len < backpack.storage_slots) + newitem.forceMove(src.back) + return 1 + + // Try to place it in any item that can store stuff, on the mob. + for(var/obj/item/weapon/storage/S in src.contents) + if (S.contents.len < S.storage_slots) + newitem.forceMove(S) + return 1 + return 0 + +//Returns the thing in our active hand +/mob/living/get_active_hand() + if(hand) return l_hand + else return r_hand + +//Returns the thing in our inactive hand +/mob/living/get_inactive_hand() + if(hand) return r_hand + else return l_hand + +//Drops the item in our active hand. TODO: rename this to drop_active_hand or something +/mob/living/drop_item(var/atom/Target) + if(hand) return drop_l_hand(Target) + else return drop_r_hand(Target) + +//Drops the item in our left hand +/mob/living/drop_l_hand(var/atom/Target) + return drop_from_inventory(l_hand, Target) + +//Drops the item in our right hand +/mob/living/drop_r_hand(var/atom/Target) + return drop_from_inventory(r_hand, Target) + +/mob/living/proc/hands_are_full() + return (r_hand && l_hand) + +/mob/living/proc/item_is_in_hands(var/obj/item/I) + return (I == r_hand || I == l_hand) + +/mob/living/proc/update_held_icons() + if(l_hand) + l_hand.update_held_icon() + if(r_hand) + r_hand.update_held_icon() + +/mob/living/proc/get_type_in_hands(var/T) + if(istype(l_hand, T)) + return l_hand + if(istype(r_hand, T)) + return r_hand + return null + +/mob/living/proc/get_left_hand() + return l_hand + +/mob/living/proc/get_right_hand() + return r_hand + +/mob/living/u_equip(obj/W as obj) + if (W == r_hand) + r_hand = null + update_inv_r_hand(0) + else if (W == l_hand) + l_hand = null + update_inv_l_hand(0) + else if (W == back) + back = null + update_inv_back(0) + else if (W == wear_mask) + wear_mask = null + update_inv_wear_mask(0) + return + +/mob/living/get_equipped_item(var/slot) + switch(slot) + if(slot_l_hand) return l_hand + if(slot_r_hand) return r_hand + if(slot_back) return back + if(slot_wear_mask) return wear_mask + return null + +/mob/living/show_inv(mob/user as mob) + user.set_machine(src) + var/dat = {" +