From 1b1ed21f42eaaa5b5d888efe182803508440f99e Mon Sep 17 00:00:00 2001 From: BlackMajor Date: Tue, 19 Nov 2019 22:13:22 +1300 Subject: [PATCH 01/64] No adrenals for borgs please --- code/game/objects/items/robot/robot_upgrades.dm | 4 +++- code/modules/mob/living/silicon/robot/robot.dm | 2 ++ .../code/modules/mob/living/silicon/robot/robot_movement.dm | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 6e6db2feae..1f367c7d92 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -74,7 +74,7 @@ /obj/item/borg/upgrade/vtec/action(mob/living/silicon/robot/R, user = usr) . = ..() if(.) - if(R.speed < 0) + if(!R.cansprint) to_chat(R, "A VTEC unit is already installed!") to_chat(user, "There's no room for another VTEC unit!") return FALSE @@ -82,11 +82,13 @@ //R.speed = -2 // Gotta go fast. //Citadel change - makes vtecs give an ability rather than reducing the borg's speed instantly R.AddAbility(new/obj/effect/proc_holder/silicon/cyborg/vtecControl) + R.cansprint = 0 /obj/item/borg/upgrade/vtec/deactivate(mob/living/silicon/robot/R, user = usr) . = ..() if (.) R.speed = initial(R.speed) + R.cansprint = 1 /obj/item/borg/upgrade/disablercooler name = "cyborg rapid energy blaster cooling module" diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 6dcd0a8cc9..84474f72db 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -112,6 +112,8 @@ var/bellyup = 0 var/dogborg = FALSE + var/cansprint = 1 + /mob/living/silicon/robot/get_cell() return cell diff --git a/modular_citadel/code/modules/mob/living/silicon/robot/robot_movement.dm b/modular_citadel/code/modules/mob/living/silicon/robot/robot_movement.dm index 28327cde0e..a7405883a4 100644 --- a/modular_citadel/code/modules/mob/living/silicon/robot/robot_movement.dm +++ b/modular_citadel/code/modules/mob/living/silicon/robot/robot_movement.dm @@ -14,7 +14,7 @@ . += speed /mob/living/silicon/robot/proc/togglesprint(shutdown = FALSE) //Basically a copypaste of the proc from /mob/living/carbon/human - if(!shutdown && (!cell || cell.charge < 25)) + if(!shutdown && !cansprint && (!cell || cell.charge < 25)) return FALSE sprinting = shutdown ? FALSE : !sprinting if(!resting && canmove) From d4f6bc67ca718aba76b1f1d414e4ac9b43734457 Mon Sep 17 00:00:00 2001 From: BlackMajor Date: Tue, 19 Nov 2019 22:41:39 +1300 Subject: [PATCH 02/64] Whoops that cansprint is in the wrong place --- .../code/modules/mob/living/silicon/robot/robot_movement.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modular_citadel/code/modules/mob/living/silicon/robot/robot_movement.dm b/modular_citadel/code/modules/mob/living/silicon/robot/robot_movement.dm index a7405883a4..59630186d1 100644 --- a/modular_citadel/code/modules/mob/living/silicon/robot/robot_movement.dm +++ b/modular_citadel/code/modules/mob/living/silicon/robot/robot_movement.dm @@ -14,7 +14,7 @@ . += speed /mob/living/silicon/robot/proc/togglesprint(shutdown = FALSE) //Basically a copypaste of the proc from /mob/living/carbon/human - if(!shutdown && !cansprint && (!cell || cell.charge < 25)) + if(!shutdown && (!cell || cell.charge < 25) || !cansprint) return FALSE sprinting = shutdown ? FALSE : !sprinting if(!resting && canmove) From c40cad165818b0d6524947e101fa339c787afb91 Mon Sep 17 00:00:00 2001 From: Putnam Date: Wed, 20 Nov 2019 19:01:59 -0800 Subject: [PATCH 03/64] Starting an explosion rework, fun fun --- .../mob/living/carbon/human/human_defense.dm | 31 +++++++------------ 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 2ab7c6d404..37a76ea5b2 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -386,43 +386,34 @@ return var/b_loss = 0 var/f_loss = 0 - var/bomb_armor = getarmor(null, "bomb") + var/bomb_armor = max(0,(100-getarmor(null, "bomb"))/100) switch (severity) if (1) - if(prob(bomb_armor)) - b_loss = 500 + if(bomb_armor) + b_loss = 500*bomb_armor var/atom/throw_target = get_edge_target_turf(src, get_dir(src, get_step_away(src, src))) throw_at(throw_target, 200, 4) - damage_clothes(400 - bomb_armor, BRUTE, "bomb") + damage_clothes(400*bomb_armor, BRUTE, "bomb") else - for(var/I in contents) - var/atom/A = I - A.ex_act(severity) + damage_clothes(400,BRUTE,"bomb") gib() return if (2) - b_loss = 60 - f_loss = 60 - if(bomb_armor) - b_loss = 30*(2 - round(bomb_armor*0.01, 0.05)) - f_loss = b_loss - damage_clothes(200 - bomb_armor, BRUTE, "bomb") + b_loss = 60*bomb_armor + f_loss = 60*bomb_armor + damage_clothes(200*bomb_armor, BRUTE, "bomb") if (!istype(ears, /obj/item/clothing/ears/earmuffs)) adjustEarDamage(30, 120) - if (prob(max(70 - (bomb_armor * 0.5), 0))) - Unconscious(200) + Unconscious(200*bomb_armor) if(3) - b_loss = 30 - if(bomb_armor) - b_loss = 15*(2 - round(bomb_armor*0.01, 0.05)) + b_loss = 30*bomb_armor damage_clothes(max(50 - bomb_armor, 0), BRUTE, "bomb") if (!istype(ears, /obj/item/clothing/ears/earmuffs)) adjustEarDamage(15,60) - if (prob(max(50 - (bomb_armor * 0.5), 0))) - Unconscious(160) + Unconscious(100*bomb_armor) take_overall_damage(b_loss,f_loss) From eef3ec090d8714fedefb9e0a171be2729cc4fd84 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Wed, 27 Nov 2019 22:43:15 +0100 Subject: [PATCH 04/64] i wonder if chmod permissions are retained after resetting a branch. --- .editorconfig | 4 + .travis.yml | 78 +++++++++--------- dependencies.sh | 6 ++ tools/json_verifier.py | 19 ++--- tools/travis/before_build_tools.sh | 7 -- tools/travis/build_bsql.sh | 21 +++++ tools/travis/build_byond.sh | 80 ------------------- tools/travis/build_dependencies.sh | 55 ------------- tools/travis/build_tgui.sh | 7 ++ tools/travis/build_tools.sh | 16 ---- tools/travis/check_changelogs.sh | 5 ++ tools/travis/check_grep.sh | 49 ++++++++++++ tools/travis/install_build_tools.sh | 15 ++-- ...before_build_byond.sh => install_byond.sh} | 12 +-- tools/travis/install_dreamchecker.sh | 8 ++ tools/travis/install_libmariadb.sh | 15 ++++ tools/travis/install_rust_g.sh | 8 ++ tools/travis/run_server.sh | 14 ++++ tools/travis/template_dm_generator.py | 1 - 19 files changed, 197 insertions(+), 223 deletions(-) delete mode 100755 tools/travis/before_build_tools.sh create mode 100644 tools/travis/build_bsql.sh delete mode 100755 tools/travis/build_byond.sh delete mode 100755 tools/travis/build_dependencies.sh create mode 100644 tools/travis/build_tgui.sh delete mode 100755 tools/travis/build_tools.sh create mode 100644 tools/travis/check_changelogs.sh create mode 100644 tools/travis/check_grep.sh rename tools/travis/{before_build_byond.sh => install_byond.sh} (67%) mode change 100755 => 100644 create mode 100644 tools/travis/install_dreamchecker.sh create mode 100644 tools/travis/install_libmariadb.sh create mode 100644 tools/travis/install_rust_g.sh create mode 100644 tools/travis/run_server.sh diff --git a/.editorconfig b/.editorconfig index a25dbdfc85..df93ae3a16 100644 --- a/.editorconfig +++ b/.editorconfig @@ -2,3 +2,7 @@ insert_final_newline = true indent_style = tab indent_size = 4 + +[*.yml] +indent_style = space +indent_size = 2 diff --git a/.travis.yml b/.travis.yml index bef3a69ad7..ab3b1003c3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,28 +1,34 @@ language: generic -sudo: false dist: xenial +sudo: false + branches: except: - ___TGS3TempBranch - ___TGSTempBranch + matrix: include: - - env: - - BUILD_TOOLS=true - name: "Build Tools" + - name: "Run Linters" addons: apt: packages: - python3 - python3-pip - python3-setuptools - cache: - directories: - - tgui/node_modules - - env: - - BUILD_TESTING=true - - BUILD_TOOLS=false - name: "Build All Maps" + install: + - tools/travis/install_build_tools.sh + - tools/travis/install_dreamchecker.sh + script: + - tools/travis/check_filedirs.sh tgstation.dme + - tools/travis/check_changelogs.sh + - find . -name "*.php" -print0 | xargs -0 -n1 php -l + - find . -name "*.json" -not -path "./tgui/node_modules/*" -print0 | xargs -0 python3 ./tools/json_verifier.py + - tools/travis/build_tgui.sh + - tools/travis/check_grep.sh + - ~/dreamchecker + + - name: "Compile All Maps" addons: apt: packages: @@ -30,10 +36,15 @@ matrix: cache: directories: - $HOME/BYOND - - env: - - BUILD_TESTING=false - - BUILD_TOOLS=false - name: "Build and Run Unit Tests" + install: + - tools/travis/install_byond.sh + - source $HOME/BYOND/byond/bin/byondsetup + before_script: + - tools/travis/template_dm_generator.py + script: + - tools/travis/dm.sh -DTRAVISBUILDING -DTRAVISTESTING -DALL_MAPS tgstation.dme + + - name: "Compile and Run Tests" addons: mariadb: '10.2' apt: @@ -41,7 +52,6 @@ matrix: - ubuntu-toolchain-r-test packages: - libstdc++6:i386 - - libssl-dev:i386 - gcc-multilib - g++-7 - g++-7-multilib @@ -49,25 +59,19 @@ matrix: - libmariadbd-dev cache: directories: - - $HOME/.cargo - $HOME/BYOND - - $HOME/MariaDB - - $HOME/.rustup - -install: - - tools/travis/install_build_tools.sh - - if [ $BUILD_TOOLS = false ] && [ $BUILD_TESTING = false ]; then mysql -u root -e 'CREATE DATABASE tg_travis;'; fi - - if [ $BUILD_TOOLS = false ] && [ $BUILD_TESTING = false ]; then mysql -u root tg_travis < SQL/tgstation_schema.sql; fi - - if [ $BUILD_TOOLS = false ] && [ $BUILD_TESTING = false ]; then mysql -u root -e 'CREATE DATABASE tg_travis_prefixed;'; fi - - if [ $BUILD_TOOLS = false ] && [ $BUILD_TESTING = false ]; then mysql -u root tg_travis_prefixed < SQL/tgstation_schema_prefixed.sql; fi - -before_script: - - tools/travis/before_build_tools.sh - - tools/travis/before_build_byond.sh - -script: - - tools/travis/check_filedirs.sh tgstation.dme - - tools/travis/build_tools.sh || travis_terminate 1 - - tools/travis/build_dependencies.sh || travis_terminate 1 - - tools/travis/build_byond.sh - + - $HOME/libmariadb + install: + - tools/travis/install_byond.sh + - source $HOME/BYOND/byond/bin/byondsetup + - tools/travis/install_libmariadb.sh + - tools/travis/install_rust_g.sh + before_script: + - mysql -u root -e 'CREATE DATABASE tg_travis;' + - mysql -u root tg_travis < SQL/tgstation_schema.sql + - mysql -u root -e 'CREATE DATABASE tg_travis_prefixed;' + - mysql -u root tg_travis_prefixed < SQL/tgstation_schema_prefixed.sql + - tools/travis/build_bsql.sh + script: + - tools/travis/dm.sh -DTRAVISBUILDING tgstation.dme || travis_terminate 1 + - tools/travis/run_server.sh diff --git a/dependencies.sh b/dependencies.sh index a75940088f..0f66dcab1a 100644 --- a/dependencies.sh +++ b/dependencies.sh @@ -18,3 +18,9 @@ export BSQL_VERSION=v1.4.0.0 #node version export NODE_VERSION=8 + +# PHP version +export PHP_VERSION=5.6 + +# SpacemanDMM git tag +export SPACEMAN_DMM_VERSION=suite-1.0 diff --git a/tools/json_verifier.py b/tools/json_verifier.py index 04c8670705..dbba811205 100644 --- a/tools/json_verifier.py +++ b/tools/json_verifier.py @@ -4,16 +4,17 @@ import json if len(sys.argv) <= 1: exit(1) -files = filter(len, sys.argv[1].split('\n')) -msg = [] -for file in files: +status = 0 + +for file in sys.argv[1:]: with open(file, encoding="ISO-8859-1") as f: try: json.load(f) except ValueError as exception: - msg.append("JSON synxtax error on file: {}".format(file)) - msg.append(str(exception)) -if msg: - print("\n".join(msg)) - exit(1) -exit(0) + print("JSON error in {}".format(file)) + print(exception) + status = 1 + else: + print("Valid {}".format(file)) + +exit(status) diff --git a/tools/travis/before_build_tools.sh b/tools/travis/before_build_tools.sh deleted file mode 100755 index 2329de82b2..0000000000 --- a/tools/travis/before_build_tools.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -set -e - -if [ "$BUILD_TOOLS" = true ]; then - cd tgui && source ~/.nvm/nvm.sh && npm install && cd .. -fi; - diff --git a/tools/travis/build_bsql.sh b/tools/travis/build_bsql.sh new file mode 100644 index 0000000000..e2b281efc6 --- /dev/null +++ b/tools/travis/build_bsql.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +set -euo pipefail + +source dependencies.sh + +mkdir -p BSQL +cd BSQL +git init +git remote add origin https://github.com/tgstation/BSQL +git fetch --depth 1 origin $BSQL_VERSION +git checkout FETCH_HEAD + +mkdir -p artifacts +cd artifacts +export CXX=g++-7 +# The -D will be unnecessary past BSQL v1.4.0.0 +cmake .. -DMARIA_LIBRARY=/usr/lib/i386-linux-gnu/libmariadb.so +make + +mkdir -p ~/.byond/bin +ln -s $PWD/src/BSQL/libBSQL.so ../../libBSQL.so diff --git a/tools/travis/build_byond.sh b/tools/travis/build_byond.sh deleted file mode 100755 index 3a7e00df29..0000000000 --- a/tools/travis/build_byond.sh +++ /dev/null @@ -1,80 +0,0 @@ -#!/bin/bash - -#nb: must be bash to support shopt globstar -set -e -shopt -s globstar - -if [ "$BUILD_TOOLS" = false ]; then - if grep -E '^\".+\" = \(.+\)' _maps/**/*.dmm; then - echo "Non-TGM formatted map detected. Please convert it using Map Merger!" - exit 1 - fi; - if grep -P '^\ttag = \"icon' _maps/**/*.dmm; then - echo "tag vars from icon state generation detected in maps, please remove them." - exit 1 - fi; - if grep 'step_[xy]' _maps/**/*.dmm; then - echo "step_x/step_y variables detected in maps, please remove them." - exit 1 - fi; - if grep 'pixel_[xy] = 0' _maps/**/*.dmm; then - echo "pixel_x/pixel_y = 0 variables detected in maps, please review to ensure they are not dirty varedits." - fi; - if grep -P '\td[1-2] =' _maps/**/*.dmm; then - echo "d1/d2 cable variables detected in maps, please remove them." - exit 1 - fi; - if grep '^/area/.+[\{]' _maps/**/*.dmm; then - echo "Vareditted /area path use detected in maps, please replace with proper paths." - exit 1 - fi; - if grep '\W\/turf\s*[,\){]' _maps/**/*.dmm; then - echo "base /turf path use detected in maps, please replace with proper paths." - exit 1 - fi; - if grep '^/*var/' code/**/*.dm; then - echo "Unmanaged global var use detected in code, please use the helpers." - exit 1 - fi; - if grep -i 'centcomm' code/**/*.dm; then - echo "Misspelling(s) of CENTCOM detected in code, please remove the extra M(s)." - exit 1 - fi; - if grep -i 'centcomm' _maps/**/*.dmm; then - echo "Misspelling(s) of CENTCOM detected in maps, please remove the extra M(s)." - exit 1 - fi; - - source $HOME/BYOND/byond/bin/byondsetup - if [ "$BUILD_TESTING" = true ]; then - tools/travis/dm.sh -DTRAVISBUILDING -DTRAVISTESTING -DALL_MAPS tgstation.dme - else - tools/travis/dm.sh -DTRAVISBUILDING tgstation.dme - - tools/deploy.sh travis_test - mkdir travis_test/config - - #test config - cp tools/travis/travis_config.txt travis_test/config/config.txt - - # get libmariadb, cache it so limmex doesn't get angery - if [ -f $HOME/libmariadb ]; then - #travis likes to interpret the cache command as it being a file for some reason - rm $HOME/libmariadb - fi - mkdir -p $HOME/libmariadb - if [ ! -f $HOME/libmariadb/libmariadb.so ]; then - wget http://www.byond.com/download/db/mariadb_client-2.0.0-linux.tgz - tar -xvf mariadb_client-2.0.0-linux.tgz - mv mariadb_client-2.0.0-linux/libmariadb.so $HOME/libmariadb/libmariadb.so - rm -rf mariadb_client-2.0.0-linux.tgz mariadb_client-2.0.0-linux - fi - - cd travis_test - ln -s $HOME/libmariadb/libmariadb.so libmariadb.so - DreamDaemon tgstation.dmb -close -trusted -verbose -params "test-run&log-directory=travis" - cd .. - cat travis_test/data/logs/travis/clean_run.lk - - fi; -fi; diff --git a/tools/travis/build_dependencies.sh b/tools/travis/build_dependencies.sh deleted file mode 100755 index 2c24bdbaaf..0000000000 --- a/tools/travis/build_dependencies.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env bash - -set -e - -source dependencies.sh - -#ensure the Dockerfile version matches the dependencies.sh version -line=$(head -n 1 Dockerfile) -if [[ $line != *"$BYOND_MAJOR.$BYOND_MINOR"* ]]; then - echo "Dockerfile BYOND version in FROM command does not match dependencies.sh (Or it's not on line 1)!" - exit 1 -fi - -if [ $BUILD_TOOLS = false ] && [ $BUILD_TESTING = false ]; then - curl https://sh.rustup.rs -sSf | sh -s -- -y --default-host i686-unknown-linux-gnu - source ~/.profile - - mkdir rust-g - cd rust-g - git init - git remote add origin https://github.com/tgstation/rust-g - git fetch --depth 1 origin $RUST_G_VERSION - git checkout FETCH_HEAD - cargo build --release - cmp target/rust_g.dm ../code/__DEFINES/rust_g.dm - - mkdir -p ~/.byond/bin - ln -s $PWD/target/release/librust_g.so ~/.byond/bin/rust_g - - mkdir -p ../BSQL/artifacts - cd ../BSQL - git init - git remote add origin https://github.com/tgstation/BSQL - git fetch --depth 1 origin $BSQL_VERSION - git checkout FETCH_HEAD - - if [ -f "$HOME/MariaDB/libmariadb.so.2" ] && [ -f "$HOME/MariaDB/libmariadb.so" ] && [ -d "$HOME/MariaDB/include" ]; - then - echo "Using cached MariaDB library." - else - echo "Setting up MariaDB." - rm -rf "$HOME/MariaDB" - mkdir -p "$HOME/MariaDB" - mkdir -p "$HOME/MariaDB/include" - cp /usr/lib/i386-linux-gnu/libmariadb.so.2 $HOME/MariaDB/ - ln -s $HOME/MariaDB/libmariadb.so.2 $HOME/MariaDB/libmariadb.so - cp -r /usr/include/mariadb $HOME/MariaDB/include/ - fi - - cd artifacts - export CXX=g++-7 - cmake .. -DMARIA_INCLUDE_DIR=$HOME/MariaDB/include - make - mv src/BSQL/libBSQL.so ../../ -fi diff --git a/tools/travis/build_tgui.sh b/tools/travis/build_tgui.sh new file mode 100644 index 0000000000..0141f3e117 --- /dev/null +++ b/tools/travis/build_tgui.sh @@ -0,0 +1,7 @@ +#!/bin/bash +set -euo pipefail + +cd tgui +source ~/.nvm/nvm.sh +npm ci +node node_modules/gulp/bin/gulp.js --min diff --git a/tools/travis/build_tools.sh b/tools/travis/build_tools.sh deleted file mode 100755 index eaccd64c8c..0000000000 --- a/tools/travis/build_tools.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -#must also be bash for the md5sum commands -set -e - -if [ "$BUILD_TOOLS" = true ]; -then - md5sum -c - <<< "49bc6b1b9ed56c83cceb6674bd97cb34 *html/changelogs/example.yml"; - (cd tgui && source ~/.nvm/nvm.sh && npm ci && node node_modules/gulp/bin/gulp.js --min) - phpenv global 5.6 - php -l tools/WebhookProcessor/github_webhook_processor.php; - php -l tools/TGUICompiler.php; - echo "Checking for JSON errors"; - find . -name "*.json" -not -path "./tgui/node_modules/*" | xargs -0 python3 ./tools/json_verifier.py; - python3 tools/ss13_genchangelog.py html/changelog.html html/changelogs; -fi; diff --git a/tools/travis/check_changelogs.sh b/tools/travis/check_changelogs.sh new file mode 100644 index 0000000000..e33c0e6df3 --- /dev/null +++ b/tools/travis/check_changelogs.sh @@ -0,0 +1,5 @@ +#!/bin/bash +set -euo pipefail + +md5sum -c - <<< "49bc6b1b9ed56c83cceb6674bd97cb34 *html/changelogs/example.yml" +python3 tools/ss13_genchangelog.py html/changelog.html html/changelogs diff --git a/tools/travis/check_grep.sh b/tools/travis/check_grep.sh new file mode 100644 index 0000000000..2117b570eb --- /dev/null +++ b/tools/travis/check_grep.sh @@ -0,0 +1,49 @@ +#!/bin/bash +set -euo pipefail + +#nb: must be bash to support shopt globstar +shopt -s globstar + +st=0 + +if grep -El '^\".+\" = \(.+\)' _maps/**/*.dmm; then + echo "Non-TGM formatted map detected. Please convert it using Map Merger!" + st=1 +fi; +if grep -P '^\ttag = \"icon' _maps/**/*.dmm; then + echo "tag vars from icon state generation detected in maps, please remove them." + st=1 +fi; +if grep 'step_[xy]' _maps/**/*.dmm; then + echo "step_x/step_y variables detected in maps, please remove them." + st=1 +fi; +if grep 'pixel_[xy] = 0' _maps/**/*.dmm; then + echo "pixel_x/pixel_y = 0 variables detected in maps, please review to ensure they are not dirty varedits." +fi; +if grep -P '\td[1-2] =' _maps/**/*.dmm; then + echo "d1/d2 cable variables detected in maps, please remove them." + st=1 +fi; +if grep '^/area/.+[\{]' _maps/**/*.dmm; then + echo "Vareditted /area path use detected in maps, please replace with proper paths." + st=1 +fi; +if grep '\W\/turf\s*[,\){]' _maps/**/*.dmm; then + echo "base /turf path use detected in maps, please replace with proper paths." + st=1 +fi; +if grep '^/*var/' code/**/*.dm; then + echo "Unmanaged global var use detected in code, please use the helpers." + st=1 +fi; +if grep -i 'centcomm' code/**/*.dm; then + echo "Misspelling(s) of CENTCOM detected in code, please remove the extra M(s)." + st=1 +fi; +if grep -i 'centcomm' _maps/**/*.dmm; then + echo "Misspelling(s) of CENTCOM detected in maps, please remove the extra M(s)." + st=1 +fi; + +exit $st diff --git a/tools/travis/install_build_tools.sh b/tools/travis/install_build_tools.sh index 0ea2a605ab..224687f088 100755 --- a/tools/travis/install_build_tools.sh +++ b/tools/travis/install_build_tools.sh @@ -1,11 +1,12 @@ #!/bin/bash -set -e +set -euo pipefail source dependencies.sh -if [ "$BUILD_TOOLS" = true ]; then - source ~/.nvm/nvm.sh - nvm install $NODE_VERSION - pip3 install --user PyYaml - pip3 install --user beautifulsoup4 -fi; +source ~/.nvm/nvm.sh +nvm install $NODE_VERSION + +pip3 install --user PyYaml +pip3 install --user beautifulsoup4 + +phpenv global $PHP_VERSION diff --git a/tools/travis/before_build_byond.sh b/tools/travis/install_byond.sh old mode 100755 new mode 100644 similarity index 67% rename from tools/travis/before_build_byond.sh rename to tools/travis/install_byond.sh index 55afb07ffe..4a688755d3 --- a/tools/travis/before_build_byond.sh +++ b/tools/travis/install_byond.sh @@ -1,15 +1,5 @@ #!/bin/bash -set -e - -#If this is the build tools step, we do not bother to install/build byond -if [ "$BUILD_TOOLS" = true ]; then - exit 0 -fi - -echo "Combining maps for building" -if [ $BUILD_TESTING = true ]; then - python tools/travis/template_dm_generator.py -fi +set -euo pipefail source dependencies.sh diff --git a/tools/travis/install_dreamchecker.sh b/tools/travis/install_dreamchecker.sh new file mode 100644 index 0000000000..4423e5aafb --- /dev/null +++ b/tools/travis/install_dreamchecker.sh @@ -0,0 +1,8 @@ +#!/bin/bash +set -euo pipefail + +source dependencies.sh + +wget -O ~/dreamchecker "https://github.com/SpaceManiac/SpacemanDMM/releases/download/$SPACEMAN_DMM_VERSION/dreamchecker" +chmod +x ~/dreamchecker +~/dreamchecker --version diff --git a/tools/travis/install_libmariadb.sh b/tools/travis/install_libmariadb.sh new file mode 100644 index 0000000000..d0ce4adc14 --- /dev/null +++ b/tools/travis/install_libmariadb.sh @@ -0,0 +1,15 @@ +#!/bin/bash +set -euo pipefail + +# get libmariadb, cache it so limmex doesn't get angery +if [ -f $HOME/libmariadb ]; then + #travis likes to interpret the cache command as it being a file for some reason + rm $HOME/libmariadb +fi +mkdir -p $HOME/libmariadb +if [ ! -f $HOME/libmariadb/libmariadb.so ]; then + wget http://www.byond.com/download/db/mariadb_client-2.0.0-linux.tgz + tar -xvf mariadb_client-2.0.0-linux.tgz + mv mariadb_client-2.0.0-linux/libmariadb.so $HOME/libmariadb/libmariadb.so + rm -rf mariadb_client-2.0.0-linux.tgz mariadb_client-2.0.0-linux +fi diff --git a/tools/travis/install_rust_g.sh b/tools/travis/install_rust_g.sh new file mode 100644 index 0000000000..227034af66 --- /dev/null +++ b/tools/travis/install_rust_g.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +set -euo pipefail + +source dependencies.sh + +mkdir -p ~/.byond/bin +wget -O ~/.byond/bin/rust_g "https://github.com/tgstation/rust-g/releases/download/$RUST_G_VERSION/librust_g.so" +chmod +x ~/.byond/bin/rust_g diff --git a/tools/travis/run_server.sh b/tools/travis/run_server.sh new file mode 100644 index 0000000000..975e8f6884 --- /dev/null +++ b/tools/travis/run_server.sh @@ -0,0 +1,14 @@ +#!/bin/bash +set -euo pipefail + +tools/deploy.sh travis_test +mkdir travis_test/config + +#test config +cp tools/travis/travis_config.txt travis_test/config/config.txt + +cd travis_test +ln -s $HOME/libmariadb/libmariadb.so libmariadb.so +DreamDaemon tgstation.dmb -close -trusted -verbose -params "test-run&log-directory=travis" +cd .. +cat travis_test/data/logs/travis/clean_run.lk diff --git a/tools/travis/template_dm_generator.py b/tools/travis/template_dm_generator.py index 89e1d2647d..970fba7db4 100755 --- a/tools/travis/template_dm_generator.py +++ b/tools/travis/template_dm_generator.py @@ -1,7 +1,6 @@ #!/usr/bin/env python import os -import os.path import sys folders = ["_maps/RandomRuins", "_maps/RandomZLevels", "_maps/shuttles", From 977340c6414c72389f6e883e65769cbd26cc24b1 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Wed, 27 Nov 2019 22:50:11 +0100 Subject: [PATCH 05/64] ahaha yea nope. --- tools/travis/build_bsql.sh | 0 tools/travis/build_tgui.sh | 0 tools/travis/check_changelogs.sh | 0 tools/travis/check_grep.sh | 0 tools/travis/install_byond.sh | 0 tools/travis/install_dreamchecker.sh | 0 tools/travis/install_libmariadb.sh | 0 tools/travis/install_rust_g.sh | 0 tools/travis/run_server.sh | 0 9 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 tools/travis/build_bsql.sh mode change 100644 => 100755 tools/travis/build_tgui.sh mode change 100644 => 100755 tools/travis/check_changelogs.sh mode change 100644 => 100755 tools/travis/check_grep.sh mode change 100644 => 100755 tools/travis/install_byond.sh mode change 100644 => 100755 tools/travis/install_dreamchecker.sh mode change 100644 => 100755 tools/travis/install_libmariadb.sh mode change 100644 => 100755 tools/travis/install_rust_g.sh mode change 100644 => 100755 tools/travis/run_server.sh diff --git a/tools/travis/build_bsql.sh b/tools/travis/build_bsql.sh old mode 100644 new mode 100755 diff --git a/tools/travis/build_tgui.sh b/tools/travis/build_tgui.sh old mode 100644 new mode 100755 diff --git a/tools/travis/check_changelogs.sh b/tools/travis/check_changelogs.sh old mode 100644 new mode 100755 diff --git a/tools/travis/check_grep.sh b/tools/travis/check_grep.sh old mode 100644 new mode 100755 diff --git a/tools/travis/install_byond.sh b/tools/travis/install_byond.sh old mode 100644 new mode 100755 diff --git a/tools/travis/install_dreamchecker.sh b/tools/travis/install_dreamchecker.sh old mode 100644 new mode 100755 diff --git a/tools/travis/install_libmariadb.sh b/tools/travis/install_libmariadb.sh old mode 100644 new mode 100755 diff --git a/tools/travis/install_rust_g.sh b/tools/travis/install_rust_g.sh old mode 100644 new mode 100755 diff --git a/tools/travis/run_server.sh b/tools/travis/run_server.sh old mode 100644 new mode 100755 From 4a3a7c841a77a9bbf25b977387d17bcbec1d804f Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Thu, 28 Nov 2019 03:54:38 +0100 Subject: [PATCH 06/64] Removes literally atrocious polka dotted accessories. --- code/modules/clothing/under/accessories.dm | 36 ++------------------- code/modules/vending/clothesmate.dm | 10 ++---- icons/mob/accessories.dmi | Bin 9452 -> 8771 bytes icons/obj/clothing/accessories.dmi | Bin 10692 -> 9764 bytes 4 files changed, 5 insertions(+), 41 deletions(-) diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm index 0a0499b5f9..4f64580459 100644 --- a/code/modules/clothing/under/accessories.dm +++ b/code/modules/clothing/under/accessories.dm @@ -1,4 +1,4 @@ -/obj/item/clothing/accessory //Ties moved to neck slot items, but as there are still things like medals, pokadots, and armbands, this accessory system is being kept as-is +/obj/item/clothing/accessory //Ties moved to neck slot items, but as there are still things like medals and armbands, this accessory system is being kept as-is name = "Accessory" desc = "Something has gone wrong!" icon = 'icons/obj/clothing/accessories.dmi' @@ -364,7 +364,7 @@ armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) ///////////////////// -//Synda Accessories// +//Syndie Accessories// ///////////////////// /obj/item/clothing/accessory/padding @@ -387,35 +387,3 @@ icon_state = "plastics" item_color = "nothing" armor = list("melee" = 0, "bullet" = 0, "laser" = 20, "energy" = 10, "bomb" = 0, "bio" = 30, "rad" = 0, "fire" = 0, "acid" = -40) - -///////////////////// -//Pokadots On Pants// -///////////////////// - -/obj/item/clothing/accessory/attrocious_pokadots - name = "atrocious pokadots" - desc = "They look like something out of a thrift store. Attaches to clothing not to be worn by itself." - icon_state = "attrocious_pokadots" - item_color = "attrocious_pokadots" - attack_verb = list("horrifed", "eye bleeded") - -/obj/item/clothing/accessory/black_white_pokadots - name = "checkered pokadots" - desc = "You can play a game of chess on these! Attaches to clothing not to be worn by itself." - icon_state = "black_white_pokadots" - item_color = "black_white_pokadots" - attack_verb = list("check", "mate") - -/obj/item/clothing/accessory/nt_pokadots - name = "blue and white pokadots" - desc = "To show your pride in your workplace, in the most annoying possable way. Attaches to clothing not to be worn by itself." - icon_state = "nt_pokadots" - item_color = "nt_pokadots" - attack_verb = list("eye bleeded", "annoyed") - -/obj/item/clothing/accessory/syndi_pokadots - name = "black and red pokadots" - desc = "King me. Attaches to clothing not to be worn by itself." //checkers! - icon_state = "syndi_pokadots" - item_color = "syndi_pokadots" - attack_verb = list("jumped", "taken") \ No newline at end of file diff --git a/code/modules/vending/clothesmate.dm b/code/modules/vending/clothesmate.dm index 0d1fe7f047..4e8304c979 100644 --- a/code/modules/vending/clothesmate.dm +++ b/code/modules/vending/clothesmate.dm @@ -103,9 +103,7 @@ /obj/item/clothing/suit/jacket/letterman_red = 3, /obj/item/clothing/ears/headphones = 10, /obj/item/clothing/suit/apron/purple_bartender = 4, - /obj/item/clothing/under/rank/bartender/purple = 4, - /obj/item/clothing/accessory/attrocious_pokadots = 8, - /obj/item/clothing/accessory/black_white_pokadots = 8) + /obj/item/clothing/under/rank/bartender/purple = 4) contraband = list(/obj/item/clothing/under/syndicate/tacticool = 3, /obj/item/clothing/under/syndicate/tacticool/skirt = 3, /obj/item/clothing/mask/balaclava = 3, @@ -115,8 +113,7 @@ /obj/item/clothing/suit/jacket/letterman_syndie = 5, /obj/item/clothing/under/jabroni = 2, /obj/item/clothing/suit/vapeshirt = 2, - /obj/item/clothing/under/geisha = 4, - /obj/item/clothing/accessory/syndi_pokadots = 4) + /obj/item/clothing/under/geisha = 4) premium = list(/obj/item/clothing/under/suit_jacket/checkered = 4, /obj/item/clothing/head/mailman = 2, /obj/item/clothing/under/rank/mailman = 2, @@ -124,8 +121,7 @@ /obj/item/clothing/suit/jacket/leather/overcoat = 4, /obj/item/clothing/under/pants/mustangjeans = 3, /obj/item/clothing/neck/necklace/dope = 5, - /obj/item/clothing/suit/jacket/letterman_nanotrasen = 5, - /obj/item/clothing/accessory/nt_pokadots = 5) + /obj/item/clothing/suit/jacket/letterman_nanotrasen = 5) refill_canister = /obj/item/vending_refill/clothing /obj/item/vending_refill/clothing diff --git a/icons/mob/accessories.dmi b/icons/mob/accessories.dmi index 33964645ee192faadb0ce7db9dc4a2b412c7bdfd..68f13c887568e3a6335655aaa82e66e558c21f5c 100644 GIT binary patch literal 8771 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 F{6E3VqP+kB literal 9452 zcmc(Fgs<-iP=5{(<+p-q>|L=bZc5sr&xjapH;61gp?cu~LCRAez^&l;46tMCQOFPeBg6 z3Hev(0}w(!I`7<+tzE5L?3~@~AWk5VSLWBT-}W6s)Z~k<2aJWSaqeiblo4ScTeG{p z^~sTvdf&#wcQ!pYa;e2v^OkB(tp6Gve>#^onO*X;hdd0EY#zjznaMBrQ+{Fq;AMrdEdCw4g{Lr1YmY9i#+Ftc2>%hE;?G~nW&%VcR znAGCu^JSe{%YX7V$!(h5b)$;+YV#hv+kMEnthvu!=}_kQr|5J1!dU!Sy!F}$lSh*bHpKx zK!o4&5e-WUtpS1VfL<#r=y+vf=KM8{t+NF8c7q?t-%uQz_keeC_Qm~ z?VBS!;@)>#$Vge$LRvgX2(xm%o0(4ODdC5iTr>+B<1i;M@A@&?H60>HII^1#BBrOO zeD%#KDAE>Y31Xn9wD_+iX`UcC1A>*cfQP8^enGd_yKxrxl5VfmoRHZ0XxcRgTpss@D(}Uic_aM6US*B{+gLS@5Xc5+BmJPt&6iL zEDaUQDt$}VrX!6!z68-`Z?sT@A{-}gb)}u1opoH*sjOVzH%q^<($AN|C}LE2rygZW zvUk7tyN;e-{b3&kFax{kD0GGK+W|>;urkl*qFjK_{}ONi-Ib&8Ae^|DZlhLS3ytah zx$FGY8q$eYXsh2l82*<)G4EDifY0Ww$?1r>nVM)kh`j3X(ua@8yvU84XE!Rs1wn!r zcD%0M+|a<1hPS=DU6kS!+(g({_gVq_Djw#wGR%xI{Sn|`b00m4t_6#pUOFGL zKQceIh3k9V?!tNvR0_>ga^oB0mIcF4WaL(mEtqx?%PmMEOmRBjUy=b$=_=$FSR08j<&H$;C($Jc1 zrLN0^B{`*5x5Lh>{59_2I=fb2l-bO5N8G4ALeN?HD1d);O~p>EM0hQzMD1BlK%yRZ zQ#MW-zgyDSIECa)&&U|h`fv&D35>QTga%gHJ2>b%I+hz=E-u9E7NJn6DLL}|j5;gt zO`BrdiTk&jJ0^_tL#^)$8l_;gM=DgG)Ya7)ZlR}lEZ^PWlrH{ZlJXAdGRaQ7XW+_b zOyxHg7>G$oSWOI?bgNw^6R9clyw_@>R8eM(V}UCxEB>D*Hq?uu?NY^=wx74_1ii!f zd;V2mzSWe}RMxHinyTZ7cIpPT9nbrY%#M};ARox9Ep`57C;>R)Pb9eA5mTMZx>;*& z)KEnF2_T+E7S#itNPSB$08F%GuuZSr%XYV=!F6$jP*Qm85PDa-^_2b6j^r1B?BjKxOs;=eN_^4_Hs zq&CZ(cU9*@VlGWMY=5gEhi_l^ zn=QNR!lPGqq!5(3a~Js4N_J68l_nw(!vqQTjjl2+fWNnI zwRz__%T<~alYDg6lFy49FairfKi|gTdK9c;1Piequ-P^RgV2kCQ-Qp?2HG}NlEdkW zWR(G0)5GFCW;VwurY71BhW*B%)OWx-kw_@G<;}<19=kj!$QO=GxY8i~c3KehI;IA8+t6e|;|D^vAtn zb%n6*cj)u%=)zTYrOD{v(|WhMNi zL>SJD6IIO+hrEU9qd3aB7e+?3K=8diA+SUyQsSDo^)&aRN0cioE3eels7+#HW0y19 zWXoN1Mi?Ov^)@#*K_E}?jd}lLnR4v$_EdROQ!^2WgoMOadSYXez|V&*KGSy8M)F-1 z1ZN)SI2)_@yK;J1#T!ANEii3$oIi8PLQ;xg64LgbP^2dSgTJ@73I8)e+0oGf0<|y1 zb@I7pM@2>L;R&Fid}|-Ga2p$I@N;83#5t9@xR}k>Cs~_x%U2qz;T3yzQh+>#hB|;z zKZjL=r3S@3rdkyYXV38XJkx8Sl>W2`ZAC@JcYDvpuC;uO4&q{Ak@xYDijIjMrtqEj z%X;%kiyoN&Qz1HnOgzjdvl39%rXqXpDvrL1nYcAr|F^83CF1)(~n~da^WUjAxvhei`S@8^#K&1A`>aH}AvWv?Ny&qXgw>?Ho4=U%|6w?~e zLP8rVgsB_G=Qb1|=ce&%3kAWiW~eCa*!u3rDIdFCqDSRorI~y3}sX`opTQ}g246~Z3l{$ilGpoEaD$e2qcb5lFD_%n=x}&dR?B@>(bpJyO*|g&n z7d=3(>1C)b1F|cZKkEv^`%SsSqej|8Fc1i^@G&20UiQN1-SOX>t zRdB2I{A|Bg{!g2dlJeKE$M0%9t)y$<2dlfdd{wLo6NLE0>ECnraBC>>UQfE`RvR-K zhY};M0KCy!xmr(2tqwKynUYz0(M;@HjSc2NeebAgt*uW#KEARrec+Ll^3e6sK)+iV zuHxWk-D6iWDi@JYCKljg+8)-bqw3NYWfT3>(2!ZRvOZ&?qO)I{g&E(>zE#dPIwh?P zYB4b}ffLC+9T}>J={QO}abj#=54av4Hkt>i*@hv9Wd3JI?$G(RdS}&^BG~ z$kyH6ttf{sJC-<}Ew1=%{_2W{i+?f_(YrB?sfQH5T=3+&$-CW~dR&ISctx{*<3|6` zQJI^AuQbwdALd526RPtNpuS_z*)KqQhEv$KC zZI!}L1$K>~6d)?!Z_U9hdb0%{Zm9K80 zU;RQsn|5^|J^|`zq4iSKq_x?#NnEUy$hlYl-0CMl`rKtZn72=-dZnztW zEBUy#?=?I<9UUA@1cEOv-jT&`iu6rLtF%eD(%W#;SX+LRmE8`l<050YPiQ=CPd=h{(X)Ze9QbE$Krd`n%NwRoi_ zG>rK4sO%aqpzbVOf#*+UFV9`Qq&Y>!#VzNW+$G(&7~4*kuVY-R-oS<#JEv+sj7&^K zxULW878g?l%gZ~^of4Mfb~(-Bmaslcho_o`hOFtyBS<(CU{YI!8BU6Jc8~mIxmrvG zef(rB@G?L3o6oUx5+ymr_VX~j2Ko%Jor@aVe|0D5W@tt@3p?jCufmmkzpzQP9HX}mE!Oef7r8y*qyG)tzUZD;&Am6|*hh)ICg6MpmN z%_7!EOH&i@@nHyrj)^sq+UG!?hMBL0g%8S%8*kpeecKSN!g~9*g0?optdoSmip!+q zh)-QVWZ^<|Yu|r6$&+S|===(yHydXcJE6yl{;7vUf?Uz_Gj1qpV(@El`hhryD;y(PcWyB`=aJO^E=|W_&7GZ1ITT?>7?-;GvhIV(%~tz{`M`n z-+$TBj)Gig2(Q!OqHbD9yDVzj^~NHw;Gr%W^bs;J!)bWJ#^8IMeuwU1&vLCDs%PRK zeS=AQUqZ{Qul!SnxTB)4?{lY?{gXdVgiw~I`5=-Y4RBqqkf7_d>Rk9sVip!0V6!{J z!b01gt7?(GBLs~=*IuDr&yd``zcBIg^<^ZdoWnZ@CY1GZQTsDSJ&kofy7mRy4xw*} ziKHDuibVm9#sWM%Ja_o{X(%auWR2YR(J|qT7(gok=W8|f)B54Vhj73yln%36Wm*k! zfwd#3HPsXvDEDp}&w~fc2L=5JJCzk8Z%y%wtF`$0Mh6!`k90e{2$orWAPxzv52oL( z>RpBHquSNt%anuc5T2U(yvdkSKGXSLIR$@#xvJ z+u`&Ceat|b$i|i%?%%1GSf$EGgElr5x(j%7ktO$y@fU$r0}3(yv+&$2| zvh|sC8KSe7(2>--A79&CXP=ccH)kw8SABZTnEx_Mwf%5omfa#4sj3= zA&bZOrH(Hx-%4WQ#WM8QB-`@z48z!;;NUs!g*}BST0@_?u#kwlG8e&C{K$kZTh*?R;8H ztEeCMi}&7J#GhrWufK@9ObB~Xa$hneWY&1w)4fE$r#q#SIphu5qL`hNZc8J3*7+N+ zol+gh`O>Emg8$WAdb5Acr+OHha3b*k5FRn7s?SPyOEi%=G3QgS!8ps<6GN%z)ktlS z!=ALkyZq@HL(Oj)*Fj!eip}LRskt9mRo}eyHM)-Up;An#&YanX$PoyhU`7eb^|6ry4I_O>ZQ`UtdZ$&aIzEBm6*6&f>LrKK*=dqt!nUa7c7yGJUGagr{FL6xBTupD>lM@ zbNZT|%~t?AYuU{fDRHL(kIR9S)0i7-pA~Ac9>PjP)Y2mFgG((wnk-B@vv+0m=N{f~ z6kDA(jQjlm+X8dwYZ*$p)=cesDXDJab@9l3$-6*6`VwJ$ahX|o=T-=I$APhJ&A7El zpq34pW4F28DS}2m7TFsB4T}-iB88NCsqah_2aY;6sfqm&Jq~lqCB*I-R>pp1!<#^- z6^kl%96MO;ZHCj@Pf!IFBNJD=vtwS^JILG=zgHJtJ6FhRp$CXClj3)G_zFWEohkaj zJY^)+WA@bU_U>~Ht9}!P6!e~2*`>cJ(Rs&Ar9SuG&^fJ`_hrq?o@xtccu4t zx1kZWo9LHpnr`VcGSqE&rN8s&31%ic z8WXh8Mu5eqE*hWq+6DE-7wx26j$%`!T#v>9g#zGIf_zR}D)qgAkXo}Sr-jF#X;%-v z5JaU*brQVcf?O^*$~)7>W!g*3&lcDX%q&Ii{qH&3-|%X(qnNv=MCUAUK43?I_Jh=7 z!NS=TnI({UeRP6`bPOKk@pg6N5Oy8&vi4MePUc+)SlBN(N_$xioJB@&Fhhx4yt09& zrUn|cojI8F8}>+~rto&i&4Kvh(-L`!L#Bv24{0k<4?Od*c2MS}QBi_eP}w@0s=8bz z2P?IS=N9EdLr30J*DREAX=4R$j+rAPt~NXqt3-F*LUaQ`;q^4?G?ay>Uz%x<6*q!> zeYB?I&+EW1ih?;KtK#axKLm@mo*Sr2kPFer(}5K_ZQJ=ijdBG<)jPqyHSNB2uYB#Q zan>O?g5+mcsf99tZY=&d`;ei>JO`*{(2TR0L1;>Jv#&Kwr~m9 z!s7!HW(%(2SH2_h?O~u^u!3>`=}dxIl*HaIh61Isp5MmIabq{B7g^qE1PaSx#ZGlZ z{S|8IvOqz9At$dhgXsg<)qJu^%hu=9v(J78P$(Yr{{C~p0`6o8a);KFS483>f-`Nh z&QO0Vsi91{cx^8!p&%a$)H zgZ!!#uc$aXGt41c8tZg7lT4WTY9cBo@#{k11ItOYf78sy|UEiKTZyE-ALYZ z1@IcPH_Cc1+d_}5M$to?PDX0j@)-$-bT?$|wpB?}yv$AY2qJbB;hVg%$vtG!XSCzF z*!D9!n(6Kb6~|xE__YRP+^Pb19ZF?spwYci*)f3?)n%t5b}80f*mf-TTV zm^R&~&hxH-qb_^hHfvp5Lf)ljIltSFaYzkmHN$T<1G(v@gJb}s^O>k?B)8x$k`k7OK!35(qdFT$JDD&Q9WzCw27t9omx!^tHCb!$CX|ZciO86 zR9;xsS+z5;&O~S9%eaiTAL|>cYT9%t3eOj3RCznU@ztK{lv|uFTzsSYEFd}xQp+jh zSzz3{CG!)Z`FrbX?3Vd%;syzmq=JXg%|I_NQag`|HY|984j9 zTCw9(RoN+j7?pV(=w9y7a?GD?ZHG{r-Am6-CI0oRc#?vYcn^@#;N?le)tDX^J=xTN zkjRLM7@3&_8|8)8Kl{tb)_JN&;e3225hayUe? zVmL5;6D!&$B#Y=^DpKNi84VtP!yx%amwV4ar5wf8&QC7=@SRB|hEp#imo*27)Ru^Y zgC-IEim9&cE4%h7=L~`)#`~cxzy%kI5pHE=<#DW_T)W!I4hMR+KRsBpKm+G6;kZ~2 z41~g9!7tjltbt*3ZxyfpSaLdNpnvS&3k$hYvwS;$qsTsG5QxO#>RW(w{=_pIlf$>V z6Q9q94Hl+D4Mcu2LuGX4^a?`qXzZK%CmUE-qB;N=>lzyP0Kg2VXJ$A~>B5gJ=NDi& z6<^w})H44Krr zfoU5-8;F#HzOF88Q^0C|$C%ab<42t_vfpnF2S6V7a*`%-{o`HdU2)W04xlHfGfjrO zj3sRJ-C&Lg+gt}+e$9^Bl98_Nni@z+{j;-`6}OVS`sW`B_}`m8#t)Khxn+4t+ z;(Fz!lH!{MTw}_1yLSqzmalSd5ZttwiQMmHe2-fcIQTtztyA^Unxd zi+*|`W`P_0BLPd?3*QU}u;u=e-ncHs&0ubG0b|mXUM*(Cszm-RSHf$53U#?u)zyq| zP3TP)BDVj$ojNz7``^5?w4_=rnJLk6u2oR?gq4njX__@fEZT-Xt}NCbGubL>rP~_P zX>R!e#_y+W=Wf+Mb{`B%-+8N#3DXQLoL;B4mAk+l=h(E9lF*ctl)O>*yxotpG|5M+ z9&4JK76EvR%@qvd1x$d-V2(f-=OEGls|Gu4Q=Q0$dFbjU;Z`8NwAHt=9|gJXg8uFS zQA#Q(A3cN!P3STEacvXyy+Tf#7HDkb8;K3(l_7?f&=z^Ly{8@J*4#Wp`U^6(eV2I^ zCtrZhhS>66Z+t-xMqf3C{TIel7P=L^P?#HK9V=6_d)=&Q~t-ff-C?60oCVg1U= mj5Ko5S7+u|A$RqX{!$Q diff --git a/icons/obj/clothing/accessories.dmi b/icons/obj/clothing/accessories.dmi index eb019bc44b7f9515516851d1e0aefb629b939737..c62a88c829482d49e53f2e07978276a1234fa84d 100644 GIT binary patch literal 9764 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 literal 10692 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 Date: Fri, 29 Nov 2019 00:40:16 +0100 Subject: [PATCH 07/64] refactoring altclick interaction to allow parent calls without forcing the turf contents stat menu open. --- code/_onclick/ai.dm | 11 +++++--- code/_onclick/click.dm | 26 +++++++++---------- code/_onclick/cyborg.dm | 16 +++++------- code/_onclick/hud/action_button.dm | 1 + code/_onclick/observer.dm | 2 +- code/datums/components/rotation.dm | 1 + code/datums/components/storage/storage.dm | 15 ++++++----- code/game/machinery/Sleeper.dm | 2 ++ code/game/machinery/aug_manipulator.dm | 4 +-- .../game/machinery/computer/buildandrepair.dm | 5 ++-- code/game/machinery/computer/card.dm | 6 ++--- .../machinery/computer/prisoner/_prisoner.dm | 5 ++-- code/game/machinery/defibrillator_mount.dm | 2 ++ code/game/machinery/deployable.dm | 2 ++ code/game/machinery/dish_drive.dm | 2 ++ code/game/machinery/dna_scanner.dm | 2 ++ code/game/machinery/harvester.dm | 2 ++ code/game/machinery/washing_machine.dm | 6 +++-- code/game/mecha/mecha_actions.dm | 2 ++ code/game/objects/items/cards_ids.dm | 7 ++--- .../circuitboards/machine_circuitboards.dm | 2 ++ code/game/objects/items/crayons.dm | 2 ++ code/game/objects/items/devices/PDA/PDA.dm | 4 +-- .../objects/items/devices/desynchronizer.dm | 2 ++ .../objects/items/devices/geiger_counter.dm | 6 +++-- code/game/objects/items/devices/gps.dm | 2 ++ .../objects/items/devices/quantum_keycard.dm | 2 ++ .../objects/items/devices/radio/headset.dm | 2 ++ code/game/objects/items/devices/scanners.dm | 4 +-- code/game/objects/items/flamethrower.dm | 2 ++ code/game/objects/items/melee/energy.dm | 4 ++- code/game/objects/items/pet_carrier.dm | 2 ++ code/game/objects/items/stacks/stack.dm | 4 ++- code/game/objects/items/storage/belt.dm | 12 +-------- code/game/objects/items/storage/fancy.dm | 1 + code/game/objects/items/storage/lockbox.dm | 3 ++- code/game/objects/items/toys.dm | 4 ++- code/game/objects/items/twohanded.dm | 4 +++ code/game/objects/objs.dm | 1 + .../objects/structures/beds_chairs/chair.dm | 5 ++++ .../structures/crates_lockers/closets.dm | 5 ++-- code/game/objects/structures/extinguisher.dm | 2 ++ code/game/objects/structures/morgue.dm | 3 ++- code/game/objects/structures/reflector.dm | 2 ++ code/modules/admin/sound_emitter.dm | 2 ++ .../clockcult/clock_items/clockwork_slab.dm | 2 ++ .../revenant/revenant_abilities.dm | 2 +- .../atmospherics/machinery/airalarm.dm | 6 ++--- .../atmospherics/machinery/atmosmachinery.dm | 7 +++-- .../components/binary_devices/pump.dm | 2 ++ .../components/trinary_devices/filter.dm | 2 ++ .../components/trinary_devices/mixer.dm | 2 ++ .../components/unary_devices/cryo.dm | 3 ++- .../components/unary_devices/thermomachine.dm | 6 ++++- .../portable/portable_atmospherics.dm | 2 ++ code/modules/cargo/supplypod_beacon.dm | 2 ++ code/modules/clothing/clothing.dm | 12 ++++----- code/modules/clothing/glasses/_glasses.dm | 20 +++++++------- code/modules/clothing/head/hardhat.dm | 2 ++ code/modules/clothing/head/jobs.dm | 20 +++++++------- code/modules/clothing/head/soft_caps.dm | 6 ++--- code/modules/clothing/masks/breath.dm | 6 ++--- code/modules/clothing/spacesuits/hardsuit.dm | 12 ++++----- code/modules/clothing/suits/toggles.dm | 6 ++--- code/modules/clothing/under/accessories.dm | 2 ++ code/modules/detectivework/scanner.dm | 2 ++ .../kitchen_machinery/microwave.dm | 2 ++ code/modules/games/cas.dm | 2 ++ code/modules/mining/abandoned_crates.dm | 7 ++--- .../mining/equipment/marker_beacons.dm | 4 ++- .../simple_animal/guardian/types/explosive.dm | 1 + .../simple_animal/guardian/types/support.dm | 3 ++- .../simple_animal/hostile/megafauna/drake.dm | 1 + .../hostile/megafauna/hierophant.dm | 2 +- code/modules/mob/living/ventcrawling.dm | 1 + .../computers/item/computer.dm | 4 +-- .../computers/item/laptop.dm | 4 +-- .../computers/machinery/modular_computer.dm | 3 ++- code/modules/paperwork/paperplane.dm | 2 ++ code/modules/photography/camera/camera.dm | 3 ++- code/modules/power/apc.dm | 6 ++--- .../projectiles/guns/ballistic/shotgun.dm | 5 +++- .../chemistry/machinery/chem_dispenser.dm | 3 ++- .../chemistry/machinery/chem_heater.dm | 3 ++- .../chemistry/machinery/chem_master.dm | 3 ++- .../reagents/chemistry/machinery/pandemic.dm | 3 ++- .../reagents/reagent_containers/hypospray.dm | 2 ++ .../reagents/reagent_containers/rags.dm | 1 + .../research/nanites/nanite_hijacker.dm | 1 + .../modules/research/nanites/nanite_remote.dm | 1 + .../ruins/spaceruin_code/hilbertshotel.dm | 1 + code/modules/vehicles/ridden.dm | 3 ++- code/modules/vehicles/scooter.dm | 2 ++ .../code/modules/arousal/toys/dildos.dm | 10 +++---- .../code/modules/clothing/clothing.dm | 3 ++- .../living/silicon/robot/dogborg_equipment.dm | 3 --- .../projectiles/guns/ballistic/rifles.dm | 3 +++ .../projectiles/guns/energy/energy_gun.dm | 2 ++ .../modules/projectiles/guns/pumpenergy.dm | 12 +++++---- 99 files changed, 269 insertions(+), 162 deletions(-) diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index 7a495b95e7..2a8289697b 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -114,7 +114,8 @@ /mob/living/silicon/ai/CtrlClickOn(var/atom/A) A.AICtrlClick(src) /mob/living/silicon/ai/AltClickOn(var/atom/A) - A.AIAltClick(src) + if(!A.AIAltClick(src)) + altclick_listed_turf(A) /* The following criminally helpful code is just the previous code cleaned up; @@ -125,9 +126,10 @@ /* Atom Procs */ /atom/proc/AICtrlClick() return + /atom/proc/AIAltClick(mob/living/silicon/ai/user) - AltClick(user) - return + return AltClick(user) + /atom/proc/AIShiftClick() return /atom/proc/AICtrlShiftClick() @@ -151,6 +153,7 @@ shock_perm(usr) else shock_restore(usr) + return TRUE /obj/machinery/door/airlock/AIShiftClick() // Opens and closes doors! if(obj_flags & EMAGGED) @@ -185,10 +188,12 @@ return toggle_on() add_fingerprint(usr) + return TRUE /* Holopads */ /obj/machinery/holopad/AIAltClick(mob/living/silicon/ai/user) hangup_all_calls() + return TRUE // // Override TurfAdjacent for AltClicking diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index e9f50d9212..4c477f3872 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -353,8 +353,17 @@ Unused except for AI */ /mob/proc/AltClickOn(atom/A) - A.AltClick(src) - return + if(!A.AltClick(src)) + altclick_listed_turf(A) + +/mob/proc/altclick_listed_turf(atom/A) + var/turf/T = get_turf(A) + if(T == A.loc || T == A) + if(T == listed_turf) + listed_turf = null + else if(TurfAdjacent(T)) + listed_turf = T + client.statpanel = T.name /mob/living/carbon/AltClickOn(atom/A) if(!stat && mind && iscarbon(A) && A != src) @@ -366,18 +375,7 @@ ..() /atom/proc/AltClick(mob/user) - SEND_SIGNAL(src, COMSIG_CLICK_ALT, user) - var/turf/T = get_turf(src) - if(T && user.TurfAdjacent(T)) - user.listed_turf = T - user.client.statpanel = T.name - -// Use this instead of /mob/proc/AltClickOn(atom/A) where you only want turf content listing without additional atom alt-click interaction -/atom/proc/AltClickNoInteract(mob/user, atom/A) - var/turf/T = get_turf(A) - if(T && user.TurfAdjacent(T)) - user.listed_turf = T - user.client.statpanel = T.name + . = SEND_SIGNAL(src, COMSIG_CLICK_ALT, user) /mob/proc/TurfAdjacent(turf/T) return T.Adjacent(src) diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index 7f63b74945..a2d566d566 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -110,7 +110,8 @@ /mob/living/silicon/robot/CtrlClickOn(atom/A) A.BorgCtrlClick(src) /mob/living/silicon/robot/AltClickOn(atom/A) - A.BorgAltClick(src) + if(!A.BorgAltClick(src)) + altclick_listed_turf(A) /atom/proc/BorgCtrlShiftClick(mob/living/silicon/robot/user) //forward to human click if not overridden CtrlShiftClick(user) @@ -154,20 +155,17 @@ ..() /atom/proc/BorgAltClick(mob/living/silicon/robot/user) - AltClick(user) - return + return AltClick(user) /obj/machinery/door/airlock/BorgAltClick(mob/living/silicon/robot/user) // Eletrifies doors. Forwards to AI code. if(get_dist(src,user) <= user.interaction_range) - AIAltClick() - else - ..() + return AIAltClick() + return ..() /obj/machinery/turretid/BorgAltClick(mob/living/silicon/robot/user) //turret lethal on/off. Forwards to AI code. if(get_dist(src,user) <= user.interaction_range) - AIAltClick() - else - ..() + return AIAltClick() + return ..() /* As with AI, these are not used in click code, diff --git a/code/_onclick/hud/action_button.dm b/code/_onclick/hud/action_button.dm index 2b5af9ddb8..d2508b3e8e 100644 --- a/code/_onclick/hud/action_button.dm +++ b/code/_onclick/hud/action_button.dm @@ -125,6 +125,7 @@ moved = FALSE user.update_action_buttons(TRUE) to_chat(user, "Action button positions have been reset.") + return TRUE /obj/screen/movable/action_button/hide_toggle/proc/InitialiseIcon(datum/hud/owner_hud) diff --git a/code/_onclick/observer.dm b/code/_onclick/observer.dm index 299d7f64f8..f76a745fd2 100644 --- a/code/_onclick/observer.dm +++ b/code/_onclick/observer.dm @@ -31,7 +31,7 @@ ShiftClickOn(A) return if(modifiers["alt"]) - AltClickNoInteract(src, A) + altclick_listed_turf(A) return if(modifiers["ctrl"]) CtrlClickOn(A) diff --git a/code/datums/components/rotation.dm b/code/datums/components/rotation.dm index 81ff2d517d..422d73520e 100644 --- a/code/datums/components/rotation.dm +++ b/code/datums/components/rotation.dm @@ -106,6 +106,7 @@ if(!can_be_rotated.Invoke(user, rotation) || !can_user_rotate.Invoke(user, rotation)) return BaseRot(user, rotation) + return TRUE /datum/component/simple_rotation/proc/WrenchRot(datum/source, obj/item/I, mob/living/user) if(!can_be_rotated.Invoke(user,default_rotation_direction) || !can_user_rotate.Invoke(user,default_rotation_direction)) diff --git a/code/datums/components/storage/storage.dm b/code/datums/components/storage/storage.dm index dd189137a5..9949fd5473 100644 --- a/code/datums/components/storage/storage.dm +++ b/code/datums/components/storage/storage.dm @@ -57,7 +57,7 @@ var/screen_start_x = 4 //These two are where the storage starts being rendered, screen_loc wise. var/screen_start_y = 2 //End - + var/limited_random_access = FALSE //Quick if statement in accessible_items to determine if we care at all about what people can access at once. var/limited_random_access_stack_position = 0 //If >0, can only access top items var/limited_random_access_stack_bottom_up = FALSE //If TRUE, above becomes bottom items @@ -762,7 +762,7 @@ if(!isliving(user) || !user.CanReach(parent)) return if(check_locked(source, user, TRUE)) - return + return TRUE var/atom/A = parent if(!quickdraw) @@ -770,19 +770,20 @@ user_show_to_mob(user) if(rustle_sound) playsound(A, "rustle", 50, 1, -5) - return + return TRUE - if(!user.incapacitated()) + if(user.can_hold_items() && !user.incapacitated()) var/obj/item/I = locate() in real_location() if(!I) return A.add_fingerprint(user) remove_from_storage(I, get_turf(user)) if(!user.put_in_hands(I)) - to_chat(user, "You fumble for [I] and it falls on the floor.") - return + user.visible_message("[user] fumbles with the [parent], letting [I] fall on the floor.", \ + "You fumble with [parent], letting [I] fall on the floor.") + return TRUE user.visible_message("[user] draws [I] from [parent]!", "You draw [I] from [parent].") - return + return TRUE /datum/component/storage/proc/action_trigger(datum/signal_source, datum/action/source) gather_mode_switch(source.owner) diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 68f7327551..996ad0b0dc 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -182,12 +182,14 @@ open_machine() /obj/machinery/sleeper/AltClick(mob/user) + . = ..() if(!user.canUseTopic(src, !issilicon(user))) return if(state_open) close_machine() else open_machine() + return TRUE /obj/machinery/sleeper/examine(mob/user) . = ..() diff --git a/code/game/machinery/aug_manipulator.dm b/code/game/machinery/aug_manipulator.dm index b9d63e5771..b41910f010 100644 --- a/code/game/machinery/aug_manipulator.dm +++ b/code/game/machinery/aug_manipulator.dm @@ -132,8 +132,8 @@ ..() if(!user.canUseTopic(src)) return - else - eject_part(user) + eject_part(user) + return TRUE /obj/machinery/aug_manipulator/power_change() ..() diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index 056beb2e96..e8e15ff586 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -133,12 +133,13 @@ ..() /obj/structure/frame/computer/AltClick(mob/user) - ..() + . = ..() if(!isliving(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) return if(anchored) to_chat(usr, "You must unwrench [src] before rotating it!") - return + return TRUE setDir(turn(dir, -90)) + return TRUE diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index e8e8e1cdd6..3bdb635d39 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -170,19 +170,19 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) return TRUE /obj/machinery/computer/card/AltClick(mob/user) - ..() + . = ..() if(!user.canUseTopic(src, !issilicon(user)) || !is_operational()) return if(inserted_modify_id) if(id_eject(user, inserted_modify_id)) inserted_modify_id = null updateUsrDialog() - return + return TRUE if(inserted_scan_id) if(id_eject(user, inserted_scan_id)) inserted_scan_id = null updateUsrDialog() - return + return TRUE /obj/machinery/computer/card/ui_interact(mob/user) . = ..() diff --git a/code/game/machinery/computer/prisoner/_prisoner.dm b/code/game/machinery/computer/prisoner/_prisoner.dm index d07c351a22..dfadb73ab2 100644 --- a/code/game/machinery/computer/prisoner/_prisoner.dm +++ b/code/game/machinery/computer/prisoner/_prisoner.dm @@ -5,7 +5,7 @@ if(contained_id) contained_id.forceMove(get_turf(src)) return ..() - + /obj/machinery/computer/prisoner/examine(mob/user) . = ..() @@ -15,8 +15,9 @@ /obj/machinery/computer/prisoner/AltClick(mob/user) + ..() id_eject(user) - return ..() + return TRUE /obj/machinery/computer/prisoner/proc/id_insert(mob/user, obj/item/card/id/prisoner/P) if(istype(P)) diff --git a/code/game/machinery/defibrillator_mount.dm b/code/game/machinery/defibrillator_mount.dm index 97cc0f5748..40ccc61b2b 100644 --- a/code/game/machinery/defibrillator_mount.dm +++ b/code/game/machinery/defibrillator_mount.dm @@ -115,8 +115,10 @@ return TRUE /obj/machinery/defibrillator_mount/AltClick(mob/living/carbon/user) + . = ..() if(!istype(user) || !user.canUseTopic(src, BE_CLOSE)) return + . = TRUE if(!defib) to_chat(user, "It'd be hard to remove a defib unit from a mount that has none.") return diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index b94dbad2de..7614630477 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -153,9 +153,11 @@ . += "Alt-click to toggle modes." /obj/item/grenade/barrier/AltClick(mob/living/carbon/user) + . = ..() if(!istype(user) || !user.canUseTopic(src, BE_CLOSE)) return toggle_mode(user) + return TRUE /obj/item/grenade/barrier/proc/toggle_mode(mob/user) switch(mode) diff --git a/code/game/machinery/dish_drive.dm b/code/game/machinery/dish_drive.dm index 3aad8d874c..7f21d1c1b3 100644 --- a/code/game/machinery/dish_drive.dm +++ b/code/game/machinery/dish_drive.dm @@ -97,8 +97,10 @@ do_the_dishes(TRUE) /obj/machinery/dish_drive/AltClick(mob/living/user) + . = ..() if(user.canUseTopic(src, !issilicon(user))) do_the_dishes(TRUE) + return TRUE /obj/machinery/dish_drive/proc/do_the_dishes(manual) if(!contents.len) diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm index c9e1e7195b..f62dceff6c 100644 --- a/code/game/machinery/dna_scanner.dm +++ b/code/game/machinery/dna_scanner.dm @@ -164,9 +164,11 @@ toggle_open(user) /obj/machinery/dna_scannernew/AltClick(mob/user) + . = ..() if(!user.canUseTopic(src, !issilicon(user))) return interact(user) + return TRUE /obj/machinery/dna_scannernew/MouseDrop_T(mob/target, mob/user) if(user.stat || user.lying || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target) || !user.IsAdvancedToolUser()) diff --git a/code/game/machinery/harvester.dm b/code/game/machinery/harvester.dm index e6b8fe3b88..e1f9824524 100644 --- a/code/game/machinery/harvester.dm +++ b/code/game/machinery/harvester.dm @@ -51,10 +51,12 @@ open_machine() /obj/machinery/harvester/AltClick(mob/user) + . = ..() if(harvesting || !user || !isliving(user) || state_open) return if(can_harvest()) start_harvest() + return TRUE /obj/machinery/harvester/proc/can_harvest() if(!powered(EQUIP) || state_open || !occupant || !iscarbon(occupant)) diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index 081d91e56f..2ca0df75ae 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -16,6 +16,7 @@ . += "Alt-click it to start a wash cycle." /obj/machinery/washing_machine/AltClick(mob/user) + . = ..() if(!user.canUseTopic(src)) return @@ -24,11 +25,11 @@ if(state_open) to_chat(user, "Close the door first") - return + return TRUE if(bloody_mess) to_chat(user, "[src] must be cleaned up first.") - return + return TRUE if(has_corgi) bloody_mess = 1 @@ -37,6 +38,7 @@ update_icon() addtimer(CALLBACK(src, .proc/wash_cycle), 200) START_PROCESSING(SSfastprocess, src) + return TRUE /obj/machinery/washing_machine/process() if (!busy) diff --git a/code/game/mecha/mecha_actions.dm b/code/game/mecha/mecha_actions.dm index 7b00e208cc..86ec5e70da 100644 --- a/code/game/mecha/mecha_actions.dm +++ b/code/game/mecha/mecha_actions.dm @@ -138,8 +138,10 @@ chassis.toggle_strafe() /obj/mecha/AltClick(mob/living/user) + . = ..() if((user == occupant) && user.canUseTopic(src)) toggle_strafe() + return TRUE /obj/mecha/proc/toggle_strafe() strafe = !strafe diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index 97f5989eb4..fef0c55f5e 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -517,16 +517,17 @@ update_label("John Doe", "Clowny") return if(user.incapacitated() || !istype(user)) to_chat(user, "You can't do that right now!") - return + return TRUE if(alert("Are you sure you want to recolor your id?", "Confirm Repaint", "Yes", "No") == "Yes") var/energy_color_input = input(usr,"","Choose Energy Color",id_color) as color|null if(!in_range(src, user) || !energy_color_input) - return + return TRUE if(user.incapacitated() || !istype(user)) to_chat(user, "You can't do that right now!") - return + return TRUE id_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1) update_icon() + return TRUE /obj/item/card/id/knight/Initialize() . = ..() diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index ccd96525a3..2392973b22 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -945,10 +945,12 @@ to_chat(user, "You [suction ? "enable" : "disable"] the board's suction function.") /obj/item/circuitboard/machine/dish_drive/AltClick(mob/living/user) + . = ..() if(!user.Adjacent(src)) return transmit = !transmit to_chat(user, "You [transmit ? "enable" : "disable"] the board's automatic disposal transmission.") + return TRUE /obj/item/circuitboard/machine/stacking_unit_console name = "Stacking Machine Console (Machine Board)" diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 2a7b5d24cd..41ab418cf2 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -150,11 +150,13 @@ ui.open() /obj/item/toy/crayon/spraycan/AltClick(mob/user) + . = ..() if(user.canUseTopic(src, BE_CLOSE, ismonkey(user))) if(has_cap) is_capped = !is_capped to_chat(user, "The cap on [src] is now [is_capped ? "on" : "off"].") update_icon() + return TRUE /obj/item/toy/crayon/proc/staticDrawables() diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 37d2c77373..1d00dc6335 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -828,14 +828,14 @@ GLOBAL_LIST_EMPTY(PDAs) send_message(U,list(P)) /obj/item/pda/AltClick() - ..() - + . = ..() if(id) remove_id() playsound(src, 'sound/machines/terminal_eject_disc.ogg', 50, 1) else remove_pen() playsound(src, 'sound/machines/button4.ogg', 50, 1) + return TRUE /obj/item/pda/CtrlClick() ..() diff --git a/code/game/objects/items/devices/desynchronizer.dm b/code/game/objects/items/devices/desynchronizer.dm index 4a6e2d5a46..ff58af2405 100644 --- a/code/game/objects/items/devices/desynchronizer.dm +++ b/code/game/objects/items/devices/desynchronizer.dm @@ -32,6 +32,7 @@ . += "Can be used again to interrupt the effect early. The recharge time is the same as the time spent in desync." /obj/item/desynchronizer/AltClick(mob/living/user) + . = ..() if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) return var/new_duration = input(user, "Set the duration (5-300):", "Desynchronizer", duration / 10) as null|num @@ -40,6 +41,7 @@ new_duration = CLAMP(new_duration, 50, max_duration) duration = new_duration to_chat(user, "You set the duration to [DisplayTimeText(duration)].") + return TRUE /obj/item/desynchronizer/proc/desync(mob/living/user) if(sync_holder) diff --git a/code/game/objects/items/devices/geiger_counter.dm b/code/game/objects/items/devices/geiger_counter.dm index e6044ceadf..ce0e492393 100644 --- a/code/game/objects/items/devices/geiger_counter.dm +++ b/code/game/objects/items/devices/geiger_counter.dm @@ -182,14 +182,16 @@ return ..() /obj/item/geiger_counter/AltClick(mob/living/user) + . = ..() if(!istype(user) || !user.canUseTopic(src, BE_CLOSE)) - return ..() + return if(!scanning) to_chat(usr, "[src] must be on to reset its radiation level!") - return 0 + return TRUE radiation_count = 0 to_chat(usr, "You flush [src]'s radiation counts, resetting it to normal.") update_icon() + return TRUE /obj/item/geiger_counter/emag_act(mob/user) . = ..() diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm index 2368cdc4f0..acdb546a34 100644 --- a/code/game/objects/items/devices/gps.dm +++ b/code/game/objects/items/devices/gps.dm @@ -45,9 +45,11 @@ GLOBAL_LIST_EMPTY(GPS_list) add_overlay("working") /obj/item/gps/AltClick(mob/user) + . = ..() if(!user.canUseTopic(src, BE_CLOSE)) return toggletracking(user) + return TRUE /obj/item/gps/proc/toggletracking(mob/user) if(!user.canUseTopic(src, BE_CLOSE)) diff --git a/code/game/objects/items/devices/quantum_keycard.dm b/code/game/objects/items/devices/quantum_keycard.dm index fc9ccddaf9..33f839fa39 100644 --- a/code/game/objects/items/devices/quantum_keycard.dm +++ b/code/game/objects/items/devices/quantum_keycard.dm @@ -18,12 +18,14 @@ . += "Insert [src] into an active quantum pad to link it." /obj/item/quantum_keycard/AltClick(mob/living/user) + . = ..() if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) return to_chat(user, "You start pressing [src]'s unlink button...") if(do_after(user, 40, target = src)) to_chat(user, "The keycard beeps twice and disconnects the quantum link.") qpad = null + return TRUE /obj/item/quantum_keycard/update_icon() if(qpad) diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 9f371f1ddb..1d0f94de71 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -326,8 +326,10 @@ GLOBAL_LIST_INIT(channel_tokens, list( secure_radio_connections[ch_name] = add_radio(src, GLOB.radiochannels[ch_name]) /obj/item/radio/headset/AltClick(mob/living/user) + . = ..() if(!istype(user) || !Adjacent(user) || user.incapacitated()) return if (command) use_command = !use_command to_chat(user, "You toggle high-volume mode [use_command ? "on" : "off"].") + return TRUE diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 40052bcee5..c370dd620e 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -587,10 +587,10 @@ SLIME SCANNER to_chat(user, "Temperature: [round(environment.temperature-T0C, 0.01)] °C ([round(environment.temperature, 0.01)] K)") /obj/item/analyzer/AltClick(mob/user) //Barometer output for measuring when the next storm happens - ..() + . = ..() if(user.canUseTopic(src)) - + . = TRUE if(cooldown) to_chat(user, "[src]'s barometer function is preparing itself.") return diff --git a/code/game/objects/items/flamethrower.dm b/code/game/objects/items/flamethrower.dm index d9525ab931..906572d018 100644 --- a/code/game/objects/items/flamethrower.dm +++ b/code/game/objects/items/flamethrower.dm @@ -138,11 +138,13 @@ toggle_igniter(user) /obj/item/flamethrower/AltClick(mob/user) + . = ..() if(ptank && isliving(user) && user.canUseTopic(src, BE_CLOSE, ismonkey(user))) user.put_in_hands(ptank) ptank = null to_chat(user, "You remove the plasma tank from [src]!") update_icon() + return TRUE /obj/item/flamethrower/examine(mob/user) . = ..() diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm index 561af8ded6..16262d61c3 100644 --- a/code/game/objects/items/melee/energy.dm +++ b/code/game/objects/items/melee/energy.dm @@ -320,11 +320,12 @@ M.update_inv_hands() /obj/item/melee/transforming/energy/sword/cx/AltClick(mob/living/user) + . = ..() if(!in_range(src, user)) //Basic checks to prevent abuse return if(user.incapacitated() || !istype(user)) to_chat(user, "You can't do that right now!") - return + return TRUE if(alert("Are you sure you want to recolor your blade?", "Confirm Repaint", "Yes", "No") == "Yes") var/energy_color_input = input(usr,"","Choose Energy Color",light_color) as color|null @@ -332,6 +333,7 @@ light_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1) update_icon() update_light() + return TRUE /obj/item/melee/transforming/energy/sword/cx/examine(mob/user) . = ..() diff --git a/code/game/objects/items/pet_carrier.dm b/code/game/objects/items/pet_carrier.dm index 9d1a1ff4f9..328ef0c278 100644 --- a/code/game/objects/items/pet_carrier.dm +++ b/code/game/objects/items/pet_carrier.dm @@ -70,6 +70,7 @@ update_icon() /obj/item/pet_carrier/AltClick(mob/living/user) + . = ..() if(open || !user.canUseTopic(src, BE_CLOSE)) return locked = !locked @@ -79,6 +80,7 @@ else playsound(user, 'sound/machines/boltsup.ogg', 30, TRUE) update_icon() + return TRUE /obj/item/pet_carrier/attack(mob/living/target, mob/living/user) if(user.a_intent == INTENT_HARM) diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 965e78036a..e8bd50f19b 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -350,6 +350,7 @@ . = ..() /obj/item/stack/AltClick(mob/living/user) + . = ..() if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) return if(is_cyborg) @@ -363,10 +364,11 @@ max = get_amount() stackmaterial = min(max, stackmaterial) if(stackmaterial == null || stackmaterial <= 0 || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) - return + return TRUE else change_stack(user, stackmaterial) to_chat(user, "You take [stackmaterial] sheets out of the stack") + return TRUE /obj/item/stack/proc/change_stack(mob/user, amount) if(!use(amount, TRUE, FALSE)) diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index e6e4b31547..be9a459ad8 100755 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -755,23 +755,13 @@ STR.rustle_sound = FALSE STR.max_w_class = WEIGHT_CLASS_BULKY STR.can_hold = typecacheof(fitting_swords) + STR.quickdraw = TRUE /obj/item/storage/belt/sabre/examine(mob/user) . = ..() if(length(contents)) . += "Alt-click it to quickly draw the blade." -/obj/item/storage/belt/sabre/AltClick(mob/user) - if(!iscarbon(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) - return - if(length(contents)) - var/obj/item/I = contents[1] - user.visible_message("[user] takes [I] out of [src].", "You take [I] out of [src].") - user.put_in_hands(I) - update_icon() - else - to_chat(user, "[src] is empty.") - /obj/item/storage/belt/sabre/update_icon() . = ..() if(isliving(loc)) diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm index 6cc2cb6882..f05078de81 100644 --- a/code/game/objects/items/storage/fancy.dm +++ b/code/game/objects/items/storage/fancy.dm @@ -157,6 +157,7 @@ to_chat(user, "You take \a [W] out of the pack.") else to_chat(user, "There are no [icon_type]s left in the pack.") + return TRUE /obj/item/storage/fancy/cigarettes/update_icon() if(fancy_open || !contents.len) diff --git a/code/game/objects/items/storage/lockbox.dm b/code/game/objects/items/storage/lockbox.dm index bd234d8188..3d27370334 100644 --- a/code/game/objects/items/storage/lockbox.dm +++ b/code/game/objects/items/storage/lockbox.dm @@ -114,11 +114,12 @@ . += "Alt-click to [open ? "close":"open"] it." /obj/item/storage/lockbox/medal/AltClick(mob/user) + . = ..() if(user.canUseTopic(src, BE_CLOSE)) if(!SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED)) open = (open ? FALSE : TRUE) update_icon() - ..() + return TRUE /obj/item/storage/lockbox/medal/PopulateContents() new /obj/item/clothing/accessory/medal/gold/captain(src) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index c5b62f0f33..c8c0f004f8 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -338,11 +338,12 @@ M.update_inv_hands() /obj/item/toy/sword/cx/AltClick(mob/living/user) + . = ..() if(!in_range(src, user)) //Basic checks to prevent abuse return if(user.incapacitated() || !istype(user)) to_chat(user, "You can't do that right now!") - return + return TRUE if(alert("Are you sure you want to recolor your blade?", "Confirm Repaint", "Yes", "No") == "Yes") var/energy_color_input = input(usr,"","Choose Energy Color",light_color) as color|null @@ -350,6 +351,7 @@ light_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1) update_icon() update_light() + return TRUE /obj/item/toy/sword/cx/worn_overlays(isinhands, icon_file) . = ..() diff --git a/code/game/objects/items/twohanded.dm b/code/game/objects/items/twohanded.dm index f559d2801d..dd7d46d0d7 100644 --- a/code/game/objects/items/twohanded.dm +++ b/code/game/objects/items/twohanded.dm @@ -541,6 +541,7 @@ clean_blood() /obj/item/twohanded/dualsaber/hypereutactic/AltClick(mob/living/user) + . = ..() if(!user.canUseTopic(src, BE_CLOSE, FALSE) || hacked) return if(user.incapacitated() || !istype(user)) @@ -553,6 +554,7 @@ light_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1) update_icon() update_light() + return TRUE /obj/item/twohanded/dualsaber/hypereutactic/worn_overlays(isinhands, icon_file) . = ..() @@ -659,6 +661,7 @@ qdel(src) /obj/item/twohanded/spear/AltClick(mob/user) + . = ..() if(user.canUseTopic(src, BE_CLOSE)) ..() if(!explosive) @@ -667,6 +670,7 @@ var/input = stripped_input(user,"What do you want your war cry to be? You will shout it when you hit someone in melee.", ,"", 50) if(input) src.war_cry = input + return TRUE /obj/item/twohanded/spear/CheckParts(list/parts_list) var/obj/item/shard/tip = locate() in parts_list diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index e6c7f987d5..51386c791c 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -234,6 +234,7 @@ . = ..() if(unique_reskin && (!current_skin || always_reskinnable) && user.canUseTopic(src, BE_CLOSE, NO_DEXTERY)) reskin_obj(user) + return TRUE /obj/proc/reskin_obj(mob/M) if(!LAZYLEN(unique_reskin)) diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index d19e76d238..427c3d8c84 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -449,6 +449,9 @@ item_chair = null var/turns = 0 +/obj/structure/chair/brass/ComponentInitialize() + return //it spins with the power of ratvar, not components. + /obj/structure/chair/brass/Destroy() STOP_PROCESSING(SSfastprocess, src) . = ..() @@ -464,6 +467,7 @@ return /obj/structure/chair/brass/AltClick(mob/living/user) + . = ..() turns = 0 if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) return @@ -475,6 +479,7 @@ user.visible_message("[user] stops [src]'s uncontrollable spinning.", \ "You grab [src] and stop its wild spinning.") STOP_PROCESSING(SSfastprocess, src) + return TRUE /obj/structure/chair/bronze name = "brass chair" diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 0f8963012f..ce140df6ab 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -526,11 +526,12 @@ to_chat(user, "You fail to break out of [src]!") /obj/structure/closet/AltClick(mob/user) - ..() + . = ..() if(!user.canUseTopic(src, be_close=TRUE) || !isturf(loc)) to_chat(user, "You can't do that right now!") - return + return TRUE togglelock(user) + return TRUE /obj/structure/closet/CtrlShiftClick(mob/living/user) if(!HAS_TRAIT(user, TRAIT_SKITTISH)) diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index 23643ae9cd..d6beaa2628 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -102,9 +102,11 @@ return attack_hand(user) /obj/structure/extinguisher_cabinet/AltClick(mob/living/user) + . = ..() if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) return toggle_cabinet(user) + return TRUE /obj/structure/extinguisher_cabinet/proc/toggle_cabinet(mob/user) if(opened && broken) diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 1a1ff0843a..eaf0023874 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -167,11 +167,12 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an . += "The speaker is [beeper ? "enabled" : "disabled"]. Alt-click to toggle it." /obj/structure/bodycontainer/morgue/AltClick(mob/user) - ..() + . = ..() if(!user.canUseTopic(src, !issilicon(user))) return beeper = !beeper to_chat(user, "You turn the speaker function [beeper ? "on" : "off"].") + return TRUE /obj/structure/bodycontainer/morgue/update_icon() if (!connected || connected.loc != src) // Open or tray is gone. diff --git a/code/game/objects/structures/reflector.dm b/code/game/objects/structures/reflector.dm index 77aad5a9dd..cde60e15c1 100644 --- a/code/game/objects/structures/reflector.dm +++ b/code/game/objects/structures/reflector.dm @@ -167,10 +167,12 @@ return TRUE /obj/structure/reflector/AltClick(mob/user) + . = ..() if(!user.canUseTopic(src, BE_CLOSE, ismonkey(user))) return else if(finished) rotate(user) + return TRUE //TYPES OF REFLECTORS, SINGLE, DOUBLE, BOX diff --git a/code/modules/admin/sound_emitter.dm b/code/modules/admin/sound_emitter.dm index 2901659ce9..702e2071bd 100644 --- a/code/modules/admin/sound_emitter.dm +++ b/code/modules/admin/sound_emitter.dm @@ -52,9 +52,11 @@ edit_emitter(user) /obj/effect/sound_emitter/AltClick(mob/user) + . = ..() if(check_rights_for(user.client, R_SOUNDS)) activate(user) to_chat(user, "Sound emitter activated.") + return TRUE /obj/effect/sound_emitter/proc/edit_emitter(mob/user) var/dat = "" diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm index 58835e0cd4..d4d5349c70 100644 --- a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm +++ b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm @@ -162,9 +162,11 @@ access_display(user) /obj/item/clockwork/slab/AltClick(mob/living/user) + . = ..() if(is_servant_of_ratvar(user) && linking && user.canUseTopic(src, BE_CLOSE, ismonkey(user))) linking = null to_chat(user, "Object link canceled.") + return TRUE /obj/item/clockwork/slab/proc/access_display(mob/living/user) if(!is_servant_of_ratvar(user)) diff --git a/code/modules/antagonists/revenant/revenant_abilities.dm b/code/modules/antagonists/revenant/revenant_abilities.dm index 17d200a685..d6582a294f 100644 --- a/code/modules/antagonists/revenant/revenant_abilities.dm +++ b/code/modules/antagonists/revenant/revenant_abilities.dm @@ -5,7 +5,7 @@ ShiftClickOn(A) return if(modifiers["alt"]) - AltClickNoInteract(src, A) + altclick_listed_turf(A) return if(ishuman(A)) diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index 58ab9c6183..cbbfc05f39 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -823,11 +823,11 @@ return ..() /obj/machinery/airalarm/AltClick(mob/user) - ..() + . = ..() if(!user.canUseTopic(src, !issilicon(user)) || !isturf(loc)) return - else - togglelock(user) + togglelock(user) + return TRUE /obj/machinery/airalarm/proc/togglelock(mob/living/user) if(stat & (NOPOWER|BROKEN)) diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index 2e4cccf5a3..ee4d1bda11 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -338,10 +338,9 @@ Pipelines + Other Objects -> Pipe network /obj/machinery/atmospherics/AltClick(mob/living/L) - if(is_type_in_list(src, GLOB.ventcrawl_machinery)) - L.handle_ventcrawl(src) - return - ..() + if(is_type_in_typecache(src, GLOB.ventcrawl_machinery)) + return L.handle_ventcrawl(src) + return ..() /obj/machinery/atmospherics/proc/can_crawl_through() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm index b95b15efbd..c05c3bb3c9 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm @@ -44,6 +44,7 @@ Thus, the two variables affect pump operation are set in New(): return ..() /obj/machinery/atmospherics/components/binary/pump/AltClick(mob/user) + . = ..() var/area/A = get_area(src) var/turf/T = get_turf(src) if(user.canUseTopic(src, BE_CLOSE, FALSE,)) @@ -51,6 +52,7 @@ Thus, the two variables affect pump operation are set in New(): to_chat(user,"You maximize the pressure on the [src].") investigate_log("Pump, [src.name], was maximized by [key_name(usr)] at [x], [y], [z], [A]", INVESTIGATE_ATMOS) message_admins("Pump, [src.name], was maximized by [ADMIN_LOOKUPFLW(usr)] at [ADMIN_COORDJMP(T)], [A]") + return TRUE /obj/machinery/atmospherics/components/binary/pump/layer1 piping_layer = PIPING_LAYER_MIN diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm index 6b0465d589..629a7fc901 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm @@ -28,6 +28,7 @@ return ..() /obj/machinery/atmospherics/components/trinary/filter/AltClick(mob/user) + . = ..() var/area/A = get_area(src) var/turf/T = get_turf(src) if(user.canUseTopic(src, BE_CLOSE, FALSE,)) @@ -35,6 +36,7 @@ to_chat(user,"You maximize the pressure on the [src].") investigate_log("Filter, [src.name], was maximized by [key_name(usr)] at [x], [y], [z], [A]", INVESTIGATE_ATMOS) message_admins("Filter, [src.name], was maximized by [ADMIN_LOOKUPFLW(usr)] at [ADMIN_COORDJMP(T)], [A]") + return TRUE /obj/machinery/atmospherics/components/trinary/filter/layer1 piping_layer = PIPING_LAYER_MIN diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm index 9e4deaf3d8..9646b78321 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm @@ -30,6 +30,7 @@ return ..() /obj/machinery/atmospherics/components/trinary/mixer/AltClick(mob/user) + . = ..() var/area/A = get_area(src) var/turf/T = get_turf(src) if(user.canUseTopic(src, BE_CLOSE, FALSE,)) @@ -37,6 +38,7 @@ to_chat(user,"You maximize the pressure on the [src].") investigate_log("Mixer, [src.name], was maximized by [key_name(usr)] at [x], [y], [z], [A]", INVESTIGATE_ATMOS) message_admins("Mixer, [src.name], was maximized by [ADMIN_LOOKUPFLW(usr)] at [ADMIN_COORDJMP(T)], [A]") + return TRUE //node 3 is the outlet, nodes 1 & 2 are intakes /obj/machinery/atmospherics/components/trinary/mixer/layer1 diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index ca8b21593f..0a54503be5 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -399,13 +399,14 @@ return ..() /obj/machinery/atmospherics/components/unary/cryo_cell/AltClick(mob/user) + . = ..() if(user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) if(state_open) close_machine() else open_machine() update_icon() - return ..() + return TRUE /obj/machinery/atmospherics/components/unary/cryo_cell/update_remote_sight(mob/living/user) return // we don't see the pipe network while inside cryo. diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm index b52dc158e4..2e06e68709 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm @@ -210,13 +210,15 @@ min_temperature = max(T0C - (initial(min_temperature) + L * 15), TCMB) //73.15K with T1 stock parts /obj/machinery/atmospherics/components/unary/thermomachine/freezer/AltClick(mob/living/user) + . = ..() var/area/A = get_area(src) var/turf/T = get_turf(src) if(!istype(user) || !user.canUseTopic(src, BE_CLOSE)) return - target_temperature = min_temperature + target_temperature = min_temperature investigate_log("was set to [target_temperature] K by [key_name(usr)]", INVESTIGATE_ATMOS) message_admins("[src.name] was minimized by [ADMIN_LOOKUPFLW(usr)] at [ADMIN_COORDJMP(T)], [A]") + return TRUE /obj/machinery/atmospherics/components/unary/thermomachine/heater name = "heater" @@ -240,6 +242,7 @@ max_temperature = T20C + (initial(max_temperature) * L) //573.15K with T1 stock parts /obj/machinery/atmospherics/components/unary/thermomachine/heater/AltClick(mob/living/user) + . = ..() var/area/A = get_area(src) var/turf/T = get_turf(src) if(!istype(user) || !user.canUseTopic(src, BE_CLOSE)) @@ -247,3 +250,4 @@ target_temperature = max_temperature investigate_log("was set to [target_temperature] K by [key_name(usr)]", INVESTIGATE_ATMOS) message_admins("[src.name] was maximized by [ADMIN_LOOKUPFLW(usr)] at [ADMIN_COORDJMP(T)], [A]") + return TRUE diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm index 81540b0698..b47b6b42c1 100644 --- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm +++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm @@ -81,11 +81,13 @@ return air_contents /obj/machinery/portable_atmospherics/AltClick(mob/living/user) + . = ..() if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, !ismonkey(user))) return if(holding) to_chat(user, "You remove [holding] from [src].") replace_tank(user, TRUE) + return TRUE /obj/machinery/portable_atmospherics/examine(mob/user) . = ..() diff --git a/code/modules/cargo/supplypod_beacon.dm b/code/modules/cargo/supplypod_beacon.dm index 915d671fe8..006f1a8084 100644 --- a/code/modules/cargo/supplypod_beacon.dm +++ b/code/modules/cargo/supplypod_beacon.dm @@ -76,12 +76,14 @@ to_chat(user, "[src] linked to [C].") /obj/item/supplypod_beacon/AltClick(mob/user) + . = ..() if (!user.canUseTopic(src, !issilicon(user))) return if (express_console) unlink_console() else to_chat(user, "There is no linked console!") + return TRUE /obj/item/supplypod_beacon/attackby(obj/item/W, mob/user) if(istype(W, /obj/item/pen)) //give a tag that is visible from the linked express console diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index d142699a21..a2a17a43a3 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -253,16 +253,14 @@ BLIND // can't see anything H.update_suit_sensors() /obj/item/clothing/under/AltClick(mob/user) - if(..()) - return 1 - + . = ..() if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) return + if(attached_accessory) + remove_accessory(user) else - if(attached_accessory) - remove_accessory(user) - else - rolldown() + rolldown() + return TRUE /obj/item/clothing/under/verb/jumpsuit_adjust() set name = "Adjust Jumpsuit Style" diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 608f71cf11..4b15e7b06b 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -427,19 +427,17 @@ ..() /obj/item/clothing/glasses/AltClick(mob/user) + . = ..() if(glass_colour_type && ishuman(user)) var/mob/living/carbon/human/H = user - if(H.client) - if(H.client.prefs) - if(src == H.glasses) - H.client.prefs.uses_glasses_colour = !H.client.prefs.uses_glasses_colour - if(H.client.prefs.uses_glasses_colour) - to_chat(H, "You will now see glasses colors.") - else - to_chat(H, "You will no longer see glasses colors.") - H.update_glasses_color(src, 1) - else - return ..() + if(H.client?.prefs && src == H.glasses) + H.client.prefs.uses_glasses_colour = !H.client.prefs.uses_glasses_colour + if(H.client.prefs.uses_glasses_colour) + to_chat(H, "You will now see glasses colors.") + else + to_chat(H, "You will no longer see glasses colors.") + H.update_glasses_color(src, 1) + return TRUE /obj/item/clothing/glasses/proc/change_glass_color(mob/living/carbon/human/H, datum/client_colour/glass_colour/new_color_type) var/old_colour_type = glass_colour_type diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index d72e4ba1d7..ee4db872f7 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -116,8 +116,10 @@ toggle_helmet_light(user) /obj/item/clothing/head/hardhat/weldhat/AltClick(mob/user) + . = ..() if(user.canUseTopic(src, BE_CLOSE)) toggle_welding_screen(user) + return TRUE /obj/item/clothing/head/hardhat/weldhat/proc/toggle_welding_screen(mob/living/user) if(weldingvisortoggle(user)) diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 8ff6fe8bd1..05116c8b97 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -104,16 +104,16 @@ . += "Alt-click to take a candy corn." /obj/item/clothing/head/fedora/det_hat/AltClick(mob/user) - if(user.canUseTopic(src, BE_CLOSE, ismonkey(user))) - ..() - if(loc == user) - if(candy_cooldown < world.time) - var/obj/item/reagent_containers/food/snacks/candy_corn/CC = new /obj/item/reagent_containers/food/snacks/candy_corn(src) - user.put_in_hands(CC) - to_chat(user, "You slip a candy corn from your hat.") - candy_cooldown = world.time+1200 - else - to_chat(user, "You just took a candy corn! You should wait a couple minutes, lest you burn through your stash.") + . = ..() + if(loc == user && user.canUseTopic(src, BE_CLOSE, ismonkey(user))) + if(candy_cooldown < world.time) + var/obj/item/reagent_containers/food/snacks/candy_corn/CC = new /obj/item/reagent_containers/food/snacks/candy_corn(src) + user.put_in_hands(CC) + to_chat(user, "You slip a candy corn from your hat.") + candy_cooldown = world.time+1200 + else + to_chat(user, "You just took a candy corn! You should wait a couple minutes, lest you burn through your stash.") + return TRUE //Mime diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index 8754c89511..b5fdc3ff60 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -22,11 +22,11 @@ /obj/item/clothing/head/soft/AltClick(mob/user) - ..() + . = ..() if(!user.canUseTopic(src, BE_CLOSE, ismonkey(user))) return - else - flip(user) + flip(user) + return TRUE /obj/item/clothing/head/soft/proc/flip(mob/user) diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm index 7d0c4a455e..f4335d17e8 100644 --- a/code/modules/clothing/masks/breath.dm +++ b/code/modules/clothing/masks/breath.dm @@ -23,11 +23,11 @@ adjustmask(user) /obj/item/clothing/mask/breath/AltClick(mob/user) - ..() + . = ..() if(!user.canUseTopic(src, BE_CLOSE, ismonkey(user))) return - else - adjustmask(user) + adjustmask(user) + return TRUE /obj/item/clothing/mask/breath/examine(mob/user) . = ..() diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index e7032ead13..b1fa3253b3 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -964,13 +964,12 @@ . += energy_overlay /obj/item/clothing/suit/space/hardsuit/lavaknight/AltClick(mob/living/user) - if(user.incapacitated() || !istype(user)) + . = ..() + if(!in_range(src, user) || !istype(user)) + return + if(user.incapacitated()) to_chat(user, "You can't do that right now!") - return - if(!in_range(src, user)) - return - if(user.incapacitated() || !istype(user) || !in_range(src, user)) - return + return TRUE if(alert("Are you sure you want to recolor your armor stripes?", "Confirm Repaint", "Yes", "No") == "Yes") var/energy_color_input = input(usr,"","Choose Energy Color",energy_color) as color|null @@ -986,6 +985,7 @@ user.update_inv_wear_suit() light_color = energy_color update_light() + return TRUE /obj/item/clothing/suit/space/hardsuit/lavaknight/examine(mob/user) . = ..() diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm index f869eb5d44..559d3006a1 100644 --- a/code/modules/clothing/suits/toggles.dm +++ b/code/modules/clothing/suits/toggles.dm @@ -92,11 +92,11 @@ //Toggle exosuits for different aesthetic styles (hoodies, suit jacket buttons, etc) /obj/item/clothing/suit/toggle/AltClick(mob/user) - ..() + . = ..() if(!user.canUseTopic(src, BE_CLOSE, ismonkey(user))) return - else - suit_toggle(user) + suit_toggle(user) + return TRUE /obj/item/clothing/suit/toggle/ui_action_click() suit_toggle() diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm index 0a0499b5f9..e165297a3f 100644 --- a/code/modules/clothing/under/accessories.dm +++ b/code/modules/clothing/under/accessories.dm @@ -67,10 +67,12 @@ return /obj/item/clothing/accessory/AltClick(mob/user) + . = ..() if(istype(user) && user.canUseTopic(src, BE_CLOSE, ismonkey(user))) if(initial(above_suit)) above_suit = !above_suit to_chat(user, "[src] will be worn [above_suit ? "above" : "below"] your suit.") + return TRUE /obj/item/clothing/accessory/examine(mob/user) . = ..() diff --git a/code/modules/detectivework/scanner.dm b/code/modules/detectivework/scanner.dm index eaa31c01bf..944fbb8df8 100644 --- a/code/modules/detectivework/scanner.dm +++ b/code/modules/detectivework/scanner.dm @@ -187,9 +187,11 @@ return time2text(world.time + 432000, ":ss") /obj/item/detective_scanner/AltClick(mob/living/user) + . = ..() // Best way for checking if a player can use while not incapacitated, etc if(!user.canUseTopic(src, be_close=TRUE)) return + . = TRUE if(!LAZYLEN(log)) to_chat(user, "Cannot clear logs, the scanner has no logs.") return diff --git a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm index e67de92773..4efac6f508 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm @@ -186,8 +186,10 @@ ..() /obj/machinery/microwave/AltClick(mob/user) + . = ..() if(user.canUseTopic(src, !issilicon(usr))) cook() + return TRUE /obj/machinery/microwave/ui_interact(mob/user) . = ..() diff --git a/code/modules/games/cas.dm b/code/modules/games/cas.dm index fe038ce3f1..4fbb931b32 100644 --- a/code/modules/games/cas.dm +++ b/code/modules/games/cas.dm @@ -130,9 +130,11 @@ update_icon() /obj/item/toy/cards/singlecard/cas/AltClick(mob/living/user) + . = ..() if(!ishuman(user) || !user.canUseTopic(src, BE_CLOSE)) return Flip() + return TRUE /obj/item/toy/cards/singlecard/cas/update_icon() if(flipped) diff --git a/code/modules/mining/abandoned_crates.dm b/code/modules/mining/abandoned_crates.dm index f98f0755c8..4cfd2e447f 100644 --- a/code/modules/mining/abandoned_crates.dm +++ b/code/modules/mining/abandoned_crates.dm @@ -181,10 +181,11 @@ else return ..() +//this helps you not blow up so easily by overriding unlocking which results in an immediate boom. /obj/structure/closet/crate/secure/loot/AltClick(mob/living/user) - if(!user.canUseTopic(src, BE_CLOSE)) - return - return attack_hand(user) //this helps you not blow up so easily by overriding unlocking which results in an immediate boom. + if(user.canUseTopic(src, BE_CLOSE)) + attack_hand(user) + return TRUE /obj/structure/closet/crate/secure/loot/attackby(obj/item/W, mob/user) if(locked) diff --git a/code/modules/mining/equipment/marker_beacons.dm b/code/modules/mining/equipment/marker_beacons.dm index 00ce37b79a..9d595664ff 100644 --- a/code/modules/mining/equipment/marker_beacons.dm +++ b/code/modules/mining/equipment/marker_beacons.dm @@ -59,6 +59,7 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list( /obj/item/stack/marker_beacon/AltClick(mob/living/user) if(!istype(user) || !user.canUseTopic(src, BE_CLOSE)) return + . = TRUE var/input_color = input(user, "Choose a color.", "Beacon Color") as null|anything in GLOB.marker_beacon_colors if(!istype(user) || !user.canUseTopic(src, BE_CLOSE)) return @@ -128,9 +129,10 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list( return ..() /obj/structure/marker_beacon/AltClick(mob/living/user) - ..() + . = ..() if(!istype(user) || !user.canUseTopic(src, BE_CLOSE)) return + . = TRUE var/input_color = input(user, "Choose a color.", "Beacon Color") as null|anything in GLOB.marker_beacon_colors if(!istype(user) || !user.canUseTopic(src, BE_CLOSE)) return diff --git a/code/modules/mob/living/simple_animal/guardian/types/explosive.dm b/code/modules/mob/living/simple_animal/guardian/types/explosive.dm index b1af34eb02..e9f767376a 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/explosive.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/explosive.dm @@ -29,6 +29,7 @@ /mob/living/simple_animal/hostile/guardian/bomb/AltClickOn(atom/movable/A) if(!istype(A)) + altclick_listed_turf(A) return if(loc == summoner) to_chat(src, "You must be manifested to create bombs!") diff --git a/code/modules/mob/living/simple_animal/guardian/types/support.dm b/code/modules/mob/living/simple_animal/guardian/types/support.dm index d31809e9aa..b9783ed116 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/support.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/support.dm @@ -105,8 +105,9 @@ /mob/living/simple_animal/hostile/guardian/healer/AltClickOn(atom/movable/A) if(!istype(A)) + altclick_listed_turf(A) return - if(src.loc == summoner) + if(loc == summoner) to_chat(src, "You must be manifested to warp a target!") return if(!beacon) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm index b1694a6172..d2b23d5e39 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm @@ -267,6 +267,7 @@ Difficulty: Medium /mob/living/simple_animal/hostile/megafauna/dragon/AltClickOn(atom/movable/A) if(!istype(A)) + altclick_listed_turf(A) return if(swoop_cooldown >= world.time) to_chat(src, "You need to wait 20 seconds between swoop attacks!") diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index cca39cfea6..6279821170 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -441,7 +441,7 @@ Difficulty: Normal /mob/living/simple_animal/hostile/megafauna/hierophant/AltClickOn(atom/A) //player control handler(don't give this to a player holy fuck) if(!istype(A) || get_dist(A, src) <= 2) - return + return altclick_listed_turf(A) blink(A) //Hierophant overlays diff --git a/code/modules/mob/living/ventcrawling.dm b/code/modules/mob/living/ventcrawling.dm index cacd1c7c56..7f8513bfd9 100644 --- a/code/modules/mob/living/ventcrawling.dm +++ b/code/modules/mob/living/ventcrawling.dm @@ -8,6 +8,7 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, typecacheof(list( /mob/living/proc/handle_ventcrawl(atom/A) if(!ventcrawler || !Adjacent(A)) return + . = TRUE //return value to stop the client from being shown the turf contents stat tab on alt-click. if(stat) to_chat(src, "You must be conscious to do this!") return diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index 1b3501f78b..79c74de2eb 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -126,7 +126,7 @@ portable_drive.verb_pickup() /obj/item/modular_computer/AltClick(mob/user) - ..() + . = ..() if(issilicon(user)) return @@ -142,7 +142,7 @@ return if(ai_slot) ai_slot.try_eject(null, user) - + return TRUE // Gets IDs/access levels from card slot. Would be useful when/if PDAs would become modular PCs. /obj/item/modular_computer/GetAccess() diff --git a/code/modules/modular_computers/computers/item/laptop.dm b/code/modules/modular_computers/computers/item/laptop.dm index 4d4dee1b8c..ce8ab9659c 100644 --- a/code/modules/modular_computers/computers/item/laptop.dm +++ b/code/modules/modular_computers/computers/item/laptop.dm @@ -86,8 +86,8 @@ /obj/item/modular_computer/laptop/AltClick(mob/user) if(screen_on) // Close it. try_toggle_open(user) - else - return ..() + return TRUE + return ..() /obj/item/modular_computer/laptop/proc/toggle_open(mob/living/user=null) if(screen_on) diff --git a/code/modules/modular_computers/computers/machinery/modular_computer.dm b/code/modules/modular_computers/computers/machinery/modular_computer.dm index b3476e7046..a988003b67 100644 --- a/code/modules/modular_computers/computers/machinery/modular_computer.dm +++ b/code/modules/modular_computers/computers/machinery/modular_computer.dm @@ -94,8 +94,9 @@ cpu.eject_card() /obj/machinery/modular_computer/AltClick(mob/user) + . = ..() if(cpu) - cpu.AltClick(user) + return cpu.AltClick(user) //ATTACK HAND IGNORING PARENT RETURN VALUE // On-click handling. Turns on the computer if it's off and opens the GUI. diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm index ecef5a703a..1521926e74 100644 --- a/code/modules/paperwork/paperplane.dm +++ b/code/modules/paperwork/paperplane.dm @@ -122,6 +122,7 @@ . += "Alt-click [src] to fold it into a paper plane." /obj/item/paper/AltClick(mob/living/carbon/user, obj/item/I) + . = ..() if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user), NO_TK)) return to_chat(user, "You fold [src] into the shape of a plane!") @@ -134,3 +135,4 @@ I = new plane_type(user, src) user.put_in_hands(I) + return TRUE diff --git a/code/modules/photography/camera/camera.dm b/code/modules/photography/camera/camera.dm index 9d01eca0cf..96738e5021 100644 --- a/code/modules/photography/camera/camera.dm +++ b/code/modules/photography/camera/camera.dm @@ -46,13 +46,14 @@ . += "Alt-click to change its focusing, allowing you to set how big of an area it will capture." /obj/item/camera/AltClick(mob/user) + . = ..() if(!user.canUseTopic(src, BE_CLOSE)) return var/desired_x = input(user, "How high do you want the camera to shoot, between [picture_size_x_min] and [picture_size_x_max]?", "Zoom", picture_size_x) as num var/desired_y = input(user, "How wide do you want the camera to shoot, between [picture_size_y_min] and [picture_size_y_max]?", "Zoom", picture_size_y) as num picture_size_x = min(CLAMP(desired_x, picture_size_x_min, picture_size_x_max), CAMERA_PICTURE_SIZE_HARD_LIMIT) picture_size_y = min(CLAMP(desired_y, picture_size_y_min, picture_size_y_max), CAMERA_PICTURE_SIZE_HARD_LIMIT) - + return TRUE /obj/item/camera/attack(mob/living/carbon/human/M, mob/user) return diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 5e3888a8c5..5da29bf5ac 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -702,11 +702,11 @@ return ..() /obj/machinery/power/apc/AltClick(mob/user) - ..() + . = ..() if(!user.canUseTopic(src, !issilicon(user)) || !isturf(loc)) return - else - togglelock(user) + togglelock(user) + return TRUE /obj/machinery/power/apc/proc/togglelock(mob/living/user) if(obj_flags & EMAGGED) diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index 1e1b518849..571525d8f0 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -225,10 +225,11 @@ spread = 2 /obj/item/gun/ballistic/shotgun/automatic/combat/compact/AltClick(mob/living/user) + . = ..() if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) return toggle_stock(user) - . = ..() + return TRUE /obj/item/gun/ballistic/shotgun/automatic/combat/compact/examine(mob/user) . = ..() @@ -289,8 +290,10 @@ to_chat(user, "You switch to tube A.") /obj/item/gun/ballistic/shotgun/automatic/dual_tube/AltClick(mob/living/user) + . = ..() if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) return pump() + return TRUE // DOUBLE BARRELED SHOTGUN and IMPROVISED SHOTGUN are in revolver.dm diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 7e5cb21822..a3dd3c8049 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -428,10 +428,11 @@ return final_list /obj/machinery/chem_dispenser/AltClick(mob/living/user) + . = ..() if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) return replace_beaker(user) - return + return TRUE /obj/machinery/chem_dispenser/drinks/Initialize() . = ..() diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index eeb452dbb5..b4f14c69a7 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -29,10 +29,11 @@ icon_state = "mixer0b" /obj/machinery/chem_heater/AltClick(mob/living/user) + . = ..() if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) return replace_beaker(user) - return + return TRUE /obj/machinery/chem_heater/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker) if(beaker) diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index f540ae850d..06e33ddf9f 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -112,10 +112,11 @@ return ..() /obj/machinery/chem_master/AltClick(mob/living/user) + . = ..() if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) return replace_beaker(user) - return + return TRUE /obj/machinery/chem_master/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker) if(beaker) diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm index 05fa4d382a..6ae0a682d8 100644 --- a/code/modules/reagents/chemistry/machinery/pandemic.dm +++ b/code/modules/reagents/chemistry/machinery/pandemic.dm @@ -237,10 +237,11 @@ return ..() /obj/machinery/computer/pandemic/AltClick(mob/living/user) + . = ..() if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) return replace_beaker(user) - return + return TRUE /obj/machinery/computer/pandemic/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker) if(beaker) diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 85cb544667..f1a4d1554e 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -338,8 +338,10 @@ return FALSE /obj/item/hypospray/mkii/AltClick(mob/user) + . = ..() if(vial) vial.attack_self(user) + return TRUE // Gunna allow this for now, still really don't approve - Pooj /obj/item/hypospray/mkii/emag_act(mob/user) diff --git a/code/modules/reagents/reagent_containers/rags.dm b/code/modules/reagents/reagent_containers/rags.dm index 8d44a2a406..58c28f1452 100644 --- a/code/modules/reagents/reagent_containers/rags.dm +++ b/code/modules/reagents/reagent_containers/rags.dm @@ -94,6 +94,7 @@ if(react_loc) reagents.reaction(react_loc, TOUCH) reagents.clear_reagents() + return TRUE /obj/item/reagent_containers/rag/towel name = "towel" diff --git a/code/modules/research/nanites/nanite_hijacker.dm b/code/modules/research/nanites/nanite_hijacker.dm index 88779df447..920c42b411 100644 --- a/code/modules/research/nanites/nanite_hijacker.dm +++ b/code/modules/research/nanites/nanite_hijacker.dm @@ -14,6 +14,7 @@ return if(disk) eject() + return TRUE /obj/item/nanite_hijacker/examine(mob/user) . = ..() diff --git a/code/modules/research/nanites/nanite_remote.dm b/code/modules/research/nanites/nanite_remote.dm index 3b242d28df..a7c8533521 100644 --- a/code/modules/research/nanites/nanite_remote.dm +++ b/code/modules/research/nanites/nanite_remote.dm @@ -35,6 +35,7 @@ update_icon() else to_chat(user, "Access denied.") + return TRUE /obj/item/nanite_remote/emag_act(mob/user) . = ..() diff --git a/code/modules/ruins/spaceruin_code/hilbertshotel.dm b/code/modules/ruins/spaceruin_code/hilbertshotel.dm index cd641adb33..f64b5e4d01 100644 --- a/code/modules/ruins/spaceruin_code/hilbertshotel.dm +++ b/code/modules/ruins/spaceruin_code/hilbertshotel.dm @@ -284,6 +284,7 @@ GLOBAL_VAR_INIT(hhmysteryRoomNumber, 1337) var/datum/action/peepholeCancel/PHC = new user.overlay_fullscreen("remote_view", /obj/screen/fullscreen/impaired, 1) PHC.Grant(user) + return TRUE /turf/closed/indestructible/hoteldoor/check_eye(mob/user) if(get_dist(get_turf(src), get_turf(user)) >= 2) diff --git a/code/modules/vehicles/ridden.dm b/code/modules/vehicles/ridden.dm index 27da0f6cea..13a139ef2e 100644 --- a/code/modules/vehicles/ridden.dm +++ b/code/modules/vehicles/ridden.dm @@ -49,6 +49,7 @@ return ..() /obj/vehicle/ridden/AltClick(mob/user) + . = ..() if(inserted_key && user.canUseTopic(src, BE_CLOSE, ismonkey(user))) if(!is_occupant(user)) to_chat(user, "You must be riding the [src] to remove [src]'s key!") @@ -57,7 +58,7 @@ inserted_key.forceMove(drop_location()) user.put_in_hands(inserted_key) inserted_key = null - return ..() + return TRUE /obj/vehicle/ridden/driver_move(mob/user, direction) if(key_type && !is_key(inserted_key)) diff --git a/code/modules/vehicles/scooter.dm b/code/modules/vehicles/scooter.dm index 8c21b050aa..0dd7ff32a8 100644 --- a/code/modules/vehicles/scooter.dm +++ b/code/modules/vehicles/scooter.dm @@ -94,6 +94,7 @@ qdel(src) /obj/vehicle/ridden/scooter/skateboard/AltClick(mob/user) + . = ..() var/datum/component/riding/R = src.GetComponent(/datum/component/riding) if (!adjusted_speed) R.vehicle_move_delay = 0 @@ -103,6 +104,7 @@ R.vehicle_move_delay = 1 to_chat(user, "You adjust the wheels on [src] to make it go slower.") adjusted_speed = FALSE + return TRUE //CONSTRUCTION /obj/item/scooter_frame diff --git a/modular_citadel/code/modules/arousal/toys/dildos.dm b/modular_citadel/code/modules/arousal/toys/dildos.dm index 24c8de1b60..5a8e2fa9cb 100644 --- a/modular_citadel/code/modules/arousal/toys/dildos.dm +++ b/modular_citadel/code/modules/arousal/toys/dildos.dm @@ -37,15 +37,11 @@ name = "[sizeword][dildo_shape] [can_customize ? "custom " : ""][dildo_type]" /obj/item/dildo/AltClick(mob/living/user) - if(QDELETED(src)) - return - if(!isliving(user)) - return - if(isAI(user)) - return - if(user.stat > 0)//unconscious or dead + . = ..() + if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) return customize(user) + return TRUE /obj/item/dildo/proc/customize(mob/living/user) if(!can_customize) diff --git a/modular_citadel/code/modules/clothing/clothing.dm b/modular_citadel/code/modules/clothing/clothing.dm index b23e805f92..843b7a84c9 100644 --- a/modular_citadel/code/modules/clothing/clothing.dm +++ b/modular_citadel/code/modules/clothing/clothing.dm @@ -56,7 +56,7 @@ add_overlay(tertiary_overlay) /obj/item/clothing/AltClick(mob/living/user) - ..() + . = ..() if(hasprimary | hassecondary | hastertiary) var/choice = input(user,"polychromic thread options", "Clothing Recolor") as null|anything in list("[hasprimary ? "Primary Color" : ""]", "[hassecondary ? "Secondary Color" : ""]", "[hastertiary ? "Tertiary Color" : ""]") //generates a list depending on the enabled overlays switch(choice) //Lets the list's options actually lead to something @@ -78,6 +78,7 @@ tertiary_color = sanitize_hexcolor(tertiary_color_input, desired_format=6, include_crunch=1) update_icon() user.regenerate_icons() + return TRUE /obj/item/clothing/examine(mob/user) . = ..() diff --git a/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm b/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm index 17def26f1d..6ae5b147c6 100644 --- a/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm +++ b/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm @@ -162,9 +162,6 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm ! to_chat(user, "[GLOB.meta_gas_names[id]]: [round(gas_concentration*100, 0.01)] %") to_chat(user, "Temperature: [round(environment.temperature-T0C)] °C") -/obj/item/analyzer/nose/AltClick(mob/user) //Barometer output for measuring when the next storm happens - . = ..() - /obj/item/analyzer/nose/afterattack(atom/target, mob/user, proximity) . = ..() if(!proximity) diff --git a/modular_citadel/code/modules/projectiles/guns/ballistic/rifles.dm b/modular_citadel/code/modules/projectiles/guns/ballistic/rifles.dm index e40ccfe6ea..024669757a 100644 --- a/modular_citadel/code/modules/projectiles/guns/ballistic/rifles.dm +++ b/modular_citadel/code/modules/projectiles/guns/ballistic/rifles.dm @@ -207,8 +207,10 @@ var/mob/M = loc M.update_inv_hands() /obj/item/gun/ballistic/automatic/AM4B/AltClick(mob/living/user) + . = ..() if(!in_range(src, user)) //Basic checks to prevent abuse return + . = TRUE if(user.incapacitated() || !istype(user)) to_chat(user, "You can't do that right now!") return @@ -217,6 +219,7 @@ if(body_color_input) body_color = sanitize_hexcolor(body_color_input, desired_format=6, include_crunch=1) update_icon() + /obj/item/gun/ballistic/automatic/AM4B/examine(mob/user) . = ..() . += "Alt-click to recolor it." diff --git a/modular_citadel/code/modules/projectiles/guns/energy/energy_gun.dm b/modular_citadel/code/modules/projectiles/guns/energy/energy_gun.dm index 5fc75fa414..89e086687a 100644 --- a/modular_citadel/code/modules/projectiles/guns/energy/energy_gun.dm +++ b/modular_citadel/code/modules/projectiles/guns/energy/energy_gun.dm @@ -30,8 +30,10 @@ obj/item/gun/energy/e_gun/cx/update_icon() M.update_inv_hands() obj/item/gun/energy/e_gun/cx/AltClick(mob/living/user) + . = ..() if(!in_range(src, user)) //Basic checks to prevent abuse return + . = TRUE if(user.incapacitated() || !istype(user)) to_chat(user, "You can't do that right now!") return diff --git a/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm b/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm index be070ff7b5..309b36b9b2 100644 --- a/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm +++ b/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm @@ -83,15 +83,17 @@ return 1 /obj/item/gun/energy/pumpaction/AltClick(mob/living/user) //for changing firing modes since attackself is already used for pumping + . = ..() if(!in_range(src, user)) //Basic checks to prevent abuse return - if(user.incapacitated() || !istype(user)) - to_chat(user, "You can't do that right now!") - return if(ammo_type.len > 1) - select_fire(user) - update_icon() + if(user.incapacitated() || !istype(user)) + to_chat(user, "You can't do that right now!") + else + select_fire(user) + update_icon() + return TRUE /obj/item/gun/energy/pumpaction/examine(mob/user) //so people don't ask HOW TO CHANGE FIRING MODE . = ..() From 02048ce0098773d43db84ae3d7a7ceb2cdae8e58 Mon Sep 17 00:00:00 2001 From: Artur Date: Fri, 29 Nov 2019 21:28:14 +0200 Subject: [PATCH 08/64] Bludsuckers --- code/__DEFINES/atom_hud.dm | 1 + code/__DEFINES/bloodsucker.dm | 14 + code/__DEFINES/role_preferences.dm | 6 +- code/__DEFINES/traits.dm | 8 +- code/_onclick/hud/human.dm | 7 + code/datums/hud.dm | 1 + .../game/gamemodes/bloodsucker/bloodsucker.dm | 294 +++++++ code/game/gamemodes/bloodsucker/hunter.dm | 49 ++ code/game/objects/items/devices/scanners.dm | 2 +- .../items/implants/implant_mindshield.dm | 3 + code/game/objects/structures/mirror.dm | 3 +- .../bloodsucker/bloodsucker_flaws.dm | 84 ++ .../bloodsucker/bloodsucker_integration.dm | 148 ++++ .../bloodsucker/bloodsucker_life.dm | 500 +++++++++++ .../bloodsucker/bloodsucker_objectives.dm | 355 ++++++++ .../bloodsucker/bloodsucker_powers.dm | 413 +++++++++ .../bloodsucker/bloodsucker_sunlight.dm | 198 +++++ .../antagonists/bloodsucker/bloodsucker_ui.dm | 116 +++ .../bloodsucker/datum_bloodsucker.dm | 794 ++++++++++++++++++ .../antagonists/bloodsucker/datum_hunter.dm | 303 +++++++ .../antagonists/bloodsucker/datum_vassal.dm | 151 ++++ .../bloodsucker/items/bloodsucker_items.dm | 55 ++ .../bloodsucker/items/bloodsucker_organs.dm | 90 ++ .../bloodsucker/items/bloodsucker_stake.dm | 218 +++++ .../bloodsucker/objects/bloodsucker_coffin.dm | 254 ++++++ .../bloodsucker/objects/bloodsucker_crypt.dm | 569 +++++++++++++ .../bloodsucker/objects/bloodsucker_lair.dm | 105 +++ .../bloodsucker/powers/bs_brawn.dm | 187 +++++ .../bloodsucker/powers/bs_cloak.dm | 68 ++ .../antagonists/bloodsucker/powers/bs_feed.dm | 342 ++++++++ .../bloodsucker/powers/bs_fortitude.dm | 63 ++ .../bloodsucker/powers/bs_gohome.dm | 140 +++ .../bloodsucker/powers/bs_haste.dm | 92 ++ .../bloodsucker/powers/bs_lunge.dm | 102 +++ .../bloodsucker/powers/bs_masquerade.dm | 98 +++ .../bloodsucker/powers/bs_mesmerize.dm | 114 +++ .../bloodsucker/powers/bs_trespass.dm | 123 +++ .../antagonists/bloodsucker/powers/bs_veil.dm | 165 ++++ .../bloodsucker/powers/v_distress.dm | 13 + .../bloodsucker/powers/v_recuperate.dm | 57 ++ code/modules/clothing/neck/_neck.dm | 4 +- code/modules/crafting/craft.dm | 3 +- code/modules/language/vampiric.dm | 27 + code/modules/mob/living/blood.dm | 3 + .../modules/mob/living/carbon/damage_procs.dm | 4 + .../mob/living/carbon/human/examine.dm | 9 +- .../mob/living/carbon/human/species.dm | 2 + code/modules/mob/living/carbon/life.dm | 3 + .../simple_animal/friendly/cockroach.dm | 1 + .../mob/living/simple_animal/friendly/crab.dm | 1 + .../living/simple_animal/friendly/mouse.dm | 1 + .../simple_animal/hostile/retaliate/bat.dm | 1 + .../mob/living/simple_animal/simple_animal.dm | 1 + code/modules/mob/mob_movement.dm | 5 +- code/modules/surgery/organs/tongue.dm | 1 + config/game_options.txt | 2 + icons/mob/actions/bloodsucker.dmi | Bin 0 -> 16808 bytes icons/mob/hud.dmi | Bin 15921 -> 17456 bytes icons/mob/inhands/weapons/melee_lefthand.dmi | Bin 2300 -> 2487 bytes icons/mob/inhands/weapons/melee_righthand.dmi | Bin 2310 -> 2491 bytes icons/obj/items_and_weapons.dmi | Bin 127128 -> 128661 bytes icons/obj/stake.dmi | Bin 0 -> 866 bytes icons/obj/vamp_obj.dmi | Bin 0 -> 8966 bytes sound/bloodsucker/BloodsuckerAlert.ogg | Bin 0 -> 218645 bytes sound/bloodsucker/coffin_close.ogg | Bin 0 -> 59363 bytes sound/bloodsucker/coffin_open.ogg | Bin 0 -> 71218 bytes tgstation.dme | 33 + 67 files changed, 6397 insertions(+), 9 deletions(-) create mode 100644 code/__DEFINES/bloodsucker.dm create mode 100644 code/game/gamemodes/bloodsucker/bloodsucker.dm create mode 100644 code/game/gamemodes/bloodsucker/hunter.dm create mode 100644 code/modules/antagonists/bloodsucker/bloodsucker_flaws.dm create mode 100644 code/modules/antagonists/bloodsucker/bloodsucker_integration.dm create mode 100644 code/modules/antagonists/bloodsucker/bloodsucker_life.dm create mode 100644 code/modules/antagonists/bloodsucker/bloodsucker_objectives.dm create mode 100644 code/modules/antagonists/bloodsucker/bloodsucker_powers.dm create mode 100644 code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm create mode 100644 code/modules/antagonists/bloodsucker/bloodsucker_ui.dm create mode 100644 code/modules/antagonists/bloodsucker/datum_bloodsucker.dm create mode 100644 code/modules/antagonists/bloodsucker/datum_hunter.dm create mode 100644 code/modules/antagonists/bloodsucker/datum_vassal.dm create mode 100644 code/modules/antagonists/bloodsucker/items/bloodsucker_items.dm create mode 100644 code/modules/antagonists/bloodsucker/items/bloodsucker_organs.dm create mode 100644 code/modules/antagonists/bloodsucker/items/bloodsucker_stake.dm create mode 100644 code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm create mode 100644 code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm create mode 100644 code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm create mode 100644 code/modules/antagonists/bloodsucker/powers/bs_brawn.dm create mode 100644 code/modules/antagonists/bloodsucker/powers/bs_cloak.dm create mode 100644 code/modules/antagonists/bloodsucker/powers/bs_feed.dm create mode 100644 code/modules/antagonists/bloodsucker/powers/bs_fortitude.dm create mode 100644 code/modules/antagonists/bloodsucker/powers/bs_gohome.dm create mode 100644 code/modules/antagonists/bloodsucker/powers/bs_haste.dm create mode 100644 code/modules/antagonists/bloodsucker/powers/bs_lunge.dm create mode 100644 code/modules/antagonists/bloodsucker/powers/bs_masquerade.dm create mode 100644 code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm create mode 100644 code/modules/antagonists/bloodsucker/powers/bs_trespass.dm create mode 100644 code/modules/antagonists/bloodsucker/powers/bs_veil.dm create mode 100644 code/modules/antagonists/bloodsucker/powers/v_distress.dm create mode 100644 code/modules/antagonists/bloodsucker/powers/v_recuperate.dm create mode 100644 code/modules/language/vampiric.dm create mode 100644 icons/mob/actions/bloodsucker.dmi create mode 100644 icons/obj/stake.dmi create mode 100644 icons/obj/vamp_obj.dmi create mode 100644 sound/bloodsucker/BloodsuckerAlert.ogg create mode 100644 sound/bloodsucker/coffin_close.ogg create mode 100644 sound/bloodsucker/coffin_open.ogg diff --git a/code/__DEFINES/atom_hud.dm b/code/__DEFINES/atom_hud.dm index 0e4f0f3a6e..322a150617 100644 --- a/code/__DEFINES/atom_hud.dm +++ b/code/__DEFINES/atom_hud.dm @@ -58,6 +58,7 @@ #define ANTAG_HUD_SOULLESS 21 #define ANTAG_HUD_CLOCKWORK 22 #define ANTAG_HUD_BROTHER 23 +#define ANTAG_HUD_BLOODSUCKER 24 // Notification action types #define NOTIFY_JUMP "jump" diff --git a/code/__DEFINES/bloodsucker.dm b/code/__DEFINES/bloodsucker.dm new file mode 100644 index 0000000000..08b70004cc --- /dev/null +++ b/code/__DEFINES/bloodsucker.dm @@ -0,0 +1,14 @@ +// Bloodsucker related antag datums +#define ANTAG_DATUM_BLOODSUCKER /datum/antagonist/bloodsucker +#define ANTAG_DATUM_VASSAL /datum/antagonist/vassal +#define ANTAG_DATUM_HUNTER /datum/antagonist/vamphunter + +// BLOODSUCKER +#define BLOODSUCKER_LEVEL_TO_EMBRACE 3 +#define BLOODSUCKER_FRENZY_TIME 25 // How long the vamp stays in frenzy. +#define BLOODSUCKER_FRENZY_OUT_TIME 300 // How long the vamp goes back into frenzy. +#define BLOODSUCKER_STARVE_VOLUME 5 // Amount of blood, below which a Vamp is at risk of frenzy. + +#define CAT_STRUCTURE "Structures" + +#define MARTIALART_HUNTER "hunter-fu" diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm index b316c003a9..bc2709bdda 100644 --- a/code/__DEFINES/role_preferences.dm +++ b/code/__DEFINES/role_preferences.dm @@ -35,6 +35,8 @@ #define ROLE_LAVALAND "lavaland" #define ROLE_INTERNAL_AFFAIRS "internal affairs agent" #define ROLE_GANG "gangster" +#define ROLE_BLOODSUCKER "bloodsucker" +#define ROLE_MONSTERHUNTER "monster hunter" //Missing assignment means it's not a gamemode specific role, IT'S NOT A BUG OR ERROR. //The gamemode specific ones are just so the gamemodes can query whether a player is old enough @@ -60,7 +62,9 @@ GLOBAL_LIST_INIT(special_roles, list( ROLE_OVERTHROW = /datum/game_mode/overthrow, ROLE_INTERNAL_AFFAIRS = /datum/game_mode/traitor/internal_affairs, ROLE_SENTIENCE, - ROLE_GANG = /datum/game_mode/gang + ROLE_GANG = /datum/game_mode/gang, + ROLE_BLOODSUCKER = /datum/game_mode/bloodsucker, + ROLE_MONSTERHUNTER )) //Job defines for what happens when you fail to qualify for any job during job selection diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 60212385f8..6c85521f9d 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -126,6 +126,12 @@ #define TRAIT_ABDUCTOR_TRAINING "abductor-training" #define TRAIT_ABDUCTOR_SCIENTIST_TRAINING "abductor-scientist-training" #define TRAIT_SURGEON "surgeon" +#define TRAIT_COLDBLOODED "coldblooded" // Your body is literal room temperature. Does not make you immune to the temp. +#define TRAIT_NONATURALHEAL "nonaturalheal" // Only Admins can heal you. NOTHING else does it unless it's given the god tag. +#define TRAIT_NORUNNING "norunning" // You walk! +#define TRAIT_NOMARROW "nomarrow" // You don't make blood. +#define TRAIT_NOPULSE "nopulse" // Your heart doesn't beat. + //non-mob traits #define TRAIT_PARALYSIS "paralysis" //Used for limb-based paralysis, where replacing the limb will fix it @@ -216,4 +222,4 @@ #define NINJA_SUIT_TRAIT "ninja-suit" #define ANTI_DROP_IMPLANT_TRAIT "anti-drop-implant" #define ABDUCTOR_ANTAGONIST "abductor-antagonist" -#define MADE_UNCLONEABLE "made-uncloneable" \ No newline at end of file +#define MADE_UNCLONEABLE "made-uncloneable" diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 7f2fca9d98..3b5f851333 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -349,6 +349,13 @@ devilsouldisplay = new /obj/screen/devil/soul_counter infodisplay += devilsouldisplay + blood_display = new /obj/screen/bloodsucker/blood_counter // Blood Volume + infodisplay += blood_display + vamprank_display = new /obj/screen/bloodsucker/rank_counter // Vampire Rank + infodisplay += vamprank_display + sunlight_display = new /obj/screen/bloodsucker/sunlight_counter // Sunlight + infodisplay += sunlight_display + zone_select = new /obj/screen/zone_sel() zone_select.icon = ui_style zone_select.update_icon(mymob) diff --git a/code/datums/hud.dm b/code/datums/hud.dm index 32bce89f4d..169b08dc98 100644 --- a/code/datums/hud.dm +++ b/code/datums/hud.dm @@ -27,6 +27,7 @@ GLOBAL_LIST_INIT(huds, list( ANTAG_HUD_SOULLESS = new/datum/atom_hud/antag/hidden(), ANTAG_HUD_CLOCKWORK = new/datum/atom_hud/antag(), ANTAG_HUD_BROTHER = new/datum/atom_hud/antag/hidden(), + ANTAG_HUD_BLOODSUCKER = new/datum/atom_hud/antag/bloodsucker() )) /datum/atom_hud diff --git a/code/game/gamemodes/bloodsucker/bloodsucker.dm b/code/game/gamemodes/bloodsucker/bloodsucker.dm new file mode 100644 index 0000000000..dd62c8bb8d --- /dev/null +++ b/code/game/gamemodes/bloodsucker/bloodsucker.dm @@ -0,0 +1,294 @@ + +/datum/game_mode + var/list/datum/mind/bloodsuckers = list() // List of minds belonging to this game mode. + var/list/datum/mind/vassals = list() // List of minds that have been turned into Vassals. + var/list/datum/mind/vamphunters = list() // List of minds hunting vampires. + var/obj/effect/sunlight/bloodsucker_sunlight // Sunlight Timer. Created on first Bloodsucker assign. Destroyed on last removed Bloodsucker. + + // LISTS // + var/list/vassal_allowed_antags = list(/datum/antagonist/brother, /datum/antagonist/traitor, /datum/antagonist/traitor/internal_affairs, /datum/antagonist/survivalist, \ + /datum/antagonist/rev, /datum/antagonist/nukeop, /datum/antagonist/pirate, /datum/antagonist/cult, /datum/antagonist/abductee) + // The antags you're allowed to be if turning Vassal. + +/datum/game_mode/bloodsucker + name = "bloodsucker" + config_tag = "bloodsucker" + traitor_name = "Bloodsucker" + antag_flag = ROLE_BLOODSUCKER + false_report_weight = 1 + restricted_jobs = list("AI","Cyborg") + protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Deputy") + required_players = 0 + required_enemies = 1 + recommended_enemies = 4 + reroll_friendly = 1 + enemy_minimum_age = 7 + + announce_span = "danger" + announce_text = "Filthy, bloodsucking vampires are crawling around disguised as crewmembers!\n\ + Bloodsuckers: The crew are cattle, while you are both shepherd and slaughterhouse.\n\ + Crew: Put an end to the undead infestation before the station is overcome!" + + + +// Seems to be run by game ONCE, and finds all potential players to be antag. +/datum/game_mode/bloodsucker/pre_setup() + + // Set Restricted Jobs + if(CONFIG_GET(flag/protect_roles_from_antagonist)) + restricted_jobs += protected_jobs + + if(CONFIG_GET(flag/protect_assistant_from_antagonist)) + restricted_jobs += "Assistant" + + // Set number of Vamps + recommended_enemies = CLAMP(round(num_players()/10), 1, 6); + + // Select Antags + for(var/i = 0, i < recommended_enemies, i++) + if (!antag_candidates.len) + break + var/datum/mind/bloodsucker = pick(antag_candidates) + // Can we even BE a bloodsucker? + //if (can_make_bloodsucker(bloodsucker, display_warning=FALSE)) + bloodsuckers += bloodsucker + bloodsucker.restricted_roles = restricted_jobs + log_game("[bloodsucker.key] (ckey) has been selected as a Bloodsucker.") + antag_candidates.Remove(bloodsucker) // Apparently you can also write antag_candidates -= bloodsucker + + // FULPSTATION: Assign Hunters (as many as monsters, plus one) + assign_monster_hunters(bloodsuckers.len, TRUE, bloodsuckers) // FULP + + // Do we have enough vamps to continue? + return bloodsuckers.len >= required_enemies + + +// Gamemode is all done being set up. We have all our Vamps. We now pick objectives and let them know what's happening. +/datum/game_mode/bloodsucker/post_setup() + + // Sunlight (Creating Bloodsuckers manually will check to create this, too) + check_start_sunlight() + + // Vamps + for(var/datum/mind/bloodsucker in bloodsuckers) + // spawn() --> Run block of code but game continues on past it. + // sleep() --> Run block of code and freeze code there (including whoever called us) until it's resolved. + + //Clean Bloodsucker Species (racist?) + //clean_invalid_species(bloodsucker) + // TO-DO !!! + + // Add Bloodsucker Antag Datum (or remove from list on Fail) + if (!make_bloodsucker(bloodsucker)) + bloodsuckers -= bloodsucker + + // NOTE: Hunters are done in ..() parent proc + + return ..() + +// Checking for ACTUALLY Dead Vamps +/datum/game_mode/bloodsucker/are_special_antags_dead() + // Bloodsucker not Final Dead + for(var/datum/mind/bloodsucker in bloodsuckers) + if(!bloodsucker.AmFinalDeath()) + return FALSE + return TRUE + + +// Init Sunlight (called from datum_bloodsucker.on_gain(), in case game mode isn't even Bloodsucker +/datum/game_mode/proc/check_start_sunlight() + // Already Sunlight (and not about to cancel) + if (istype(bloodsucker_sunlight) && !bloodsucker_sunlight.cancel_me) + return + bloodsucker_sunlight = new () + +// End Sun (last bloodsucker removed) +/datum/game_mode/proc/check_cancel_sunlight() + // No Sunlight + if (!istype(bloodsucker_sunlight)) + return + if (bloodsuckers.len <= 0) + bloodsucker_sunlight.cancel_me = TRUE + qdel(bloodsucker_sunlight) + bloodsucker_sunlight = null + +/datum/game_mode/proc/is_daylight() + return istype(bloodsucker_sunlight) && bloodsucker_sunlight.amDay + +////////////////////////////////////////////////////////////////////////////// + + +/datum/game_mode/proc/can_make_bloodsucker(datum/mind/bloodsucker, datum/mind/creator, display_warning=TRUE) // Creator is just here so we can display fail messages to whoever is turning us. + // No Mind + if(!bloodsucker || !bloodsucker.key) // KEY is client login? + //if(creator) // REMOVED. You wouldn't see their name if there is no mind, so why say anything? + // to_chat(creator, "[bloodsucker] isn't self-aware enough to be raised as a Bloodsucker!") + return FALSE + // Current body is invalid + if(!ishuman(bloodsucker.current))// && !ismonkey(bloodsucker.current)) + if(display_warning && creator) + to_chat(creator, "[bloodsucker] isn't evolved enough to be raised as a Bloodsucker!") + return FALSE + // Species Must have a HEART (Sorry Plasmabois) + var/mob/living/carbon/human/H = bloodsucker.current + if(NOBLOOD in H.dna.species.species_traits) + if(display_warning && creator) + to_chat(creator, "[bloodsucker]'s DNA isn't compatible!") + return FALSE + // Already a Non-Human Antag + if(bloodsucker.has_antag_datum(/datum/antagonist/abductor) || bloodsucker.has_antag_datum(/datum/antagonist/devil) || bloodsucker.has_antag_datum(/datum/antagonist/changeling)) + return FALSE + // Already a vamp + if(bloodsucker.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) + if(display_warning && creator) + to_chat(creator, "[bloodsucker] is already a Bloodsucker!") + return FALSE + // Not High Enough + if(creator) + var/datum/antagonist/bloodsucker/creator_bloodsucker = creator.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + if(!istype(creator_bloodsucker) || creator_bloodsucker.vamplevel < BLOODSUCKER_LEVEL_TO_EMBRACE) + to_chat(creator, "Your blood is too thin to turn this corpse!") + return FALSE + return TRUE + + +/datum/game_mode/proc/make_bloodsucker(datum/mind/bloodsucker, datum/mind/creator = null) // NOTE: This is a game_mode/proc, NOT a game_mode/bloodsucker/proc! We need to access this function despite the game mode. + if (!can_make_bloodsucker(bloodsucker)) + return FALSE + + // Create Datum: Fledgling + var/datum/antagonist/bloodsucker/A + + // [FLEDGLING] + if (creator) + A = new ANTAG_DATUM_BLOODSUCKER(bloodsucker) + A.creator = creator + bloodsucker.add_antag_datum(A) + // Log + message_admins("[bloodsucker] has become a Bloodsucker, and was created by [creator].") + log_admin("[bloodsucker] has become a Bloodsucker, and was created by [creator].") + + // [MASTER] + else + A = bloodsucker.add_antag_datum(ANTAG_DATUM_BLOODSUCKER) + + + return TRUE + + +/datum/game_mode/proc/remove_bloodsucker(datum/mind/bloodsucker) + bloodsucker.remove_antag_datum(ANTAG_DATUM_BLOODSUCKER) + + +/datum/game_mode/proc/clean_invalid_species(datum/mind/bloodsucker) + // Only checking for Humans here + if (!ishuman(bloodsucker.current) || !bloodsucker.current.client) + return + var/am_valid = TRUE + var/mob/living/carbon/human/H = bloodsucker.current + + // Check if PLASMAMAN? + if(NOBLOOD in H.dna.species.species_traits) + am_valid = FALSE + + // PROBLEM: + // + // Setting species leaves clothes on. If you were a plasmaman, we need to reassign your entire outfit. Otherwise + // everyone will wonder why you're a human with Plasma clothes (jk they'll know you're antag) + + // Convert to HUMAN (along with ID and PDA) + if (!am_valid) + H.set_species(/datum/species/human) + H.real_name = H.client.prefs.custom_names["human"] + if (H.wear_id) + H.wear_id.GetID().registered_name = H.real_name + H.wear_id.GetID().update_label() + + +/datum/game_mode/proc/can_make_vassal(mob/living/target, datum/mind/creator, display_warning=TRUE)//, check_antag_or_loyal=FALSE) + // Not Correct Type: Abort + if (!iscarbon(target) || !creator) + return FALSE + if (target.stat > UNCONSCIOUS) + return FALSE + // Check Overdose: Am I even addicted to blood? Do I even have any in me? + //if (!target.reagents.addiction_list || !target.reagents.reagent_list) + //message_admins("DEBUG2: can_make_vassal() Abort: No reagents") + // return 0 + // Check Overdose: Did my current volume go over the Overdose threshold? + //var/am_addicted = 0 + //for (var/datum/reagent/blood/vampblood/blood in target.reagents.addiction_list) // overdosed is tracked in reagent_list, not addiction_list. + //message_admins("DEBUG3: can_make_vassal() Found Blood! [blood] [blood.overdose]") + //if (blood.overdosed) + // am_addicted = 1 // Blood is present in addiction? That's all we need. + // break + + //if (!am_addicted) + //message_admins("DEBUG4: can_make_vassal() Abort: No Blood") + // return 0 + // No Mind! + if (!target.mind || !target.mind.key) + if (display_warning) + to_chat(creator, "[target] isn't self-aware enough to be made into a Vassal.") + return FALSE + // Already MY Vassal + var/datum/antagonist/vassal/V = target.mind.has_antag_datum(ANTAG_DATUM_VASSAL) + if (istype(V) && V.master) + if (V.master.owner == creator) + if (display_warning) + to_chat(creator, "[target] is already your loyal Vassal!") + else + if (display_warning) + to_chat(creator, "[target] is the loyal Vassal of another Bloodsucker!") + return FALSE + // Already Antag or Loyal (Vamp Hunters count as antags) + if (target.mind.enslaved_to || AmInvalidAntag(target.mind)) //!VassalCheckAntagValid(target.mind, check_antag_or_loyal)) // HAS_TRAIT(target, TRAIT_MINDSHIELD, "implant") || + if (display_warning) + to_chat(creator, "[target] resists the power of your blood to dominate their mind!") + return FALSE + return TRUE + + +/datum/game_mode/proc/AmValidAntag(datum/mind/M) + // No List? + if(!islist(M.antag_datums) || M.antag_datums.len == 0) + return FALSE + + // Am I NOT an invalid Antag? NOTE: We already excluded non-antags above. Don't worry about the "No List?" check in AmInvalidIntag() + return !AmInvalidAntag(M) + +/datum/game_mode/proc/AmInvalidAntag(datum/mind/M) + // No List? + if(!islist(M.antag_datums) || M.antag_datums.len == 0) + return FALSE + + // Does even ONE antag appear in this mind that isn't in the list? Then FAIL! + for(var/datum/antagonist/antag_datum in M.antag_datums) + if (!(antag_datum.type in vassal_allowed_antags)) // vassal_allowed_antags is a list stored in the game mode, above. + //message_admins("DEBUG VASSAL: Found Invalid: [antag_datum] // [antag_datum.type]") + return TRUE + + //message_admins("DEBUG VASSAL: Valid Antags! (total of [M.antag_datums.len])") + // WHEN YOU DELETE THE ABOVE: Remove the 3 second timer on converting the vassal too. + return FALSE + + +/datum/game_mode/proc/make_vassal(mob/living/target, datum/mind/creator) + if (!can_make_vassal(target,creator)) + return FALSE + // Make Vassal + var/datum/antagonist/vassal/V = new ANTAG_DATUM_VASSAL(target.mind) + var/datum/antagonist/bloodsucker/B = creator.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + V.master = B + target.mind.add_antag_datum(V, V.master.get_team()) + // Update Bloodsucker Title (we're a daddy now) + B.SelectTitle(am_fledgling = FALSE) // Only works if you have no title yet. + + // Log + message_admins("[target] has become a Vassal, and is enslaved to [creator].") + log_admin("[target] has become a Vassal, and is enslaved to [creator].") + + return TRUE + +/datum/game_mode/proc/remove_vassal(datum/mind/vassal) + vassal.remove_antag_datum(ANTAG_DATUM_VASSAL) diff --git a/code/game/gamemodes/bloodsucker/hunter.dm b/code/game/gamemodes/bloodsucker/hunter.dm new file mode 100644 index 0000000000..e575dacded --- /dev/null +++ b/code/game/gamemodes/bloodsucker/hunter.dm @@ -0,0 +1,49 @@ + + + +// Called from game mode pre_setup() +/datum/game_mode/proc/assign_monster_hunters(monster_count = 4, guaranteed_hunters = FALSE, list/datum/mind/exclude_from_hunter) + + // Not all game modes GUARANTEE a hunter + if (rand(0,2) == 0) // 50% of the time, we get fewer or NO Hunters + if (!guaranteed_hunters) + return + else + monster_count /= 2 + + var/list/no_hunter_jobs = list("AI","Cyborg") + + // Set Restricted Jobs + if(CONFIG_GET(flag/protect_roles_from_antagonist)) + no_hunter_jobs += list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Deputy") + + if(CONFIG_GET(flag/protect_assistant_from_antagonist)) + no_hunter_jobs += "Assistant" + + // Find Valid Hunters + var/list/datum/mind/hunter_candidates = get_players_for_role(ROLE_MONSTERHUNTER) + + // Assign Hunters (as many as vamps, plus one) + for(var/i = 1, i < monster_count, i++) // Start at 1 so we skip Hunters if there's only one sucker. + if (!hunter_candidates.len) + break + // Assign Hunter + var/datum/mind/hunter = pick(hunter_candidates) + hunter_candidates.Remove(hunter) // Remove Either Way + // Already Antag? Skip + if (islist(exclude_from_hunter) && (locate(hunter) in exclude_from_hunter)) //if (islist(hunter.antag_datums) && hunter.antag_datums.len) + i -- + continue + // NOTE: + vamphunters += hunter + hunter.restricted_roles = no_hunter_jobs + log_game("[hunter.key] (ckey) has been selected as a Hunter.") + +// Called from game mode post_setup() +/datum/game_mode/proc/finalize_monster_hunters(monster_count = 4) + var/amEvil = TRUE // First hunter is always an evil boi + for(var/datum/mind/hunter in vamphunters) + var/datum/antagonist/vamphunter/A = new ANTAG_DATUM_HUNTER(hunter) + A.bad_dude = amEvil + hunter.add_antag_datum(A) + amEvil = FALSE // Every other hunter is just a boring greytider diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 40052bcee5..a2027e773e 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -409,7 +409,7 @@ SLIME SCANNER var/mob/living/carbon/human/H = C if(H.bleed_rate) msg += "Subject is bleeding!\n" - var/blood_percent = round((C.blood_volume / (BLOOD_VOLUME_NORMAL * C.blood_ratio))*100) + var/blood_percent = round((C.scan_blood_volume() / (BLOOD_VOLUME_NORMAL * C.blood_ratio))*100) var/blood_type = C.dna.blood_type if(blood_id != ("blood" || "jellyblood"))//special blood substance var/datum/reagent/R = GLOB.chemical_reagents_list[blood_id] diff --git a/code/game/objects/items/implants/implant_mindshield.dm b/code/game/objects/items/implants/implant_mindshield.dm index 2a99c6e1ec..d8c5c03ace 100644 --- a/code/game/objects/items/implants/implant_mindshield.dm +++ b/code/game/objects/items/implants/implant_mindshield.dm @@ -26,6 +26,9 @@ if(target.mind.has_antag_datum(/datum/antagonist/brainwashed)) target.mind.remove_antag_datum(/datum/antagonist/brainwashed) + if(target.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) + SSticker.mode.remove_vassal(target.mind) + if(target.mind.has_antag_datum(/datum/antagonist/rev/head) || target.mind.unconvertable || target.mind.has_antag_datum(/datum/antagonist/gang/boss)) if(!silent) target.visible_message("[target] seems to resist the implant!", "You feel something interfering with your mental conditioning, but you resist it!") diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index b15d686b7b..263b894f60 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -20,10 +20,9 @@ return if(broken || !Adjacent(user)) return - + if(ishuman(user)) var/mob/living/carbon/human/H = user - //see code/modules/mob/dead/new_player/preferences.dm at approx line 545 for comments! //this is largely copypasted from there. diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_flaws.dm b/code/modules/antagonists/bloodsucker/bloodsucker_flaws.dm new file mode 100644 index 0000000000..77169efd61 --- /dev/null +++ b/code/modules/antagonists/bloodsucker/bloodsucker_flaws.dm @@ -0,0 +1,84 @@ + +// Getting Flaws: +// +// Killing crew +// +// Gaining ranks + + + +// * COMPULSION * Things you must do +// +// SELECTIVE: -Gender/BloodType/Job sustains you, but others give you less. +// + + + + +// * WEAKNESSES * Things that may harm you +// +// LIGHTS: -Bright light nullifies the Examine benefits of Masquerade. +// -Bright lights disable your healing (including in Torpor) +// +// STAKES: -Stakes kill you immediately. +// +// PAINFUL: -Your feed victims scream, despite being unconscious. +// +// FIRE: -You only need your max health (not x2) in fire damage to die. +// +// CORPSE: -Your Masquerade turns off when unconscious or crit. +// +// FERAL: - +// +// CRAVEN + + + + + + + + + + + + + + // BANES // + +// These are basically small weaknesses that affect your character in certain circumstances. +// As a rule, they should be specific as to when they happen, or have only some certain +// drawback. + +// (core ideas) +// SENSITIVE: You are slightly blinded by bright lights. +// DARKFRIEND: Your automatic healing is at a crawl when in bright light. +// TRADITIONAL: Every five minutes spent outside a coffin lowers your rate of automatic healing. +// CONSUMED: Every five minutes spent outside a coffin increases the rate at which your blood ticks down. +// GOURMAND: Animals and blood bags offer you no nourishment when feeding. +// DEATHMASK: You no longer fake having a heartbeat, and always show up as pale when examined. +// BESTIAL: When your blood is low, you will twitch involuntarily. + +// (alternate ideas) +// STERILE: There is a high chance that turning corpses to Bloodsuckers will fail, and further attempts on them by you are impossible. +// FERAL: You're a threat to Vampire-kind: New Bloodsuckers may have an Objective to destroy you. +// UNHOLY: The Chapel, the Bible, and Holy Water set you on fire. +// PARANOID: Only your own claimed coffin counts for healing and banes. + + +// ON LEVEL-UP: +// Burn Damage increases +// Regen Rate increases +// Max Punch Damage increase +// Reset Level Timer +// Select Bane + + +// How to Burn Vamps: +// C.adjustFireLoss(20) +// C.adjust_fire_stacks(6) +// C.IgniteMob() + + +/datum/antagonist/bloodsucker/proc/AssignRandomBane() + return \ No newline at end of file diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_integration.dm b/code/modules/antagonists/bloodsucker/bloodsucker_integration.dm new file mode 100644 index 0000000000..a48f9c8114 --- /dev/null +++ b/code/modules/antagonists/bloodsucker/bloodsucker_integration.dm @@ -0,0 +1,148 @@ +// INTEGRATION: Adding Procs and Datums to existing "classes" +/mob/living/proc/AmBloodsucker(falseIfInDisguise=FALSE) + // No Datum + if (!mind || !mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) + return FALSE + + return TRUE + + +/mob/living/proc/HaveBloodsuckerBodyparts(var/displaymessage="") // displaymessage can be something such as "rising from death" for Torpid Sleep. givewarningto is the person receiving messages. + if (!getorganslot("heart")) + if (displaymessage != "") + to_chat(src, "Without a heart, you are incapable of [displaymessage].") + return FALSE + if (!get_bodypart("head")) + if (displaymessage != "") + to_chat(src, "Without a head, you are incapable of [displaymessage].") + return FALSE + if (!getorgan(/obj/item/organ/brain)) // NOTE: This is mostly just here so we can do one scan for all needed parts when creating a vamp. You probably won't be trying to use powers w/out a brain. + if (displaymessage != "") + to_chat(src, "Without a brain, you are incapable of [displaymessage].") + return FALSE + return TRUE + + + +// GET DAMAGE + + +// Do NOT count the damage on prosthetics for this. +/mob/living/proc/getBruteLoss_nonProsthetic() + return getBruteLoss() +/mob/living/proc/getFireLoss_nonProsthetic() + return getFireLoss() +/mob/living/carbon/getBruteLoss_nonProsthetic() + var/amount = 0 + for(var/obj/item/bodypart/BP in bodyparts) + if (BP.status < 2) + amount += BP.brute_dam + return amount +/mob/living/carbon/getFireLoss_nonProsthetic() + var/amount = 0 + for(var/obj/item/bodypart/BP in bodyparts) + if (BP.status < 2) + amount += BP.burn_dam + return amount + +// EXAMINING +/mob/living/carbon/human/proc/ReturnVampExamine(var/mob/viewer) + if (!mind || !viewer.mind) + return "" + // Target must be a Vamp + var/datum/antagonist/bloodsucker/bloodsuckerdatum = mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + if (!bloodsuckerdatum) + return "" + + // Viewer is Target's Vassal? + if (viewer.mind.has_antag_datum(ANTAG_DATUM_VASSAL) in bloodsuckerdatum.vassals) + var/returnString = "\[This is your Master!\]" + var/returnIcon = "[icon2html('icons/mob/hud.dmi', world, "bloodsucker_big")]" + returnString += "\n" + return returnIcon + returnString + + // Viewer not a Vamp AND not the target's vassal? + if (!viewer.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) && !(viewer in bloodsuckerdatum.vassals)) + return "" + + // Default String + var/returnString = "\[[bloodsuckerdatum.ReturnFullName(1)]\]" + var/returnIcon = "[icon2html('icons/mob/hud.dmi', world, "bloodsucker_big")]" + + // In Disguise (Veil)? + //if (name_override != null) + // returnString += " ([real_name] in disguise!) " + + //returnString += "\n" Don't need spacers. Using . += "" in examine.dm does this on its own. + return returnIcon + returnString + + +/mob/living/carbon/human/proc/ReturnVassalExamine(var/mob/viewer) + if (!mind || !viewer.mind) + return "" + // Am I not even a Vassal? Then I am not marked. + var/datum/antagonist/vassal/vassaldatum = mind.has_antag_datum(ANTAG_DATUM_VASSAL) + if (!vassaldatum) + return "" + // Only Vassals and Bloodsuckers can recognize marks. + if (!viewer.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) && !viewer.mind.has_antag_datum(ANTAG_DATUM_VASSAL)) + return "" + + // Default String + var/returnString = "\[" + var/returnIcon = "" + // Am I Viewer's Vassal? + if (vassaldatum.master.owner == viewer.mind) + returnString += "This [dna.species.name] bears YOUR mark!" + returnIcon = "[icon2html('icons/mob/hud.dmi', world, "vassal_big")]" + // Am I someone ELSE'S Vassal? + else if (viewer.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) + returnString += "This [dna.species.name] bears the mark of [vassaldatum.master.ReturnFullName(vassaldatum.master.owner.current,1)]" + returnIcon = "[icon2html('icons/mob/hud.dmi', world, "vassal_grey_big")]" + // Are you serving the same master as I am? + else if (viewer.mind.has_antag_datum(ANTAG_DATUM_VASSAL) in vassaldatum.master.vassals) + returnString += "[p_they(TRUE)] bears the mark of your Master" + returnIcon = "[icon2html('icons/mob/hud.dmi', world, "bloodsucker_big")]" + // You serve a different Master than I do. + else + returnString += "[p_they(TRUE)] bears the mark of another Bloodsucker" + returnIcon = "[icon2html('icons/mob/hud.dmi', world, "vassal_grey_big")]" + + returnString += "\]" // \n" Don't need spacers. Using . += "" in examine.dm does this on its own. + return returnIcon + returnString + + +// Am I "pale" when examined? Bloodsuckers can trick this. +/mob/living/carbon/proc/ShowAsPaleExamine() + + // Normal Creatures: + if(!mind || !mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) + return blood_volume < BLOOD_VOLUME_SAFE + + var/datum/antagonist/bloodsucker/bloodsuckerdatum = mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + if (bloodsuckerdatum.poweron_masquerade) + return FALSE + + // If a Bloodsucker is malnourished, AND if his temperature matches his surroundings (aka he hasn't fed recently and looks COLD)... + return blood_volume < BLOOD_VOLUME_OKAY // && !(bodytemperature <= get_temperature() + 2) + +/mob/living/carbon/human/ShowAsPaleExamine() + // Check for albino, as per human/examine.dm's check. + if (skin_tone == "albino") + return TRUE + + return ..() // Return vamp check + +/mob/living/carbon/proc/scan_blood_volume() + // Vamps don't show up normally to scanners unless Masquerade power is on ----> scanner.dm + if (mind) + var/datum/antagonist/bloodsucker/bloodsuckerdatum = mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + if (istype(bloodsuckerdatum) && bloodsuckerdatum.poweron_masquerade) + return BLOOD_VOLUME_NORMAL + return blood_volume + +/mob/living/proc/IsFrenzied() + return FALSE + +/mob/living/proc/StartFrenzy(inTime = 120) + set waitfor = FALSE diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm new file mode 100644 index 0000000000..f86b3c60ad --- /dev/null +++ b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm @@ -0,0 +1,500 @@ + + +// TO PLUG INTO LIFE: + +// Cancel BLOOD life +// Cancel METABOLISM life (or find a way to control what gets digested) +// Create COLDBLOODED trait (thermal homeostasis) + +// EXAMINE +// +// Show as dead when... + + + + + + + +/datum/antagonist/bloodsucker/proc/LifeTick() // Should probably run from life.dm, same as handle_changeling + set waitfor = FALSE // Don't make on_gain() wait for this function to finish. This lets this code run on the side. + + var/notice_healing = FALSE + while (owner && !AmFinalDeath()) // owner.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) == src + + // Deduct Blood + if (owner.current.stat == CONSCIOUS && !poweron_feed && !HAS_TRAIT(owner.current, TRAIT_DEATHCOMA) && !istype(owner.current.loc, /obj/structure/closet/crate/coffin)) + AddBloodVolume(-0.08) // -.15 (before tick went from 10 to 30, but we also charge more for faking life now) + + // Heal + if (HandleHealing(1)) + if (notice_healing == FALSE && owner.current.blood_volume > 0) + to_chat(owner, "The power of your blood begins knitting your wounds...") + notice_healing = TRUE + else if (notice_healing == TRUE) + notice_healing = FALSE + + // Apply Low Blood Effects + HandleStarving() + + // Death + HandleDeath() + + // Standard Update + update_hud() + + // Daytime Sleep in Coffin + if (SSticker.mode.is_daylight() && !HAS_TRAIT_FROM(owner.current, TRAIT_DEATHCOMA, "bloodsucker")) + if(istype(owner.current.loc, /obj/structure/closet/crate/coffin)) + Torpor_Begin() + + // Wait before next pass + sleep(10)//sleep(30) + + // Free my Vassals! (if I haven't yet) + FreeAllVassals() + + + + + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// BLOOD + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + +/datum/antagonist/bloodsucker/proc/AddBloodVolume(value) + owner.current.blood_volume = CLAMP(owner.current.blood_volume + value, 0, maxBloodVolume) + update_hud() + + +/datum/antagonist/bloodsucker/proc/HandleFeeding(mob/living/carbon/target, mult=1) + // mult: SILENT feed is 1/3 the amount + + var/blood_taken = min(feedAmount, target.blood_volume) * mult // Starts at 15 (now 8 since we doubled the Feed time) + target.blood_volume -= blood_taken + + // Simple Animals lose a LOT of blood, and take damage. This is to keep cats, cows, and so forth from giving you insane amounts of blood. + if (!ishuman(target)) + target.blood_volume -= (blood_taken / max(target.mob_size, 0.1)) * 3.5 // max() to prevent divide-by-zero + target.apply_damage_type(blood_taken / 3.5) // Don't do too much damage, or else they die and provide no blood nourishment. + if (target.blood_volume <= 0) + target.blood_volume = 0 + target.death(0) + + /////////// + // Shift Body Temp (toward Target's temp, by volume taken) + owner.current.bodytemperature = ((owner.current.blood_volume * owner.current.bodytemperature) + (blood_taken * target.bodytemperature)) / (owner.current.blood_volume + blood_taken) + // our volume * temp, + their volume * temp, / total volume + /////////// + + // Reduce Value Quantity + if (target.stat == DEAD) // Penalty for Dead Blood + blood_taken /= 3 + if (!ishuman(target)) // Penalty for Non-Human Blood + blood_taken /= 2 + //if (!iscarbon(target)) // Penalty for Animals (they're junk food) + + + // Apply to Volume + AddBloodVolume(blood_taken) + + // Reagents (NOT Blood!) + if(target.reagents && target.reagents.total_volume) + target.reagents.reaction(owner.current, INGEST, 1 / target.reagents.total_volume) // Run Reaction: what happens when what they have mixes with what I have? + target.reagents.trans_to(owner.current, 1) // Run transfer of 1 unit of reagent from them to me. + + // Blood Gulp Sound + owner.current.playsound_local(null, 'sound/effects/singlebeat.ogg', 40, 1) // Play THIS sound for user only. The "null" is where turf would go if a location was needed. Null puts it right in their head. + + +/datum/mood_event/drankblood + description = "I have fed greedly from that which nourishes me.\n" + mood_change = 10 + timeout = 900 +/datum/mood_event/drankblood_bad + description = "I drank the blood of a lesser creature. Disgusting.\n" + mood_change = -4 + timeout = 900 +/datum/mood_event/drankblood_dead + description = "I drank dead blood. I am better than this.\n" + mood_change = -7 + timeout = 900 +/datum/mood_event/drankblood_synth + description = "I drank synthetic blood. What is wrong with me?\n" + mood_change = -7 + timeout = 900 +/datum/mood_event/drankkilled + description = "I drank from my victim until they died. I feel...less human.\n" + mood_change = -12 + timeout = 6000 +/datum/mood_event/madevamp + description = "A soul has been cursed to undeath by my own hand.\n" + mood_change = -10 + timeout = 10000 +/datum/mood_event/vampatefood + description = "Mortal nourishment no longer sustains me. I feel unwell.\n" + mood_change = -6 + timeout = 1000 +/datum/mood_event/coffinsleep + description = "I slept in a coffin during the day. I feel whole again.\n" + mood_change = 8 + timeout = 1200 +/datum/mood_event/daylight_1 + description = "I slept poorly in a makeshift coffin during the day.\n" + mood_change = -3 + timeout = 1000 +/datum/mood_event/daylight_2 + description = "I have been scorched by the unforgiving rays of the sun.\n" + mood_change = -6 + timeout = 1200 + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// HEALING + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// +/datum/antagonist/bloodsucker/proc/HandleHealing(mult = 1) + + // NOTE: Mult of 0 is just a TEST to see if we are injured and need to go into Torpor! + // It is called from your coffin on close (by you only) + + if (poweron_masquerade == TRUE || owner.current.AmStaked()) + return FALSE + + owner.current.adjustStaminaLoss(-5 * (regenRate * 4) * mult, 0) // Humans lose stamina damage really quickly. Vamps should heal more. + owner.current.adjustCloneLoss(-1 * (regenRate * 4) * mult, 0) + owner.current.adjustOrganLoss(ORGAN_SLOT_BRAIN, -1 * (regenRate * 4) * mult) //adjustBrainLoss(-1 * (regenRate * 4) * mult, 0) + + owner.current.setOxyLoss(0) + owner.current.setToxLoss(0) + + // No Bleeding + if (ishuman(owner.current)) + var/mob/living/carbon/human/H = owner.current + H.bleed_rate = 0 + + // Damage Heal: Do I have damage to ANY bodypart? + if (iscarbon(owner.current)) + var/mob/living/carbon/C = owner.current + var/costMult = 1 // Coffin makes it cheaper + + // BURN: Heal in Coffin while Fakedeath, or when damage above maxhealth (you can never fully heal fire) + var/fireheal = 0 + var/amInCoffinWhileTorpor = istype(C.loc, /obj/structure/closet/crate/coffin) && (mult == 0 || HAS_TRAIT(C, TRAIT_DEATHCOMA)) // Check for mult 0 OR death coma. (mult 0 means we're testing from coffin) + if(amInCoffinWhileTorpor) + mult *= 5 // Increase multiplier if we're sleeping in a coffin. + fireheal = min(C.getFireLoss_nonProsthetic(), regenRate) // NOTE: Burn damage ONLY heals in torpor. + costMult = 0.25 + // Extinguish Fire + C.ExtinguishMob() + else + // No Blood? Lower Mult + if (owner.current.blood_volume <= 0) + mult = 0.25 + // Crit from burn? Lower damage to maximum allowed. + //if (C.getFireLoss() > owner.current.getMaxHealth()) + // fireheal = regenRate / 2 + // BRUTE: Always Heal + var/bruteheal = min(C.getBruteLoss_nonProsthetic(), regenRate) + + // Heal if Damaged + if (bruteheal + fireheal > 0) + // Just a check? Don't heal/spend, and return. + if (mult == 0) + return TRUE + // We have damage. Let's heal (one time) + C.adjustBruteLoss(-bruteheal * mult, forced=TRUE)// Heal BRUTE / BURN in random portions throughout the body. + C.adjustFireLoss(-fireheal * mult, forced=TRUE) + //C.heal_overall_damage(bruteheal * mult, fireheal * mult) // REMOVED: We need to FORCE this, because otherwise, vamps won't heal EVER. Swapped to above. + + // Pay Cost + AddBloodVolume((bruteheal * -0.5 + fireheal * -1) / mult * costMult) // Costs blood to heal + + // Healed! Done for this tick. + return TRUE + + // Limbs? (And I have no other healing) + if (amInCoffinWhileTorpor) + + // Heal Missing + var/list/missing = owner.current.get_missing_limbs() + if (missing.len) + // Cycle through ALL limbs and regen them! + for (var/targetLimbZone in missing) + // 1) Find ONE Limb and regenerate it. + //var/targetLimbZone = pick(missing) + owner.current.regenerate_limb(targetLimbZone, 0) // regenerate_limbs() <--- If you want to EXCLUDE certain parts, do it like this ----> regenerate_limbs(0, list("head")) + // 2) Limb returns Damaged + var/obj/item/bodypart/L = owner.current.get_bodypart( targetLimbZone ) + AddBloodVolume(20 * costMult) // Costs blood to heal + L.brute_dam = 60 + to_chat(owner.current, "Your flesh knits as it regrows [L]!") + playsound(owner.current, 'sound/magic/demon_consume.ogg', 50, 1) + + + // DONE! After regenerating ANY number of limbs, we stop here. + return TRUE + + /*else // REMOVED: For now, let's just leave prosthetics on. Maybe you WANT to be a robovamp. + // Remove Prosthetic/False Limb + for(var/obj/item/bodypart/BP in C.bodyparts) + message_admins("T1: [BP] ") + if (istype(BP) && BP.status == 2) + message_admins("T2: [BP] ") + BP.drop_limb() + return TRUE + // NOTE: Limbs have a "status", like their hosts "stat". 2 is dead (aka Prosthetic). 1 seems to be idle/alive. + */ + + // Cure Final Disabilities + CureDisabilities() + + // Remove Embedded! + C.remove_all_embedded_objects() + // Heal Organs (will respawn original eyes etc. but we replace right away, next) + owner.current.regenerate_organs() + // Eyes/Heart + CheckVampOrgans() // Heart, Eyes + + return FALSE + + +/datum/antagonist/bloodsucker/proc/CureDisabilities() + var/mob/living/carbon/C = owner.current + + C.cure_blind(list(EYE_DAMAGE))//() + C.cure_nearsighted(EYE_DAMAGE) + C.set_blindness(0) // Added 9/2/19 + C.set_blurriness(0) // Added 9/2/19 + C.update_tint() // Added 9/2/19 + C.update_sight() // Added 9/2/19 + + for(var/O in C.internal_organs) //owner.current.adjust_eye_damage(-100) // This was removed by TG + var/obj/item/organ/organ = O + organ.setOrganDamage(0) + + owner.current.cure_husk() + + +// I am hungry! +/datum/antagonist/bloodsucker/proc/HandleStarving() + + // High: Faster Healing + // Med: Pale + // Low: Twitch + // V.Low: Blur Vision + // EMPTY: Frenzy! + // BLOOD_VOLUME_GOOD: [336] Pale (handled in bloodsucker_integration.dm + // BLOOD_VOLUME_BAD: [224] Jitter + if(owner.current.blood_volume < BLOOD_VOLUME_BAD && !prob(0.5)) + owner.current.Jitter(3) + // BLOOD_VOLUME_SURVIVE: [122] Blur Vision + if(owner.current.blood_volume < BLOOD_VOLUME_BAD / 2) + owner.current.blur_eyes(8 - 8 * (owner.current.blood_volume / BLOOD_VOLUME_BAD)) + // Nutrition + owner.current.nutrition = min(owner.current.blood_volume, NUTRITION_LEVEL_FED) // <-- 350 //NUTRITION_LEVEL_FULL +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// DEATH + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/datum/antagonist/bloodsucker/proc/HandleDeath() + // FINAL DEATH + // Fire Damage? (above double health) + if (owner.current.getFireLoss_nonProsthetic() >= owner.current.getMaxHealth() * 2) + FinalDeath() + return + // Staked while "Temp Death" or Asleep + if (owner.current.StakeCanKillMe() && owner.current.AmStaked()) + FinalDeath() + return + // Not "Alive"? + if (!owner.current || !isliving(owner.current) || isbrain(owner.current) || !get_turf(owner.current)) + FinalDeath() + return + // Missing Brain or Heart? + if (!owner.current.HaveBloodsuckerBodyparts()) + FinalDeath() + return + + // Disable Powers: Masquerade * NOTE * This should happen as a FLAW! + //if (stat >= UNCONSCIOUS) + // for (var/datum/action/bloodsucker/masquerade/P in powers) + // P.Deactivate() + + // TEMP DEATH + var/total_brute = owner.current.getBruteLoss_nonProsthetic() + var/total_burn = owner.current.getFireLoss_nonProsthetic() + var/total_damage = total_brute + total_burn + // Died? Convert to Torpor (fake death) + if (owner.current.stat >= DEAD) + Torpor_Begin() + to_chat(owner, "Your immortal body will not yet relinquish your soul to the abyss. You enter Torpor.") + if (poweron_masquerade == TRUE) + to_chat(owner, "Your wounds will not heal until you disable the Masquerade power.") + // End Torpor: + else // No damage, OR brute healed and NOT in coffin (since you cannot heal burn) + if (total_damage <= 0 || total_brute <= 0 && !istype(owner.current.loc, /obj/structure/closet/crate/coffin)) + // Not Daytime, Not in Torpor + if (!SSticker.mode.is_daylight() && HAS_TRAIT_FROM(owner.current, TRAIT_DEATHCOMA, "bloodsucker")) + Torpor_End() + // Fake Unconscious + if (poweron_masquerade == TRUE && total_damage >= owner.current.getMaxHealth() - HEALTH_THRESHOLD_FULLCRIT) + owner.current.Unconscious(20,1) + + //HEALTH_THRESHOLD_CRIT 0 + //HEALTH_THRESHOLD_FULLCRIT -30 + //HEALTH_THRESHOLD_DEAD -100 + +/datum/antagonist/bloodsucker/proc/Torpor_Begin(amInCoffin=FALSE) + owner.current.stat = UNCONSCIOUS + owner.current.fakedeath("bloodsucker") // Come after UNCONSCIOUS or else it fails + //owner.current.update_stat() + ADD_TRAIT(owner.current, TRAIT_NODEATH,"bloodsucker") // Without this, you'll just keep dying while you recover. + ADD_TRAIT(owner.current, TRAIT_RESISTHIGHPRESSURE,"bloodsucker") // So you can heal in 0 G. otherwise you just...heal forever. + ADD_TRAIT(owner.current, TRAIT_RESISTLOWPRESSURE,"bloodsucker") // So you can heal in 0 G. otherwise you just...heal forever. + // Visuals + owner.current.update_sight() + owner.current.reload_fullscreen() + // Disable ALL Powers + for (var/datum/action/bloodsucker/power in powers) + if (power.active && !power.can_use_in_torpor) + power.DeactivatePower() + + +/datum/antagonist/bloodsucker/proc/Torpor_End() + owner.current.stat = SOFT_CRIT + owner.current.cure_fakedeath("bloodsucker") // Come after SOFT_CRIT or else it fails + //owner.current.update_stat() + REMOVE_TRAIT(owner.current, TRAIT_NODEATH, "bloodsucker") + REMOVE_TRAIT(owner.current, TRAIT_RESISTHIGHPRESSURE, "bloodsucker") // So you can heal in 0 G. otherwise you just...heal forever. + REMOVE_TRAIT(owner.current, TRAIT_RESISTLOWPRESSURE, "bloodsucker") // So you can heal in 0 G. otherwise you just...heal forever. + to_chat(owner, "You have recovered from Torpor.") + + + + + +/datum/antagonist/proc/AmFinalDeath() + // Standard Antags can be dead OR final death + return owner && (owner.current && owner.current.stat >= DEAD || owner.AmFinalDeath()) + +/datum/antagonist/bloodsucker/AmFinalDeath() + return owner && owner.AmFinalDeath() +/datum/antagonist/changeling/AmFinalDeath() + return owner && owner.AmFinalDeath() + +/datum/mind/proc/AmFinalDeath() + return !current || QDELETED(current) || !isliving(current) || isbrain(current) || !get_turf(current) // NOTE: "isliving()" is not the same as STAT == CONSCIOUS. This is to make sure you're not a BORG (aka silicon) + +/datum/antagonist/bloodsucker/proc/FinalDeath() + + playsound(get_turf(owner.current), 'sound/effects/tendril_destroyed.ogg', 60, 1) + owner.current.drop_all_held_items() + owner.current.unequip_everything() + var/mob/living/carbon/C = owner.current + C.remove_all_embedded_objects() + + // Make me UN-CLONEABLE + owner.current.hellbound = TRUE // This was done during creation, but let's do it again one more time...to make SURE this guy stays dead. + + + // Free my Vassals! + FreeAllVassals() + + // Elders get Dusted + if (vamplevel >= 4) // (vamptitle) + owner.current.visible_message("[owner.current]'s skin crackles and dries, their skin and bones withering to dust. A hollow cry whips from what is now a sandy pile of remains.", \ + "Your soul escapes your withering body as the abyss welcomes you to your Final Death.", \ + "You hear a dry, crackling sound.") + owner.current.dust() + // Fledglings get Gibbed + else + owner.current.visible_message("[owner.current]'s skin bursts forth in a spray of gore and detritus. A horrible cry echoes from what is now a wet pile of decaying meat.", \ + "Your soul escapes your withering body as the abyss welcomes you to your Final Death.", \ + "You hear a wet, bursting sound.") + owner.current.gib() + playsound(owner.current.loc, 'sound/effects/tendril_destroyed.ogg', 40, 1) + + + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// HUMAN FOOD + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/mob/proc/CheckBloodsuckerEatFood(var/food_nutrition) + if (!isliving(src)) + return + var/mob/living/L = src + if (!L.AmBloodsucker()) + return + // We're a vamp? Try to eat food... + var/datum/antagonist/bloodsucker/bloodsuckerdatum = mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + bloodsuckerdatum.handle_eat_human_food(food_nutrition) + + +/datum/antagonist/bloodsucker/proc/handle_eat_human_food(var/food_nutrition) // Called from snacks.dm and drinks.dm + set waitfor = FALSE + + if (!owner.current || !iscarbon(owner.current)) + return + var/mob/living/carbon/C = owner.current + + // Remove Nutrition, Give Bad Food + C.nutrition -= food_nutrition + foodInGut += food_nutrition + + // Already ate some bad clams? Then we can back out, because we're already sick from it. + if (foodInGut != food_nutrition) + return + // Haven't eaten, but I'm in a Human Disguise. + else if (poweron_masquerade) + to_chat(C, "Your stomach turns, but your \"human disguise\" keeps the food down...for now.") + + + // Keep looping until we purge. If we have activated our Human Disguise, we ignore the food. But it'll come up eventually... + var/sickphase = 0 + while (foodInGut) + + sleep(50) + + C.adjust_disgust(10 * sickphase) + + // Wait an interval... + sleep(50 + 50 * sickphase) // At intervals of 100, 150, and 200. (10 seconds, 15 seconds, and 20 seconds) + + // Died? Cancel + if (C.stat == DEAD) + return + // Put up disguise? Then hold off the vomit. + if (poweron_masquerade) + if (sickphase > 0) + to_chat(C, "Your stomach settles temporarily. You regain your composure...for now.") + sickphase = 0 + continue + + switch(sickphase) + if (1) + to_chat(C, "You feel unwell. You can taste ash on your tongue.") + C.Stun(10) + if (2) + to_chat(C, "Your stomach turns. Whatever you ate tastes of grave dirt and brimstone.") + C.Dizzy(15) + C.Stun(13) + if (3) + to_chat(C, "You purge the food of the living from your viscera! You've never felt worse.") + C.vomit(foodInGut * 4, foodInGut * 2, 0) // (var/lost_nutrition = 10, var/blood = 0, var/stun = 1, var/distance = 0, var/message = 1, var/toxic = 0) + C.blood_volume = max(0, C.blood_volume - foodInGut * 2) + C.Stun(30) + //C.Dizzy(50) + foodInGut = 0 + + sickphase ++ diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_objectives.dm b/code/modules/antagonists/bloodsucker/bloodsucker_objectives.dm new file mode 100644 index 0000000000..ecb9f703d1 --- /dev/null +++ b/code/modules/antagonists/bloodsucker/bloodsucker_objectives.dm @@ -0,0 +1,355 @@ + + +// Hide a random object somewhere on the station: +// var/turf/targetturf = get_random_station_turf() +// var/turf/targetturf = get_safe_random_station_turf() + + + + +/datum/objective/bloodsucker + martyr_compatible = TRUE + +// GENERATE! +/datum/objective/bloodsucker/proc/generate_objective() + update_explanation_text() + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// // PROCS // // + + +/datum/objective/bloodsucker/proc/return_possible_targets() + var/list/possible_targets = list() + + // Look at all crew members, and for/loop through. + for(var/datum/mind/possible_target in get_crewmember_minds()) + // Check One: Default Valid User + if(possible_target != owner && ishuman(possible_target.current) && possible_target.current.stat != DEAD)// && is_unique_objective(possible_target)) + // Check Two: Am Bloodsucker? OR in Bloodsucker list? + if (possible_target.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) || (possible_target in SSticker.mode.bloodsuckers)) + continue + else + possible_targets += possible_target + + return possible_targets + + + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/datum/objective/bloodsucker/lair + +// EXPLANATION +/datum/objective/bloodsucker/lair/update_explanation_text() + explanation_text = "Create a lair by claiming a coffin."// Make sure to keep it safe!" + +// WIN CONDITIONS? +/datum/objective/bloodsucker/lair/check_completion() + var/datum/antagonist/bloodsucker/antagdatum = owner.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + if (antagdatum && antagdatum.coffin && antagdatum.lair) + return TRUE + return FALSE + + // Space_Station_13_areas.dm <--- all the areas + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// Vassal becomes a Head, or part of a department +/datum/objective/bloodsucker/protege + + // LOOKUP: /datum/crewmonitor/proc/update_data(z) for .assignment to see how to get a person's PDA. + var/list/roles = list( + "Captain", + "Head of Security", + "Head of Personnel", + "Research Director", + "Chief Engineer", + "Chief Medical Officer", + "Quartermaster" + ) + var/list/departs = list( + "Head of Security", + "Research Director", + "Chief Engineer", + "Chief Medical Officer", + "Quartermaster" + ) + + + var/target_role // Equals "HEAD" when it's not a department role. + var/department_string + +// GENERATE! +/datum/objective/bloodsucker/protege/generate_objective() + target_role = rand(0,2) == 0 ? "HEAD" : pick(departs) + + // Heads? + if (target_role == "HEAD") + target_amount = rand(1, round(SSticker.mode.num_players() / 20)) + target_amount = CLAMP(target_amount,1,3) + // Department? + else + switch(target_role) + if("Head of Security") + department_string = "Security" + if("Research Director") + department_string = "Science" + if("Chief Engineer") + department_string = "Engineering" + if("Chief Medical Officer") + department_string = "Medical" + if("Quartermaster") + department_string = "Cargo" + target_amount = rand(round(SSticker.mode.num_players() / 20), round(SSticker.mode.num_players() / 10)) + target_amount = CLAMP(target_amount, 2, 4) + ..() + +// EXPLANATION +/datum/objective/bloodsucker/protege/update_explanation_text() + if (target_role == "HEAD") + if (target_amount == 1) + explanation_text = "Guarantee a Vassal ends up as a Department Head or in a Leadership role." + else + explanation_text = "Guarantee [target_amount] Vassals end up as different Leadership or Department Heads." + else + explanation_text = "Have [target_amount] Vassal[target_amount==1?"":"s"] in the [department_string] department." + +// WIN CONDITIONS? +/datum/objective/bloodsucker/protege/check_completion() + + var/datum/antagonist/bloodsucker/antagdatum = owner.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + if (!antagdatum || antagdatum.vassals.len == 0) + return FALSE + + // Get list of all jobs that are qualified (for HEAD, this is already done) + var/list/valid_jobs + if (target_role == "HEAD") + valid_jobs = roles + else + valid_jobs = list() + var/list/alljobs = subtypesof(/datum/job) // This is just a list of TYPES, not the actual variables! + for(var/T in alljobs) + var/datum/job/J = SSjob.GetJobType(T) // + if (!istype(J)) + continue + // Found a job whose Dept Head matches either list of heads, or this job IS the head + if ((target_role in J.department_head) || target_role == J.title) + valid_jobs += J.title + + + // Check Vassals, and see if they match + var/objcount = 0 + var/list/counted_roles = list() // So you can't have more than one Captain count. + for(var/datum/antagonist/vassal/V in antagdatum.vassals) + if (!V || !V.owner) // Must exist somewhere, and as a vassal. + continue + + var/thisRole = "none" + + // Mind Assigned + if ((V.owner.assigned_role in valid_jobs) && !(V.owner.assigned_role in counted_roles)) + //to_chat(owner, "PROTEGE OBJECTIVE: (MIND ROLE)") + thisRole = V.owner.assigned_role + // Mob Assigned + else if ((V.owner.current.job in valid_jobs) && !(V.owner.current.job in counted_roles)) + //to_chat(owner, "PROTEGE OBJECTIVE: (MOB JOB)") + thisRole = V.owner.current.job + // PDA Assigned + else if (V.owner.current && ishuman(V.owner.current)) + var/mob/living/carbon/human/H = V.owner.current + var/obj/item/card/id/I = H.wear_id ? H.wear_id.GetID() : null + if (I && (I.assignment in valid_jobs) && !(I.assignment in counted_roles)) + //to_chat(owner, "PROTEGE OBJECTIVE: (GET ID)") + thisRole = I.assignment + + // NO MATCH + if (thisRole == "none") + continue + + // SUCCESS! + objcount ++ + if (target_role == "HEAD") + counted_roles += thisRole // Add to list so we don't count it again (but only if it's a Head) + + // NOTE!!!!!!!!!!! + + // Look for jobs value on mobs! This is assigned at start, but COULD be assigned from HoP? + // + // ALSO - Search through all jobs (look for prefs earlier that look for all jobs, and search through all jobs to see if their head matches the head listed, or it IS the head) + // + // ALSO - registered_account in _vending.dm for banks, and assigning new ones. + + //to_chat(antagdatum.owner, "PROTEGE OBJECTIVE: Final Count: [objcount] of [antagdatum.vassals.len] vassals") + return objcount >= target_amount + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// Eat blood from a lot of people +/datum/objective/bloodsucker/gourmand + +// HOW: Track each feed (if human). Count victory. + + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// Convert a crewmate +/datum/objective/bloodsucker/embrace + +// HOW: Find crewmate. Check if person is a bloodsucker + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// Defile a facility with blood +/datum/objective/bloodsucker/desecrate + + // Space_Station_13_areas.dm <--- all the areas + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// Destroy the Solar Arrays +/datum/objective/bloodsucker/solars + +// Space_Station_13_areas.dm <--- all the areas +/datum/objective/bloodsucker/solars/update_explanation_text() + explanation_text = "Prevent all solar arrays on the station from functioning." + +/datum/objective/bloodsucker/solars/check_completion() + // Sort through all /obj/machinery/power/solar_control in the station ONLY, and check that they are functioning. + // Make sure that lastgen is 0 or connected_panels.len is 0. Doesnt matter if it's tracking. + for (var/obj/machinery/power/solar_control/SC in SSsun.solars) + // Check On Station: + var/turf/T = get_turf(SC) + if(!T || !is_station_level(T.z)) // <------ Taken from NukeOp + //message_admins("DEBUG A: [SC] not on station!") + continue // Not on station! We don't care about this. + if (SC && SC.lastgen > 0 && SC.connected_panels.len > 0 && SC.connected_tracker) + return FALSE + return TRUE + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// Steal hearts. You just really wanna have some hearts. +/datum/objective/bloodsucker/heartthief + // NOTE: Look up /steal in objective.dm for inspiration. + +// GENERATE! +/datum/objective/bloodsucker/heartthief/generate_objective() + target_amount = rand(2,3) + + update_explanation_text() + //dangerrating += target_amount * 2 + +// EXPLANATION +/datum/objective/bloodsucker/heartthief/update_explanation_text() + explanation_text = "Steal and keep [target_amount] heart[target_amount == 1 ? "" : "s"]." // TO DO: Limit them to Human Only! + +// WIN CONDITIONS? +/datum/objective/bloodsucker/heartthief/check_completion() + // -Must have a body. + if (!owner.current) + return FALSE + // Taken from /steal in objective.dm + var/list/all_items = owner.current.GetAllContents() // Includes items inside other items. + var/itemcount = FALSE + for(var/obj/I in all_items) //Check for items + if(istype(I, /obj/item/organ/heart)) + itemcount ++ + if (itemcount >= target_amount) // Got the right amount? + return TRUE + + return FALSE + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/datum/objective/bloodsucker/survive + martyr_compatible = FALSE + + +// EXPLANATION +/datum/objective/bloodsucker/survive/update_explanation_text() + explanation_text = "Survive the entire shift without succumbing to Final Death." + +// WIN CONDITIONS? +/datum/objective/bloodsucker/survive/check_completion() + // -Must have a body. + if (!owner.current || !isliving(owner.current)) + return FALSE + // Dead, without a head or heart? Cya + return owner.current.stat != DEAD// || owner.current.HaveBloodsuckerBodyparts() + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/datum/objective/bloodsucker/vamphunter + +// GENERATE! +/datum/objective/bloodsucker/vamphunter/generate_objective() + update_explanation_text() + +// EXPLANATION +/datum/objective/bloodsucker/vamphunter/update_explanation_text() + explanation_text = "Destroy all Bloodsuckers on [station_name()]." + +// WIN CONDITIONS? +/datum/objective/bloodsucker/vamphunter/check_completion() + for (var/datum/mind/M in SSticker.mode.bloodsuckers) + if (M && M.current && M.current.stat != DEAD && get_turf(M.current)) + return FALSE + return TRUE + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/datum/objective/bloodsucker/monsterhunter + +// GENERATE! +/datum/objective/bloodsucker/monsterhunter/generate_objective() + update_explanation_text() + +// EXPLANATION +/datum/objective/bloodsucker/monsterhunter/update_explanation_text() + explanation_text = "Destroy all monsters on [station_name()]." + +// WIN CONDITIONS? +/datum/objective/bloodsucker/monsterhunter/check_completion() + var/list/datum/mind/monsters = list() + monsters += SSticker.mode.bloodsuckers + monsters += SSticker.mode.devils + monsters += SSticker.mode.cult + monsters += SSticker.mode.wizards + monsters += SSticker.mode.apprentices + //monsters += SSticker.mode.servants_of_ratvar + //monsters += SSticker.mode.changelings disabled anyways + + for (var/datum/mind/M in monsters) + if (M && M != owner && M.current && M.current.stat != DEAD && get_turf(M.current)) + return FALSE + return TRUE + + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/datum/objective/bloodsucker/vassal + +// GENERATE! +/datum/objective/bloodsucker/vassal/generate_objective() + update_explanation_text() + +// EXPLANATION +/datum/objective/bloodsucker/vassal/update_explanation_text() + explanation_text = "Guarantee the success of your Master's mission!" + +// WIN CONDITIONS? +/datum/objective/bloodsucker/vassal/check_completion() + var/datum/antagonist/vassal/antag_datum = owner.has_antag_datum(ANTAG_DATUM_VASSAL) + return antag_datum.master && antag_datum.master.owner && antag_datum.master.owner.current && antag_datum.master.owner.current.stat != DEAD diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm b/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm new file mode 100644 index 0000000000..ad06d54485 --- /dev/null +++ b/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm @@ -0,0 +1,413 @@ + + + +/datum/action/bloodsucker + name = "Vampiric Gift" + desc = "A vampiric gift." + button_icon = 'icons/mob/actions/bloodsucker.dmi' //This is the file for the BACKGROUND icon + background_icon_state = "vamp_power_off" //And this is the state for the background icon + var/background_icon_state_on = "vamp_power_on" // FULP: Our "ON" icon alternative. + var/background_icon_state_off = "vamp_power_off" // FULP: Our "OFF" icon alternative. + icon_icon = 'icons/mob/actions/bloodsucker.dmi' //This is the file for the ACTION icon + button_icon_state = "power_feed" //And this is the state for the action icon + buttontooltipstyle = "cult" + + // Action-Related + //var/amPassive = FALSE // REMOVED: Just made it its own kind. // Am I just "on" at all times? (aka NO ICON) + var/amTargetted = FALSE // Am I asked to choose a target when enabled? (Shows as toggled ON when armed) + var/amToggle = FALSE // Can I be actively turned on and off? + var/amSingleUse = FALSE // Am I removed after a single use? + var/active = FALSE + var/cooldown = 20 // 10 ticks, 1 second. + var/cooldownUntil = 0 // From action.dm: next_use_time = world.time + cooldown_time + + + // Power-Related + var/level_current = 0 // Can increase to yield new abilities. Each power goes up in strength each Rank. + //var/level_max = 1 // + var/bloodcost = 10 + var/needs_button = TRUE // Taken from Changeling - for passive abilities that dont need a button + var/bloodsucker_can_buy = FALSE // Must be a bloodsucker to use this power. + var/warn_constant_cost = FALSE // Some powers charge you for staying on. Masquerade, Cloak, Veil, etc. + var/can_use_in_torpor = FALSE // Most powers don't function if you're in torpor. + var/must_be_capacitated = FALSE // Some powers require you to be standing and ready. + var/can_be_immobilized = FALSE // Brawn can be used when incapacitated/laying if it's because you're being immobilized. NOTE: If must_be_capacitated is FALSE, this is irrelevant. + var/can_be_staked = FALSE // Only Feed can happen with a stake in you. + var/cooldown_static = FALSE // Feed, Masquerade, and One-Shot powers don't improve their cooldown. + //var/not_bloodsucker = FALSE // This goes to Vassals or Hunters, but NOT bloodsuckers. + +/datum/action/bloodsucker/New() + if (bloodcost > 0) + desc += "

COST: [bloodcost] Blood" // Modify description to add cost. + if (warn_constant_cost) + desc += "

Your over-time blood consumption increases while [name] is active." + if (amSingleUse) + desc += "

Useable once per night." + ..() + + +// NOTES +// +// click.dm <--- Where we can take over mouse clicks +// spells.dm /add_ranged_ability() <--- How we take over the mouse click to use a power on a target. + + +/datum/action/bloodsucker/Trigger() + + // Active? DEACTIVATE AND END! + if (active && CheckCanDeactivate(TRUE)) + DeactivatePower() + return + + if (!CheckCanPayCost(TRUE) || !CheckCanUse(TRUE)) + return + + PayCost() + + if (amToggle) + active = !active + UpdateButtonIcon() + + if (!amToggle || !active) + StartCooldown() // Must come AFTER UpdateButton(), otherwise icon will revert. + + ActivatePower() // NOTE: ActivatePower() freezes this power in place until it ends. + + if (active) // Did we not manually disable? Handle it here. + DeactivatePower() + + if (amSingleUse) + RemoveAfterUse() + +/datum/action/bloodsucker/proc/CheckCanPayCost(display_error) + if(!owner || !owner.mind) + return FALSE + // Cooldown? + if (cooldownUntil > world.time) + if (display_error) + to_chat(owner, "[src] is unavailable. Wait [(cooldownUntil - world.time) / 10] seconds.") + return FALSE + // Have enough blood? + var/mob/living/L = owner + if (L.blood_volume < bloodcost) + if (display_error) + to_chat(owner, "You need at least [bloodcost] blood to activate [name]") + return FALSE + return TRUE + +/datum/action/bloodsucker/proc/CheckCanUse(display_error) // These checks can be scanned every frame while a ranged power is on. + if(!owner || !owner.mind) + return FALSE + // Torpor? + if(!can_use_in_torpor && HAS_TRAIT(owner, TRAIT_DEATHCOMA)) + if(display_error) + to_chat(owner, "Not while you're in Torpor.") + return FALSE + // Stake? + if(!can_be_staked && owner.AmStaked()) + if(display_error) + to_chat(owner, "You have a stake in your chest! Your powers are useless.") + // Incap? + if(must_be_capacitated) + var/mob/living/L = owner + if (L.incapacitated(ignore_restraints=TRUE,ignore_grab=TRUE) || L.lying && !can_be_immobilized) + if(display_error) + to_chat(owner, "Not while you're incapacitated!") + return FALSE + // Constant Cost (out of blood) + if(warn_constant_cost) + var/mob/living/L = owner + if(L.blood_volume <= 0) + if(display_error) + to_chat(owner, "You don't have the blood to upkeep [src].") + return FALSE + return TRUE + + +/datum/action/bloodsucker/proc/StartCooldown() + set waitfor = FALSE + // Alpha Out + button.color = rgb(128,0,0,128) + button.alpha = 100 + // Calculate Cooldown (by power's level) + var/this_cooldown = (cooldown_static || amSingleUse) ? cooldown : max(cooldown / 2, cooldown - (cooldown / 16 * (level_current-1))) + // NOTE: With this formula, you'll hit half cooldown at level 8 for that power. + + // Wait for cooldown + cooldownUntil = world.time + this_cooldown + spawn(this_cooldown) + // Alpha In + button.color = rgb(255,255,255,255) + button.alpha = 255 + + + +/datum/action/bloodsucker/proc/CheckCanDeactivate(display_error) + return TRUE + +/datum/action/bloodsucker/UpdateButtonIcon() + background_icon_state = active? background_icon_state_on : background_icon_state_off + ..()//UpdateButtonIcon() + + +/datum/action/bloodsucker/proc/PayCost() + // owner for actions is the mob, not mind. + var/mob/living/L = owner + L.blood_volume -= bloodcost + + +/datum/action/bloodsucker/proc/ActivatePower() + + + +/datum/action/bloodsucker/proc/DeactivatePower(mob/living/user = owner, mob/living/target) + active = FALSE + UpdateButtonIcon() + StartCooldown() + +/datum/action/bloodsucker/proc/ContinueActive(mob/living/user, mob/living/target) // Used by loops to make sure this power can stay active. + return active && user && (!warn_constant_cost || user.blood_volume > 0) + + +/datum/action/bloodsucker/proc/RemoveAfterUse() + // Un-Learn Me! (GO HOME + var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + if (istype(bloodsuckerdatum)) + bloodsuckerdatum.powers -= src + Remove(owner) + + +/datum/action/bloodsucker/proc/Upgrade() + level_current ++ + +/////////////////////////////////// PASSIVE POWERS /////////////////////////////////// + + +// New Type: Passive (Always on, no button) +/datum/action/bloodsucker/passive + +/datum/action/bloodsucker/passive/New() + // REMOVED: DO NOTHBING! + ..() + // Don't Display Button! (it doesn't do anything anyhow) + button.screen_loc = DEFAULT_BLOODSPELLS + button.moved = DEFAULT_BLOODSPELLS + button.ordered = FALSE +/datum/action/bloodsucker/passive/Destroy() + if(owner) + Remove(owner) + target = null + +/////////////////////////////////// TARGETTED POWERS /////////////////////////////////// + +/datum/action/bloodsucker/targeted + // NOTE: All Targeted spells are Toggles! We just don't bother checking here. + var/target_range = 99 + var/message_Trigger = "Select a target." + var/obj/effect/proc_holder/bloodsucker/bs_proc_holder + var/power_activates_immediately = TRUE // Most powers happen the moment you click. Some, like Mesmerize, require time and shouldn't cost you if they fail. + + var/power_in_use = FALSE // Is this power LOCKED due to being used? + +/datum/action/bloodsucker/targeted/New(Target) + desc += "
\[Targeted Power\]" // Modify description to add notice that this is aimed. + ..() + // Create Proc Holder for intercepting clicks + bs_proc_holder = new () + bs_proc_holder.linked_power = src + +// Click power: Begin Aim +/datum/action/bloodsucker/targeted/Trigger() + + if (active && CheckCanDeactivate(TRUE)) + DeactivateRangedAbility() + DeactivatePower() + return + + if (!CheckCanPayCost(TRUE) || !CheckCanUse(TRUE)) + return + + active = !active + UpdateButtonIcon() + + // Create & Link Targeting Proc + var/mob/living/L = owner + if (L.ranged_ability) + L.ranged_ability.remove_ranged_ability() + bs_proc_holder.add_ranged_ability(L) + + if (message_Trigger != "") + to_chat(owner, "[message_Trigger]") + +/datum/action/bloodsucker/targeted/CheckCanUse(display_error) + if (!..()) + return FALSE + if (!owner.client) // <--- We don't allow non client usage so that using powers like mesmerize will FAIL if you try to use them as ghost. Why? because ranged_abvility in spell.dm + return FALSE // doesn't let you remove powers if you're not there. So, let's just cancel the power entirely. + return TRUE + + +/datum/action/bloodsucker/targeted/DeactivatePower(mob/living/user = owner, mob/living/target) + // Don't run ..(), we don't want to engage the cooldown until we USE this power! + active = FALSE + UpdateButtonIcon() + +/datum/action/bloodsucker/targeted/proc/DeactivateRangedAbility() + // Only Turned off when CLICK is disabled...aka, when you successfully clicked (or + bs_proc_holder.remove_ranged_ability() + //qdel(bs_proc_holder) + +// Check if target is VALID (wall, turf, or character?) +/datum/action/bloodsucker/targeted/proc/CheckValidTarget(atom/A) + return FALSE // FALSE targets nothing. + +// Check if valid target meets conditions +/datum/action/bloodsucker/targeted/proc/CheckCanTarget(atom/A, display_error) + // Out of Range + if(!(A in view(target_range, owner))) + if(display_error && target_range > 1) // Only warn for range if it's greater than 1. Brawn doesn't need to announce itself. + to_chat(owner, "Your target is out of range.") + return FALSE + return istype(A) + +// Click Target +/datum/action/bloodsucker/targeted/proc/ClickWithPower(atom/A) + // CANCEL RANGED TARGET check + if (power_in_use || !CheckValidTarget(A)) + return FALSE + // Valid? (return true means DON'T cancel power!) + if (!CheckCanPayCost(TRUE) || !CheckCanUse(TRUE) || !CheckCanTarget(A, TRUE)) + return TRUE + + // Skip this part so we can return TRUE right away. + if (power_activates_immediately) + PowerActivatedSuccessfully() // Mesmerize pays only after success. + + power_in_use = TRUE // Lock us into this ability until it successfully fires off. Otherwise, we pay the blood even if we fail. + FireTargetedPower(A) // We use this instead of ActivatePower(), which has no input + power_in_use = FALSE + + return TRUE + +/datum/action/bloodsucker/targeted/proc/FireTargetedPower(atom/A) + // Like ActivatePower, but specific to Targeted (and takes an atom input). We don't use ActivatePower for targeted. + +/datum/action/bloodsucker/targeted/proc/PowerActivatedSuccessfully() + // The power went off! We now pay the cost of the power. + + PayCost() + DeactivateRangedAbility() + DeactivatePower() + StartCooldown() // Do AFTER UpdateIcon() inside of DeactivatePower. Otherwise icon just gets wiped. + +/datum/action/bloodsucker/targeted/ContinueActive(mob/living/user, mob/living/target) // Used by loops to make sure this power can stay active. + return ..() // active// && user.mind && user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + + + +// Target Proc Holder +/obj/effect/proc_holder/bloodsucker + var/datum/action/bloodsucker/targeted/linked_power + +/obj/effect/proc_holder/bloodsucker/remove_ranged_ability(msg) + ..() + linked_power.DeactivatePower() + //qdel(src) + +/obj/effect/proc_holder/bloodsucker/InterceptClickOn(mob/living/caller, params, atom/A) + return linked_power.ClickWithPower(A) + + + +// P O W E R S +// * BLOOD +// ADDICTIVE: A) Your blood is dangerously addictive, and causes consumers to rendew their own blood at an increased rate (as well as heal). B) Vassals on your blood get special gifts. +// +// * HASTE +// SPRINT: A) Hastily speed in a direction faster than the eye can see. B) Spin and dizzy people you pass. C) Chance to knock down people you pass. +// LUNGE: Leap toward a location and put your target into an agressive hold. +// +// * AGILITY +// CELERITY: Dodge projectiles and even bullets. Perhaps avoid explosions! +// REFLEXES TRAIT_NOSLIPWATER, TRAIT_NOSLIPALL +// +// * STEALTH +// CLOAK: A) Vanish into the shadows when stationary. B) Moving does not break your current level of invisibility (but stops you from hiding further). +// DISGUISE: A) Bear the face and voice of a new person. B) Bear a random outfit of an unknown profession. +// +// * FEED +// A) Mute victim while Feeding (and slowly deal Stamina damage) B) Paralyze victim while feeding C) Sleep victim while Feeding +// +// * MEZMERIZE +// LOVE: Target falls in love with you. Being harmed directly causes them harm if they see it? +// STAY: Target will do everything they can to stand in the same place. +// FOLLOW: Target follows you, spouting random phrases from their history (or maybe Poly's or NPC's vocab?) +// ATTACK: Target finds a nearby non-Bloodsucker victim to attack. +// +// * EXPEL +// TAINT: Mark areas with your corrupting blood. Your coffin must remain in an area so marked to gain any benefit. Spiders, roaches, and rats will infest the area, cobwebs grow rapidly, and trespassers are overcome with fear. +// SERVITUDE: Your blood binds a mortal to your will. Vassals feel your pain and can locate you anywhere. Your death causes them agony. +// HEIR: Raise a moral corpse into a Bloodsucker. The change will take a while, and the body must be brought to a tainted coffin to rise. +// +// * NIGHTMARE +// BOGEYMAN: Terrify those who view you in your death-form, causing them to shake, pale, and drop possessions. +// HORROR: Horrified characters cannot speak, shake, and slowly push away from the source. +// + + + + + + + + + +/* POWERS: VERSION TWO + + * FEED + 1: Paralyze + 2: Unconscious + 3: Sleep + + * LUNGE + 1: Grab: Aggressive + 2: Grab from Behind: Neck + 3: Grab from Darkness: Neck + + * CLOAK + 1: Hide + 2: Move + 3: Full Speed + + * MESMERIZE + 1: Stay + 2: Mute + 3: Follow + Blind + + * BRAWN + 1: Punch Hard + 2: Open Doors and Lockers + 3: + + * HASTE + 1: Speed to location + 2: Dodge Bullets + 3: + + * VEIL + 1: + 2: + 3: + + * FORTITUDE + 1: Break Bonds and Grapples + 2: + 3: Immune to Brute Damage + + * DEMENT + 1: Shuffle Names + 2: + 3: + + +*/ diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm b/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm new file mode 100644 index 0000000000..29af94616f --- /dev/null +++ b/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm @@ -0,0 +1,198 @@ +#define TIME_BLOODSUCKER_NIGHT 1080 // 12 minutes +#define TIME_BLOODSUCKER_DAY_WARN 90 // 1.5 minutes +#define TIME_BLOODSUCKER_DAY_FINAL_WARN 25 // 25 sec +#define TIME_BLOODSUCKER_DAY 60 // 1.5 minutes // 10 is a second, 600 is a minute. +#define TIME_BLOODSUCKER_BURN_INTERVAL 40 // 4 sec + + +// Over Time, tick down toward a "Solar Flare" of UV buffeting the station. This period is harmful to vamps. +/obj/effect/sunlight + //var/amDay = FALSE + var/cancel_me = FALSE + var/amDay = FALSE + var/time_til_cycle = 0 + +/obj/effect/sunlight/Initialize() + countdown() + hud_tick() + +/obj/effect/sunlight/proc/countdown() + set waitfor = FALSE + + while(!cancel_me) + + time_til_cycle = TIME_BLOODSUCKER_NIGHT + + // Part 1: Night (all is well) + while (time_til_cycle > TIME_BLOODSUCKER_DAY_WARN) + sleep(10) + if (cancel_me) + return + //sleep(TIME_BLOODSUCKER_NIGHT - TIME_BLOODSUCKER_DAY_WARN) + warn_daylight(1,"Solar Flares will bombard the station with dangerous UV in [TIME_BLOODSUCKER_DAY_WARN / 60] minutes. Prepare to seek cover in a coffin or closet.") // time2text <-- use Help On + give_home_power() // Give VANISHING ACT power to all vamps with a lair! + + // Part 2: Night Ending + while (time_til_cycle > TIME_BLOODSUCKER_DAY_FINAL_WARN) + sleep(10) + if (cancel_me) + return + //sleep(TIME_BLOODSUCKER_DAY_WARN - TIME_BLOODSUCKER_DAY_FINAL_WARN) + message_admins("BLOODSUCKER NOTICE: Daylight beginning in [TIME_BLOODSUCKER_DAY_FINAL_WARN] seconds.)") + warn_daylight(2,"Solar Flares are about to bombard the station! You have [TIME_BLOODSUCKER_DAY_FINAL_WARN] seconds to find cover!",\ + "In [TIME_BLOODSUCKER_DAY_FINAL_WARN / 10], your master will be at risk of a Solar Flare. Make sure they find cover!") + + // (FINAL LIL WARNING) + while (time_til_cycle > 5) + sleep(10) + if (cancel_me) + return + //sleep(TIME_BLOODSUCKER_DAY_FINAL_WARN - 50) + warn_daylight(3,"Seek cover, for Sol rises!") + + // Part 3: Night Ending + while (time_til_cycle > 0) + sleep(10) + if (cancel_me) + return + //sleep(50) + warn_daylight(4,"Solar flares bombard the station with deadly UV light!
Stay in cover for the next [TIME_BLOODSUCKER_DAY / 60] minutes or risk Final Death!",\ + "Solar flares bombard the station with UV light!") + + // Part 4: Day + amDay = TRUE + message_admins("BLOODSUCKER NOTICE: Daylight Beginning (Lasts for [TIME_BLOODSUCKER_DAY / 60] minutes.)") + time_til_cycle = TIME_BLOODSUCKER_DAY + sleep(10) // One second grace period. + //var/daylight_time = TIME_BLOODSUCKER_DAY + var/issued_XP = FALSE + while(time_til_cycle > 0) + punish_vamps() + sleep(TIME_BLOODSUCKER_BURN_INTERVAL) + if (cancel_me) + return + //daylight_time -= TIME_BLOODSUCKER_BURN_INTERVAL + // Issue Level Up! + if (!issued_XP && time_til_cycle <= 15) + issued_XP = TRUE + vamps_rank_up() + + warn_daylight(5,"The solar flare has ended, and the daylight danger has passed...for now.",\ + "The solar flare has ended, and the daylight danger has passed...for now.") + amDay = FALSE + day_end() // Remove VANISHING ACT power from all vamps who have it! Clear Warnings (sunlight, locker protection) + message_admins("BLOODSUCKER NOTICE: Daylight Ended. Resetting to Night (Lasts for [TIME_BLOODSUCKER_NIGHT / 60] minutes.)") + + +/obj/effect/sunlight/proc/hud_tick() + set waitfor = FALSE + + while(!cancel_me) + + // Update all Bloodsucker sunlight huds + for (var/datum/mind/M in SSticker.mode.bloodsuckers) + if (!istype(M) || !istype(M.current)) + continue + var/datum/antagonist/bloodsucker/bloodsuckerdatum = M.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + if (istype(bloodsuckerdatum)) + bloodsuckerdatum.update_sunlight(max(0, time_til_cycle), amDay) // This pings all HUDs + + sleep(10) + time_til_cycle -- + +/obj/effect/sunlight/proc/warn_daylight(danger_level=0, vampwarn = "", vassalwarn = "") + for (var/datum/mind/M in SSticker.mode.bloodsuckers) + if (!istype(M)) + continue + to_chat(M,vampwarn) + if (M.current) + if (danger_level == 1) + M.current.playsound_local(null, 'sound/chatter/griffin_3.ogg', 50 + danger_level, 1) + else if (danger_level == 2) + M.current.playsound_local(null, 'sound/chatter/griffin_5.ogg', 50 + danger_level, 1) + else if (danger_level == 3) + M.current.playsound_local(null, 'sound/effects/alert.ogg', 75, 1) + else if (danger_level == 4) + M.current.playsound_local(null, 'sound/ambience/ambimystery.ogg', 100, 1) + else if (danger_level == 5) + M.current.playsound_local(null, 'sound/spookoween/ghosty_wind.ogg', 90, 1) + + if (vassalwarn != "") + for (var/datum/mind/M in SSticker.mode.vassals) + if (!istype(M)) + continue + to_chat(M,vassalwarn) + + +/obj/effect/sunlight/proc/punish_vamps() + // Cycle through all vamp antags and check if they're inside a closet. + for (var/datum/mind/M in SSticker.mode.bloodsuckers) + if (!istype(M) || !istype(M.current)) + continue + var/datum/antagonist/bloodsucker/bloodsuckerdatum = M.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + if (!istype(bloodsuckerdatum)) + continue + // Closets offer SOME protection + if (istype(M.current.loc, /obj/structure)) + // Coffins offer the BEST protection + if (istype(M.current.loc, /obj/structure/closet/crate/coffin)) + SEND_SIGNAL(M.current, COMSIG_ADD_MOOD_EVENT, "vampsleep", /datum/mood_event/coffinsleep) + continue + else + if (!bloodsuckerdatum.warn_sun_locker) + to_chat(M, "Your skin sizzles. The [M.current.loc] doesn't protect well against UV bombardment.") + bloodsuckerdatum.warn_sun_locker = TRUE + M.current.adjustFireLoss(0.5 + bloodsuckerdatum.vamplevel / 2) // M.current.fireloss += 0.5 + bloodsuckerdatum.vamplevel / 2 // Do DIRECT damage. Being spaced was causing this to not occur. setFireLoss(bloodsuckerdatum.vamplevel) + M.current.updatehealth() + SEND_SIGNAL(M.current, COMSIG_ADD_MOOD_EVENT, "vampsleep", /datum/mood_event/daylight_1) + // Out in the Open? Buh Bye + else + if (!bloodsuckerdatum.warn_sun_burn) + if (bloodsuckerdatum.vamplevel > 0) + to_chat(M, "The solar flare sets your skin ablaze!") + else + to_chat(M, "The solar flare scalds your neophyte skin!") + bloodsuckerdatum.warn_sun_burn = TRUE + if (M.current.fire_stacks <= 0) + M.current.fire_stacks = 0 + if (bloodsuckerdatum.vamplevel > 0) + M.current.adjust_fire_stacks(0.2 + bloodsuckerdatum.vamplevel / 10) + M.current.IgniteMob() + M.current.adjustFireLoss(2 + bloodsuckerdatum.vamplevel) // M.current.fireloss += 2 + bloodsuckerdatum.vamplevel // Do DIRECT damage. Being spaced was causing this to not occur. //setFireLoss(2 + bloodsuckerdatum.vamplevel) + M.current.updatehealth() + SEND_SIGNAL(M.current, COMSIG_ADD_MOOD_EVENT, "vampsleep", /datum/mood_event/daylight_2) + +/obj/effect/sunlight/proc/day_end() + for (var/datum/mind/M in SSticker.mode.bloodsuckers) + if (!istype(M) || !istype(M.current)) + continue + var/datum/antagonist/bloodsucker/bloodsuckerdatum = M.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + if (!istype(bloodsuckerdatum)) + continue + // Reset Warnings + bloodsuckerdatum.warn_sun_locker = FALSE + bloodsuckerdatum.warn_sun_burn = FALSE + // Remove Dawn Powers + for(var/datum/action/bloodsucker/P in bloodsuckerdatum.powers) + if (istype(P, /datum/action/bloodsucker/gohome)) + bloodsuckerdatum.powers -= P + P.Remove(M.current) + +/obj/effect/sunlight/proc/vamps_rank_up() + set waitfor = FALSE + // Cycle through all vamp antags and check if they're inside a closet. + for (var/datum/mind/M in SSticker.mode.bloodsuckers) + if (!istype(M) || !istype(M.current)) + continue + var/datum/antagonist/bloodsucker/bloodsuckerdatum = M.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + if (istype(bloodsuckerdatum)) + bloodsuckerdatum.RankUp() // Rank up! Must still be in a coffin to level! + +/obj/effect/sunlight/proc/give_home_power() + // It's late...! Give the "Vanishing Act" gohome power to bloodsuckers. + for (var/datum/mind/M in SSticker.mode.bloodsuckers) + if (!istype(M) || !istype(M.current)) + continue + var/datum/antagonist/bloodsucker/bloodsuckerdatum = M.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + if (istype(bloodsuckerdatum) && bloodsuckerdatum.lair && !(locate(/datum/action/bloodsucker/gohome) in bloodsuckerdatum.powers)) + bloodsuckerdatum.BuyPower(new /datum/action/bloodsucker/gohome) diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_ui.dm b/code/modules/antagonists/bloodsucker/bloodsucker_ui.dm new file mode 100644 index 0000000000..b922af6066 --- /dev/null +++ b/code/modules/antagonists/bloodsucker/bloodsucker_ui.dm @@ -0,0 +1,116 @@ + + +// For all things visual, such as leveling up + + +// Look up: _vending.dm proc/ui_interact() +// Malf_Modules.dm proc/use() + +/* +/datum/antagonist/bloodsucker/proc/LevelUpMenu() + var/list/dat = list() + + dat += "

You have become more ancient.
Direct the path of your blood

" + dat += "
" + + // Step One: Decide powers you CAN buy. + for(var/pickedpower in typesof(/datum/action/bloodsucker)) + var/obj/effect/proc_holder/spell/bloodsucker/power = pickedpower + // NAME + dat += "[power.name]" + // COST + dat += "[power.name] Vend" + dat == "
" + + var/datum/browser/popup = new(owner.current, "bloodsuckerrank", "Bloodsucker Rank Up") + popup.set_content(dat.Join()) + popup.open() + +/datum/antagonist/bloodsucker/Topic(href, href_list) + if(..()) + return +*/ + + +// From browser.dm: /datum/browser/New(nuser, nwindow_id, ntitle = 0, nwidth = 0, nheight = 0, var/atom/nref = null) + + +/* + var/list/dat = list() + dat += "Select use of processing time: (currently #[processing_time] left.)
" + dat += "
" + dat += "Install Module:
" + dat += "The number afterwards is the amount of processing time it consumes.
" + for(var/datum/AI_Module/large/module in possible_modules) + dat += "[module.module_name]\[?\] ([module.cost])
" + for(var/datum/AI_Module/small/module in possible_modules) + dat += "[module.module_name]\[?\] ([module.cost])
" + dat += "
" + if(temp) + dat += "[temp]" + var/datum/browser/popup = new(user, "modpicker", "Malf Module Menu") + popup.set_content(dat.Join()) + popup.open() +*/ + +/* + var/dat = "" + var/datum/bank_account/account + var/mob/living/carbon/human/H + var/obj/item/card/id/C + if(ishuman(user)) + H = user + C = H.get_idcard(TRUE) + + if(!C) + dat += "

No ID Card detected!

" + else if (!C.registered_account) + dat += "

No account on registered ID card!

" + if(onstation && C && C.registered_account) + account = C.registered_account + dat += "

Select an item

" + dat += "
" + if(!product_records.len) + dat += "No product loaded!" + else + var/list/display_records = product_records + coin_records + if(extended_inventory) + display_records = product_records + coin_records + hidden_records + dat += "" + for (var/datum/data/vending_product/R in display_records) + var/price_listed = "$[default_price]" + var/is_hidden = hidden_records.Find(R) + if(is_hidden && !extended_inventory) + continue + if(R.custom_price) + price_listed = "$[R.custom_price]" + if(!onstation || account && account.account_job && account.account_job.paycheck_department == payment_department) + price_listed = "FREE" + if(coin_records.Find(R) || is_hidden) + price_listed = "$[R.custom_premium_price ? R.custom_premium_price : extra_price]" + dat += "" + dat += "" + if(R.amount > 0 && ((C && C.registered_account && onstation) || (!onstation && isliving(user)))) + dat += "" + else + dat += "" + dat += "" + dat += "
[sanitize(R.name)] ([price_listed])[R.amount] VendNot Available
" + dat += "
" + if(onstation && C && C.registered_account) + dat += "Balance: $[account.account_balance]" + if(istype(src, /obj/machinery/vending/snack)) + dat += "

Chef's Food Selection

" + dat += "
" + for (var/O in dish_quants) + if(dish_quants[O] > 0) + var/N = dish_quants[O] + dat += "Dispense " + dat += "[capitalize(O)] ($[default_price]): [N]
" + dat += "
" + + var/datum/browser/popup = new(user, "vending", (name)) + popup.set_content(dat) + popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) + popup.open() +*/ \ No newline at end of file diff --git a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm new file mode 100644 index 0000000000..2dba2f9587 --- /dev/null +++ b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm @@ -0,0 +1,794 @@ +/datum/team/vampireclan + name = "Clan" // Teravanni, + +/datum/antagonist/bloodsucker + name = "Bloodsucker" + roundend_category = "bloodsuckers" + antagpanel_category = "Bloodsucker" + job_rank = ROLE_BLOODSUCKER + + // NAME + var/vampname // My Dracula name + var/vamptitle // My Dracula title + var/vampreputation // My "Surname" or description of my deeds + // CLAN + var/datum/team/vampireclan/clan + var/list/datum/antagonist/vassal/vassals = list()// Vassals under my control. Periodically remove the dead ones. + var/datum/mind/creator // Who made me? For both Vassals AND Bloodsuckers (though Master Vamps won't have one) + // POWERS + var/list/datum/action/powers = list()// Purchased powers + var/poweron_feed = FALSE // Am I feeding? + var/poweron_masquerade = FALSE + // STATS + var/vamplevel = 0 + var/vamplevel_unspent = 1 + var/regenRate = 0.3 // How many points of Brute do I heal per tick? + var/feedAmount = 15 // Amount of blood drawn from a target per tick. + var/maxBloodVolume = 600 // Maximum blood a Vamp can hold via feeding. // BLOOD_VOLUME_NORMAL 550 // BLOOD_VOLUME_SAFE 475 //BLOOD_VOLUME_OKAY 336 //BLOOD_VOLUME_BAD 224 // BLOOD_VOLUME_SURVIVE 122 + // OBJECTIVES + var/list/datum/objective/objectives_given = list() // For removal if needed. + var/area/lair + var/obj/structure/closet/crate/coffin + // TRACKING + var/foodInGut = 0 // How much food to throw up later. You shouldn't have eaten that. + var/warn_sun_locker = FALSE // So we only get the locker burn message once per day. + var/warn_sun_burn = FALSE // So we only get the sun burn message once per day. + + // LISTS + var/static/list/defaultTraits = list (TRAIT_STABLEHEART, TRAIT_NOBREATH, TRAIT_SLEEPIMMUNE, TRAIT_NOCRITDAMAGE, TRAIT_RESISTCOLD, TRAIT_RADIMMUNE, TRAIT_VIRUSIMMUNE, TRAIT_NIGHT_VISION, \ + TRAIT_NOSOFTCRIT, TRAIT_NOHARDCRIT, TRAIT_AGEUSIA, TRAIT_COLDBLOODED, TRAIT_NONATURALHEAL, TRAIT_NOMARROW, TRAIT_NOPULSE) + // NOTES: TRAIT_AGEUSIA <-- Doesn't like flavors. + // REMOVED: TRAIT_NODEATH + // TO ADD: + //var/static/list/defaultOrgans = list (/obj/item/organ/heart/vampheart,/obj/item/organ/heart/vampeyes) + + + +/datum/antagonist/bloodsucker/on_gain() + SSticker.mode.bloodsuckers |= owner // Add if not already in here (and you might be, if you were picked at round start) + SSticker.mode.check_start_sunlight()// Start Sunlight? (if first Vamp) + SelectFirstName()// Name & Title + SelectTitle(am_fledgling=TRUE) // If I have a creator, then set as Fledgling. + SelectReputation(am_fledgling=TRUE) + AssignStarterPowersAndStats()// Give Powers & Stats + forge_bloodsucker_objectives()// Objectives & Team + update_bloodsucker_icons_added(owner.current, "bloodsucker") // Add Antag HUD + LifeTick() // Run Life Function + . = ..() + + +/datum/antagonist/bloodsucker/on_removal() + SSticker.mode.bloodsuckers -= owner + SSticker.mode.check_cancel_sunlight()// End Sunlight? (if last Vamp) + ClearAllPowersAndStats()// Clear Powers & Stats + clear_bloodsucker_objectives() // Objectives + update_bloodsucker_icons_removed(owner.current)// Clear Antag HUD + . = ..() + + + +/datum/antagonist/bloodsucker/greet() + var/fullname = ReturnFullName(TRUE) + to_chat(owner, "You are [fullname], a bloodsucking vampire!
") + owner.announce_objectives() + to_chat(owner, "* You regenerate your health slowly, you're weak to fire, and you depend on blood to survive. Allow your stolen blood to run too low, and you will find yourself at \ + risk of being discovered!
") + //to_chat(owner, "As an immortal, your power is linked to your age. The older you grow, the more abilities you will have access to.") + var/vamp_greet + vamp_greet += "* Other Bloodsuckers are not necessarily your friends, but your survival may depend on cooperation. Betray them at your own discretion and peril.
" + vamp_greet += "* Use \",b\" to speak your ancient Bloodsucker language.
" + vamp_greet += "Bloodsucker Tip: Rest in a Coffin to claim it, and that area, as your lair.
" + vamp_greet += "Bloodsucker Tip: Fear the daylight! Solar flares will bombard the station periodically, and only your coffin can guarantee your safety.
" + to_chat(owner, vamp_greet) + + owner.current.playsound_local(null, 'sound/bloodsucker/BloodsuckerAlert.ogg', 100, FALSE, pressure_affected = FALSE) + antag_memory += "Although you were born a mortal, in un-death you earned the name [fullname].
" + + +/datum/antagonist/bloodsucker/farewell() + owner.current.visible_message("[owner.current]'s skin flushes with color, their eyes growing glossier. They look...alive.",\ + "With a snap, your curse has ended. You are no longer a Bloodsucker. You live once more!") + // Refill with Blood + owner.current.blood_volume = max(owner.current.blood_volume,BLOOD_VOLUME_SAFE) + + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + +/datum/antagonist/bloodsucker/proc/SelectFirstName() + // Names (EVERYONE gets one)) + if (owner.current.gender == MALE) + vampname = pick("Desmond","Rudolph","Dracul","Vlad","Pyotr","Gregor","Cristian","Christoff","Marcu","Andrei","Constantin","Gheorghe","Grigore","Ilie","Iacob","Luca","Mihail","Pavel","Vasile","Octavian","Sorin", \ + "Sveyn","Aurel","Alexe","Iustin","Theodor","Dimitrie","Octav","Damien","Magnus","Caine","Abel", // Romanian/Ancient + "Lucius","Gaius","Otho","Balbinus","Arcadius","Romanos","Alexios","Vitellius", // Latin + "Melanthus","Teuthras","Orchamus","Amyntor","Axion", // Greek + "Thoth","Thutmose","Osorkon,","Nofret","Minmotu","Khafra" // Egyptian + "Dio") + + else + vampname = pick("Islana","Tyrra","Greganna","Pytra","Hilda","Andra","Crina","Viorela","Viorica","Anemona","Camelia","Narcisa","Sorina","Alessia","Sophia","Gladda","Arcana","Morgan","Lasarra","Ioana","Elena", \ + "Alina","Rodica","Teodora","Denisa","Mihaela","Svetla","Stefania","Diyana","Kelssa","Lilith", // Romanian/Ancient + "Alexia","Athanasia","Callista","Karena","Nephele","Scylla","Ursa", // Latin + "Alcestis","Damaris","Elisavet","Khthonia","Teodora", // Greek + "Nefret","Ankhesenpep") // Egyptian + +/datum/antagonist/bloodsucker/proc/SelectTitle(am_fledgling = 0, forced=FALSE) + // Already have Title + if (!forced && vamptitle != null) + return + // Titles [Master] + if (!am_fledgling) + if (owner.current.gender == MALE) + vamptitle = pick ("Count","Baron","Viscount","Prince","Duke","Tzar","Dreadlord","Lord","Master") + else + vamptitle = pick ("Countess","Baroness","Viscountess","Princess","Duchess","Tzarina","Dreadlady","Lady","Mistress") + to_chat(owner, "You have earned a title! You are now known as [ReturnFullName(TRUE)]!") + // Titles [Fledgling] + else + vamptitle = null + +/datum/antagonist/bloodsucker/proc/SelectReputation(am_fledgling = 0, forced=FALSE) + // Already have Reputation + if (!forced && vampreputation != null) + return + // Reputations [Master] + if (!am_fledgling) + vampreputation = pick("Butcher","Blood Fiend","Crimson","Red","Black","Terror","Nightman","Feared","Ravenous","Fiend","Malevolent","Wicked","Ancient","Plaguebringer","Sinister","Forgotten","Wretched","Baleful", \ + "Inqisitor","Harvester","Reviled","Robust","Betrayer","Destructor","Damned","Accursed","Terrible","Vicious","Profane","Vile","Depraved","Foul","Slayer","Manslayer","Sovereign","Slaughterer", \ + "Forsaken","Mad","Dragon","Savage","Villainous","Nefarious","Inquisitor","Marauder","Horrible","Immortal","Undying","Overlord","Corrupt","Hellspawn","Tyrant","Sanguineous") + if (owner.current.gender == MALE) + if (prob(10)) // Gender override + vampreputation = pick("King of the Damned", "Blood King", "Emperor of Blades", "Sinlord", "God-King") + else + if (prob(10)) // Gender override + vampreputation = pick("Queen of the Damned", "Blood Queen", "Empress of Blades", "Sinlady", "God-Queen") + + to_chat(owner, "You have earned a reputation! You are now known as [ReturnFullName(TRUE)]!") + + // Reputations [Fledgling] + else + vampreputation = pick ("Crude","Callow","Unlearned","Neophyte","Novice","Unseasoned","Fledgling","Young","Neonate","Scrapling","Untested","Unproven","Unknown","Newly Risen","Born","Scavenger","Unknowing",\ + "Unspoiled","Disgraced","Defrocked","Shamed","Meek","Timid","Broken")//,"Fresh") + + +/datum/antagonist/bloodsucker/proc/AmFledgling() + return !vamptitle + +/datum/antagonist/bloodsucker/proc/ReturnFullName(var/include_rep=0) + + var/fullname + // Name First + fullname = (vampname ? vampname : owner.current.name) + // Title + if (vamptitle) + fullname = vamptitle + " " + fullname + // Rep + if (include_rep && vampreputation) + fullname = fullname + " the " + vampreputation + + return fullname + + + +/datum/antagonist/bloodsucker/proc/BuyPower(datum/action/bloodsucker/power)//(obj/effect/proc_holder/spell/power) + powers += power + power.Grant(owner.current)// owner.AddSpell(power) + +/datum/antagonist/bloodsucker/proc/AssignStarterPowersAndStats() + // Blood/Rank Counter + add_hud() + update_hud(TRUE) // Set blood value, current rank + // Powers + BuyPower(new /datum/action/bloodsucker/feed) + BuyPower(new /datum/action/bloodsucker/masquerade) + // Traits + for (var/T in defaultTraits) + ADD_TRAIT(owner.current, T, "bloodsucker") + // Traits: Species + if (ishuman(owner.current)) + var/mob/living/carbon/human/H = owner.current + var/datum/species/S = H.dna.species + S.species_traits |= DRINKSBLOOD + // Clear Addictions + owner.current.reagents.addiction_list = list() // Start over from scratch. Lucky you! At least you're not addicted to blood anymore (if you were) + // Stats + if (ishuman(owner.current)) + var/mob/living/carbon/human/H = owner.current + var/datum/species/S = H.dna.species + // Make Changes + S.brutemod *= 0.5 + S.burnmod += 0.2 // <-------------------- Start small, but burn mod increases based on rank! + S.coldmod = 0 + S.stunmod *= 0.5 + S.siemens_coeff *= 0.75 //base electrocution coefficient 1 + //S.heatmod += 0.5 // Heat shouldn't affect. Only Fire. + //S.punchstunthreshold = 8 //damage at which punches from this race will stun 9 + S.punchdamagelow += 1 //lowest possible punch damage 0 + S.punchdamagehigh += 1 //highest possible punch damage 9 + // Clown + if(istype(H) && owner.assigned_role == "Clown") + //to_chat(H, "You have evolved beyond your clownish nature, allowing you to wield weapons without harming yourself.") + H.dna.remove_mutation(CLOWNMUT) + to_chat(H, "As a vampiric clown, you are no longer a danger to yourself. Your nature is subdued.") + // Physiology + CheckVampOrgans() // Heart, Eyes + // Language + owner.current.grant_language(/datum/language/vampiric) + // Soul + owner.current.hellbound = TRUE + owner.hasSoul = FALSE // If false, renders the character unable to sell their soul. + owner.isholy = FALSE // is this person a chaplain or admin role allowed to use bibles + // Disabilities + CureDisabilities() + +/datum/antagonist/bloodsucker/proc/ClearAllPowersAndStats() + // Blood/Rank Counter + remove_hud() + // Powers + while(powers.len) + var/datum/action/bloodsucker/power = pick(powers) + powers -= power + power.Remove(owner.current) + // owner.RemoveSpell(power) + // Traits + for (var/T in defaultTraits) + REMOVE_TRAIT(owner.current, T, "bloodsucker") + // Traits: Species + if (ishuman(owner.current)) + var/mob/living/carbon/human/H = owner.current + H.set_species(H.dna.species.type) + // Stats + if (ishuman(owner.current)) + var/mob/living/carbon/human/H = owner.current + H.set_species(H.dna.species.type) + // Clown + if(istype(H) && owner.assigned_role == "Clown") + H.dna.add_mutation(CLOWNMUT) + // NOTE: Use initial() to return things to default! + // Physiology + owner.current.regenerate_organs() + // Update Health + owner.current.setMaxHealth(100) + // Language + owner.current.remove_language(/datum/language/vampiric) + // Soul + if (owner.soulOwner == owner) // Return soul, if *I* own it. + owner.hasSoul = TRUE + owner.current.hellbound = FALSE + +datum/antagonist/bloodsucker/proc/RankUp() + set waitfor = FALSE + if (!owner || !owner.current) + return + + vamplevel_unspent ++ + // Spend Rank Immediately? + if (istype(owner.current.loc, /obj/structure/closet/crate/coffin)) + SpendRank() + else + to_chat(owner, "You have grown more ancient! Sleep in a coffin that you have claimed to thicken your blood and become more powerful.") + if (vamplevel_unspent >= 2) + to_chat(owner, "Bloodsucker Tip: If you cannot find or steal a coffin to use, they can be built from wooden planks.
") + + +datum/antagonist/bloodsucker/proc/LevelUpPowers() + for(var/datum/action/bloodsucker/power in powers) + power.level_current ++ + +datum/antagonist/bloodsucker/proc/SpendRank() + set waitfor = FALSE + if (vamplevel_unspent <= 0 || !owner || !owner.current || !owner.current.client) + return + + ///////// + // Powers + + // Purchase Power Prompt + var/list/options = list() // Taken from gasmask.dm, for Clown Masks. + for(var/pickedpower in typesof(/datum/action/bloodsucker)) + var/datum/action/bloodsucker/power = pickedpower + // If I don't own it, and I'm allowed to buy it. + if (!(locate(power) in powers) && initial(power.bloodsucker_can_buy)) + options[initial(power.name)] = power // TESTING: After working with TGUI, it seems you can use initial() to view the variables inside a path? + options["\[ Not Now \]"] = null + + // Abort? + if (options.len > 1) + var/choice = input(owner.current, "You have the opportunity to grow more ancient. Select a power to advance your Rank.", "Your Blood Thickens...") in options + // Cheat-Safety: Can't keep opening/closing coffin to spam levels + if (vamplevel_unspent <= 0) // Already spent all your points, and tried opening/closing your coffin, pal. + return + if (!istype(owner.current.loc, /obj/structure/closet/crate/coffin)) + to_chat(owner.current, "Return to your coffin to advance your Rank.") + return + if (!choice || !options[choice] || (locate(options[choice]) in powers)) // ADDED: Check to see if you already have this power, due to window stacking. + to_chat(owner.current, "You prevent your blood from thickening just yet, but you may try again later.") + return + // Buy New Powers + var/datum/action/bloodsucker/P = options[choice] + BuyPower(new P) + to_chat(owner.current, "You have learned [initial(P.name)]!") + else + to_chat(owner.current, "You grow more ancient by the night!") + + ///////// + // Advance Powers (including new) + LevelUpPowers() + + ///////// + // Advance Stats + if (ishuman(owner.current)) + var/mob/living/carbon/human/H = owner.current + var/datum/species/S = H.dna.species + S.burnmod += 0.025 // Slightly more burn damage + S.stunmod *= 0.95 // Slightly less stun time. + S.punchdamagelow += 0.5 + S.punchdamagehigh += 0.5 // NOTE: This affects the hitting power of Brawn. + // More Health + owner.current.setMaxHealth(owner.current.maxHealth + 5) + // Vamp Stats + regenRate += 0.05 // Points of brute healed (starts at 0.3) + feedAmount += 2 // Increase how quickly I munch down vics (15) + maxBloodVolume += 50 // Increase my max blood (600) + + + ///////// + + vamplevel ++ + vamplevel_unspent -- + + // Assign True Reputation + if (vamplevel == 4) + SelectReputation(am_fledgling=FALSE, forced=TRUE) + + to_chat(owner.current, "You are now a rank [vamplevel] Bloodsucker. Your strength, resistence, health, feed rate, regen rate, and maximum blood have all increased!") + to_chat(owner.current, "Your existing powers have all ranked up as well!") + to_chat(owner.current, "However, your weakness to fire and sunlight have also increased!") + + update_hud(TRUE) + + owner.current.playsound_local(null, 'sound/effects/pope_entry.ogg', 25, 1) // Play THIS sound for user only. The "null" is where turf would go if a location was needed. Null puts it right in their head. + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + +//This handles the application of antag huds/special abilities +/datum/antagonist/bloodsucker/apply_innate_effects(mob/living/mob_override) + return + +//This handles the removal of antag huds/special abilities +/datum/antagonist/bloodsucker/remove_innate_effects(mob/living/mob_override) + return + +//Assign default team and creates one for one of a kind team antagonists +/datum/antagonist/bloodsucker/create_team(datum/team/team) + return + + + +// Create Objectives +/datum/antagonist/bloodsucker/proc/forge_bloodsucker_objectives() // Fledgling vampires can have different objectives. + + // TEAM + //clan = new /datum/team/vampireclan(owner) + + + // Lair Objective: Create a Lair + var/datum/objective/bloodsucker/lair/lair_objective = new + lair_objective.owner = owner + lair_objective.generate_objective() + add_objective(lair_objective) + + // Protege Objective + var/datum/objective/bloodsucker/protege/protege_objective = new + protege_objective.owner = owner + protege_objective.generate_objective() + add_objective(protege_objective) + + if (rand(0,1) == 0) + // Heart Thief Objective + var/datum/objective/bloodsucker/heartthief/heartthief_objective = new + heartthief_objective.owner = owner + heartthief_objective.generate_objective() + add_objective(heartthief_objective) + + else + // Solars Objective + var/datum/objective/bloodsucker/solars/solars_objective = new + solars_objective.owner = owner + solars_objective.generate_objective() + add_objective(solars_objective) + + // Survive Objective + var/datum/objective/bloodsucker/survive/survive_objective = new + survive_objective.owner = owner + survive_objective.generate_objective() + add_objective(survive_objective) + + +/datum/antagonist/bloodsucker/proc/add_objective(var/datum/objective/O) + objectives += O + objectives_given += O + +/datum/antagonist/bloodsucker/proc/clear_bloodsucker_objectives() + + var/datum/team/team = get_team() + if(team) + team.remove_member(owner) + + for(var/O in objectives_given) + objectives -= O + qdel(O) + objectives_given = list() // Traitors had this, so I added it. Not sure why. + + +/datum/antagonist/bloodsucker/get_team() + return clan + + + + + + +//Name shown on antag list +/datum/antagonist/bloodsucker/antag_listing_name() + return ..() + "([ReturnFullName(TRUE)])" + +//Whatever interesting things happened to the antag admins should know about +//Include additional information about antag in this part +/datum/antagonist/bloodsucker/antag_listing_status() + if (owner && owner.AmFinalDeath()) + return "Final Death" + return ..() + + + + + + + + +//Individual roundend report +/datum/antagonist/bloodsucker/roundend_report() + // Get the default Objectives + var/list/report = list() + + // Vamp Name + report += "
\[[ReturnFullName(TRUE)]\]" + + // Default Report + report += ..() + + // Now list their vassals + if (vassals.len > 0) + report += "Their Vassals were..." + for (var/datum/antagonist/vassal/V in vassals) + if (V.owner) + var/jobname = V.owner.assigned_role ? "the [V.owner.assigned_role]" : "" + report += "[V.owner.name] [jobname]" + + return report.Join("
") + +//Displayed at the start of roundend_category section, default to roundend_category header +/datum/antagonist/bloodsucker/roundend_report_header() + return "Lurking in the darkness, the Bloodsuckers were:
" + + + + + +// 2019 Breakdown of Bloodsuckers: + +// G A M E P L A Y +// +// Bloodsuckers should be inherrently powerful: they never stay dead, and they can hide in plain sight +// better than any other antagonist aboard the station. +// +// However, only elder Bloodsuckers are the powerful creatures of legend. Ranking up as a Bloodsucker +// should impart slight strength and health benefits, as well as powers that can grow over time. But +// their weaknesses should grow as well, and not just to fire. + + +// A B I L I T I E S +// +// * Bloodsuckers can FEIGN LIFE + DEATH. +// Feigning LIFE: +// - Warms up the body +// - Creates a heartbeat +// - Fake blood amount (550) +// Feign DEATH: +// - When lying down or sitting, you appear "dead and lifeless" + +// * Bloodsuckers REGENERATE +// - Brute damage heals rather rapidly. Burn damage heals slowly. +// - Healing is reduced when hungry or starved. +// - Burn does not heal when starved. A starved vampire remains "dead" until burns can heal. +// - Bodyparts and organs regrow in Torpor (except for the Heart and Brain). +// +// * Bloodsuckers are IMMORTAL +// - Brute damage cannot destroy them (and it caps very low, so they don't stack too much) +// - Burn damage can only kill them at very high amounts. +// - Removing the head kills the vamp forever. +// - Removing the heart kills the vamp until replaced. +// +// * Bloodsuckers are DEAD +// - They do not breathe. +// - Cold affects them less. +// - They are immune to disease (but can spread it) +// - Food is useless and cause sickness. +// - Nothing can heal the vamp other than his own blood. +// +// * Bloodsuckers are PREDATORS +// - They detect life/heartbeats nearby. +// - They know other predators instantly (Vamps, Werewolves, and alien types) regardless of disguise. +// +// +// +// * Bloodsuckers enter Torpor when DEAD or RESTING in coffin +// - Torpid vampires regenerate their health. Coffins negate cost and speed up the process. +// ** To rest in a coffin, either SLEEP or CLOSE THE LID while you're in it. You will be given a prompt to sleep until healed. Healing in a coffin costs NO blood! +// + + + +// O B J E C T I V E S +// +// +// +// +// 1) GROOM AN HEIR: Find a person with appropriate traits (hair, blood type, gender) to be turned as a Vampire. Before they rise, they must be properly trained. Raise them to great power after their change. +// +// 2) BIBLIOPHILE: Research objects of interest, study items looking for clues of ancient secrets, and hunt down the clues to a Vampiric artifact of horrible power. +// +// 3) CRYPT LORD: Build a terrifying sepulcher to your evil, with servants to lavish upon you in undeath. The trappings of a true crypt lord come at grave cost. +// +// 4) GOURMOND: Oh, to taste all the delicacies the station has to offer! DRINK ## BLOOD FROM VICTIMS WHO LIVE, EAT ## ORGANS FROM VICTIMS WHO LIVE + + +// Vassals +// +// - Loyal to (and In Love With) Master +// - Master can speak to, summon, or punish his Vassals, even while asleep or torpid. +// - Master may have as many Vassals as Rank +// - Vassals see their Master's speech emboldened! + + + + + + + + +// Dev Notes +// +// HEALING: Maybe Vamps metabolize specially? Like, they slowly drip their own blood into their system? +// - Give Vamps their own metabolization proc, perhaps? +// ** shadowpeople.dm has rules for healing. +// +// KILLING: It's almost impossible to track who someone has directly killed. But an Admin could be given +// an easy way to whip a Bloodsucker for cruel behavior, as a RP mechanic but not a punishment. +// ** +// +// HUNGER: Just keep adjusting mob's nutrition to Blood Hunger level. No need to cancel nutrition from eating. +// ** mob.dm /set_nutrition() +// ** snacks.dm / attack() <-- Stop food from doing anything? + +// ORGANS: Liver +// ** life.dm /handle_liver() +// +// CORPSE: Most of these effects likely go away when using "Masquerade" to appear alive. +// ** status_procs.dm /adjust_bodytemperature() +// ** traits.dm /TRAIT_NOBREATH /TRAIT_SLEEPIMMUNE /TRAIT_RESISTCOLD /TRAIT_RADIMMUNE /TRAIT_VIRUSIMMUNE +// * MASQUERADE ON/OFF: /TRAIT_FAKEDEATH (M) +// * /TRAIT_NIGHT_VISION +// * /TRAIT_DEATHCOMA <-- This basically makes you immobile. When using status_procs /fakedeath(), make sure to remove Coma unless we're in Torpor! +// * /TRAIT_NODEATH <--- ??? +// ** species /NOZOMBIE +// * ADD: TRAIT_COLDBLOODED <-- add to carbon/life.dm /natural_bodytemperature_stabilization() +// +// MASQUERADE Appear as human! +// ** examine.dm /examine() <-- Change "blood_volume < BLOOD_VOLUME_SAFE" to a new examine +// +// NOSFERATU ** human.add_trait(TRAIT_DISFIGURED, "insert_vamp_datum_here") <-- Makes you UNKNOWN unless your ID says otherwise. +// STEALTH ** human_helpers.dm /get_visible_name() ** shadowpeople.dm has rules for Light. +// +// FRENZY ** living.dm /update_mobility() (USED TO be update_canmove) +// +// PREDATOR See other Vamps! +// * examine.dm /examine() +// +// WEAKNESSES: -Poor mood in Chapel or near Chaplain. -Stamina damage from Bible + + + + //message_admins("DEBUG3: attempt_cast() [name] / [user_C.handcuffed] ") + + +// TODO: +// +// Death (fire, heart, brain, head) +// Disable Life: BLOOD +// Body Temp +// Spend blood over time (more if imitating life) (none if sleeping in coffin) +// Auto-Heal (brute to 0, fire to 99) (toxin/o2 always 0) +// +// Hud Icons +// UI Blood Counter +// Examine Name (+Masquerade, only "Dead and lifeless" if not standing?) +// +// +// Turn vamps +// Create vassals +// + + +// FIX LIST +// + + +///////////////////////////////////// + + // HUD! // + +/datum/antagonist/bloodsucker/proc/update_bloodsucker_icons_added(datum/mind/m) + var/datum/atom_hud/antag/vamphud = GLOB.huds[ANTAG_HUD_BLOODSUCKER] + vamphud.join_hud(owner.current) + set_antag_hud(owner.current, "bloodsucker") // "bloodsucker" + owner.current.hud_list[ANTAG_HUD].icon = image('icons/mob/hud.dmi', owner.current, "bloodsucker") //Check prepare_huds in mob.dm to see why. + +/datum/antagonist/bloodsucker/proc/update_bloodsucker_icons_removed(datum/mind/m) + var/datum/atom_hud/antag/vamphud = GLOB.huds[ANTAG_HUD_BLOODSUCKER] + vamphud.leave_hud(owner.current) + set_antag_hud(owner.current, null) + +/datum/atom_hud/antag/bloodsucker // from hud.dm in /datums/ Also see data_huds.dm + antag_hud.dm + +/datum/atom_hud/antag/bloodsucker/add_to_single_hud(mob/M, atom/A) + if (!check_valid_hud_user(M,A)) // FULP: This checks if the Mob is a Vassal, and if the Atom is his master OR on his team. + return + ..() + +/datum/atom_hud/antag/bloodsucker/proc/check_valid_hud_user(mob/M, atom/A) // Remember: A is being added to M's hud. Because M's hud is a /antag/vassal hud, this means M is the vassal here. + // Ghost Admins always see Bloodsuckers/Vassals + if (isobserver(M)) + return TRUE + // GOAL: Vassals see their Master and his other Vassals. + // GOAL: Vassals can BE seen by their Bloodsucker and his other Vassals. + // GOAL: Bloodsuckers can see each other. + if (!M || !A || !ismob(A) || !M.mind)// || !A.mind) + return FALSE + var/mob/A_mob = A + if (!A_mob.mind) + return FALSE + // Find Datums: Bloodsucker + var/datum/antagonist/bloodsucker/atom_B = A_mob.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + var/datum/antagonist/bloodsucker/mob_B = M.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + // Check 1) Are we both Bloodsuckers? + if (atom_B && mob_B) + return TRUE + // Find Datums: Vassal + var/datum/antagonist/vassal/atom_V = A_mob.mind.has_antag_datum(ANTAG_DATUM_VASSAL) + var/datum/antagonist/vassal/mob_V = M.mind.has_antag_datum(ANTAG_DATUM_VASSAL) + // Check 2) If they are a BLOODSUCKER, then are they my Master? + if (mob_V && atom_B == mob_V.master) + return TRUE // SUCCESS! + // Check 3) If I am a BLOODSUCKER, then are they my Vassal? + if (mob_B && atom_V && (atom_V in mob_B.vassals)) + return TRUE // SUCCESS! + // Check 4) If we are both VASSAL, then do we have the same master? + if (atom_V && mob_V && atom_V.master == mob_V.master) + return TRUE // SUCCESS! + return FALSE + + + + ///////////////////////////////////// + + + // BLOOD COUNTER & RANK MARKER ! // + +#define ui_sunlight_display "WEST:6,CENTER-0:0" // 6 pixels to the right, zero tiles & 5 pixels DOWN. +#define ui_blood_display "WEST:6,CENTER-1:0" // 1 tile down +#define ui_vamprank_display "WEST:6,CENTER-2:-5" // 2 tiles down + +/datum/hud + var/obj/screen/bloodsucker/blood_counter/blood_display + var/obj/screen/bloodsucker/rank_counter/vamprank_display + var/obj/screen/bloodsucker/sunlight_counter/sunlight_display + +/datum/antagonist/bloodsucker/proc/add_hud() + return + +/datum/antagonist/bloodsucker/proc/remove_hud() + // No Hud? Get out. + if (!owner.current.hud_used) + return + owner.current.hud_used.blood_display.invisibility = INVISIBILITY_ABSTRACT + owner.current.hud_used.vamprank_display.invisibility = INVISIBILITY_ABSTRACT + owner.current.hud_used.sunlight_display.invisibility = INVISIBILITY_ABSTRACT + +/datum/antagonist/bloodsucker/proc/update_hud(updateRank=FALSE) + // No Hud? Get out. + if (!owner.current.hud_used) + return + // Update Blood Counter + if (owner.current.hud_used.blood_display) + var/valuecolor = "#FF6666" + if (owner.current.blood_volume > BLOOD_VOLUME_SAFE) + valuecolor = "#FFDDDD" + else if (owner.current.blood_volume > BLOOD_VOLUME_BAD) + valuecolor = "#FFAAAA" + owner.current.hud_used.blood_display.update_counter(owner.current.blood_volume, valuecolor) + + // Update Rank Counter + if (owner.current.hud_used.vamprank_display) + var/valuecolor = vamplevel_unspent ? "#FFFF00" : "#FF0000" + owner.current.hud_used.vamprank_display.update_counter(vamplevel, valuecolor) + if (updateRank) // Only change icon on special request. + owner.current.hud_used.vamprank_display.icon_state = (vamplevel_unspent > 0) ? "rank_up" : "rank" + + +/obj/screen/bloodsucker + invisibility = INVISIBILITY_ABSTRACT + +/obj/screen/bloodsucker/proc/clear() + invisibility = INVISIBILITY_ABSTRACT + +/obj/screen/bloodsucker/proc/update_counter(value, valuecolor) + invisibility = 0 // Make Visible + +/obj/screen/bloodsucker/blood_counter // NOTE: Look up /obj/screen/devil/soul_counter in _onclick / hud / human.dm + icon = 'icons/mob/actions/bloodsucker.dmi'//'icons/mob/screen_gen.dmi' + name = "Blood Consumed" + icon_state = "blood_display"//"power_display" + screen_loc = ui_blood_display + +/obj/screen/bloodsucker/blood_counter/update_counter(value, valuecolor) + ..() + maptext = "
[round(value,1)]
" + +/obj/screen/bloodsucker/rank_counter + name = "Bloodsucker Rank" + icon = 'icons/mob/actions/bloodsucker.dmi' + icon_state = "rank" + screen_loc = ui_vamprank_display + +/obj/screen/bloodsucker/rank_counter/update_counter(value, valuecolor) + ..() + maptext = "
[round(value,1)]
" + +/obj/screen/bloodsucker/sunlight_counter + icon = 'icons/mob/actions/bloodsucker.dmi' + name = "Solar Flare Timer" + icon_state = "sunlight_night" + screen_loc = ui_sunlight_display + +/datum/antagonist/bloodsucker/proc/update_sunlight(value, amDay = FALSE) + // No Hud? Get out. + if (!owner.current.hud_used) + return + // Update Sun Time + if (owner.current.hud_used.sunlight_display) + var/valuecolor = "#BBBBFF" + if (amDay) + valuecolor = "#FF5555" + else if(value <= 25) + valuecolor = "#FFCCCC" + else if(value < 10) + valuecolor = "#FF5555" + var/value_string = (value >= 60) ? "[round(value / 60, 1)] m" : "[round(value,1)] s" + owner.current.hud_used.sunlight_display.update_counter( value_string, valuecolor ) + owner.current.hud_used.sunlight_display.icon_state = "sunlight_" + (amDay ? "day":"night") + + +/obj/screen/bloodsucker/sunlight_counter/update_counter(value, valuecolor) + ..() + maptext = "
[value]
" diff --git a/code/modules/antagonists/bloodsucker/datum_hunter.dm b/code/modules/antagonists/bloodsucker/datum_hunter.dm new file mode 100644 index 0000000000..7b07b68b36 --- /dev/null +++ b/code/modules/antagonists/bloodsucker/datum_hunter.dm @@ -0,0 +1,303 @@ +#define HUNTER_SCAN_MIN_DISTANCE 8 +#define HUNTER_SCAN_MAX_DISTANCE 35 +#define HUNTER_SCAN_PING_TIME 20 //5s update time. + + +/datum/antagonist/vamphunter + name = "Hunter" + roundend_category = "hunters" + antagpanel_category = "Monster Hunter" + job_rank = ROLE_MONSTERHUNTER + var/list/datum/action/powers = list()// Purchased powers + var/list/datum/objective/objectives_given = list() // For removal if needed. + var/datum/martial_art/my_kungfu // Hunters know a lil kung fu. + var/bad_dude = FALSE // Every first hunter spawned is a SHIT LORD. + + +/datum/antagonist/vamphunter/on_gain() + + SSticker.mode.vamphunters |= owner // Add if not already in here (and you might be, if you were picked at round start) + + // Hunter Pinpointer + //owner.current.apply_status_effect(/datum/status_effect/agent_pinpointer/hunter_edition) + + // Give Hunter Power + var/datum/action/P = new /datum/action/bloodsucker/trackvamp + P.Grant(owner.current) + + // Give Hunter Martial Arts + //if (rand(1,3) == 1) + // var/datum/martial_art/pick_type = pick (/datum/martial_art/cqc, /datum/martial_art/krav_maga, /datum/martial_art/cqc, /datum/martial_art/krav_maga, /datum/martial_art/wrestling) // /datum/martial_art/boxing <--- doesn't include grabbing, so don't use! + // my_kungfu = new pick_type //pick (/datum/martial_art/boxing, /datum/martial_art/cqc) // ick_type + // my_kungfu.teach(owner.current, 0) + + // Give Hunter Objective + var/datum/objective/bloodsucker/monsterhunter/monsterhunter_objective = new + monsterhunter_objective.owner = owner + monsterhunter_objective.generate_objective() + objectives += monsterhunter_objective + objectives_given += monsterhunter_objective + // Badguy Hunter? (Give him BADGUY objectives) + if (bad_dude) + // Stolen DIRECTLY from datum_traitor.dm + if(prob(15) && !(locate(/datum/objective/download) in objectives) && !(owner.assigned_role in list("Research Director", "Scientist", "Roboticist"))) + var/datum/objective/download/download_objective = new + download_objective.owner = owner + download_objective.gen_amount_goal() + objectives += download_objective + objectives_given += download_objective + else + var/datum/objective/steal/steal_objective = new + steal_objective.owner = owner + steal_objective.find_target() + objectives += steal_objective + objectives_given += steal_objective + + + . = ..() + +/datum/antagonist/vamphunter/on_removal() + + SSticker.mode.vamphunters -= owner // Add if not already in here (and you might be, if you were picked at round start) + + // Master Pinpointer + //owner.current.remove_status_effect(/datum/status_effect/agent_pinpointer/hunter_edition) + + // Take Hunter Power + if (owner.current) + for (var/datum/action/bloodsucker/P in owner.current.actions) + P.Remove(owner.current) + + // Take Hunter Martial Arts + //my_kungfu.remove(owner.current) + + // Remove Hunter Objectives + for(var/O in objectives_given) + objectives -= O + qdel(O) + objectives_given = list() + + . = ..() + +/datum/antagonist/vamphunter/greet() + var/vamp_hunter_greet = "You are a fearless Monster Hunter!" + vamp_hunter_greet += "You know there's one or more filthy creature onboard the station, though their identities elude you." + vamp_hunter_greet += "It's your job to root them out, destroy their nests, and save the crew." + vamp_hunter_greet += "Use WHATEVER MEANS NECESSARY to find these creatures...no matter who gets hurt or what you have to destroy to do it." + vamp_hunter_greet += "There are greater stakes at hand than the safety of the station!" + vamp_hunter_greet += "However, security may detain you if they discover your mission..." + antag_memory += "You remember your training:
" + antag_memory += " -Bloodsuckers are weak to fire, or a stake to the heart. Removing their head or heart will also destroy them permanently.
" + antag_memory += " -Wooden stakes can be made from planks, and hardened by a welding tool. Your recipes list has ways of making them even stronger.
" + antag_memory += " -Changelings return to life unless their body is destroyed. Not even decapitation can stop them for long.
" + antag_memory += " -Cultists are weak to the Chaplain's holy water.
" + antag_memory += " -Wizards are notoriously hard to outmatch. Rob or steal whatever weapons you need to destroy them, and shoot before asking questions.

" + if (my_kungfu != null) + vamp_hunter_greet += "Hunter Tip: Use your [my_kungfu.name] techniques to give you an advantage over the enemy.
" + antag_memory += "You remember your training: You are skilled in the [my_kungfu.name] style of combat.
" + to_chat(owner, vamp_hunter_greet) + +/datum/antagonist/vamphunter/farewell() + to_chat(owner, "Your hunt has ended: you are no longer a monster hunter!") + + +// TAKEN FROM: /datum/action/changeling/pheromone_receptors // pheromone_receptors.dm for a version of tracking that Changelings have! + +/* +/datum/status_effect/agent_pinpointer/hunter_edition + alert_type = /obj/screen/alert/status_effect/agent_pinpointer/hunter_edition + minimum_range = HUNTER_SCAN_MIN_DISTANCE + tick_interval = HUNTER_SCAN_PING_TIME + duration = 160 // Lasts 10s + range_fuzz_factor = 5//PINPOINTER_EXTRA_RANDOM_RANGE + +/obj/screen/alert/status_effect/agent_pinpointer/hunter_edition + name = "Monster Tracking" + desc = "You always know where the hellspawn are." + + +/datum/status_effect/agent_pinpointer/hunter_edition/on_creation(mob/living/new_owner, ...) + ..() + + // Pick target + var/turf/my_loc = get_turf(owner) + var/list/mob/living/carbon/vamps = list() + + for(var/datum/mind/M in SSticker.mode.bloodsuckers) + if (!M.current || M.current == owner || !get_turf(M.current) || !get_turf(new_owner)) + continue + var/datum/antagonist/bloodsucker/antag_datum = M.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + if(!istype(antag_datum)) + continue + var/their_loc = get_turf(M.current) + var/distance = get_dist_euclidian(my_loc, their_loc) + if (distance < HUNTER_SCAN_MAX_DISTANCE) + vamps[M.current] = (HUNTER_SCAN_MAX_DISTANCE ** 2) - (distance ** 2) + // Found one! + if(vamps.len) + scan_target = pickweight(vamps) //Point at a 'random' vamp, biasing heavily towards closer ones. + to_chat(owner, "You detect signs of monsters to the [dir2text(get_dir(my_loc,get_turf(scan_target)))]!") + // Will yield a "?" + else + to_chat(owner, "There are no monsters nearby.") + // Force Point-To Immediately + point_to_target() + +/datum/status_effect/agent_pinpointer/hunter_edition/scan_for_target() + // Lose target? Done. Otherwise, scan for target's current position. + if (!scan_target && owner) + owner.remove_status_effect(/datum/status_effect/agent_pinpointer/hunter_edition) + + // NOTE: Do NOT run ..(), or else we'll remove our target. + + +/datum/status_effect/agent_pinpointer/hunter_edition/Destroy() + if (scan_target) + to_chat(owner, "You've lost the trail.") + ..() +*/ + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + +/datum/action/bloodsucker/trackvamp/ + name = "Track Monster"//"Cellular Emporium" + desc = "Take a moment to look for clues of any nearby monsters.
These creatures are slippery, and often look like the crew." + button_icon = 'icons/mob/actions/bloodsucker.dmi' //This is the file for the BACKGROUND icon + background_icon_state = "vamp_power_off" //And this is the state for the background icon + icon_icon = 'icons/mob/actions/bloodsucker.dmi' //This is the file for the ACTION icon + button_icon_state = "power_hunter" //And this is the state for the action icon + + // Action-Related + amToggle = FALSE + cooldown = 200 // 10 ticks, 1 second. + bloodcost = 0 + + + +/datum/action/bloodsucker/trackvamp/ActivatePower() + + var/mob/living/user = owner + + to_chat(user, "You look around, scanning your environment and discerning signs of any filthy, wretched affronts to the natural order.") + + if (!do_mob(user,owner,80)) + return + + // Add Power + // REMOVED //user.apply_status_effect(/datum/status_effect/agent_pinpointer/hunter_edition) + // We don't track direction anymore! + + // Return text indicating direction + display_proximity() + + // NOTE: DON'T DEACTIVATE! + //DeactivatePower() + + + +/datum/action/bloodsucker/trackvamp/proc/display_proximity() + // Pick target + var/turf/my_loc = get_turf(owner) + //var/list/mob/living/carbon/vamps = list() + var/best_dist = 9999 + var/mob/living/best_vamp + + // Track ALL MONSTERS in Game Mode + var/list/datum/mind/monsters = list() + monsters += SSticker.mode.bloodsuckers + monsters += SSticker.mode.devils + monsters += SSticker.mode.cult + monsters += SSticker.mode.wizards + monsters += SSticker.mode.apprentices + monsters += SSticker.mode.servants_of_ratvar + //monsters += SSticker.mode.changelings Disabled anyways + // + for(var/datum/mind/M in monsters) + if (!M.current || M.current == owner)// || !get_turf(M.current) || !get_turf(owner)) + continue + for(var/a in M.antag_datums) + var/datum/antagonist/antag_datum = a // var/datum/antagonist/antag_datum = M.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + if(!istype(antag_datum) || antag_datum.AmFinalDeath()) + continue + var/their_loc = get_turf(M.current) + var/distance = get_dist_euclidian(my_loc, their_loc) + // Found One: Closer than previous/max distance + if (distance < best_dist && distance <= HUNTER_SCAN_MAX_DISTANCE) + best_dist = distance + best_vamp = M.current + break // Stop searching through my antag datums and go to the next guy + + // Found one! + if(best_vamp) + var/distString = best_dist <= HUNTER_SCAN_MAX_DISTANCE / 2 ? "somewhere closeby!" : "somewhere in the distance." + //to_chat(owner, "You detect signs of Bloodsuckers to the [dir2text(get_dir(my_loc,get_turf(targetVamp)))]!") + to_chat(owner, "You detect signs of monsters [distString]") + + // Will yield a "?" + else + to_chat(owner, "There are no monsters nearby.") + + + + + + + + + + + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// From martial.dm + +/* +/datum/martial_art/hunter + name = "Hunter-Fu" + id = "MARTIALART_HUNTER" //ID, used by mind/has_martialart + //streak = "" + //max_streak_length = 6 + //current_target + //datum/martial_art/base // The permanent style. This will be null unless the martial art is temporary + //deflection_chance = 0 //Chance to deflect projectiles + //reroute_deflection = FALSE //Delete the bullet, or actually deflect it in some direction? + //block_chance = 0 //Chance to block melee attacks using items while on throw mode. + //restraining = 0 //used in cqc's disarm_act to check if the disarmed is being restrained and so whether they should be put in a chokehold or not + //help_verb + //no_guns = FALSE + //allow_temp_override = TRUE //if this martial art can be overridden by temporary martial arts + +/datum/martial_art/hunter/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) + return FALSE + +/datum/martial_art/hunter/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) + return FALSE + +/datum/martial_art/hunter/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) + return FALSE + +/datum/martial_art/hunter/can_use(mob/living/carbon/human/H) + return TRUE + + +/datum/martial_art/hunter/add_to_streak(element,mob/living/carbon/human/D) + if(D != current_target) + current_target = D + streak = "" + restraining = 0 + streak = streak+element + if(length(streak) > max_streak_length) + streak = copytext(streak,2) + return + + +/datum/martial_art/hunter/basic_hit(mob/living/carbon/human/A,mob/living/carbon/human/D) + + var/damage = rand(A.dna.species.punchdamagelow, A.dna.species.punchdamagehigh) +*/ diff --git a/code/modules/antagonists/bloodsucker/datum_vassal.dm b/code/modules/antagonists/bloodsucker/datum_vassal.dm new file mode 100644 index 0000000000..db1e5cfd4f --- /dev/null +++ b/code/modules/antagonists/bloodsucker/datum_vassal.dm @@ -0,0 +1,151 @@ +#define VASSAL_SCAN_MIN_DISTANCE 5 +#define VASSAL_SCAN_MAX_DISTANCE 500 +#define VASSAL_SCAN_PING_TIME 20 //2s update time. + + +/datum/antagonist/bloodsucker/proc/attempt_turn_vassal(mob/living/carbon/C) + return SSticker.mode.make_vassal(C,owner) + +/datum/antagonist/bloodsucker/proc/FreeAllVassals() + for (var/datum/antagonist/vassal/V in vassals) + SSticker.mode.remove_vassal(V.owner) + + + +/datum/antagonist/vassal + name = "Vassal"//WARNING: DO NOT SELECT" // "Vassal" + roundend_category = "vassals" + antagpanel_category = "Bloodsucker" + job_rank = ROLE_BLOODSUCKER + var/datum/antagonist/bloodsucker/master // Who made me? + var/list/datum/action/powers = list()// Purchased powers + var/list/datum/objective/objectives_given = list() // For removal if needed. + +/datum/antagonist/vassal/can_be_owned(datum/mind/new_owner) + // If we weren't created by a bloodsucker, then we cannot be a vassal (assigned from antag panel) + if (!master) + return FALSE + return ..() + +/datum/antagonist/vassal/on_gain() + + SSticker.mode.vassals |= owner // Add if not already in here (and you might be, if you were picked at round start) + + // Mindslave Add + if (master) + var/datum/antagonist/bloodsucker/B = master.owner.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + if (B) + B.vassals |= src + owner.enslave_mind_to_creator(master.owner.current) + + // Master Pinpointer + owner.current.apply_status_effect(/datum/status_effect/agent_pinpointer/vassal_edition) + + // Powers + var/datum/action/bloodsucker/vassal/recuperate/new_Recuperate = new () + new_Recuperate.Grant(owner.current) + powers += new_Recuperate + + // Give Vassal Objective + var/datum/objective/bloodsucker/vassal/vassal_objective = new + vassal_objective.owner = owner + vassal_objective.generate_objective() + objectives += vassal_objective + objectives_given += vassal_objective + + // Add Antag HUD + update_vassal_icons_added(owner.current, "vassal") + + . = ..() + +/datum/antagonist/vassal/on_removal() + + SSticker.mode.vassals -= owner // Add if not already in here (and you might be, if you were picked at round start) + + // Mindslave Remove + if (master && master.owner) + master.vassals -= src + if (owner.enslaved_to == master.owner.current) + owner.enslaved_to = null + + // Master Pinpointer + owner.current.remove_status_effect(/datum/status_effect/agent_pinpointer/vassal_edition) + + // Powers + while(powers.len) + var/datum/action/power = pick(powers) + powers -= power + power.Remove(owner.current) + + // Remove Hunter Objectives + for(var/O in objectives_given) + objectives -= O + qdel(O) + objectives_given = list() + + + // Clear Antag HUD + update_vassal_icons_removed(owner.current) + + . = ..() + +/datum/antagonist/vassal/greet() + to_chat(owner, "You are now the mortal servant of [master.owner.current], a bloodsucking vampire!") + to_chat(owner, "The power of [master.owner.current.p_their()] immortal blood compells you to obey [master.owner.current.p_them()] in all things, even offering your own life to prolong theirs.
\ + You are not required to obey any other Bloodsucker, for only [master.owner.current] is your master. The laws of Nanotransen do not apply to you now; only your vampiric master's word must be obeyed.") + // Effects... + owner.current.playsound_local(null, 'sound/magic/mutate.ogg', 100, FALSE, pressure_affected = FALSE) + //owner.store_memory("You became the mortal servant of [master.owner.current], a bloodsucking vampire!") + antag_memory += "You became the mortal servant of [master.owner.current], a bloodsucking vampire!
" + + // And to your new Master... + to_chat(master.owner, "[owner.current] has become addicted to your immortal blood. [owner.current.p_they(TRUE)] [owner.current.p_are()] now your undying servant!") + master.owner.current.playsound_local(null, 'sound/magic/mutate.ogg', 100, FALSE, pressure_affected = FALSE) + +/datum/antagonist/vassal/farewell() + owner.current.visible_message("[owner.current]'s eyes dart feverishly from side to side, and then stop. [owner.current.p_they(TRUE)] seem[owner.current.p_s()] calm, \ + like [owner.current.p_they()] [owner.current.p_have()] regained some lost part of [owner.current.p_them()]self.",\ + "With a snap, you are no longer enslaved to [master.owner]! You breathe in heavily, having regained your free will.") + owner.current.playsound_local(null, 'sound/magic/mutate.ogg', 100, FALSE, pressure_affected = FALSE) + // And to your former Master... + //if (master && master.owner) + // to_chat(master.owner, "You feel the bond with your vassal [owner.current] has somehow been broken!") + + +/datum/status_effect/agent_pinpointer/vassal_edition + id = "agent_pinpointer" + alert_type = /obj/screen/alert/status_effect/agent_pinpointer/vassal_edition + minimum_range = VASSAL_SCAN_MIN_DISTANCE + tick_interval = VASSAL_SCAN_PING_TIME + duration = -1 // runs out fast + range_fuzz_factor = 0 + +/obj/screen/alert/status_effect/agent_pinpointer/vassal_edition + name = "Blood Bond" + desc = "You always know where your master is." + //icon = 'icons/obj/device.dmi' + //icon_state = "pinon" + +/datum/status_effect/agent_pinpointer/vassal_edition/on_creation(mob/living/new_owner, ...) + ..() + + var/datum/antagonist/vassal/antag_datum = new_owner.mind.has_antag_datum(ANTAG_DATUM_VASSAL) + scan_target = antag_datum?.master?.owner?.current + +/datum/status_effect/agent_pinpointer/vassal_edition/scan_for_target() + // DO NOTHING. We already have our target, and don't wanna do anything from agent_pinpointer + +/datum/antagonist/vassal/proc/update_vassal_icons_added(mob/living/vassal, icontype="vassal") + var/datum/atom_hud/antag/bloodsucker/hud = GLOB.huds[ANTAG_HUD_BLOODSUCKER] + hud.join_hud(vassal) + set_antag_hud(vassal, icontype) // Located in icons/mob/hud.dmi + owner.current.hud_list[ANTAG_HUD].icon = image('icons/mob/hud.dmi', owner.current, "bloodsucker") + +/datum/antagonist/vassal/proc/update_vassal_icons_removed(mob/living/vassal) + var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_BLOODSUCKER] + hud.leave_hud(vassal) + set_antag_hud(vassal, null) + +//Displayed at the start of roundend_category section, default to roundend_category header +/datum/antagonist/vassal/roundend_report_header() + return "Loyal to their bloodsucking masters, the Vassals were:

" diff --git a/code/modules/antagonists/bloodsucker/items/bloodsucker_items.dm b/code/modules/antagonists/bloodsucker/items/bloodsucker_items.dm new file mode 100644 index 0000000000..7215573092 --- /dev/null +++ b/code/modules/antagonists/bloodsucker/items/bloodsucker_items.dm @@ -0,0 +1,55 @@ + + + +// For blood packs, etc. that need new functions for when they're used. + + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// RECIPES: When crafting objects in craft.dm, we now record who made the item. +///atom/movable +// var/mob/crafter // Who made me? (via Craft skill) Used by Bloodsucker crypt furniture to know who gets to use the buildings. + + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + +// BLOOD BAGS! Add ability to drank em + + +/obj/item/reagent_containers/blood/attack(mob/M, mob/user, def_zone) + + if(user.a_intent == INTENT_HELP && reagents.total_volume > 0) + if (user != M) + user.visible_message("[user] forces [M] to drink from the [src].", \ + "You put the [src] up to [M]'s mouth.") + if (!do_mob(user, M, 50)) + return + else + if (!do_mob(user, M, 10)) + return + user.visible_message("[user] puts the [src] up to their mouth.", \ + "You take a sip from the [src].") + + // Safety: In case you spam clicked the blood bag on yourself, and it is now empty (below will divide by zero) + if (reagents.total_volume <= 0) + return + + // Taken from drinks.dm // + var/gulp_size = 5 + var/fraction = min(gulp_size / reagents.total_volume, 1) + //checkLiked(fraction, M) // Blood isn't food, sorry. + reagents.reaction(M, INGEST, fraction) + reagents.trans_to(M, gulp_size) + playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1) + + ..() + + diff --git a/code/modules/antagonists/bloodsucker/items/bloodsucker_organs.dm b/code/modules/antagonists/bloodsucker/items/bloodsucker_organs.dm new file mode 100644 index 0000000000..3ef6953678 --- /dev/null +++ b/code/modules/antagonists/bloodsucker/items/bloodsucker_organs.dm @@ -0,0 +1,90 @@ + + +/datum/antagonist/bloodsucker/proc/CheckVampOrgans() + // Do I have any parts that need replacing? + var/obj/item/organ/O + + // Heart + O = owner.current.getorganslot(ORGAN_SLOT_HEART) + if (!istype(O, /obj/item/organ/heart/vampheart)) + qdel(O) + var/obj/item/organ/heart/vampheart/H = new + H.Insert(owner.current) + H.Stop() // Now...stop beating! + + // Eyes + O = owner.current.getorganslot(ORGAN_SLOT_EYES) + if (!istype(O, /obj/item/organ/eyes/vampeyes)) + qdel(O) + var/obj/item/organ/eyes/vampeyes/E = new + E.Insert(owner.current) + + +/datum/antagonist/bloodsucker/proc/RemoveVampOrgans() + + // Heart + var/obj/item/organ/heart/H = new + H.Insert(owner.current) + // Eyes + var/obj/item/organ/eyes/E = new + E.Insert(owner.current) + + + +// HEART: OVERWRITE // + +/obj/item/organ/heart/proc/HeartStrengthMessage() + if (beating) + return "a healthy" + return "an unstable" + + +// HEART // + +/obj/item/organ/heart/vampheart + beating = 0 + var/fakingit = 0 + +/obj/item/organ/heart/vampheart/prepare_eat() + ..() + // Do cool stuff for eating vamp heart? + +/obj/item/organ/heart/vampheart/Restart() + beating = 0 // DONT run ..(). We don't want to start beating again. + return 0 + +/obj/item/organ/heart/vampheart/Stop() + fakingit = 0 + return ..() + +/obj/item/organ/heart/vampheart/proc/FakeStart() + fakingit = 1 // We're pretending to beat, to fool people. + +/obj/item/organ/heart/vampheart/HeartStrengthMessage() + if (fakingit) + return "a healthy" + return "no" // Bloodsuckers don't have a heartbeat at all when stopped (default is "an unstable") + + +// EYES // + +/obj/item/organ/eyes/vampeyes + lighting_alpha = 180 // LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE <--- This is too low a value at 128. We need to SEE what the darkness is so we can hide in it. + see_in_dark = 12 + flash_protect = -1 + //sight_flags = SEE_TURFS // Taken from augmented_eyesight.dm + + +/* +// LIVER // +/obj/item/organ/liver/vampliver + // Livers run on_life(), which calls reagents.metabolize() in holder.dm, which calls on_mob_life.dm in the cheam (medicine_reagents.dm) + // Holder also calls reagents.reaction_mob for the moment it happens + +/obj/item/organ/liver/vampliver/on_life() + var/mob/living/carbon/C = owner + + if(!istype(C)) + return + +*/ diff --git a/code/modules/antagonists/bloodsucker/items/bloodsucker_stake.dm b/code/modules/antagonists/bloodsucker/items/bloodsucker_stake.dm new file mode 100644 index 0000000000..a47cc0ce68 --- /dev/null +++ b/code/modules/antagonists/bloodsucker/items/bloodsucker_stake.dm @@ -0,0 +1,218 @@ + + +// organ_internal.dm -- /obj/item/organ + + + +// Do I have a stake in my heart? +/mob/living/AmStaked() + var/obj/item/bodypart/BP = get_bodypart("chest") + if (!BP) + return FALSE + for(var/obj/item/I in BP.embedded_objects) + if (istype(I,/obj/item/stake/)) + return TRUE + return FALSE +/mob/proc/AmStaked() + return FALSE + + +/mob/living/proc/StakeCanKillMe() + return IsSleeping() || stat >= UNCONSCIOUS || blood_volume <= 0 || HAS_TRAIT(src, TRAIT_DEATHCOMA) // NOTE: You can't go to sleep in a coffin with a stake in you. + + +///obj/item/weapon/melee/stake +/obj/item/stake/ + name = "wooden stake" + desc = "A simple wooden stake carved to a sharp point." + icon = 'icons/obj/items_and_weapons.dmi' + icon_state = "wood" // Inventory Icon + item_state = "wood" // In-hand Icon + lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' // File for in-hand icon + righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' + attack_verb = list("staked") + slot_flags = ITEM_SLOT_BELT + w_class = WEIGHT_CLASS_SMALL + + hitsound = 'sound/weapons/bladeslice.ogg' + force = 6 + throwforce = 10 + embedding = list("embed_chance" = 25, "embedded_fall_chance" = 0.5) // UPDATE 2/10/18 embedding_behavior.dm is how this is handled + //embed_chance = 25 // Look up "is_pointed" to see where we set stakes able to do this. + //embedded_fall_chance = 0.5 // Chance it will fall out. + obj_integrity = 30 + max_integrity = 30 + //embedded_fall_pain_multiplier + + var/staketime = 120 // Time it takes to embed the stake into someone's chest. + + + + +/obj/item/stake/basic + name = "wooden stake" + // This exists so Hardened/Silver Stake can't have a welding torch used on them. + + +/obj/item/stake/basic/attackby(obj/item/W, mob/user, params) + if (istype(W, /obj/item/weldingtool)) + //if (amWelded) + // to_chat(user, "This stake has already been treated with fire.") + // return + //amWelded = TRUE + // Weld it + var/obj/item/weldingtool/WT = W + if(WT.use(0))//remove_fuel(0,user)) + user.visible_message("[user.name] scorched the pointy end of [src] with the welding tool.", \ + "You scorch the pointy end of [src] with the welding tool.", \ + "You hear welding.") + // 8 Second Timer + if (!do_mob(user, src, 80)) + return + + // Create the Stake + qdel(src) + var/obj/item/stake/hardened/new_item = new(usr.loc) + user.put_in_hands(new_item) + + else + return ..() + + + +/obj/item/stake/afterattack(atom/target, mob/user, proximity) + //to_chat(world, "DEBUG: Staking ") + // Invalid Target, or not targetting chest with HARM intent? + if (!iscarbon(target) || check_zone(user.zone_selected) != "chest" || user.a_intent != INTENT_HARM) + return + var/mob/living/carbon/C = target + // Needs to be Down/Slipped in some way to Stake. + if (!C.can_be_staked()) + return + // Oops! Can't. + if(HAS_TRAIT(C, TRAIT_PIERCEIMMUNE)) + to_chat(user, "[target]'s chest resists the stake. It won't go in.") + return + // Make Attempt... + to_chat(user, "You put all your weight into embedding the stake into [target]'s chest...") + playsound(user, 'sound/magic/Demon_consume.ogg', 50, 1) + if (!do_mob(user, C, staketime, 0, 1, extra_checks=CALLBACK(C, /mob/living/carbon/proc/can_be_staked))) // user / target / time / uninterruptable / show progress bar / extra checks + return + + // Drop & Embed Stake + user.visible_message("[user.name] drives the [src] into [target]'s chest!", \ + "You drive the [src] into [target]'s chest!") + playsound(get_turf(target), 'sound/effects/splat.ogg', 40, 1) + + user.dropItemToGround(src, TRUE) //user.drop_item() // "drop item" doesn't seem to exist anymore. New proc is user.dropItemToGround() but it doesn't seem like it's needed now? + + var/obj/item/bodypart/B = C.get_bodypart("chest") // This was all taken from hitby() in human_defense.dm + B.embedded_objects |= src + add_mob_blood(target)//Place blood on the stake + loc = C // Put INSIDE the character + B.receive_damage(w_class * embedding.embedded_impact_pain_multiplier) + + if (C.mind) + var/datum/antagonist/bloodsucker/bloodsucker = C.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + if (bloodsucker) + // If DEAD or TORPID...kill vamp! + if (C.StakeCanKillMe()) // NOTE: This is the ONLY time a staked Torpid vamp dies. + bloodsucker.FinalDeath() + return + else + to_chat(target, "You have been staked! Your powers are useless, your death forever, while it remains in place.") + to_chat(user, "You missed [C.p_their(TRUE)]'s heart! It would be easier if [C.p_they(TRUE)] weren't struggling so much.") + + + +// Can this target be staked? If someone stands up before this is complete, it fails. Best used on someone stationary. +/mob/living/carbon/proc/can_be_staked() + //return resting || IsKnockdown() || IsUnconscious() || (stat && (stat != SOFT_CRIT || pulledby)) || (has_trait(TRAIT_FAKEDEATH)) || resting || IsStun() || IsFrozen() || (pulledby && pulledby.grab_state >= GRAB_NECK) + return !(src.canmove) + // ABOVE: Taken from update_mobility() in living.dm + + + + + +/obj/item/stack/sheet/mineral/wood/attackby(obj/item/W, mob/user, params) // NOTE: sheet_types.dm is where the WOOD stack lives. Maybe move this over there. + // Taken from /obj/item/stack/rods/attackby in [rods.dm] + if (W.get_sharpness()) + user.visible_message("[user] begins whittling [src] into a pointy object.", \ + "You begin whittling [src] into a sharp point at one end.", \ + "You hear wood carving.") + // 8 Second Timer + if (!do_mob(user, src, 80)) + return + // Make Stake + var/obj/item/stake/basic/new_item = new(usr.loc) + user.visible_message("[user] finishes carving a stake out of [src].", \ + "You finish carving a stake out of [src].") + // Prepare to Put in Hands (if holding wood) + var/obj/item/stack/sheet/mineral/wood/thisStack = src + var/replace = (user.get_inactive_held_item()==thisStack) + // Use Wood + thisStack.use(1) + // If stack depleted, put item in that hand (if it had one) + if (!thisStack && replace) + user.put_in_hands(new_item) + + +/obj/item/stake/hardened + // Created by welding and acid-treating a simple stake. + name = "hardened stake" + desc = "A hardened wooden stake carved to a sharp point and scorched at the end." + icon_state = "hardened" // Inventory Icon + force = 8 + throwforce = 12 + armour_penetration = 10 + embedding = list("embed_chance" = 50, "embedded_fall_chance" = 0) // UPDATE 2/10/18 embedding_behavior.dm is how this is handled + obj_integrity = 120 + max_integrity = 120 + + staketime = 80 + +/obj/item/stake/hardened/silver + name = "silver stake" + desc = "Polished and sharp at the end. For when some mofo is always trying to iceskate uphill." + icon_state = "silver" // Inventory Icon + item_state = "silver" // In-hand Icon + siemens_coefficient = 1 //flags = CONDUCT // var/siemens_coefficient = 1 // for electrical admittance/conductance (electrocution checks and shit) + force = 9 + armour_penetration = 25 + embedding = list("embed_chance" = 65) // UPDATE 2/10/18 embedding_behavior.dm is how this is handled + obj_integrity = 300 + max_integrity = 300 + + staketime = 60 + +// Convert back to Silver +/obj/item/stake/hardened/silver/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weldingtool)) + var/obj/item/weldingtool/WT = I + if(WT.use(0))//remove_fuel(0, user)) + var/obj/item/stack/sheet/mineral/silver/newsheet = new (user.loc) + for(var/obj/item/stack/sheet/mineral/silver/S in user.loc) + if(S == newsheet) + continue + if(S.amount >= S.max_amount) + continue + S.attackby(newsheet, user) + to_chat(user, "You melt down the stake and add it to the stack. It now contains [newsheet.amount] sheet\s.") + qdel(src) + else + return ..() + + +// Look up recipes.dm OR pneumaticCannon.dm +/datum/crafting_recipe/silver_stake + name = "Silver Stake" + result = /obj/item/stake/hardened/silver + tools = list(/obj/item/weldingtool) + reqs = list(/obj/item/stack/sheet/mineral/silver = 1, + /obj/item/stake/hardened = 1) + ///obj/item/stack/packageWrap = 8, + ///obj/item/pipe = 2) + time = 80 + category = CAT_WEAPONRY + subcategory = CAT_WEAPON diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm new file mode 100644 index 0000000000..8ec6c72daf --- /dev/null +++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm @@ -0,0 +1,254 @@ + + +// TRAIT_DEATHCOMA - Activate this when you're in your coffin to simulate sleep/death. + + +// Coffins... +// -heal all wounds, and quickly. +// -restore limbs & organs +// + +// Without Coffins... +// - +// -limbs stay lost + + + +// To put to sleep: use owner.current.fakedeath("bloodsucker") but change name to "bloodsucker_coffin" so you continue to stay fakedeath despite healing in the main thread! + + +/datum/antagonist/bloodsucker/proc/ClaimCoffin(obj/structure/closet/crate/claimed) // NOTE: This can be any "closet" that you are resting AND inside of. + // ALREADY CLAIMED + if (claimed.resident) + if (claimed.resident == owner.current) + to_chat(owner, "This is your [src].") + else + to_chat(owner, "This [src] has already been claimed by another.") + return FALSE + + // Bloodsucker Learns new Recipes! + owner.teach_crafting_recipe(/datum/crafting_recipe/bloodsucker/vassalrack) + owner.teach_crafting_recipe(/datum/crafting_recipe/bloodsucker/candelabrum) + + // This is my Lair + coffin = claimed + lair = get_area(claimed) + // DONE + to_chat(owner, "You have claimed the [claimed] as your place of immortal rest! Your lair is now [lair].") + to_chat(owner, "You have learned new construction recipes to improve your lair.") + to_chat(owner, "Bloodsucker Tip: Find new lair recipes in the Structures tab of the Crafting Menu at the bottom of the screen, including the Persuasion Rack for converting crew into Vassals.

") + + RunLair() // Start + return TRUE + + + +// crate.dm +/obj/structure/closet/crate + var/mob/living/resident // This lets bloodsuckers claim any "closet" as a Coffin, so long as they could get into it and close it. This locks it in place, too. + +/obj/structure/closet/crate/coffin + var/pryLidTimer = 250 + can_weld_shut = FALSE + breakout_time = 200 + + +/obj/structure/closet/crate/coffin/blackcoffin + name = "black coffin" + desc = "For those departed who are not so dear." + icon_state = "coffin" + icon = 'icons/obj/vamp_obj.dmi' + can_weld_shut = FALSE + resistance_flags = 0 // Start off with no bonuses. + open_sound = 'sound/bloodsucker/coffin_open.ogg' + close_sound = 'sound/bloodsucker/coffin_close.ogg' + breakout_time = 600 + pryLidTimer = 400 + resistance_flags = NONE + +/obj/structure/closet/crate/coffin/meatcoffin + name = "meat coffin" + desc = "When you're ready to meat your maker, the steaks can never be too high." + icon_state = "meatcoffin" + icon = 'icons/obj/vamp_obj.dmi' + can_weld_shut = FALSE + resistance_flags = 0 // Start off with no bonuses. + open_sound = 'sound/effects/footstep/slime1.ogg' + close_sound = 'sound/effects/footstep/slime1.ogg' + breakout_time = 200 + pryLidTimer = 200 + resistance_flags = NONE + material_drop = /obj/item/reagent_containers/food/snacks/meat/slab + material_drop_amount = 3 + +/obj/structure/closet/crate/coffin/metalcoffin + name = "metal coffin" + desc = "A big metal sardine can inside of another big metal sardine can, in space." + icon_state = "metalcoffin" + icon = 'icons/obj/vamp_obj.dmi' + can_weld_shut = FALSE + resistance_flags = FIRE_PROOF | LAVA_PROOF + open_sound = 'sound/effects/pressureplate.ogg' + close_sound = 'sound/effects/pressureplate.ogg' + breakout_time = 300 + pryLidTimer = 200 + resistance_flags = NONE + material_drop = /obj/item/stack/sheet/metal + material_drop_amount = 5 + +////////////////////////////////////////////// + +/obj/structure/closet/crate/proc/ClaimCoffin(mob/living/claimant) // NOTE: This can be any "closet" that you are resting AND inside of. + // Bloodsucker Claim + var/datum/antagonist/bloodsucker/bloodsuckerdatum = claimant.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + if (bloodsuckerdatum) + // Vamp Successfuly Claims Me? + if (bloodsuckerdatum.ClaimCoffin(src)) + resident = claimant + anchored = 1 // No moving this + + +/obj/structure/closet/crate/coffin/Destroy() + UnclaimCoffin() + return ..() + +/obj/structure/closet/crate/proc/UnclaimCoffin() + if (resident) + // Vamp Un-Claim + if (resident.mind) + var/datum/antagonist/bloodsucker/bloodsuckerdatum = resident.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + if (bloodsuckerdatum && bloodsuckerdatum.coffin == src) + bloodsuckerdatum.coffin = null + bloodsuckerdatum.lair = null + to_chat(resident, "You sense that the link with your coffin, your sacred place of rest, has been brokem! You will need to seek another.") + resident = null // Remove resident. Because this object isnt removed from the game immediately (GC?) we need to give them a way to see they don't have a home anymore. + +/obj/structure/closet/crate/coffin/can_open(mob/living/user) + // You cannot lock in/out a coffin's owner. SORRY. + if (locked) + if(user == resident) + if (welded) + welded = FALSE + update_icon() + //to_chat(user, "You flip a secret latch and unlock [src].") // Don't bother. We know it's unlocked. + locked = FALSE + return 1 + else + playsound(get_turf(src), 'sound/machines/door_locked.ogg', 20, 1) + to_chat(user, "[src] is locked tight from the inside.") + return ..() + +/obj/structure/closet/crate/coffin/close(mob/living/user) + if (!..()) + return FALSE + // Only the User can put themself into Torpor (if you're already in it, you'll start to heal) + if ((user in src)) + // Bloodsucker Only + var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + if (bloodsuckerdatum) + LockMe(user) + // Claim? + if (!bloodsuckerdatum.coffin && !resident) + switch(alert(user,"Do you wish to claim this as your coffin? [get_area(src)] will be your lair.","Claim Lair","Yes", "No")) + if("Yes") + ClaimCoffin(user) + // Stake? No Heal! + if (user.AmStaked()) + to_chat(bloodsuckerdatum.owner.current, "You are staked! Remove the offending weapon from your heart before sleeping.") + return + // Heal + if (bloodsuckerdatum.HandleHealing(0)) // Healing Mult 0 <--- We only want to check if healing is valid! + to_chat(bloodsuckerdatum.owner.current, "You enter the horrible slumber of deathless Torpor. You will heal until you are renewed.") + bloodsuckerdatum.Torpor_Begin() + // Level Up? + bloodsuckerdatum.SpendRank() // Auto-Fails if not appropriate + + return TRUE + +/obj/structure/closet/crate/coffin/attackby(obj/item/W, mob/user, params) + // You cannot weld or deconstruct an owned coffin. STILL NOT SORRY. + if (resident != null && user != resident) // Owner can destroy their own coffin. + if(opened) + if(istype(W, cutting_tool)) + to_chat(user, "This is a much more complex mechanical structure than you thought. You don't know where to begin cutting [src].") + return + else if (anchored && istype(W, /obj/item/wrench)) // Can't unanchor unless owner. + to_chat(user, "The coffin won't come unanchored from the floor.") + return + + if(locked && istype(W, /obj/item/crowbar)) + var/pry_time = pryLidTimer * W.toolspeed // Pry speed must be affected by the speed of the tool. + user.visible_message("[user] tries to pry the lid off of [src] with [W].", \ + "You begin prying the lid off of [src] with [W]. This should take about [DisplayTimeText(pry_time)].") + if (!do_mob(user,src,pry_time)) + return + bust_open() + user.visible_message("[user] snaps the door of [src] wide open.", \ + "The door of [src] snaps open.") + return + ..() + + + +/obj/structure/closet/crate/coffin/AltClick(mob/user) + // Distance Check (Inside Of) + if (user in src) // user.Adjacent(src) + LockMe(user, !locked) + +/obj/structure/closet/crate/proc/LockMe(mob/user, inLocked = TRUE) + // Lock + if (user == resident) + if (!broken) + locked = inLocked + to_chat(user, "You flip a secret latch and [locked?"":"un"]lock yourself inside [src].") + else + to_chat(resident, "The secret latch to lock [src] from the inside is broken. You set it back into place...") + if (do_mob(resident, src, 50))//sleep(10) + if (broken) // Spam Safety + to_chat(resident, "You fix the mechanism and lock it.") + broken = FALSE + locked = TRUE + + + + + + + + + +// Look up recipes.dm OR pneumaticCannon.dm +/datum/crafting_recipe/bloodsucker/blackcoffin + name = "Black Coffin" + result = /obj/structure/closet/crate/coffin/blackcoffin + tools = list(/obj/item/weldingtool, + /obj/item/screwdriver) + reqs = list(/obj/item/stack/sheet/cloth = 1, + /obj/item/stack/sheet/mineral/wood = 5, + /obj/item/stack/sheet/metal = 1) + ///obj/item/stack/packageWrap = 8, + ///obj/item/pipe = 2) + time = 150 + category = CAT_STRUCTURE + always_availible = TRUE + +/datum/crafting_recipe/bloodsucker/meatcoffin + name = "Meat Coffin" + result =/obj/structure/closet/crate/coffin/meatcoffin + tools = list(/obj/item/kitchen/knife, + /obj/item/kitchen/rollingpin) + reqs = list(/obj/item/reagent_containers/food/snacks/meat/slab = 5, + /obj/item/restraints/handcuffs/cable = 1) + time = 150 + category = CAT_STRUCTURE + always_availible = TRUE + +/datum/crafting_recipe/bloodsucker/metalcoffin + name = "Metal Coffin" + result =/obj/structure/closet/crate/coffin/metalcoffin + tools = list(/obj/item/weldingtool, + /obj/item/screwdriver) + reqs = list(/obj/item/stack/sheet/metal = 5) + time = 100 + category = CAT_STRUCTURE + always_availible = TRUE diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm new file mode 100644 index 0000000000..08d60caa94 --- /dev/null +++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm @@ -0,0 +1,569 @@ + + + +// IDEAS -- +// An object that disguises your coffin while you're in it! +// +// An object that lets your lair itself protect you from sunlight, like a coffin would (no healing tho) + + + +// Hide a random object somewhere on the station: +// var/turf/targetturf = get_random_station_turf() +// var/turf/targetturf = get_safe_random_station_turf() + + + + +// CRYPT OBJECTS +// +// +// PODIUM Stores your Relics +// +// ALTAR Transmute items into sacred items. +// +// PORTRAIT Gaze into your past to: restore mood boost? +// +// BOOKSHELF Discover secrets about crew and locations. Learn languages. Learn marial arts. +// +// BRAZER Burn rare ingredients to gleen insights. +// +// RUG Ornate, and creaks when stepped upon by any humanoid other than yourself and your vassals. +// +// X COFFIN (Handled elsewhere) +// +// X CANDELABRA (Handled elsewhere) +// +// THRONE Your mental powers work at any range on anyone inside your crypt. +// +// MIRROR Find any person +// +// BUST/STATUE Create terror, but looks just like you (maybe just in Examine?) + + +// RELICS +// +// RITUAL DAGGER +// +// SKULL +// +// VAMPIRIC SCROLL +// +// SAINTS BONES +// +// GRIMOIRE + + +// RARE INGREDIENTS +// Ore +// Books (Manuals) + + +// NOTE: Look up AI and Sentient Disease to see how the game handles the selector logo that only one player is allowed to see. We could add hud for vamps to that? +// ALTERNATIVELY, use the Vamp Huds on relics to mark them, but only show to relevant vamps? + + +/obj/structure/bloodsucker + var/mob/living/owner + +/* +/obj/structure/bloodsucker/bloodthrone + name = "wicked throne" + desc = "Twisted metal shards jut from the arm rests. Very uncomfortable looking. It would take a sadistic sort to sit on this jagged piece of furniture." + +/obj/structure/bloodsucker/bloodaltar + name = "bloody altar" + desc = "It is marble, lined with basalt, and radiates an unnerving chill that puts your skin on edge." + +/obj/structure/bloodsucker/bloodstatue + name = "bloody countenance" + desc = "It looks upsettingly familiar..." + +/obj/structure/bloodsucker/bloodportrait + name = "oil portrait" + desc = "A disturbingly familiar face stares back at you. On second thought, the reds don't seem to be painted in oil..." + +/obj/structure/bloodsucker/bloodbrazer + name = "lit brazer" + desc = "It burns slowly, but doesn't radiate any heat." + +/obj/structure/bloodsucker/bloodmirror + name = "faded mirror" + desc = "You get the sense that the foggy reflection looking back at you has an alien intelligence to it." +*/ + + +/obj/structure/bloodsucker/vassalrack + name = "persuasion rack" + desc = "If this wasn't meant for torture, then someone has some fairly horrifying hobbies." + icon = 'icons/obj/vamp_obj.dmi' + icon_state = "vassalrack" + buckle_lying = FALSE + anchored = FALSE + density = TRUE // Start dense. Once fixed in place, go non-dense. + can_buckle = TRUE + var/useLock = FALSE // So we can't just keep dragging ppl on here. + var/mob/buckled + var/convert_progress = 2 // Resets on each new character to be added to the chair. Some effects should lower it... + var/disloyalty_confirm = FALSE // Command & Antags need to CONFIRM they are willing to lose their role (and will only do it if the Vassal'ing succeeds) + var/disloyalty_offered = FALSE // Has the popup been issued? Don't spam them. + var/convert_cost = 10 + +//obj/structure/kitchenspike/vassalrack/crowbar_act() +// // Do Nothing (Cancel crowbar deconstruct) +// return FALSE + +/obj/structure/bloodsucker/vassalrack/deconstruct(disassembled = TRUE) + new /obj/item/stack/sheet/metal(src.loc, 4) + new /obj/item/stack/rods(loc, 4) + qdel(src) + +/* + /obj/structure/closet/CtrlShiftClick(mob/living/user) + if(!user.has_trait(TRAIT_SKITTISH)) + return ..() + if(!user.canUseTopic(src) || !isturf(user.loc)) + return + dive_into(user) +*/ + + + +// adding a STRAP on top of an icon: look at update_icon in closets.dm, and the use of overlays.dm cut_overlay() and add_overlay() + + + + +/obj/structure/bloodsucker/vassalrack/MouseDrop_T(atom/movable/O, mob/user) + if (!O.Adjacent(src) || O == user || !isliving(O) || !isliving(user) || useLock || has_buckled_mobs() || user.incapacitated()) + return + if (!anchored && user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) + to_chat(user, "Until this rack is secured in place, it cannot serve its purpose.") + return + + // PULL TARGET: Remember if I was pullin this guy, so we can restore this + var/waspulling = (O == owner.pulling) + var/wasgrabstate = owner.grab_state + // * MOVE! * + O.forceMove(drop_location()) + // PULL TARGET: Restore? + if (waspulling) + owner.start_pulling(O, wasgrabstate, TRUE) + // NOTE: in bs_lunge.dm, we use [target.grabbedby(owner)], which simulates doing a grab action. We don't want that though...we're cutting directly back to where we were in a grab. + + + // Do Action! + useLock = TRUE + if(do_mob(user, O, 50)) + attach_victim(O,user) + useLock = FALSE + +/obj/structure/bloodsucker/vassalrack/AltClick(mob/user) + if (!has_buckled_mobs() || !isliving(user) || useLock) + return + // Attempt Release (Owner vs Non Owner) + var/mob/living/carbon/C = pick(buckled_mobs) + if (C) + if (user == owner) + unbuckle_mob(C) + else + user_unbuckle_mob(C,user) + +/obj/structure/bloodsucker/vassalrack/proc/attach_victim(mob/living/M, mob/living/user) + // Standard Buckle Check + if (!buckle_mob(M)) // force=TRUE)) + return + // Attempt Buckle + user.visible_message("[user] straps [M] into the rack, immobilizing them.", \ + "You secure [M] tightly in place. They won't escape you now.") + + playsound(src.loc, 'sound/effects/pop_expl.ogg', 25, 1) + //M.forceMove(drop_location()) <--- CANT DO! This cancels the buckle_mob() we JUST did (even if we foced the move) + M.setDir(2) + density = TRUE + var/matrix/m180 = matrix(M.transform) + m180.Turn(180)//90)//180 + animate(M, transform = m180, time = 2) + M.pixel_y = -2 //M.get_standard_pixel_y_offset(120)//180) + + update_icon() + + // Torture Stuff + convert_progress = 2 // Goes down unless you start over. + disloyalty_confirm = FALSE // New guy gets the chance to say NO if he's special. + disloyalty_offered = FALSE // Prevents spamming torture window. + +/obj/structure/bloodsucker/vassalrack/user_unbuckle_mob(mob/living/M, mob/user) + // Attempt Unbuckle + if (!user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) + if (M == user) + M.visible_message("[user] tries to release themself from the rack!",\ + "You attempt to release yourself from the rack!") // For sound if not seen --> "You hear a squishy wet noise.") + else + M.visible_message("[user] tries to pull [M] rack!",\ + "[user] attempts to release you from the rack!") // For sound if not seen --> "You hear a squishy wet noise.") + if(!do_mob(user, M, 100)) + return + // Did the time. Now try to do it. + ..() + unbuckle_mob(M) + +/obj/structure/bloodsucker/vassalrack/unbuckle_mob(mob/living/buckled_mob)//, force=FALSE) + if (!..()) + return + var/matrix/m180 = matrix(buckled_mob.transform) + m180.Turn(180)//-90)//180 + animate(buckled_mob, transform = m180, time = 2) + buckled_mob.pixel_y = buckled_mob.get_standard_pixel_y_offset(180) + src.visible_message(text("[buckled_mob][buckled_mob.stat==DEAD?"'s corpse":""] slides off of the rack.")) + density = FALSE + buckled_mob.AdjustKnockdown(30) + + update_icon() + + useLock = FALSE // Failsafe + +/obj/structure/bloodsucker/vassalrack/attackby(obj/item/W, mob/user, params) + if (has_buckled_mobs()) // Attack w/weapon vs guy standing there? Don't do an attack. + attack_hand(user) + return FALSE + return ..() + +/obj/structure/bloodsucker/vassalrack/attack_hand(mob/user) + //. = ..() // Taken from sacrificial altar in divine.dm + //if(.) + // return + + // Go away. Torturing. + if (useLock) + return + + var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + + // CHECK ONE: Am I claiming this? Is it in the right place? + if (istype(bloodsuckerdatum) && !owner) + if (!bloodsuckerdatum.lair) + to_chat(user, "You don't have a lair. Claim a coffin to make that location your lair.") + if (bloodsuckerdatum.lair != get_area(src)) + to_chat(user, "You may only activate this structure in your lair: [bloodsuckerdatum.lair].") + return + switch(alert(user,"Do you wish to afix this structure here?","Secure [src]","Yes", "No")) + if("Yes") + owner = user + density = FALSE + anchored = TRUE + return + + // No One Home + if (!has_buckled_mobs()) + return + + // CHECK TWO: Am I a non-bloodsucker? + var/mob/living/carbon/C = pick(buckled_mobs) + if (!istype(bloodsuckerdatum)) + // Try to release this guy + user_unbuckle_mob(C, user) + return + + // Bloodsucker Owner! Let the boy go. + if (C.mind) + var/datum/antagonist/vassal/vassaldatum = C.mind.has_antag_datum(ANTAG_DATUM_VASSAL) + if (istype(vassaldatum) && vassaldatum.master == bloodsuckerdatum || C.stat >= DEAD) + unbuckle_mob(C) + useLock = FALSE // Failsafe + return + + // Just torture the boy + torture_victim(user, C) + + +/obj/structure/bloodsucker/vassalrack/proc/torture_victim(mob/living/user, mob/living/target) + + // Check Bloodmob/living/M, force = FALSE, check_loc = TRUE + if (user.blood_volume < convert_cost + 5) + to_chat(user, "You don't have enough blood to initiate the Dark Communion with [target].") + return + + // Prep... + useLock = TRUE + + + // Step One: Tick Down Conversion from 3 to 0 + // Step Two: Break mindshielding/antag (on approve) + // Step Three: Blood Ritual + + // Conversion Process + if (convert_progress > 0) + to_chat(user, "You prepare to initiate [target] into your service.") + if (!do_torture(user,target)) + to_chat(user, "The ritual has been interrupted!") + else + convert_progress -- // Ouch. Stop. Don't. + // All done! + if (convert_progress <= 0) + // FAIL: Can't be Vassal + if (!SSticker.mode.can_make_vassal(target, user, display_warning=FALSE)) // If I'm an unconvertable Antag ONLY + to_chat(user, "[target] doesn't respond to your persuasion. It doesn't appear they can be converted to follow you. \[ALT+click to release\]") + convert_progress ++ // Pop it back up some. Avoids wasting Blood on a lost cause. + // SUCCESS: All done! + else + if (RequireDisloyalty(target)) + to_chat(user, "[target] has external loyalties! [target.p_they(TRUE)] will require more persuasion to break [target.p_them()] to your will!") + else + to_chat(user, "[target] looks ready for the Dark Communion.") + // Still Need More Persuasion... + else + to_chat(user, "[target] could use [convert_progress == 1?"a little":"some"] more persuasion.") + + useLock = FALSE + return + + // Check: Mindshield & Antag + if (!disloyalty_confirm && RequireDisloyalty(target)) + if (!do_disloyalty(user,target)) + to_chat(user, "The ritual has been interrupted!") + else if (!disloyalty_confirm) + to_chat(user, "[target] refuses to give into your persuasion. Perhaps a little more?") + else + to_chat(user, "[target] looks ready for the Dark Communion.") + useLock = FALSE + return + + // Check: Blood + if (user.blood_volume < convert_cost) + to_chat(user, "You don't have enough blood to initiate the Dark Communion with [target].") + useLock = FALSE + return + var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + bloodsuckerdatum.AddBloodVolume(-convert_cost) + target.add_mob_blood(user) + user.visible_message("[user] marks a bloody smear on [target]'s forehead and puts a wrist up to [target.p_their()] mouth!", \ + "You paint a bloody marking across [target]'s forehead, place your wrist to [target.p_their()] mouth, and subject [target.p_them()] to the Dark Communion.") + if(!do_mob(user, src, 50)) + to_chat(user, "The ritual has been interrupted!") + useLock = FALSE + return + + // Convert to Vassal! + if (bloodsuckerdatum && bloodsuckerdatum.attempt_turn_vassal(target)) + remove_loyalties(target) // In case of Mindshield, or appropriate Antag (Traitor, Internal, etc) + + //if (!target.buckled) + // to_chat(user, "The ritual has been interrupted!") + // useLock = FALSE + // return + user.playsound_local(null, 'sound/effects/explosion_distant.ogg', 40, 1) // Play THIS sound for user only. The "null" is where turf would go if a location was needed. Null puts it right in their head. + target.playsound_local(null, 'sound/effects/explosion_distant.ogg', 40, 1) // Play THIS sound for user only. The "null" is where turf would go if a location was needed. Null puts it right in their head. + target.playsound_local(null, 'sound/effects/singlebeat.ogg', 40, 1) // Play THIS sound for user only. The "null" is where turf would go if a location was needed. Null puts it right in their head. + target.Jitter(25) + target.emote("laugh") + //remove_victim(target) // Remove on CLICK ONLY! + + useLock = FALSE + + +/obj/structure/bloodsucker/vassalrack/proc/do_torture(mob/living/user, mob/living/target, mult=1) + + var/torture_time = 15 // Fifteen seconds if you aren't using anything. Shorter with weapons and such. + var/torture_dmg_brute = 2 + var/torture_dmg_burn = 0 + + // Get Bodypart + var/target_string = "" + var/obj/item/bodypart/BP = null + if (iscarbon(target)) + var/mob/living/carbon/C = target + BP = pick(C.bodyparts) + if (BP) + target_string += BP.name + + // Get Weapon + var/obj/item/I = user.get_active_held_item() + if (!istype(I)) + I = user.get_inactive_held_item() + // Create Strings + var/method_string = I?.attack_verb?.len ? pick(I.attack_verb) : pick("harmed","tortured","wrenched","twisted","scoured","beaten","lashed","scathed") + var/weapon_string = I ? I.name : pick("bare hands","hands","fingers","fists") + + // Weapon Bonus + SFX + if (I) + torture_time -= I.force / 4 + torture_dmg_brute += I.force / 4 + //torture_dmg_burn += I. + if (I.sharpness == IS_SHARP) + torture_time -= 1 + else if (I.sharpness == IS_SHARP_ACCURATE) + torture_time -= 2 + if (istype(I, /obj/item/weldingtool)) + var/obj/item/weldingtool/welder = I + welder.welding = TRUE + torture_time -= 5 + torture_dmg_burn += 5 + + I.play_tool_sound(target) + torture_time = max(50, torture_time * 10) // Minimum 5 seconds. + + // Now run process. + if (!do_mob(user, target, torture_time * mult)) + return FALSE + + // SUCCESS + if (I) + playsound(loc, I.hitsound, 30, 1, -1) + I.play_tool_sound(target) + + target.visible_message("[user] has [method_string] [target]'s [target_string] with [user.p_their()] [weapon_string]!", \ + "[user] has [method_string] your [target_string] with [user.p_their()] [weapon_string]!") + if (!target.is_muzzled()) + target.emote("scream") + target.Jitter(5) + target.apply_damages(brute = torture_dmg_brute, burn = torture_dmg_burn, def_zone = (BP ? BP.body_zone : null)) // take_overall_damage(6,0) + + return TRUE + + + + + + +/obj/structure/bloodsucker/vassalrack/proc/do_disloyalty(mob/living/user, mob/living/target) + + // OFFER YES/NO NOW! + spawn(10) + if (useLock && target && target.client) // Are we still torturing? Did we cancel? Are they still here? + to_chat(user, "[target] has been given the opportunity for servitude. You await their decision...") + var/alert_text = "You are being tortured! Do you want to give in and pledge your undying loyalty to [user]?" + if (HAS_TRAIT(target, TRAIT_MINDSHIELD)) + alert_text += "\n\nYou will no longer be loyal to the station!" + if (SSticker.mode.AmValidAntag(target.mind)) + alert_text += "\n\nYou will not lose your current objectives, but they come second to the will of your new master!" + switch(alert(target, alert_text,"THE HORRIBLE PAIN! WHEN WILL IT END?!","Yes, Master!", "NEVER!")) + if("Yes, Master!") + disloyalty_accept(target) + else + disloyalty_refuse(target) + if (!do_torture(user,target, 2)) + return FALSE + + // NOTE: We only remove loyalties when we're CONVERTED! + return TRUE + +/obj/structure/bloodsucker/vassalrack/proc/RequireDisloyalty(mob/living/target) + return SSticker.mode.AmValidAntag(target.mind) || HAS_TRAIT(target, TRAIT_MINDSHIELD) + +/obj/structure/bloodsucker/vassalrack/proc/disloyalty_accept(mob/living/target) + // FAILSAFE: Still on the rack? + if (!(locate(target) in buckled_mobs)) + return + + // NOTE: You can say YES after torture. It'll apply to next time. + + disloyalty_confirm = TRUE + + if (HAS_TRAIT(target, TRAIT_MINDSHIELD)) + to_chat(target, "You give in to the will of your torturer. If they are successful, you will no longer be loyal to the station!") + + +/obj/structure/bloodsucker/vassalrack/proc/disloyalty_refuse(mob/living/target) + // FAILSAFE: Still on the rack? + if (!(locate(target) in buckled_mobs)) + return + // Failsafe: You already said YES. + if (disloyalty_confirm) + return + to_chat(target, "You refuse to give in! You will not break!") + + +/obj/structure/bloodsucker/vassalrack/proc/remove_loyalties(mob/living/target) + + // Find Mind Implant & Destroy + if (HAS_TRAIT(target, TRAIT_MINDSHIELD)) + for(var/obj/item/implant/I in target.implants) + if(I.type == /obj/item/implant/mindshield) + I.removed(target,silent=TRUE) + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/obj/structure/bloodsucker/candelabrum + name = "candelabrum" + desc = "It burns slowly, but doesn't radiate any heat." + icon = 'icons/obj/vamp_obj.dmi' + icon_state = "candelabrum" + light_color = "#66FFFF"//LIGHT_COLOR_BLUEGREEN // lighting.dm + light_power = 3 + light_range = 0 // to 2 + density = FALSE + anchored = TRUE + var/lit = FALSE + +///obj/structure/bloodsucker/candelabrum/is_hot() // candle.dm + //return FALSE + +/obj/structure/bloodsucker/candelabrum/update_icon() + icon_state = "candelabrum[lit ? "_lit" : ""]" + +/obj/structure/bloodsucker/candelabrum/attack_hand(mob/user) + // Unlight (only a Vamp can light it) + var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + if (istype(bloodsuckerdatum)) + lit = !lit + if (lit) + set_light(2,3,"#66FFFF") + to_chat(user, "You wave your hand over the candelabrum. It springs to life.") + else + set_light(0) + update_icon() + +/obj/structure/bloodsucker/candelabrum/AltClick(mob/user) + // Bloodsuckers can turn their candles on from a distance. SPOOOOKY. + var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + if (istype(bloodsuckerdatum)) + attack_hand(user) + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + +/datum/crafting_recipe/bloodsucker/vassalrack + name = "Persuasion Rack" + //desc = "For converting crewmembers into loyal Vassals." + result = /obj/structure/bloodsucker/vassalrack + tools = list(/obj/item/weldingtool, + ///obj/item/screwdriver, + /obj/item/wrench + ) + reqs = list(/obj/item/stack/sheet/mineral/wood = 3, + /obj/item/stack/sheet/metal = 2, + /obj/item/restraints/handcuffs/cable = 2, + ///obj/item/storage/belt = 1 + ///obj/item/stack/sheet/animalhide = 1, // /obj/item/stack/sheet/leather = 1, + ///obj/item/stack/sheet/plasteel = 5 + ) + //parts = list(/obj/item/storage/belt = 1 + // ) + + time = 150 + category = CAT_STRUCTURE + always_availible = FALSE // Disabled til learned + + +/datum/crafting_recipe/bloodsucker/candelabrum + name = "Candelabrum" + //desc = "For converting crewmembers into loyal Vassals." + result = /obj/structure/bloodsucker/candelabrum + tools = list(/obj/item/weldingtool, + /obj/item/wrench + ) + reqs = list(/obj/item/stack/sheet/metal = 3, + /obj/item/stack/rods = 1, + /obj/item/candle = 1 + ) + time = 100 + category = CAT_STRUCTURE + always_availible = FALSE // Disabled til learned + + + + +// OTHER THINGS TO USE: HUMAN BLOOD. /obj/effect/decal/cleanable/blood diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm new file mode 100644 index 0000000000..b2b91f8929 --- /dev/null +++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm @@ -0,0 +1,105 @@ + + +// Created by claiming a Coffin. + + + +// THINGS TO SPAWN: +// +// /obj/effect/decal/cleanable/cobweb && /obj/effect/decal/cleanable/cobweb/cobweb2 +// /obj/effect/decal/cleanable/generic +// /obj/effect/decal/cleanable/dirt/dust <-- Pretty cool, just stains the tile itself. +// /obj/effect/decal/cleanable/blood/old + +/* +/area/ + // All coffins assigned to this area + var/list/obj/structure/closet/crate/laircoffins = new list() + +// Called by Coffin when an area is claimed as a vamp's lair +/area/proc/ClaimAsLair(/obj/structure/closet/crate/inClaimant) + set waitfor = FALSE // Don't make on_gain() wait for this function to finish. This lets this code run on the side. + + laircoffins += laircoffins + sleep() + + // Cancel! + if (laircoffins.len == 0) + return + */ + + + + +/datum/antagonist/bloodsucker/proc/RunLair() + set waitfor = FALSE // Don't make on_gain() wait for this function to finish. This lets this code run on the side. + + while (!AmFinalDeath() && coffin && lair) + + // WAit 10 Sec and Repeat + sleep(100) + + // Coffin Moved SOMEHOW? + if (lair != get_area(coffin)) + if (coffin) + coffin.UnclaimCoffin() + //lair = get_area(coffin) + break // DONE + + var/list/turf/area_turfs = get_area_turfs(lair) + + + // Create Dirt etc. + var/turf/T_Dirty = pick(area_turfs) + if (T_Dirty && !T_Dirty.density) + // Default: Dirt + + // CHECK: Cobweb already there? + //if (!locate(var/obj/effect/decal/cleanable/cobweb) in T_Dirty) // REMOVED! Cleanables don't stack. + + // STEP ONE: COBWEBS + + // CHECK: Wall to North? + var/turf/check_N = get_step(T_Dirty, NORTH) + if (istype(check_N, /turf/closed/wall)) + // CHECK: Wall to West? + var/turf/check_W = get_step(T_Dirty, WEST) + if (istype(check_W, /turf/closed/wall)) + new /obj/effect/decal/cleanable/cobweb (T_Dirty) + // CHECK: Wall to East? + var/turf/check_E = get_step(T_Dirty, EAST) + if (istype(check_E, /turf/closed/wall)) + new /obj/effect/decal/cleanable/cobweb/cobweb2 (T_Dirty) + + // STEP TWO: DIRT + new /obj/effect/decal/cleanable/dirt (T_Dirty) + + + // Find Animals in Area + if (rand(0,2) == 0) + var/mobCount = 0 + var/mobMax = CLAMP(area_turfs.len / 25, 1, 4) + for (var/turf/T in area_turfs) + if (!T) continue + var/mob/living/simple_animal/SA = locate() in T + if (SA) + mobCount ++ + if (mobCount >= mobMax) // Already at max + break + // Spawn One + if (mobCount < mobMax) + // Seek Out Location + while (area_turfs.len > 0) + var/turf/T = pick(area_turfs) // We use while&pick instead of a for/loop so it's random, rather than from the top of the list. + if (T && !T.density) + var/mob/living/simple_animal/SA = /mob/living/simple_animal/mouse // pick(/mob/living/simple_animal/mouse,/mob/living/simple_animal/mouse,/mob/living/simple_animal/mouse, /mob/living/simple_animal/hostile/retaliate/bat) //prob(300) /mob/living/simple_animal/mouse, + new SA (T) + break + area_turfs -= T + + // NOTE: area_turfs is now cleared out! + if (coffin) + coffin.UnclaimCoffin() + + // Done (somehow) + lair = null diff --git a/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm b/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm new file mode 100644 index 0000000000..95acab082c --- /dev/null +++ b/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm @@ -0,0 +1,187 @@ + + +/datum/action/bloodsucker/targeted/brawn + name = "Brawn"//"Cellular Emporium" + desc = "Snap restraints with ease, or deal terrible damage with your bare hands." + button_icon_state = "power_strength" + bloodcost = 8 + cooldown = 100 + target_range = 1 + power_activates_immediately = TRUE + message_Trigger = ""//"Whom will you subvert to your will?" + must_be_capacitated = TRUE + can_be_immobilized = TRUE + bloodsucker_can_buy = TRUE + // Level Up + var/upgrade_canLocker = FALSE + var/upgrade_canDoor = FALSE + +/datum/action/bloodsucker/targeted/brawn/CheckCanUse(display_error) + if(!..(display_error))// DEFAULT CHECKS + return FALSE + . = TRUE + // Break Out of Restraints! (And then cancel) + if (CheckBreakRestraints()) + //PowerActivatedSuccessfully() // PAY COST! BEGIN COOLDOWN!DEACTIVATE! + . = FALSE //return FALSE + // Throw Off Attacker! (And then cancel) + if (CheckEscapePuller()) + //PowerActivatedSuccessfully() // PAY COST! BEGIN COOLDOWN!DEACTIVATE! + . = FALSE //return FALSE + // Did we successfuly use power to BREAK CUFFS and/or ESCAPE PULLER? + // Then PAY COST! + if (. == FALSE) + PowerActivatedSuccessfully() // PAY COST! BEGIN COOLDOWN!DEACTIVATE! + + // NOTE: We use . = FALSE so that we can break cuffs AND throw off our attacker in one use! + //return TRUE +/datum/action/bloodsucker/targeted/brawn/CheckValidTarget(atom/A) + return isliving(A) || istype(A, /obj/machinery/door) || istype(A, /obj/structure/closet) + +/datum/action/bloodsucker/targeted/brawn/CheckCanTarget(atom/A, display_error) + // DEFAULT CHECKS (Distance) + if (!..()) // Disable range notice for Brawn. + return FALSE + // Must outside Closet to target anyone! + if (!isturf(owner.loc)) + return FALSE + // Check: Self + if (A == owner) + return FALSE + // Target Type: Living + if (isliving(A)) + return TRUE + // Target Type: Door + else if (upgrade_canDoor && istype(A, /obj/machinery/door)) + return TRUE + // Target Type: Closet + else if (upgrade_canLocker && istype(A, /obj/structure/closet)) + return TRUE + return ..() // yes, FALSE! You failed if you got here! BAD TARGET + +/datum/action/bloodsucker/targeted/brawn/FireTargetedPower(atom/A) + // set waitfor = FALSE <---- DONT DO THIS!We WANT this power to hold up ClickWithPower(), so that we can unlock the power when it's done. + + var/mob/living/carbon/target = A + var/mob/living/user = owner + + // Target Type: Mob + if (isliving(target)) + var/mob/living/carbon/user_C = user + var/hitStrength = user_C.dna.species.punchdamagehigh * 1.25 + 2 + + // Knockdown! + var/powerlevel = min(7, 1 + level_current) + if (rand(10 + powerlevel) >= 5) + target.visible_message("[user] has knocked [target] down!", \ + "[user] has knocked you down!", null, COMBAT_MESSAGE_RANGE) + + target.Knockdown( min(5, rand(10, 10 * powerlevel)) ) + // Chance of KO + if (rand(5 + powerlevel) >= 5 && target.stat <= UNCONSCIOUS) + target.Unconscious(40) + + // Attack! + playsound(get_turf(target), 'sound/weapons/punch4.ogg', 60, 1, -1) + user.do_attack_animation(target, ATTACK_EFFECT_SMASH) + var/obj/item/bodypart/affecting = target.get_bodypart(ran_zone(target.zone_selected)) + target.apply_damage(hitStrength, BRUTE, affecting) + + // Knockback + var/send_dir = get_dir(owner, target) + var/turf/T = get_ranged_target_turf(target, send_dir, powerlevel) + owner.newtonian_move(send_dir) // Bounce back in 0 G + target.throw_at(T, powerlevel, TRUE, owner) //new /datum/forced_movement(target, get_ranged_target_turf(target, send_dir, (hitStrength / 4)), 1, FALSE) + + // Target Type: Door + else if (upgrade_canDoor && istype(target, /obj/machinery/door)) + playsound(get_turf(usr), 'sound/machines/airlock_alien_prying.ogg', 40, 1, -1) + if (do_mob(usr,target,25)) + var/obj/machinery/door/D = target + if (D.Adjacent(user)) + to_chat(user, "You prepare to tear open [D].") + user.Stun(10) + user.do_attack_animation(D, ATTACK_EFFECT_SMASH) + playsound(get_turf(D), 'sound/effects/bang.ogg', 30, 1, -1) + D.open(2) // open(2) is like a crowbar or jaws of life. + + // Target Type: Closet + else if (upgrade_canLocker && istype(target, /obj/structure/closet)) + playsound(get_turf(usr), 'sound/machines/airlock_alien_prying.ogg', 40, 1, -1) + if (do_mob(usr,target,25)) + var/obj/structure/closet/C = target + to_chat(user, "You prepare to tear open the [C].") + user.Stun(10) + user.do_attack_animation(C, ATTACK_EFFECT_SMASH) + playsound(get_turf(C), 'sound/effects/bang.ogg', 30, 1, -1) + C.bust_open() + + +/datum/action/bloodsucker/targeted/brawn/proc/CheckBreakRestraints() + + if (!iscarbon(owner)) // || !owner.restrained() + return FALSE + // (NOTE: Just like biodegrade.dm, we only remove one thing per use // + // Destroy Cuffs + var/mob/living/carbon/user_C = owner + //message_admins("DEBUG3: attempt_cast() [name] / [user_C.handcuffed] ") + if(user_C.handcuffed) + var/obj/O = user_C.get_item_by_slot(SLOT_HANDCUFFED) + if(istype(O)) + //user_C.visible_message("[user_C] attempts to remove [O]!", \ + // "You snap [O] like it's nothing!") + user_C.clear_cuffs(O,TRUE) + playsound(get_turf(usr), 'sound/effects/grillehit.ogg', 80, 1, -1) + return TRUE + + // Destroy Straightjacket + if (ishuman(owner)) + var/mob/living/carbon/human/user_H = owner + if(user_H.wear_suit && user_H.wear_suit.breakouttime) + var/obj/item/clothing/suit/S = user_H.get_item_by_slot(ITEM_SLOT_ICLOTHING) + if(istype(S)) + user_C.visible_message("[user_C] attempts to remove [S]!", \ + "You rip through [S] like it's nothing!") + user_C.clear_cuffs(S,TRUE) + playsound(get_turf(usr), 'sound/effects/grillehit.ogg', 80, 1, -1) + return TRUE + + // Destroy Leg Cuffs + if(user_C.legcuffed) + var/obj/O = user_C.get_item_by_slot(SLOT_LEGCUFFED) + if(istype(O)) + //user_C.visible_message("[user_C] attempts to remove [O]!", \ + // "You snap [O] like it's nothing!") + user_C.clear_cuffs(O,TRUE) + playsound(get_turf(usr), 'sound/effects/grillehit.ogg', 80, 1, -1) + return TRUE + + return FALSE + +/datum/action/bloodsucker/targeted/brawn/proc/CheckEscapePuller() + if (!owner.pulledby)// || owner.pulledby.grab_state <= GRAB_PASSIVE) + return FALSE + + var/mob/M = owner.pulledby + var/pull_power = M.grab_state + playsound(get_turf(M), 'sound/effects/woodhit.ogg', 75, 1, -1) + + // Knock Down (if Living) + if (isliving(M)) + var/mob/living/L = M + L.Knockdown(pull_power * 10 + 20) + + // Knock Back (before Knockdown, which probably cancels pull) + var/send_dir = get_dir(owner, M) + var/turf/T = get_ranged_target_turf(M, send_dir, pull_power) + owner.newtonian_move(send_dir) // Bounce back in 0 G + M.throw_at(T, pull_power, TRUE, owner, FALSE) // Throw distance based on grab state! Harder grabs punished more aggressively. + + + // /proc/log_combat(atom/user, atom/target, what_done, atom/object=null, addition=null) + log_combat(owner, M, "used Brawn power") + + owner.visible_message("[owner] tears free of [M]'s grasp!", \ + "You shrug off [M]'s grasp!") + owner.pulledby = null // It's already done, but JUST IN CASE. + return TRUE diff --git a/code/modules/antagonists/bloodsucker/powers/bs_cloak.dm b/code/modules/antagonists/bloodsucker/powers/bs_cloak.dm new file mode 100644 index 0000000000..52d7f24f45 --- /dev/null +++ b/code/modules/antagonists/bloodsucker/powers/bs_cloak.dm @@ -0,0 +1,68 @@ + + +/datum/action/bloodsucker/cloak + name = "Cloak of Darkness" + desc = "Blend into the shadows and become invisible to the untrained eye." + button_icon_state = "power_cloak" + bloodcost = 5 + cooldown = 50 + bloodsucker_can_buy = TRUE + amToggle = TRUE + warn_constant_cost = TRUE + + var/light_min = 0.5 // If lum is above this, no good. + var/remember_start_loc // Where this power was activated, so it can be checked from ContinueActive + // Level Up + var/upgrade_canMove = FALSE // Can I move around with this power? + +/datum/action/bloodsucker/cloak/CheckCanUse(display_error) + if(!..(display_error))// DEFAULT CHECKS + return FALSE + // Must be Dark + var/turf/T = owner.loc + if(istype(T) && T.get_lumcount() > light_min) + to_chat(owner, "This area is not dark enough to blend in") + return FALSE + return TRUE + +/datum/action/bloodsucker/cloak/ActivatePower() + + var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + var/mob/living/user = owner + remember_start_loc = user.loc + + // Freeze in Place (so you don't auto-cancel) +//user.mobility_flags &= ~MOBILITY_MOVE + while (bloodsuckerdatum && ContinueActive(user)) + + //if (!do_mob(user, user, 10, 0, 0, extra_checks=CALLBACK(src, .proc/ContinueActive, user, target))) + // return + + // Fade from sight + owner.alpha = max(0, owner.alpha - min(75, 20 + 15 * level_current)) + bloodsuckerdatum.AddBloodVolume(-0.2) + + sleep(5) + +/datum/action/bloodsucker/cloak/ContinueActive(mob/living/user, mob/living/target) + if (!..()) + return FALSE + // Must be CONSCIOUS + if(user.stat == !CONSCIOUS) + to_chat(owner, "Your cloak failed due to you falling unconcious! ") + return FALSE + // Must be SAME LOCATION + var/turf/T = owner.loc + if (!upgrade_canMove && T != remember_start_loc) + to_chat(owner, "Your cloak is not yet powerfull enough to allow you to move!") + return FALSE + // Must be DARK + if(istype(T) && T.get_lumcount() > light_min) + to_chat(owner, "Your cloak failed due to there being too much light!") + return FALSE + return TRUE + + +/datum/action/bloodsucker/cloak/DeactivatePower(mob/living/user = owner, mob/living/target) + ..() + user.alpha = 255 diff --git a/code/modules/antagonists/bloodsucker/powers/bs_feed.dm b/code/modules/antagonists/bloodsucker/powers/bs_feed.dm new file mode 100644 index 0000000000..157938e0fb --- /dev/null +++ b/code/modules/antagonists/bloodsucker/powers/bs_feed.dm @@ -0,0 +1,342 @@ + + +/datum/action/bloodsucker/feed + name = "Feed" + desc = "Draw the heartsblood of living victims in your grasp.
None/Passive: Feed silently and unnoticed by your victim.
Aggressive: Subdue your target quickly." + button_icon_state = "power_feed" + + bloodcost = 0 + cooldown = 30 + amToggle = TRUE + bloodsucker_can_buy = TRUE + can_be_staked = TRUE + cooldown_static = TRUE + + var/notice_range = 2 // Distance before silent feeding is noticed. + var/mob/living/feed_target // So we can validate more than just the guy we're grappling. + var/target_grappled = FALSE // If you started grappled, then ending it will end your Feed. + +/datum/action/bloodsucker/feed/CheckCanUse(display_error) + if(!..(display_error))// DEFAULT CHECKS + return FALSE + + // Wearing mask + var/mob/living/L = owner + if (L.is_mouth_covered()) + if (display_error) + to_chat(owner, "You cannot feed with your mouth covered! Remove your mask.") + return FALSE + + // Find my Target! + if (!FindMyTarget(display_error)) // Sets feed_target within after Validating + return FALSE + + // Not in correct state + //if (owner.grab_state < GRAB_PASSIVE)//GRAB_AGGRESSIVEs) + // to_chat(owner, "You aren't grabbing anyone!") + // return FALSE + + // DONE! + return TRUE + +/datum/action/bloodsucker/feed/proc/ValidateTarget(mob/living/target, display_error) // Called twice: validating a subtle victim, or validating your grapple victim. + // Bloodsuckers + Animals MUST be grabbed aggressively! + if (!owner.pulling || target == owner.pulling && owner.grab_state < GRAB_AGGRESSIVE) + // NOTE: It's OKAY that we are checking if(!target) below, AFTER animals here. We want passive check vs animal to warn you first, THEN the standard warning. + // Animals: + if (isliving(target) && !iscarbon(target)) + if (display_error) + to_chat(owner, "Lesser beings require a tighter grip.") + return FALSE + // Bloodsuckers: + else if (iscarbon(target) && target.mind && target.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) + if (display_error) + to_chat(owner, "Other Bloodsuckers will not fall for your subtle approach.") + return FALSE + // Must have Target + if (!target) // || !ismob(target) + if (display_error) + to_chat(owner, "You must be next to or grabbing a victim to feed from them.") + return FALSE + // Not even living! + if (!isliving(target) || issilicon(target)) + if (display_error) + to_chat(owner, "You may only feed from living beings.") + return FALSE + if (target.blood_volume <= 0) + if (display_error) + to_chat(owner, "Your victim has no blood to take.") + return FALSE + if (ishuman(target)) + var/mob/living/carbon/human/H = target + if(NOBLOOD in H.dna.species.species_traits)// || owner.get_blood_id() != target.get_blood_id()) + if (display_error) + to_chat(owner, "Your victim's blood is not suitable for you to take.") + return FALSE + return TRUE + +// If I'm not grabbing someone, find me someone nearby. +/datum/action/bloodsucker/feed/proc/FindMyTarget(display_error) + // Default + feed_target = null + target_grappled = FALSE + + // If you are pulling a mob, that's your target. If you don't like it, then release them. + if (owner.pulling && ismob(owner.pulling)) + // Check grapple target Valid + if (!ValidateTarget(owner.pulling, display_error)) // Grabbed targets display error. + return FALSE + target_grappled = TRUE + feed_target = owner.pulling + return TRUE + + // Find Targets + var/list/mob/living/seen_targets = view(1, owner) + var/list/mob/living/seen_mobs = list() + for(var/mob/living/M in seen_targets) + if (isliving(M) && M != owner) + seen_mobs += M + + // None Seen! + if (seen_mobs.len == 0) + if (display_error) + to_chat(owner, "You must be next to or grabbing a victim to feed from them.") + return FALSE + + // Check Valids... + var/list/targets_valid = list() + var/list/targets_dead = list() + for(var/mob/living/M in seen_mobs) + // Check adjecent Valid target + if (M != owner && ValidateTarget(M, display_error = FALSE)) // Do NOT display errors. We'll be doing this again in CheckCanUse(), which will rule out grabbed targets. + // Prioritize living, but remember dead as backup + if (M.stat < DEAD) + targets_valid += M + else + targets_dead += M + + // No Living? Try dead. + if (targets_valid.len == 0 && targets_dead.len > 0) + targets_valid = targets_dead + // No Targets + if (targets_valid.len == 0) + // Did I see targets? Then display at least one error + if (seen_mobs.len > 1) + if (display_error) + to_chat(owner, "None of these are valid targets to feed from subtly.") + else + ValidateTarget(seen_mobs[1], display_error) + return FALSE + // Too Many Targets + //else if (targets.len > 1) + // if (display_error) + // to_chat(owner, "You are adjecent to too many witnesses. Either grab your victim or move away.") + // return FALSE + // One Target! + else + feed_target = pick(targets_valid)//targets[1] + return TRUE + + +/datum/action/bloodsucker/feed/ActivatePower() + // set waitfor = FALSE <---- DONT DO THIS!We WANT this power to hold up Activate(), so Deactivate() can happen after. + + var/mob/living/target = feed_target // Stored during CheckCanUse(). Can be a grabbed OR adjecent character. + var/mob/living/user = owner + var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + + // Am I SECRET or LOUD? It stays this way the whole time! I must END IT to try it the other way. + var/amSilent = (!target_grappled || owner.grab_state <= GRAB_PASSIVE) // && iscarbon(target) // Non-carbons (animals) not passive. They go straight into aggressive. + + // Initial Wait + var/feed_time = (amSilent ? 45 : 25) - (2.5 * level_current) + feed_time = max(15, feed_time) + if (amSilent) + to_chat(user, "You lean quietly toward [target] and secretly draw out your fangs...") + else + to_chat(user, "You pull [target] close to you and draw out your fangs...") + if (!do_mob(user, target, feed_time,0,1,extra_checks=CALLBACK(src, .proc/ContinueActive, user, target)))//sleep(10) + to_chat(user, "Your feeding was interrupted.") + //DeactivatePower(user,target) + return + + // Put target to Sleep (Bloodsuckers are immune to their own bite's sleep effect) + if (!amSilent) + ApplyVictimEffects(target) // Sleep, paralysis, immobile, unconscious, and mute + if(target.stat <= UNCONSCIOUS) + sleep(1) + // Wait, then Cancel if Invalid + if (!ContinueActive(user,target)) // Cancel. They're gone. + //DeactivatePower(user,target) + return + // Pull Target Close + if (!target.density) // Pull target to you if they don't take up space. + target.Move(user.loc) + + // Broadcast Message + if (amSilent) + //if (!iscarbon(target)) + // user.visible_message("[user] shifts [target] closer to [user.p_their()] mouth.", \ + // "You secretly slip your fangs into [target]'s flesh.", \ + // vision_distance = 2, ignored_mobs=target) // Only people who AREN'T the target will notice this action. + //else + var/deadmessage = target.stat == DEAD ? "" : " [target.p_they(TRUE)] looks dazed, and will not remember this." + user.visible_message("[user] puts [target]'s wrist up to [user.p_their()] mouth.", \ + "You secretly slip your fangs into [target]'s wrist.[deadmessage]", \ + vision_distance = notice_range, ignored_mobs=target) // Only people who AREN'T the target will notice this action. + // Warn Feeder about Witnesses... + var/was_unnoticed = TRUE + for(var/mob/living/M in viewers(notice_range, owner)) + if(M != owner && M != target && iscarbon(M) && M.mind && !M.has_unlimited_silicon_privilege && !M.eye_blind && !M.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) + was_unnoticed = FALSE + break + if (was_unnoticed) + to_chat(user, "You think no one saw you...") + else + to_chat(user, "Someone may have noticed...") + + else // /atom/proc/visible_message(message, self_message, blind_message, vision_distance, ignored_mobs) + user.visible_message("[user] closes [user.p_their()] mouth around [target]'s neck!", \ + "You sink your fangs into [target]'s neck.") + + // My mouth is full! + ADD_TRAIT(user, TRAIT_MUTE, "bloodsucker_feed") + + // Begin Feed Loop + var/warning_target_inhuman = FALSE + var/warning_target_dead = FALSE + var/warning_full = FALSE + var/warning_target_bloodvol = 99999 + var/amount_taken = 0 + var/blood_take_mult = amSilent ? 0.3 : 1 // Quantity to take per tick, based on Silent or not. + var/was_alive = target.stat < DEAD && ishuman(target) + // Activate Effects + //target.add_trait(TRAIT_MUTE, "bloodsucker_victim") // <----- Make mute a power you buy? + + // FEEEEEEEEED!!! // + bloodsuckerdatum.poweron_feed = TRUE + while (bloodsuckerdatum && target && active) + //user.mobility_flags &= ~MOBILITY_MOVE // user.canmove = 0 // Prevents spilling blood accidentally. + + // Abort? A bloody mistake. + if (!do_mob(user, target, 20, 0, 0, extra_checks=CALLBACK(src, .proc/ContinueActive, user, target))) + // May have disabled Feed during do_mob + if (!active || !ContinueActive(user, target)) + break + + if (amSilent) + to_chat(user, "Your feeding has been interrupted...but [target.p_they()] didn't seem to notice you.") + else + to_chat(user, "Your feeding has been interrupted!") + user.visible_message("[user] is ripped from [target]'s throat. [target.p_their(TRUE)] blood sprays everywhere!", \ + "Your teeth are ripped from [target]'s throat. [target.p_their(TRUE)] blood sprays everywhere!") + + // Deal Damage to Target (should have been more careful!) + if (iscarbon(target)) + var/mob/living/carbon/C = target + C.bleed(15) + playsound(get_turf(target), 'sound/effects/splat.ogg', 40, 1) + if (ishuman(target)) + var/mob/living/carbon/human/H = target + H.bleed_rate += 5 + target.add_splatter_floor(get_turf(target)) + user.add_mob_blood(target) // Put target's blood on us. The donor goes in the ( ) + target.add_mob_blood(target) + target.take_overall_damage(10,0) + target.emote("scream") + + // Killed Target? + if (was_alive) + CheckKilledTarget(user,target) + + return + + /////////////////////////////////////////////////////////// + // Handle Feeding! User & Victim Effects (per tick) + bloodsuckerdatum.HandleFeeding(target, blood_take_mult) + amount_taken += amSilent ? 0.3 : 1 + if (!amSilent) + ApplyVictimEffects(target) // Sleep, paralysis, immobile, unconscious, and mute + if (amount_taken > 5 && target.stat < DEAD && ishuman(target)) + SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "drankblood", /datum/mood_event/drankblood) // GOOD // in bloodsucker_life.dm + + /////////////////////////////////////////////////////////// + // Not Human? + if (!ishuman(target)) + SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "drankblood", /datum/mood_event/drankblood_bad) // BAD // in bloodsucker_life.dm + if (!warning_target_inhuman) + to_chat(user, "You recoil at the taste of a lesser lifeform.") + warning_target_inhuman = TRUE + // Dead Blood? + if (target.stat >= DEAD) + if (ishuman(target)) + SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "drankblood", /datum/mood_event/drankblood_dead) // BAD // in bloodsucker_life.dm + if (!warning_target_dead) + to_chat(user, "Your victim is dead. [target.p_their(TRUE)] blood barely nourishes you.") + warning_target_dead = TRUE + // Full? + if (!warning_full && user.blood_volume >= bloodsuckerdatum.maxBloodVolume) + to_chat(user, "You are full. Further blood will be wasted.") + warning_full = TRUE + // Blood Remaining? (Carbons/Humans only) + if (iscarbon(target) && !target.AmBloodsucker(1)) + if (target.blood_volume <= BLOOD_VOLUME_BAD && warning_target_bloodvol > BLOOD_VOLUME_BAD) + to_chat(user, "Your victim's blood volume is fatally low!") + else if (target.blood_volume <= BLOOD_VOLUME_OKAY && warning_target_bloodvol > BLOOD_VOLUME_OKAY) + to_chat(user, "Your victim's blood volume is dangerously low.") + else if (target.blood_volume <= BLOOD_VOLUME_SAFE && warning_target_bloodvol > BLOOD_VOLUME_SAFE) + to_chat(user, "Your victim's blood is at an unsafe level.") + warning_target_bloodvol = target.blood_volume // If we had a warning to give, it's been given by now. + // Done? + if (target.blood_volume <= 0) + to_chat(user, "You have bled your victim dry.") + break + + // Blood Gulp Sound + owner.playsound_local(null, 'sound/effects/singlebeat.ogg', 40, 1) // Play THIS sound for user only. The "null" is where turf would go if a location was needed. Null puts it right in their head. + + // DONE! + //DeactivatePower(user,target) + if (amSilent) + to_chat(user, "You slowly release [target]'s wrist." + (target.stat == 0 ? " [target.p_their(TRUE)] face lacks expression, like you've already been forgotten." : "")) + else + user.visible_message("[user] unclenches their teeth from [target]'s neck.", \ + "You retract your fangs and release [target] from your bite.") + + // /proc/log_combat(atom/user, atom/target, what_done, atom/object=null, addition=null) + log_combat(owner, target, "fed on blood", addition="(and took [amount_taken] blood)") + + // Killed Target? + if (was_alive) + CheckKilledTarget(user,target) + + +/datum/action/bloodsucker/feed/proc/CheckKilledTarget(mob/living/user, mob/living/target) + // Bad Vampire. You shouldn't do that. + if (target && target.stat >= DEAD && ishuman(target)) + SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "drankkilled", /datum/mood_event/drankkilled) // BAD // in bloodsucker_life.dm + +/datum/action/bloodsucker/feed/ContinueActive(mob/living/user, mob/living/target) + return ..() && target && (!target_grappled || user.pulling == target)// Active, and still Antag, + // NOTE: We only care about pulling if target started off that way. Mostly only important for Aggressive feed. + +/datum/action/bloodsucker/feed/proc/ApplyVictimEffects(mob/living/target) + // Bloodsuckers not affected by "the Kiss" of another vampire + if (!target.mind || !target.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) + target.Unconscious(50,0) + target.Knockdown(40 + 5 * level_current,1) + // NOTE: THis is based on level of power! + if (ishuman(target)) + target.adjustStaminaLoss(5, forced = TRUE)// Base Stamina Damage + +/datum/action/bloodsucker/feed/DeactivatePower(mob/living/user = owner, mob/living/target) + ..() // activate = FALSE + var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + // No longer Feeding + if (bloodsuckerdatum) + bloodsuckerdatum.poweron_feed = FALSE + feed_target = null + // My mouth is no longer full + REMOVE_TRAIT(owner, TRAIT_MUTE, "bloodsucker_feed") + // Let me move immediately + user.update_canmove() diff --git a/code/modules/antagonists/bloodsucker/powers/bs_fortitude.dm b/code/modules/antagonists/bloodsucker/powers/bs_fortitude.dm new file mode 100644 index 0000000000..eee6942414 --- /dev/null +++ b/code/modules/antagonists/bloodsucker/powers/bs_fortitude.dm @@ -0,0 +1,63 @@ + + + + +/datum/action/bloodsucker/fortitude + name = "Fortitude"//"Cellular Emporium" + desc = "Withstand egregious physical wounds and walk away from attacks that would stun, pierce, and dismember lesser beings. You cannot run while active." + button_icon_state = "power_fortitude" + bloodcost = 5 + cooldown = 40 + bloodsucker_can_buy = TRUE + amToggle = TRUE + warn_constant_cost = TRUE + + var/this_resist // So we can raise and lower your brute resist based on what your level_current WAS. + +/datum/action/bloodsucker/fortitude/ActivatePower() + + var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + var/mob/living/user = owner + + to_chat(user, "Your flesh, skin, and muscles become as steel.") + + // Traits & Effects + ADD_TRAIT(user, TRAIT_PIERCEIMMUNE, "fortitude") + ADD_TRAIT(user, TRAIT_NODISMEMBER, "fortitude") + ADD_TRAIT(user, TRAIT_STUNIMMUNE, "fortitude") + ADD_TRAIT(user, TRAIT_NORUNNING, "fortitude") + if (ishuman(owner)) + var/mob/living/carbon/human/H = owner + this_resist = max(0.3, 0.7 - level_current * 0.1) + H.physiology.brute_mod *= this_resist//0.5 + H.physiology.burn_mod *= this_resist//0.5 + + // Stop Running (Taken from /datum/quirk/nyctophobia in negative.dm) + var/was_running = (user.m_intent == MOVE_INTENT_RUN) + if (was_running) + user.toggle_move_intent() + + while(bloodsuckerdatum && ContinueActive(user) || user.m_intent == MOVE_INTENT_RUN) + + // Pay Blood Toll (if awake) + if (user.stat == CONSCIOUS) + bloodsuckerdatum.AddBloodVolume(-0.5) // Used to be 0.3 blood per 2 seconds, but we're making it more expensive to keep on. + + sleep(20) // Check every few ticks that we haven't disabled this power + + // Return to Running (if you were before) + if (was_running && user.m_intent != MOVE_INTENT_RUN) + user.toggle_move_intent() + +/datum/action/bloodsucker/fortitude/DeactivatePower(mob/living/user = owner, mob/living/target) + ..() + + // Restore Traits & Effects + REMOVE_TRAIT(user, TRAIT_PIERCEIMMUNE, "fortitude") + REMOVE_TRAIT(user, TRAIT_NODISMEMBER, "fortitude") + REMOVE_TRAIT(user, TRAIT_STUNIMMUNE, "fortitude") + REMOVE_TRAIT(user, TRAIT_NORUNNING, "fortitude") + if (ishuman(owner)) + var/mob/living/carbon/human/H = owner + H.physiology.brute_mod /= this_resist//0.5 + H.physiology.burn_mod /= this_resist//0.5 diff --git a/code/modules/antagonists/bloodsucker/powers/bs_gohome.dm b/code/modules/antagonists/bloodsucker/powers/bs_gohome.dm new file mode 100644 index 0000000000..81cfa48241 --- /dev/null +++ b/code/modules/antagonists/bloodsucker/powers/bs_gohome.dm @@ -0,0 +1,140 @@ + + +/datum/action/bloodsucker/gohome + name = "Vanishing Act" + desc = "As dawn aproaches, disperse into mist and return directly to your Lair.
WARNING: You will drop ALL of your possessions if observed by mortals." + button_icon_state = "power_gohome" + background_icon_state_on = "vamp_power_off_oneshot" // Even though this never goes off. + background_icon_state_off = "vamp_power_off_oneshot" + + bloodcost = 25 + cooldown = 99999 // It'll never come back. + amToggle = FALSE + amSingleUse = TRUE + + bloodsucker_can_buy = FALSE // You only get this if you've claimed a lair, and only just before sunrise. + can_use_in_torpor = TRUE + must_be_capacitated = TRUE + can_be_immobilized = TRUE + + +/datum/action/bloodsucker/gohome/CheckCanUse(display_error) + if(!..(display_error))// DEFAULT CHECKS + return FALSE + // Have No Lair (NOTE: You only got this power if you had a lair, so this means it's destroyed) + var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + if (!istype(bloodsuckerdatum) || !bloodsuckerdatum.coffin) + if (display_error) + to_chat(owner, "Your coffin has been destroyed!") + return FALSE + + return TRUE + + + +/datum/action/bloodsucker/gohome/ActivatePower() + + var/mob/living/carbon/user = owner + var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + + + // IMPORTANT: Check for lair at every step! It might get destroyed. + + to_chat(user, "You focus on separating your consciousness from your physical form...") + + + // STEP ONE: Flicker Lights + + // From statue.dm + for(var/obj/machinery/light/L in view(3, get_turf(owner))) // /obj/machinery/light/proc/flicker(var/amount = rand(10, 20)) + L.flicker(5) + playsound(get_turf(owner), 'sound/effects/singlebeat.ogg', 20, 1) + + sleep(50) + + for(var/obj/machinery/light/L in view(3, get_turf(owner))) // /obj/machinery/light/proc/flicker(var/amount = rand(10, 20)) + L.flicker(5) + playsound(get_turf(owner), 'sound/effects/singlebeat.ogg', 40, 1) + + sleep(50) + + for(var/obj/machinery/light/L in view(6, get_turf(owner))) // /obj/machinery/light/proc/flicker(var/amount = rand(10, 20)) + L.flicker(5) + playsound(get_turf(owner), 'sound/effects/singlebeat.ogg', 60, 1) + + + // ( STEP TWO: Lights OFF? ) + + // CHECK: Still have Coffin? + if (!istype(bloodsuckerdatum) || !bloodsuckerdatum.coffin) + to_chat(user, "Your coffin has been destroyed! You no longer have a destination.") + return FALSE + + if (!owner) + return + + // SEEN?: (effects ONLY if there are witnesses! Otherwise you just POOF) + // NOTE: Stolen directly from statue.dm, thanks guys! + var/am_seen = FALSE // Do Effects (seen by anyone) + var/drop_item = FALSE // Drop Stuff (seen by non-vamp) + if (isturf(owner.loc)) // Only check if I'm not in a Locker or something. + // A) Check for Darkness (we can just leave) + var/turf/T = get_turf(user) + if(T && T.lighting_object && T.get_lumcount()>= 0.1) + // B) Check for Viewers + for(var/mob/living/M in viewers(owner)) + if(M != owner && isliving(M) && M.mind && !M.has_unlimited_silicon_privilege && !M.eye_blind) // M.client <--- add this in after testing! + am_seen = TRUE + if (!M.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) + drop_item = TRUE + break + + // LOSE CUFFS + if(user.handcuffed) + var/obj/O = user.handcuffed + user.dropItemToGround(O) + if(user.legcuffed) + var/obj/O = user.legcuffed + user.dropItemToGround(O) + + // SEEN! + if (drop_item) + // DROP: Clothes, held items, and cuffs etc + // NOTE: Taken from unequip_everything() in inventory.dm. We need to + // *force* all items to drop, so we had to just gut the code out of it. + var/list/items = list() + items |= user.get_equipped_items() + for(var/I in items) + user.dropItemToGround(I,TRUE) + for(var/obj/item/I in owner.held_items) // drop_all_held_items() + user.dropItemToGround(I, TRUE) + if (am_seen) + // POOF EFFECTS + playsound(get_turf(owner), 'sound/magic/summon_karp.ogg', 60, 1) + var/datum/effect_system/steam_spread/puff = new /datum/effect_system/steam_spread/() + puff.effect_type = /obj/effect/particle_effect/smoke/vampsmoke + puff.set_up(3, 0, get_turf(owner)) + puff.start() + + // TELEPORT: Move to Coffin & Close it! + do_teleport(owner, bloodsuckerdatum.coffin, no_effects=TRUE) // in teleport.dm? + // SLEEP + user.resting = TRUE + //user.Unconscious(30,0) + user.Stun(30,1) + // CLOSE LID: If fail, force me in. + if (!bloodsuckerdatum.coffin.close(owner)) + bloodsuckerdatum.coffin.insert(owner) // Puts me inside. + // The following was taken from close() proc in closets.dm + // (but we had to do it this way because there is no way to force entry) + playsound(bloodsuckerdatum.coffin.loc, bloodsuckerdatum.coffin.close_sound, 15, 1, -3) + bloodsuckerdatum.coffin.opened = FALSE + bloodsuckerdatum.coffin.density = TRUE + bloodsuckerdatum.coffin.update_icon() + // Lock Coffin + bloodsuckerdatum.coffin.LockMe(owner) + + + // ( STEP FIVE: Create animal at prev location? ) + //var/mob/living/simple_animal/SA = /mob/living/simple_animal/hostile/retaliate/bat // pick(/mob/living/simple_animal/mouse,/mob/living/simple_animal/mouse,/mob/living/simple_animal/mouse, /mob/living/simple_animal/hostile/retaliate/bat) //prob(300) /mob/living/simple_animal/mouse, + //new SA (owner.loc) diff --git a/code/modules/antagonists/bloodsucker/powers/bs_haste.dm b/code/modules/antagonists/bloodsucker/powers/bs_haste.dm new file mode 100644 index 0000000000..118bbb308c --- /dev/null +++ b/code/modules/antagonists/bloodsucker/powers/bs_haste.dm @@ -0,0 +1,92 @@ + +// Level 1: Speed to location +// Level 2: Dodge Bullets +// Level 3: Stun People Passed + +/datum/action/bloodsucker/targeted/haste + name = "Immortal Haste" + desc = "Sprint anywhere in the blink of an eye, slipping past open doors. Those nearby may be knocked away, stunned, or left empty-handed." + button_icon_state = "power_speed" + bloodcost = 6 + cooldown = 30 + target_range = 15 + power_activates_immediately = TRUE + message_Trigger = ""//"Whom will you subvert to your will?" + bloodsucker_can_buy = TRUE + must_be_capacitated = TRUE + //var/datum/martial_art/vamphaste/haste_cqc // Assign this when + + + + +/datum/action/bloodsucker/targeted/haste/CheckCanUse(display_error) + if(!..(display_error))// DEFAULT CHECKS + return FALSE + // Being Grabbed + if (owner.pulledby && owner.pulledby.grab_state >= GRAB_AGGRESSIVE) + if (display_error) + to_chat(owner, "You're being grabbed!") + return FALSE + return TRUE + + +/datum/action/bloodsucker/targeted/haste/CheckValidTarget(atom/A) + return isturf(A) || A.loc != owner.loc // Anything will do, if it's not me or my square + + +/datum/action/bloodsucker/targeted/haste/CheckCanTarget(atom/A, display_error) + // DEFAULT CHECKS (Distance) + if (!..()) + return FALSE + // Check: Range + //if (!(A in view(target_range, get_turf(owner)))) + // return FALSE + return TRUE + + + +/datum/action/bloodsucker/targeted/haste/FireTargetedPower(atom/A) + // set waitfor = FALSE <---- DONT DO THIS!We WANT this power to hold up ClickWithPower(), so that we can unlock the power when it's done. + var/mob/living/user = owner + var/turf/T = isturf(A) ? A : get_turf(A) + // Pulled? Not anymore. + owner.pulledby = null + // Step One: Heatseek toward Target's Turf + walk_to(owner, T, 0, 0.01, 20) // NOTE: this runs in the background! to cancel it, you need to use walk(owner.current,0), or give them a new path. + playsound(get_turf(owner), 'sound/weapons/punchmiss.ogg', 25, 1, -1) + var/safety = 20 + while(get_turf(owner) != T && safety > 0 && !(isliving(target) && target.Adjacent(owner))) + user.canmove = FALSE //Dont move while doing the thing, or itll break + safety -- + + // Did I get knocked down? + if (owner && owner.incapacitated(ignore_restraints=TRUE,ignore_grab=TRUE))// owner.incapacitated()) + // We're gonna cancel. But am I on the ground? Spin me! + if (user.lying) + var/send_dir = get_dir(owner, T) + new /datum/forced_movement(owner, get_ranged_target_turf(owner, send_dir, 1), 1, FALSE) + owner.spin(10) + break + + // Spin/Stun people we pass. + //var/mob/living/newtarget = locate(/mob/living) in oview(1, owner) + var/list/mob/living/foundtargets = list() + for (var/mob/living/newtarget in oview(1, owner)) + if (newtarget && newtarget != target && !(newtarget in foundtargets))//!newtarget.IsKnockdown()) + if (rand(0, 5) < level_current) + playsound(get_turf(newtarget), "sound/weapons/punch[rand(1,4)].ogg", 15, 1, -1) + newtarget.Knockdown(10 + level_current * 5) + newtarget.Stun(5 + level_current * 2) + if(newtarget.IsStun()) + newtarget.spin(10,1) + if (rand(0,4)) + newtarget.drop_all_held_items() + foundtargets += newtarget + sleep(1) + if (user) + user.update_canmove() //Let the poor guy move again + + +/datum/action/bloodsucker/targeted/haste/DeactivatePower(mob/living/user = owner, mob/living/target) + ..() // activate = FALSE + user.update_canmove() diff --git a/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm b/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm new file mode 100644 index 0000000000..d809bddc99 --- /dev/null +++ b/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm @@ -0,0 +1,102 @@ + +// Level 1: Grapple level 2 +// Level 2: Grapple 3 from Behind +// Level 3: Grapple 3 from Shadows + +/datum/action/bloodsucker/targeted/lunge + name = "Predatory Lunge" + desc = "Spring at your target and aggressively grapple them without warning. Attacks from concealment or the rear may even knock them down." + button_icon_state = "power_lunge" + bloodcost = 10 + cooldown = 100 + target_range = 3 + power_activates_immediately = TRUE + message_Trigger = ""//"Whom will you subvert to your will?" + must_be_capacitated = TRUE + bloodsucker_can_buy = TRUE + + +/datum/action/bloodsucker/targeted/lunge/CheckCanUse(display_error) + if(!..(display_error))// DEFAULT CHECKS + return FALSE + // Being Grabbed + if (owner.pulledby && owner.pulledby.grab_state >= GRAB_AGGRESSIVE) + if (display_error) + to_chat(owner, "You're being grabbed!") + return FALSE + return TRUE + + +/datum/action/bloodsucker/targeted/lunge/CheckValidTarget(atom/A) + return isliving(A) + + +/datum/action/bloodsucker/targeted/lunge/CheckCanTarget(atom/A, display_error) + // Check: Self + if (target == owner) + return FALSE + // Check: Range + //if (!(target in view(target_range, get_turf(owner)))) + // if (display_error) + // to_chat(owner, "Your victim is too far away.") + // return FALSE + // DEFAULT CHECKS (Distance) + if (!..()) + return FALSE + // Check: Turf + var/mob/living/L = A + if (!isturf(L.loc)) + return FALSE + return TRUE + +/datum/action/bloodsucker/targeted/lunge/FireTargetedPower(atom/A) + // set waitfor = FALSE <---- DONT DO THIS!We WANT this power to hold up ClickWithPower(), so that we can unlock the power when it's done. + + var/mob/living/user = owner + var/mob/living/carbon/target = A + var/turf/T = get_turf(target) + + // Clear Vars + owner.pulling = null + + // Will we Knock them Down? + var/do_knockdown = !is_A_facing_B(target,owner) || owner.alpha <= 0 || istype(owner.loc, /obj/structure/closet) + // CAUSES: Target has their back to me, I'm invisible, or I'm in a Closet + + // Step One: Heatseek toward Target's Turf + walk_towards(owner, T, 0.1, 10) // NOTE: this runs in the background! to cancel it, you need to use walk(owner.current,0), or give them a new path. + var/safety = 10 + while(get_turf(owner) != T && safety > 0 && !(isliving(target) && target.Adjacent(owner))) + if(owner.incapacitated()) + sleep(1) + safety -- + + // Did I get knocked down? + if (owner && owner.incapacitated()) + if (user.lying) + var/send_dir = get_dir(owner, T) + new /datum/forced_movement(owner, get_ranged_target_turf(owner, send_dir, 1), 1, FALSE) + owner.spin(10) + break + + + // Step Two: Check if I'm at/adjectent to Target's CURRENT turf (not original...that was just a destination) + if (target.Adjacent(owner)) + // LEVEL 2: If behind target, mute or unconscious! + if (do_knockdown) // && level_current >= 1) + target.Knockdown(15 + 10 * level_current,1) + // Cancel Walk (we were close enough to contact them) + walk(owner,0) + //target.Paralyze(10,1) + target.grabbedby(owner) // Taken from mutations.dm under changelings + target.grippedby(owner, instant = TRUE) //instant aggro grab + + // UNCONSCIOUS or MUTE! + //owner.start_pulling(target,GRAB_AGGRESSIVE) // GRAB_PASSIVE, GRAB_AGGRESSIVE, GRAB_NECK, GRAB_KILL + + //DeactivatePower() + + +/datum/action/bloodsucker/targeted/lunge/DeactivatePower(mob/living/user = owner, mob/living/target) + ..() // activate = FALSE + user.update_canmove() diff --git a/code/modules/antagonists/bloodsucker/powers/bs_masquerade.dm b/code/modules/antagonists/bloodsucker/powers/bs_masquerade.dm new file mode 100644 index 0000000000..7a35d9edfa --- /dev/null +++ b/code/modules/antagonists/bloodsucker/powers/bs_masquerade.dm @@ -0,0 +1,98 @@ + + + +// WITHOUT THIS POWER: +// +// - Mid-Blood: SHOW AS PALE +// - Low-Blood: SHOW AS DEAD +// - No Heartbeat +// - Examine shows actual blood +// - Thermal homeostasis (ColdBlooded) + + + +// WITH THIS POWER: +// - Normal body temp -- remove Cold Blooded (return on deactivate) +// - + + +/datum/action/bloodsucker/masquerade + name = "Masquerade" + desc = "Feign the vital signs of a mortal, and escape both casual and medical notice as the monster you truly are." + button_icon_state = "power_human" + bloodcost = 10 + cooldown = 50 + amToggle = TRUE + bloodsucker_can_buy = TRUE + warn_constant_cost = TRUE + can_use_in_torpor = TRUE // Masquerade is maybe the only one that can do this. It stops your healing. + cooldown_static = TRUE + +// NOTE: Firing off vulgar powers disables your Masquerade! + + +/*/datum/action/bloodsucker/masquerade/CheckCanUse(display_error) + if(!..(display_error))// DEFAULT CHECKS + return FALSE + // DONE! + return TRUE +*/ + + +/datum/action/bloodsucker/masquerade/ActivatePower() + + var/mob/living/user = owner + var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + + to_chat(user, "Your heart beats falsely within your lifeless chest. You may yet pass for a mortal.") + to_chat(user, "Your vampiric healing is halted while imitating life.") + + + // Remove ColdBlooded & Hard/SoftCrit + REMOVE_TRAIT(user, TRAIT_COLDBLOODED, "bloodsucker") + REMOVE_TRAIT(user, TRAIT_NOHARDCRIT, "bloodsucker") + REMOVE_TRAIT(user, TRAIT_NOSOFTCRIT, "bloodsucker") + var/obj/item/organ/heart/vampheart/H = user.getorganslot(ORGAN_SLOT_HEART) + + // WE ARE ALIVE! // + bloodsuckerdatum.poweron_masquerade = TRUE + while(bloodsuckerdatum && ContinueActive(user)) + + // HEART + if (istype(H)) + H.FakeStart() + + // PASSIVE (done from LIFE) + // Don't Show Pale/Dead on low blood + // Don't vomit food + // Don't Heal + + // Pay Blood Toll (if awake) + if (user.stat == CONSCIOUS) + bloodsuckerdatum.AddBloodVolume(-0.2) + + sleep(20) // Check every few ticks that we haven't disabled this power + + +/datum/action/bloodsucker/masquerade/ContinueActive(mob/living/user) + // Disable if unable to use power anymore. + //if (user.stat == DEAD || user.blood_volume <= 0) // not conscious or soft critor uncon, just dead + // return FALSE + return ..() // Active, and still Antag + + +/datum/action/bloodsucker/masquerade/DeactivatePower(mob/living/user = owner, mob/living/target) + ..() // activate = FALSE + + var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + bloodsuckerdatum.poweron_masquerade = FALSE + + ADD_TRAIT(user, TRAIT_COLDBLOODED, "bloodsucker") + ADD_TRAIT(user, TRAIT_NOHARDCRIT, "bloodsucker") + ADD_TRAIT(user, TRAIT_NOSOFTCRIT, "bloodsucker") + + // HEART + var/obj/item/organ/heart/H = user.getorganslot(ORGAN_SLOT_HEART) + H.Stop() + + to_chat(user, "Your heart beats one final time, while your skin dries out and your icy pallor returns.") diff --git a/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm b/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm new file mode 100644 index 0000000000..1977f9717e --- /dev/null +++ b/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm @@ -0,0 +1,114 @@ + +// * MEZMERIZE +// LOVE: Target falls in love with you. Being harmed directly causes them harm if they see it? +// STAY: Target will do everything they can to stand in the same place. +// FOLLOW: Target follows you, spouting random phrases from their history (or maybe Poly's or NPC's vocab?) +// ATTACK: Target finds a nearby non-Bloodsucker victim to attack. + + +/datum/action/bloodsucker/targeted/mesmerize + name = "Mesmerize" + desc = "Dominate the mind of a mortal who can see your eyes." + button_icon_state = "power_mez" + bloodcost = 30 + cooldown = 200 + target_range = 5 + power_activates_immediately = FALSE + message_Trigger = "Whom will you subvert to your will?" + must_be_capacitated = TRUE + bloodsucker_can_buy = TRUE + +/datum/action/bloodsucker/targeted/mesmerize/CheckCanUse(display_error) + if(!..(display_error))// DEFAULT CHECKS + return FALSE + if (!owner.getorganslot(ORGAN_SLOT_EYES)) + if (display_error) + to_chat(owner, "You have no eyes with which to mesmerize.") + return FALSE + // Check: Eyes covered? + var/mob/living/L = owner + if (istype(L) && L.is_eyes_covered() || !isturf(owner.loc)) + if (display_error) + to_chat(owner, "Your eyes are concealed from sight.") + return FALSE + return TRUE + +/datum/action/bloodsucker/targeted/mesmerize/CheckValidTarget(atom/A) + return iscarbon(A) + +/datum/action/bloodsucker/targeted/mesmerize/CheckCanTarget(atom/A,display_error) + // Check: Self + if (A == owner) + return FALSE + var/mob/living/carbon/target = A // We already know it's carbon due to CheckValidTarget() + // Bloodsucker + if (target.mind && target.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) + if (display_error) + to_chat(owner, "Bloodsuckers are immune to [src].") + return FALSE + // Dead/Unconscious + if (target.stat > CONSCIOUS) + if (display_error) + to_chat(owner, "Your victim is not [(target.stat == DEAD || HAS_TRAIT(target, TRAIT_FAKEDEATH))?"alive":"conscious"].") + return FALSE + // Check: Target has eyes? + if (!target.getorganslot("heart")) + if (display_error) + to_chat(owner, "They have no eyes!") + return FALSE + // Check: Target blind? + if (target.eye_blind > 0) + if (display_error) + to_chat(owner, "Your victim's eyes are glazed over. They cannot perceive you.") + return FALSE + // Check: Target See Me? (behind wall) + if (!(owner in view(target_range, get_turf(target)))) + // Sub-Check: GET CLOSER + //if (!(owner in range(target_range, get_turf(target))) + // if (display_error) + // to_chat(owner, "You're too far from your victim.") + if (display_error) + to_chat(owner, "You're too far outside your victim's view.") + return FALSE + // Check: Facing target? + if (!is_A_facing_B(owner,target)) // in unsorted.dm + if (display_error) + to_chat(owner, "You must be facing your victim.") + return FALSE + // Check: Target facing me? + if (!target.lying && !is_A_facing_B(target,owner)) + if (display_error) + to_chat(owner, "Your victim must be facing you to see into your eyes.") + return FALSE + + return TRUE + + +/datum/action/bloodsucker/targeted/mesmerize/FireTargetedPower(atom/A) + // set waitfor = FALSE <---- DONT DO THIS!We WANT this power to hold up ClickWithPower(), so that we can unlock the power when it's done. + + var/mob/living/carbon/target = A + var/mob/living/user = owner + + if (istype(target)) + ADD_TRAIT(target, TRAIT_MUTE, "bloodsucker_mesmerize") + + if (do_mob(user, target, 40, 0, TRUE, extra_checks=CALLBACK(src, .proc/ContinueActive, user, target))) + PowerActivatedSuccessfully() // PAY COST! BEGIN COOLDOWN! + var/power_time = 90 + level_current * 15 + to_chat(user, "[target] is fixed in place by your hypnotic gaze.") + target.Stun(power_time) + //target.silent += power_time / 10 // Silent isn't based on ticks. + target.next_move = world.time + power_time // <--- Use direct change instead. We want an unmodified delay to their next move // target.changeNext_move(power_time) // check click.dm + target.notransform = TRUE // <--- Fuck it. We tried using next_move, but they could STILL resist. We're just doing a hard freeze. + spawn(power_time) + if (istype(target)) + target.notransform = FALSE + REMOVE_TRAIT(target, TRAIT_MUTE, "bloodsucker_mesmerize") + // They Woke Up! (Notice if within view) + if (istype(user) && target.stat == CONSCIOUS && (target in view(10, get_turf(user))) ) + to_chat(user, "[target] has snapped out of their trance.") + + +/datum/action/bloodsucker/targeted/mesmerize/ContinueActive(mob/living/user, mob/living/target) + return ..() && CheckCanUse() && CheckCanTarget(target) diff --git a/code/modules/antagonists/bloodsucker/powers/bs_trespass.dm b/code/modules/antagonists/bloodsucker/powers/bs_trespass.dm new file mode 100644 index 0000000000..e74a2715ab --- /dev/null +++ b/code/modules/antagonists/bloodsucker/powers/bs_trespass.dm @@ -0,0 +1,123 @@ + + +/datum/action/bloodsucker/targeted/trespass + name = "Trespass" + desc = "Become mist and advance two tiles in one direction, ignoring all obstacles except for walls. Useful for skipping past doors and barricades." + button_icon_state = "power_tres" + + bloodcost = 10 + cooldown = 60 + amToggle = FALSE + //target_range = 2 + + bloodsucker_can_buy = TRUE + must_be_capacitated = FALSE + can_be_immobilized = TRUE + + var/turf/target_turf // We need to decide where we're going based on where we clicked. It's not actually the tile we clicked. + +/datum/action/bloodsucker/targeted/trespass/CheckCanUse(display_error) + if(!..(display_error))// DEFAULT CHECKS + return FALSE + if(owner.notransform || !get_turf(owner)) + return FALSE + + return TRUE + + +/datum/action/bloodsucker/targeted/trespass/CheckValidTarget(atom/A) + // Can't target my tile + if (A == get_turf(owner) || get_turf(A) == get_turf(owner)) + return FALSE + + return TRUE // All we care about is destination. Anything you click is fine. + + +/datum/action/bloodsucker/targeted/trespass/CheckCanTarget(atom/A, display_error) + // NOTE: Do NOT use ..()! We don't want to check distance or anything. + + // Get clicked tile + var/final_turf = isturf(A) ? A : get_turf(A) + + // Are either tiles WALLS? + var/turf/from_turf = get_turf(owner) + var/this_dir // = get_dir(from_turf, target_turf) + for (var/i=1 to 2) + // Keep Prev Direction if we've reached final turf + if (from_turf != final_turf) + this_dir = get_dir(from_turf, final_turf) // Recalculate dir so we don't overshoot on a diagonal. + from_turf = get_step(from_turf, this_dir) + // ERROR! Wall! + if (iswallturf(from_turf)) + if (display_error) + var/wallwarning = (i == 1) ? "in the way" : "at your destination" + to_chat(owner, "There is a solid wall [wallwarning].") + return FALSE + // Done + target_turf = from_turf + + return TRUE + + +/datum/action/bloodsucker/targeted/trespass/FireTargetedPower(atom/A) + // set waitfor = FALSE <---- DONT DO THIS!We WANT this power to hold up ClickWithPower(), so that we can unlock the power when it's done. + + // Find target turf, at or below Atom + var/mob/living/carbon/user = owner + var/turf/my_turf = get_turf(owner) + + user.visible_message("[user]'s form dissipates into a cloud of mist!", \ + "You disspiate into formless mist.") + + + // Effect Origin + playsound(get_turf(owner), 'sound/magic/summon_karp.ogg', 60, 1) + var/datum/effect_system/steam_spread/puff = new /datum/effect_system/steam_spread/() + puff.effect_type = /obj/effect/particle_effect/smoke/vampsmoke + puff.set_up(3, 0, my_turf) + puff.start() + + var/mist_delay = max(5, 20 - level_current * 2.5) // Level up and do this faster. + + // Freeze Me + user.next_move = world.time + mist_delay + user.Stun(mist_delay, ignore_canstun = TRUE) + user.notransform = TRUE + user.density = 0 + var/invis_was = user.invisibility + user.invisibility = INVISIBILITY_MAXIMUM + + // LOSE CUFFS + if(user.handcuffed) + var/obj/O = user.handcuffed + user.dropItemToGround(O) + if(user.legcuffed) + var/obj/O = user.legcuffed + user.dropItemToGround(O) + + // Wait... + sleep(mist_delay / 2) + + // Move & Freeze + if (isturf(target_turf)) + do_teleport(owner, target_turf, no_effects=TRUE) // in teleport.dm? + user.next_move = world.time + mist_delay / 2 + user.Stun(mist_delay / 2, ignore_canstun = TRUE) + + // Wait... + sleep(mist_delay / 2) + + // Un-Hide & Freeze + user.dir = get_dir(my_turf, target_turf) + user.next_move = world.time + mist_delay / 2 + user.Stun(mist_delay / 2, ignore_canstun = TRUE) + user.notransform = FALSE + user.density = 1 + user.invisibility = invis_was + + // Effect Destination + playsound(get_turf(owner), 'sound/magic/summon_karp.ogg', 60, 1) + puff = new /datum/effect_system/steam_spread/() + puff.effect_type = /obj/effect/particle_effect/smoke/vampsmoke + puff.set_up(3, 0, target_turf) + puff.start() diff --git a/code/modules/antagonists/bloodsucker/powers/bs_veil.dm b/code/modules/antagonists/bloodsucker/powers/bs_veil.dm new file mode 100644 index 0000000000..1301ccd727 --- /dev/null +++ b/code/modules/antagonists/bloodsucker/powers/bs_veil.dm @@ -0,0 +1,165 @@ + + + + + +/datum/action/bloodsucker/veil + name = "Veil of Many Faces" + desc = "Disguise yourself in the illusion of another identity." + button_icon_state = "power_veil" + bloodcost = 15 + cooldown = 100 + amToggle = TRUE + bloodsucker_can_buy = TRUE + warn_constant_cost = TRUE + + // Outfit Vars + var/list/original_items = list() + + // Identity Vars + var/prev_gender + var/prev_skin_tone + var/prev_hair_style + var/prev_facial_hair_style + var/prev_hair_color + var/prev_facial_hair_color + var/prev_underwear + var/prev_undershirt + var/prev_socks + var/prev_disfigured + var/list/prev_features // For lizards and such + + +/datum/action/bloodsucker/veil/CheckCanUse(display_error) + if(!..(display_error))// DEFAULT CHECKS + return FALSE + + return TRUE + + +/datum/action/bloodsucker/veil/ActivatePower() + + cast_effect() // POOF + + //if (blahblahblah) + // Disguise_Outfit() + + Disguise_FaceName() + + +/datum/action/bloodsucker/veil/proc/Disguise_Outfit() + + // Step One: Back up original items + + + + +/datum/action/bloodsucker/veil/proc/Disguise_FaceName() + + // Change Name/Voice + var/mob/living/carbon/human/H = owner + H.name_override = H.dna.species.random_name(H.gender) + H.name = H.name_override + H.SetSpecialVoice(H.name_override) + to_chat(owner, "You mystify the air around your person. Your identity is now altered.") + + // Store Prev Appearance + prev_gender = H.gender + prev_skin_tone = H.skin_tone + prev_hair_style = H.hair_style + prev_facial_hair_style = H.facial_hair_style + prev_hair_color = H.hair_color + prev_facial_hair_color = H.facial_hair_color + prev_underwear = H.underwear + prev_undershirt = H.undershirt + prev_socks = H.socks + //prev_eye_color + prev_disfigured = HAS_TRAIT(H, TRAIT_DISFIGURED) // I was disfigured! //prev_disabilities = H.disabilities + prev_features = H.dna.features + + // Change Appearance + H.gender = pick(MALE, FEMALE) + H.skin_tone = random_skin_tone() + H.hair_style = random_hair_style(H.gender) + H.facial_hair_style = pick(random_facial_hair_style(H.gender),"Shaved") + H.hair_color = random_short_color() + H.facial_hair_color = H.hair_color + H.underwear = random_underwear(H.gender) + H.undershirt = random_undershirt(H.gender) + H.socks = random_socks(H.gender) + //H.eye_color = random_eye_color() + REMOVE_TRAIT(H, TRAIT_DISFIGURED, null) // + H.dna.features = random_features() + + // Apply Appearance + H.update_body() // Outfit and underware, also body. + //H.update_mutant_bodyparts() // Lizard tails etc + H.update_hair() + H.update_body_parts() + + // Wait here til we deactivate power or go unconscious + var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + while (ContinueActive(owner) && istype(bloodsuckerdatum))//active && owner && owner.stat == CONSCIOUS) + bloodsuckerdatum.AddBloodVolume(-0.2) + sleep(10) + + // Wait for a moment if you fell unconscious... + if (owner && owner.stat > CONSCIOUS) + sleep(50) + + +/datum/action/bloodsucker/veil/DeactivatePower(mob/living/user = owner, mob/living/target) + ..() + if (ishuman(user)) + var/mob/living/carbon/human/H = user + + // Revert Identity + H.UnsetSpecialVoice() + H.name_override = null + H.name = H.real_name + + // Revert Appearance + H.gender = prev_gender + H.skin_tone = prev_skin_tone + H.hair_style = prev_hair_style + H.facial_hair_style = prev_facial_hair_style + H.hair_color = prev_hair_color + H.facial_hair_color = prev_facial_hair_color + H.underwear = prev_underwear + H.undershirt = prev_undershirt + H.socks = prev_socks + + //H.disabilities = prev_disabilities // Restore HUSK, CLUMSY, etc. + if (prev_disfigured) + ADD_TRAIT(H, TRAIT_DISFIGURED, "husk") // NOTE: We are ASSUMING husk. // H.status_flags |= DISFIGURED // Restore "Unknown" disfigurement + H.dna.features = prev_features + + // Apply Appearance + H.update_body() // Outfit and underware, also body. + H.update_hair() + H.update_body_parts() // Body itself, maybe skin color? + + cast_effect() // POOF + + + + + // CAST EFFECT // // General effect (poof, splat, etc) when you cast. Doesn't happen automatically! +/datum/action/bloodsucker/veil/proc/cast_effect() + // Effect + playsound(get_turf(owner), 'sound/magic/smoke.ogg', 20, 1) + var/datum/effect_system/steam_spread/puff = new /datum/effect_system/steam_spread/() + puff.effect_type = /obj/effect/particle_effect/smoke/vampsmoke + puff.set_up(3, 0, get_turf(owner)) + puff.attach(owner) // OPTIONAL + puff.start() + owner.spin(8, 1) // Spin around like a loon. + + ..() + +/obj/effect/particle_effect/smoke/vampsmoke + opaque = FALSE + amount = 0 + lifetime = 0 +/obj/effect/particle_effect/smoke/vampsmoke/fade_out(frames = 6) + ..(frames) diff --git a/code/modules/antagonists/bloodsucker/powers/v_distress.dm b/code/modules/antagonists/bloodsucker/powers/v_distress.dm new file mode 100644 index 0000000000..ebf4ee2e21 --- /dev/null +++ b/code/modules/antagonists/bloodsucker/powers/v_distress.dm @@ -0,0 +1,13 @@ + + + +/* +/datum/action/bloodsucker/vassal/distress + name = "Distress" + desc = "Call out to your master and other vassals for aid" + button_icon_state = "power_recup" + amToggle = TRUE + bloodcost = 10 + cooldown = 100 + not_bloodsucker = TRUE +*/ diff --git a/code/modules/antagonists/bloodsucker/powers/v_recuperate.dm b/code/modules/antagonists/bloodsucker/powers/v_recuperate.dm new file mode 100644 index 0000000000..f972e1f0aa --- /dev/null +++ b/code/modules/antagonists/bloodsucker/powers/v_recuperate.dm @@ -0,0 +1,57 @@ + + + + +/datum/action/bloodsucker/vassal/recuperate + name = "Sanguine Recuperation" + desc = "Slowly heal brute damage while active. This process is exhausting, and requires some of your tainted blood." + button_icon_state = "power_recup" + amToggle = TRUE + bloodcost = 5 + cooldown = 100 + + + + // Deal STAMINA damage over time, trickle down blood, and heal wounds. + +/datum/action/bloodsucker/vassal/recuperate/CheckCanUse(display_error) + if(!..(display_error))// DEFAULT CHECKS + return FALSE + if (owner.stat >= DEAD) + return FALSE + var/mob/living/carbon/C = owner + if (C.getBruteLoss() <= 0) + if (display_error) + to_chat(owner, "You have no brute damage to recover from.") + return FALSE + return TRUE + +/datum/action/bloodsucker/vassal/recuperate/ActivatePower() + to_chat(owner, "Your muscles clench and your skin crawls as your master's immortal blood knits your wounds and gives you stamina.") + + var/mob/living/carbon/C = owner + var/mob/living/carbon/human/H + if (ishuman(owner)) + H = owner + + while (ContinueActive(owner)) + var/bruteheal = min(C.getBruteLoss(), 1.5) + C.heal_overall_damage(bruteheal) + C.blood_volume -= 0.6 + if (C.getStaminaLoss() < 60) + C.adjustStaminaLoss(25, forced = TRUE) + // Stop Bleeding + if (istype(H) && H.bleed_rate > 0 && rand(20) == 0) + H.bleed_rate -- + + C.Jitter(5) + + + sleep(20) + + // DONE! + //DeactivatePower(owner) + + +/datum/action/bloodsucker/vassal/recuperate/ContinueActive(mob/living/user, mob/living/target) + return ..() && user.stat <= DEAD && user.blood_volume > 0 && user.getBruteLoss() > 0 diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm index 2356bb16eb..e863dc8860 100644 --- a/code/modules/clothing/neck/_neck.dm +++ b/code/modules/clothing/neck/_neck.dm @@ -66,7 +66,9 @@ var/obj/item/organ/heart/heart = M.getorganslot(ORGAN_SLOT_HEART) var/obj/item/organ/lungs/lungs = M.getorganslot(ORGAN_SLOT_LUNGS) - if(!(M.stat == DEAD || (HAS_TRAIT(M, TRAIT_FAKEDEATH)))) + if (!do_mob(user,M,60)) // Stethoscope should take a moment to listen + return // FAIL + if(!(M.stat == DEAD || (HAS_TRAIT(M, TRAIT_FAKEDEATH)) || (HAS_TRAIT(M, TRAIT_NOPULSE)))) if(heart && istype(heart)) heart_strength = "an unstable" if(heart.beating) diff --git a/code/modules/crafting/craft.dm b/code/modules/crafting/craft.dm index 795515835e..f310ae3887 100644 --- a/code/modules/crafting/craft.dm +++ b/code/modules/crafting/craft.dm @@ -6,6 +6,7 @@ CAT_WEAPONRY, CAT_ROBOT, CAT_MISC, + CAT_STRUCTURE, CAT_PRIMAL, CAT_FOOD, CAT_CLOTHING) @@ -439,4 +440,4 @@ /datum/mind/proc/teach_crafting_recipe(R) if(!learned_recipes) learned_recipes = list() - learned_recipes |= R \ No newline at end of file + learned_recipes |= R diff --git a/code/modules/language/vampiric.dm b/code/modules/language/vampiric.dm new file mode 100644 index 0000000000..e03fc235ba --- /dev/null +++ b/code/modules/language/vampiric.dm @@ -0,0 +1,27 @@ +// VAMPIRE LANGUAGE // + +/datum/language/vampiric + name = "Blah-Sucker" + desc = "The native language of the Bloodsucker elders, learned intuitively by Fledglings as they pass from death into immortality." + speech_verb = "growls" + ask_verb = "growls" + exclaim_verb = "snarls" + whisper_verb = "hisses" + key = "b" + space_chance = 40 + default_priority = 90 + + flags = TONGUELESS_SPEECH | LANGUAGE_HIDE_ICON_IF_NOT_UNDERSTOOD // Hide the icon next to your text if someone doesn't know this language. + syllables = list( + "luk","cha","no","kra","pru","chi","busi","tam","pol","spu","och", // Start: Vampiric + "umf","ora","stu","si","ri","li","ka","red","ani","lup","ala","pro", + "to","siz","nu","pra","ga","ump","ort","a","ya","yach","tu","lit", + "wa","mabo","mati","anta","tat","tana","prol", + "tsa","si","tra","te","ele","fa","inz", // Start: Romanian + "nza","est","sti","ra","pral","tsu","ago","esch","chi","kys","praz", // Start: Custom + "froz","etz","tzil", + "t'","k'","t'","k'","th'","tz'" + ) + + icon_state = "bloodsucker" + icon = 'icons/mob/hud.dmi' diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index 757aadaea1..a0bf818f46 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -36,6 +36,9 @@ if(bleed_rate <= 0) bleed_rate = 0 + if (HAS_TRAIT(src, TRAIT_NOPULSE)) //Bloodsuckers don't need to be here. + return + if(bodytemperature >= TCRYO && !(HAS_TRAIT(src, TRAIT_NOCLONE))) //cryosleep or husked people do not pump the blood. //Blood regeneration if there is some space diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm index 21541e8c28..8042cf1f90 100644 --- a/code/modules/mob/living/carbon/damage_procs.dm +++ b/code/modules/mob/living/carbon/damage_procs.dm @@ -65,6 +65,8 @@ /mob/living/carbon/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE) + if (!forced && amount < 0 && HAS_TRAIT(src,TRAIT_NONATURALHEAL)) + return FALSE if(!forced && (status_flags & GODMODE)) return FALSE if(amount > 0) @@ -74,6 +76,8 @@ return amount /mob/living/carbon/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE) + if (!forced && amount < 0 && HAS_TRAIT(src,TRAIT_NONATURALHEAL)) // FULPSTATION 5/8/19 - Vamps don't heal naturally. + return FALSE if(!forced && (status_flags & GODMODE)) return FALSE if(amount > 0) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index c9e2bbb29b..afb1852000 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -15,6 +15,13 @@ . = list("*---------*\nThis is [!obscure_name ? name : "Unknown"]!") + var/vampDesc = ReturnVampExamine(user) // Vamps recognize the names of other vamps. + var/vassDesc = ReturnVassalExamine(user) // Vassals recognize each other's marks. + if (vampDesc != "") // If we don't do it this way, we add a blank space to the string...something to do with this --> . += "" + . += vampDesc + if (vassDesc != "") + . += vassDesc + var/list/obscured = check_obscured_slots() var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE)) @@ -237,7 +244,7 @@ if(DISGUST_LEVEL_DISGUSTED to INFINITY) msg += "[t_He] look[p_s()] extremely disgusted.\n" - if(blood_volume < (BLOOD_VOLUME_SAFE*blood_ratio)) + if(ShowAsPaleExamine()) msg += "[t_He] [t_has] pale skin.\n" if(bleedsuppress) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 7ff4f355d5..b8409a8f55 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1279,6 +1279,8 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) //////// /datum/species/proc/handle_digestion(mob/living/carbon/human/H) + if(HAS_TRAIT(src, TRAIT_NOHUNGER)) + return //hunger is for BABIES //The fucking TRAIT_FAT mutation is the dumbest shit ever. It makes the code so difficult to work with if(HAS_TRAIT(H, TRAIT_FAT))//I share your pain, past coder. diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 3c587a05dd..b7bff8f78e 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -659,6 +659,9 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put //used in human and monkey handle_environment() /mob/living/carbon/proc/natural_bodytemperature_stabilization() + if (HAS_TRAIT(src, TRAIT_COLDBLOODED)) + return 0 //Return 0 as your natural temperature. Species proc handle_environment() will adjust your temperature based on this. + var/body_temperature_difference = BODYTEMP_NORMAL - bodytemperature switch(bodytemperature) if(-INFINITY to BODYTEMP_COLD_DAMAGE_LIMIT) //Cold damage limit is 50 below the default, the temperature where you start to feel effects. diff --git a/code/modules/mob/living/simple_animal/friendly/cockroach.dm b/code/modules/mob/living/simple_animal/friendly/cockroach.dm index c85890df88..26d4691d83 100644 --- a/code/modules/mob/living/simple_animal/friendly/cockroach.dm +++ b/code/modules/mob/living/simple_animal/friendly/cockroach.dm @@ -3,6 +3,7 @@ desc = "This station is just crawling with bugs." icon_state = "cockroach" icon_dead = "cockroach" + blood_volume = 50 health = 1 maxHealth = 1 turns_per_move = 5 diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm index d7d673ff8b..9c3e5b5def 100644 --- a/code/modules/mob/living/simple_animal/friendly/crab.dm +++ b/code/modules/mob/living/simple_animal/friendly/crab.dm @@ -8,6 +8,7 @@ speak_emote = list("clicks") emote_hear = list("clicks.") emote_see = list("clacks.") + blood_volume = 350 speak_chance = 1 turns_per_move = 5 butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 1) diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index bf45c9cc73..5b962b2dd8 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -10,6 +10,7 @@ emote_see = list("runs in a circle.", "shakes.") speak_chance = 1 turns_per_move = 5 + blood_volume = 250 see_in_dark = 6 maxHealth = 5 health = 5 diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm index cc54ad3bef..4856ba2176 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm @@ -6,6 +6,7 @@ icon_dead = "bat_dead" icon_gib = "bat_dead" turns_per_move = 1 + blood_volume = 250 response_help = "brushes aside" response_disarm = "flails at" response_harm = "hits" diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index ea86ac8963..c8d9a2eeb1 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -4,6 +4,7 @@ health = 20 maxHealth = 20 gender = PLURAL //placeholder + blood_volume = 550 //How much blud it has for bloodsucking status_flags = CANPUSH diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 2c8935c786..1a836c06cf 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -366,6 +366,9 @@ if(m_intent == MOVE_INTENT_RUN) m_intent = MOVE_INTENT_WALK else + if (HAS_TRAIT(src,TRAIT_NORUNNING)) // FULPSTATION 7/10/19 So you can't run during fortitude. + to_chat(src, "You find yourself unable to run.") + return FALSE m_intent = MOVE_INTENT_RUN if(hud_used && hud_used.static_inventory) for(var/obj/screen/mov_intent/selector in hud_used.static_inventory) @@ -401,4 +404,4 @@ return TRUE /mob/proc/canZMove(direction, turf/target) - return FALSE \ No newline at end of file + return FALSE diff --git a/code/modules/surgery/organs/tongue.dm b/code/modules/surgery/organs/tongue.dm index 6b435f282f..0fbd8c8406 100644 --- a/code/modules/surgery/organs/tongue.dm +++ b/code/modules/surgery/organs/tongue.dm @@ -22,6 +22,7 @@ /datum/language/ratvar, /datum/language/aphasia, /datum/language/slime, + /datum/language/vampiric, )) healing_factor = STANDARD_ORGAN_HEALING*5 //Fast!! decay_factor = STANDARD_ORGAN_DECAY/2 diff --git a/config/game_options.txt b/config/game_options.txt index a44c68226e..3b031bb5b9 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -92,6 +92,7 @@ PROBABILITY SECRET_EXTENDED 0 PROBABILITY DEVIL 0 PROBABILITY DEVIL_AGENTS 0 PROBABILITY CLOWNOPS 0 +PROBABILITY BLOODSUCKER 0 ## You probably want to keep sandbox off by default for secret and random. PROBABILITY SANDBOX 0 @@ -114,6 +115,7 @@ CONTINUOUS CLOCKWORK_CULT CONTINUOUS CHANGELING CONTINUOUS WIZARD #CONTINUOUS MONKEY +CONTINUOUS BLOODSUCKER ##Note: do not toggle continuous off for these modes, as they have no antagonists and would thus end immediately! diff --git a/icons/mob/actions/bloodsucker.dmi b/icons/mob/actions/bloodsucker.dmi new file mode 100644 index 0000000000000000000000000000000000000000..c08509dbbd42d3b5c6a2da3414cc6cd462d6c777 GIT binary patch literal 16808 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 mu<#_v3}|>B&iEN@#5* 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 S)$&2WpR&Bh%aZ4BKK>8T5L%l6 literal 15921 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 diff --git a/icons/mob/inhands/weapons/melee_lefthand.dmi b/icons/mob/inhands/weapons/melee_lefthand.dmi index 092881ee01d67305482b803b86870a841116e3b5..fc82db43ae2eaefabccf3e722b9673f61e7cd839 100644 GIT binary patch delta 2335 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 T+LP7r$E3yXh)n9}3ovdf> zv93G6cOrbut7wKQNUvUYIoJKmZO^k#1h=V)vNWwWa0KFTpP(W{^|XR2@QMi$#}2gr z)kS`wrE9bow`_Ar-6sOUGcrpC7zg7%oB!>;B5XEigx})X=BiFRsJe<0Bh@^UX0zjfcnVdP(NMoe@ zWoSAMtl82e(rd%GboCp)b8tci$wR7lUoP@^5TiR?^tTyJ*@>({ThCbgxOv1m84vSo zHPd*OO|V1?UE(2rBdx}11R#Wtvdx~<%FAjus?8i$du1LM zF7l}2T4@qbCb6;O2{ZMYqj~A|X_CINmYU%d`nWMwQ*2z;zD_^4L0(LZI`1h};tF%LbHF z#aK!HyBKU8gqab29UE|{g~8Te%TmYZ&b@zetnjd0?mX)YQ95hZ&A?n=WM{#KX6IUP z=CfCfp*`w$hdK==h_6M))xK6IDH9UyPVtX;hSp^p_Adgv`6qXeAGhsKwI!baEGwW( z64NjYm%qtW=dA10<(|R}>8C>l0iyQR+z68c2QIAl-tD|gCw_dT90;&PlEH_e5OV6z)9v29BL<&k*jEC!ua#4de)S<|C{lXTi0v zV@bk3UjJVc2oxPvQF*Y84;frpNE-9Ng%P9MCQGsf40&`0iA&~vm@cD+irocvB zfG2op_e^h=7NwuH9ao0xc-SgKiB`ufPqz2xBLc(hvIo4|EPC^eOf@in8K6l$>v<>6 z7WsM2C=~`%c=phz=jv)W5?Efuj;2*MM&Rdfc*^GkW z8$0M{jE~=UnjZlz42LEE3gNqlJ}XTC14%D`$lC99Sxrp?wkT()C;M;5x|+tO;~dGp zD)$8wgi%r>!(mt;IdduBx*~9QMFNw4Lj?E7ep~3zlR;?FTM@RgPuY3{)syh+z~dV` z$T@zv2#(P=;8BWaIBZ2t92wH91@NeVHSd%@4|oG}WPPWD%8aRMBOG*D(R(oqVU>eb z`S+0kSYZ$Iio4S>FX<2>qR1$~F=C2BAfv4XVbSu+J+7?%($BNKn)lYYThlFS4VD-3 zW5f42q?MxPb-#e5Dbu}5>H8z?Jjyuz00ErGi(3F5&4*8Hi(yZcedFKEkr9>ux(Lnn z<}LM?40V|lpa6xP=Prv;!@8!76=6RAv&?O|uglPEO^=U8YVtLGF9W9irqSRg4}lne z5OXsjrCUDfsE3UO<82y_0b`{#4^$fq>2)iGEg6p{l+|}+s4?E>w4ASyCcb!?F!Je~ zwk3dejbODN8TKCyO06t$d&LGd_)sn5`QNSDoWJxg25hSQM;2XBzP&}pr&JFQH>v0| zTmW+@zVnisyS1#l2hd{}hkAnw{F4mcpv~$OuMxLHH!o(CRP1Ru%HcavfsPt?x@0j? zO&9Im!nC8B3VJtIUBe=s_W+kRR(m=37dV{835o3P3WBXNyv3;1(1=Q%=S^Pa(32!#w&xtlOYwQA$fy;cC$*3n}kJn9v|XaBH8doeQg2qU5De-lY7Xw6?G}uR7xy F^FMI&2?ziH diff --git a/icons/mob/inhands/weapons/melee_righthand.dmi b/icons/mob/inhands/weapons/melee_righthand.dmi index ede430390c72383e7b0250430b34cac72726902f..ed83aea17fcd600af170116c026e4e92c1995814 100644 GIT binary patch delta 2304 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 E0GWc+TmS$7 delta 4507 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 literal 0 HcmV?d00001 diff --git a/icons/obj/vamp_obj.dmi b/icons/obj/vamp_obj.dmi new file mode 100644 index 0000000000000000000000000000000000000000..89718773ddae014a17c494d19d980313ddaaa2ad GIT binary patch literal 8966 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 literal 0 HcmV?d00001 diff --git a/sound/bloodsucker/BloodsuckerAlert.ogg b/sound/bloodsucker/BloodsuckerAlert.ogg new file mode 100644 index 0000000000000000000000000000000000000000..686f15bb711eae7f062f530453bf9ff42abfc0cc GIT binary patch literal 218645 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�l8GPyI#u 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
  • W_eO@b4Zr#4y}T=C86YD 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 as`5~*RL6Gms#0UyaI+b&xRW&98T$wA*=|Pw literal 0 HcmV?d00001 diff --git a/tgstation.dme b/tgstation.dme index 532422e792..b61bc9dacc 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -25,6 +25,7 @@ #include "code\__DEFINES\antagonists.dm" #include "code\__DEFINES\atmospherics.dm" #include "code\__DEFINES\atom_hud.dm" +#include "code\__DEFINES\bloodsucker.dm" #include "code\__DEFINES\bsql.config.dm" #include "code\__DEFINES\bsql.dm" #include "code\__DEFINES\callbacks.dm" @@ -554,6 +555,8 @@ #include "code\game\gamemodes\game_mode.dm" #include "code\game\gamemodes\objective.dm" #include "code\game\gamemodes\objective_items.dm" +#include "code\game\gamemodes\bloodsucker\bloodsucker.dm" +#include "code\game\gamemodes\bloodsucker\hunter.dm" #include "code\game\gamemodes\brother\traitor_bro.dm" #include "code\game\gamemodes\changeling\changeling.dm" #include "code\game\gamemodes\changeling\traitor_chan.dm" @@ -1213,6 +1216,35 @@ #include "code\modules\antagonists\blob\blob\blobs\resource.dm" #include "code\modules\antagonists\blob\blob\blobs\shield.dm" #include "code\modules\antagonists\blood_contract\blood_contract.dm" +#include "code\modules\antagonists\bloodsucker\bloodsucker_flaws.dm" +#include "code\modules\antagonists\bloodsucker\bloodsucker_integration.dm" +#include "code\modules\antagonists\bloodsucker\bloodsucker_life.dm" +#include "code\modules\antagonists\bloodsucker\bloodsucker_objectives.dm" +#include "code\modules\antagonists\bloodsucker\bloodsucker_powers.dm" +#include "code\modules\antagonists\bloodsucker\bloodsucker_sunlight.dm" +#include "code\modules\antagonists\bloodsucker\bloodsucker_ui.dm" +#include "code\modules\antagonists\bloodsucker\datum_bloodsucker.dm" +#include "code\modules\antagonists\bloodsucker\datum_hunter.dm" +#include "code\modules\antagonists\bloodsucker\datum_vassal.dm" +#include "code\modules\antagonists\bloodsucker\items\bloodsucker_items.dm" +#include "code\modules\antagonists\bloodsucker\items\bloodsucker_organs.dm" +#include "code\modules\antagonists\bloodsucker\items\bloodsucker_stake.dm" +#include "code\modules\antagonists\bloodsucker\objects\bloodsucker_coffin.dm" +#include "code\modules\antagonists\bloodsucker\objects\bloodsucker_crypt.dm" +#include "code\modules\antagonists\bloodsucker\objects\bloodsucker_lair.dm" +#include "code\modules\antagonists\bloodsucker\powers\bs_brawn.dm" +#include "code\modules\antagonists\bloodsucker\powers\bs_cloak.dm" +#include "code\modules\antagonists\bloodsucker\powers\bs_feed.dm" +#include "code\modules\antagonists\bloodsucker\powers\bs_fortitude.dm" +#include "code\modules\antagonists\bloodsucker\powers\bs_gohome.dm" +#include "code\modules\antagonists\bloodsucker\powers\bs_haste.dm" +#include "code\modules\antagonists\bloodsucker\powers\bs_lunge.dm" +#include "code\modules\antagonists\bloodsucker\powers\bs_masquerade.dm" +#include "code\modules\antagonists\bloodsucker\powers\bs_mesmerize.dm" +#include "code\modules\antagonists\bloodsucker\powers\bs_trespass.dm" +#include "code\modules\antagonists\bloodsucker\powers\bs_veil.dm" +#include "code\modules\antagonists\bloodsucker\powers\v_distress.dm" +#include "code\modules\antagonists\bloodsucker\powers\v_recuperate.dm" #include "code\modules\antagonists\brainwashing\brainwashing.dm" #include "code\modules\antagonists\brother\brother.dm" #include "code\modules\antagonists\changeling\cellular_emporium.dm" @@ -1918,6 +1950,7 @@ #include "code\modules\language\ratvarian.dm" #include "code\modules\language\slime.dm" #include "code\modules\language\swarmer.dm" +#include "code\modules\language\vampiric.dm" #include "code\modules\language\xenocommon.dm" #include "code\modules\library\lib_codex_gigas.dm" #include "code\modules\library\lib_items.dm" From c9c648f7ad552bc72837b782c708147bbd8e90e4 Mon Sep 17 00:00:00 2001 From: Artur Date: Sat, 30 Nov 2019 00:07:02 +0200 Subject: [PATCH 09/64] Whoops forgot about citadel restricted jobs --- code/game/gamemodes/bloodsucker/bloodsucker.dm | 4 ++-- code/game/gamemodes/bloodsucker/hunter.dm | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/gamemodes/bloodsucker/bloodsucker.dm b/code/game/gamemodes/bloodsucker/bloodsucker.dm index dd62c8bb8d..2f3514bf6c 100644 --- a/code/game/gamemodes/bloodsucker/bloodsucker.dm +++ b/code/game/gamemodes/bloodsucker/bloodsucker.dm @@ -17,7 +17,7 @@ antag_flag = ROLE_BLOODSUCKER false_report_weight = 1 restricted_jobs = list("AI","Cyborg") - protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Deputy") + protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster", "Chaplain") required_players = 0 required_enemies = 1 recommended_enemies = 4 @@ -291,4 +291,4 @@ return TRUE /datum/game_mode/proc/remove_vassal(datum/mind/vassal) - vassal.remove_antag_datum(ANTAG_DATUM_VASSAL) + vassal.remove_antag_datum(ANTAG_D \ No newline at end of file diff --git a/code/game/gamemodes/bloodsucker/hunter.dm b/code/game/gamemodes/bloodsucker/hunter.dm index e575dacded..2092db3154 100644 --- a/code/game/gamemodes/bloodsucker/hunter.dm +++ b/code/game/gamemodes/bloodsucker/hunter.dm @@ -15,7 +15,7 @@ // Set Restricted Jobs if(CONFIG_GET(flag/protect_roles_from_antagonist)) - no_hunter_jobs += list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Deputy") + no_hunter_jobs += list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") if(CONFIG_GET(flag/protect_assistant_from_antagonist)) no_hunter_jobs += "Assistant" From a6e6274039a4994bc8e4f4d8a76a1bbb07cacac1 Mon Sep 17 00:00:00 2001 From: Artur Date: Sat, 30 Nov 2019 01:21:07 +0200 Subject: [PATCH 10/64] Reviewer fixes and spacing --- .../game/gamemodes/bloodsucker/bloodsucker.dm | 19 +-- code/game/gamemodes/bloodsucker/hunter.dm | 2 +- .../bloodsucker/bloodsucker_integration.dm | 4 +- .../bloodsucker/bloodsucker_life.dm | 11 +- .../bloodsucker/bloodsucker_powers.dm | 140 +----------------- .../bloodsucker/powers/bs_brawn.dm | 22 +-- .../bloodsucker/powers/bs_cloak.dm | 5 +- .../antagonists/bloodsucker/powers/bs_feed.dm | 26 +--- .../bloodsucker/powers/bs_gohome.dm | 5 +- .../bloodsucker/powers/bs_haste.dm | 5 +- .../bloodsucker/powers/bs_lunge.dm | 18 --- .../bloodsucker/powers/bs_mesmerize.dm | 5 +- .../bloodsucker/powers/bs_trespass.dm | 5 +- .../antagonists/bloodsucker/powers/bs_veil.dm | 5 +- .../bloodsucker/powers/v_distress.dm | 13 -- .../bloodsucker/powers/v_recuperate.dm | 5 +- tgstation.dme | 1 - 17 files changed, 53 insertions(+), 238 deletions(-) delete mode 100644 code/modules/antagonists/bloodsucker/powers/v_distress.dm diff --git a/code/game/gamemodes/bloodsucker/bloodsucker.dm b/code/game/gamemodes/bloodsucker/bloodsucker.dm index 2f3514bf6c..c0f5f80c1f 100644 --- a/code/game/gamemodes/bloodsucker/bloodsucker.dm +++ b/code/game/gamemodes/bloodsucker/bloodsucker.dm @@ -161,7 +161,7 @@ // [FLEDGLING] if (creator) - A = new ANTAG_DATUM_BLOODSUCKER(bloodsucker) + A = new (bloodsucker) A.creator = creator bloodsucker.add_antag_datum(A) // Log @@ -200,9 +200,10 @@ if (!am_valid) H.set_species(/datum/species/human) H.real_name = H.client.prefs.custom_names["human"] - if (H.wear_id) - H.wear_id.GetID().registered_name = H.real_name - H.wear_id.GetID().update_label() + var/obj/item/card/id/ID = H.wear_id?.GetID() + if(ID) + ID.registered_name = H.real_name + ID.update_label() /datum/game_mode/proc/can_make_vassal(mob/living/target, datum/mind/creator, display_warning=TRUE)//, check_antag_or_loyal=FALSE) @@ -253,7 +254,6 @@ // No List? if(!islist(M.antag_datums) || M.antag_datums.len == 0) return FALSE - // Am I NOT an invalid Antag? NOTE: We already excluded non-antags above. Don't worry about the "No List?" check in AmInvalidIntag() return !AmInvalidAntag(M) @@ -261,34 +261,29 @@ // No List? if(!islist(M.antag_datums) || M.antag_datums.len == 0) return FALSE - // Does even ONE antag appear in this mind that isn't in the list? Then FAIL! for(var/datum/antagonist/antag_datum in M.antag_datums) if (!(antag_datum.type in vassal_allowed_antags)) // vassal_allowed_antags is a list stored in the game mode, above. //message_admins("DEBUG VASSAL: Found Invalid: [antag_datum] // [antag_datum.type]") return TRUE - //message_admins("DEBUG VASSAL: Valid Antags! (total of [M.antag_datums.len])") // WHEN YOU DELETE THE ABOVE: Remove the 3 second timer on converting the vassal too. return FALSE - /datum/game_mode/proc/make_vassal(mob/living/target, datum/mind/creator) if (!can_make_vassal(target,creator)) return FALSE // Make Vassal - var/datum/antagonist/vassal/V = new ANTAG_DATUM_VASSAL(target.mind) + var/datum/antagonist/vassal/V = new (target.mind) var/datum/antagonist/bloodsucker/B = creator.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) V.master = B target.mind.add_antag_datum(V, V.master.get_team()) // Update Bloodsucker Title (we're a daddy now) B.SelectTitle(am_fledgling = FALSE) // Only works if you have no title yet. - // Log message_admins("[target] has become a Vassal, and is enslaved to [creator].") log_admin("[target] has become a Vassal, and is enslaved to [creator].") - return TRUE /datum/game_mode/proc/remove_vassal(datum/mind/vassal) - vassal.remove_antag_datum(ANTAG_D \ No newline at end of file + vassal.remove_antag_datum(ANTAG_DATUM_VASSAL) diff --git a/code/game/gamemodes/bloodsucker/hunter.dm b/code/game/gamemodes/bloodsucker/hunter.dm index 2092db3154..49b97b0b21 100644 --- a/code/game/gamemodes/bloodsucker/hunter.dm +++ b/code/game/gamemodes/bloodsucker/hunter.dm @@ -43,7 +43,7 @@ /datum/game_mode/proc/finalize_monster_hunters(monster_count = 4) var/amEvil = TRUE // First hunter is always an evil boi for(var/datum/mind/hunter in vamphunters) - var/datum/antagonist/vamphunter/A = new ANTAG_DATUM_HUNTER(hunter) + var/datum/antagonist/vamphunter/A = new (hunter) A.bad_dude = amEvil hunter.add_antag_datum(A) amEvil = FALSE // Every other hunter is just a boring greytider diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_integration.dm b/code/modules/antagonists/bloodsucker/bloodsucker_integration.dm index a48f9c8114..0fa681e435 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_integration.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_integration.dm @@ -8,11 +8,11 @@ /mob/living/proc/HaveBloodsuckerBodyparts(var/displaymessage="") // displaymessage can be something such as "rising from death" for Torpid Sleep. givewarningto is the person receiving messages. - if (!getorganslot("heart")) + if (!getorganslot(ORGAN_SLOT_HEART)) if (displaymessage != "") to_chat(src, "Without a heart, you are incapable of [displaymessage].") return FALSE - if (!get_bodypart("head")) + if (!get_bodypart(BODY_ZONE_HEAD)) if (displaymessage != "") to_chat(src, "Without a head, you are incapable of [displaymessage].") return FALSE diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm index f86b3c60ad..be557148bd 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm @@ -103,7 +103,7 @@ // Reagents (NOT Blood!) if(target.reagents && target.reagents.total_volume) - target.reagents.reaction(owner.current, INGEST, 1 / target.reagents.total_volume) // Run Reaction: what happens when what they have mixes with what I have? + target.reagents.reaction(owner.current, INGEST, 1) // Run Reaction: what happens when what they have mixes with what I have? target.reagents.trans_to(owner.current, 1) // Run transfer of 1 unit of reagent from them to me. // Blood Gulp Sound @@ -114,38 +114,47 @@ description = "I have fed greedly from that which nourishes me.\n" mood_change = 10 timeout = 900 + /datum/mood_event/drankblood_bad description = "I drank the blood of a lesser creature. Disgusting.\n" mood_change = -4 timeout = 900 + /datum/mood_event/drankblood_dead description = "I drank dead blood. I am better than this.\n" mood_change = -7 timeout = 900 + /datum/mood_event/drankblood_synth description = "I drank synthetic blood. What is wrong with me?\n" mood_change = -7 timeout = 900 + /datum/mood_event/drankkilled description = "I drank from my victim until they died. I feel...less human.\n" mood_change = -12 timeout = 6000 + /datum/mood_event/madevamp description = "A soul has been cursed to undeath by my own hand.\n" mood_change = -10 timeout = 10000 + /datum/mood_event/vampatefood description = "Mortal nourishment no longer sustains me. I feel unwell.\n" mood_change = -6 timeout = 1000 + /datum/mood_event/coffinsleep description = "I slept in a coffin during the day. I feel whole again.\n" mood_change = 8 timeout = 1200 + /datum/mood_event/daylight_1 description = "I slept poorly in a makeshift coffin during the day.\n" mood_change = -3 timeout = 1000 + /datum/mood_event/daylight_2 description = "I have been scorched by the unforgiving rays of the sun.\n" mood_change = -6 diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm b/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm index ad06d54485..a609a502b3 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm @@ -1,6 +1,3 @@ - - - /datum/action/bloodsucker name = "Vampiric Gift" desc = "A vampiric gift." @@ -20,8 +17,6 @@ var/active = FALSE var/cooldown = 20 // 10 ticks, 1 second. var/cooldownUntil = 0 // From action.dm: next_use_time = world.time + cooldown_time - - // Power-Related var/level_current = 0 // Can increase to yield new abilities. Each power goes up in strength each Rank. //var/level_max = 1 // @@ -45,37 +40,27 @@ desc += "

    Useable once per night." ..() - // NOTES // // click.dm <--- Where we can take over mouse clicks // spells.dm /add_ranged_ability() <--- How we take over the mouse click to use a power on a target. - /datum/action/bloodsucker/Trigger() - // Active? DEACTIVATE AND END! if (active && CheckCanDeactivate(TRUE)) DeactivatePower() return - if (!CheckCanPayCost(TRUE) || !CheckCanUse(TRUE)) return - PayCost() - if (amToggle) active = !active UpdateButtonIcon() - if (!amToggle || !active) StartCooldown() // Must come AFTER UpdateButton(), otherwise icon will revert. - ActivatePower() // NOTE: ActivatePower() freezes this power in place until it ends. - if (active) // Did we not manually disable? Handle it here. DeactivatePower() - if (amSingleUse) RemoveAfterUse() @@ -110,7 +95,7 @@ // Incap? if(must_be_capacitated) var/mob/living/L = owner - if (L.incapacitated(ignore_restraints=TRUE,ignore_grab=TRUE) || L.lying && !can_be_immobilized) + if (L.incapacitated(TRUE, TRUE) || L.lying && !can_be_immobilized) if(display_error) to_chat(owner, "Not while you're incapacitated!") return FALSE @@ -123,7 +108,6 @@ return FALSE return TRUE - /datum/action/bloodsucker/proc/StartCooldown() set waitfor = FALSE // Alpha Out @@ -140,8 +124,6 @@ button.color = rgb(255,255,255,255) button.alpha = 255 - - /datum/action/bloodsucker/proc/CheckCanDeactivate(display_error) return TRUE @@ -159,7 +141,6 @@ /datum/action/bloodsucker/proc/ActivatePower() - /datum/action/bloodsucker/proc/DeactivatePower(mob/living/user = owner, mob/living/target) active = FALSE UpdateButtonIcon() @@ -168,7 +149,6 @@ /datum/action/bloodsucker/proc/ContinueActive(mob/living/user, mob/living/target) // Used by loops to make sure this power can stay active. return active && user && (!warn_constant_cost || user.blood_volume > 0) - /datum/action/bloodsucker/proc/RemoveAfterUse() // Un-Learn Me! (GO HOME var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) @@ -176,13 +156,11 @@ bloodsuckerdatum.powers -= src Remove(owner) - /datum/action/bloodsucker/proc/Upgrade() level_current ++ /////////////////////////////////// PASSIVE POWERS /////////////////////////////////// - // New Type: Passive (Always on, no button) /datum/action/bloodsucker/passive @@ -218,18 +196,14 @@ // Click power: Begin Aim /datum/action/bloodsucker/targeted/Trigger() - if (active && CheckCanDeactivate(TRUE)) DeactivateRangedAbility() DeactivatePower() return - if (!CheckCanPayCost(TRUE) || !CheckCanUse(TRUE)) return - active = !active UpdateButtonIcon() - // Create & Link Targeting Proc var/mob/living/L = owner if (L.ranged_ability) @@ -240,13 +214,13 @@ to_chat(owner, "[message_Trigger]") /datum/action/bloodsucker/targeted/CheckCanUse(display_error) - if (!..()) - return FALSE + . = ..() + if(!.) + return if (!owner.client) // <--- We don't allow non client usage so that using powers like mesmerize will FAIL if you try to use them as ghost. Why? because ranged_abvility in spell.dm return FALSE // doesn't let you remove powers if you're not there. So, let's just cancel the power entirely. return TRUE - /datum/action/bloodsucker/targeted/DeactivatePower(mob/living/user = owner, mob/living/target) // Don't run ..(), we don't want to engage the cooldown until we USE this power! active = FALSE @@ -255,7 +229,6 @@ /datum/action/bloodsucker/targeted/proc/DeactivateRangedAbility() // Only Turned off when CLICK is disabled...aka, when you successfully clicked (or bs_proc_holder.remove_ranged_ability() - //qdel(bs_proc_holder) // Check if target is VALID (wall, turf, or character?) /datum/action/bloodsucker/targeted/proc/CheckValidTarget(atom/A) @@ -278,15 +251,12 @@ // Valid? (return true means DON'T cancel power!) if (!CheckCanPayCost(TRUE) || !CheckCanUse(TRUE) || !CheckCanTarget(A, TRUE)) return TRUE - // Skip this part so we can return TRUE right away. if (power_activates_immediately) PowerActivatedSuccessfully() // Mesmerize pays only after success. - power_in_use = TRUE // Lock us into this ability until it successfully fires off. Otherwise, we pay the blood even if we fail. FireTargetedPower(A) // We use this instead of ActivatePower(), which has no input power_in_use = FALSE - return TRUE /datum/action/bloodsucker/targeted/proc/FireTargetedPower(atom/A) @@ -294,17 +264,13 @@ /datum/action/bloodsucker/targeted/proc/PowerActivatedSuccessfully() // The power went off! We now pay the cost of the power. - PayCost() DeactivateRangedAbility() DeactivatePower() StartCooldown() // Do AFTER UpdateIcon() inside of DeactivatePower. Otherwise icon just gets wiped. /datum/action/bloodsucker/targeted/ContinueActive(mob/living/user, mob/living/target) // Used by loops to make sure this power can stay active. - return ..() // active// && user.mind && user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) - - - + return ..() // Target Proc Holder /obj/effect/proc_holder/bloodsucker var/datum/action/bloodsucker/targeted/linked_power @@ -312,102 +278,6 @@ /obj/effect/proc_holder/bloodsucker/remove_ranged_ability(msg) ..() linked_power.DeactivatePower() - //qdel(src) /obj/effect/proc_holder/bloodsucker/InterceptClickOn(mob/living/caller, params, atom/A) return linked_power.ClickWithPower(A) - - - -// P O W E R S -// * BLOOD -// ADDICTIVE: A) Your blood is dangerously addictive, and causes consumers to rendew their own blood at an increased rate (as well as heal). B) Vassals on your blood get special gifts. -// -// * HASTE -// SPRINT: A) Hastily speed in a direction faster than the eye can see. B) Spin and dizzy people you pass. C) Chance to knock down people you pass. -// LUNGE: Leap toward a location and put your target into an agressive hold. -// -// * AGILITY -// CELERITY: Dodge projectiles and even bullets. Perhaps avoid explosions! -// REFLEXES TRAIT_NOSLIPWATER, TRAIT_NOSLIPALL -// -// * STEALTH -// CLOAK: A) Vanish into the shadows when stationary. B) Moving does not break your current level of invisibility (but stops you from hiding further). -// DISGUISE: A) Bear the face and voice of a new person. B) Bear a random outfit of an unknown profession. -// -// * FEED -// A) Mute victim while Feeding (and slowly deal Stamina damage) B) Paralyze victim while feeding C) Sleep victim while Feeding -// -// * MEZMERIZE -// LOVE: Target falls in love with you. Being harmed directly causes them harm if they see it? -// STAY: Target will do everything they can to stand in the same place. -// FOLLOW: Target follows you, spouting random phrases from their history (or maybe Poly's or NPC's vocab?) -// ATTACK: Target finds a nearby non-Bloodsucker victim to attack. -// -// * EXPEL -// TAINT: Mark areas with your corrupting blood. Your coffin must remain in an area so marked to gain any benefit. Spiders, roaches, and rats will infest the area, cobwebs grow rapidly, and trespassers are overcome with fear. -// SERVITUDE: Your blood binds a mortal to your will. Vassals feel your pain and can locate you anywhere. Your death causes them agony. -// HEIR: Raise a moral corpse into a Bloodsucker. The change will take a while, and the body must be brought to a tainted coffin to rise. -// -// * NIGHTMARE -// BOGEYMAN: Terrify those who view you in your death-form, causing them to shake, pale, and drop possessions. -// HORROR: Horrified characters cannot speak, shake, and slowly push away from the source. -// - - - - - - - - - -/* POWERS: VERSION TWO - - * FEED - 1: Paralyze - 2: Unconscious - 3: Sleep - - * LUNGE - 1: Grab: Aggressive - 2: Grab from Behind: Neck - 3: Grab from Darkness: Neck - - * CLOAK - 1: Hide - 2: Move - 3: Full Speed - - * MESMERIZE - 1: Stay - 2: Mute - 3: Follow + Blind - - * BRAWN - 1: Punch Hard - 2: Open Doors and Lockers - 3: - - * HASTE - 1: Speed to location - 2: Dodge Bullets - 3: - - * VEIL - 1: - 2: - 3: - - * FORTITUDE - 1: Break Bonds and Grapples - 2: - 3: Immune to Brute Damage - - * DEMENT - 1: Shuffle Names - 2: - 3: - - -*/ diff --git a/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm b/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm index 95acab082c..a09cc1358c 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm @@ -17,8 +17,9 @@ var/upgrade_canDoor = FALSE /datum/action/bloodsucker/targeted/brawn/CheckCanUse(display_error) - if(!..(display_error))// DEFAULT CHECKS - return FALSE + . = ..() + if(!.) + return . = TRUE // Break Out of Restraints! (And then cancel) if (CheckBreakRestraints()) @@ -61,38 +62,31 @@ /datum/action/bloodsucker/targeted/brawn/FireTargetedPower(atom/A) // set waitfor = FALSE <---- DONT DO THIS!We WANT this power to hold up ClickWithPower(), so that we can unlock the power when it's done. - var/mob/living/carbon/target = A var/mob/living/user = owner - // Target Type: Mob if (isliving(target)) var/mob/living/carbon/user_C = user var/hitStrength = user_C.dna.species.punchdamagehigh * 1.25 + 2 - // Knockdown! var/powerlevel = min(7, 1 + level_current) if (rand(10 + powerlevel) >= 5) target.visible_message("[user] has knocked [target] down!", \ "[user] has knocked you down!", null, COMBAT_MESSAGE_RANGE) - target.Knockdown( min(5, rand(10, 10 * powerlevel)) ) // Chance of KO if (rand(5 + powerlevel) >= 5 && target.stat <= UNCONSCIOUS) target.Unconscious(40) - // Attack! playsound(get_turf(target), 'sound/weapons/punch4.ogg', 60, 1, -1) user.do_attack_animation(target, ATTACK_EFFECT_SMASH) var/obj/item/bodypart/affecting = target.get_bodypart(ran_zone(target.zone_selected)) target.apply_damage(hitStrength, BRUTE, affecting) - // Knockback var/send_dir = get_dir(owner, target) var/turf/T = get_ranged_target_turf(target, send_dir, powerlevel) owner.newtonian_move(send_dir) // Bounce back in 0 G target.throw_at(T, powerlevel, TRUE, owner) //new /datum/forced_movement(target, get_ranged_target_turf(target, send_dir, (hitStrength / 4)), 1, FALSE) - // Target Type: Door else if (upgrade_canDoor && istype(target, /obj/machinery/door)) playsound(get_turf(usr), 'sound/machines/airlock_alien_prying.ogg', 40, 1, -1) @@ -104,7 +98,6 @@ user.do_attack_animation(D, ATTACK_EFFECT_SMASH) playsound(get_turf(D), 'sound/effects/bang.ogg', 30, 1, -1) D.open(2) // open(2) is like a crowbar or jaws of life. - // Target Type: Closet else if (upgrade_canLocker && istype(target, /obj/structure/closet)) playsound(get_turf(usr), 'sound/machines/airlock_alien_prying.ogg', 40, 1, -1) @@ -116,7 +109,6 @@ playsound(get_turf(C), 'sound/effects/bang.ogg', 30, 1, -1) C.bust_open() - /datum/action/bloodsucker/targeted/brawn/proc/CheckBreakRestraints() if (!iscarbon(owner)) // || !owner.restrained() @@ -145,7 +137,6 @@ user_C.clear_cuffs(S,TRUE) playsound(get_turf(usr), 'sound/effects/grillehit.ogg', 80, 1, -1) return TRUE - // Destroy Leg Cuffs if(user_C.legcuffed) var/obj/O = user_C.get_item_by_slot(SLOT_LEGCUFFED) @@ -155,32 +146,25 @@ user_C.clear_cuffs(O,TRUE) playsound(get_turf(usr), 'sound/effects/grillehit.ogg', 80, 1, -1) return TRUE - return FALSE /datum/action/bloodsucker/targeted/brawn/proc/CheckEscapePuller() if (!owner.pulledby)// || owner.pulledby.grab_state <= GRAB_PASSIVE) return FALSE - var/mob/M = owner.pulledby var/pull_power = M.grab_state playsound(get_turf(M), 'sound/effects/woodhit.ogg', 75, 1, -1) - // Knock Down (if Living) if (isliving(M)) var/mob/living/L = M L.Knockdown(pull_power * 10 + 20) - // Knock Back (before Knockdown, which probably cancels pull) var/send_dir = get_dir(owner, M) var/turf/T = get_ranged_target_turf(M, send_dir, pull_power) owner.newtonian_move(send_dir) // Bounce back in 0 G M.throw_at(T, pull_power, TRUE, owner, FALSE) // Throw distance based on grab state! Harder grabs punished more aggressively. - - // /proc/log_combat(atom/user, atom/target, what_done, atom/object=null, addition=null) log_combat(owner, M, "used Brawn power") - owner.visible_message("[owner] tears free of [M]'s grasp!", \ "You shrug off [M]'s grasp!") owner.pulledby = null // It's already done, but JUST IN CASE. diff --git a/code/modules/antagonists/bloodsucker/powers/bs_cloak.dm b/code/modules/antagonists/bloodsucker/powers/bs_cloak.dm index 52d7f24f45..2612ad659e 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_cloak.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_cloak.dm @@ -16,8 +16,9 @@ var/upgrade_canMove = FALSE // Can I move around with this power? /datum/action/bloodsucker/cloak/CheckCanUse(display_error) - if(!..(display_error))// DEFAULT CHECKS - return FALSE + . = ..() + if(!.) + return // Must be Dark var/turf/T = owner.loc if(istype(T) && T.get_lumcount() > light_min) diff --git a/code/modules/antagonists/bloodsucker/powers/bs_feed.dm b/code/modules/antagonists/bloodsucker/powers/bs_feed.dm index 157938e0fb..7c4cf46e3c 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_feed.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_feed.dm @@ -17,25 +17,19 @@ var/target_grappled = FALSE // If you started grappled, then ending it will end your Feed. /datum/action/bloodsucker/feed/CheckCanUse(display_error) - if(!..(display_error))// DEFAULT CHECKS - return FALSE - + . = ..() + if(!.) + return // Wearing mask var/mob/living/L = owner if (L.is_mouth_covered()) if (display_error) to_chat(owner, "You cannot feed with your mouth covered! Remove your mask.") return FALSE - // Find my Target! if (!FindMyTarget(display_error)) // Sets feed_target within after Validating return FALSE - - // Not in correct state - //if (owner.grab_state < GRAB_PASSIVE)//GRAB_AGGRESSIVEs) - // to_chat(owner, "You aren't grabbing anyone!") - // return FALSE - + // Not in correct state // DONE! return TRUE @@ -80,7 +74,6 @@ // Default feed_target = null target_grappled = FALSE - // If you are pulling a mob, that's your target. If you don't like it, then release them. if (owner.pulling && ismob(owner.pulling)) // Check grapple target Valid @@ -89,20 +82,17 @@ target_grappled = TRUE feed_target = owner.pulling return TRUE - // Find Targets var/list/mob/living/seen_targets = view(1, owner) var/list/mob/living/seen_mobs = list() for(var/mob/living/M in seen_targets) if (isliving(M) && M != owner) seen_mobs += M - // None Seen! if (seen_mobs.len == 0) if (display_error) to_chat(owner, "You must be next to or grabbing a victim to feed from them.") return FALSE - // Check Valids... var/list/targets_valid = list() var/list/targets_dead = list() @@ -114,7 +104,6 @@ targets_valid += M else targets_dead += M - // No Living? Try dead. if (targets_valid.len == 0 && targets_dead.len > 0) targets_valid = targets_dead @@ -137,17 +126,13 @@ feed_target = pick(targets_valid)//targets[1] return TRUE - /datum/action/bloodsucker/feed/ActivatePower() // set waitfor = FALSE <---- DONT DO THIS!We WANT this power to hold up Activate(), so Deactivate() can happen after. - var/mob/living/target = feed_target // Stored during CheckCanUse(). Can be a grabbed OR adjecent character. var/mob/living/user = owner var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) - // Am I SECRET or LOUD? It stays this way the whole time! I must END IT to try it the other way. var/amSilent = (!target_grappled || owner.grab_state <= GRAB_PASSIVE) // && iscarbon(target) // Non-carbons (animals) not passive. They go straight into aggressive. - // Initial Wait var/feed_time = (amSilent ? 45 : 25) - (2.5 * level_current) feed_time = max(15, feed_time) @@ -159,7 +144,6 @@ to_chat(user, "Your feeding was interrupted.") //DeactivatePower(user,target) return - // Put target to Sleep (Bloodsuckers are immune to their own bite's sleep effect) if (!amSilent) ApplyVictimEffects(target) // Sleep, paralysis, immobile, unconscious, and mute @@ -172,7 +156,6 @@ // Pull Target Close if (!target.density) // Pull target to you if they don't take up space. target.Move(user.loc) - // Broadcast Message if (amSilent) //if (!iscarbon(target)) @@ -198,7 +181,6 @@ else // /atom/proc/visible_message(message, self_message, blind_message, vision_distance, ignored_mobs) user.visible_message("[user] closes [user.p_their()] mouth around [target]'s neck!", \ "You sink your fangs into [target]'s neck.") - // My mouth is full! ADD_TRAIT(user, TRAIT_MUTE, "bloodsucker_feed") diff --git a/code/modules/antagonists/bloodsucker/powers/bs_gohome.dm b/code/modules/antagonists/bloodsucker/powers/bs_gohome.dm index 81cfa48241..4d76b93418 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_gohome.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_gohome.dm @@ -19,8 +19,9 @@ /datum/action/bloodsucker/gohome/CheckCanUse(display_error) - if(!..(display_error))// DEFAULT CHECKS - return FALSE + . = ..() + if(!.) + return // Have No Lair (NOTE: You only got this power if you had a lair, so this means it's destroyed) var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) if (!istype(bloodsuckerdatum) || !bloodsuckerdatum.coffin) diff --git a/code/modules/antagonists/bloodsucker/powers/bs_haste.dm b/code/modules/antagonists/bloodsucker/powers/bs_haste.dm index 118bbb308c..8cfed3192a 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_haste.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_haste.dm @@ -20,8 +20,9 @@ /datum/action/bloodsucker/targeted/haste/CheckCanUse(display_error) - if(!..(display_error))// DEFAULT CHECKS - return FALSE + . = ..() + if(!.) + return // Being Grabbed if (owner.pulledby && owner.pulledby.grab_state >= GRAB_AGGRESSIVE) if (display_error) diff --git a/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm b/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm index d809bddc99..e507b3a14f 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm @@ -1,8 +1,6 @@ - // Level 1: Grapple level 2 // Level 2: Grapple 3 from Behind // Level 3: Grapple 3 from Shadows - /datum/action/bloodsucker/targeted/lunge name = "Predatory Lunge" desc = "Spring at your target and aggressively grapple them without warning. Attacks from concealment or the rear may even knock them down." @@ -15,7 +13,6 @@ must_be_capacitated = TRUE bloodsucker_can_buy = TRUE - /datum/action/bloodsucker/targeted/lunge/CheckCanUse(display_error) if(!..(display_error))// DEFAULT CHECKS return FALSE @@ -26,11 +23,9 @@ return FALSE return TRUE - /datum/action/bloodsucker/targeted/lunge/CheckValidTarget(atom/A) return isliving(A) - /datum/action/bloodsucker/targeted/lunge/CheckCanTarget(atom/A, display_error) // Check: Self if (target == owner) @@ -51,18 +46,14 @@ /datum/action/bloodsucker/targeted/lunge/FireTargetedPower(atom/A) // set waitfor = FALSE <---- DONT DO THIS!We WANT this power to hold up ClickWithPower(), so that we can unlock the power when it's done. - var/mob/living/user = owner var/mob/living/carbon/target = A var/turf/T = get_turf(target) - // Clear Vars owner.pulling = null - // Will we Knock them Down? var/do_knockdown = !is_A_facing_B(target,owner) || owner.alpha <= 0 || istype(owner.loc, /obj/structure/closet) // CAUSES: Target has their back to me, I'm invisible, or I'm in a Closet - // Step One: Heatseek toward Target's Turf walk_towards(owner, T, 0.1, 10) // NOTE: this runs in the background! to cancel it, you need to use walk(owner.current,0), or give them a new path. var/safety = 10 @@ -70,7 +61,6 @@ if(owner.incapacitated()) sleep(1) safety -- - // Did I get knocked down? if (owner && owner.incapacitated()) if (user.lying) @@ -78,8 +68,6 @@ new /datum/forced_movement(owner, get_ranged_target_turf(owner, send_dir, 1), 1, FALSE) owner.spin(10) break - - // Step Two: Check if I'm at/adjectent to Target's CURRENT turf (not original...that was just a destination) if (target.Adjacent(owner)) // LEVEL 2: If behind target, mute or unconscious! @@ -91,12 +79,6 @@ target.grabbedby(owner) // Taken from mutations.dm under changelings target.grippedby(owner, instant = TRUE) //instant aggro grab - // UNCONSCIOUS or MUTE! - //owner.start_pulling(target,GRAB_AGGRESSIVE) // GRAB_PASSIVE, GRAB_AGGRESSIVE, GRAB_NECK, GRAB_KILL - - //DeactivatePower() - - /datum/action/bloodsucker/targeted/lunge/DeactivatePower(mob/living/user = owner, mob/living/target) ..() // activate = FALSE user.update_canmove() diff --git a/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm b/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm index 1977f9717e..fc396dbeea 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm @@ -19,8 +19,9 @@ bloodsucker_can_buy = TRUE /datum/action/bloodsucker/targeted/mesmerize/CheckCanUse(display_error) - if(!..(display_error))// DEFAULT CHECKS - return FALSE + . = ..() + if(!.) + return if (!owner.getorganslot(ORGAN_SLOT_EYES)) if (display_error) to_chat(owner, "You have no eyes with which to mesmerize.") diff --git a/code/modules/antagonists/bloodsucker/powers/bs_trespass.dm b/code/modules/antagonists/bloodsucker/powers/bs_trespass.dm index e74a2715ab..9e3ee8939d 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_trespass.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_trespass.dm @@ -17,8 +17,9 @@ var/turf/target_turf // We need to decide where we're going based on where we clicked. It's not actually the tile we clicked. /datum/action/bloodsucker/targeted/trespass/CheckCanUse(display_error) - if(!..(display_error))// DEFAULT CHECKS - return FALSE + . = ..() + if(!.) + return if(owner.notransform || !get_turf(owner)) return FALSE diff --git a/code/modules/antagonists/bloodsucker/powers/bs_veil.dm b/code/modules/antagonists/bloodsucker/powers/bs_veil.dm index 1301ccd727..1985f6be13 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_veil.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_veil.dm @@ -31,8 +31,9 @@ /datum/action/bloodsucker/veil/CheckCanUse(display_error) - if(!..(display_error))// DEFAULT CHECKS - return FALSE + . = ..() + if(!.) + return return TRUE diff --git a/code/modules/antagonists/bloodsucker/powers/v_distress.dm b/code/modules/antagonists/bloodsucker/powers/v_distress.dm deleted file mode 100644 index ebf4ee2e21..0000000000 --- a/code/modules/antagonists/bloodsucker/powers/v_distress.dm +++ /dev/null @@ -1,13 +0,0 @@ - - - -/* -/datum/action/bloodsucker/vassal/distress - name = "Distress" - desc = "Call out to your master and other vassals for aid" - button_icon_state = "power_recup" - amToggle = TRUE - bloodcost = 10 - cooldown = 100 - not_bloodsucker = TRUE -*/ diff --git a/code/modules/antagonists/bloodsucker/powers/v_recuperate.dm b/code/modules/antagonists/bloodsucker/powers/v_recuperate.dm index f972e1f0aa..f2496e63cc 100644 --- a/code/modules/antagonists/bloodsucker/powers/v_recuperate.dm +++ b/code/modules/antagonists/bloodsucker/powers/v_recuperate.dm @@ -15,8 +15,9 @@ // Deal STAMINA damage over time, trickle down blood, and heal wounds. /datum/action/bloodsucker/vassal/recuperate/CheckCanUse(display_error) - if(!..(display_error))// DEFAULT CHECKS - return FALSE + . = ..() + if(!.) + return if (owner.stat >= DEAD) return FALSE var/mob/living/carbon/C = owner diff --git a/tgstation.dme b/tgstation.dme index b61bc9dacc..f21f7345a2 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -1243,7 +1243,6 @@ #include "code\modules\antagonists\bloodsucker\powers\bs_mesmerize.dm" #include "code\modules\antagonists\bloodsucker\powers\bs_trespass.dm" #include "code\modules\antagonists\bloodsucker\powers\bs_veil.dm" -#include "code\modules\antagonists\bloodsucker\powers\v_distress.dm" #include "code\modules\antagonists\bloodsucker\powers\v_recuperate.dm" #include "code\modules\antagonists\brainwashing\brainwashing.dm" #include "code\modules\antagonists\brother\brother.dm" From 9b20879ba52481cd8419a917aecdce7bc5a96a14 Mon Sep 17 00:00:00 2001 From: Artur Date: Sun, 1 Dec 2019 00:07:07 +0200 Subject: [PATCH 11/64] Ditto --- code/__DEFINES/antagonists.dm | 16 ++++++++++++ code/__DEFINES/bloodsucker.dm | 14 ---------- .../bloodsucker/datum_bloodsucker.dm | 23 ++-------------- .../bloodsucker/powers/bs_gohome.dm | 26 ------------------- .../bloodsucker/powers/bs_haste.dm | 11 -------- .../bloodsucker/powers/bs_masquerade.dm | 1 - .../antagonists/bloodsucker/powers/bs_veil.dm | 11 +++++++- .../bloodsucker/powers/v_recuperate.dm | 7 ----- 8 files changed, 28 insertions(+), 81 deletions(-) delete mode 100644 code/__DEFINES/bloodsucker.dm diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm index b2f05fd5f8..d25f8779c0 100644 --- a/code/__DEFINES/antagonists.dm +++ b/code/__DEFINES/antagonists.dm @@ -40,3 +40,19 @@ #define NOT_DOMINATING -1 #define MAX_LEADERS_GANG 4 #define INITIAL_DOM_ATTEMPTS 3 + +//Bloodsucker defines +// Bloodsucker related antag datums +#define ANTAG_DATUM_BLOODSUCKER /datum/antagonist/bloodsucker +#define ANTAG_DATUM_VASSAL /datum/antagonist/vassal +#define ANTAG_DATUM_HUNTER /datum/antagonist/vamphunter + +// BLOODSUCKER +#define BLOODSUCKER_LEVEL_TO_EMBRACE 3 +#define BLOODSUCKER_FRENZY_TIME 25 // How long the vamp stays in frenzy. +#define BLOODSUCKER_FRENZY_OUT_TIME 300 // How long the vamp goes back into frenzy. +#define BLOODSUCKER_STARVE_VOLUME 5 // Amount of blood, below which a Vamp is at risk of frenzy. + +#define CAT_STRUCTURE "Structures" + +#define MARTIALART_HUNTER "hunter-fu" diff --git a/code/__DEFINES/bloodsucker.dm b/code/__DEFINES/bloodsucker.dm deleted file mode 100644 index 08b70004cc..0000000000 --- a/code/__DEFINES/bloodsucker.dm +++ /dev/null @@ -1,14 +0,0 @@ -// Bloodsucker related antag datums -#define ANTAG_DATUM_BLOODSUCKER /datum/antagonist/bloodsucker -#define ANTAG_DATUM_VASSAL /datum/antagonist/vassal -#define ANTAG_DATUM_HUNTER /datum/antagonist/vamphunter - -// BLOODSUCKER -#define BLOODSUCKER_LEVEL_TO_EMBRACE 3 -#define BLOODSUCKER_FRENZY_TIME 25 // How long the vamp stays in frenzy. -#define BLOODSUCKER_FRENZY_OUT_TIME 300 // How long the vamp goes back into frenzy. -#define BLOODSUCKER_STARVE_VOLUME 5 // Amount of blood, below which a Vamp is at risk of frenzy. - -#define CAT_STRUCTURE "Structures" - -#define MARTIALART_HUNTER "hunter-fu" diff --git a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm index 2dba2f9587..6561c51a6e 100644 --- a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm +++ b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm @@ -262,7 +262,6 @@ datum/antagonist/bloodsucker/proc/RankUp() set waitfor = FALSE if (!owner || !owner.current) return - vamplevel_unspent ++ // Spend Rank Immediately? if (istype(owner.current.loc, /obj/structure/closet/crate/coffin)) @@ -272,7 +271,6 @@ datum/antagonist/bloodsucker/proc/RankUp() if (vamplevel_unspent >= 2) to_chat(owner, "Bloodsucker Tip: If you cannot find or steal a coffin to use, they can be built from wooden planks.
    ") - datum/antagonist/bloodsucker/proc/LevelUpPowers() for(var/datum/action/bloodsucker/power in powers) power.level_current ++ @@ -281,10 +279,9 @@ datum/antagonist/bloodsucker/proc/SpendRank() set waitfor = FALSE if (vamplevel_unspent <= 0 || !owner || !owner.current || !owner.current.client) return - ///////// // Powers - + //TODO: Make this into a radial // Purchase Power Prompt var/list/options = list() // Taken from gasmask.dm, for Clown Masks. for(var/pickedpower in typesof(/datum/action/bloodsucker)) @@ -293,7 +290,6 @@ datum/antagonist/bloodsucker/proc/SpendRank() if (!(locate(power) in powers) && initial(power.bloodsucker_can_buy)) options[initial(power.name)] = power // TESTING: After working with TGUI, it seems you can use initial() to view the variables inside a path? options["\[ Not Now \]"] = null - // Abort? if (options.len > 1) var/choice = input(owner.current, "You have the opportunity to grow more ancient. Select a power to advance your Rank.", "Your Blood Thickens...") in options @@ -312,12 +308,10 @@ datum/antagonist/bloodsucker/proc/SpendRank() to_chat(owner.current, "You have learned [initial(P.name)]!") else to_chat(owner.current, "You grow more ancient by the night!") - ///////// // Advance Powers (including new) LevelUpPowers() - - ///////// + //////// // Advance Stats if (ishuman(owner.current)) var/mob/living/carbon/human/H = owner.current @@ -332,34 +326,21 @@ datum/antagonist/bloodsucker/proc/SpendRank() regenRate += 0.05 // Points of brute healed (starts at 0.3) feedAmount += 2 // Increase how quickly I munch down vics (15) maxBloodVolume += 50 // Increase my max blood (600) - - ///////// - vamplevel ++ vamplevel_unspent -- // Assign True Reputation if (vamplevel == 4) SelectReputation(am_fledgling=FALSE, forced=TRUE) - to_chat(owner.current, "You are now a rank [vamplevel] Bloodsucker. Your strength, resistence, health, feed rate, regen rate, and maximum blood have all increased!") to_chat(owner.current, "Your existing powers have all ranked up as well!") to_chat(owner.current, "However, your weakness to fire and sunlight have also increased!") - update_hud(TRUE) - owner.current.playsound_local(null, 'sound/effects/pope_entry.ogg', 25, 1) // Play THIS sound for user only. The "null" is where turf would go if a location was needed. Null puts it right in their head. - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - //This handles the application of antag huds/special abilities /datum/antagonist/bloodsucker/apply_innate_effects(mob/living/mob_override) return diff --git a/code/modules/antagonists/bloodsucker/powers/bs_gohome.dm b/code/modules/antagonists/bloodsucker/powers/bs_gohome.dm index 4d76b93418..514fa8805a 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_gohome.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_gohome.dm @@ -17,7 +17,6 @@ must_be_capacitated = TRUE can_be_immobilized = TRUE - /datum/action/bloodsucker/gohome/CheckCanUse(display_error) . = ..() if(!.) @@ -28,52 +27,32 @@ if (display_error) to_chat(owner, "Your coffin has been destroyed!") return FALSE - return TRUE - - /datum/action/bloodsucker/gohome/ActivatePower() - var/mob/living/carbon/user = owner var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) - - // IMPORTANT: Check for lair at every step! It might get destroyed. - to_chat(user, "You focus on separating your consciousness from your physical form...") - - // STEP ONE: Flicker Lights - - // From statue.dm for(var/obj/machinery/light/L in view(3, get_turf(owner))) // /obj/machinery/light/proc/flicker(var/amount = rand(10, 20)) L.flicker(5) playsound(get_turf(owner), 'sound/effects/singlebeat.ogg', 20, 1) - sleep(50) - for(var/obj/machinery/light/L in view(3, get_turf(owner))) // /obj/machinery/light/proc/flicker(var/amount = rand(10, 20)) L.flicker(5) playsound(get_turf(owner), 'sound/effects/singlebeat.ogg', 40, 1) - sleep(50) - for(var/obj/machinery/light/L in view(6, get_turf(owner))) // /obj/machinery/light/proc/flicker(var/amount = rand(10, 20)) L.flicker(5) playsound(get_turf(owner), 'sound/effects/singlebeat.ogg', 60, 1) - - // ( STEP TWO: Lights OFF? ) - // CHECK: Still have Coffin? if (!istype(bloodsuckerdatum) || !bloodsuckerdatum.coffin) to_chat(user, "Your coffin has been destroyed! You no longer have a destination.") return FALSE - if (!owner) return - // SEEN?: (effects ONLY if there are witnesses! Otherwise you just POOF) // NOTE: Stolen directly from statue.dm, thanks guys! var/am_seen = FALSE // Do Effects (seen by anyone) @@ -89,7 +68,6 @@ if (!M.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) drop_item = TRUE break - // LOSE CUFFS if(user.handcuffed) var/obj/O = user.handcuffed @@ -97,7 +75,6 @@ if(user.legcuffed) var/obj/O = user.legcuffed user.dropItemToGround(O) - // SEEN! if (drop_item) // DROP: Clothes, held items, and cuffs etc @@ -116,7 +93,6 @@ puff.effect_type = /obj/effect/particle_effect/smoke/vampsmoke puff.set_up(3, 0, get_turf(owner)) puff.start() - // TELEPORT: Move to Coffin & Close it! do_teleport(owner, bloodsuckerdatum.coffin, no_effects=TRUE) // in teleport.dm? // SLEEP @@ -134,8 +110,6 @@ bloodsuckerdatum.coffin.update_icon() // Lock Coffin bloodsuckerdatum.coffin.LockMe(owner) - - // ( STEP FIVE: Create animal at prev location? ) //var/mob/living/simple_animal/SA = /mob/living/simple_animal/hostile/retaliate/bat // pick(/mob/living/simple_animal/mouse,/mob/living/simple_animal/mouse,/mob/living/simple_animal/mouse, /mob/living/simple_animal/hostile/retaliate/bat) //prob(300) /mob/living/simple_animal/mouse, //new SA (owner.loc) diff --git a/code/modules/antagonists/bloodsucker/powers/bs_haste.dm b/code/modules/antagonists/bloodsucker/powers/bs_haste.dm index 8cfed3192a..53db94ef66 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_haste.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_haste.dm @@ -14,10 +14,6 @@ message_Trigger = ""//"Whom will you subvert to your will?" bloodsucker_can_buy = TRUE must_be_capacitated = TRUE - //var/datum/martial_art/vamphaste/haste_cqc // Assign this when - - - /datum/action/bloodsucker/targeted/haste/CheckCanUse(display_error) . = ..() @@ -30,11 +26,9 @@ return FALSE return TRUE - /datum/action/bloodsucker/targeted/haste/CheckValidTarget(atom/A) return isturf(A) || A.loc != owner.loc // Anything will do, if it's not me or my square - /datum/action/bloodsucker/targeted/haste/CheckCanTarget(atom/A, display_error) // DEFAULT CHECKS (Distance) if (!..()) @@ -44,8 +38,6 @@ // return FALSE return TRUE - - /datum/action/bloodsucker/targeted/haste/FireTargetedPower(atom/A) // set waitfor = FALSE <---- DONT DO THIS!We WANT this power to hold up ClickWithPower(), so that we can unlock the power when it's done. var/mob/living/user = owner @@ -59,7 +51,6 @@ while(get_turf(owner) != T && safety > 0 && !(isliving(target) && target.Adjacent(owner))) user.canmove = FALSE //Dont move while doing the thing, or itll break safety -- - // Did I get knocked down? if (owner && owner.incapacitated(ignore_restraints=TRUE,ignore_grab=TRUE))// owner.incapacitated()) // We're gonna cancel. But am I on the ground? Spin me! @@ -68,7 +59,6 @@ new /datum/forced_movement(owner, get_ranged_target_turf(owner, send_dir, 1), 1, FALSE) owner.spin(10) break - // Spin/Stun people we pass. //var/mob/living/newtarget = locate(/mob/living) in oview(1, owner) var/list/mob/living/foundtargets = list() @@ -87,7 +77,6 @@ if (user) user.update_canmove() //Let the poor guy move again - /datum/action/bloodsucker/targeted/haste/DeactivatePower(mob/living/user = owner, mob/living/target) ..() // activate = FALSE user.update_canmove() diff --git a/code/modules/antagonists/bloodsucker/powers/bs_masquerade.dm b/code/modules/antagonists/bloodsucker/powers/bs_masquerade.dm index 7a35d9edfa..6ee17b3014 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_masquerade.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_masquerade.dm @@ -30,7 +30,6 @@ // NOTE: Firing off vulgar powers disables your Masquerade! - /*/datum/action/bloodsucker/masquerade/CheckCanUse(display_error) if(!..(display_error))// DEFAULT CHECKS return FALSE diff --git a/code/modules/antagonists/bloodsucker/powers/bs_veil.dm b/code/modules/antagonists/bloodsucker/powers/bs_veil.dm index 1985f6be13..02fb49a536 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_veil.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_veil.dm @@ -24,8 +24,11 @@ var/prev_hair_color var/prev_facial_hair_color var/prev_underwear + var/prev_undie_color var/prev_undershirt + var/prev_shirt_color var/prev_socks + var/prev_socks_color var/prev_disfigured var/list/prev_features // For lizards and such @@ -72,13 +75,16 @@ prev_hair_color = H.hair_color prev_facial_hair_color = H.facial_hair_color prev_underwear = H.underwear + prev_undie_color = H.undie_color prev_undershirt = H.undershirt + prev_shirt_color = H.shirt_color prev_socks = H.socks + prev_socks_color = H.socks_color //prev_eye_color prev_disfigured = HAS_TRAIT(H, TRAIT_DISFIGURED) // I was disfigured! //prev_disabilities = H.disabilities prev_features = H.dna.features - // Change Appearance + // Change Appearance, not randomizing clothes colour, itll just be janky H.gender = pick(MALE, FEMALE) H.skin_tone = random_skin_tone() H.hair_style = random_hair_style(H.gender) @@ -127,8 +133,11 @@ H.hair_color = prev_hair_color H.facial_hair_color = prev_facial_hair_color H.underwear = prev_underwear + H.undie_color = prev_undie_color H.undershirt = prev_undershirt + H.shirt_color = prev_shirt_color H.socks = prev_socks + H.socks_color = prev_socks_color //H.disabilities = prev_disabilities // Restore HUSK, CLUMSY, etc. if (prev_disfigured) diff --git a/code/modules/antagonists/bloodsucker/powers/v_recuperate.dm b/code/modules/antagonists/bloodsucker/powers/v_recuperate.dm index f2496e63cc..27277b215b 100644 --- a/code/modules/antagonists/bloodsucker/powers/v_recuperate.dm +++ b/code/modules/antagonists/bloodsucker/powers/v_recuperate.dm @@ -1,7 +1,3 @@ - - - - /datum/action/bloodsucker/vassal/recuperate name = "Sanguine Recuperation" desc = "Slowly heal brute damage while active. This process is exhausting, and requires some of your tainted blood." @@ -9,9 +5,6 @@ amToggle = TRUE bloodcost = 5 cooldown = 100 - - - // Deal STAMINA damage over time, trickle down blood, and heal wounds. /datum/action/bloodsucker/vassal/recuperate/CheckCanUse(display_error) From 90113838a7ae3324748df95a399ba0e97d21aec5 Mon Sep 17 00:00:00 2001 From: Artur Date: Mon, 2 Dec 2019 19:48:02 +0200 Subject: [PATCH 12/64] Iconfix and co Traits instead of procs for fakedeath Quickfix Whoops this too Loadsa fixes Nerfs stamina regen Too slow Hm --- .../game/gamemodes/bloodsucker/bloodsucker.dm | 3 +- .../bloodsucker/bloodsucker_life.dm | 22 +++------ .../bloodsucker/bloodsucker_powers.dm | 3 +- .../bloodsucker/bloodsucker_sunlight.dm | 2 +- .../bloodsucker/datum_bloodsucker.dm | 8 ++-- .../bloodsucker/objects/bloodsucker_coffin.dm | 8 ++-- .../bloodsucker/objects/bloodsucker_crypt.dm | 44 +----------------- .../bloodsucker/objects/bloodsucker_lair.dm | 4 +- .../bloodsucker/powers/bs_brawn.dm | 6 +-- .../bloodsucker/powers/bs_haste.dm | 2 +- .../bloodsucker/powers/bs_lunge.dm | 25 ++++------ .../bloodsucker/powers/bs_mesmerize.dm | 18 +++---- code/modules/crafting/craft.dm | 1 - code/modules/crafting/recipes/recipes_misc.dm | 38 +++++++++++++++ .../modules/mob/living/carbon/damage_procs.dm | 2 +- .../carbon/human/species_types/jellypeople.dm | 2 +- icons/mob/hud.dmi | Bin 17456 -> 17871 bytes tgstation.dme | 1 - 18 files changed, 87 insertions(+), 102 deletions(-) diff --git a/code/game/gamemodes/bloodsucker/bloodsucker.dm b/code/game/gamemodes/bloodsucker/bloodsucker.dm index c0f5f80c1f..08f9a628b6 100644 --- a/code/game/gamemodes/bloodsucker/bloodsucker.dm +++ b/code/game/gamemodes/bloodsucker/bloodsucker.dm @@ -29,7 +29,8 @@ Bloodsuckers: The crew are cattle, while you are both shepherd and slaughterhouse.\n\ Crew: Put an end to the undead infestation before the station is overcome!" - +/datum/game_mode/traitor/bros/generate_report() + return "Reports indicate that some of your crew may have toppled statues in the past week, angering the gods and becoming cursed with undeath and a desire for blood. Watch out for crewmembers that seem to shun the light or are found pale and delirious." // Seems to be run by game ONCE, and finds all potential players to be antag. /datum/game_mode/bloodsucker/pre_setup() diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm index be557148bd..9eaddad5b5 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm @@ -23,8 +23,8 @@ while (owner && !AmFinalDeath()) // owner.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) == src // Deduct Blood - if (owner.current.stat == CONSCIOUS && !poweron_feed && !HAS_TRAIT(owner.current, TRAIT_DEATHCOMA) && !istype(owner.current.loc, /obj/structure/closet/crate/coffin)) - AddBloodVolume(-0.08) // -.15 (before tick went from 10 to 30, but we also charge more for faking life now) + if (owner.current.stat == CONSCIOUS && !poweron_feed && !HAS_TRAIT(owner.current, TRAIT_DEATHCOMA)) + AddBloodVolume(-0.09) // -.15 (before tick went from 10 to 30, but we also charge more for faking life now) // Heal if (HandleHealing(1)) @@ -154,7 +154,7 @@ description = "I slept poorly in a makeshift coffin during the day.\n" mood_change = -3 timeout = 1000 - + /datum/mood_event/daylight_2 description = "I have been scorched by the unforgiving rays of the sun.\n" mood_change = -6 @@ -175,13 +175,10 @@ if (poweron_masquerade == TRUE || owner.current.AmStaked()) return FALSE - owner.current.adjustStaminaLoss(-5 * (regenRate * 4) * mult, 0) // Humans lose stamina damage really quickly. Vamps should heal more. + owner.current.adjustStaminaLoss(-2 * (regenRate * 4) * mult, 0) // Humans lose stamina damage really quickly. Vamps should heal more. owner.current.adjustCloneLoss(-1 * (regenRate * 4) * mult, 0) owner.current.adjustOrganLoss(ORGAN_SLOT_BRAIN, -1 * (regenRate * 4) * mult) //adjustBrainLoss(-1 * (regenRate * 4) * mult, 0) - owner.current.setOxyLoss(0) - owner.current.setToxLoss(0) - // No Bleeding if (ishuman(owner.current)) var/mob/living/carbon/human/H = owner.current @@ -364,10 +361,9 @@ /datum/antagonist/bloodsucker/proc/Torpor_Begin(amInCoffin=FALSE) owner.current.stat = UNCONSCIOUS owner.current.fakedeath("bloodsucker") // Come after UNCONSCIOUS or else it fails - //owner.current.update_stat() - ADD_TRAIT(owner.current, TRAIT_NODEATH,"bloodsucker") // Without this, you'll just keep dying while you recover. - ADD_TRAIT(owner.current, TRAIT_RESISTHIGHPRESSURE,"bloodsucker") // So you can heal in 0 G. otherwise you just...heal forever. - ADD_TRAIT(owner.current, TRAIT_RESISTLOWPRESSURE,"bloodsucker") // So you can heal in 0 G. otherwise you just...heal forever. + ADD_TRAIT(owner.current, TRAIT_NODEATH, "bloodsucker") // Without this, you'll just keep dying while you recover. + ADD_TRAIT(owner.current, TRAIT_RESISTHIGHPRESSURE, "bloodsucker") // So you can heal in 0 G. otherwise you just...heal forever. + ADD_TRAIT(owner.current, TRAIT_RESISTLOWPRESSURE, "bloodsucker") // So you can heal in 0 G. otherwise you just...heal forever. // Visuals owner.current.update_sight() owner.current.reload_fullscreen() @@ -380,16 +376,12 @@ /datum/antagonist/bloodsucker/proc/Torpor_End() owner.current.stat = SOFT_CRIT owner.current.cure_fakedeath("bloodsucker") // Come after SOFT_CRIT or else it fails - //owner.current.update_stat() REMOVE_TRAIT(owner.current, TRAIT_NODEATH, "bloodsucker") REMOVE_TRAIT(owner.current, TRAIT_RESISTHIGHPRESSURE, "bloodsucker") // So you can heal in 0 G. otherwise you just...heal forever. REMOVE_TRAIT(owner.current, TRAIT_RESISTLOWPRESSURE, "bloodsucker") // So you can heal in 0 G. otherwise you just...heal forever. to_chat(owner, "You have recovered from Torpor.") - - - /datum/antagonist/proc/AmFinalDeath() // Standard Antags can be dead OR final death return owner && (owner.current && owner.current.stat >= DEAD || owner.AmFinalDeath()) diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm b/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm index a609a502b3..821df92a19 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm @@ -92,10 +92,11 @@ if(!can_be_staked && owner.AmStaked()) if(display_error) to_chat(owner, "You have a stake in your chest! Your powers are useless.") + return FALSE // Incap? if(must_be_capacitated) var/mob/living/L = owner - if (L.incapacitated(TRUE, TRUE) || L.lying && !can_be_immobilized) + if (L.incapacitated(TRUE, TRUE) || L.resting && !can_be_immobilized) if(display_error) to_chat(owner, "Not while you're incapacitated!") return FALSE diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm b/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm index 29af94616f..726eb8c452 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm @@ -1,4 +1,4 @@ -#define TIME_BLOODSUCKER_NIGHT 1080 // 12 minutes +#define TIME_BLOODSUCKER_NIGHT 900 // 15 minutes #define TIME_BLOODSUCKER_DAY_WARN 90 // 1.5 minutes #define TIME_BLOODSUCKER_DAY_FINAL_WARN 25 // 25 sec #define TIME_BLOODSUCKER_DAY 60 // 1.5 minutes // 10 is a second, 600 is a minute. diff --git a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm index 6561c51a6e..8b5c8dff46 100644 --- a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm +++ b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm @@ -79,6 +79,7 @@ vamp_greet += "* Use \",b\" to speak your ancient Bloodsucker language.
    " vamp_greet += "Bloodsucker Tip: Rest in a Coffin to claim it, and that area, as your lair.
    " vamp_greet += "Bloodsucker Tip: Fear the daylight! Solar flares will bombard the station periodically, and only your coffin can guarantee your safety.
    " + vamp_greet += "Bloodsucker Tip: You wont loose blood if you are unconcious or sleeping. Use this to your advantage to conserve blood.
    " to_chat(owner, vamp_greet) owner.current.playsound_local(null, 'sound/bloodsucker/BloodsuckerAlert.ogg', 100, FALSE, pressure_affected = FALSE) @@ -201,7 +202,7 @@ S.brutemod *= 0.5 S.burnmod += 0.2 // <-------------------- Start small, but burn mod increases based on rank! S.coldmod = 0 - S.stunmod *= 0.5 + S.stunmod *= 0.25 S.siemens_coeff *= 0.75 //base electrocution coefficient 1 //S.heatmod += 0.5 // Heat shouldn't affect. Only Fire. //S.punchstunthreshold = 8 //damage at which punches from this race will stun 9 @@ -209,7 +210,6 @@ S.punchdamagehigh += 1 //highest possible punch damage 9 // Clown if(istype(H) && owner.assigned_role == "Clown") - //to_chat(H, "You have evolved beyond your clownish nature, allowing you to wield weapons without harming yourself.") H.dna.remove_mutation(CLOWNMUT) to_chat(H, "As a vampiric clown, you are no longer a danger to yourself. Your nature is subdued.") // Physiology @@ -217,7 +217,7 @@ // Language owner.current.grant_language(/datum/language/vampiric) // Soul - owner.current.hellbound = TRUE + //owner.current.hellbound = TRUE Causes wierd stuff owner.hasSoul = FALSE // If false, renders the character unable to sell their soul. owner.isholy = FALSE // is this person a chaplain or admin role allowed to use bibles // Disabilities @@ -256,7 +256,7 @@ // Soul if (owner.soulOwner == owner) // Return soul, if *I* own it. owner.hasSoul = TRUE - owner.current.hellbound = FALSE +//owner.current.hellbound = FALSE datum/antagonist/bloodsucker/proc/RankUp() set waitfor = FALSE diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm index 8ec6c72daf..128398a3b0 100644 --- a/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm +++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm @@ -36,7 +36,7 @@ // DONE to_chat(owner, "You have claimed the [claimed] as your place of immortal rest! Your lair is now [lair].") to_chat(owner, "You have learned new construction recipes to improve your lair.") - to_chat(owner, "Bloodsucker Tip: Find new lair recipes in the Structures tab of the Crafting Menu at the bottom of the screen, including the Persuasion Rack for converting crew into Vassals.

    ") + to_chat(owner, "Bloodsucker Tip: Find new lair recipes in the misc tab of the Crafting Menu at the bottom of the screen, including the Persuasion Rack for converting crew into Vassals.

    ") RunLair() // Start return TRUE @@ -229,7 +229,7 @@ ///obj/item/stack/packageWrap = 8, ///obj/item/pipe = 2) time = 150 - category = CAT_STRUCTURE + category = CAT_MISC always_availible = TRUE /datum/crafting_recipe/bloodsucker/meatcoffin @@ -240,7 +240,7 @@ reqs = list(/obj/item/reagent_containers/food/snacks/meat/slab = 5, /obj/item/restraints/handcuffs/cable = 1) time = 150 - category = CAT_STRUCTURE + category = CAT_MISC always_availible = TRUE /datum/crafting_recipe/bloodsucker/metalcoffin @@ -250,5 +250,5 @@ /obj/item/screwdriver) reqs = list(/obj/item/stack/sheet/metal = 5) time = 100 - category = CAT_STRUCTURE + category = CAT_MISC always_availible = TRUE diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm index 08d60caa94..2a4e2b31c6 100644 --- a/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm +++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm @@ -247,12 +247,12 @@ if (bloodsuckerdatum.lair != get_area(src)) to_chat(user, "You may only activate this structure in your lair: [bloodsuckerdatum.lair].") return - switch(alert(user,"Do you wish to afix this structure here?","Secure [src]","Yes", "No")) + switch(alert(user,"Do you wish to afix this structure here? Be aware you wont be able to unsecure it anymore","Secure [src]","Yes", "No")) if("Yes") owner = user density = FALSE anchored = TRUE - return + return //No, you cant move this ever again // No One Home if (!has_buckled_mobs()) @@ -463,7 +463,6 @@ if (HAS_TRAIT(target, TRAIT_MINDSHIELD)) to_chat(target, "You give in to the will of your torturer. If they are successful, you will no longer be loyal to the station!") - /obj/structure/bloodsucker/vassalrack/proc/disloyalty_refuse(mob/living/target) // FAILSAFE: Still on the rack? if (!(locate(target) in buckled_mobs)) @@ -525,45 +524,6 @@ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -/datum/crafting_recipe/bloodsucker/vassalrack - name = "Persuasion Rack" - //desc = "For converting crewmembers into loyal Vassals." - result = /obj/structure/bloodsucker/vassalrack - tools = list(/obj/item/weldingtool, - ///obj/item/screwdriver, - /obj/item/wrench - ) - reqs = list(/obj/item/stack/sheet/mineral/wood = 3, - /obj/item/stack/sheet/metal = 2, - /obj/item/restraints/handcuffs/cable = 2, - ///obj/item/storage/belt = 1 - ///obj/item/stack/sheet/animalhide = 1, // /obj/item/stack/sheet/leather = 1, - ///obj/item/stack/sheet/plasteel = 5 - ) - //parts = list(/obj/item/storage/belt = 1 - // ) - - time = 150 - category = CAT_STRUCTURE - always_availible = FALSE // Disabled til learned - - -/datum/crafting_recipe/bloodsucker/candelabrum - name = "Candelabrum" - //desc = "For converting crewmembers into loyal Vassals." - result = /obj/structure/bloodsucker/candelabrum - tools = list(/obj/item/weldingtool, - /obj/item/wrench - ) - reqs = list(/obj/item/stack/sheet/metal = 3, - /obj/item/stack/rods = 1, - /obj/item/candle = 1 - ) - time = 100 - category = CAT_STRUCTURE - always_availible = FALSE // Disabled til learned - - // OTHER THINGS TO USE: HUMAN BLOOD. /obj/effect/decal/cleanable/blood diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm index b2b91f8929..63f8838882 100644 --- a/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm +++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm @@ -36,8 +36,8 @@ while (!AmFinalDeath() && coffin && lair) - // WAit 10 Sec and Repeat - sleep(100) + // WAit 1 min and Repeat + sleep(60) // Coffin Moved SOMEHOW? if (lair != get_area(coffin)) diff --git a/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm b/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm index a09cc1358c..b5c5c2f265 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm @@ -4,8 +4,8 @@ name = "Brawn"//"Cellular Emporium" desc = "Snap restraints with ease, or deal terrible damage with your bare hands." button_icon_state = "power_strength" - bloodcost = 8 - cooldown = 100 + bloodcost = 10 + cooldown = 600 target_range = 1 power_activates_immediately = TRUE message_Trigger = ""//"Whom will you subvert to your will?" @@ -75,7 +75,7 @@ "[user] has knocked you down!", null, COMBAT_MESSAGE_RANGE) target.Knockdown( min(5, rand(10, 10 * powerlevel)) ) // Chance of KO - if (rand(5 + powerlevel) >= 5 && target.stat <= UNCONSCIOUS) + if (rand(3 + powerlevel) >= 5 && target.stat <= UNCONSCIOUS) target.Unconscious(40) // Attack! playsound(get_turf(target), 'sound/weapons/punch4.ogg', 60, 1, -1) diff --git a/code/modules/antagonists/bloodsucker/powers/bs_haste.dm b/code/modules/antagonists/bloodsucker/powers/bs_haste.dm index 53db94ef66..c3337eb391 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_haste.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_haste.dm @@ -54,7 +54,7 @@ // Did I get knocked down? if (owner && owner.incapacitated(ignore_restraints=TRUE,ignore_grab=TRUE))// owner.incapacitated()) // We're gonna cancel. But am I on the ground? Spin me! - if (user.lying) + if (user.resting) var/send_dir = get_dir(owner, T) new /datum/forced_movement(owner, get_ranged_target_turf(owner, send_dir, 1), 1, FALSE) owner.spin(10) diff --git a/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm b/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm index e507b3a14f..4a36431b18 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm @@ -46,7 +46,6 @@ /datum/action/bloodsucker/targeted/lunge/FireTargetedPower(atom/A) // set waitfor = FALSE <---- DONT DO THIS!We WANT this power to hold up ClickWithPower(), so that we can unlock the power when it's done. - var/mob/living/user = owner var/mob/living/carbon/target = A var/turf/T = get_turf(target) // Clear Vars @@ -55,26 +54,20 @@ var/do_knockdown = !is_A_facing_B(target,owner) || owner.alpha <= 0 || istype(owner.loc, /obj/structure/closet) // CAUSES: Target has their back to me, I'm invisible, or I'm in a Closet // Step One: Heatseek toward Target's Turf + walk_towards(owner, T, 0.1, 10) // NOTE: this runs in the background! to cancel it, you need to use walk(owner.current,0), or give them a new path. - var/safety = 10 - while(get_turf(owner) != T && safety > 0 && !(isliving(target) && target.Adjacent(owner))) - if(owner.incapacitated()) - sleep(1) - safety -- - // Did I get knocked down? - if (owner && owner.incapacitated()) - if (user.lying) - var/send_dir = get_dir(owner, T) - new /datum/forced_movement(owner, get_ranged_target_turf(owner, send_dir, 1), 1, FALSE) - owner.spin(10) - break - // Step Two: Check if I'm at/adjectent to Target's CURRENT turf (not original...that was just a destination) - if (target.Adjacent(owner)) + if(get_turf(owner) != T && !(isliving(target) && target.Adjacent(owner)) && owner.incapacitated() && owner.resting) + var/send_dir = get_dir(owner, T) + new /datum/forced_movement(owner, get_ranged_target_turf(owner, send_dir, 1), 1, FALSE) + owner.spin(10) + // Step Two: Check if I'm at/adjectent to Target's CURRENT turf (not original...that was just a destination) + sleep(1) + if(target.Adjacent(owner)) // LEVEL 2: If behind target, mute or unconscious! if (do_knockdown) // && level_current >= 1) target.Knockdown(15 + 10 * level_current,1) // Cancel Walk (we were close enough to contact them) - walk(owner,0) + walk(owner, 0) //target.Paralyze(10,1) target.grabbedby(owner) // Taken from mutations.dm under changelings target.grippedby(owner, instant = TRUE) //instant aggro grab diff --git a/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm b/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm index fc396dbeea..bd185958d3 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm @@ -53,7 +53,7 @@ to_chat(owner, "Your victim is not [(target.stat == DEAD || HAS_TRAIT(target, TRAIT_FAKEDEATH))?"alive":"conscious"].") return FALSE // Check: Target has eyes? - if (!target.getorganslot("heart")) + if (!target.getorganslot(ORGAN_SLOT_EYES)) if (display_error) to_chat(owner, "They have no eyes!") return FALSE @@ -77,7 +77,7 @@ to_chat(owner, "You must be facing your victim.") return FALSE // Check: Target facing me? - if (!target.lying && !is_A_facing_B(target,owner)) + if (!target.resting && !is_A_facing_B(target,owner)) if (display_error) to_chat(owner, "Your victim must be facing you to see into your eyes.") return FALSE @@ -91,11 +91,13 @@ var/mob/living/carbon/target = A var/mob/living/user = owner - if (istype(target)) - ADD_TRAIT(target, TRAIT_MUTE, "bloodsucker_mesmerize") + if(istype(target)) + target.Stun(40) //Utterly useless without this, its okay since there are so many checks to go through + target.silent += 40 //Shhhh little lamb - if (do_mob(user, target, 40, 0, TRUE, extra_checks=CALLBACK(src, .proc/ContinueActive, user, target))) + if(do_mob(user, target, 40, 0, TRUE, extra_checks=CALLBACK(src, .proc/ContinueActive, user, target))) PowerActivatedSuccessfully() // PAY COST! BEGIN COOLDOWN! + ADD_TRAIT(target, TRAIT_MUTE, "bloodsucker_mesmerize") var/power_time = 90 + level_current * 15 to_chat(user, "[target] is fixed in place by your hypnotic gaze.") target.Stun(power_time) @@ -103,12 +105,12 @@ target.next_move = world.time + power_time // <--- Use direct change instead. We want an unmodified delay to their next move // target.changeNext_move(power_time) // check click.dm target.notransform = TRUE // <--- Fuck it. We tried using next_move, but they could STILL resist. We're just doing a hard freeze. spawn(power_time) - if (istype(target)) + if(istype(target)) target.notransform = FALSE - REMOVE_TRAIT(target, TRAIT_MUTE, "bloodsucker_mesmerize") // They Woke Up! (Notice if within view) - if (istype(user) && target.stat == CONSCIOUS && (target in view(10, get_turf(user))) ) + if(istype(user) && target.stat == CONSCIOUS && (target in view(10, get_turf(user))) ) to_chat(user, "[target] has snapped out of their trance.") + REMOVE_TRAIT(target, TRAIT_MUTE, "bloodsucker_mesmerize") /datum/action/bloodsucker/targeted/mesmerize/ContinueActive(mob/living/user, mob/living/target) diff --git a/code/modules/crafting/craft.dm b/code/modules/crafting/craft.dm index f310ae3887..0e14f9f5be 100644 --- a/code/modules/crafting/craft.dm +++ b/code/modules/crafting/craft.dm @@ -6,7 +6,6 @@ CAT_WEAPONRY, CAT_ROBOT, CAT_MISC, - CAT_STRUCTURE, CAT_PRIMAL, CAT_FOOD, CAT_CLOTHING) diff --git a/code/modules/crafting/recipes/recipes_misc.dm b/code/modules/crafting/recipes/recipes_misc.dm index fdfb959fe6..5a05375933 100644 --- a/code/modules/crafting/recipes/recipes_misc.dm +++ b/code/modules/crafting/recipes/recipes_misc.dm @@ -315,3 +315,41 @@ reqs = list(/obj/item/stack/rods = 2, /obj/item/clothing/under/rank/security = 1) category = CAT_MISC + + /datum/crafting_recipe/bloodsucker/vassalrack + name = "Persuasion Rack" + //desc = "For converting crewmembers into loyal Vassals." + result = /obj/structure/bloodsucker/vassalrack + tools = list(/obj/item/weldingtool, + ///obj/item/screwdriver, + /obj/item/wrench + ) + reqs = list(/obj/item/stack/sheet/mineral/wood = 3, + /obj/item/stack/sheet/metal = 2, + /obj/item/restraints/handcuffs/cable = 2, + ///obj/item/storage/belt = 1 + ///obj/item/stack/sheet/animalhide = 1, // /obj/item/stack/sheet/leather = 1, + ///obj/item/stack/sheet/plasteel = 5 + ) + //parts = list(/obj/item/storage/belt = 1 + // ) + + time = 150 + category = CAT_MISC + always_availible = FALSE // Disabled til learned + + + /datum/crafting_recipe/bloodsucker/candelabrum + name = "Candelabrum" + //desc = "For converting crewmembers into loyal Vassals." + result = /obj/structure/bloodsucker/candelabrum + tools = list(/obj/item/weldingtool, + /obj/item/wrench + ) + reqs = list(/obj/item/stack/sheet/metal = 3, + /obj/item/stack/rods = 1, + /obj/item/candle = 1 + ) + time = 100 + category = CAT_MISC + always_availible = FALSE // Disabled til learned diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm index 8042cf1f90..d893108bcd 100644 --- a/code/modules/mob/living/carbon/damage_procs.dm +++ b/code/modules/mob/living/carbon/damage_procs.dm @@ -76,7 +76,7 @@ return amount /mob/living/carbon/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE) - if (!forced && amount < 0 && HAS_TRAIT(src,TRAIT_NONATURALHEAL)) // FULPSTATION 5/8/19 - Vamps don't heal naturally. + if (!forced && amount < 0 && HAS_TRAIT(src,TRAIT_NONATURALHEAL)) //Vamps don't heal naturally. return FALSE if(!forced && (status_flags & GODMODE)) return FALSE diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 7d568ed510..ff182b19ea 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -44,7 +44,7 @@ C.faction |= "slime" /datum/species/jelly/spec_life(mob/living/carbon/human/H) - if(H.stat == DEAD) //can't farm slime jelly from a dead slime/jelly person indefinitely + if(H.stat == DEAD && HAS_TRAIT(src, TRAIT_NOMARROW)) //can't farm slime jelly from a dead slime/jelly person indefinitely, and no regeneration for vampires return if(!H.blood_volume) H.blood_volume += 5 diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index 5177b5518388af3e26c424507cae1cea2256ce1f..8ea155256cf1f0fe576c5ad6a0e01b8d93454871 100644 GIT binary patch literal 17871 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 mu<#_v3}|>B&iEN@#5* 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 S)$&2WpR&Bh%aZ4BKK>8T5L%l6 diff --git a/tgstation.dme b/tgstation.dme index 32af6fb5d0..9219159405 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -25,7 +25,6 @@ #include "code\__DEFINES\antagonists.dm" #include "code\__DEFINES\atmospherics.dm" #include "code\__DEFINES\atom_hud.dm" -#include "code\__DEFINES\bloodsucker.dm" #include "code\__DEFINES\bsql.config.dm" #include "code\__DEFINES\bsql.dm" #include "code\__DEFINES\callbacks.dm" From af4eaf7f0fad166aaf53797b6d60f7514b1111d5 Mon Sep 17 00:00:00 2001 From: Artur Date: Tue, 3 Dec 2019 23:09:11 +0200 Subject: [PATCH 14/64] Fixeesss --- .../game/gamemodes/bloodsucker/bloodsucker.dm | 2 +- .../dynamic/dynamic_rulesets_roundstart.dm | 41 +++++++++++++++++++ code/game/gamemodes/game_mode.dm | 1 + .../bloodsucker/powers/bs_brawn.dm | 30 +++++++------- code/modules/mob/living/blood.dm | 2 +- .../carbon/human/species_types/jellypeople.dm | 2 +- .../chemistry/reagents/alcohol_reagents.dm | 2 + .../chemistry/reagents/medicine_reagents.dm | 2 + .../chemistry/reagents/other_reagents.dm | 4 ++ .../nanites/nanite_programs/healing.dm | 2 +- 10 files changed, 69 insertions(+), 19 deletions(-) diff --git a/code/game/gamemodes/bloodsucker/bloodsucker.dm b/code/game/gamemodes/bloodsucker/bloodsucker.dm index 08f9a628b6..db92248347 100644 --- a/code/game/gamemodes/bloodsucker/bloodsucker.dm +++ b/code/game/gamemodes/bloodsucker/bloodsucker.dm @@ -17,7 +17,7 @@ antag_flag = ROLE_BLOODSUCKER false_report_weight = 1 restricted_jobs = list("AI","Cyborg") - protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster", "Chaplain") + protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") required_players = 0 required_enemies = 1 recommended_enemies = 4 diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm index 56b02a1364..c1842b2530 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm @@ -778,3 +778,44 @@ var/ramp_up_final = CLAMP(round(meteorminutes/rampupdelta), 1, 10) spawn_meteors(ramp_up_final, wavetype) + +////////////////////////////////////////////// +// // +// BLOODSUCKERS // +// // +////////////////////////////////////////////// +/* Doesnt work just yet +/datum/dynamic_ruleset/roundstart/bloodsucker + name = "bloodsucker" + config_tag = "bloodsucker" + antag_flag = ROLE_BLOODSUCKER + antag_datum = /datum/antagonist/bloodsucker/ + protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster", "Chaplain") + restricted_roles = list("AI", "Cyborg") + required_candidates = 1 + weight = 3 + cost = 15 + scaling_cost = 10 + requirements = list(80,70,60,50,50,50,50,50,50,50) + //antag_cap = list(1,1,1,1,1,2,2,2,2,2) There will be just as many vamp hunters as vampires, right? + high_population_requirement = 50 + var/datum/antagonist/bloodsucker/V + +/datum/dynamic_ruleset/roundstart/bloodsucker/pre_execute() + var/num_bloodsuckers = antag_cap[indice_pop] * (scaled_times + 1) + for (var/i = 1 to num_bloodsuckers) + var/mob/M = pick_n_take(candidates) + assigned += M.mind + V += M.mind + M.mind.special_role = ROLE_TRAITOR + M.mind.restricted_roles = restricted_roles + mode.assign_monster_hunters(num_bloodsuckers,TRUE, assigned) + return TRUE + +/datum/dynamic_ruleset/roundstart/bloodsucker/execute() + //check_start_sunlight() The procs that make a vampire SHOULD enable sunlight by itself + for(var/datum/mind/M in assigned) + if(!mode.make_bloodsucker(M)) + V -= M.mind + return TRUE +*/ diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 4d7b346241..b75b2184cd 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -81,6 +81,7 @@ ///Everyone should now be on the station and have their normal gear. This is the place to give the special roles extra things /datum/game_mode/proc/post_setup(report) //Gamemodes can override the intercept report. Passing TRUE as the argument will force a report. + finalize_monster_hunters() if(!report) report = !CONFIG_GET(flag/no_intercept_report) addtimer(CALLBACK(GLOBAL_PROC, .proc/display_roundstart_logout_report), ROUNDSTART_LOGOUT_REPORT_TIME) diff --git a/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm b/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm index b5c5c2f265..7754e27a76 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm @@ -5,7 +5,7 @@ desc = "Snap restraints with ease, or deal terrible damage with your bare hands." button_icon_state = "power_strength" bloodcost = 10 - cooldown = 600 + cooldown = 130 target_range = 1 power_activates_immediately = TRUE message_Trigger = ""//"Whom will you subvert to your will?" @@ -41,22 +41,22 @@ /datum/action/bloodsucker/targeted/brawn/CheckCanTarget(atom/A, display_error) // DEFAULT CHECKS (Distance) - if (!..()) // Disable range notice for Brawn. + if(!..()) // Disable range notice for Brawn. return FALSE // Must outside Closet to target anyone! - if (!isturf(owner.loc)) + if(!isturf(owner.loc)) return FALSE // Check: Self - if (A == owner) + if(A == owner) return FALSE // Target Type: Living - if (isliving(A)) + if(isliving(A)) return TRUE // Target Type: Door - else if (upgrade_canDoor && istype(A, /obj/machinery/door)) + else if(upgrade_canDoor && istype(A, /obj/machinery/door)) return TRUE // Target Type: Closet - else if (upgrade_canLocker && istype(A, /obj/structure/closet)) + else if(upgrade_canLocker && istype(A, /obj/structure/closet)) return TRUE return ..() // yes, FALSE! You failed if you got here! BAD TARGET @@ -65,17 +65,17 @@ var/mob/living/carbon/target = A var/mob/living/user = owner // Target Type: Mob - if (isliving(target)) + if(isliving(target)) var/mob/living/carbon/user_C = user - var/hitStrength = user_C.dna.species.punchdamagehigh * 1.25 + 2 + var/hitStrength = user_C.dna.species.punchdamagehigh * 1.3 + 5 // Knockdown! - var/powerlevel = min(7, 1 + level_current) - if (rand(10 + powerlevel) >= 5) - target.visible_message("[user] has knocked [target] down!", \ - "[user] has knocked you down!", null, COMBAT_MESSAGE_RANGE) - target.Knockdown( min(5, rand(10, 10 * powerlevel)) ) + var/powerlevel = min(5, 1 + level_current) + if(rand(5 + powerlevel) >= 5) + target.visible_message("[user] lands a vicious punch, sending [target] away!", \ + "[user] has landed a horrifying punch on you, sending you flying!!", null, COMBAT_MESSAGE_RANGE) + target.Knockdown(min(5, rand(10, 10 * powerlevel)) ) // Chance of KO - if (rand(3 + powerlevel) >= 5 && target.stat <= UNCONSCIOUS) + if(rand(6 + powerlevel) >= 6 && target.stat <= UNCONSCIOUS) target.Unconscious(40) // Attack! playsound(get_turf(target), 'sound/weapons/punch4.ogg', 60, 1, -1) diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index a0bf818f46..8195b3d84b 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -36,7 +36,7 @@ if(bleed_rate <= 0) bleed_rate = 0 - if (HAS_TRAIT(src, TRAIT_NOPULSE)) //Bloodsuckers don't need to be here. + if(HAS_TRAIT(src, TRAIT_NOMARROW)) //Bloodsuckers don't need to be here. return if(bodytemperature >= TCRYO && !(HAS_TRAIT(src, TRAIT_NOCLONE))) //cryosleep or husked people do not pump the blood. diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index ff182b19ea..069190d9e0 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -44,7 +44,7 @@ C.faction |= "slime" /datum/species/jelly/spec_life(mob/living/carbon/human/H) - if(H.stat == DEAD && HAS_TRAIT(src, TRAIT_NOMARROW)) //can't farm slime jelly from a dead slime/jelly person indefinitely, and no regeneration for vampires + if(H.stat == DEAD || HAS_TRAIT(H, TRAIT_NOMARROW)) //can't farm slime jelly from a dead slime/jelly person indefinitely, and no regeneration for vampires return if(!H.blood_volume) H.blood_volume += 5 diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index bd60880324..dfda74b22b 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -610,6 +610,8 @@ All effects don't start immediately, but rather get worse over time; the rate is value = 1.3 /datum/reagent/consumable/ethanol/bloody_mary/on_mob_life(mob/living/carbon/C) + if((HAS_TRAIT(C, TRAIT_NOMARROW))) + return if(C.blood_volume < (BLOOD_VOLUME_NORMAL*C.blood_ratio)) C.blood_volume = min((BLOOD_VOLUME_NORMAL*C.blood_ratio), C.blood_volume + 3) //Bloody Mary quickly restores blood loss. ..() diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index e3962e89c2..3180fb99f6 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -355,6 +355,8 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) value = 1 /datum/reagent/medicine/salglu_solution/on_mob_life(mob/living/carbon/M) + if((HAS_TRAIT(M, TRAIT_NOMARROW))) + return if(last_added) M.blood_volume -= last_added last_added = 0 diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index e91719504e..00ff3885ea 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -38,6 +38,8 @@ L.add_blood_DNA(list(data["blood_DNA"] = data["blood_type"])) /datum/reagent/blood/on_mob_life(mob/living/carbon/C) //Because lethals are preferred over stamina. damnifino. + if((HAS_TRAIT(C, TRAIT_NOMARROW))) + return //We dont want vampires getting toxed from blood var/blood_id = C.get_blood_id() if((blood_id == "blood" || blood_id == "jellyblood")) if(!data || !(data["blood_type"] in get_safe_blood(C.dna.blood_type))) //we only care about bloodtype here because this is where the poisoning should be @@ -1116,6 +1118,8 @@ color = "#c2391d" /datum/reagent/iron/on_mob_life(mob/living/carbon/C) + if((HAS_TRAIT(C, TRAIT_NOMARROW))) + return if(C.blood_volume < (BLOOD_VOLUME_NORMAL*C.blood_ratio)) C.blood_volume += 0.01 //we'll have synthetics from medbay. ..() diff --git a/code/modules/research/nanites/nanite_programs/healing.dm b/code/modules/research/nanites/nanite_programs/healing.dm index 50fb5efcb0..e2e1661ab7 100644 --- a/code/modules/research/nanites/nanite_programs/healing.dm +++ b/code/modules/research/nanites/nanite_programs/healing.dm @@ -98,7 +98,7 @@ /datum/nanite_program/blood_restoring/check_conditions() if(iscarbon(host_mob)) var/mob/living/carbon/C = host_mob - if(C.blood_volume >= (BLOOD_VOLUME_SAFE*C.blood_ratio)) + if(C.blood_volume >= (BLOOD_VOLUME_SAFE*C.blood_ratio) || (HAS_TRAIT(C, TRAIT_NOMARROW))) return FALSE else return FALSE From 7fa2232fc75d0fc9189d720b3250d7427cc5eeed Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Thu, 5 Dec 2019 01:28:44 +0100 Subject: [PATCH 15/64] Adds view and viewers checks for ranged construction devices such as ARCD and RLD. --- code/game/objects/items/RCD.dm | 27 ++++++++------------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm index 016bfb5e8b..cd7735c92a 100644 --- a/code/game/objects/items/RCD.dm +++ b/code/game/objects/items/RCD.dm @@ -130,19 +130,12 @@ RLD return . /obj/item/construction/proc/range_check(atom/A, mob/user) - if(!(A in range(custom_range, get_turf(user)))) + if(!(A in range(custom_range, get_turf(user))) || !((A in view(user.client.view, user)) || (user in viewers(user.client.view, A)))) to_chat(user, "The \'Out of Range\' light on [src] blinks red.") return FALSE else return TRUE -/obj/item/construction/proc/prox_check(proximity) - if(proximity) - return TRUE - else - return FALSE - - /obj/item/construction/rcd name = "rapid-construction-device (RCD)" icon = 'icons/obj/tools.dmi' @@ -523,7 +516,12 @@ RLD /obj/item/construction/rcd/afterattack(atom/A, mob/user, proximity) . = ..() - if(!prox_check(proximity)) + if(!proximity) + if(!ranged || !range_check(A,user)) //early return not-in-range sanity. + return + if(target_check(A,user)) + user.Beam(A,icon_state="rped_upgrade",time=30) + rcd_create(A,user) return rcd_create(A, user) @@ -635,6 +633,7 @@ RLD max_matter = INFINITY matter = INFINITY upgrade = TRUE + ranged = TRUE // Ranged RCD @@ -650,20 +649,10 @@ RLD item_state = "oldrcd" has_ammobar = FALSE -/obj/item/construction/rcd/arcd/afterattack(atom/A, mob/user) - . = ..() - if(!range_check(A,user)) - return - if(target_check(A,user)) - user.Beam(A,icon_state="rped_upgrade",time=30) - rcd_create(A,user) - - // RAPID LIGHTING DEVICE - /obj/item/construction/rld name = "rapid-light-device (RLD)" desc = "A device used to rapidly provide lighting sources to an area. Reload with metal, plasteel, glass or compressed matter cartridges." From a7d2fac0e9abbe5820e9b26b2c271ed512e9eefd Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Thu, 5 Dec 2019 01:55:21 +0100 Subject: [PATCH 16/64] "Why does it tell me it's "out of range", but not to you, X-ray man?" --- code/game/objects/items/RCD.dm | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm index cd7735c92a..1c83d64ee8 100644 --- a/code/game/objects/items/RCD.dm +++ b/code/game/objects/items/RCD.dm @@ -130,11 +130,16 @@ RLD return . /obj/item/construction/proc/range_check(atom/A, mob/user) - if(!(A in range(custom_range, get_turf(user))) || !((A in view(user.client.view, user)) || (user in viewers(user.client.view, A)))) + if(!(A in range(custom_range, get_turf(user)))) to_chat(user, "The \'Out of Range\' light on [src] blinks red.") return FALSE - else - return TRUE + var/view_range = user.client ? user.client.view : world.view + //if user can't be seen from A (only checks surroundings' opaqueness) and can't see A. + //jarring, but it should stop people from targetting atoms they can't see... + //excluding darkness, to allow RLD to be used to light pitch black dark areas. + if(!((user in view(view_range, A)) || (user in viewers(view_range, A)))) + return FALSE + return TRUE /obj/item/construction/rcd name = "rapid-construction-device (RCD)" From 33fee5bd3787b28e74e140e167511596cd338e66 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Thu, 5 Dec 2019 02:12:34 +0100 Subject: [PATCH 17/64] Witty remark included. --- code/game/objects/items/RCD.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm index 1c83d64ee8..24c241aabc 100644 --- a/code/game/objects/items/RCD.dm +++ b/code/game/objects/items/RCD.dm @@ -138,6 +138,7 @@ RLD //jarring, but it should stop people from targetting atoms they can't see... //excluding darkness, to allow RLD to be used to light pitch black dark areas. if(!((user in view(view_range, A)) || (user in viewers(view_range, A)))) + to_chat(user, "You focus, pointing \the [src] at whatever outside your field of vision in the given direction... to no avail.") return FALSE return TRUE From 82d1497ddc969d116681da766b7c7a36c782de48 Mon Sep 17 00:00:00 2001 From: Artur Date: Thu, 5 Dec 2019 17:29:00 +0200 Subject: [PATCH 18/64] Fixes bad buds and toxin healing --- code/__DEFINES/status_effects.dm | 3 + code/datums/status_effects/debuffs.dm | 28 ++- .../game/gamemodes/bloodsucker/bloodsucker.dm | 10 +- code/game/gamemodes/bloodsucker/hunter.dm | 3 +- code/game/gamemodes/game_mode.dm | 2 +- .../items/stacks/sheets/sheet_types.dm | 33 +++- .../bloodsucker/bloodsucker_integration.dm | 4 + .../bloodsucker/bloodsucker_life.dm | 166 +++++------------- .../bloodsucker/datum_bloodsucker.dm | 2 +- .../antagonists/bloodsucker/datum_hunter.dm | 22 +-- .../bloodsucker/items/bloodsucker_stake.dm | 62 ++----- .../bloodsucker/powers/bs_fortitude.dm | 11 +- .../bloodsucker/powers/bs_mesmerize.dm | 13 +- code/modules/mob/living/silicon/login.dm | 3 + 14 files changed, 142 insertions(+), 220 deletions(-) diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index 0f1a36d663..d191ba8f0c 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -81,6 +81,9 @@ #define STATUS_EFFECT_BREASTS_ENLARGEMENT /datum/status_effect/chem/breast_enlarger //Applied slowdown due to the ominous bulk. #define STATUS_EFFECT_PENIS_ENLARGEMENT /datum/status_effect/chem/penis_enlarger //More applied slowdown, just like the above. + +#define STATUS_EFFECT_NO_COMBAT_MODE /datum/status_effect/no_combat_mode/ //Wont allow combat mode and will disable it +#define STATUS_EFFECT_MESMERIZE /datum/status_effect/no_combat_mode/mesmerize //Just reskinned no_combat_mode ///////////// // NEUTRAL // ///////////// diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index 84ed012b82..7a5d32d48c 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -80,7 +80,31 @@ desc = "You've fallen asleep. Wait a bit and you should wake up. Unless you don't, considering how helpless you are." icon_state = "asleep" -//TASER +/datum/status_effect/no_combat_mode/ + id = "no_combat_mode" + blocks_combatmode = TRUE + alert_type = null + status_type = STATUS_EFFECT_REPLACE + +/datum/status_effect/no_combat_mode/on_creation(mob/living/new_owner, set_duration) + if(isnum(set_duration)) + duration = set_duration + . = ..() + if(iscarbon(owner)) + var/mob/living/carbon/C = owner + if(C.combatmode) + C.toggle_combat_mode(TRUE) + +/datum/status_effect/no_combat_mode/mesmerize + id = "Mesmerize" + alert_type = /obj/screen/alert/status_effect/mesmerized + +/obj/screen/alert/status_effect/mesmerized + name = "Mesmerized" + desc = "You cant tear your sight from who is in front of you...Their gaze is simply too enthralling.." + icon = 'icons/mob/actions/bloodsucker.dmi' + icon_state = "power_mez" + /datum/status_effect/electrode id = "tased" blocks_combatmode = TRUE @@ -666,4 +690,4 @@ datum/status_effect/pacify if(LAZYLEN(targets) && I) to_chat(owner, "Your arm spasms!") owner.log_message("threw [I] due to a Muscle Spasm", LOG_ATTACK) - owner.throw_item(pick(targets)) \ No newline at end of file + owner.throw_item(pick(targets)) diff --git a/code/game/gamemodes/bloodsucker/bloodsucker.dm b/code/game/gamemodes/bloodsucker/bloodsucker.dm index db92248347..c188036786 100644 --- a/code/game/gamemodes/bloodsucker/bloodsucker.dm +++ b/code/game/gamemodes/bloodsucker/bloodsucker.dm @@ -2,7 +2,7 @@ /datum/game_mode var/list/datum/mind/bloodsuckers = list() // List of minds belonging to this game mode. var/list/datum/mind/vassals = list() // List of minds that have been turned into Vassals. - var/list/datum/mind/vamphunters = list() // List of minds hunting vampires. + //var/list/datum/mind/vamphunters = list() // List of minds hunting vampires. Disabled at the moment var/obj/effect/sunlight/bloodsucker_sunlight // Sunlight Timer. Created on first Bloodsucker assign. Destroyed on last removed Bloodsucker. // LISTS // @@ -18,8 +18,8 @@ false_report_weight = 1 restricted_jobs = list("AI","Cyborg") protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") - required_players = 0 - required_enemies = 1 + required_players = 10 + required_enemies = 2 recommended_enemies = 4 reroll_friendly = 1 enemy_minimum_age = 7 @@ -57,8 +57,8 @@ log_game("[bloodsucker.key] (ckey) has been selected as a Bloodsucker.") antag_candidates.Remove(bloodsucker) // Apparently you can also write antag_candidates -= bloodsucker - // FULPSTATION: Assign Hunters (as many as monsters, plus one) - assign_monster_hunters(bloodsuckers.len, TRUE, bloodsuckers) // FULP + // Assign Hunters (as many as monsters, plus one) + //assign_monster_hunters(bloodsuckers.len, TRUE, bloodsuckers) // Disabled for now // Do we have enough vamps to continue? return bloodsuckers.len >= required_enemies diff --git a/code/game/gamemodes/bloodsucker/hunter.dm b/code/game/gamemodes/bloodsucker/hunter.dm index 49b97b0b21..cec990e9c3 100644 --- a/code/game/gamemodes/bloodsucker/hunter.dm +++ b/code/game/gamemodes/bloodsucker/hunter.dm @@ -1,6 +1,6 @@ - +/* // Called from game mode pre_setup() /datum/game_mode/proc/assign_monster_hunters(monster_count = 4, guaranteed_hunters = FALSE, list/datum/mind/exclude_from_hunter) @@ -47,3 +47,4 @@ A.bad_dude = amEvil hunter.add_antag_datum(A) amEvil = FALSE // Every other hunter is just a boring greytider +*/ diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index b75b2184cd..a56bf8da43 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -81,7 +81,7 @@ ///Everyone should now be on the station and have their normal gear. This is the place to give the special roles extra things /datum/game_mode/proc/post_setup(report) //Gamemodes can override the intercept report. Passing TRUE as the argument will force a report. - finalize_monster_hunters() + //finalize_monster_hunters() Disabled for now if(!report) report = !CONFIG_GET(flag/no_intercept_report) addtimer(CALLBACK(GLOBAL_PROC, .proc/display_roundstart_logout_report), ROUNDSTART_LOGOUT_REPORT_TIME) diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index c10fb0fa2c..56f1a3f9f0 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -228,7 +228,7 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \ /obj/item/stack/sheet/mineral/wood name = "wooden plank" - desc = "One can only guess that this is a bunch of wood." + desc = "One can only guess that this is a bunch of wood. You might be able to make a stake with this if you use something sharp on it" singular_name = "wood plank" icon_state = "sheet-wood" item_state = "sheet-wood" @@ -240,6 +240,35 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \ novariants = TRUE grind_results = list("carbon" = 20) + +/obj/item/stack/sheet/mineral/wood/attackby(obj/item/W, mob/user, params) // NOTE: sheet_types.dm is where the WOOD stack lives. Maybe move this over there. + // Taken from /obj/item/stack/rods/attackby in [rods.dm] + if(W.get_sharpness()) + user.visible_message("[user] begins whittling [src] into a pointy object.", \ + "You begin whittling [src] into a sharp point at one end.", \ + "You hear wood carving.") + // 8 Second Timer + if(!do_mob(user, src, 80)) + return + // Make Stake + var/obj/item/stake/basic/new_item = new(usr.loc) + user.visible_message("[user] finishes carving a stake out of [src].", \ + "You finish carving a stake out of [src].") + // Prepare to Put in Hands (if holding wood) + var/obj/item/stack/sheet/mineral/wood/N = src + var/replace = (user.get_inactive_held_item() == N) + // Use Wood + N.use(1) + // If stack depleted, put item in that hand (if it had one) + if (!N && replace) + user.put_in_hands(new_item) + if(istype(W, merge_type)) + var/obj/item/stack/S = W + if(merge(S)) + to_chat(user, "Your [S.name] stack now contains [S.get_amount()] [S.singular_name]\s.") + else + . = ..() + /obj/item/stack/sheet/mineral/wood/Initialize(mapload, new_amount, merge = TRUE) recipes = GLOB.wood_recipes return ..() @@ -695,5 +724,3 @@ new /datum/stack_recipe("paper frame door", /obj/structure/mineral_door/paperfra merge_type = /obj/item/stack/sheet/cotton/durathread pull_effort = 70 loom_result = /obj/item/stack/sheet/durathread - - diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_integration.dm b/code/modules/antagonists/bloodsucker/bloodsucker_integration.dm index 0fa681e435..5e38a29346 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_integration.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_integration.dm @@ -30,14 +30,17 @@ // Do NOT count the damage on prosthetics for this. /mob/living/proc/getBruteLoss_nonProsthetic() return getBruteLoss() + /mob/living/proc/getFireLoss_nonProsthetic() return getFireLoss() + /mob/living/carbon/getBruteLoss_nonProsthetic() var/amount = 0 for(var/obj/item/bodypart/BP in bodyparts) if (BP.status < 2) amount += BP.brute_dam return amount + /mob/living/carbon/getFireLoss_nonProsthetic() var/amount = 0 for(var/obj/item/bodypart/BP in bodyparts) @@ -45,6 +48,7 @@ amount += BP.burn_dam return amount +/mob/living/carbon // EXAMINING /mob/living/carbon/human/proc/ReturnVampExamine(var/mob/viewer) if (!mind || !viewer.mind) diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm index 9eaddad5b5..e2bf217ab9 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm @@ -10,53 +10,27 @@ // // Show as dead when... - - - - - - -/datum/antagonist/bloodsucker/proc/LifeTick() // Should probably run from life.dm, same as handle_changeling +/datum/antagonist/bloodsucker/proc/LifeTick()// Should probably run from life.dm, same as handle_changeling, but will be an utter pain to move set waitfor = FALSE // Don't make on_gain() wait for this function to finish. This lets this code run on the side. - var/notice_healing = FALSE - while (owner && !AmFinalDeath()) // owner.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) == src - - // Deduct Blood - if (owner.current.stat == CONSCIOUS && !poweron_feed && !HAS_TRAIT(owner.current, TRAIT_DEATHCOMA)) + while(owner && !AmFinalDeath()) // owner.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) == src + if(owner.current.stat == CONSCIOUS && !poweron_feed && !HAS_TRAIT(owner.current, TRAIT_DEATHCOMA)) // Deduct Blood AddBloodVolume(-0.09) // -.15 (before tick went from 10 to 30, but we also charge more for faking life now) - - // Heal - if (HandleHealing(1)) - if (notice_healing == FALSE && owner.current.blood_volume > 0) + if(HandleHealing(1)) // Heal + if(notice_healing == FALSE && owner.current.blood_volume > 0) to_chat(owner, "The power of your blood begins knitting your wounds...") notice_healing = TRUE - else if (notice_healing == TRUE) - notice_healing = FALSE - - // Apply Low Blood Effects - HandleStarving() - - // Death - HandleDeath() - - // Standard Update - update_hud() - - // Daytime Sleep in Coffin + else if(notice_healing == TRUE) + notice_healing = FALSE // Apply Low Blood Effects + HandleStarving() // Death + HandleDeath() // Standard Update + update_hud()// Daytime Sleep in Coffin if (SSticker.mode.is_daylight() && !HAS_TRAIT_FROM(owner.current, TRAIT_DEATHCOMA, "bloodsucker")) if(istype(owner.current.loc, /obj/structure/closet/crate/coffin)) Torpor_Begin() - - // Wait before next pass - sleep(10)//sleep(30) - - // Free my Vassals! (if I haven't yet) - FreeAllVassals() - - - - + // Wait before next pass + sleep(10) + FreeAllVassals() // Free my Vassals! (if I haven't yet) ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -64,18 +38,14 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - /datum/antagonist/bloodsucker/proc/AddBloodVolume(value) owner.current.blood_volume = CLAMP(owner.current.blood_volume + value, 0, maxBloodVolume) update_hud() - /datum/antagonist/bloodsucker/proc/HandleFeeding(mob/living/carbon/target, mult=1) // mult: SILENT feed is 1/3 the amount - var/blood_taken = min(feedAmount, target.blood_volume) * mult // Starts at 15 (now 8 since we doubled the Feed time) target.blood_volume -= blood_taken - // Simple Animals lose a LOT of blood, and take damage. This is to keep cats, cows, and so forth from giving you insane amounts of blood. if (!ishuman(target)) target.blood_volume -= (blood_taken / max(target.mob_size, 0.1)) * 3.5 // max() to prevent divide-by-zero @@ -83,33 +53,26 @@ if (target.blood_volume <= 0) target.blood_volume = 0 target.death(0) - /////////// // Shift Body Temp (toward Target's temp, by volume taken) owner.current.bodytemperature = ((owner.current.blood_volume * owner.current.bodytemperature) + (blood_taken * target.bodytemperature)) / (owner.current.blood_volume + blood_taken) // our volume * temp, + their volume * temp, / total volume /////////// - // Reduce Value Quantity if (target.stat == DEAD) // Penalty for Dead Blood blood_taken /= 3 if (!ishuman(target)) // Penalty for Non-Human Blood blood_taken /= 2 //if (!iscarbon(target)) // Penalty for Animals (they're junk food) - - // Apply to Volume AddBloodVolume(blood_taken) - // Reagents (NOT Blood!) if(target.reagents && target.reagents.total_volume) target.reagents.reaction(owner.current, INGEST, 1) // Run Reaction: what happens when what they have mixes with what I have? target.reagents.trans_to(owner.current, 1) // Run transfer of 1 unit of reagent from them to me. - // Blood Gulp Sound owner.current.playsound_local(null, 'sound/effects/singlebeat.ogg', 40, 1) // Play THIS sound for user only. The "null" is where turf would go if a location was needed. Null puts it right in their head. - /datum/mood_event/drankblood description = "I have fed greedly from that which nourishes me.\n" mood_change = 10 @@ -166,86 +129,60 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// /datum/antagonist/bloodsucker/proc/HandleHealing(mult = 1) - // NOTE: Mult of 0 is just a TEST to see if we are injured and need to go into Torpor! - // It is called from your coffin on close (by you only) - - if (poweron_masquerade == TRUE || owner.current.AmStaked()) + //It is called from your coffin on close (by you only) + if(poweron_masquerade == TRUE || owner.current.AmStaked()) return FALSE - - owner.current.adjustStaminaLoss(-2 * (regenRate * 4) * mult, 0) // Humans lose stamina damage really quickly. Vamps should heal more. + owner.current.adjustStaminaLoss(-3 * (regenRate * 4) * mult, 0) // Humans lose stamina damage really quickly. Vamps should heal more. owner.current.adjustCloneLoss(-1 * (regenRate * 4) * mult, 0) owner.current.adjustOrganLoss(ORGAN_SLOT_BRAIN, -1 * (regenRate * 4) * mult) //adjustBrainLoss(-1 * (regenRate * 4) * mult, 0) - // No Bleeding - if (ishuman(owner.current)) + if (ishuman(owner.current)) //NOTE Current bleeding is horrible, not to count the amount of blood ballistics delete. var/mob/living/carbon/human/H = owner.current H.bleed_rate = 0 - - // Damage Heal: Do I have damage to ANY bodypart? - if (iscarbon(owner.current)) + if (iscarbon(owner.current)) // Damage Heal: Do I have damage to ANY bodypart? var/mob/living/carbon/C = owner.current var/costMult = 1 // Coffin makes it cheaper - - // BURN: Heal in Coffin while Fakedeath, or when damage above maxhealth (you can never fully heal fire) - var/fireheal = 0 + var/fireheal = 0 // BURN: Heal in Coffin while Fakedeath, or when damage above maxhealth (you can never fully heal fire) var/amInCoffinWhileTorpor = istype(C.loc, /obj/structure/closet/crate/coffin) && (mult == 0 || HAS_TRAIT(C, TRAIT_DEATHCOMA)) // Check for mult 0 OR death coma. (mult 0 means we're testing from coffin) if(amInCoffinWhileTorpor) mult *= 5 // Increase multiplier if we're sleeping in a coffin. fireheal = min(C.getFireLoss_nonProsthetic(), regenRate) // NOTE: Burn damage ONLY heals in torpor. costMult = 0.25 - // Extinguish Fire - C.ExtinguishMob() + C.ExtinguishMob() // Extinguish Fire else - // No Blood? Lower Mult - if (owner.current.blood_volume <= 0) + if (owner.current.blood_volume <= 0) // No Blood? Lower Mult mult = 0.25 // Crit from burn? Lower damage to maximum allowed. //if (C.getFireLoss() > owner.current.getMaxHealth()) // fireheal = regenRate / 2 // BRUTE: Always Heal var/bruteheal = min(C.getBruteLoss_nonProsthetic(), regenRate) - + var/toxinheal = min(C.getToxLoss(), regenRate) // Heal if Damaged - if (bruteheal + fireheal > 0) - // Just a check? Don't heal/spend, and return. + if (bruteheal + fireheal + toxinheal > 0) // Just a check? Don't heal/spend, and return. if (mult == 0) return TRUE // We have damage. Let's heal (one time) C.adjustBruteLoss(-bruteheal * mult, forced=TRUE)// Heal BRUTE / BURN in random portions throughout the body. C.adjustFireLoss(-fireheal * mult, forced=TRUE) + C.adjustToxLoss(-toxinheal * mult * 2, forced=TRUE) //Toxin healing because vamps arent immune //C.heal_overall_damage(bruteheal * mult, fireheal * mult) // REMOVED: We need to FORCE this, because otherwise, vamps won't heal EVER. Swapped to above. - - // Pay Cost AddBloodVolume((bruteheal * -0.5 + fireheal * -1) / mult * costMult) // Costs blood to heal - - // Healed! Done for this tick. - return TRUE - - // Limbs? (And I have no other healing) - if (amInCoffinWhileTorpor) - - // Heal Missing - var/list/missing = owner.current.get_missing_limbs() - if (missing.len) - // Cycle through ALL limbs and regen them! - for (var/targetLimbZone in missing) - // 1) Find ONE Limb and regenerate it. - //var/targetLimbZone = pick(missing) + return TRUE // Healed! Done for this tick. + if (amInCoffinWhileTorpor) // Limbs? (And I have no other healing) + var/list/missing = owner.current.get_missing_limbs() // Heal Missing + if (missing.len) // Cycle through ALL limbs and regen them! + for (var/targetLimbZone in missing) // 1) Find ONE Limb and regenerate it. owner.current.regenerate_limb(targetLimbZone, 0) // regenerate_limbs() <--- If you want to EXCLUDE certain parts, do it like this ----> regenerate_limbs(0, list("head")) - // 2) Limb returns Damaged - var/obj/item/bodypart/L = owner.current.get_bodypart( targetLimbZone ) + var/obj/item/bodypart/L = owner.current.get_bodypart( targetLimbZone ) // 2) Limb returns Damaged AddBloodVolume(20 * costMult) // Costs blood to heal L.brute_dam = 60 to_chat(owner.current, "Your flesh knits as it regrows [L]!") playsound(owner.current, 'sound/magic/demon_consume.ogg', 50, 1) - - // DONE! After regenerating ANY number of limbs, we stop here. return TRUE - /*else // REMOVED: For now, let's just leave prosthetics on. Maybe you WANT to be a robovamp. // Remove Prosthetic/False Limb for(var/obj/item/bodypart/BP in C.bodyparts) @@ -256,38 +193,26 @@ return TRUE // NOTE: Limbs have a "status", like their hosts "stat". 2 is dead (aka Prosthetic). 1 seems to be idle/alive. */ - - // Cure Final Disabilities - CureDisabilities() - - // Remove Embedded! - C.remove_all_embedded_objects() - // Heal Organs (will respawn original eyes etc. but we replace right away, next) - owner.current.regenerate_organs() - // Eyes/Heart + CureDisabilities() // Cure Final Disabilities + C.remove_all_embedded_objects() // Remove Embedded! + owner.current.regenerate_organs() // Heal Organs (will respawn original eyes etc. but we replace right away, next) CheckVampOrgans() // Heart, Eyes - return FALSE - /datum/antagonist/bloodsucker/proc/CureDisabilities() var/mob/living/carbon/C = owner.current - C.cure_blind(list(EYE_DAMAGE))//() C.cure_nearsighted(EYE_DAMAGE) C.set_blindness(0) // Added 9/2/19 C.set_blurriness(0) // Added 9/2/19 C.update_tint() // Added 9/2/19 C.update_sight() // Added 9/2/19 - for(var/O in C.internal_organs) //owner.current.adjust_eye_damage(-100) // This was removed by TG var/obj/item/organ/organ = O organ.setOrganDamage(0) - owner.current.cure_husk() - -// I am hungry! +// I am thirsty for blud! /datum/antagonist/bloodsucker/proc/HandleStarving() // High: Faster Healing @@ -311,7 +236,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /datum/antagonist/bloodsucker/proc/HandleDeath() - // FINAL DEATH + // FINAL DEATH // Fire Damage? (above double health) if (owner.current.getFireLoss_nonProsthetic() >= owner.current.getMaxHealth() * 2) FinalDeath() @@ -328,16 +253,15 @@ if (!owner.current.HaveBloodsuckerBodyparts()) FinalDeath() return - // Disable Powers: Masquerade * NOTE * This should happen as a FLAW! //if (stat >= UNCONSCIOUS) // for (var/datum/action/bloodsucker/masquerade/P in powers) // P.Deactivate() - // TEMP DEATH var/total_brute = owner.current.getBruteLoss_nonProsthetic() var/total_burn = owner.current.getFireLoss_nonProsthetic() - var/total_damage = total_brute + total_burn + var/total_toxloss = owner.current.getToxLoss() //This is neater than just putting it in total_damage + var/total_damage = total_brute + total_burn + total_toxloss // Died? Convert to Torpor (fake death) if (owner.current.stat >= DEAD) Torpor_Begin() @@ -345,8 +269,8 @@ if (poweron_masquerade == TRUE) to_chat(owner, "Your wounds will not heal until you disable the Masquerade power.") // End Torpor: - else // No damage, OR brute healed and NOT in coffin (since you cannot heal burn) - if (total_damage <= 0 || total_brute <= 0 && !istype(owner.current.loc, /obj/structure/closet/crate/coffin)) + else // No damage, OR toxin healed AND brute healed and NOT in coffin (since you cannot heal burn) + if (total_damage <= 0 || total_toxloss <= 0 && total_brute <= 0 && !istype(owner.current.loc, /obj/structure/closet/crate/coffin)) // Not Daytime, Not in Torpor if (!SSticker.mode.is_daylight() && HAS_TRAIT_FROM(owner.current, TRAIT_DEATHCOMA, "bloodsucker")) Torpor_End() @@ -377,8 +301,8 @@ owner.current.stat = SOFT_CRIT owner.current.cure_fakedeath("bloodsucker") // Come after SOFT_CRIT or else it fails REMOVE_TRAIT(owner.current, TRAIT_NODEATH, "bloodsucker") - REMOVE_TRAIT(owner.current, TRAIT_RESISTHIGHPRESSURE, "bloodsucker") // So you can heal in 0 G. otherwise you just...heal forever. - REMOVE_TRAIT(owner.current, TRAIT_RESISTLOWPRESSURE, "bloodsucker") // So you can heal in 0 G. otherwise you just...heal forever. + REMOVE_TRAIT(owner.current, TRAIT_RESISTHIGHPRESSURE, "bloodsucker") + REMOVE_TRAIT(owner.current, TRAIT_RESISTLOWPRESSURE, "bloodsucker") to_chat(owner, "You have recovered from Torpor.") @@ -395,20 +319,18 @@ return !current || QDELETED(current) || !isliving(current) || isbrain(current) || !get_turf(current) // NOTE: "isliving()" is not the same as STAT == CONSCIOUS. This is to make sure you're not a BORG (aka silicon) /datum/antagonist/bloodsucker/proc/FinalDeath() - + if(!iscarbon(owner.current)) //Check for non carbons. + owner.current.gib() + return playsound(get_turf(owner.current), 'sound/effects/tendril_destroyed.ogg', 60, 1) owner.current.drop_all_held_items() owner.current.unequip_everything() var/mob/living/carbon/C = owner.current C.remove_all_embedded_objects() - // Make me UN-CLONEABLE owner.current.hellbound = TRUE // This was done during creation, but let's do it again one more time...to make SURE this guy stays dead. - - // Free my Vassals! FreeAllVassals() - // Elders get Dusted if (vamplevel >= 4) // (vamptitle) owner.current.visible_message("[owner.current]'s skin crackles and dries, their skin and bones withering to dust. A hollow cry whips from what is now a sandy pile of remains.", \ diff --git a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm index 8b5c8dff46..e52b63110c 100644 --- a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm +++ b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm @@ -200,7 +200,7 @@ var/datum/species/S = H.dna.species // Make Changes S.brutemod *= 0.5 - S.burnmod += 0.2 // <-------------------- Start small, but burn mod increases based on rank! + S.burnmod += 0.1 // <-------------------- Start small, but burn mod increases based on rank! S.coldmod = 0 S.stunmod *= 0.25 S.siemens_coeff *= 0.75 //base electrocution coefficient 1 diff --git a/code/modules/antagonists/bloodsucker/datum_hunter.dm b/code/modules/antagonists/bloodsucker/datum_hunter.dm index 7b07b68b36..2d680d0e09 100644 --- a/code/modules/antagonists/bloodsucker/datum_hunter.dm +++ b/code/modules/antagonists/bloodsucker/datum_hunter.dm @@ -1,3 +1,4 @@ +/* #define HUNTER_SCAN_MIN_DISTANCE 8 #define HUNTER_SCAN_MAX_DISTANCE 35 #define HUNTER_SCAN_PING_TIME 20 //5s update time. @@ -103,7 +104,7 @@ // TAKEN FROM: /datum/action/changeling/pheromone_receptors // pheromone_receptors.dm for a version of tracking that Changelings have! -/* + /datum/status_effect/agent_pinpointer/hunter_edition alert_type = /obj/screen/alert/status_effect/agent_pinpointer/hunter_edition minimum_range = HUNTER_SCAN_MIN_DISTANCE @@ -159,7 +160,7 @@ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - +/* /datum/action/bloodsucker/trackvamp/ @@ -169,35 +170,25 @@ background_icon_state = "vamp_power_off" //And this is the state for the background icon icon_icon = 'icons/mob/actions/bloodsucker.dmi' //This is the file for the ACTION icon button_icon_state = "power_hunter" //And this is the state for the action icon - - // Action-Related - amToggle = FALSE - cooldown = 200 // 10 ticks, 1 second. + amToggle = FALSE // Action-Related + cooldown = 300 // 10 ticks, 1 second. bloodcost = 0 - - /datum/action/bloodsucker/trackvamp/ActivatePower() var/mob/living/user = owner - to_chat(user, "You look around, scanning your environment and discerning signs of any filthy, wretched affronts to the natural order.") if (!do_mob(user,owner,80)) return - // Add Power // REMOVED //user.apply_status_effect(/datum/status_effect/agent_pinpointer/hunter_edition) // We don't track direction anymore! - // Return text indicating direction display_proximity() - // NOTE: DON'T DEACTIVATE! //DeactivatePower() - - /datum/action/bloodsucker/trackvamp/proc/display_proximity() // Pick target var/turf/my_loc = get_turf(owner) @@ -209,7 +200,7 @@ var/list/datum/mind/monsters = list() monsters += SSticker.mode.bloodsuckers monsters += SSticker.mode.devils - monsters += SSticker.mode.cult + //monsters += SSticker.mode.cult monsters += SSticker.mode.wizards monsters += SSticker.mode.apprentices monsters += SSticker.mode.servants_of_ratvar @@ -301,3 +292,4 @@ var/damage = rand(A.dna.species.punchdamagelow, A.dna.species.punchdamagehigh) */ +*/ diff --git a/code/modules/antagonists/bloodsucker/items/bloodsucker_stake.dm b/code/modules/antagonists/bloodsucker/items/bloodsucker_stake.dm index a47cc0ce68..822175aa25 100644 --- a/code/modules/antagonists/bloodsucker/items/bloodsucker_stake.dm +++ b/code/modules/antagonists/bloodsucker/items/bloodsucker_stake.dm @@ -33,7 +33,6 @@ attack_verb = list("staked") slot_flags = ITEM_SLOT_BELT w_class = WEIGHT_CLASS_SMALL - hitsound = 'sound/weapons/bladeslice.ogg' force = 6 throwforce = 10 @@ -43,19 +42,14 @@ obj_integrity = 30 max_integrity = 30 //embedded_fall_pain_multiplier - var/staketime = 120 // Time it takes to embed the stake into someone's chest. - - - /obj/item/stake/basic name = "wooden stake" // This exists so Hardened/Silver Stake can't have a welding torch used on them. - /obj/item/stake/basic/attackby(obj/item/W, mob/user, params) - if (istype(W, /obj/item/weldingtool)) + if(istype(W, /obj/item/weldingtool)) //if (amWelded) // to_chat(user, "This stake has already been treated with fire.") // return @@ -67,27 +61,24 @@ "You scorch the pointy end of [src] with the welding tool.", \ "You hear welding.") // 8 Second Timer - if (!do_mob(user, src, 80)) + if(!do_mob(user, src, 80)) return - // Create the Stake qdel(src) var/obj/item/stake/hardened/new_item = new(usr.loc) user.put_in_hands(new_item) - else return ..() - - /obj/item/stake/afterattack(atom/target, mob/user, proximity) //to_chat(world, "DEBUG: Staking ") // Invalid Target, or not targetting chest with HARM intent? - if (!iscarbon(target) || check_zone(user.zone_selected) != "chest" || user.a_intent != INTENT_HARM) + if(!iscarbon(target) || check_zone(user.zone_selected) != "chest" || user.a_intent != INTENT_HARM) return var/mob/living/carbon/C = target // Needs to be Down/Slipped in some way to Stake. - if (!C.can_be_staked()) + if(!C.can_be_staked() || target == user) + to_chat(user, "You cant stake [target] when they are moving moving about! They have to be laying down!") return // Oops! Can't. if(HAS_TRAIT(C, TRAIT_PIERCEIMMUNE)) @@ -96,68 +87,35 @@ // Make Attempt... to_chat(user, "You put all your weight into embedding the stake into [target]'s chest...") playsound(user, 'sound/magic/Demon_consume.ogg', 50, 1) - if (!do_mob(user, C, staketime, 0, 1, extra_checks=CALLBACK(C, /mob/living/carbon/proc/can_be_staked))) // user / target / time / uninterruptable / show progress bar / extra checks + if(!do_mob(user, C, staketime, 0, 1, extra_checks=CALLBACK(C, /mob/living/carbon/proc/can_be_staked))) // user / target / time / uninterruptable / show progress bar / extra checks return - // Drop & Embed Stake user.visible_message("[user.name] drives the [src] into [target]'s chest!", \ "You drive the [src] into [target]'s chest!") playsound(get_turf(target), 'sound/effects/splat.ogg', 40, 1) - user.dropItemToGround(src, TRUE) //user.drop_item() // "drop item" doesn't seem to exist anymore. New proc is user.dropItemToGround() but it doesn't seem like it's needed now? - var/obj/item/bodypart/B = C.get_bodypart("chest") // This was all taken from hitby() in human_defense.dm B.embedded_objects |= src add_mob_blood(target)//Place blood on the stake loc = C // Put INSIDE the character B.receive_damage(w_class * embedding.embedded_impact_pain_multiplier) - - if (C.mind) + if(C.mind) var/datum/antagonist/bloodsucker/bloodsucker = C.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) - if (bloodsucker) + if(bloodsucker) // If DEAD or TORPID...kill vamp! - if (C.StakeCanKillMe()) // NOTE: This is the ONLY time a staked Torpid vamp dies. + if(C.StakeCanKillMe()) // NOTE: This is the ONLY time a staked Torpid vamp dies. bloodsucker.FinalDeath() return else to_chat(target, "You have been staked! Your powers are useless, your death forever, while it remains in place.") to_chat(user, "You missed [C.p_their(TRUE)]'s heart! It would be easier if [C.p_they(TRUE)] weren't struggling so much.") - - // Can this target be staked? If someone stands up before this is complete, it fails. Best used on someone stationary. /mob/living/carbon/proc/can_be_staked() //return resting || IsKnockdown() || IsUnconscious() || (stat && (stat != SOFT_CRIT || pulledby)) || (has_trait(TRAIT_FAKEDEATH)) || resting || IsStun() || IsFrozen() || (pulledby && pulledby.grab_state >= GRAB_NECK) - return !(src.canmove) + return (src.resting) // ABOVE: Taken from update_mobility() in living.dm - - - - -/obj/item/stack/sheet/mineral/wood/attackby(obj/item/W, mob/user, params) // NOTE: sheet_types.dm is where the WOOD stack lives. Maybe move this over there. - // Taken from /obj/item/stack/rods/attackby in [rods.dm] - if (W.get_sharpness()) - user.visible_message("[user] begins whittling [src] into a pointy object.", \ - "You begin whittling [src] into a sharp point at one end.", \ - "You hear wood carving.") - // 8 Second Timer - if (!do_mob(user, src, 80)) - return - // Make Stake - var/obj/item/stake/basic/new_item = new(usr.loc) - user.visible_message("[user] finishes carving a stake out of [src].", \ - "You finish carving a stake out of [src].") - // Prepare to Put in Hands (if holding wood) - var/obj/item/stack/sheet/mineral/wood/thisStack = src - var/replace = (user.get_inactive_held_item()==thisStack) - // Use Wood - thisStack.use(1) - // If stack depleted, put item in that hand (if it had one) - if (!thisStack && replace) - user.put_in_hands(new_item) - - /obj/item/stake/hardened // Created by welding and acid-treating a simple stake. name = "hardened stake" diff --git a/code/modules/antagonists/bloodsucker/powers/bs_fortitude.dm b/code/modules/antagonists/bloodsucker/powers/bs_fortitude.dm index eee6942414..826155a445 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_fortitude.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_fortitude.dm @@ -7,7 +7,7 @@ desc = "Withstand egregious physical wounds and walk away from attacks that would stun, pierce, and dismember lesser beings. You cannot run while active." button_icon_state = "power_fortitude" bloodcost = 5 - cooldown = 40 + cooldown = 80 bloodsucker_can_buy = TRUE amToggle = TRUE warn_constant_cost = TRUE @@ -15,12 +15,9 @@ var/this_resist // So we can raise and lower your brute resist based on what your level_current WAS. /datum/action/bloodsucker/fortitude/ActivatePower() - var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) var/mob/living/user = owner - to_chat(user, "Your flesh, skin, and muscles become as steel.") - // Traits & Effects ADD_TRAIT(user, TRAIT_PIERCEIMMUNE, "fortitude") ADD_TRAIT(user, TRAIT_NODISMEMBER, "fortitude") @@ -31,27 +28,21 @@ this_resist = max(0.3, 0.7 - level_current * 0.1) H.physiology.brute_mod *= this_resist//0.5 H.physiology.burn_mod *= this_resist//0.5 - // Stop Running (Taken from /datum/quirk/nyctophobia in negative.dm) var/was_running = (user.m_intent == MOVE_INTENT_RUN) if (was_running) user.toggle_move_intent() - while(bloodsuckerdatum && ContinueActive(user) || user.m_intent == MOVE_INTENT_RUN) - // Pay Blood Toll (if awake) if (user.stat == CONSCIOUS) bloodsuckerdatum.AddBloodVolume(-0.5) // Used to be 0.3 blood per 2 seconds, but we're making it more expensive to keep on. - sleep(20) // Check every few ticks that we haven't disabled this power - // Return to Running (if you were before) if (was_running && user.m_intent != MOVE_INTENT_RUN) user.toggle_move_intent() /datum/action/bloodsucker/fortitude/DeactivatePower(mob/living/user = owner, mob/living/target) ..() - // Restore Traits & Effects REMOVE_TRAIT(user, TRAIT_PIERCEIMMUNE, "fortitude") REMOVE_TRAIT(user, TRAIT_NODISMEMBER, "fortitude") diff --git a/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm b/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm index bd185958d3..789f5e860b 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm @@ -5,14 +5,13 @@ // FOLLOW: Target follows you, spouting random phrases from their history (or maybe Poly's or NPC's vocab?) // ATTACK: Target finds a nearby non-Bloodsucker victim to attack. - /datum/action/bloodsucker/targeted/mesmerize name = "Mesmerize" desc = "Dominate the mind of a mortal who can see your eyes." button_icon_state = "power_mez" bloodcost = 30 cooldown = 200 - target_range = 5 + target_range = 3 power_activates_immediately = FALSE message_Trigger = "Whom will you subvert to your will?" must_be_capacitated = TRUE @@ -81,24 +80,23 @@ if (display_error) to_chat(owner, "Your victim must be facing you to see into your eyes.") return FALSE - return TRUE - /datum/action/bloodsucker/targeted/mesmerize/FireTargetedPower(atom/A) // set waitfor = FALSE <---- DONT DO THIS!We WANT this power to hold up ClickWithPower(), so that we can unlock the power when it's done. - var/mob/living/carbon/target = A var/mob/living/user = owner if(istype(target)) target.Stun(40) //Utterly useless without this, its okay since there are so many checks to go through - target.silent += 40 //Shhhh little lamb + target.silent += 45 //Shhhh little lamb + target.apply_status_effect(STATUS_EFFECT_MESMERIZE, 45) //So you cant rotate with combat mode, plus fancy status alert if(do_mob(user, target, 40, 0, TRUE, extra_checks=CALLBACK(src, .proc/ContinueActive, user, target))) PowerActivatedSuccessfully() // PAY COST! BEGIN COOLDOWN! - ADD_TRAIT(target, TRAIT_MUTE, "bloodsucker_mesmerize") + target.silent += 100 + level_current * 15 var/power_time = 90 + level_current * 15 + target.apply_status_effect(STATUS_EFFECT_MESMERIZE, 100 + level_current * 15) to_chat(user, "[target] is fixed in place by your hypnotic gaze.") target.Stun(power_time) //target.silent += power_time / 10 // Silent isn't based on ticks. @@ -110,7 +108,6 @@ // They Woke Up! (Notice if within view) if(istype(user) && target.stat == CONSCIOUS && (target in view(10, get_turf(user))) ) to_chat(user, "[target] has snapped out of their trance.") - REMOVE_TRAIT(target, TRAIT_MUTE, "bloodsucker_mesmerize") /datum/action/bloodsucker/targeted/mesmerize/ContinueActive(mob/living/user, mob/living/target) diff --git a/code/modules/mob/living/silicon/login.dm b/code/modules/mob/living/silicon/login.dm index 82c1435344..81f8fcbef1 100644 --- a/code/modules/mob/living/silicon/login.dm +++ b/code/modules/mob/living/silicon/login.dm @@ -4,4 +4,7 @@ var/datum/antagonist/rev/rev = mind.has_antag_datum(/datum/antagonist/rev) if(rev) rev.remove_revolutionary(TRUE) + var/datum/antagonist/bloodsucker/V = mind.has_antag_datum(/datum/antagonist/bloodsucker) + if(V) + mind.remove_antag_datum(V) ..() From 19ab4a5f705dafd7cb0483d46636b1c2b3f79bbf Mon Sep 17 00:00:00 2001 From: Artur Date: Sat, 7 Dec 2019 00:43:02 +0200 Subject: [PATCH 21/64] Review fixes and tweaks --- code/__DEFINES/antagonists.dm | 2 +- code/__DEFINES/role_preferences.dm | 6 +- code/__DEFINES/status_effects.dm | 4 +- .../mood_events/generic_negative_events.dm | 5 ++ code/datums/status_effects/debuffs.dm | 15 ++-- .../game/gamemodes/bloodsucker/bloodsucker.dm | 4 +- .../items/stacks/sheets/sheet_types.dm | 4 +- .../bloodsucker/items/bloodsucker_items.dm | 55 ------------ .../bloodsucker/objects/bloodsucker_coffin.dm | 2 +- .../bloodsucker/objects/bloodsucker_crypt.dm | 83 +++++++------------ .../bloodsucker/powers/bs_haste.dm | 6 +- .../bloodsucker/powers/bs_lunge.dm | 3 +- .../reagents/reagent_containers/blood_pack.dm | 23 ++++- tgstation.dme | 1 - 14 files changed, 79 insertions(+), 134 deletions(-) delete mode 100644 code/modules/antagonists/bloodsucker/items/bloodsucker_items.dm diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm index d25f8779c0..058fd864bd 100644 --- a/code/__DEFINES/antagonists.dm +++ b/code/__DEFINES/antagonists.dm @@ -45,7 +45,7 @@ // Bloodsucker related antag datums #define ANTAG_DATUM_BLOODSUCKER /datum/antagonist/bloodsucker #define ANTAG_DATUM_VASSAL /datum/antagonist/vassal -#define ANTAG_DATUM_HUNTER /datum/antagonist/vamphunter +//#define ANTAG_DATUM_HUNTER /datum/antagonist/vamphunter Disabled for now // BLOODSUCKER #define BLOODSUCKER_LEVEL_TO_EMBRACE 3 diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm index bc2709bdda..d5e3f828b8 100644 --- a/code/__DEFINES/role_preferences.dm +++ b/code/__DEFINES/role_preferences.dm @@ -36,7 +36,7 @@ #define ROLE_INTERNAL_AFFAIRS "internal affairs agent" #define ROLE_GANG "gangster" #define ROLE_BLOODSUCKER "bloodsucker" -#define ROLE_MONSTERHUNTER "monster hunter" +//#define ROLE_MONSTERHUNTER "monster hunter" Disabled for now //Missing assignment means it's not a gamemode specific role, IT'S NOT A BUG OR ERROR. //The gamemode specific ones are just so the gamemodes can query whether a player is old enough @@ -63,8 +63,8 @@ GLOBAL_LIST_INIT(special_roles, list( ROLE_INTERNAL_AFFAIRS = /datum/game_mode/traitor/internal_affairs, ROLE_SENTIENCE, ROLE_GANG = /datum/game_mode/gang, - ROLE_BLOODSUCKER = /datum/game_mode/bloodsucker, - ROLE_MONSTERHUNTER + ROLE_BLOODSUCKER = /datum/game_mode/bloodsucker + //ROLE_MONSTERHUNTER Disabled for now )) //Job defines for what happens when you fail to qualify for any job during job selection diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index d191ba8f0c..fdbbc3fbf6 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -46,7 +46,7 @@ #define STATUS_EFFECT_SLEEPING /datum/status_effect/incapacitating/sleeping //the affected is asleep -#define STATUS_EFFECT_TASED /datum/status_effect/electrode //the affected has been tased, preventing fine muscle control +#define STATUS_EFFECT_TASED /datum/status_effect/no_combat_mode/electrode/ //the affected has been tased, preventing fine muscle control #define STATUS_EFFECT_PACIFY /datum/status_effect/pacify //the affected is pacified, preventing direct hostile actions @@ -82,7 +82,7 @@ #define STATUS_EFFECT_PENIS_ENLARGEMENT /datum/status_effect/chem/penis_enlarger //More applied slowdown, just like the above. -#define STATUS_EFFECT_NO_COMBAT_MODE /datum/status_effect/no_combat_mode/ //Wont allow combat mode and will disable it +#define STATUS_EFFECT_NO_COMBAT_MODE /datum/status_effect/no_combat_mode //Wont allow combat mode and will disable it #define STATUS_EFFECT_MESMERIZE /datum/status_effect/no_combat_mode/mesmerize //Just reskinned no_combat_mode ///////////// // NEUTRAL // diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm index f4ca3a8ebd..833deb2378 100644 --- a/code/datums/mood_events/generic_negative_events.dm +++ b/code/datums/mood_events/generic_negative_events.dm @@ -176,3 +176,8 @@ /datum/mood_event/revenant_blight/add_effects() description = "Just give up, [pick("no one will miss you", "there is nothing you can do to help", "even a clown would be more useful than you", "does it even matter in the end?")]...\n" + +/datum/mood_event/vampcandle + description = "Something is making your mind feel... loose...\n" + mood_change = -20 + timeout = 1 MINUTES diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index 7a5d32d48c..a9fc3881cb 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -105,14 +105,11 @@ icon = 'icons/mob/actions/bloodsucker.dmi' icon_state = "power_mez" -/datum/status_effect/electrode +/datum/status_effect/no_combat_mode/electrode id = "tased" - blocks_combatmode = TRUE - status_type = STATUS_EFFECT_REPLACE - alert_type = null -/datum/status_effect/electrode/on_creation(mob/living/new_owner, set_duration) - if(isnum(set_duration)) +/datum/status_effect/no_combat_mode/electrode/on_creation(mob/living/new_owner, set_duration) + if(isnum(set_duration)) //TODO, figure out how to grab from subtype duration = set_duration . = ..() if(iscarbon(owner)) @@ -121,17 +118,17 @@ C.toggle_combat_mode(TRUE) C.add_movespeed_modifier(MOVESPEED_ID_TASED_STATUS, TRUE, override = TRUE, multiplicative_slowdown = 8) -/datum/status_effect/electrode/on_remove() +/datum/status_effect/no_combat_mode/electrode/on_remove() if(iscarbon(owner)) var/mob/living/carbon/C = owner C.remove_movespeed_modifier(MOVESPEED_ID_TASED_STATUS) . = ..() -/datum/status_effect/electrode/tick() +/datum/status_effect/no_combat_mode/electrode/tick() if(owner) owner.adjustStaminaLoss(5) //if you really want to try to stamcrit someone with a taser alone, you can, but it'll take time and good timing. -/datum/status_effect/electrode/nextmove_modifier() //why is this a proc. its no big deal since this doesnt get called often at all but literally w h y +/datum/status_effect/no_combat_mode/electrode/nextmove_modifier() //why is this a proc. its no big deal since this doesnt get called often at all but literally w h y return 2 //OTHER DEBUFFS diff --git a/code/game/gamemodes/bloodsucker/bloodsucker.dm b/code/game/gamemodes/bloodsucker/bloodsucker.dm index c188036786..fb6dd4604a 100644 --- a/code/game/gamemodes/bloodsucker/bloodsucker.dm +++ b/code/game/gamemodes/bloodsucker/bloodsucker.dm @@ -18,7 +18,7 @@ false_report_weight = 1 restricted_jobs = list("AI","Cyborg") protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") - required_players = 10 + required_players = 20 required_enemies = 2 recommended_enemies = 4 reroll_friendly = 1 @@ -29,7 +29,7 @@ Bloodsuckers: The crew are cattle, while you are both shepherd and slaughterhouse.\n\ Crew: Put an end to the undead infestation before the station is overcome!" -/datum/game_mode/traitor/bros/generate_report() +/datum/game_mode/bloodsucker/generate_report() return "Reports indicate that some of your crew may have toppled statues in the past week, angering the gods and becoming cursed with undeath and a desire for blood. Watch out for crewmembers that seem to shun the light or are found pale and delirious." // Seems to be run by game ONCE, and finds all potential players to be antag. diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 56f1a3f9f0..02fb98e585 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -248,10 +248,10 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \ "You begin whittling [src] into a sharp point at one end.", \ "You hear wood carving.") // 8 Second Timer - if(!do_mob(user, src, 80)) + if(!do_after(user, 80, TRUE, src)) return // Make Stake - var/obj/item/stake/basic/new_item = new(usr.loc) + var/obj/item/stake/basic/new_item = new(user.loc) user.visible_message("[user] finishes carving a stake out of [src].", \ "You finish carving a stake out of [src].") // Prepare to Put in Hands (if holding wood) diff --git a/code/modules/antagonists/bloodsucker/items/bloodsucker_items.dm b/code/modules/antagonists/bloodsucker/items/bloodsucker_items.dm deleted file mode 100644 index 7215573092..0000000000 --- a/code/modules/antagonists/bloodsucker/items/bloodsucker_items.dm +++ /dev/null @@ -1,55 +0,0 @@ - - - -// For blood packs, etc. that need new functions for when they're used. - - -///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - -///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -// RECIPES: When crafting objects in craft.dm, we now record who made the item. -///atom/movable -// var/mob/crafter // Who made me? (via Craft skill) Used by Bloodsucker crypt furniture to know who gets to use the buildings. - - -///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - -///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - -// BLOOD BAGS! Add ability to drank em - - -/obj/item/reagent_containers/blood/attack(mob/M, mob/user, def_zone) - - if(user.a_intent == INTENT_HELP && reagents.total_volume > 0) - if (user != M) - user.visible_message("[user] forces [M] to drink from the [src].", \ - "You put the [src] up to [M]'s mouth.") - if (!do_mob(user, M, 50)) - return - else - if (!do_mob(user, M, 10)) - return - user.visible_message("[user] puts the [src] up to their mouth.", \ - "You take a sip from the [src].") - - // Safety: In case you spam clicked the blood bag on yourself, and it is now empty (below will divide by zero) - if (reagents.total_volume <= 0) - return - - // Taken from drinks.dm // - var/gulp_size = 5 - var/fraction = min(gulp_size / reagents.total_volume, 1) - //checkLiked(fraction, M) // Blood isn't food, sorry. - reagents.reaction(M, INGEST, fraction) - reagents.trans_to(M, gulp_size) - playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1) - - ..() - - diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm index 128398a3b0..36e2d634c6 100644 --- a/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm +++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm @@ -172,7 +172,7 @@ if(istype(W, cutting_tool)) to_chat(user, "This is a much more complex mechanical structure than you thought. You don't know where to begin cutting [src].") return - else if (anchored && istype(W, /obj/item/wrench)) // Can't unanchor unless owner. + else if(anchored && istype(W, /obj/item/wrench)) // Can't unanchor unless owner. to_chat(user, "The coffin won't come unanchored from the floor.") return diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm index 2a4e2b31c6..d319017ede 100644 --- a/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm +++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm @@ -233,13 +233,10 @@ //. = ..() // Taken from sacrificial altar in divine.dm //if(.) // return - // Go away. Torturing. if (useLock) return - var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) - // CHECK ONE: Am I claiming this? Is it in the right place? if (istype(bloodsuckerdatum) && !owner) if (!bloodsuckerdatum.lair) @@ -253,18 +250,15 @@ density = FALSE anchored = TRUE return //No, you cant move this ever again - // No One Home if (!has_buckled_mobs()) return - // CHECK TWO: Am I a non-bloodsucker? var/mob/living/carbon/C = pick(buckled_mobs) if (!istype(bloodsuckerdatum)) // Try to release this guy user_unbuckle_mob(C, user) return - // Bloodsucker Owner! Let the boy go. if (C.mind) var/datum/antagonist/vassal/vassaldatum = C.mind.has_antag_datum(ANTAG_DATUM_VASSAL) @@ -272,26 +266,19 @@ unbuckle_mob(C) useLock = FALSE // Failsafe return - // Just torture the boy torture_victim(user, C) - /obj/structure/bloodsucker/vassalrack/proc/torture_victim(mob/living/user, mob/living/target) - // Check Bloodmob/living/M, force = FALSE, check_loc = TRUE if (user.blood_volume < convert_cost + 5) to_chat(user, "You don't have enough blood to initiate the Dark Communion with [target].") return - // Prep... useLock = TRUE - - // Step One: Tick Down Conversion from 3 to 0 // Step Two: Break mindshielding/antag (on approve) // Step Three: Blood Ritual - // Conversion Process if (convert_progress > 0) to_chat(user, "You prepare to initiate [target] into your service.") @@ -314,10 +301,8 @@ // Still Need More Persuasion... else to_chat(user, "[target] could use [convert_progress == 1?"a little":"some"] more persuasion.") - useLock = FALSE return - // Check: Mindshield & Antag if (!disloyalty_confirm && RequireDisloyalty(target)) if (!do_disloyalty(user,target)) @@ -328,7 +313,6 @@ to_chat(user, "[target] looks ready for the Dark Communion.") useLock = FALSE return - // Check: Blood if (user.blood_volume < convert_cost) to_chat(user, "You don't have enough blood to initiate the Dark Communion with [target].") @@ -343,11 +327,9 @@ to_chat(user, "The ritual has been interrupted!") useLock = FALSE return - // Convert to Vassal! if (bloodsuckerdatum && bloodsuckerdatum.attempt_turn_vassal(target)) remove_loyalties(target) // In case of Mindshield, or appropriate Antag (Traitor, Internal, etc) - //if (!target.buckled) // to_chat(user, "The ritual has been interrupted!") // useLock = FALSE @@ -358,16 +340,12 @@ target.Jitter(25) target.emote("laugh") //remove_victim(target) // Remove on CLICK ONLY! - useLock = FALSE - /obj/structure/bloodsucker/vassalrack/proc/do_torture(mob/living/user, mob/living/target, mult=1) - var/torture_time = 15 // Fifteen seconds if you aren't using anything. Shorter with weapons and such. var/torture_dmg_brute = 2 var/torture_dmg_burn = 0 - // Get Bodypart var/target_string = "" var/obj/item/bodypart/BP = null @@ -376,7 +354,6 @@ BP = pick(C.bodyparts) if (BP) target_string += BP.name - // Get Weapon var/obj/item/I = user.get_active_held_item() if (!istype(I)) @@ -384,7 +361,6 @@ // Create Strings var/method_string = I?.attack_verb?.len ? pick(I.attack_verb) : pick("harmed","tortured","wrenched","twisted","scoured","beaten","lashed","scathed") var/weapon_string = I ? I.name : pick("bare hands","hands","fingers","fists") - // Weapon Bonus + SFX if (I) torture_time -= I.force / 4 @@ -399,33 +375,23 @@ welder.welding = TRUE torture_time -= 5 torture_dmg_burn += 5 - I.play_tool_sound(target) torture_time = max(50, torture_time * 10) // Minimum 5 seconds. - // Now run process. if (!do_mob(user, target, torture_time * mult)) return FALSE - // SUCCESS if (I) playsound(loc, I.hitsound, 30, 1, -1) I.play_tool_sound(target) - target.visible_message("[user] has [method_string] [target]'s [target_string] with [user.p_their()] [weapon_string]!", \ "[user] has [method_string] your [target_string] with [user.p_their()] [weapon_string]!") if (!target.is_muzzled()) target.emote("scream") target.Jitter(5) target.apply_damages(brute = torture_dmg_brute, burn = torture_dmg_burn, def_zone = (BP ? BP.body_zone : null)) // take_overall_damage(6,0) - return TRUE - - - - - /obj/structure/bloodsucker/vassalrack/proc/do_disloyalty(mob/living/user, mob/living/target) // OFFER YES/NO NOW! @@ -492,38 +458,47 @@ light_power = 3 light_range = 0 // to 2 density = FALSE - anchored = TRUE + anchored = FALSE var/lit = FALSE - ///obj/structure/bloodsucker/candelabrum/is_hot() // candle.dm //return FALSE +/datum/component/nanites/Destroy() + STOP_PROCESSING(SSobj, src) + /obj/structure/bloodsucker/candelabrum/update_icon() icon_state = "candelabrum[lit ? "_lit" : ""]" /obj/structure/bloodsucker/candelabrum/attack_hand(mob/user) - // Unlight (only a Vamp can light it) - var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) - if (istype(bloodsuckerdatum)) - lit = !lit - if (lit) - set_light(2,3,"#66FFFF") - to_chat(user, "You wave your hand over the candelabrum. It springs to life.") - else - set_light(0) - update_icon() + var/datum/antagonist/bloodsucker/V = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) //I wish there was a better way to do this + var/datum/antagonist/vassal/T = user.mind.has_antag_datum(ANTAG_DATUM_VASSAL) + if(istype(V) || istype(T)) + toggle() /obj/structure/bloodsucker/candelabrum/AltClick(mob/user) + var/datum/antagonist/bloodsucker/V = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) // Bloodsuckers can turn their candles on from a distance. SPOOOOKY. - var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) - if (istype(bloodsuckerdatum)) - attack_hand(user) - + if(istype(V)) + toggle() +/obj/structure/bloodsucker/candelabrum/proc/toggle(mob/user) + lit = !lit + if(lit) + set_light(2, 3, "#66FFFF") + START_PROCESSING(SSobj, src) + else + set_light(0) + STOP_PROCESSING(SSobj, src) + update_icon() +/obj/structure/bloodsucker/candelabrum/process() + if(lit) + for(var/mob/living/carbon/human/H in viewers(7, src)) + var/datum/antagonist/vassal/T = H.mind.has_antag_datum(ANTAG_DATUM_VASSAL) + var/datum/antagonist/bloodsucker/V = H.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + if(V || T) //We dont want vassals or vampires affected by this + return + H.hallucination = 5 + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "vampcandle", /datum/mood_event/vampcandle) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - // OTHER THINGS TO USE: HUMAN BLOOD. /obj/effect/decal/cleanable/blood diff --git a/code/modules/antagonists/bloodsucker/powers/bs_haste.dm b/code/modules/antagonists/bloodsucker/powers/bs_haste.dm index c3337eb391..b9e35c6a4b 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_haste.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_haste.dm @@ -5,7 +5,7 @@ /datum/action/bloodsucker/targeted/haste name = "Immortal Haste" - desc = "Sprint anywhere in the blink of an eye, slipping past open doors. Those nearby may be knocked away, stunned, or left empty-handed." + desc = "Dash somewhere with supernatural speed. Those nearby may be knocked away, stunned, or left empty-handed." button_icon_state = "power_speed" bloodcost = 6 cooldown = 30 @@ -67,14 +67,16 @@ if (rand(0, 5) < level_current) playsound(get_turf(newtarget), "sound/weapons/punch[rand(1,4)].ogg", 15, 1, -1) newtarget.Knockdown(10 + level_current * 5) + newtarget.adjustStaminaLoss(10 + 5 * level_current) newtarget.Stun(5 + level_current * 2) + newtarget.adjustStaminaLoss(5 + 3 * level_current) if(newtarget.IsStun()) newtarget.spin(10,1) if (rand(0,4)) newtarget.drop_all_held_items() foundtargets += newtarget sleep(1) - if (user) + if(user) user.update_canmove() //Let the poor guy move again /datum/action/bloodsucker/targeted/haste/DeactivatePower(mob/living/user = owner, mob/living/target) diff --git a/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm b/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm index 4a36431b18..53b8365b44 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm @@ -66,9 +66,10 @@ // LEVEL 2: If behind target, mute or unconscious! if (do_knockdown) // && level_current >= 1) target.Knockdown(15 + 10 * level_current,1) + target.adjustStaminaLoss(40 + 10 * level_current) // Cancel Walk (we were close enough to contact them) walk(owner, 0) - //target.Paralyze(10,1) + target.Stun(10,1) //Without this the victim can just walk away target.grabbedby(owner) // Taken from mutations.dm under changelings target.grippedby(owner, instant = TRUE) //instant aggro grab diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index fe35981bfe..04cec0bc91 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -107,8 +107,29 @@ else return ..() +/obj/item/reagent_containers/blood/attack(mob/M, mob/user, def_zone) + if(user.a_intent == INTENT_HELP && reagents.total_volume > 0) + if (user != M) + to_chat(user, "You force [M] to drink from the [src]") + user.visible_message("[user] forces [M] to drink from the [src].") + if (!do_mob(user, M, 50)) + return + else + if (!do_mob(user, M, 10)) + return + to_chat(user, "You take a sip from the [src].") + user.visible_message("[user] puts the [src] up to their mouth.") + if (reagents.total_volume <= 0) // Safety: In case you spam clicked the blood bag on yourself, and it is now empty (below will divide by zero) + return + var/gulp_size = 5 + var/fraction = min(gulp_size / reagents.total_volume, 1) + reagents.reaction(M, INGEST, fraction) //checkLiked(fraction, M) // Blood isn't food, sorry. + reagents.trans_to(M, gulp_size) + playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1) + ..() + /obj/item/reagent_containers/blood/bluespace name = "bluespace blood pack" desc = "Contains blood used for transfusion, this one has been made with bluespace technology to hold much more blood. Must be attached to an IV drip." icon_state = "bsbloodpack" - volume = 600 //its a blood bath! \ No newline at end of file + volume = 600 //its a blood bath! diff --git a/tgstation.dme b/tgstation.dme index 9219159405..a568a02ea6 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -1226,7 +1226,6 @@ #include "code\modules\antagonists\bloodsucker\datum_bloodsucker.dm" #include "code\modules\antagonists\bloodsucker\datum_hunter.dm" #include "code\modules\antagonists\bloodsucker\datum_vassal.dm" -#include "code\modules\antagonists\bloodsucker\items\bloodsucker_items.dm" #include "code\modules\antagonists\bloodsucker\items\bloodsucker_organs.dm" #include "code\modules\antagonists\bloodsucker\items\bloodsucker_stake.dm" #include "code\modules\antagonists\bloodsucker\objects\bloodsucker_coffin.dm" From b9751006bb3d3e6ab7fb120956fbe48f7bb38218 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Sat, 7 Dec 2019 04:46:54 +0100 Subject: [PATCH 22/64] Fixes reviver implant having been a crapshot ever since soft-crit was introduced years ago. --- code/modules/surgery/organs/augments_chest.dm | 45 ++++++++++++------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/code/modules/surgery/organs/augments_chest.dm b/code/modules/surgery/organs/augments_chest.dm index 81627104e8..7ea50e449f 100644 --- a/code/modules/surgery/organs/augments_chest.dm +++ b/code/modules/surgery/organs/augments_chest.dm @@ -44,6 +44,9 @@ hunger_threshold = NUTRITION_LEVEL_HUNGRY poison_amount = 10 +#define MAX_HEAL_COOLDOWN 15 MINUTES +#define DEF_CONVALESCENCE_TIME 15 SECONDS + /obj/item/organ/cyberimp/chest/reviver name = "Reviver implant" desc = "This implant will attempt to revive and heal you if you lose consciousness. For the faint of heart!" @@ -51,43 +54,49 @@ implant_color = "#AD0000" slot = ORGAN_SLOT_HEART_AID var/revive_cost = 0 - var/reviving = 0 + var/reviving = FALSE var/cooldown = 0 + var/convalescence_time = 0 /obj/item/organ/cyberimp/chest/reviver/on_life() if(reviving) - if(owner.stat == UNCONSCIOUS) - addtimer(CALLBACK(src, .proc/heal), 30) + var/do_heal = world.time < convalescence_time + if(revive_cost >= MAX_HEAL_COOLDOWN) + do_heal = FALSE + else if(owner.stat && ownder.stat != DEAD) + do_heal = TRUE + else if(!do_heal) + convalescence_time = world.time + DEF_CONVALESCENCE_TIME + if(do_heal) + addtimer(CALLBACK(src, .proc/heal), 3 SECONDS) else cooldown = revive_cost + world.time reviving = FALSE to_chat(owner, "Your reviver implant shuts down and starts recharging. It will be ready again in [DisplayTimeText(revive_cost)].") return - if(cooldown > world.time) - return - if(owner.stat != UNCONSCIOUS) - return - if(owner.suiciding) + if(cooldown > world.time || owner.stat == CONSCIOUS || owner.stat == DEAD || owner.suiciding) return revive_cost = 0 + convalescence_time = 0 reviving = TRUE to_chat(owner, "You feel a faint buzzing as your reviver implant starts patching your wounds...") /obj/item/organ/cyberimp/chest/reviver/proc/heal() if(owner.getOxyLoss()) owner.adjustOxyLoss(-5) - revive_cost += 5 + revive_cost += 0.5 SECONDS if(owner.getBruteLoss()) owner.adjustBruteLoss(-2) - revive_cost += 40 + revive_cost += 4 SECONDS if(owner.getFireLoss()) owner.adjustFireLoss(-2) - revive_cost += 40 + revive_cost += 4 SECONDS if(owner.getToxLoss()) owner.adjustToxLoss(-1) - revive_cost += 40 + revive_cost += 4 SECONDS + /obj/item/organ/cyberimp/chest/reviver/emp_act(severity) . = ..() @@ -95,25 +104,27 @@ return if(reviving) - revive_cost += 200 + revive_cost += 20 SECONDS else - cooldown += 200 + cooldown += 20 SECONDS if(ishuman(owner)) var/mob/living/carbon/human/H = owner if(H.stat != DEAD && prob(50 / severity) && H.can_heartattack()) H.set_heartattack(TRUE) to_chat(H, "You feel a horrible agony in your chest!") - addtimer(CALLBACK(src, .proc/undo_heart_attack), 600 / severity) + addtimer(CALLBACK(src, .proc/undo_heart_attack), 60 SECONDS / severity) /obj/item/organ/cyberimp/chest/reviver/proc/undo_heart_attack() var/mob/living/carbon/human/H = owner - if(!istype(H)) + if(!H || !istype(H)) return H.set_heartattack(FALSE) - if(H.stat == CONSCIOUS) + if(H.stat == CONSCIOUS || stat == SOFT_CRIT) to_chat(H, "You feel your heart beating again!") +#undef MAX_HEAL_COOLDOWN +#undef DEF_CONVALESCENCE_TIME /obj/item/organ/cyberimp/chest/thrusters name = "implantable thrusters set" From 9152fe49e67e9100eaa41c592630eec47c335d7a Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Sat, 7 Dec 2019 04:49:18 +0100 Subject: [PATCH 23/64] Typo. --- code/modules/surgery/organs/augments_chest.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/surgery/organs/augments_chest.dm b/code/modules/surgery/organs/augments_chest.dm index 7ea50e449f..65172a1545 100644 --- a/code/modules/surgery/organs/augments_chest.dm +++ b/code/modules/surgery/organs/augments_chest.dm @@ -63,7 +63,7 @@ var/do_heal = world.time < convalescence_time if(revive_cost >= MAX_HEAL_COOLDOWN) do_heal = FALSE - else if(owner.stat && ownder.stat != DEAD) + else if(owner.stat && owner.stat != DEAD) do_heal = TRUE else if(!do_heal) convalescence_time = world.time + DEF_CONVALESCENCE_TIME @@ -120,7 +120,7 @@ if(!H || !istype(H)) return H.set_heartattack(FALSE) - if(H.stat == CONSCIOUS || stat == SOFT_CRIT) + if(H.stat == CONSCIOUS || H.stat == SOFT_CRIT) to_chat(H, "You feel your heart beating again!") #undef MAX_HEAL_COOLDOWN From 9773b530f82e6c4d03e08064fe5cd83bbcd99163 Mon Sep 17 00:00:00 2001 From: Artur Date: Sun, 8 Dec 2019 21:47:25 +0200 Subject: [PATCH 24/64] More fixes. Urgh --- code/__DEFINES/traits.dm | 2 +- code/_onclick/item_attack.dm | 3 +- .../mood_events/generic_negative_events.dm | 42 +++++++++- .../mood_events/generic_positive_events.dm | 9 ++ code/game/objects/items/devices/scanners.dm | 10 +-- .../bloodsucker/bloodsucker_life.dm | 70 +++------------- .../bloodsucker/bloodsucker_sunlight.dm | 78 +++++++++--------- .../bloodsucker/datum_bloodsucker.dm | 32 +++---- .../bloodsucker/objects/bloodsucker_crypt.dm | 23 +----- .../bloodsucker/objects/bloodsucker_lair.dm | 47 ++++------- .../bloodsucker/powers/bs_brawn.dm | 61 +++++++------- .../bloodsucker/powers/bs_cloak.dm | 20 +---- .../bloodsucker/powers/bs_gohome.dm | 2 +- .../bloodsucker/powers/bs_haste.dm | 11 +-- .../bloodsucker/powers/bs_lunge.dm | 17 ++-- .../bloodsucker/powers/bs_mesmerize.dm | 2 +- .../bloodsucker/powers/bs_trespass.dm | 2 +- .../bloodsucker/powers/v_recuperate.dm | 4 +- .../carbon/human/species_types/jellypeople.dm | 2 + code/modules/projectiles/projectile.dm | 2 +- icons/mob/inhands/weapons/melee_righthand.dmi | Bin 2491 -> 2556 bytes 21 files changed, 201 insertions(+), 238 deletions(-) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 2d0af4c641..8cc8960b01 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -130,7 +130,7 @@ #define TRAIT_COLDBLOODED "coldblooded" // Your body is literal room temperature. Does not make you immune to the temp. #define TRAIT_NONATURALHEAL "nonaturalheal" // Only Admins can heal you. NOTHING else does it unless it's given the god tag. #define TRAIT_NORUNNING "norunning" // You walk! -#define TRAIT_NOMARROW "nomarrow" // You don't make blood. +#define TRAIT_NOMARROW "nomarrow" // You don't make blood, with chemicals or nanites. #define TRAIT_NOPULSE "nopulse" // Your heart doesn't beat. diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 9cb0c52b9a..f082f2ad16 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -110,7 +110,7 @@ totitemdamage *= 0.5 //CIT CHANGES END HERE apply_damage(totitemdamage, I.damtype) //CIT CHANGE - replaces I.force with totitemdamage - if(I.damtype == BRUTE) + if(I.damtype == BRUTE && !HAS_TRAIT(src, TRAIT_NOMARROW)) if(prob(33)) I.add_mob_blood(src) var/turf/location = get_turf(src) @@ -163,4 +163,3 @@ /obj/item/proc/getweight() return total_mass || w_class * 1.25 - diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm index 281150b535..6190e0c287 100644 --- a/code/datums/mood_events/generic_negative_events.dm +++ b/code/datums/mood_events/generic_negative_events.dm @@ -201,5 +201,45 @@ /datum/mood_event/vampcandle description = "Something is making your mind feel... loose...\n" - mood_change = -20 + mood_change = -20 timeout = 1 MINUTES + +/datum/mood_event/drankblood_bad + description = "I drank the blood of a lesser creature. Disgusting.\n" + mood_change = -4 + timeout = 900 + +/datum/mood_event/drankblood_dead + description = "I drank dead blood. I am better than this.\n" + mood_change = -7 + timeout = 900 + +/datum/mood_event/drankblood_synth + description = "I drank synthetic blood. What is wrong with me?\n" + mood_change = -7 + timeout = 900 + +/datum/mood_event/drankkilled + description = "I drank from my victim until they died. I feel...less human.\n" + mood_change = -12 + timeout = 6000 + +/datum/mood_event/madevamp + description = "A soul has been cursed to undeath by my own hand.\n" + mood_change = -10 + timeout = 10000 + +/datum/mood_event/vampatefood + description = "Mortal nourishment no longer sustains me. I feel unwell.\n" + mood_change = -6 + timeout = 1000 + +/datum/mood_event/daylight_1 + description = "I slept poorly in a makeshift coffin during the day.\n" + mood_change = -3 + timeout = 1000 + +/datum/mood_event/daylight_2 + description = "I have been scorched by the unforgiving rays of the sun.\n" + mood_change = -6 + timeout = 1200 diff --git a/code/datums/mood_events/generic_positive_events.dm b/code/datums/mood_events/generic_positive_events.dm index 9ae7ba2289..6b4fa5e636 100644 --- a/code/datums/mood_events/generic_positive_events.dm +++ b/code/datums/mood_events/generic_positive_events.dm @@ -134,6 +134,15 @@ mood_change = 3 timeout = 3000 +/datum/mood_event/drankblood + description = "I have fed greedly from that which nourishes me.\n" + mood_change = 10 + timeout = 900 + +/datum/mood_event/coffinsleep + description = "I slept in a coffin during the day. I feel whole again.\n" + mood_change = 8 + timeout = 1200 //Cursed stuff below. /datum/mood_event/orgasm diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 3cd06d3a3c..402645f1c9 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -420,12 +420,12 @@ SLIME SCANNER blood_type = R.name else blood_type = blood_id - if(C.blood_volume <= (BLOOD_VOLUME_SAFE*C.blood_ratio) && C.blood_volume > (BLOOD_VOLUME_OKAY*C.blood_ratio)) - msg += "LOW blood level [blood_percent] %, [C.blood_volume] cl, type: [blood_type]\n" - else if(C.blood_volume <= (BLOOD_VOLUME_OKAY*C.blood_ratio)) - msg += "CRITICAL blood level [blood_percent] %, [C.blood_volume] cl, type: [blood_type]\n" + if(C.scan_blood_volume() <= (BLOOD_VOLUME_SAFE*C.blood_ratio) && C.scan_blood_volume() > (BLOOD_VOLUME_OKAY*C.blood_ratio)) + msg += "LOW blood level [blood_percent] %, [C.scan_blood_volume()] cl, type: [blood_type]\n" + else if(C.scan_blood_volume() <= (BLOOD_VOLUME_OKAY*C.blood_ratio)) + msg += "CRITICAL blood level [blood_percent] %, [C.scan_blood_volume()] cl, type: [blood_type]\n" else - msg += "Blood level [blood_percent] %, [C.blood_volume] cl, type: [blood_type]\n" + msg += "Blood level [blood_percent] %, [C.scan_blood_volume()] cl, type: [blood_type]\n" var/cyberimp_detect for(var/obj/item/organ/cyberimp/CI in C.internal_organs) diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm index e2bf217ab9..86e4a51d98 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm @@ -73,56 +73,6 @@ // Blood Gulp Sound owner.current.playsound_local(null, 'sound/effects/singlebeat.ogg', 40, 1) // Play THIS sound for user only. The "null" is where turf would go if a location was needed. Null puts it right in their head. -/datum/mood_event/drankblood - description = "I have fed greedly from that which nourishes me.\n" - mood_change = 10 - timeout = 900 - -/datum/mood_event/drankblood_bad - description = "I drank the blood of a lesser creature. Disgusting.\n" - mood_change = -4 - timeout = 900 - -/datum/mood_event/drankblood_dead - description = "I drank dead blood. I am better than this.\n" - mood_change = -7 - timeout = 900 - -/datum/mood_event/drankblood_synth - description = "I drank synthetic blood. What is wrong with me?\n" - mood_change = -7 - timeout = 900 - -/datum/mood_event/drankkilled - description = "I drank from my victim until they died. I feel...less human.\n" - mood_change = -12 - timeout = 6000 - -/datum/mood_event/madevamp - description = "A soul has been cursed to undeath by my own hand.\n" - mood_change = -10 - timeout = 10000 - -/datum/mood_event/vampatefood - description = "Mortal nourishment no longer sustains me. I feel unwell.\n" - mood_change = -6 - timeout = 1000 - -/datum/mood_event/coffinsleep - description = "I slept in a coffin during the day. I feel whole again.\n" - mood_change = 8 - timeout = 1200 - -/datum/mood_event/daylight_1 - description = "I slept poorly in a makeshift coffin during the day.\n" - mood_change = -3 - timeout = 1000 - -/datum/mood_event/daylight_2 - description = "I have been scorched by the unforgiving rays of the sun.\n" - mood_change = -6 - timeout = 1200 - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // HEALING @@ -138,10 +88,10 @@ owner.current.adjustCloneLoss(-1 * (regenRate * 4) * mult, 0) owner.current.adjustOrganLoss(ORGAN_SLOT_BRAIN, -1 * (regenRate * 4) * mult) //adjustBrainLoss(-1 * (regenRate * 4) * mult, 0) // No Bleeding - if (ishuman(owner.current)) //NOTE Current bleeding is horrible, not to count the amount of blood ballistics delete. + if(ishuman(owner.current)) //NOTE Current bleeding is horrible, not to count the amount of blood ballistics delete. var/mob/living/carbon/human/H = owner.current H.bleed_rate = 0 - if (iscarbon(owner.current)) // Damage Heal: Do I have damage to ANY bodypart? + if(iscarbon(owner.current)) // Damage Heal: Do I have damage to ANY bodypart? var/mob/living/carbon/C = owner.current var/costMult = 1 // Coffin makes it cheaper var/fireheal = 0 // BURN: Heal in Coffin while Fakedeath, or when damage above maxhealth (you can never fully heal fire) @@ -150,9 +100,10 @@ mult *= 5 // Increase multiplier if we're sleeping in a coffin. fireheal = min(C.getFireLoss_nonProsthetic(), regenRate) // NOTE: Burn damage ONLY heals in torpor. costMult = 0.25 - C.ExtinguishMob() // Extinguish Fire + C.ExtinguishMob() + CureDisabilities() // Extinguish Fire else - if (owner.current.blood_volume <= 0) // No Blood? Lower Mult + if(owner.current.blood_volume <= 0) // No Blood? Lower Mult mult = 0.25 // Crit from burn? Lower damage to maximum allowed. //if (C.getFireLoss() > owner.current.getMaxHealth()) @@ -161,8 +112,8 @@ var/bruteheal = min(C.getBruteLoss_nonProsthetic(), regenRate) var/toxinheal = min(C.getToxLoss(), regenRate) // Heal if Damaged - if (bruteheal + fireheal + toxinheal > 0) // Just a check? Don't heal/spend, and return. - if (mult == 0) + if(bruteheal + fireheal + toxinheal > 0) // Just a check? Don't heal/spend, and return. + if(mult == 0) return TRUE // We have damage. Let's heal (one time) C.adjustBruteLoss(-bruteheal * mult, forced=TRUE)// Heal BRUTE / BURN in random portions throughout the body. @@ -171,7 +122,7 @@ //C.heal_overall_damage(bruteheal * mult, fireheal * mult) // REMOVED: We need to FORCE this, because otherwise, vamps won't heal EVER. Swapped to above. AddBloodVolume((bruteheal * -0.5 + fireheal * -1) / mult * costMult) // Costs blood to heal return TRUE // Healed! Done for this tick. - if (amInCoffinWhileTorpor) // Limbs? (And I have no other healing) + if(amInCoffinWhileTorpor) // Limbs? (And I have no other healing) var/list/missing = owner.current.get_missing_limbs() // Heal Missing if (missing.len) // Cycle through ALL limbs and regen them! for (var/targetLimbZone in missing) // 1) Find ONE Limb and regenerate it. @@ -193,7 +144,6 @@ return TRUE // NOTE: Limbs have a "status", like their hosts "stat". 2 is dead (aka Prosthetic). 1 seems to be idle/alive. */ - CureDisabilities() // Cure Final Disabilities C.remove_all_embedded_objects() // Remove Embedded! owner.current.regenerate_organs() // Heal Organs (will respawn original eyes etc. but we replace right away, next) CheckVampOrgans() // Heart, Eyes @@ -328,7 +278,7 @@ var/mob/living/carbon/C = owner.current C.remove_all_embedded_objects() // Make me UN-CLONEABLE - owner.current.hellbound = TRUE // This was done during creation, but let's do it again one more time...to make SURE this guy stays dead. + owner.current.hellbound = TRUE // This was done during creation, but let's do it again one more time...to make SURE this guy stays dead, but they dont stay dead because brains can be cloned! // Free my Vassals! FreeAllVassals() // Elders get Dusted @@ -342,7 +292,7 @@ owner.current.visible_message("[owner.current]'s skin bursts forth in a spray of gore and detritus. A horrible cry echoes from what is now a wet pile of decaying meat.", \ "Your soul escapes your withering body as the abyss welcomes you to your Final Death.", \ "You hear a wet, bursting sound.") - owner.current.gib() + owner.current.gib(TRUE, FALSE, FALSE)//Brain cloning is wierd and allows hellbounds. Lets destroy the brain for safety. playsound(owner.current.loc, 'sound/effects/tendril_destroyed.ogg', 40, 1) diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm b/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm index 726eb8c452..4521842ff6 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm @@ -24,18 +24,18 @@ time_til_cycle = TIME_BLOODSUCKER_NIGHT // Part 1: Night (all is well) - while (time_til_cycle > TIME_BLOODSUCKER_DAY_WARN) + while(time_til_cycle > TIME_BLOODSUCKER_DAY_WARN) sleep(10) - if (cancel_me) + if(cancel_me) return //sleep(TIME_BLOODSUCKER_NIGHT - TIME_BLOODSUCKER_DAY_WARN) warn_daylight(1,"Solar Flares will bombard the station with dangerous UV in [TIME_BLOODSUCKER_DAY_WARN / 60] minutes. Prepare to seek cover in a coffin or closet.") // time2text <-- use Help On give_home_power() // Give VANISHING ACT power to all vamps with a lair! // Part 2: Night Ending - while (time_til_cycle > TIME_BLOODSUCKER_DAY_FINAL_WARN) + while(time_til_cycle > TIME_BLOODSUCKER_DAY_FINAL_WARN) sleep(10) - if (cancel_me) + if(cancel_me) return //sleep(TIME_BLOODSUCKER_DAY_WARN - TIME_BLOODSUCKER_DAY_FINAL_WARN) message_admins("BLOODSUCKER NOTICE: Daylight beginning in [TIME_BLOODSUCKER_DAY_FINAL_WARN] seconds.)") @@ -43,7 +43,7 @@ "In [TIME_BLOODSUCKER_DAY_FINAL_WARN / 10], your master will be at risk of a Solar Flare. Make sure they find cover!") // (FINAL LIL WARNING) - while (time_til_cycle > 5) + while(time_til_cycle > 5) sleep(10) if (cancel_me) return @@ -90,56 +90,56 @@ while(!cancel_me) // Update all Bloodsucker sunlight huds - for (var/datum/mind/M in SSticker.mode.bloodsuckers) - if (!istype(M) || !istype(M.current)) + for(var/datum/mind/M in SSticker.mode.bloodsuckers) + if(!istype(M) || !istype(M.current)) continue var/datum/antagonist/bloodsucker/bloodsuckerdatum = M.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) - if (istype(bloodsuckerdatum)) + if(istype(bloodsuckerdatum)) bloodsuckerdatum.update_sunlight(max(0, time_til_cycle), amDay) // This pings all HUDs sleep(10) time_til_cycle -- /obj/effect/sunlight/proc/warn_daylight(danger_level=0, vampwarn = "", vassalwarn = "") - for (var/datum/mind/M in SSticker.mode.bloodsuckers) - if (!istype(M)) + for(var/datum/mind/M in SSticker.mode.bloodsuckers) + if(!istype(M)) continue to_chat(M,vampwarn) - if (M.current) - if (danger_level == 1) + if(M.current) + if(danger_level == 1) M.current.playsound_local(null, 'sound/chatter/griffin_3.ogg', 50 + danger_level, 1) - else if (danger_level == 2) + else if(danger_level == 2) M.current.playsound_local(null, 'sound/chatter/griffin_5.ogg', 50 + danger_level, 1) - else if (danger_level == 3) + else if(danger_level == 3) M.current.playsound_local(null, 'sound/effects/alert.ogg', 75, 1) - else if (danger_level == 4) + else if(danger_level == 4) M.current.playsound_local(null, 'sound/ambience/ambimystery.ogg', 100, 1) - else if (danger_level == 5) + else if(danger_level == 5) M.current.playsound_local(null, 'sound/spookoween/ghosty_wind.ogg', 90, 1) - if (vassalwarn != "") - for (var/datum/mind/M in SSticker.mode.vassals) - if (!istype(M)) + if(vassalwarn != "") + for(var/datum/mind/M in SSticker.mode.vassals) + if(!istype(M)) continue to_chat(M,vassalwarn) /obj/effect/sunlight/proc/punish_vamps() // Cycle through all vamp antags and check if they're inside a closet. - for (var/datum/mind/M in SSticker.mode.bloodsuckers) - if (!istype(M) || !istype(M.current)) + for(var/datum/mind/M in SSticker.mode.bloodsuckers) + if(!istype(M) || !istype(M.current)) continue var/datum/antagonist/bloodsucker/bloodsuckerdatum = M.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) - if (!istype(bloodsuckerdatum)) + if(!istype(bloodsuckerdatum)) continue // Closets offer SOME protection - if (istype(M.current.loc, /obj/structure)) + if(istype(M.current.loc, /obj/structure)) // Coffins offer the BEST protection - if (istype(M.current.loc, /obj/structure/closet/crate/coffin)) + if(istype(M.current.loc, /obj/structure/closet/crate/coffin)) SEND_SIGNAL(M.current, COMSIG_ADD_MOOD_EVENT, "vampsleep", /datum/mood_event/coffinsleep) continue else - if (!bloodsuckerdatum.warn_sun_locker) + if(!bloodsuckerdatum.warn_sun_locker) to_chat(M, "Your skin sizzles. The [M.current.loc] doesn't protect well against UV bombardment.") bloodsuckerdatum.warn_sun_locker = TRUE M.current.adjustFireLoss(0.5 + bloodsuckerdatum.vamplevel / 2) // M.current.fireloss += 0.5 + bloodsuckerdatum.vamplevel / 2 // Do DIRECT damage. Being spaced was causing this to not occur. setFireLoss(bloodsuckerdatum.vamplevel) @@ -147,15 +147,15 @@ SEND_SIGNAL(M.current, COMSIG_ADD_MOOD_EVENT, "vampsleep", /datum/mood_event/daylight_1) // Out in the Open? Buh Bye else - if (!bloodsuckerdatum.warn_sun_burn) - if (bloodsuckerdatum.vamplevel > 0) + if(!bloodsuckerdatum.warn_sun_burn) + if(bloodsuckerdatum.vamplevel > 0) to_chat(M, "The solar flare sets your skin ablaze!") else to_chat(M, "The solar flare scalds your neophyte skin!") bloodsuckerdatum.warn_sun_burn = TRUE - if (M.current.fire_stacks <= 0) + if(M.current.fire_stacks <= 0) M.current.fire_stacks = 0 - if (bloodsuckerdatum.vamplevel > 0) + if(bloodsuckerdatum.vamplevel > 0) M.current.adjust_fire_stacks(0.2 + bloodsuckerdatum.vamplevel / 10) M.current.IgniteMob() M.current.adjustFireLoss(2 + bloodsuckerdatum.vamplevel) // M.current.fireloss += 2 + bloodsuckerdatum.vamplevel // Do DIRECT damage. Being spaced was causing this to not occur. //setFireLoss(2 + bloodsuckerdatum.vamplevel) @@ -163,36 +163,36 @@ SEND_SIGNAL(M.current, COMSIG_ADD_MOOD_EVENT, "vampsleep", /datum/mood_event/daylight_2) /obj/effect/sunlight/proc/day_end() - for (var/datum/mind/M in SSticker.mode.bloodsuckers) - if (!istype(M) || !istype(M.current)) + for(var/datum/mind/M in SSticker.mode.bloodsuckers) + if(!istype(M) || !istype(M.current)) continue var/datum/antagonist/bloodsucker/bloodsuckerdatum = M.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) - if (!istype(bloodsuckerdatum)) + if(!istype(bloodsuckerdatum)) continue // Reset Warnings bloodsuckerdatum.warn_sun_locker = FALSE bloodsuckerdatum.warn_sun_burn = FALSE // Remove Dawn Powers for(var/datum/action/bloodsucker/P in bloodsuckerdatum.powers) - if (istype(P, /datum/action/bloodsucker/gohome)) + if(istype(P, /datum/action/bloodsucker/gohome)) bloodsuckerdatum.powers -= P P.Remove(M.current) /obj/effect/sunlight/proc/vamps_rank_up() set waitfor = FALSE // Cycle through all vamp antags and check if they're inside a closet. - for (var/datum/mind/M in SSticker.mode.bloodsuckers) - if (!istype(M) || !istype(M.current)) + for(var/datum/mind/M in SSticker.mode.bloodsuckers) + if(!istype(M) || !istype(M.current)) continue var/datum/antagonist/bloodsucker/bloodsuckerdatum = M.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) - if (istype(bloodsuckerdatum)) + if(istype(bloodsuckerdatum)) bloodsuckerdatum.RankUp() // Rank up! Must still be in a coffin to level! /obj/effect/sunlight/proc/give_home_power() // It's late...! Give the "Vanishing Act" gohome power to bloodsuckers. - for (var/datum/mind/M in SSticker.mode.bloodsuckers) - if (!istype(M) || !istype(M.current)) + for(var/datum/mind/M in SSticker.mode.bloodsuckers) + if(!istype(M) || !istype(M.current)) continue var/datum/antagonist/bloodsucker/bloodsuckerdatum = M.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) - if (istype(bloodsuckerdatum) && bloodsuckerdatum.lair && !(locate(/datum/action/bloodsucker/gohome) in bloodsuckerdatum.powers)) + if(istype(bloodsuckerdatum) && bloodsuckerdatum.lair && !(locate(/datum/action/bloodsucker/gohome) in bloodsuckerdatum.powers)) bloodsuckerdatum.BuyPower(new /datum/action/bloodsucker/gohome) diff --git a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm index e52b63110c..10fc09157f 100644 --- a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm +++ b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm @@ -36,7 +36,7 @@ // LISTS var/static/list/defaultTraits = list (TRAIT_STABLEHEART, TRAIT_NOBREATH, TRAIT_SLEEPIMMUNE, TRAIT_NOCRITDAMAGE, TRAIT_RESISTCOLD, TRAIT_RADIMMUNE, TRAIT_VIRUSIMMUNE, TRAIT_NIGHT_VISION, \ - TRAIT_NOSOFTCRIT, TRAIT_NOHARDCRIT, TRAIT_AGEUSIA, TRAIT_COLDBLOODED, TRAIT_NONATURALHEAL, TRAIT_NOMARROW, TRAIT_NOPULSE) + TRAIT_NOSOFTCRIT, TRAIT_NOHARDCRIT, TRAIT_AGEUSIA, TRAIT_COLDBLOODED, TRAIT_NONATURALHEAL, TRAIT_NOMARROW, TRAIT_NOPULSE, TRAIT_NOCLONE) // NOTES: TRAIT_AGEUSIA <-- Doesn't like flavors. // REMOVED: TRAIT_NODEATH // TO ADD: @@ -187,6 +187,8 @@ // Traits for (var/T in defaultTraits) ADD_TRAIT(owner.current, T, "bloodsucker") + if(HAS_TRAIT(owner.current, TRAIT_TOXINLOVER)) //No slime bonuses here, no thank you + REMOVE_TRAIT(owner.current, TRAIT_TOXINLOVER, "species") // Traits: Species if (ishuman(owner.current)) var/mob/living/carbon/human/H = owner.current @@ -233,14 +235,14 @@ power.Remove(owner.current) // owner.RemoveSpell(power) // Traits - for (var/T in defaultTraits) + for(var/T in defaultTraits) REMOVE_TRAIT(owner.current, T, "bloodsucker") // Traits: Species - if (ishuman(owner.current)) + if(ishuman(owner.current)) var/mob/living/carbon/human/H = owner.current H.set_species(H.dna.species.type) // Stats - if (ishuman(owner.current)) + if(ishuman(owner.current)) var/mob/living/carbon/human/H = owner.current H.set_species(H.dna.species.type) // Clown @@ -260,15 +262,15 @@ datum/antagonist/bloodsucker/proc/RankUp() set waitfor = FALSE - if (!owner || !owner.current) + if(!owner || !owner.current) return vamplevel_unspent ++ // Spend Rank Immediately? - if (istype(owner.current.loc, /obj/structure/closet/crate/coffin)) + if(istype(owner.current.loc, /obj/structure/closet/crate/coffin)) SpendRank() else to_chat(owner, "You have grown more ancient! Sleep in a coffin that you have claimed to thicken your blood and become more powerful.") - if (vamplevel_unspent >= 2) + if(vamplevel_unspent >= 2) to_chat(owner, "Bloodsucker Tip: If you cannot find or steal a coffin to use, they can be built from wooden planks.
    ") datum/antagonist/bloodsucker/proc/LevelUpPowers() @@ -287,19 +289,19 @@ datum/antagonist/bloodsucker/proc/SpendRank() for(var/pickedpower in typesof(/datum/action/bloodsucker)) var/datum/action/bloodsucker/power = pickedpower // If I don't own it, and I'm allowed to buy it. - if (!(locate(power) in powers) && initial(power.bloodsucker_can_buy)) + if(!(locate(power) in powers) && initial(power.bloodsucker_can_buy)) options[initial(power.name)] = power // TESTING: After working with TGUI, it seems you can use initial() to view the variables inside a path? options["\[ Not Now \]"] = null // Abort? - if (options.len > 1) + if(options.len > 1) var/choice = input(owner.current, "You have the opportunity to grow more ancient. Select a power to advance your Rank.", "Your Blood Thickens...") in options // Cheat-Safety: Can't keep opening/closing coffin to spam levels - if (vamplevel_unspent <= 0) // Already spent all your points, and tried opening/closing your coffin, pal. + if(vamplevel_unspent <= 0) // Already spent all your points, and tried opening/closing your coffin, pal. return - if (!istype(owner.current.loc, /obj/structure/closet/crate/coffin)) + if(!istype(owner.current.loc, /obj/structure/closet/crate/coffin)) to_chat(owner.current, "Return to your coffin to advance your Rank.") return - if (!choice || !options[choice] || (locate(options[choice]) in powers)) // ADDED: Check to see if you already have this power, due to window stacking. + if(!choice || !options[choice] || (locate(options[choice]) in powers)) // ADDED: Check to see if you already have this power, due to window stacking. to_chat(owner.current, "You prevent your blood from thickening just yet, but you may try again later.") return // Buy New Powers @@ -313,7 +315,7 @@ datum/antagonist/bloodsucker/proc/SpendRank() LevelUpPowers() //////// // Advance Stats - if (ishuman(owner.current)) + if(ishuman(owner.current)) var/mob/living/carbon/human/H = owner.current var/datum/species/S = H.dna.species S.burnmod += 0.025 // Slightly more burn damage @@ -331,7 +333,7 @@ datum/antagonist/bloodsucker/proc/SpendRank() vamplevel_unspent -- // Assign True Reputation - if (vamplevel == 4) + if(vamplevel == 4) SelectReputation(am_fledgling=FALSE, forced=TRUE) to_chat(owner.current, "You are now a rank [vamplevel] Bloodsucker. Your strength, resistence, health, feed rate, regen rate, and maximum blood have all increased!") to_chat(owner.current, "Your existing powers have all ranked up as well!") @@ -485,7 +487,7 @@ datum/antagonist/bloodsucker/proc/SpendRank() // - Warms up the body // - Creates a heartbeat // - Fake blood amount (550) -// Feign DEATH: +// Feign DEATH: Not yet done // - When lying down or sitting, you appear "dead and lifeless" // * Bloodsuckers REGENERATE diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm index d319017ede..b901b2a88f 100644 --- a/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm +++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm @@ -109,38 +109,17 @@ var/disloyalty_offered = FALSE // Has the popup been issued? Don't spam them. var/convert_cost = 10 -//obj/structure/kitchenspike/vassalrack/crowbar_act() -// // Do Nothing (Cancel crowbar deconstruct) -// return FALSE - /obj/structure/bloodsucker/vassalrack/deconstruct(disassembled = TRUE) new /obj/item/stack/sheet/metal(src.loc, 4) new /obj/item/stack/rods(loc, 4) qdel(src) -/* - /obj/structure/closet/CtrlShiftClick(mob/living/user) - if(!user.has_trait(TRAIT_SKITTISH)) - return ..() - if(!user.canUseTopic(src) || !isturf(user.loc)) - return - dive_into(user) -*/ - - - -// adding a STRAP on top of an icon: look at update_icon in closets.dm, and the use of overlays.dm cut_overlay() and add_overlay() - - - - /obj/structure/bloodsucker/vassalrack/MouseDrop_T(atom/movable/O, mob/user) if (!O.Adjacent(src) || O == user || !isliving(O) || !isliving(user) || useLock || has_buckled_mobs() || user.incapacitated()) return if (!anchored && user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) to_chat(user, "Until this rack is secured in place, it cannot serve its purpose.") return - // PULL TARGET: Remember if I was pullin this guy, so we can restore this var/waspulling = (O == owner.pulling) var/wasgrabstate = owner.grab_state @@ -463,7 +442,7 @@ ///obj/structure/bloodsucker/candelabrum/is_hot() // candle.dm //return FALSE -/datum/component/nanites/Destroy() +/obj/structure/bloodsucker/candelabrum/Destroy() STOP_PROCESSING(SSobj, src) /obj/structure/bloodsucker/candelabrum/update_icon() diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm index 63f8838882..f93d4d4261 100644 --- a/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm +++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm @@ -33,73 +33,60 @@ /datum/antagonist/bloodsucker/proc/RunLair() set waitfor = FALSE // Don't make on_gain() wait for this function to finish. This lets this code run on the side. - - while (!AmFinalDeath() && coffin && lair) - - // WAit 1 min and Repeat - sleep(60) - + while(!AmFinalDeath() && coffin && lair) + // WAit 2 min and Repeat + sleep(120) // Coffin Moved SOMEHOW? - if (lair != get_area(coffin)) - if (coffin) + if(lair != get_area(coffin)) + if(coffin) coffin.UnclaimCoffin() //lair = get_area(coffin) break // DONE - var/list/turf/area_turfs = get_area_turfs(lair) - - // Create Dirt etc. var/turf/T_Dirty = pick(area_turfs) - if (T_Dirty && !T_Dirty.density) + if(T_Dirty && !T_Dirty.density) // Default: Dirt - // CHECK: Cobweb already there? //if (!locate(var/obj/effect/decal/cleanable/cobweb) in T_Dirty) // REMOVED! Cleanables don't stack. - // STEP ONE: COBWEBS - // CHECK: Wall to North? var/turf/check_N = get_step(T_Dirty, NORTH) - if (istype(check_N, /turf/closed/wall)) + if(istype(check_N, /turf/closed/wall)) // CHECK: Wall to West? var/turf/check_W = get_step(T_Dirty, WEST) - if (istype(check_W, /turf/closed/wall)) + if(istype(check_W, /turf/closed/wall)) new /obj/effect/decal/cleanable/cobweb (T_Dirty) // CHECK: Wall to East? var/turf/check_E = get_step(T_Dirty, EAST) - if (istype(check_E, /turf/closed/wall)) + if(istype(check_E, /turf/closed/wall)) new /obj/effect/decal/cleanable/cobweb/cobweb2 (T_Dirty) - // STEP TWO: DIRT new /obj/effect/decal/cleanable/dirt (T_Dirty) - - // Find Animals in Area - if (rand(0,2) == 0) + if(rand(0,2) == 0) var/mobCount = 0 var/mobMax = CLAMP(area_turfs.len / 25, 1, 4) for (var/turf/T in area_turfs) - if (!T) continue + if(!T) continue var/mob/living/simple_animal/SA = locate() in T - if (SA) + if(SA) mobCount ++ if (mobCount >= mobMax) // Already at max break // Spawn One - if (mobCount < mobMax) + if(mobCount < mobMax) // Seek Out Location - while (area_turfs.len > 0) + while(area_turfs.len > 0) + sleep(240) //We dont want this to happen often var/turf/T = pick(area_turfs) // We use while&pick instead of a for/loop so it's random, rather than from the top of the list. - if (T && !T.density) + if(T && !T.density) var/mob/living/simple_animal/SA = /mob/living/simple_animal/mouse // pick(/mob/living/simple_animal/mouse,/mob/living/simple_animal/mouse,/mob/living/simple_animal/mouse, /mob/living/simple_animal/hostile/retaliate/bat) //prob(300) /mob/living/simple_animal/mouse, new SA (T) break area_turfs -= T - // NOTE: area_turfs is now cleared out! - if (coffin) + if(coffin) coffin.UnclaimCoffin() - // Done (somehow) lair = null diff --git a/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm b/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm index 7754e27a76..a7401b0214 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm @@ -22,22 +22,24 @@ return . = TRUE // Break Out of Restraints! (And then cancel) - if (CheckBreakRestraints()) + if(CheckBreakRestraints()) //PowerActivatedSuccessfully() // PAY COST! BEGIN COOLDOWN!DEACTIVATE! . = FALSE //return FALSE // Throw Off Attacker! (And then cancel) - if (CheckEscapePuller()) + if(CheckEscapePuller()) //PowerActivatedSuccessfully() // PAY COST! BEGIN COOLDOWN!DEACTIVATE! . = FALSE //return FALSE - // Did we successfuly use power to BREAK CUFFS and/or ESCAPE PULLER? + /*if(CheckBreakLocker()) + .= FALSE */ + // Did we successfuly use power to BREAK CUFFS and/or ESCAPE PULLER and/or escape from a locker? // Then PAY COST! - if (. == FALSE) + if(. == FALSE) PowerActivatedSuccessfully() // PAY COST! BEGIN COOLDOWN!DEACTIVATE! // NOTE: We use . = FALSE so that we can break cuffs AND throw off our attacker in one use! //return TRUE /datum/action/bloodsucker/targeted/brawn/CheckValidTarget(atom/A) - return isliving(A) || istype(A, /obj/machinery/door) || istype(A, /obj/structure/closet) + return isliving(A) || istype(A, /obj/machinery/door)) /datum/action/bloodsucker/targeted/brawn/CheckCanTarget(atom/A, display_error) // DEFAULT CHECKS (Distance) @@ -53,10 +55,7 @@ if(isliving(A)) return TRUE // Target Type: Door - else if(upgrade_canDoor && istype(A, /obj/machinery/door)) - return TRUE - // Target Type: Closet - else if(upgrade_canLocker && istype(A, /obj/structure/closet)) + else if(istype(A, /obj/machinery/door)) return TRUE return ..() // yes, FALSE! You failed if you got here! BAD TARGET @@ -88,30 +87,21 @@ owner.newtonian_move(send_dir) // Bounce back in 0 G target.throw_at(T, powerlevel, TRUE, owner) //new /datum/forced_movement(target, get_ranged_target_turf(target, send_dir, (hitStrength / 4)), 1, FALSE) // Target Type: Door - else if (upgrade_canDoor && istype(target, /obj/machinery/door)) + else if(istype(target, /obj/machinery/door)) + var/obj/machinery/door/D = target playsound(get_turf(usr), 'sound/machines/airlock_alien_prying.ogg', 40, 1, -1) - if (do_mob(usr,target,25)) - var/obj/machinery/door/D = target + to_chat(user, "You prepare to tear open [D].") + if(do_mob(usr,target,25)) if (D.Adjacent(user)) - to_chat(user, "You prepare to tear open [D].") + to_chat(user, "You tear open the [D].") user.Stun(10) user.do_attack_animation(D, ATTACK_EFFECT_SMASH) playsound(get_turf(D), 'sound/effects/bang.ogg', 30, 1, -1) D.open(2) // open(2) is like a crowbar or jaws of life. // Target Type: Closet - else if (upgrade_canLocker && istype(target, /obj/structure/closet)) - playsound(get_turf(usr), 'sound/machines/airlock_alien_prying.ogg', 40, 1, -1) - if (do_mob(usr,target,25)) - var/obj/structure/closet/C = target - to_chat(user, "You prepare to tear open the [C].") - user.Stun(10) - user.do_attack_animation(C, ATTACK_EFFECT_SMASH) - playsound(get_turf(C), 'sound/effects/bang.ogg', 30, 1, -1) - C.bust_open() /datum/action/bloodsucker/targeted/brawn/proc/CheckBreakRestraints() - - if (!iscarbon(owner)) // || !owner.restrained() + if(!iscarbon(owner)) // || !owner.restrained() return FALSE // (NOTE: Just like biodegrade.dm, we only remove one thing per use // // Destroy Cuffs @@ -125,18 +115,18 @@ user_C.clear_cuffs(O,TRUE) playsound(get_turf(usr), 'sound/effects/grillehit.ogg', 80, 1, -1) return TRUE - +/* Doesnt work // Destroy Straightjacket - if (ishuman(owner)) + if(ishuman(owner)) var/mob/living/carbon/human/user_H = owner if(user_H.wear_suit && user_H.wear_suit.breakouttime) - var/obj/item/clothing/suit/S = user_H.get_item_by_slot(ITEM_SLOT_ICLOTHING) + var/obj/item/clothing/suit/straight_jacket/S = user_H.get_item_by_slot(ITEM_SLOT_ICLOTHING) if(istype(S)) user_C.visible_message("[user_C] attempts to remove [S]!", \ "You rip through [S] like it's nothing!") user_C.clear_cuffs(S,TRUE) playsound(get_turf(usr), 'sound/effects/grillehit.ogg', 80, 1, -1) - return TRUE + return TRUE */ // Destroy Leg Cuffs if(user_C.legcuffed) var/obj/O = user_C.get_item_by_slot(SLOT_LEGCUFFED) @@ -149,7 +139,7 @@ return FALSE /datum/action/bloodsucker/targeted/brawn/proc/CheckEscapePuller() - if (!owner.pulledby)// || owner.pulledby.grab_state <= GRAB_PASSIVE) + if(!owner.pulledby)// || owner.pulledby.grab_state <= GRAB_PASSIVE) return FALSE var/mob/M = owner.pulledby var/pull_power = M.grab_state @@ -169,3 +159,16 @@ "You shrug off [M]'s grasp!") owner.pulledby = null // It's already done, but JUST IN CASE. return TRUE +/* Doesnt work +/datum/action/bloodsucker/targeted/brawn/proc/CheckBreakLocker() + if(!istype(owner.loc, /obj/structure/closet)) + return FALSE + playsound(get_turf(owner), 'sound/machines/airlock_alien_prying.ogg', 40, 1, -1) + if(do_mob(owner ,target, 25)) + var/obj/structure/closet/C = owner.loc + to_chat(owner, "You prepare to tear open the [C].") + owner.do_attack_animation(C, ATTACK_EFFECT_SMASH) + playsound(get_turf(C), 'sound/effects/bang.ogg', 30, 1, -1) + C.bust_open() + return TRUE +*/ diff --git a/code/modules/antagonists/bloodsucker/powers/bs_cloak.dm b/code/modules/antagonists/bloodsucker/powers/bs_cloak.dm index 2612ad659e..7a00f97382 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_cloak.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_cloak.dm @@ -11,9 +11,6 @@ warn_constant_cost = TRUE var/light_min = 0.5 // If lum is above this, no good. - var/remember_start_loc // Where this power was activated, so it can be checked from ContinueActive - // Level Up - var/upgrade_canMove = FALSE // Can I move around with this power? /datum/action/bloodsucker/cloak/CheckCanUse(display_error) . = ..() @@ -30,19 +27,11 @@ var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) var/mob/living/user = owner - remember_start_loc = user.loc - - // Freeze in Place (so you don't auto-cancel) -//user.mobility_flags &= ~MOBILITY_MOVE while (bloodsuckerdatum && ContinueActive(user)) - - //if (!do_mob(user, user, 10, 0, 0, extra_checks=CALLBACK(src, .proc/ContinueActive, user, target))) - // return - // Fade from sight owner.alpha = max(0, owner.alpha - min(75, 20 + 15 * level_current)) bloodsuckerdatum.AddBloodVolume(-0.2) - + ADD_TRAIT(user, TRAIT_NORUNNING, "cloak of darkness") sleep(5) /datum/action/bloodsucker/cloak/ContinueActive(mob/living/user, mob/living/target) @@ -52,12 +41,8 @@ if(user.stat == !CONSCIOUS) to_chat(owner, "Your cloak failed due to you falling unconcious! ") return FALSE - // Must be SAME LOCATION - var/turf/T = owner.loc - if (!upgrade_canMove && T != remember_start_loc) - to_chat(owner, "Your cloak is not yet powerfull enough to allow you to move!") - return FALSE // Must be DARK + var/turf/T = owner.loc if(istype(T) && T.get_lumcount() > light_min) to_chat(owner, "Your cloak failed due to there being too much light!") return FALSE @@ -66,4 +51,5 @@ /datum/action/bloodsucker/cloak/DeactivatePower(mob/living/user = owner, mob/living/target) ..() + REMOVE_TRAIT(user, TRAIT_NORUNNING, "cloak of darkness") user.alpha = 255 diff --git a/code/modules/antagonists/bloodsucker/powers/bs_gohome.dm b/code/modules/antagonists/bloodsucker/powers/bs_gohome.dm index 514fa8805a..2f1526284a 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_gohome.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_gohome.dm @@ -94,7 +94,7 @@ puff.set_up(3, 0, get_turf(owner)) puff.start() // TELEPORT: Move to Coffin & Close it! - do_teleport(owner, bloodsuckerdatum.coffin, no_effects=TRUE) // in teleport.dm? + do_teleport(owner, bloodsuckerdatum.coffin, no_effects = TRUE, forced = TRUE) // in teleport.dm? // SLEEP user.resting = TRUE //user.Unconscious(30,0) diff --git a/code/modules/antagonists/bloodsucker/powers/bs_haste.dm b/code/modules/antagonists/bloodsucker/powers/bs_haste.dm index b9e35c6a4b..5755931d64 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_haste.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_haste.dm @@ -20,10 +20,14 @@ if(!.) return // Being Grabbed - if (owner.pulledby && owner.pulledby.grab_state >= GRAB_AGGRESSIVE) - if (display_error) + if(owner.pulledby && owner.pulledby.grab_state >= GRAB_AGGRESSIVE) + if(display_error) to_chat(owner, "You're being grabbed!") return FALSE + if(!owner.has_gravity(owner.loc)) //We dont want people to be able to use this to fly around in space + if(display_error) + to_chat(owner, "You cant dash while floating!") + return FALSE return TRUE /datum/action/bloodsucker/targeted/haste/CheckValidTarget(atom/A) @@ -67,9 +71,6 @@ if (rand(0, 5) < level_current) playsound(get_turf(newtarget), "sound/weapons/punch[rand(1,4)].ogg", 15, 1, -1) newtarget.Knockdown(10 + level_current * 5) - newtarget.adjustStaminaLoss(10 + 5 * level_current) - newtarget.Stun(5 + level_current * 2) - newtarget.adjustStaminaLoss(5 + 3 * level_current) if(newtarget.IsStun()) newtarget.spin(10,1) if (rand(0,4)) diff --git a/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm b/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm index 53b8365b44..2c1b8d6321 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm @@ -17,10 +17,14 @@ if(!..(display_error))// DEFAULT CHECKS return FALSE // Being Grabbed - if (owner.pulledby && owner.pulledby.grab_state >= GRAB_AGGRESSIVE) - if (display_error) + if(owner.pulledby && owner.pulledby.grab_state >= GRAB_AGGRESSIVE) + if(display_error) to_chat(owner, "You're being grabbed!") return FALSE + if(!owner.has_gravity(owner.loc))//TODO figure out how to check if theyre able to move while in nograv + if(display_error) + to_chat(owner, "You cant lunge while floating!") + return FALSE return TRUE /datum/action/bloodsucker/targeted/lunge/CheckValidTarget(atom/A) @@ -28,7 +32,7 @@ /datum/action/bloodsucker/targeted/lunge/CheckCanTarget(atom/A, display_error) // Check: Self - if (target == owner) + if(target == owner) return FALSE // Check: Range //if (!(target in view(target_range, get_turf(owner)))) @@ -36,11 +40,11 @@ // to_chat(owner, "Your victim is too far away.") // return FALSE // DEFAULT CHECKS (Distance) - if (!..()) + if(!..()) return FALSE // Check: Turf var/mob/living/L = A - if (!isturf(L.loc)) + if(!isturf(L.loc)) return FALSE return TRUE @@ -56,6 +60,7 @@ // Step One: Heatseek toward Target's Turf walk_towards(owner, T, 0.1, 10) // NOTE: this runs in the background! to cancel it, you need to use walk(owner.current,0), or give them a new path. + addtimer(CALLBACK(owner, .proc/_walk, 0), 2 SECONDS) if(get_turf(owner) != T && !(isliving(target) && target.Adjacent(owner)) && owner.incapacitated() && owner.resting) var/send_dir = get_dir(owner, T) new /datum/forced_movement(owner, get_ranged_target_turf(owner, send_dir, 1), 1, FALSE) @@ -64,7 +69,7 @@ sleep(1) if(target.Adjacent(owner)) // LEVEL 2: If behind target, mute or unconscious! - if (do_knockdown) // && level_current >= 1) + if(do_knockdown) // && level_current >= 1) target.Knockdown(15 + 10 * level_current,1) target.adjustStaminaLoss(40 + 10 * level_current) // Cancel Walk (we were close enough to contact them) diff --git a/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm b/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm index 789f5e860b..4d4520c8b3 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm @@ -94,8 +94,8 @@ if(do_mob(user, target, 40, 0, TRUE, extra_checks=CALLBACK(src, .proc/ContinueActive, user, target))) PowerActivatedSuccessfully() // PAY COST! BEGIN COOLDOWN! - target.silent += 100 + level_current * 15 var/power_time = 90 + level_current * 15 + target.silent += power_time + 50 target.apply_status_effect(STATUS_EFFECT_MESMERIZE, 100 + level_current * 15) to_chat(user, "[target] is fixed in place by your hypnotic gaze.") target.Stun(power_time) diff --git a/code/modules/antagonists/bloodsucker/powers/bs_trespass.dm b/code/modules/antagonists/bloodsucker/powers/bs_trespass.dm index 9e3ee8939d..9b266a4cfe 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_trespass.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_trespass.dm @@ -101,7 +101,7 @@ // Move & Freeze if (isturf(target_turf)) - do_teleport(owner, target_turf, no_effects=TRUE) // in teleport.dm? + do_teleport(owner, target_turf, no_effects=TRUE, forced = TRUE) // in teleport.dm? user.next_move = world.time + mist_delay / 2 user.Stun(mist_delay / 2, ignore_canstun = TRUE) diff --git a/code/modules/antagonists/bloodsucker/powers/v_recuperate.dm b/code/modules/antagonists/bloodsucker/powers/v_recuperate.dm index 27277b215b..0595b83eda 100644 --- a/code/modules/antagonists/bloodsucker/powers/v_recuperate.dm +++ b/code/modules/antagonists/bloodsucker/powers/v_recuperate.dm @@ -33,7 +33,7 @@ C.heal_overall_damage(bruteheal) C.blood_volume -= 0.6 if (C.getStaminaLoss() < 60) - C.adjustStaminaLoss(25, forced = TRUE) + C.adjustStaminaLoss(10, forced = TRUE) // Stop Bleeding if (istype(H) && H.bleed_rate > 0 && rand(20) == 0) H.bleed_rate -- @@ -41,7 +41,7 @@ C.Jitter(5) - sleep(20) + sleep(10) // DONE! //DeactivatePower(owner) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 069190d9e0..069317d4a8 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -177,6 +177,8 @@ bodies = old_species.bodies /datum/species/jelly/slime/spec_life(mob/living/carbon/human/H) + if((HAS_TRAIT(H, TRAIT_NOMARROW))) + return if(H.blood_volume >= BLOOD_VOLUME_SLIME_SPLIT) if(prob(5)) to_chat(H, "You feel very bloated!") diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 88e766edfc..9141a6d299 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -180,7 +180,7 @@ else new /obj/effect/temp_visual/dir_setting/bloodsplatter(target_loca, splatter_dir, bloodtype_to_color()) - if(iscarbon(L)) + if(iscarbon(L) && !HAS_TRAIT(L, TRAIT_NOMARROW)) var/mob/living/carbon/C = L C.bleed(damage) else diff --git a/icons/mob/inhands/weapons/melee_righthand.dmi b/icons/mob/inhands/weapons/melee_righthand.dmi index ed83aea17fcd600af170116c026e4e92c1995814..a93a4e38d57328c9fe46e656c62e0ddb0db978e4 100644 GIT binary patch delta 2389 zcmYk8dpy(oAIFE-NaU`VX|B1h@;lBlbfg;*rMAjtR0=Db`)$7EmZgYtlrSgdl1r$R z+ivKlFv3{JnoI5`i?wOn@i@Q7V?<*^K<1wD#gNbsz5P2>l1RoU=egy=I zE6UGn$YvmvGp4`pgkxmr(0OY}nr=3_(sx|F`btU=Ed3=_TjBTpv+ugYXZhjMyo#7- zY*=>8IuU_B>avSv+v;!S!OT6u0qn`J^5w%9pY|Tq)J#NH32mU2L524i-g$xjn$aoR z;P!++v>>NwzNbp1Dc#yyzdFF(DoovrQC@NTS9d^ne+E0QKl69uUPm4%_%oISEiW{N z33tEt%q3`=8{|D8Z*y(58q-Y8GH@AtnRU)ZaB4eS`)$5Q>306KdH_e-2Ygz}X1@U> zvJQqFbA^SK0uTtIcEt5JpSYsMVgRjy)XeC%fFGaj>Gz91xwWZIDbq(rEFt6A6HkhF z2uua0CVQshB}UY-$>Q@Fk)o3OOvr{~AdoL^u!Ke%iEzl|yEh%AB8xMT)W?$MomOH# zQa6$^@f0W%=<`%=0!YrbVJb7RHzEv$U(FJ}JkI0H$YHsh{jI60@arp*1)50=xWLhF z{}tid{G-5nH^M3_Qgl6)WSyVT5bEIVFxD1#GJ+3Q9oT#E zhuICBv)h1#ZWK?C$cG>Ia`wyy%9ii2_5uZ|^5X6&uQveU0XrT??kR&-1+Nq8-PA^i zK|`G6#<0akrx=E1OsvwWor|%K!LRn#f(w9CVE6T5BXF@~MBj=R5UwA!evyEON>)4R z%F=$QZw?^FafV@B0kdS>5fi%7CC8&~tx#%IjnO6-o`N8N-Q79Y$djn2oUAED(x)w?CB zzm%qogLjzAGD2<|uC@3DYTzg5we@v1?>0r`_rDX|v_oZFmUa1Vt^RN`)a}sOX1BUs zZiBW(VNx>2>yRJf$hD~eG_D>)}l9ET|$eeRTfvtiW$#T0#} zJI3|TPGs3@DVq3V+S-ql#y zcV`h6Uf%%&<$q;^KwB$Z?BHjZ{G`Cmz3cp?L<&B?s$TBXk6~6WPs3);l_m3J-(nJ1 z>BKikn97pF3Xuy%sO8j~dN~B>!kY0dApK?^7e^hv{P-@*W0N0c4~bLrGAjZmrxdXd`YK3!Wb1Y zeu>4a&LxxW_hPs=`3W2t#^@2WdPcav<|9a_uet(XoObci!z8E183746>*E$Tr*)z1 zWUl`jPvhmXG0GCgo#UAKcjYhFB&N*+WZnO$F?|1Qnv&d0HYrFnQDAHyUMZm>?jACh z_>bT3RJD-S%@g`21C9oLw(}6#X34aM0Wj85DU+Jn`D3cPU{)bJpgmzQ#4%=aeG|QE zxwXy)3qOSU-34!?AVkKiqUd)@fTZ1=Qee)dmcEU9lsvkTDc~;7B*n@ z)17k-oCReywW3GzwjX_vYAS|!7Cd(oX{lEKHk^x@@Z=|Vb%>4)JM(1RojQol^yWBK z%*wVUv0_gLKv7rymI1~717z+7L}Jj=nVFA&ZhYNR1J;3+DkRFc)>~^#AKJWXLe`#o zb3s!bQ!_Y^eN&Ntq4%d}l-^{m zB3Ic?;{Nd9+7;z=zd`Idlxa8UC>fnyW zg_m!+-bYVQq9fa>_HK?RTd&U&u{AhLK2a2%Bs!fG_UayOr1=o#Sdk6- z@}g0*xfg?VNgMT z1ZpSJiS09mp=dfJ;$Tcw>Sspimlk<=+Ryd7O>r;$<_z`T1dWhwG`6(;G{)I=7(RI2 zm6R+*3LyZcs8{ZmM=DNNhuht-5q{%yqf4dOPiXqE4=HljTDj{?unIW*3WFa0 z2MSJzzUc^zrqGP*%q@THU>o8tWtc+7ha4YubTU8E{H9hp)gK^nag nKK=HYpBiVh<^C4O!bs$_Fn7Wg>iHX269{zVfTwGn3pV91LiLI4 delta 2324 zcmY+DdpOhm8^>o36JpU)8jnO$Q6XnWA$cOnq?(Y5*pTEfftJ<`g!^oSRc-X4~WGcU@1v-#?%0e!oAT>$+d}`@TLK3N!_Rx=0~Wg9HeLLI4EP z)zxKY#`J?gAdwJf$8#Xd?|s)d#UR$jEyViTE$`qPK_NE+13;kgoF|W7Br_~!tY_!W zKPOEYY~Zep2WWb@IA6mIup zwo&!bwMFty)CzQ|1_O7lP3-K`w=6RgFJ64?jqc@jFE6Tyhfu44eBVEeK_JNBDQhd2 z@SOQvudps7s7)8%+5UJX^SYuNsnEUB@{+wMWkZ->-Q*=*T|m^|OYx>~qDu-pD)TgG zljF*fx+0rlfj|n8OwA*~t1Ysl8(H;Dfwr2?t!x|NAgo8w4?k_pTI_w(4oSW(PR?N` z`Fl*o`qb;I0GTt+f@9z2rK7~2Z$v&1TR3~=oJ9_dYRew3RlD98NAJN~$XCgd*C89P zv{yPv*{EdTgWBE`dd3BSQAWRBr;fqAj~|7`VWtl8JI3lp!9r^yUo+xcm>E&?kfDt= z_UoB*qb&6e^`1O>(_0n(!H^@#BL-m$E`Z4y*{5j$pYoP`zi~wGl|WE=0@Ji=B-z%7 z+Kx_GK~!aU9rz}@Pgo_pI?sxM>#tL8RRBVXF;YL`VeG&{psMVSwRHAy=*I52Sctg5 zrX<^e7!Yr>BNZw7D~(@=nGrdv=bq9bu=kZ!l=~8neB+2@QbIw~pp(K?6?BCpfPT!1 zEX#CUQIKIb*HH15;z@fGYhj4djqu%b4qIa zq%c zKrf3(-<19&c0CT~u?BAapbb~ZQ2LI52^&3CN{(Jldc_%zc>Z1G$J=GchuX}q-j*Gv z>X+A{x8?RH^R?!bo!~t25V`$WkA_a|ITa^3*PN_Vf4#QHhsY{y>Z^XL=(kL&IVJDKF>V?BN?$LH=)ACTmFGs zXjLSi{9!y)<I`0(0cLAp< zo~4z8=3y?E5l>>K5x`9jj6}QF{F$Qo8)~zf8s*Puuzl@rzGU!tbxiJ?QCtCs6H&h$ z^?_^4W-ntWdCkiYo3jZ)S;W6a!J7}3a0Ox2AB=~P0_buw#h60FHX52xvOm&AtMr^c zWn=TK+NR4?LSxoShdf_}m=FUOKZ=L?0FdyJ9QG^*@_*gOgXH=j`F@dH#%mv9vm>Xt zjD2Jd2L|MG6v-S#?4GnlIAwV8Nl_<|4^Z(MBhz*Gq0Ni;sS7JZ3;|2?fA#~i zTN*7a{V|a^H|F|)xX`R$pI*NGlY%@@{vzkSaw~oIBHV?W{wM>9d?NgOr6GXL7M)dg zSx+Zq)JOA8SPlKzhJhyaK5@8wRVp;P_o1|}vI|c!y{PAEB1FbacO2j`Xu+GCrN;a) zIBbr1F8|5@B?Lk$(I74k_-Az1Jy7yf|d_?$ z(d5!0p#TwA?C6-KeHI@^pKYJAbNn}v5p)vxlAJ1AiKMvjS?0xH?teI^vnW>^El`ap5!8c-2x5RdbgZ%8?xOx)nu&1|LJl*PD(lD zVE8O++nJ^hEu|LMWLW#c^OhE=cV7$KDZchPN*>N_mJxz_)4oc9+^AMfIPMgU^OKVh zj(;sk(dkId*+Y*d#DZ^DcNAqmywt3QP}k|H?CG&9yO*pfri1YBK96!&N~p$rZB5XyDj5Z*pT|NF za!m-Y9RnEEh05+w#qqK4@jou0+M$5!)ktGwxvV z?Qj?&*ZbJ~VZ%%bCT`n~tSbcfF>Fm8H>(~`XC6ww(^_m5nlwA{W$9A&9hPf-ti%C{ z{-b5-thBdC*c=V@Q&uSh(b#%3Di`tdcJG3@)6vEs+g7dnkw*c^-_wI)4!-@`vbHyb z69*kgu$c;QIPQ#GpgJ%_wW?u>?L!yInlOAywz?Tr-aC*e>5j=@&SQ+$wBfJqsL%&n zZ3AN0r?vRIiLnMV1MFe}OFaMSn8cRwpz*`dXPSS?{A#2cF9ZP(9?;P`go1wz$x}9t K)@8>%@BR(U%y6gx From d184bdd77aca9cddb2ba65b68531f44ed38d8f3c Mon Sep 17 00:00:00 2001 From: Artur Date: Sun, 8 Dec 2019 22:22:30 +0200 Subject: [PATCH 25/64] Whoops --- code/modules/antagonists/bloodsucker/bloodsucker_life.dm | 2 +- .../antagonists/bloodsucker/objects/bloodsucker_crypt.dm | 3 ++- code/modules/antagonists/bloodsucker/powers/bs_brawn.dm | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm index 86e4a51d98..0c26130d0f 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm @@ -84,7 +84,7 @@ //It is called from your coffin on close (by you only) if(poweron_masquerade == TRUE || owner.current.AmStaked()) return FALSE - owner.current.adjustStaminaLoss(-3 * (regenRate * 4) * mult, 0) // Humans lose stamina damage really quickly. Vamps should heal more. + owner.current.adjustStaminaLoss(-3 * (regenRate * 2) * mult, 0) // Humans lose stamina damage really quickly. Vamps should heal more. owner.current.adjustCloneLoss(-1 * (regenRate * 4) * mult, 0) owner.current.adjustOrganLoss(ORGAN_SLOT_BRAIN, -1 * (regenRate * 4) * mult) //adjustBrainLoss(-1 * (regenRate * 4) * mult, 0) // No Bleeding diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm index b901b2a88f..5bfdb68931 100644 --- a/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm +++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm @@ -477,7 +477,8 @@ var/datum/antagonist/bloodsucker/V = H.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) if(V || T) //We dont want vassals or vampires affected by this return - H.hallucination = 5 + H.hallucination = 20 SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "vampcandle", /datum/mood_event/vampcandle) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // OTHER THINGS TO USE: HUMAN BLOOD. /obj/effect/decal/cleanable/blood +/obj/item/restraints/legcuffs/beartrap/bloodsucker diff --git a/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm b/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm index a7401b0214..49aada3611 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm @@ -39,7 +39,7 @@ // NOTE: We use . = FALSE so that we can break cuffs AND throw off our attacker in one use! //return TRUE /datum/action/bloodsucker/targeted/brawn/CheckValidTarget(atom/A) - return isliving(A) || istype(A, /obj/machinery/door)) + return isliving(A) || istype(A, /obj/machinery/door) /datum/action/bloodsucker/targeted/brawn/CheckCanTarget(atom/A, display_error) // DEFAULT CHECKS (Distance) From e111429a3056f651658368d9f04a1a6fb8e3658c Mon Sep 17 00:00:00 2001 From: kappa-sama <44128284+kappa-sama@users.noreply.github.com> Date: Sun, 8 Dec 2019 23:37:33 -0500 Subject: [PATCH 26/64] the hippie thing --- code/modules/antagonists/wizard/equipment/spellbook.dm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/modules/antagonists/wizard/equipment/spellbook.dm b/code/modules/antagonists/wizard/equipment/spellbook.dm index c5308cf0c0..56e6061375 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook.dm @@ -392,6 +392,12 @@ dynamic_requirement = 50 dynamic_cost = 10 +/datum/spellbook_entry/item/plasmafist + name = "Plasma Fist" + desc = "A forbidden martial art designed on the surging power of plasma. Use it to learn the ancient art." + item_path = /obj/item/book/granter/martial/plasma_fist + cost = 3 + /datum/spellbook_entry/item/guardian name = "Guardian Deck" desc = "A deck of guardian tarot cards, capable of binding a personal guardian to your body. There are multiple types of guardian available, but all of them will transfer some amount of damage to you. \ From 20defaba8e28d0d330099c3ef88097011421cb16 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 8 Dec 2019 21:46:53 -0700 Subject: [PATCH 27/64] Update conveyor2.dm --- code/modules/recycling/conveyor2.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index 5875e821a3..5e075177e6 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -135,6 +135,10 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) addtimer(CALLBACK(src, .proc/convey, affecting), 1) /obj/machinery/conveyor/proc/convey(list/affecting) + var/turf/T = get_turf(src) + T = get_step(T, movedir) + if(length(T.contents) > 150) + return for(var/atom/movable/A in affecting) if((A.loc == loc) && A.has_gravity()) A.ConveyorMove(movedir) From f790d675d9e31dba4308fdd18c6a2f9dcd01a5ce Mon Sep 17 00:00:00 2001 From: kappa-sama <44128284+kappa-sama@users.noreply.github.com> Date: Mon, 9 Dec 2019 09:06:11 -0500 Subject: [PATCH 28/64] flavor text --- code/modules/antagonists/wizard/equipment/spellbook.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/antagonists/wizard/equipment/spellbook.dm b/code/modules/antagonists/wizard/equipment/spellbook.dm index 56e6061375..dcec31e5c2 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook.dm @@ -394,7 +394,7 @@ /datum/spellbook_entry/item/plasmafist name = "Plasma Fist" - desc = "A forbidden martial art designed on the surging power of plasma. Use it to learn the ancient art." + desc = "A forbidden martial art designed on the surging power of plasma. Use it to harness the ancient power." item_path = /obj/item/book/granter/martial/plasma_fist cost = 3 From 488c0f183314b14be5a8eb014d930432949121a6 Mon Sep 17 00:00:00 2001 From: Artur Date: Mon, 9 Dec 2019 19:08:42 +0200 Subject: [PATCH 29/64] Mindshield fix and thrall buff --- .../dynamic/dynamic_rulesets_midround.dm | 28 ++++++++++ .../dynamic/dynamic_rulesets_roundstart.dm | 54 +++++++++---------- .../items/implants/implant_mindshield.dm | 2 +- .../bloodsucker/bloodsucker_life.dm | 25 +++------ .../bloodsucker/bloodsucker_sunlight.dm | 5 +- .../bloodsucker/datum_bloodsucker.dm | 35 ++++-------- .../antagonists/bloodsucker/datum_vassal.dm | 41 +++++++------- .../bloodsucker/items/bloodsucker_organs.dm | 27 +++------- .../bloodsucker/items/bloodsucker_stake.dm | 2 +- .../bloodsucker/objects/bloodsucker_coffin.dm | 38 +++++-------- .../bloodsucker/objects/bloodsucker_crypt.dm | 4 -- .../bloodsucker/powers/bs_cloak.dm | 22 ++++---- .../bloodsucker/powers/bs_fortitude.dm | 4 +- .../bloodsucker/powers/bs_gohome.dm | 2 +- .../bloodsucker/powers/bs_haste.dm | 6 +-- .../bloodsucker/powers/bs_mesmerize.dm | 6 +-- .../bloodsucker/powers/bs_trespass.dm | 2 +- .../bloodsucker/powers/v_recuperate.dm | 31 ++++------- 18 files changed, 143 insertions(+), 191 deletions(-) diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm index 8cda402ebf..4a8ca2a58c 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm @@ -744,3 +744,31 @@ #undef ABDUCTOR_MAX_TEAMS #undef REVENANT_SPAWN_THRESHOLD + +////////////////////////////////////////////// +// // +// BLOODSUCKERS // +// // +////////////////////////////////////////////// + +/datum/dynamic_ruleset/latejoin/bloodsucker + name = "Bloodsucker Infiltrator" + config_tag = "latejoin_bloodsucker" + antag_datum = ANTAG_DATUM_BLOODSUCKER + antag_flag = ROLE_TRAITOR + restricted_roles = list("AI", "Cyborg") + protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") + required_candidates = 1 + weight = 3 + cost = 10 + requirements = list(90,80,70,60,55,50,45,40,35,30) + high_population_requirement = 30 + repeatable = TRUE + +/datum/dynamic_ruleset/latejoin/bloodsucker/execute() + var/mob/M = pick(candidates) + assigned += M.mind + M.mind.special_role = antag_flag + if(mode.make_bloodsucker(M.mind)) + mode.bloodsuckers += M + return TRUE diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm index c1842b2530..2d476eab19 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm @@ -784,38 +784,36 @@ // BLOODSUCKERS // // // ////////////////////////////////////////////// -/* Doesnt work just yet + /datum/dynamic_ruleset/roundstart/bloodsucker - name = "bloodsucker" + name = "Bloodsuckers" config_tag = "bloodsucker" + persistent = TRUE antag_flag = ROLE_BLOODSUCKER - antag_datum = /datum/antagonist/bloodsucker/ - protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster", "Chaplain") - restricted_roles = list("AI", "Cyborg") - required_candidates = 1 - weight = 3 - cost = 15 - scaling_cost = 10 - requirements = list(80,70,60,50,50,50,50,50,50,50) - //antag_cap = list(1,1,1,1,1,2,2,2,2,2) There will be just as many vamp hunters as vampires, right? - high_population_requirement = 50 - var/datum/antagonist/bloodsucker/V + antag_datum = ANTAG_DATUM_BLOODSUCKER + minimum_required_age = 0 + protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") + restricted_roles = list("Cyborg", "AI") + required_candidates = 1 + weight = 2 + cost = 15 + scaling_cost = 10 + requirements = list(90,80,70,60,50,50,50,50,50,50) + high_population_requirement = 50 + antag_cap = list(1,1,1,1,1,2,2,2,2,2) /datum/dynamic_ruleset/roundstart/bloodsucker/pre_execute() - var/num_bloodsuckers = antag_cap[indice_pop] * (scaled_times + 1) - for (var/i = 1 to num_bloodsuckers) - var/mob/M = pick_n_take(candidates) - assigned += M.mind - V += M.mind - M.mind.special_role = ROLE_TRAITOR - M.mind.restricted_roles = restricted_roles - mode.assign_monster_hunters(num_bloodsuckers,TRUE, assigned) - return TRUE + var/num_bloodsuckers = antag_cap[indice_pop] * (scaled_times + 1) + for (var/i = 1 to num_bloodsuckers) + var/mob/M = pick_n_take(candidates) + assigned += M.mind + M.mind.special_role = ROLE_BLOODSUCKER + M.mind.restricted_roles = restricted_roles + return TRUE /datum/dynamic_ruleset/roundstart/bloodsucker/execute() - //check_start_sunlight() The procs that make a vampire SHOULD enable sunlight by itself - for(var/datum/mind/M in assigned) - if(!mode.make_bloodsucker(M)) - V -= M.mind - return TRUE -*/ + mode.check_start_sunlight() + for(var/datum/mind/M in assigned) + if(mode.make_bloodsucker(M)) + mode.bloodsuckers += M + return TRUE diff --git a/code/game/objects/items/implants/implant_mindshield.dm b/code/game/objects/items/implants/implant_mindshield.dm index d8c5c03ace..52f9f3b9a4 100644 --- a/code/game/objects/items/implants/implant_mindshield.dm +++ b/code/game/objects/items/implants/implant_mindshield.dm @@ -26,7 +26,7 @@ if(target.mind.has_antag_datum(/datum/antagonist/brainwashed)) target.mind.remove_antag_datum(/datum/antagonist/brainwashed) - if(target.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) + if(target.mind.has_antag_datum(ANTAG_DATUM_VASSAL)) SSticker.mode.remove_vassal(target.mind) if(target.mind.has_antag_datum(/datum/antagonist/rev/head) || target.mind.unconvertable || target.mind.has_antag_datum(/datum/antagonist/gang/boss)) diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm index 0c26130d0f..821f18df1a 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm @@ -15,7 +15,7 @@ var/notice_healing = FALSE while(owner && !AmFinalDeath()) // owner.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) == src if(owner.current.stat == CONSCIOUS && !poweron_feed && !HAS_TRAIT(owner.current, TRAIT_DEATHCOMA)) // Deduct Blood - AddBloodVolume(-0.09) // -.15 (before tick went from 10 to 30, but we also charge more for faking life now) + AddBloodVolume(-0.1) // -.15 (before tick went from 10 to 30, but we also charge more for faking life now) if(HandleHealing(1)) // Heal if(notice_healing == FALSE && owner.current.blood_volume > 0) to_chat(owner, "The power of your blood begins knitting your wounds...") @@ -116,9 +116,9 @@ if(mult == 0) return TRUE // We have damage. Let's heal (one time) - C.adjustBruteLoss(-bruteheal * mult, forced=TRUE)// Heal BRUTE / BURN in random portions throughout the body. - C.adjustFireLoss(-fireheal * mult, forced=TRUE) - C.adjustToxLoss(-toxinheal * mult * 2, forced=TRUE) //Toxin healing because vamps arent immune + C.adjustBruteLoss(-bruteheal * mult, forced = TRUE)// Heal BRUTE / BURN in random portions throughout the body. + C.adjustFireLoss(-fireheal * mult, forced = TRUE) + C.adjustToxLoss(-toxinheal * mult * 2, forced = TRUE) //Toxin healing because vamps arent immune //C.heal_overall_damage(bruteheal * mult, fireheal * mult) // REMOVED: We need to FORCE this, because otherwise, vamps won't heal EVER. Swapped to above. AddBloodVolume((bruteheal * -0.5 + fireheal * -1) / mult * costMult) // Costs blood to heal return TRUE // Healed! Done for this tick. @@ -316,44 +316,34 @@ /datum/antagonist/bloodsucker/proc/handle_eat_human_food(var/food_nutrition) // Called from snacks.dm and drinks.dm set waitfor = FALSE - if (!owner.current || !iscarbon(owner.current)) return var/mob/living/carbon/C = owner.current - // Remove Nutrition, Give Bad Food C.nutrition -= food_nutrition foodInGut += food_nutrition - // Already ate some bad clams? Then we can back out, because we're already sick from it. if (foodInGut != food_nutrition) return // Haven't eaten, but I'm in a Human Disguise. else if (poweron_masquerade) to_chat(C, "Your stomach turns, but your \"human disguise\" keeps the food down...for now.") - - // Keep looping until we purge. If we have activated our Human Disguise, we ignore the food. But it'll come up eventually... var/sickphase = 0 while (foodInGut) - sleep(50) - C.adjust_disgust(10 * sickphase) - // Wait an interval... sleep(50 + 50 * sickphase) // At intervals of 100, 150, and 200. (10 seconds, 15 seconds, and 20 seconds) - // Died? Cancel - if (C.stat == DEAD) + if(C.stat == DEAD) return // Put up disguise? Then hold off the vomit. - if (poweron_masquerade) - if (sickphase > 0) + if(poweron_masquerade) + if(sickphase > 0) to_chat(C, "Your stomach settles temporarily. You regain your composure...for now.") sickphase = 0 continue - switch(sickphase) if (1) to_chat(C, "You feel unwell. You can taste ash on your tongue.") @@ -369,5 +359,4 @@ C.Stun(30) //C.Dizzy(50) foodInGut = 0 - sickphase ++ diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm b/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm index 4521842ff6..bb6e2a69f9 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm @@ -73,7 +73,7 @@ return //daylight_time -= TIME_BLOODSUCKER_BURN_INTERVAL // Issue Level Up! - if (!issued_XP && time_til_cycle <= 15) + if(!issued_XP && time_til_cycle <= 15) issued_XP = TRUE vamps_rank_up() @@ -86,9 +86,7 @@ /obj/effect/sunlight/proc/hud_tick() set waitfor = FALSE - while(!cancel_me) - // Update all Bloodsucker sunlight huds for(var/datum/mind/M in SSticker.mode.bloodsuckers) if(!istype(M) || !istype(M.current)) @@ -96,7 +94,6 @@ var/datum/antagonist/bloodsucker/bloodsuckerdatum = M.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) if(istype(bloodsuckerdatum)) bloodsuckerdatum.update_sunlight(max(0, time_til_cycle), amDay) // This pings all HUDs - sleep(10) time_til_cycle -- diff --git a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm index 10fc09157f..fd6f48a97d 100644 --- a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm +++ b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm @@ -42,8 +42,6 @@ // TO ADD: //var/static/list/defaultOrgans = list (/obj/item/organ/heart/vampheart,/obj/item/organ/heart/vampeyes) - - /datum/antagonist/bloodsucker/on_gain() SSticker.mode.bloodsuckers |= owner // Add if not already in here (and you might be, if you were picked at round start) SSticker.mode.check_start_sunlight()// Start Sunlight? (if first Vamp) @@ -163,16 +161,15 @@ // Name First fullname = (vampname ? vampname : owner.current.name) // Title - if (vamptitle) + if(vamptitle) fullname = vamptitle + " " + fullname // Rep - if (include_rep && vampreputation) + if(include_rep && vampreputation) fullname = fullname + " the " + vampreputation return fullname - /datum/antagonist/bloodsucker/proc/BuyPower(datum/action/bloodsucker/power)//(obj/effect/proc_holder/spell/power) powers += power power.Grant(owner.current)// owner.AddSpell(power) @@ -201,8 +198,7 @@ var/mob/living/carbon/human/H = owner.current var/datum/species/S = H.dna.species // Make Changes - S.brutemod *= 0.5 - S.burnmod += 0.1 // <-------------------- Start small, but burn mod increases based on rank! + S.brutemod *= 0.5 // <-------------------- Start small, but burn mod increases based on rank! S.coldmod = 0 S.stunmod *= 0.25 S.siemens_coeff *= 0.75 //base electrocution coefficient 1 @@ -318,7 +314,7 @@ datum/antagonist/bloodsucker/proc/SpendRank() if(ishuman(owner.current)) var/mob/living/carbon/human/H = owner.current var/datum/species/S = H.dna.species - S.burnmod += 0.025 // Slightly more burn damage + S.burnmod *= 0.025 // Slightly more burn damage S.stunmod *= 0.95 // Slightly less stun time. S.punchdamagelow += 0.5 S.punchdamagehigh += 0.5 // NOTE: This affects the hitting power of Brawn. @@ -337,7 +333,6 @@ datum/antagonist/bloodsucker/proc/SpendRank() SelectReputation(am_fledgling=FALSE, forced=TRUE) to_chat(owner.current, "You are now a rank [vamplevel] Bloodsucker. Your strength, resistence, health, feed rate, regen rate, and maximum blood have all increased!") to_chat(owner.current, "Your existing powers have all ranked up as well!") - to_chat(owner.current, "However, your weakness to fire and sunlight have also increased!") update_hud(TRUE) owner.current.playsound_local(null, 'sound/effects/pope_entry.ogg', 25, 1) // Play THIS sound for user only. The "null" is where turf would go if a location was needed. Null puts it right in their head. @@ -355,8 +350,6 @@ datum/antagonist/bloodsucker/proc/SpendRank() /datum/antagonist/bloodsucker/create_team(datum/team/team) return - - // Create Objectives /datum/antagonist/bloodsucker/proc/forge_bloodsucker_objectives() // Fledgling vampires can have different objectives. @@ -416,11 +409,6 @@ datum/antagonist/bloodsucker/proc/SpendRank() /datum/antagonist/bloodsucker/get_team() return clan - - - - - //Name shown on antag list /datum/antagonist/bloodsucker/antag_listing_name() return ..() + "([ReturnFullName(TRUE)])" @@ -434,11 +422,6 @@ datum/antagonist/bloodsucker/proc/SpendRank() - - - - - //Individual roundend report /datum/antagonist/bloodsucker/roundend_report() // Get the default Objectives @@ -700,22 +683,22 @@ datum/antagonist/bloodsucker/proc/SpendRank() /datum/antagonist/bloodsucker/proc/update_hud(updateRank=FALSE) // No Hud? Get out. - if (!owner.current.hud_used) + if(!owner.current.hud_used) return // Update Blood Counter if (owner.current.hud_used.blood_display) var/valuecolor = "#FF6666" - if (owner.current.blood_volume > BLOOD_VOLUME_SAFE) + if(owner.current.blood_volume > BLOOD_VOLUME_SAFE) valuecolor = "#FFDDDD" - else if (owner.current.blood_volume > BLOOD_VOLUME_BAD) + else if(owner.current.blood_volume > BLOOD_VOLUME_BAD) valuecolor = "#FFAAAA" owner.current.hud_used.blood_display.update_counter(owner.current.blood_volume, valuecolor) // Update Rank Counter - if (owner.current.hud_used.vamprank_display) + if(owner.current.hud_used.vamprank_display) var/valuecolor = vamplevel_unspent ? "#FFFF00" : "#FF0000" owner.current.hud_used.vamprank_display.update_counter(vamplevel, valuecolor) - if (updateRank) // Only change icon on special request. + if(updateRank) // Only change icon on special request. owner.current.hud_used.vamprank_display.icon_state = (vamplevel_unspent > 0) ? "rank_up" : "rank" diff --git a/code/modules/antagonists/bloodsucker/datum_vassal.dm b/code/modules/antagonists/bloodsucker/datum_vassal.dm index db1e5cfd4f..dcf34080d8 100644 --- a/code/modules/antagonists/bloodsucker/datum_vassal.dm +++ b/code/modules/antagonists/bloodsucker/datum_vassal.dm @@ -4,14 +4,13 @@ /datum/antagonist/bloodsucker/proc/attempt_turn_vassal(mob/living/carbon/C) + C.silent = 0 return SSticker.mode.make_vassal(C,owner) /datum/antagonist/bloodsucker/proc/FreeAllVassals() for (var/datum/antagonist/vassal/V in vassals) SSticker.mode.remove_vassal(V.owner) - - /datum/antagonist/vassal name = "Vassal"//WARNING: DO NOT SELECT" // "Vassal" roundend_category = "vassals" @@ -28,62 +27,64 @@ return ..() /datum/antagonist/vassal/on_gain() - SSticker.mode.vassals |= owner // Add if not already in here (and you might be, if you were picked at round start) - // Mindslave Add - if (master) + if(master) var/datum/antagonist/bloodsucker/B = master.owner.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) - if (B) + if(B) B.vassals |= src owner.enslave_mind_to_creator(master.owner.current) - // Master Pinpointer owner.current.apply_status_effect(/datum/status_effect/agent_pinpointer/vassal_edition) - // Powers var/datum/action/bloodsucker/vassal/recuperate/new_Recuperate = new () new_Recuperate.Grant(owner.current) powers += new_Recuperate - // Give Vassal Objective var/datum/objective/bloodsucker/vassal/vassal_objective = new vassal_objective.owner = owner vassal_objective.generate_objective() objectives += vassal_objective objectives_given += vassal_objective - + give_thrall_eyes() // Add Antag HUD update_vassal_icons_added(owner.current, "vassal") - . = ..() +/datum/antagonist/vassal/proc/give_thrall_eyes() + var/obj/item/organ/eyes/vassal/E = new + E.Insert(owner.current) + +/obj/item/organ/eyes/vassal/ + lighting_alpha = 180 // LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE <--- This is too low a value at 128. We need to SEE what the darkness is so we can hide in it. + see_in_dark = 12 + flash_protect = -1 //These eyes are weaker to flashes, but let you see in the dark + +/datum/antagonist/vassal/proc/remove_thrall_eyes() + // Eyes + var/obj/item/organ/eyes/E = new + E.Insert(owner.current) + /datum/antagonist/vassal/on_removal() - SSticker.mode.vassals -= owner // Add if not already in here (and you might be, if you were picked at round start) - // Mindslave Remove if (master && master.owner) master.vassals -= src if (owner.enslaved_to == master.owner.current) owner.enslaved_to = null - // Master Pinpointer owner.current.remove_status_effect(/datum/status_effect/agent_pinpointer/vassal_edition) - // Powers while(powers.len) var/datum/action/power = pick(powers) powers -= power power.Remove(owner.current) - // Remove Hunter Objectives for(var/O in objectives_given) objectives -= O qdel(O) objectives_given = list() - - + remove_thrall_eyes() // Clear Antag HUD update_vassal_icons_removed(owner.current) @@ -97,7 +98,6 @@ owner.current.playsound_local(null, 'sound/magic/mutate.ogg', 100, FALSE, pressure_affected = FALSE) //owner.store_memory("You became the mortal servant of [master.owner.current], a bloodsucking vampire!") antag_memory += "You became the mortal servant of [master.owner.current], a bloodsucking vampire!
    " - // And to your new Master... to_chat(master.owner, "[owner.current] has become addicted to your immortal blood. [owner.current.p_they(TRUE)] [owner.current.p_are()] now your undying servant!") master.owner.current.playsound_local(null, 'sound/magic/mutate.ogg', 100, FALSE, pressure_affected = FALSE) @@ -111,7 +111,6 @@ //if (master && master.owner) // to_chat(master.owner, "You feel the bond with your vassal [owner.current] has somehow been broken!") - /datum/status_effect/agent_pinpointer/vassal_edition id = "agent_pinpointer" alert_type = /obj/screen/alert/status_effect/agent_pinpointer/vassal_edition @@ -139,7 +138,7 @@ var/datum/atom_hud/antag/bloodsucker/hud = GLOB.huds[ANTAG_HUD_BLOODSUCKER] hud.join_hud(vassal) set_antag_hud(vassal, icontype) // Located in icons/mob/hud.dmi - owner.current.hud_list[ANTAG_HUD].icon = image('icons/mob/hud.dmi', owner.current, "bloodsucker") + owner.current.hud_list[ANTAG_HUD].icon = image('icons/mob/hud.dmi', owner.current, "bloodsucker") /datum/antagonist/vassal/proc/update_vassal_icons_removed(mob/living/vassal) var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_BLOODSUCKER] diff --git a/code/modules/antagonists/bloodsucker/items/bloodsucker_organs.dm b/code/modules/antagonists/bloodsucker/items/bloodsucker_organs.dm index 3ef6953678..2664de0df5 100644 --- a/code/modules/antagonists/bloodsucker/items/bloodsucker_organs.dm +++ b/code/modules/antagonists/bloodsucker/items/bloodsucker_organs.dm @@ -3,44 +3,34 @@ /datum/antagonist/bloodsucker/proc/CheckVampOrgans() // Do I have any parts that need replacing? var/obj/item/organ/O - // Heart O = owner.current.getorganslot(ORGAN_SLOT_HEART) - if (!istype(O, /obj/item/organ/heart/vampheart)) + if(!istype(O, /obj/item/organ/heart/vampheart)) qdel(O) var/obj/item/organ/heart/vampheart/H = new H.Insert(owner.current) H.Stop() // Now...stop beating! - // Eyes O = owner.current.getorganslot(ORGAN_SLOT_EYES) - if (!istype(O, /obj/item/organ/eyes/vampeyes)) + if(!istype(O, /obj/item/organ/eyes/vassal/bloodsucker)) qdel(O) - var/obj/item/organ/eyes/vampeyes/E = new + var/obj/item/organ/eyes/vassal/bloodsucker/E = new E.Insert(owner.current) - /datum/antagonist/bloodsucker/proc/RemoveVampOrgans() - // Heart var/obj/item/organ/heart/H = new H.Insert(owner.current) // Eyes var/obj/item/organ/eyes/E = new E.Insert(owner.current) - - - // HEART: OVERWRITE // /obj/item/organ/heart/proc/HeartStrengthMessage() if (beating) return "a healthy" return "an unstable" - - // HEART // - /obj/item/organ/heart/vampheart beating = 0 var/fakingit = 0 @@ -64,16 +54,11 @@ if (fakingit) return "a healthy" return "no" // Bloodsuckers don't have a heartbeat at all when stopped (default is "an unstable") - - // EYES // -/obj/item/organ/eyes/vampeyes - lighting_alpha = 180 // LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE <--- This is too low a value at 128. We need to SEE what the darkness is so we can hide in it. - see_in_dark = 12 - flash_protect = -1 - //sight_flags = SEE_TURFS // Taken from augmented_eyesight.dm - +/obj/item/organ/eyes/vassal/bloodsucker + flash_protect = 2 //Eye healing isnt working properly + sight_flags = SEE_MOBS // Taken from augmented_eyesight.dm /* // LIVER // diff --git a/code/modules/antagonists/bloodsucker/items/bloodsucker_stake.dm b/code/modules/antagonists/bloodsucker/items/bloodsucker_stake.dm index 822175aa25..9db4cae1ff 100644 --- a/code/modules/antagonists/bloodsucker/items/bloodsucker_stake.dm +++ b/code/modules/antagonists/bloodsucker/items/bloodsucker_stake.dm @@ -113,7 +113,7 @@ // Can this target be staked? If someone stands up before this is complete, it fails. Best used on someone stationary. /mob/living/carbon/proc/can_be_staked() //return resting || IsKnockdown() || IsUnconscious() || (stat && (stat != SOFT_CRIT || pulledby)) || (has_trait(TRAIT_FAKEDEATH)) || resting || IsStun() || IsFrozen() || (pulledby && pulledby.grab_state >= GRAB_NECK) - return (src.resting) + return (src.resting || src.lying) // ABOVE: Taken from update_mobility() in living.dm /obj/item/stake/hardened diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm index 36e2d634c6..946c472f11 100644 --- a/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm +++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm @@ -19,17 +19,15 @@ /datum/antagonist/bloodsucker/proc/ClaimCoffin(obj/structure/closet/crate/claimed) // NOTE: This can be any "closet" that you are resting AND inside of. // ALREADY CLAIMED - if (claimed.resident) - if (claimed.resident == owner.current) + if(claimed.resident) + if(claimed.resident == owner.current) to_chat(owner, "This is your [src].") else to_chat(owner, "This [src] has already been claimed by another.") return FALSE - // Bloodsucker Learns new Recipes! owner.teach_crafting_recipe(/datum/crafting_recipe/bloodsucker/vassalrack) owner.teach_crafting_recipe(/datum/crafting_recipe/bloodsucker/candelabrum) - // This is my Lair coffin = claimed lair = get_area(claimed) @@ -37,12 +35,9 @@ to_chat(owner, "You have claimed the [claimed] as your place of immortal rest! Your lair is now [lair].") to_chat(owner, "You have learned new construction recipes to improve your lair.") to_chat(owner, "Bloodsucker Tip: Find new lair recipes in the misc tab of the Crafting Menu at the bottom of the screen, including the Persuasion Rack for converting crew into Vassals.

    ") - RunLair() // Start return TRUE - - // crate.dm /obj/structure/closet/crate var/mob/living/resident // This lets bloodsuckers claim any "closet" as a Coffin, so long as they could get into it and close it. This locks it in place, too. @@ -101,13 +96,12 @@ /obj/structure/closet/crate/proc/ClaimCoffin(mob/living/claimant) // NOTE: This can be any "closet" that you are resting AND inside of. // Bloodsucker Claim var/datum/antagonist/bloodsucker/bloodsuckerdatum = claimant.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) - if (bloodsuckerdatum) + if(bloodsuckerdatum) // Vamp Successfuly Claims Me? - if (bloodsuckerdatum.ClaimCoffin(src)) + if(bloodsuckerdatum.ClaimCoffin(src)) resident = claimant anchored = 1 // No moving this - /obj/structure/closet/crate/coffin/Destroy() UnclaimCoffin() return ..() @@ -139,30 +133,32 @@ return ..() /obj/structure/closet/crate/coffin/close(mob/living/user) + var/turf/Turf = get_turf(src) + var/area/A = get_area(src) if (!..()) return FALSE // Only the User can put themself into Torpor (if you're already in it, you'll start to heal) - if ((user in src)) + if((user in src)) // Bloodsucker Only var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) - if (bloodsuckerdatum) + if(bloodsuckerdatum) LockMe(user) + Turf = get_turf(user) //we may have moved. adjust as needed... + A = get_area(src) // Claim? - if (!bloodsuckerdatum.coffin && !resident) + if(!bloodsuckerdatum.coffin && !resident && (is_station_level(Turf.z) || !A.map_name == "Space")) switch(alert(user,"Do you wish to claim this as your coffin? [get_area(src)] will be your lair.","Claim Lair","Yes", "No")) if("Yes") ClaimCoffin(user) - // Stake? No Heal! - if (user.AmStaked()) + if (user.AmStaked()) // Stake? No Heal! to_chat(bloodsuckerdatum.owner.current, "You are staked! Remove the offending weapon from your heart before sleeping.") return // Heal - if (bloodsuckerdatum.HandleHealing(0)) // Healing Mult 0 <--- We only want to check if healing is valid! + if(bloodsuckerdatum.HandleHealing(0)) // Healing Mult 0 <--- We only want to check if healing is valid! to_chat(bloodsuckerdatum.owner.current, "You enter the horrible slumber of deathless Torpor. You will heal until you are renewed.") bloodsuckerdatum.Torpor_Begin() // Level Up? bloodsuckerdatum.SpendRank() // Auto-Fails if not appropriate - return TRUE /obj/structure/closet/crate/coffin/attackby(obj/item/W, mob/user, params) @@ -209,14 +205,6 @@ broken = FALSE locked = TRUE - - - - - - - - // Look up recipes.dm OR pneumaticCannon.dm /datum/crafting_recipe/bloodsucker/blackcoffin name = "Black Coffin" diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm index 5bfdb68931..8339787a07 100644 --- a/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm +++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm @@ -400,11 +400,8 @@ // FAILSAFE: Still on the rack? if (!(locate(target) in buckled_mobs)) return - // NOTE: You can say YES after torture. It'll apply to next time. - disloyalty_confirm = TRUE - if (HAS_TRAIT(target, TRAIT_MINDSHIELD)) to_chat(target, "You give in to the will of your torturer. If they are successful, you will no longer be loyal to the station!") @@ -419,7 +416,6 @@ /obj/structure/bloodsucker/vassalrack/proc/remove_loyalties(mob/living/target) - // Find Mind Implant & Destroy if (HAS_TRAIT(target, TRAIT_MINDSHIELD)) for(var/obj/item/implant/I in target.implants) diff --git a/code/modules/antagonists/bloodsucker/powers/bs_cloak.dm b/code/modules/antagonists/bloodsucker/powers/bs_cloak.dm index 7a00f97382..cea942e26d 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_cloak.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_cloak.dm @@ -24,31 +24,33 @@ return TRUE /datum/action/bloodsucker/cloak/ActivatePower() - var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) var/mob/living/user = owner - while (bloodsuckerdatum && ContinueActive(user)) - // Fade from sight + var/was_running = (user.m_intent == MOVE_INTENT_RUN) + if(was_running) + user.toggle_move_intent() + ADD_TRAIT(user, TRAIT_NORUNNING, "cloak of darkness") + while(bloodsuckerdatum && ContinueActive(user) || user.m_intent == MOVE_INTENT_RUN) + // Pay Blood Toll (if awake) owner.alpha = max(0, owner.alpha - min(75, 20 + 15 * level_current)) bloodsuckerdatum.AddBloodVolume(-0.2) - ADD_TRAIT(user, TRAIT_NORUNNING, "cloak of darkness") - sleep(5) + sleep(5) // Check every few ticks that we haven't disabled this power + // Return to Running (if you were before) + if(was_running && user.m_intent != MOVE_INTENT_RUN) + user.toggle_move_intent() /datum/action/bloodsucker/cloak/ContinueActive(mob/living/user, mob/living/target) if (!..()) return FALSE - // Must be CONSCIOUS - if(user.stat == !CONSCIOUS) + if(user.stat == !CONSCIOUS) // Must be CONSCIOUS to_chat(owner, "Your cloak failed due to you falling unconcious! ") return FALSE - // Must be DARK - var/turf/T = owner.loc + var/turf/T = owner.loc // Must be DARK if(istype(T) && T.get_lumcount() > light_min) to_chat(owner, "Your cloak failed due to there being too much light!") return FALSE return TRUE - /datum/action/bloodsucker/cloak/DeactivatePower(mob/living/user = owner, mob/living/target) ..() REMOVE_TRAIT(user, TRAIT_NORUNNING, "cloak of darkness") diff --git a/code/modules/antagonists/bloodsucker/powers/bs_fortitude.dm b/code/modules/antagonists/bloodsucker/powers/bs_fortitude.dm index 826155a445..3305504c15 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_fortitude.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_fortitude.dm @@ -30,7 +30,7 @@ H.physiology.burn_mod *= this_resist//0.5 // Stop Running (Taken from /datum/quirk/nyctophobia in negative.dm) var/was_running = (user.m_intent == MOVE_INTENT_RUN) - if (was_running) + if(was_running) user.toggle_move_intent() while(bloodsuckerdatum && ContinueActive(user) || user.m_intent == MOVE_INTENT_RUN) // Pay Blood Toll (if awake) @@ -38,7 +38,7 @@ bloodsuckerdatum.AddBloodVolume(-0.5) // Used to be 0.3 blood per 2 seconds, but we're making it more expensive to keep on. sleep(20) // Check every few ticks that we haven't disabled this power // Return to Running (if you were before) - if (was_running && user.m_intent != MOVE_INTENT_RUN) + if(was_running && user.m_intent != MOVE_INTENT_RUN) user.toggle_move_intent() /datum/action/bloodsucker/fortitude/DeactivatePower(mob/living/user = owner, mob/living/target) diff --git a/code/modules/antagonists/bloodsucker/powers/bs_gohome.dm b/code/modules/antagonists/bloodsucker/powers/bs_gohome.dm index 2f1526284a..0da9ab5ba3 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_gohome.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_gohome.dm @@ -94,7 +94,7 @@ puff.set_up(3, 0, get_turf(owner)) puff.start() // TELEPORT: Move to Coffin & Close it! - do_teleport(owner, bloodsuckerdatum.coffin, no_effects = TRUE, forced = TRUE) // in teleport.dm? + do_teleport(owner, bloodsuckerdatum.coffin, no_effects = TRUE, forced = TRUE, channel = TELEPORT_CHANNEL_QUANTUM) // in teleport.dm? // SLEEP user.resting = TRUE //user.Unconscious(30,0) diff --git a/code/modules/antagonists/bloodsucker/powers/bs_haste.dm b/code/modules/antagonists/bloodsucker/powers/bs_haste.dm index 5755931d64..ee1dd3007c 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_haste.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_haste.dm @@ -56,9 +56,9 @@ user.canmove = FALSE //Dont move while doing the thing, or itll break safety -- // Did I get knocked down? - if (owner && owner.incapacitated(ignore_restraints=TRUE,ignore_grab=TRUE))// owner.incapacitated()) + if(owner && owner.incapacitated(ignore_restraints=TRUE, ignore_grab=TRUE))// owner.incapacitated()) // We're gonna cancel. But am I on the ground? Spin me! - if (user.resting) + if(user.resting) var/send_dir = get_dir(owner, T) new /datum/forced_movement(owner, get_ranged_target_turf(owner, send_dir, 1), 1, FALSE) owner.spin(10) @@ -66,7 +66,7 @@ // Spin/Stun people we pass. //var/mob/living/newtarget = locate(/mob/living) in oview(1, owner) var/list/mob/living/foundtargets = list() - for (var/mob/living/newtarget in oview(1, owner)) + for(var/mob/living/newtarget in oview(1, owner)) if (newtarget && newtarget != target && !(newtarget in foundtargets))//!newtarget.IsKnockdown()) if (rand(0, 5) < level_current) playsound(get_turf(newtarget), "sound/weapons/punch[rand(1,4)].ogg", 15, 1, -1) diff --git a/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm b/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm index 4d4520c8b3..7d825d6f44 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm @@ -11,7 +11,7 @@ button_icon_state = "power_mez" bloodcost = 30 cooldown = 200 - target_range = 3 + target_range = 2 power_activates_immediately = FALSE message_Trigger = "Whom will you subvert to your will?" must_be_capacitated = TRUE @@ -89,13 +89,13 @@ if(istype(target)) target.Stun(40) //Utterly useless without this, its okay since there are so many checks to go through - target.silent += 45 //Shhhh little lamb + target.silent = 45 //Shhhh little lamb target.apply_status_effect(STATUS_EFFECT_MESMERIZE, 45) //So you cant rotate with combat mode, plus fancy status alert if(do_mob(user, target, 40, 0, TRUE, extra_checks=CALLBACK(src, .proc/ContinueActive, user, target))) PowerActivatedSuccessfully() // PAY COST! BEGIN COOLDOWN! var/power_time = 90 + level_current * 15 - target.silent += power_time + 50 + target.silent = power_time + 50 target.apply_status_effect(STATUS_EFFECT_MESMERIZE, 100 + level_current * 15) to_chat(user, "[target] is fixed in place by your hypnotic gaze.") target.Stun(power_time) diff --git a/code/modules/antagonists/bloodsucker/powers/bs_trespass.dm b/code/modules/antagonists/bloodsucker/powers/bs_trespass.dm index 9b266a4cfe..c650a6af15 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_trespass.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_trespass.dm @@ -101,7 +101,7 @@ // Move & Freeze if (isturf(target_turf)) - do_teleport(owner, target_turf, no_effects=TRUE, forced = TRUE) // in teleport.dm? + do_teleport(owner, target_turf, no_effects=TRUE, channel = TELEPORT_CHANNEL_QUANTUM) // in teleport.dm? user.next_move = world.time + mist_delay / 2 user.Stun(mist_delay / 2, ignore_canstun = TRUE) diff --git a/code/modules/antagonists/bloodsucker/powers/v_recuperate.dm b/code/modules/antagonists/bloodsucker/powers/v_recuperate.dm index 0595b83eda..6b8795ea02 100644 --- a/code/modules/antagonists/bloodsucker/powers/v_recuperate.dm +++ b/code/modules/antagonists/bloodsucker/powers/v_recuperate.dm @@ -5,7 +5,6 @@ amToggle = TRUE bloodcost = 5 cooldown = 100 - // Deal STAMINA damage over time, trickle down blood, and heal wounds. /datum/action/bloodsucker/vassal/recuperate/CheckCanUse(display_error) . = ..() @@ -13,39 +12,27 @@ return if (owner.stat >= DEAD) return FALSE - var/mob/living/carbon/C = owner - if (C.getBruteLoss() <= 0) - if (display_error) - to_chat(owner, "You have no brute damage to recover from.") - return FALSE return TRUE /datum/action/bloodsucker/vassal/recuperate/ActivatePower() to_chat(owner, "Your muscles clench and your skin crawls as your master's immortal blood knits your wounds and gives you stamina.") - var/mob/living/carbon/C = owner var/mob/living/carbon/human/H - if (ishuman(owner)) + if(ishuman(owner)) H = owner - - while (ContinueActive(owner)) - var/bruteheal = min(C.getBruteLoss(), 1.5) - C.heal_overall_damage(bruteheal) - C.blood_volume -= 0.6 - if (C.getStaminaLoss() < 60) - C.adjustStaminaLoss(10, forced = TRUE) + while(ContinueActive(owner)) + C.adjustBruteLoss(-1.5) + C.adjustFireLoss(-0.5) + C.adjustToxLoss(-2, forced = TRUE) + C.blood_volume -= 0.2 + C.adjustStaminaLoss(-15) // Stop Bleeding - if (istype(H) && H.bleed_rate > 0 && rand(20) == 0) + if(istype(H) && H.bleed_rate > 0 && rand(20) == 0) H.bleed_rate -- - C.Jitter(5) - - sleep(10) - // DONE! //DeactivatePower(owner) - /datum/action/bloodsucker/vassal/recuperate/ContinueActive(mob/living/user, mob/living/target) - return ..() && user.stat <= DEAD && user.blood_volume > 0 && user.getBruteLoss() > 0 + return ..() && user.stat <= DEAD && user.blood_volume > 500 From e31455667ebf3331255c1143e1e7215bc737a287 Mon Sep 17 00:00:00 2001 From: KeRSe Date: Tue, 10 Dec 2019 00:05:59 -0500 Subject: [PATCH 30/64] New delta alert sound --- sound/misc/deltakalaxon.ogg | Bin 66206 -> 593875 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/sound/misc/deltakalaxon.ogg b/sound/misc/deltakalaxon.ogg index cc489526ddf4ef9fe688ab74a67eaed0ddb4df87..7a9522c1ff65a7eef2811307c6f93a9191f0a062 100644 GIT binary patch literal 593875 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

    7BUrCUgU`aaq{_n&X`@%Oym9By;V}_Q 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%0AD*?Zf3C4`Z* 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

    vt)~>21)|Dm0N8R4_Clx?Nl*1j# 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
    " switch(round(threat_level)) From 1de118d40e8a25a36103d793cd1900db8e095b1d Mon Sep 17 00:00:00 2001 From: Putnam Date: Tue, 10 Dec 2019 13:55:58 -0800 Subject: [PATCH 32/64] Dynamic no longer double dips on refunds for ghost antags --- code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm | 5 ----- 1 file changed, 5 deletions(-) diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm index 8cda402ebf..855d0c9109 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm @@ -127,11 +127,6 @@ /datum/dynamic_ruleset/midround/from_ghosts/proc/review_applications() for (var/i = 1, i <= required_candidates, i++) if(candidates.len <= 0) - if(i == 1) - // We have found no candidates so far and we are out of applicants. - mode.refund_threat(cost) - mode.log_threat("Rule [name] refunded [cost] (all applications invalid)",verbose=TRUE) - mode.executed_rules -= src break var/mob/applicant = pick(candidates) candidates -= applicant From 7b10c57b5ca995a387442cbf1fd8e88133857add Mon Sep 17 00:00:00 2001 From: Putnam Date: Tue, 10 Dec 2019 14:01:33 -0800 Subject: [PATCH 33/64] Actually gotta rework this properly --- .../gamemodes/dynamic/dynamic_rulesets_midround.dm | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm index 855d0c9109..06efc113da 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm @@ -94,11 +94,8 @@ var/list/possible_candidates = list() possible_candidates.Add(dead_players) possible_candidates.Add(list_observers) - send_applications(possible_candidates) - if(assigned.len > 0) - return TRUE - else - return FALSE + var/application_successful = send_applications(possible_candidates) + return assigned.len > 0 && application_successful /// This sends a poll to ghosts if they want to be a ghost spawn from a ruleset. /datum/dynamic_ruleset/midround/from_ghosts/proc/send_applications(list/possible_volunteers = list()) @@ -113,14 +110,12 @@ if(!candidates || candidates.len <= required_candidates) message_admins("The ruleset [name] did not receive enough applications.") log_game("DYNAMIC: The ruleset [name] did not receive enough applications.") - mode.refund_threat(cost) - mode.log_threat("Rule [name] refunded [cost] (not receive enough applications)",verbose=TRUE) - mode.executed_rules -= src - return + return FALSE message_admins("[candidates.len] players volunteered for the ruleset [name].") log_game("DYNAMIC: [candidates.len] players volunteered for [name].") review_applications() + return TRUE /// Here is where you can check if your ghost applicants are valid for the ruleset. /// Called by send_applications(). From f2fc50119d33b36d1daccf33d2fc103f44c95ab9 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 10 Dec 2019 17:52:34 -0600 Subject: [PATCH 34/64] Automatic changelog generation for PR #9983 [ci skip] --- html/changelogs/AutoChangeLog-pr-9983.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-9983.yml diff --git a/html/changelogs/AutoChangeLog-pr-9983.yml b/html/changelogs/AutoChangeLog-pr-9983.yml new file mode 100644 index 0000000000..b8cd4f0f5b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9983.yml @@ -0,0 +1,6 @@ +author: "Ghommie, Skogol" +delete-after: True +changes: + - refactor: "refactored altclick interaction to allow alt-click interactable objects to parent call without forcing the turf contents stat menu open." + - tweak: "Alt clicking will no longer show turf contents for items inside bags etc." + - tweak: "Alt clicking the source of your turf contents stat menu will now close said menu." From bdd72fc797a990236e77b11393b8374c7d19fcd2 Mon Sep 17 00:00:00 2001 From: Linzolle Date: Tue, 10 Dec 2019 17:54:52 -0600 Subject: [PATCH 35/64] make sound work? --- code/game/objects/items/melee/misc.dm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index d7c2f7f4f6..d8abff70a6 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -79,17 +79,17 @@ final_block_chance = 0 //Don't bring a sword to a gunfight return ..() -/obj/item/melee/sabre/on_exit_storage(obj/item/storage/S) - ..() - var/obj/item/storage/belt/sabre/B = S +/obj/item/melee/sabre/on_exit_storage(datum/component/storage/S) + var/obj/item/storage/belt/sabre/B = S.parent if(istype(B)) playsound(B, 'sound/items/unsheath.ogg', 25, 1) - -/obj/item/melee/sabre/on_enter_storage(obj/item/storage/S) ..() - var/obj/item/storage/belt/sabre/B = S + +/obj/item/melee/sabre/on_enter_storage(datum/component/storage/S) + var/obj/item/storage/belt/sabre/B = S.parent if(istype(B)) playsound(B, 'sound/items/sheath.ogg', 25, 1) + ..() /obj/item/melee/sabre/get_belt_overlay() return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "sabre") From a7c8fb6470b6e14e747ed13ecc9ba05cfadcc766 Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Wed, 11 Dec 2019 12:43:07 -0500 Subject: [PATCH 36/64] corrects/adds a new dog fashion to telegram hat --- code/modules/clothing/head/misc.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index dabfaf06cd..5e4fd33f84 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -370,13 +370,13 @@ /obj/item/clothing/head/hotel name = "Telegram cap" desc = "A bright red cap warn by hotel staff. Or people who want to be a singing telegram" - icon_state = "telegramhat" - item_color = "telegramhat" - dog_fashion = null + icon_state = "telegram" + item_color = "telegram" + dog_fashion = /datum/dog_fashion/head/telegram /obj/item/clothing/head/colour name = "Singer cap" desc = "A light white hat that has bands of color. Just makes you want to sing and dance!" icon_state = "colour" item_color = "colour" - dog_fashion = /datum/dog_fashion/head/colour \ No newline at end of file + dog_fashion = /datum/dog_fashion/head/colour From 8b9583a050e38b690f5b20da1a2b4648435f95dc Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 11 Dec 2019 15:38:21 -0600 Subject: [PATCH 37/64] Automatic changelog generation for PR #10143 [ci skip] --- html/changelogs/AutoChangeLog-pr-10143.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10143.yml diff --git a/html/changelogs/AutoChangeLog-pr-10143.yml b/html/changelogs/AutoChangeLog-pr-10143.yml new file mode 100644 index 0000000000..45dfe225c4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10143.yml @@ -0,0 +1,4 @@ +author: "Putnam3145" +delete-after: True +changes: + - bugfix: "Dynamic from-ghost antags no longer double dip on threat refunds when the mode fails due to not enough applications." From fe92a22b10c9af777a90f0a1a7ca75662a6e880b Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 11 Dec 2019 15:38:52 -0600 Subject: [PATCH 38/64] Automatic changelog generation for PR #10140 [ci skip] --- html/changelogs/AutoChangeLog-pr-10140.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10140.yml diff --git a/html/changelogs/AutoChangeLog-pr-10140.yml b/html/changelogs/AutoChangeLog-pr-10140.yml new file mode 100644 index 0000000000..d5e33fa02d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10140.yml @@ -0,0 +1,4 @@ +author: "Putnam3145" +delete-after: True +changes: + - bugfix: "Dynamic has a (totally unused for any relevant purpose) roundstart report now." From ded283fa5587a49b00b1fda960bfd85a906ebc10 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Wed, 11 Dec 2019 14:41:58 -0700 Subject: [PATCH 39/64] Update conveyor2.dm --- code/modules/recycling/conveyor2.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index 5e075177e6..7701e58616 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -135,8 +135,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) addtimer(CALLBACK(src, .proc/convey, affecting), 1) /obj/machinery/conveyor/proc/convey(list/affecting) - var/turf/T = get_turf(src) - T = get_step(T, movedir) + var/turf/T = get_step(src, movedir) if(length(T.contents) > 150) return for(var/atom/movable/A in affecting) From 14e7f111aa92c58930f431244d3ab24cc443246a Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 11 Dec 2019 20:14:00 -0600 Subject: [PATCH 40/64] Automatic changelog generation for PR #10085 [ci skip] --- html/changelogs/AutoChangeLog-pr-10085.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10085.yml diff --git a/html/changelogs/AutoChangeLog-pr-10085.yml b/html/changelogs/AutoChangeLog-pr-10085.yml new file mode 100644 index 0000000000..a82f052fed --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10085.yml @@ -0,0 +1,6 @@ +author: "Ghommie" +delete-after: True +changes: + - bugfix: "Fixes reviver implant having been a crapshot ever since soft-crit was introduced years ago." + - tweak: "Added a \"convalescence\" time (about 15 seconds) after the user is out of unconsciousbess/crit to ensure they are properly stabilized." + - tweak: "Added a 15 minutes hardcap for accumulated revive cooldown (equivalent to 150 points of brute or burn healed) above which the implant starts cooling down regardless of user's conditions." From 3545f10137c41ee8a37734738cbd6772eb3dd4d8 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Thu, 12 Dec 2019 17:04:14 +0100 Subject: [PATCH 41/64] Fixing character setup preview icons. --- code/datums/dna.dm | 1 - code/modules/client/preferences.dm | 15 ++------------- .../mob/dead/new_player/preferences_setup.dm | 5 ++--- code/modules/mob/living/carbon/human/dummy.dm | 1 + 4 files changed, 5 insertions(+), 17 deletions(-) diff --git a/code/datums/dna.dm b/code/datums/dna.dm index 8a3fd82cb9..ccc5d97cf8 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -254,7 +254,6 @@ if(icon_update) update_body() update_hair() - update_body_parts() update_mutations_overlay()// no lizard with human hulk overlay please. diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index e91d379ddd..c476e5a310 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -241,7 +241,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) /datum/preferences/proc/ShowChoices(mob/user) if(!user || !user.client) return - update_preview_icon() + update_preview_icon(current_tab != 2) var/list/dat = list("" - update_preview_icon() dat += "
    " dat += "

    Flavor Text

    " dat += "Set Examine Text
    " @@ -1565,10 +1564,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/temp_hsv = RGBtoHSV(new_mutantcolor) if(new_mutantcolor == "#000000") features["mcolor"] = pref_species.default_color - update_preview_icon() else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) // mutantcolors must be bright, but only if they affect the skin features["mcolor"] = sanitize_hexcolor(new_mutantcolor) - update_preview_icon() else to_chat(user, "Invalid color. Your color is not bright enough.") @@ -1578,10 +1575,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/temp_hsv = RGBtoHSV(new_mutantcolor) if(new_mutantcolor == "#000000") features["mcolor2"] = pref_species.default_color - update_preview_icon() else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) // mutantcolors must be bright, but only if they affect the skin features["mcolor2"] = sanitize_hexcolor(new_mutantcolor) - update_preview_icon() else to_chat(user, "Invalid color. Your color is not bright enough.") @@ -1591,10 +1586,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/temp_hsv = RGBtoHSV(new_mutantcolor) if(new_mutantcolor == "#000000") features["mcolor3"] = pref_species.default_color - update_preview_icon() else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) // mutantcolors must be bright, but only if they affect the skin features["mcolor3"] = sanitize_hexcolor(new_mutantcolor) - update_preview_icon() else to_chat(user, "Invalid color. Your color is not bright enough.") @@ -1736,14 +1729,12 @@ GLOBAL_LIST_EMPTY(preferences_datums) features["body_markings"] = new_body_markings if(new_body_markings != "None") features["mam_body_markings"] = "None" - update_preview_icon() if("legs") var/new_legs new_legs = input(user, "Choose your character's legs:", "Character Preference") as null|anything in GLOB.legs_list if(new_legs) features["legs"] = new_legs - update_preview_icon() if("insect_wings") var/new_insect_wings @@ -1829,7 +1820,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) else if(new_mam_body_markings == "None") features["mam_body_markings"] = "Plain" features["body_markings"] = "None" - update_preview_icon() //Xeno Bodyparts if("xenohead")//Head or caste type @@ -2307,8 +2297,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) pref_species = new /datum/species/human save_character() - character.set_species(chosen_species, icon_update = FALSE, pref_load = TRUE) character.dna.features = features.Copy() + character.set_species(chosen_species, icon_update = FALSE, pref_load = TRUE) character.dna.real_name = character.real_name character.dna.nameless = character.nameless character.dna.custom_species = character.custom_species @@ -2337,7 +2327,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(icon_updates) character.update_body() character.update_hair() - character.update_body_parts() /datum/preferences/proc/get_default_name(name_id) switch(name_id) diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm index d54b8256a9..7aae26526e 100644 --- a/code/modules/mob/dead/new_player/preferences_setup.dm +++ b/code/modules/mob/dead/new_player/preferences_setup.dm @@ -25,7 +25,7 @@ features = random_features() age = rand(AGE_MIN,AGE_MAX) -/datum/preferences/proc/update_preview_icon() +/datum/preferences/proc/update_preview_icon(equip_job = TRUE) // Determine what job is marked as 'High' priority, and dress them up as such. var/datum/job/previewJob var/highest_pref = 0 @@ -45,12 +45,11 @@ // Set up the dummy for its photoshoot var/mob/living/carbon/human/dummy/mannequin = generate_or_wait_for_human_dummy(DUMMY_HUMAN_SLOT_PREFERENCES) - mannequin.cut_overlays() // Apply the Dummy's preview background first so we properly layer everything else on top of it. mannequin.add_overlay(mutable_appearance('modular_citadel/icons/ui/backgrounds.dmi', bgstate, layer = SPACE_LAYER)) copy_to(mannequin) - if(previewJob) + if(previewJob && equip_job) mannequin.job = previewJob.title previewJob.equip(mannequin, TRUE, preference_source = parent) diff --git a/code/modules/mob/living/carbon/human/dummy.dm b/code/modules/mob/living/carbon/human/dummy.dm index 6da188dd2d..74593a20a0 100644 --- a/code/modules/mob/living/carbon/human/dummy.dm +++ b/code/modules/mob/living/carbon/human/dummy.dm @@ -17,6 +17,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy) /mob/living/carbon/human/dummy/proc/wipe_state() delete_equipment() + icon_render_key = null cut_overlays(TRUE) //Inefficient pooling/caching way. From ed822a2434558cf31c2f3c8b9e3d85f6fc0f2da1 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Thu, 12 Dec 2019 11:30:37 -0600 Subject: [PATCH 42/64] Automatic changelog generation for PR #10156 [ci skip] --- html/changelogs/AutoChangeLog-pr-10156.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10156.yml diff --git a/html/changelogs/AutoChangeLog-pr-10156.yml b/html/changelogs/AutoChangeLog-pr-10156.yml new file mode 100644 index 0000000000..ec08642b3f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10156.yml @@ -0,0 +1,5 @@ +author: "Ghommie" +delete-after: True +changes: + - bugfix: "Fixed character setup preview bodyparts not displaying correctly most of times." + - bugfix: "Fixed character appearance preview displaying the mannequin in job attire instead of undergarments." From d4ae3ed300c0690090856258db30d6a54d939cd1 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Thu, 12 Dec 2019 14:28:52 -0600 Subject: [PATCH 43/64] Automatic changelog generation for PR #10121 [ci skip] --- html/changelogs/AutoChangeLog-pr-10121.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10121.yml diff --git a/html/changelogs/AutoChangeLog-pr-10121.yml b/html/changelogs/AutoChangeLog-pr-10121.yml new file mode 100644 index 0000000000..38a91fcc01 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10121.yml @@ -0,0 +1,4 @@ +author: "kappa-sama" +delete-after: True +changes: + - rscadd: "plasmafist to wizard" From 459db553722dce0b323cb3927afd433f128382de Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Thu, 12 Dec 2019 15:20:36 -0600 Subject: [PATCH 44/64] Automatic changelog generation for PR #9894 [ci skip] --- html/changelogs/AutoChangeLog-pr-9894.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-9894.yml diff --git a/html/changelogs/AutoChangeLog-pr-9894.yml b/html/changelogs/AutoChangeLog-pr-9894.yml new file mode 100644 index 0000000000..6e4b5c09d0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9894.yml @@ -0,0 +1,5 @@ +author: "Putnam3145" +delete-after: True +changes: + - balance: "Bomb armor now acts like other armor types." + - balance: "Devastation-level explosions on armorless people no longer destroys everything in their bags." From 8bc5580a01186684d14a154e45284614da15bb7c Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Thu, 12 Dec 2019 16:18:58 -0600 Subject: [PATCH 45/64] Automatic changelog generation for PR #10137 [ci skip] --- html/changelogs/AutoChangeLog-pr-10137.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10137.yml diff --git a/html/changelogs/AutoChangeLog-pr-10137.yml b/html/changelogs/AutoChangeLog-pr-10137.yml new file mode 100644 index 0000000000..63678d4425 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10137.yml @@ -0,0 +1,4 @@ +author: "KeRSedChaplain" +delete-after: True +changes: + - soundadd: "Extends the file \"deltakalaxon.ogg\" to a 38 second .ogg." From 911685ff0a0628d94a10876b563586b4d05e4383 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Thu, 12 Dec 2019 23:28:50 +0100 Subject: [PATCH 46/64] Fixes raven's shuttle computer not being of the emergency shuttle type. --- _maps/shuttles/emergency_raven.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_maps/shuttles/emergency_raven.dmm b/_maps/shuttles/emergency_raven.dmm index 2c04837c79..05446968e7 100644 --- a/_maps/shuttles/emergency_raven.dmm +++ b/_maps/shuttles/emergency_raven.dmm @@ -56,7 +56,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "ah" = ( -/obj/machinery/computer/shuttle, +/obj/machinery/computer/emergency_shuttle, /turf/open/floor/plasteel/dark, /area/shuttle/escape) "ai" = ( From e9eb37150509487a0fdd9c9169e67cc5114d9017 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Thu, 12 Dec 2019 16:46:26 -0600 Subject: [PATCH 47/64] Automatic changelog generation for PR #10161 [ci skip] --- html/changelogs/AutoChangeLog-pr-10161.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10161.yml diff --git a/html/changelogs/AutoChangeLog-pr-10161.yml b/html/changelogs/AutoChangeLog-pr-10161.yml new file mode 100644 index 0000000000..7f09609b99 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10161.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - bugfix: "Fixed raven's shuttle computer not being of the emergency shuttle type." From 83a707ee9370a9711b580c7d008379ab5f4f0da9 Mon Sep 17 00:00:00 2001 From: BlackMajor Date: Fri, 13 Dec 2019 13:48:22 +1300 Subject: [PATCH 48/64] Removes medihounds, same treatment as janihounds --- .../objects/items/devices/dogborg_sleeper.dm | 3 +- .../objects/items/robot/robot_upgrades.dm | 29 +----- .../modules/mob/living/silicon/robot/robot.dm | 1 - .../mob/living/silicon/robot/robot_modules.dm | 94 ++++++++----------- .../designs/mechfabricator_designs.dm | 9 -- code/modules/research/techweb/all_nodes.dm | 2 +- .../living/silicon/robot/dogborg archive.dm | 16 ---- .../living/silicon/robot/dogborg_equipment.dm | 9 -- 8 files changed, 44 insertions(+), 119 deletions(-) diff --git a/code/game/objects/items/devices/dogborg_sleeper.dm b/code/game/objects/items/devices/dogborg_sleeper.dm index 1a3bc283d9..9b4842b291 100644 --- a/code/game/objects/items/devices/dogborg_sleeper.dm +++ b/code/game/objects/items/devices/dogborg_sleeper.dm @@ -153,6 +153,7 @@ playsound(loc, voracious ? 'sound/effects/splat.ogg' : 'sound/effects/bin_close.ogg', 50, 1) items_preserved.Cut() cleaning = FALSE + patient = null if(hound) update_gut(hound) @@ -525,5 +526,5 @@ playsound(hound, 'sound/effects/bin_close.ogg', 80, 1) /obj/item/dogborg/sleeper/K9/flavour - name = "Mobile Sleeper" + name = "Recreational Sleeper" desc = "A mounted, underslung sleeper, intended for holding willing occupants for leisurely purposes." \ No newline at end of file diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index a0b78d8b27..9b6c6b8026 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -409,8 +409,7 @@ icon_state = "cyborg_upgrade3" require_module = 1 module_type = list(/obj/item/robot_module/medical, - /obj/item/robot_module/syndicate_medical, - /obj/item/robot_module/medihound) + /obj/item/robot_module/syndicate_medical) var/list/additional_reagents = list() /obj/item/borg/upgrade/hypospray/action(mob/living/silicon/robot/R, user = usr) @@ -466,23 +465,6 @@ for(var/obj/item/reagent_containers/borghypo/H in R.module.modules) H.bypass_protection = initial(H.bypass_protection) -/obj/item/borg/upgrade/defib - name = "medical cyborg defibrillator" - desc = "An upgrade to the Medical module, installing a built-in \ - defibrillator, for on the scene revival." - icon_state = "cyborg_upgrade3" - require_module = 1 - module_type = list(/obj/item/robot_module/medical, - /obj/item/robot_module/syndicate_medical, - /obj/item/robot_module/medihound) - -/obj/item/borg/upgrade/defib/action(mob/living/silicon/robot/R, user = usr) - . = ..() - if(.) - var/obj/item/twohanded/shockpaddles/cyborg/S = new(R.module) - R.module.basic_modules += S - R.module.add_module(S, FALSE, TRUE) - /obj/item/borg/upgrade/defib/deactivate(mob/living/silicon/robot/R, user = usr) . = ..() if (.) @@ -497,8 +479,7 @@ icon_state = "cyborg_upgrade3" require_module = 1 module_type = list(/obj/item/robot_module/medical, - /obj/item/robot_module/syndicate_medical, - /obj/item/robot_module/medihound) + /obj/item/robot_module/syndicate_medical) /obj/item/borg/upgrade/processor/action(mob/living/silicon/robot/R, user = usr) . = ..() @@ -521,8 +502,7 @@ require_module = 1 module_type = list( /obj/item/robot_module/medical, - /obj/item/robot_module/syndicate_medical, - /obj/item/robot_module/medihound) + /obj/item/robot_module/syndicate_medical) /obj/item/borg/upgrade/advhealth/action(mob/living/silicon/robot/R, user = usr) . = ..() @@ -642,8 +622,7 @@ icon_state = "pinpointer_crew" require_module = TRUE module_type = list(/obj/item/robot_module/medical, - /obj/item/robot_module/syndicate_medical, - /obj/item/robot_module/medihound) + /obj/item/robot_module/syndicate_medical) /obj/item/borg/upgrade/pinpointer/action(mob/living/silicon/robot/R, user = usr) . = ..() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 0484e39c1a..0424cdc14f 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -233,7 +233,6 @@ var/list/modulelist = list("Standard" = /obj/item/robot_module/standard, \ "Engineering" = /obj/item/robot_module/engineering, \ "Medical" = /obj/item/robot_module/medical, \ - "Medihound" = /obj/item/robot_module/medihound, \ "Miner" = /obj/item/robot_module/miner, \ "Service" = /obj/item/robot_module/butler) if(!CONFIG_GET(flag/disable_peaceborg)) diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 56011cb886..ccb879870a 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -22,7 +22,7 @@ var/moduleselect_icon = "nomod" - var/can_be_pushed = TRUE + var/can_be_pushed = FALSE var/magpulsing = FALSE var/clean_on_move = FALSE @@ -139,7 +139,7 @@ //Adds flavoursome dogborg items to dogborg variants without mechanical benefits /obj/item/robot_module/proc/dogborg_equip() - if(istype(src, /obj/item/robot_module/k9) || istype(src, /obj/item/robot_module/medihound)) + if(istype(src, /obj/item/robot_module/k9)) return //Bandaid fix to prevent stacking until I merge these two modules into their base types var/obj/item/I = new /obj/item/analyzer/nose/flavour(src) basic_modules += I @@ -322,19 +322,21 @@ /obj/item/stack/medical/gauze/cyborg, /obj/item/organ_storage, /obj/item/borg/lollipop, - /obj/item/sensor_device) + /obj/item/sensor_device, + /obj/item/twohanded/shockpaddles/cyborg) emag_modules = list(/obj/item/reagent_containers/borghypo/hacked) ratvar_modules = list( /obj/item/clockwork/slab/cyborg/medical, /obj/item/clockwork/weapon/ratvarian_spear) cyborg_base_icon = "medical" moduleselect_icon = "medical" - can_be_pushed = FALSE hat_offset = 3 /obj/item/robot_module/medical/be_transformed_to(obj/item/robot_module/old_module) var/mob/living/silicon/robot/R = loc - var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Default", "Heavy", "Sleek", "Marina", "Droid", "Eyebot") + var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Default", "Heavy", "Sleek", "Marina", "Droid", "Eyebot", "Medihound", "Medihound Dark", "Vale") + if(R.client && R.client.ckey in list("nezuli")) + borg_icon += "Alina" if(!borg_icon) return FALSE switch(borg_icon) @@ -356,59 +358,46 @@ if("Heavy") cyborg_base_icon = "heavymed" cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi' - return ..() - -/obj/item/robot_module/medihound - name = "MediHound" - basic_modules = list( - /obj/item/dogborg/jaws/small, - /obj/item/storage/bag/borgdelivery, - /obj/item/analyzer/nose, - /obj/item/soap/tongue, - /obj/item/extinguisher/mini, - /obj/item/healthanalyzer, - /obj/item/dogborg/sleeper/medihound, - /obj/item/roller/robo, - /obj/item/reagent_containers/borghypo, - /obj/item/twohanded/shockpaddles/cyborg/hound, - /obj/item/stack/medical/gauze/cyborg, - /obj/item/pinpointer/crew, - /obj/item/sensor_device) - emag_modules = list(/obj/item/dogborg/pounce) - ratvar_modules = list(/obj/item/clockwork/slab/cyborg/medical, - /obj/item/clockwork/weapon/ratvarian_spear) - cyborg_base_icon = "medihound" - moduleselect_icon = "medihound" - moduleselect_alternate_icon = 'modular_citadel/icons/ui/screen_cyborg.dmi' - can_be_pushed = FALSE - hat_offset = INFINITY - sleeper_overlay = "msleeper" - cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' - has_snowflake_deadsprite = TRUE - dogborg = TRUE - cyborg_pixel_offset = -16 - -/obj/item/robot_module/medihound/be_transformed_to(obj/item/robot_module/old_module) - var/mob/living/silicon/robot/R = loc - var/list/medhoundmodels = list("Default", "Dark", "Vale") - if(R.client && R.client.ckey in list("nezuli")) - medhoundmodels += "Alina" - var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in medhoundmodels - if(!borg_icon) - return FALSE - switch(borg_icon) - if("Default") + if("Medihound") cyborg_base_icon = "medihound" - if("Dark") + cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' + moduleselect_icon = "medihound" + moduleselect_alternate_icon = 'modular_citadel/icons/ui/screen_cyborg.dmi' + has_snowflake_deadsprite = TRUE + dogborg = TRUE + cyborg_pixel_offset = -16 + hat_offset = INFINITY + if("Medihound Dark") cyborg_base_icon = "medihounddark" + cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' sleeper_overlay = "mdsleeper" + moduleselect_icon = "medihound" + moduleselect_alternate_icon = 'modular_citadel/icons/ui/screen_cyborg.dmi' + has_snowflake_deadsprite = TRUE + dogborg = TRUE + cyborg_pixel_offset = -16 + hat_offset = INFINITY if("Vale") cyborg_base_icon = "valemed" + cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' sleeper_overlay = "valemedsleeper" + moduleselect_icon = "medihound" + moduleselect_alternate_icon = 'modular_citadel/icons/ui/screen_cyborg.dmi' + has_snowflake_deadsprite = TRUE + dogborg = TRUE + cyborg_pixel_offset = -16 + hat_offset = INFINITY if("Alina") cyborg_base_icon = "alina-med" + cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' special_light_key = "alina" sleeper_overlay = "alinasleeper" + moduleselect_icon = "medihound" + moduleselect_alternate_icon = 'modular_citadel/icons/ui/screen_cyborg.dmi' + has_snowflake_deadsprite = TRUE + dogborg = TRUE + cyborg_pixel_offset = -16 + hat_offset = INFINITY return ..() /obj/item/robot_module/engineering @@ -489,7 +478,6 @@ cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi' if("Pup Dozer") cyborg_base_icon = "pupdozer" - can_be_pushed = FALSE hat_offset = INFINITY cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' has_snowflake_deadsprite = TRUE @@ -498,7 +486,6 @@ sleeper_overlay = "dozersleeper" if("Vale") cyborg_base_icon = "valeeng" - can_be_pushed = FALSE hat_offset = INFINITY cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' has_snowflake_deadsprite = TRUE @@ -508,7 +495,6 @@ if("Alina") cyborg_base_icon = "alina-eng" special_light_key = "alina" - can_be_pushed = FALSE hat_offset = INFINITY cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' has_snowflake_deadsprite = TRUE @@ -533,7 +519,6 @@ /obj/item/clockwork/weapon/ratvarian_spear) cyborg_base_icon = "sec" moduleselect_icon = "security" - can_be_pushed = FALSE hat_offset = 3 /obj/item/robot_module/security/do_transform_animation() @@ -589,7 +574,6 @@ cyborg_base_icon = "k9" moduleselect_icon = "k9" moduleselect_alternate_icon = 'modular_citadel/icons/ui/screen_cyborg.dmi' - can_be_pushed = FALSE hat_offset = INFINITY sleeper_overlay = "ksleeper" cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' @@ -652,7 +636,6 @@ /obj/item/clockwork/weapon/ratvarian_spear) cyborg_base_icon = "peace" moduleselect_icon = "standard" - can_be_pushed = FALSE hat_offset = -2 /obj/item/robot_module/peacekeeper/do_transform_animation() @@ -947,7 +930,6 @@ /obj/item/clockwork/weapon/ratvarian_spear) cyborg_base_icon = "synd_sec" moduleselect_icon = "malf" - can_be_pushed = FALSE hat_offset = 3 /obj/item/robot_module/syndicate/rebuild_modules() @@ -987,7 +969,6 @@ /obj/item/clockwork/weapon/ratvarian_spear) cyborg_base_icon = "synd_medical" moduleselect_icon = "malf" - can_be_pushed = FALSE hat_offset = 3 /obj/item/robot_module/saboteur @@ -1026,7 +1007,6 @@ cyborg_base_icon = "synd_engi" moduleselect_icon = "malf" - can_be_pushed = FALSE magpulsing = TRUE hat_offset = -4 canDispose = TRUE diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index e8c8bab09f..113a6262c9 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -696,15 +696,6 @@ construction_time = 120 category = list("Cyborg Upgrade Modules") -/datum/design/borg_upgrade_defibrillator - name = "Cyborg Upgrade (Defibrillator)" - id = "borg_upgrade_defibrillator" - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/defib - materials = list(MAT_METAL=15000, MAT_GLASS=15000, MAT_SILVER=10000, MAT_GOLD=10000, MAT_TITANIUM=5000, MAT_DIAMOND=5000) - construction_time = 120 - category = list("Cyborg Upgrade Modules") - /datum/design/borg_upgrade_surgicalprocessor name = "Cyborg Upgrade (Surgical Processor)" id = "borg_upgrade_surgicalprocessor" diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index c0aa4a3127..eed1e4aefd 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -400,7 +400,7 @@ display_name = "Cyborg Upgrades: Medical" description = "Medical upgrades for cyborgs." prereq_ids = list("adv_biotech", "robotics") - design_ids = list("borg_upgrade_defibrillator", "borg_upgrade_advhealth", "borg_upgrade_piercinghypospray", "borg_upgrade_highstrengthsynthesiser", "borg_upgrade_expandedsynthesiser", "borg_upgrade_pinpointer", "borg_upgrade_surgicalprocessor") + design_ids = list("borg_upgrade_advhealth", "borg_upgrade_piercinghypospray", "borg_upgrade_highstrengthsynthesiser", "borg_upgrade_expandedsynthesiser", "borg_upgrade_pinpointer", "borg_upgrade_surgicalprocessor") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000) export_price = 5000 diff --git a/modular_citadel/code/modules/mob/living/silicon/robot/dogborg archive.dm b/modular_citadel/code/modules/mob/living/silicon/robot/dogborg archive.dm index 8b5c0b0af0..368abc6335 100644 --- a/modular_citadel/code/modules/mob/living/silicon/robot/dogborg archive.dm +++ b/modular_citadel/code/modules/mob/living/silicon/robot/dogborg archive.dm @@ -57,20 +57,4 @@ modules += new /obj/item/healthanalyzer(src) modules += new /obj/item/analyzer/nose(src) emag = new /obj/item/dogborg/pounce(src) - fix_modules() - -/obj/item/robot_module/medihound - name = "MediHound module" - -/obj/item/robot_module/medihound/New() - ..() - modules += new /obj/item/dogborg/jaws/small(src) - modules += new /obj/item/storage/bag/borgdelivery(src) - modules += new /obj/item/analyzer/nose(src) - modules += new /obj/item/soap/tongue(src) - modules += new /obj/item/healthanalyzer(src) - modules += new /obj/item/dogborg/sleeper(src) - modules += new /obj/item/twohanded/shockpaddles/hound(src) - modules += new /obj/item/sensor_device(src) - emag = new /obj/item/dogborg/pounce(src) fix_modules() \ No newline at end of file diff --git a/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm b/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm index 6ae5b147c6..a1466f58d4 100644 --- a/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm +++ b/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm @@ -353,15 +353,6 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm ! icon = 'icons/mob/dogborg.dmi' icon_state= "kibble" -//Defibs - -/obj/item/twohanded/shockpaddles/cyborg/hound - name = "Paws of Life" - desc = "MediHound specific shock paws." - icon = 'icons/mob/dogborg.dmi' - icon_state = "defibpaddles0" - item_state = "defibpaddles0" - // Pounce stuff for K-9 /obj/item/dogborg/pounce From 319d4d51bb72804d66b506ad21f820f2f0830d98 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Fri, 13 Dec 2019 04:26:37 +0100 Subject: [PATCH 49/64] Allows blood bank generators to be wrenched and unwrenched. --- code/game/machinery/bloodbankgen.dm | 55 ++++++++++++++--------------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/code/game/machinery/bloodbankgen.dm b/code/game/machinery/bloodbankgen.dm index c489f6c9c9..296e79b403 100644 --- a/code/game/machinery/bloodbankgen.dm +++ b/code/game/machinery/bloodbankgen.dm @@ -28,13 +28,6 @@ QDEL_NULL(outbag) return ..() -/obj/machinery/bloodbankgen/contents_explosion(severity, target) - ..() - if(bag) - bag.ex_act(severity, target) - if(outbag) - outbag.ex_act(severity, target) - /obj/machinery/bloodbankgen/handle_atom_del(atom/A) ..() if(A == bag) @@ -188,7 +181,7 @@ if(user.a_intent == INTENT_HARM) return ..() - if(default_deconstruction_screwdriver(user, "bloodbank-off", "bloodbank-off", O)) + if(default_deconstruction_screwdriver(user, "bloodbank-off", "bloodbank-off", O) || default_unfasten_wrench(user, O, 20) == SUCCESSFUL_UNFASTEN) if(bag) var/obj/item/reagent_containers/blood/B = bag B.forceMove(drop_location()) @@ -204,31 +197,37 @@ return if(istype(O, /obj/item/reagent_containers/blood)) - . = 1 //no afterattack + . = TRUE //no afterattack + var/msg = "" if(!panel_open) - if(bag && outbag) - to_chat(user, "This machine already has bags attached.") - - if(!bag && !outbag) - var/choice = alert(user, "Choose where to place [O]", "", "Input", "Cancel", "Output") - switch(choice) - if("Cancel") - return FALSE - if("Input") - attachinput(O, user) - if("Output") - attachoutput(O, user) - else if(!bag) - attachinput(O, user) - else if(!outbag) - attachoutput(O, user) - else - to_chat(user, "Close the maintenance panel first.") - return + . += "Close the maintenance panel" + if(!anchored) + . += "[msg ? " and a" : "A"]nchor its bolts" + if(length(msg)) + to_chat(user, "[msg] first.") + return + if(bag && outbag) + to_chat(user, "This machine already has bags attached.") + if(!bag && !outbag) + var/choice = alert(user, "Choose where to place [O]", "", "Input", "Cancel", "Output") + switch(choice) + if("Cancel") + return FALSE + if("Input") + attachinput(O, user) + if("Output") + attachoutput(O, user) + else if(!bag) + attachinput(O, user) + else if(!outbag) + attachoutput(O, user) else to_chat(user, "You cannot put this in [src]!") +/obj/machinery/bloodbankgen/is_operational() + return ..() && anchored + /obj/machinery/bloodbankgen/ui_interact(mob/user) . = ..() From 2611023488b1f9883bbe88f877eb1b9c1a9ca291 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Fri, 13 Dec 2019 07:33:45 +0100 Subject: [PATCH 50/64] Ports "Roundstart borg brains no longer decay." --- code/modules/mob/living/brain/MMI.dm | 1 + code/modules/mob/living/silicon/robot/robot.dm | 1 + 2 files changed, 2 insertions(+) diff --git a/code/modules/mob/living/brain/MMI.dm b/code/modules/mob/living/brain/MMI.dm index aa3c209016..2a57506df6 100644 --- a/code/modules/mob/living/brain/MMI.dm +++ b/code/modules/mob/living/brain/MMI.dm @@ -125,6 +125,7 @@ else if(!brain) brain = new(src) brain.name = "[L.real_name]'s brain" + brain.organ_flags |= ORGAN_FROZEN name = "Man-Machine Interface: [brainmob.real_name]" update_icon() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 0484e39c1a..a081b1c3d2 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -159,6 +159,7 @@ else if(!mmi || !mmi.brainmob) mmi = new (src) mmi.brain = new /obj/item/organ/brain(mmi) + mmi.brain.organ_flags |= ORGAN_FROZEN mmi.brain.name = "[real_name]'s brain" mmi.icon_state = "mmi_full" mmi.name = "Man-Machine Interface: [real_name]" From 5f95e0d5a60a53fc0b787bb9626f3694c14bc708 Mon Sep 17 00:00:00 2001 From: r4d6 <50276533+r4d6@users.noreply.github.com> Date: Fri, 13 Dec 2019 08:17:06 -0500 Subject: [PATCH 51/64] Remove an extra antimatter engine shielding --- code/modules/cargo/packs/engine.dm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/code/modules/cargo/packs/engine.dm b/code/modules/cargo/packs/engine.dm index a4438c7ef8..499881a110 100644 --- a/code/modules/cargo/packs/engine.dm +++ b/code/modules/cargo/packs/engine.dm @@ -27,7 +27,7 @@ /datum/supply_pack/engine/am_shielding name = "Antimatter Shielding Crate" - desc = "Contains ten Antimatter shields, somehow crammed into a crate." + desc = "Contains nine Antimatter shields, somehow crammed into a crate." cost = 2500 contains = list(/obj/item/am_shielding_container, /obj/item/am_shielding_container, @@ -37,8 +37,7 @@ /obj/item/am_shielding_container, /obj/item/am_shielding_container, /obj/item/am_shielding_container, - /obj/item/am_shielding_container, - /obj/item/am_shielding_container) //10 shields: 3x3 containment and a core + /obj/item/am_shielding_container) //9 shields: 3x3 containment and a core crate_name = "antimatter shielding crate" /datum/supply_pack/engine/emitter From 9faf3d1dacb01e4055188455c6d061a9fcedba7f Mon Sep 17 00:00:00 2001 From: Artur Date: Sat, 14 Dec 2019 01:01:38 +0200 Subject: [PATCH 52/64] Mooaar fixeees --- .../mood_events/generic_negative_events.dm | 2 +- .../game/gamemodes/bloodsucker/bloodsucker.dm | 4 +- .../structures/crates_lockers/crates.dm | 9 ++ .../bloodsucker/bloodsucker_integration.dm | 60 ++++---- .../bloodsucker/bloodsucker_life.dm | 23 ++- .../bloodsucker/bloodsucker_objectives.dm | 8 +- .../bloodsucker/datum_bloodsucker.dm | 10 +- .../antagonists/bloodsucker/datum_vassal.dm | 6 +- .../bloodsucker/objects/bloodsucker_crypt.dm | 135 ++++++++++-------- .../bloodsucker/objects/bloodsucker_lair.dm | 12 +- .../bloodsucker/powers/bs_mesmerize.dm | 6 +- code/modules/language/vampiric.dm | 6 +- .../mob/living/simple_animal/astral.dm | 1 + .../mob/living/simple_animal/bot/bot.dm | 1 + .../mob/living/simple_animal/constructs.dm | 2 +- .../simple_animal/friendly/drone/_drone.dm | 1 + .../living/simple_animal/guardian/guardian.dm | 1 + .../living/simple_animal/hostile/faithless.dm | 3 +- .../living/simple_animal/hostile/hivebot.dm | 1 + .../simple_animal/hostile/jungle/seedling.dm | 1 + .../hostile/megafauna/hierophant.dm | 1 + .../hostile/mining_mobs/curse_blob.dm | 1 + .../simple_animal/hostile/retaliate/ghost.dm | 1 + .../living/simple_animal/hostile/skeleton.dm | 1 + .../living/simple_animal/hostile/statue.dm | 1 + .../living/simple_animal/hostile/stickman.dm | 1 + .../modules/mob/living/simple_animal/shade.dm | 1 + .../mob/living/simple_animal/slime/slime.dm | 1 + .../chemistry/reagents/other_reagents.dm | 2 +- .../reagents/reagent_containers/blood_pack.dm | 6 +- icons/misc/language.dmi | Bin 4645 -> 4889 bytes icons/misc/mark_icons.dmi | Bin 0 -> 433 bytes 32 files changed, 171 insertions(+), 137 deletions(-) create mode 100644 icons/misc/mark_icons.dmi diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm index 6190e0c287..a6e4c8ed4f 100644 --- a/code/datums/mood_events/generic_negative_events.dm +++ b/code/datums/mood_events/generic_negative_events.dm @@ -201,7 +201,7 @@ /datum/mood_event/vampcandle description = "Something is making your mind feel... loose...\n" - mood_change = -20 + mood_change = -10 timeout = 1 MINUTES /datum/mood_event/drankblood_bad diff --git a/code/game/gamemodes/bloodsucker/bloodsucker.dm b/code/game/gamemodes/bloodsucker/bloodsucker.dm index fb6dd4604a..e784fd836d 100644 --- a/code/game/gamemodes/bloodsucker/bloodsucker.dm +++ b/code/game/gamemodes/bloodsucker/bloodsucker.dm @@ -21,8 +21,10 @@ required_players = 20 required_enemies = 2 recommended_enemies = 4 - reroll_friendly = 1 + reroll_friendly = FALSE enemy_minimum_age = 7 + round_ends_with_antag_death = FALSE + announce_span = "danger" announce_text = "Filthy, bloodsucking vampires are crawling around disguised as crewmembers!\n\ diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 23703c7891..e416b2b436 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -79,6 +79,15 @@ material_drop = /obj/item/stack/sheet/mineral/wood material_drop_amount = 5 +/obj/structure/closet/crate/coffin/examine(mob/user) + . = ..() + if(user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) + . += {"This is a coffin which you can use to regenerate your burns and other wounds faster."} + . += {"You can also thicken your blood if you survive the day, and hide from the sun safely while inside."} + /* if(user.mind.has_antag_datum(ANTAG_DATUM_VASSAL) + . += {"This is a coffin which your master can use to shield himself from the unforgiving sun.\n + You yourself are still human and dont need it. Yet."} */ + /obj/structure/closet/crate/internals desc = "An internals crate." name = "internals crate" diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_integration.dm b/code/modules/antagonists/bloodsucker/bloodsucker_integration.dm index 5e38a29346..3a2725cf91 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_integration.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_integration.dm @@ -1,23 +1,22 @@ // INTEGRATION: Adding Procs and Datums to existing "classes" /mob/living/proc/AmBloodsucker(falseIfInDisguise=FALSE) // No Datum - if (!mind || !mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) + if(!mind || !mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) return FALSE - return TRUE /mob/living/proc/HaveBloodsuckerBodyparts(var/displaymessage="") // displaymessage can be something such as "rising from death" for Torpid Sleep. givewarningto is the person receiving messages. - if (!getorganslot(ORGAN_SLOT_HEART)) - if (displaymessage != "") + if(!getorganslot(ORGAN_SLOT_HEART)) + if(displaymessage != "") to_chat(src, "Without a heart, you are incapable of [displaymessage].") return FALSE - if (!get_bodypart(BODY_ZONE_HEAD)) - if (displaymessage != "") + if(!get_bodypart(BODY_ZONE_HEAD)) + if(displaymessage != "") to_chat(src, "Without a head, you are incapable of [displaymessage].") return FALSE - if (!getorgan(/obj/item/organ/brain)) // NOTE: This is mostly just here so we can do one scan for all needed parts when creating a vamp. You probably won't be trying to use powers w/out a brain. - if (displaymessage != "") + if(!getorgan(/obj/item/organ/brain)) // NOTE: This is mostly just here so we can do one scan for all needed parts when creating a vamp. You probably won't be trying to use powers w/out a brain. + if(displaymessage != "") to_chat(src, "Without a brain, you are incapable of [displaymessage].") return FALSE return TRUE @@ -37,41 +36,38 @@ /mob/living/carbon/getBruteLoss_nonProsthetic() var/amount = 0 for(var/obj/item/bodypart/BP in bodyparts) - if (BP.status < 2) + if(BP.status < 2) amount += BP.brute_dam return amount /mob/living/carbon/getFireLoss_nonProsthetic() var/amount = 0 for(var/obj/item/bodypart/BP in bodyparts) - if (BP.status < 2) + if(BP.status < 2) amount += BP.burn_dam return amount /mob/living/carbon // EXAMINING /mob/living/carbon/human/proc/ReturnVampExamine(var/mob/viewer) - if (!mind || !viewer.mind) + if(!mind || !viewer.mind) return "" // Target must be a Vamp var/datum/antagonist/bloodsucker/bloodsuckerdatum = mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) - if (!bloodsuckerdatum) + if(!bloodsuckerdatum) return "" - // Viewer is Target's Vassal? - if (viewer.mind.has_antag_datum(ANTAG_DATUM_VASSAL) in bloodsuckerdatum.vassals) + if(viewer.mind.has_antag_datum(ANTAG_DATUM_VASSAL) in bloodsuckerdatum.vassals) var/returnString = "\[This is your Master!\]" - var/returnIcon = "[icon2html('icons/mob/hud.dmi', world, "bloodsucker_big")]" + var/returnIcon = "[icon2html('icons/misc/language.dmi', world, "bloodsucker")]" returnString += "\n" return returnIcon + returnString - // Viewer not a Vamp AND not the target's vassal? - if (!viewer.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) && !(viewer in bloodsuckerdatum.vassals)) + if(!viewer.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) && !(viewer in bloodsuckerdatum.vassals)) return "" - // Default String var/returnString = "\[[bloodsuckerdatum.ReturnFullName(1)]\]" - var/returnIcon = "[icon2html('icons/mob/hud.dmi', world, "bloodsucker_big")]" + var/returnIcon = "[icon2html('icons/misc/language.dmi', world, "bloodsucker")]" // In Disguise (Veil)? //if (name_override != null) @@ -82,35 +78,35 @@ /mob/living/carbon/human/proc/ReturnVassalExamine(var/mob/viewer) - if (!mind || !viewer.mind) + if(!mind || !viewer.mind) return "" // Am I not even a Vassal? Then I am not marked. var/datum/antagonist/vassal/vassaldatum = mind.has_antag_datum(ANTAG_DATUM_VASSAL) - if (!vassaldatum) + if(!vassaldatum) return "" // Only Vassals and Bloodsuckers can recognize marks. - if (!viewer.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) && !viewer.mind.has_antag_datum(ANTAG_DATUM_VASSAL)) + if(!viewer.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) && !viewer.mind.has_antag_datum(ANTAG_DATUM_VASSAL)) return "" // Default String var/returnString = "\[" var/returnIcon = "" // Am I Viewer's Vassal? - if (vassaldatum.master.owner == viewer.mind) + if(vassaldatum.master.owner == viewer.mind) returnString += "This [dna.species.name] bears YOUR mark!" - returnIcon = "[icon2html('icons/mob/hud.dmi', world, "vassal_big")]" + returnIcon = "[icon2html('icons/misc/mark_icons.dmi', world, "vassal")]" // Am I someone ELSE'S Vassal? - else if (viewer.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) + else if(viewer.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) returnString += "This [dna.species.name] bears the mark of [vassaldatum.master.ReturnFullName(vassaldatum.master.owner.current,1)]" - returnIcon = "[icon2html('icons/mob/hud.dmi', world, "vassal_grey_big")]" + returnIcon = "[icon2html('icons/misc/mark_icons.dmi', world, "vassal_grey")]" // Are you serving the same master as I am? - else if (viewer.mind.has_antag_datum(ANTAG_DATUM_VASSAL) in vassaldatum.master.vassals) + else if(viewer.mind.has_antag_datum(ANTAG_DATUM_VASSAL) in vassaldatum.master.vassals) returnString += "[p_they(TRUE)] bears the mark of your Master" - returnIcon = "[icon2html('icons/mob/hud.dmi', world, "bloodsucker_big")]" + returnIcon = "[icon2html('icons/misc/mark_icons.dmi', world, "vassal")]" // You serve a different Master than I do. else returnString += "[p_they(TRUE)] bears the mark of another Bloodsucker" - returnIcon = "[icon2html('icons/mob/hud.dmi', world, "vassal_grey_big")]" + returnIcon = "[icon2html('icons/misc/mark_icons.dmi', world, "vassal_grey")]" returnString += "\]" // \n" Don't need spacers. Using . += "" in examine.dm does this on its own. return returnIcon + returnString @@ -124,7 +120,7 @@ return blood_volume < BLOOD_VOLUME_SAFE var/datum/antagonist/bloodsucker/bloodsuckerdatum = mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) - if (bloodsuckerdatum.poweron_masquerade) + if(bloodsuckerdatum.poweron_masquerade) return FALSE // If a Bloodsucker is malnourished, AND if his temperature matches his surroundings (aka he hasn't fed recently and looks COLD)... @@ -132,14 +128,14 @@ /mob/living/carbon/human/ShowAsPaleExamine() // Check for albino, as per human/examine.dm's check. - if (skin_tone == "albino") + if(skin_tone == "albino") return TRUE return ..() // Return vamp check /mob/living/carbon/proc/scan_blood_volume() // Vamps don't show up normally to scanners unless Masquerade power is on ----> scanner.dm - if (mind) + if(mind) var/datum/antagonist/bloodsucker/bloodsuckerdatum = mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) if (istype(bloodsuckerdatum) && bloodsuckerdatum.poweron_masquerade) return BLOOD_VOLUME_NORMAL diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm index 821f18df1a..9174692b49 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm @@ -47,10 +47,10 @@ var/blood_taken = min(feedAmount, target.blood_volume) * mult // Starts at 15 (now 8 since we doubled the Feed time) target.blood_volume -= blood_taken // Simple Animals lose a LOT of blood, and take damage. This is to keep cats, cows, and so forth from giving you insane amounts of blood. - if (!ishuman(target)) + if(!ishuman(target)) target.blood_volume -= (blood_taken / max(target.mob_size, 0.1)) * 3.5 // max() to prevent divide-by-zero target.apply_damage_type(blood_taken / 3.5) // Don't do too much damage, or else they die and provide no blood nourishment. - if (target.blood_volume <= 0) + if(target.blood_volume <= 0) target.blood_volume = 0 target.death(0) /////////// @@ -59,9 +59,9 @@ // our volume * temp, + their volume * temp, / total volume /////////// // Reduce Value Quantity - if (target.stat == DEAD) // Penalty for Dead Blood + if(target.stat == DEAD) // Penalty for Dead Blood blood_taken /= 3 - if (!ishuman(target)) // Penalty for Non-Human Blood + if(!ishuman(target)) // Penalty for Non-Human Blood blood_taken /= 2 //if (!iscarbon(target)) // Penalty for Animals (they're junk food) // Apply to Volume @@ -84,7 +84,7 @@ //It is called from your coffin on close (by you only) if(poweron_masquerade == TRUE || owner.current.AmStaked()) return FALSE - owner.current.adjustStaminaLoss(-3 * (regenRate * 2) * mult, 0) // Humans lose stamina damage really quickly. Vamps should heal more. + owner.current.adjustStaminaLoss(-2 + (regenRate * -10) * mult, 0) // Humans lose stamina damage really quickly. Vamps should heal more. owner.current.adjustCloneLoss(-1 * (regenRate * 4) * mult, 0) owner.current.adjustOrganLoss(ORGAN_SLOT_BRAIN, -1 * (regenRate * 4) * mult) //adjustBrainLoss(-1 * (regenRate * 4) * mult, 0) // No Bleeding @@ -102,6 +102,9 @@ costMult = 0.25 C.ExtinguishMob() CureDisabilities() // Extinguish Fire + C.remove_all_embedded_objects() // Remove Embedded! + owner.current.regenerate_organs() // Heal Organs (will respawn original eyes etc. but we replace right away, next) + CheckVampOrgans() // Heart, Eyes else if(owner.current.blood_volume <= 0) // No Blood? Lower Mult mult = 0.25 @@ -128,7 +131,7 @@ for (var/targetLimbZone in missing) // 1) Find ONE Limb and regenerate it. owner.current.regenerate_limb(targetLimbZone, 0) // regenerate_limbs() <--- If you want to EXCLUDE certain parts, do it like this ----> regenerate_limbs(0, list("head")) var/obj/item/bodypart/L = owner.current.get_bodypart( targetLimbZone ) // 2) Limb returns Damaged - AddBloodVolume(20 * costMult) // Costs blood to heal + AddBloodVolume(50 * costMult) // Costs blood to heal L.brute_dam = 60 to_chat(owner.current, "Your flesh knits as it regrows [L]!") playsound(owner.current, 'sound/magic/demon_consume.ogg', 50, 1) @@ -141,12 +144,8 @@ if (istype(BP) && BP.status == 2) message_admins("T2: [BP] ") BP.drop_limb() - return TRUE - // NOTE: Limbs have a "status", like their hosts "stat". 2 is dead (aka Prosthetic). 1 seems to be idle/alive. - */ - C.remove_all_embedded_objects() // Remove Embedded! - owner.current.regenerate_organs() // Heal Organs (will respawn original eyes etc. but we replace right away, next) - CheckVampOrgans() // Heart, Eyes + return TRUE */ + // NOTE: Limbs have a "status", like their hosts "stat". 2 is dead (aka Prosthetic). 1 seems to be idle/alive.*/ return FALSE /datum/antagonist/bloodsucker/proc/CureDisabilities() diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_objectives.dm b/code/modules/antagonists/bloodsucker/bloodsucker_objectives.dm index ecb9f703d1..63e1470576 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_objectives.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_objectives.dm @@ -43,7 +43,7 @@ // EXPLANATION /datum/objective/bloodsucker/lair/update_explanation_text() - explanation_text = "Create a lair by claiming a coffin."// Make sure to keep it safe!" + explanation_text = "Create a lair by claiming a coffin, and protect it until the end of the shift"// Make sure to keep it safe!" // WIN CONDITIONS? /datum/objective/bloodsucker/lair/check_completion() @@ -63,7 +63,6 @@ // LOOKUP: /datum/crewmonitor/proc/update_data(z) for .assignment to see how to get a person's PDA. var/list/roles = list( "Captain", - "Head of Security", "Head of Personnel", "Research Director", "Chief Engineer", @@ -71,7 +70,6 @@ "Quartermaster" ) var/list/departs = list( - "Head of Security", "Research Director", "Chief Engineer", "Chief Medical Officer", @@ -93,8 +91,6 @@ // Department? else switch(target_role) - if("Head of Security") - department_string = "Security" if("Research Director") department_string = "Science" if("Chief Engineer") @@ -260,7 +256,7 @@ var/list/all_items = owner.current.GetAllContents() // Includes items inside other items. var/itemcount = FALSE for(var/obj/I in all_items) //Check for items - if(istype(I, /obj/item/organ/heart)) + if(I == /obj/item/organ/heart) itemcount ++ if (itemcount >= target_amount) // Got the right amount? return TRUE diff --git a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm index fd6f48a97d..ef59bfe7e0 100644 --- a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm +++ b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm @@ -33,7 +33,7 @@ var/foodInGut = 0 // How much food to throw up later. You shouldn't have eaten that. var/warn_sun_locker = FALSE // So we only get the locker burn message once per day. var/warn_sun_burn = FALSE // So we only get the sun burn message once per day. - + var/had_toxlover = FALSE // LISTS var/static/list/defaultTraits = list (TRAIT_STABLEHEART, TRAIT_NOBREATH, TRAIT_SLEEPIMMUNE, TRAIT_NOCRITDAMAGE, TRAIT_RESISTCOLD, TRAIT_RADIMMUNE, TRAIT_VIRUSIMMUNE, TRAIT_NIGHT_VISION, \ TRAIT_NOSOFTCRIT, TRAIT_NOHARDCRIT, TRAIT_AGEUSIA, TRAIT_COLDBLOODED, TRAIT_NONATURALHEAL, TRAIT_NOMARROW, TRAIT_NOPULSE, TRAIT_NOCLONE) @@ -185,16 +185,17 @@ for (var/T in defaultTraits) ADD_TRAIT(owner.current, T, "bloodsucker") if(HAS_TRAIT(owner.current, TRAIT_TOXINLOVER)) //No slime bonuses here, no thank you + had_toxlover = TRUE REMOVE_TRAIT(owner.current, TRAIT_TOXINLOVER, "species") // Traits: Species - if (ishuman(owner.current)) + if(ishuman(owner.current)) var/mob/living/carbon/human/H = owner.current var/datum/species/S = H.dna.species S.species_traits |= DRINKSBLOOD // Clear Addictions owner.current.reagents.addiction_list = list() // Start over from scratch. Lucky you! At least you're not addicted to blood anymore (if you were) // Stats - if (ishuman(owner.current)) + if(ishuman(owner.current)) var/mob/living/carbon/human/H = owner.current var/datum/species/S = H.dna.species // Make Changes @@ -233,6 +234,9 @@ // Traits for(var/T in defaultTraits) REMOVE_TRAIT(owner.current, T, "bloodsucker") + if(had_toxlover == TRUE) + ADD_TRAIT(owner.current, TRAIT_TOXINLOVER, "species") + // Traits: Species if(ishuman(owner.current)) var/mob/living/carbon/human/H = owner.current diff --git a/code/modules/antagonists/bloodsucker/datum_vassal.dm b/code/modules/antagonists/bloodsucker/datum_vassal.dm index dcf34080d8..f582b882d8 100644 --- a/code/modules/antagonists/bloodsucker/datum_vassal.dm +++ b/code/modules/antagonists/bloodsucker/datum_vassal.dm @@ -47,6 +47,7 @@ objectives += vassal_objective objectives_given += vassal_objective give_thrall_eyes() + owner.current.grant_language(/datum/language/vampiric) // Add Antag HUD update_vassal_icons_added(owner.current, "vassal") . = ..() @@ -85,6 +86,7 @@ qdel(O) objectives_given = list() remove_thrall_eyes() + owner.current.remove_language(/datum/language/vampiric) // Clear Antag HUD update_vassal_icons_removed(owner.current) @@ -146,5 +148,5 @@ set_antag_hud(vassal, null) //Displayed at the start of roundend_category section, default to roundend_category header -/datum/antagonist/vassal/roundend_report_header() - return "Loyal to their bloodsucking masters, the Vassals were:

    " +/*/datum/antagonist/vassal/roundend_report_header() + return "Loyal to their bloodsucking masters, the Vassals were:

    "*/ diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm index 8339787a07..99a01fd218 100644 --- a/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm +++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm @@ -104,20 +104,33 @@ can_buckle = TRUE var/useLock = FALSE // So we can't just keep dragging ppl on here. var/mob/buckled - var/convert_progress = 2 // Resets on each new character to be added to the chair. Some effects should lower it... + var/convert_progress = 3 // Resets on each new character to be added to the chair. Some effects should lower it... var/disloyalty_confirm = FALSE // Command & Antags need to CONFIRM they are willing to lose their role (and will only do it if the Vassal'ing succeeds) var/disloyalty_offered = FALSE // Has the popup been issued? Don't spam them. - var/convert_cost = 10 + var/convert_cost = 100 /obj/structure/bloodsucker/vassalrack/deconstruct(disassembled = TRUE) new /obj/item/stack/sheet/metal(src.loc, 4) new /obj/item/stack/rods(loc, 4) qdel(src) +/obj/structure/bloodsucker/vassalrack/examine(mob/user) + . = ..() + if((user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) || isobserver(user)) + . += {"This is the vassal rack, which allows you to thrall crewmembers into loyal minions in your service."} + . += {"You need to first secure the vassal rack by clicking on it while it is in your lair."} + . += {"Simply click and hold on a victim, and then drag their sprite on the vassal rack."} + . += {"Make sure that the victim is handcuffed, or else they can simply run away or resist, as the process is not instant."} + . += {"To convert the victim, simply click on the vassal rack itself. Sharp weapons work faster than other tools."} +/* if(user.mind.has_antag_datum(ANTAG_DATUM_VASSAL) + . += {"This is the vassal rack, which allows your master to thrall crewmembers into his minions.\n + Aid your master in bringing their victims here and keeping them secure.\n + You can secure victims to the vassal rack by click dragging the victim onto the rack while it is secured"} */ + /obj/structure/bloodsucker/vassalrack/MouseDrop_T(atom/movable/O, mob/user) - if (!O.Adjacent(src) || O == user || !isliving(O) || !isliving(user) || useLock || has_buckled_mobs() || user.incapacitated()) + if(!O.Adjacent(src) || O == user || !isliving(O) || !isliving(user) || useLock || has_buckled_mobs() || user.incapacitated()) return - if (!anchored && user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) + if(!anchored && user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) to_chat(user, "Until this rack is secured in place, it cannot serve its purpose.") return // PULL TARGET: Remember if I was pullin this guy, so we can restore this @@ -126,11 +139,9 @@ // * MOVE! * O.forceMove(drop_location()) // PULL TARGET: Restore? - if (waspulling) + if(waspulling) owner.start_pulling(O, wasgrabstate, TRUE) // NOTE: in bs_lunge.dm, we use [target.grabbedby(owner)], which simulates doing a grab action. We don't want that though...we're cutting directly back to where we were in a grab. - - // Do Action! useLock = TRUE if(do_mob(user, O, 50)) @@ -138,19 +149,19 @@ useLock = FALSE /obj/structure/bloodsucker/vassalrack/AltClick(mob/user) - if (!has_buckled_mobs() || !isliving(user) || useLock) + if(!has_buckled_mobs() || !isliving(user) || useLock) return // Attempt Release (Owner vs Non Owner) var/mob/living/carbon/C = pick(buckled_mobs) - if (C) - if (user == owner) + if(C) + if(user == owner) unbuckle_mob(C) else user_unbuckle_mob(C,user) /obj/structure/bloodsucker/vassalrack/proc/attach_victim(mob/living/M, mob/living/user) // Standard Buckle Check - if (!buckle_mob(M)) // force=TRUE)) + if(!buckle_mob(M)) // force=TRUE)) return // Attempt Buckle user.visible_message("[user] straps [M] into the rack, immobilizing them.", \ @@ -164,9 +175,7 @@ m180.Turn(180)//90)//180 animate(M, transform = m180, time = 2) M.pixel_y = -2 //M.get_standard_pixel_y_offset(120)//180) - update_icon() - // Torture Stuff convert_progress = 2 // Goes down unless you start over. disloyalty_confirm = FALSE // New guy gets the chance to say NO if he's special. @@ -174,8 +183,8 @@ /obj/structure/bloodsucker/vassalrack/user_unbuckle_mob(mob/living/M, mob/user) // Attempt Unbuckle - if (!user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) - if (M == user) + if(!user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) + if(M == user) M.visible_message("[user] tries to release themself from the rack!",\ "You attempt to release yourself from the rack!") // For sound if not seen --> "You hear a squishy wet noise.") else @@ -188,7 +197,7 @@ unbuckle_mob(M) /obj/structure/bloodsucker/vassalrack/unbuckle_mob(mob/living/buckled_mob)//, force=FALSE) - if (!..()) + if(!..()) return var/matrix/m180 = matrix(buckled_mob.transform) m180.Turn(180)//-90)//180 @@ -197,13 +206,11 @@ src.visible_message(text("[buckled_mob][buckled_mob.stat==DEAD?"'s corpse":""] slides off of the rack.")) density = FALSE buckled_mob.AdjustKnockdown(30) - update_icon() - useLock = FALSE // Failsafe /obj/structure/bloodsucker/vassalrack/attackby(obj/item/W, mob/user, params) - if (has_buckled_mobs()) // Attack w/weapon vs guy standing there? Don't do an attack. + if(has_buckled_mobs()) // Attack w/weapon vs guy standing there? Don't do an attack. attack_hand(user) return FALSE return ..() @@ -213,14 +220,14 @@ //if(.) // return // Go away. Torturing. - if (useLock) + if(useLock) return var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) // CHECK ONE: Am I claiming this? Is it in the right place? - if (istype(bloodsuckerdatum) && !owner) - if (!bloodsuckerdatum.lair) + if(istype(bloodsuckerdatum) && !owner) + if(!bloodsuckerdatum.lair) to_chat(user, "You don't have a lair. Claim a coffin to make that location your lair.") - if (bloodsuckerdatum.lair != get_area(src)) + if(bloodsuckerdatum.lair != get_area(src)) to_chat(user, "You may only activate this structure in your lair: [bloodsuckerdatum.lair].") return switch(alert(user,"Do you wish to afix this structure here? Be aware you wont be able to unsecure it anymore","Secure [src]","Yes", "No")) @@ -230,16 +237,16 @@ anchored = TRUE return //No, you cant move this ever again // No One Home - if (!has_buckled_mobs()) + if(!has_buckled_mobs()) return // CHECK TWO: Am I a non-bloodsucker? var/mob/living/carbon/C = pick(buckled_mobs) - if (!istype(bloodsuckerdatum)) + if(!istype(bloodsuckerdatum)) // Try to release this guy user_unbuckle_mob(C, user) return // Bloodsucker Owner! Let the boy go. - if (C.mind) + if(C.mind) var/datum/antagonist/vassal/vassaldatum = C.mind.has_antag_datum(ANTAG_DATUM_VASSAL) if (istype(vassaldatum) && vassaldatum.master == bloodsuckerdatum || C.stat >= DEAD) unbuckle_mob(C) @@ -250,7 +257,7 @@ /obj/structure/bloodsucker/vassalrack/proc/torture_victim(mob/living/user, mob/living/target) // Check Bloodmob/living/M, force = FALSE, check_loc = TRUE - if (user.blood_volume < convert_cost + 5) + if(user.blood_volume < convert_cost + 5) to_chat(user, "You don't have enough blood to initiate the Dark Communion with [target].") return // Prep... @@ -259,21 +266,21 @@ // Step Two: Break mindshielding/antag (on approve) // Step Three: Blood Ritual // Conversion Process - if (convert_progress > 0) + if(convert_progress > 0) to_chat(user, "You prepare to initiate [target] into your service.") - if (!do_torture(user,target)) + if(!do_torture(user,target)) to_chat(user, "The ritual has been interrupted!") else convert_progress -- // Ouch. Stop. Don't. // All done! - if (convert_progress <= 0) + if(convert_progress <= 0) // FAIL: Can't be Vassal - if (!SSticker.mode.can_make_vassal(target, user, display_warning=FALSE)) // If I'm an unconvertable Antag ONLY - to_chat(user, "[target] doesn't respond to your persuasion. It doesn't appear they can be converted to follow you. \[ALT+click to release\]") + if(!SSticker.mode.can_make_vassal(target, user, display_warning=FALSE) && HAS_TRAIT(target, TRAIT_MINDSHIELD)) // If I'm an unconvertable Antag ONLY + to_chat(user, "[target] doesn't respond to your persuasion. It doesn't appear they can be converted to follow you, they either have a mindshield or their external loyalties are too difficult for you to break.\[ALT+click to release\]") convert_progress ++ // Pop it back up some. Avoids wasting Blood on a lost cause. // SUCCESS: All done! else - if (RequireDisloyalty(target)) + if(RequireDisloyalty(target)) to_chat(user, "[target] has external loyalties! [target.p_they(TRUE)] will require more persuasion to break [target.p_them()] to your will!") else to_chat(user, "[target] looks ready for the Dark Communion.") @@ -283,8 +290,8 @@ useLock = FALSE return // Check: Mindshield & Antag - if (!disloyalty_confirm && RequireDisloyalty(target)) - if (!do_disloyalty(user,target)) + if(!disloyalty_confirm && RequireDisloyalty(target)) + if(!do_disloyalty(user,target)) to_chat(user, "The ritual has been interrupted!") else if (!disloyalty_confirm) to_chat(user, "[target] refuses to give into your persuasion. Perhaps a little more?") @@ -293,7 +300,7 @@ useLock = FALSE return // Check: Blood - if (user.blood_volume < convert_cost) + if(user.blood_volume < convert_cost) to_chat(user, "You don't have enough blood to initiate the Dark Communion with [target].") useLock = FALSE return @@ -307,8 +314,8 @@ useLock = FALSE return // Convert to Vassal! - if (bloodsuckerdatum && bloodsuckerdatum.attempt_turn_vassal(target)) - remove_loyalties(target) // In case of Mindshield, or appropriate Antag (Traitor, Internal, etc) + if(bloodsuckerdatum && bloodsuckerdatum.attempt_turn_vassal(target)) + //remove_loyalties(target) // In case of Mindshield, or appropriate Antag (Traitor, Internal, etc) //if (!target.buckled) // to_chat(user, "The ritual has been interrupted!") // useLock = FALSE @@ -328,28 +335,28 @@ // Get Bodypart var/target_string = "" var/obj/item/bodypart/BP = null - if (iscarbon(target)) + if(iscarbon(target)) var/mob/living/carbon/C = target BP = pick(C.bodyparts) - if (BP) + if(BP) target_string += BP.name // Get Weapon var/obj/item/I = user.get_active_held_item() - if (!istype(I)) + if(!istype(I)) I = user.get_inactive_held_item() // Create Strings var/method_string = I?.attack_verb?.len ? pick(I.attack_verb) : pick("harmed","tortured","wrenched","twisted","scoured","beaten","lashed","scathed") var/weapon_string = I ? I.name : pick("bare hands","hands","fingers","fists") // Weapon Bonus + SFX - if (I) + if(I) torture_time -= I.force / 4 torture_dmg_brute += I.force / 4 //torture_dmg_burn += I. - if (I.sharpness == IS_SHARP) + if(I.sharpness == IS_SHARP) torture_time -= 1 - else if (I.sharpness == IS_SHARP_ACCURATE) + else if(I.sharpness == IS_SHARP_ACCURATE) torture_time -= 2 - if (istype(I, /obj/item/weldingtool)) + if(istype(I, /obj/item/weldingtool)) var/obj/item/weldingtool/welder = I welder.welding = TRUE torture_time -= 5 @@ -357,15 +364,15 @@ I.play_tool_sound(target) torture_time = max(50, torture_time * 10) // Minimum 5 seconds. // Now run process. - if (!do_mob(user, target, torture_time * mult)) + if(!do_mob(user, target, torture_time * mult)) return FALSE // SUCCESS - if (I) + if(I) playsound(loc, I.hitsound, 30, 1, -1) I.play_tool_sound(target) target.visible_message("[user] has [method_string] [target]'s [target_string] with [user.p_their()] [weapon_string]!", \ "[user] has [method_string] your [target_string] with [user.p_their()] [weapon_string]!") - if (!target.is_muzzled()) + if(!target.is_muzzled()) target.emote("scream") target.Jitter(5) target.apply_damages(brute = torture_dmg_brute, burn = torture_dmg_burn, def_zone = (BP ? BP.body_zone : null)) // take_overall_damage(6,0) @@ -375,49 +382,49 @@ // OFFER YES/NO NOW! spawn(10) - if (useLock && target && target.client) // Are we still torturing? Did we cancel? Are they still here? + if(useLock && target && target.client) // Are we still torturing? Did we cancel? Are they still here? to_chat(user, "[target] has been given the opportunity for servitude. You await their decision...") var/alert_text = "You are being tortured! Do you want to give in and pledge your undying loyalty to [user]?" - if (HAS_TRAIT(target, TRAIT_MINDSHIELD)) + /* if(HAS_TRAIT(target, TRAIT_MINDSHIELD)) alert_text += "\n\nYou will no longer be loyal to the station!" - if (SSticker.mode.AmValidAntag(target.mind)) + if(SSticker.mode.AmValidAntag(target.mind)) */ alert_text += "\n\nYou will not lose your current objectives, but they come second to the will of your new master!" switch(alert(target, alert_text,"THE HORRIBLE PAIN! WHEN WILL IT END?!","Yes, Master!", "NEVER!")) if("Yes, Master!") disloyalty_accept(target) else disloyalty_refuse(target) - if (!do_torture(user,target, 2)) + if(!do_torture(user,target, 2)) return FALSE // NOTE: We only remove loyalties when we're CONVERTED! return TRUE /obj/structure/bloodsucker/vassalrack/proc/RequireDisloyalty(mob/living/target) - return SSticker.mode.AmValidAntag(target.mind) || HAS_TRAIT(target, TRAIT_MINDSHIELD) + return SSticker.mode.AmValidAntag(target.mind) //|| HAS_TRAIT(target, TRAIT_MINDSHIELD) /obj/structure/bloodsucker/vassalrack/proc/disloyalty_accept(mob/living/target) // FAILSAFE: Still on the rack? - if (!(locate(target) in buckled_mobs)) + if(!(locate(target) in buckled_mobs)) return // NOTE: You can say YES after torture. It'll apply to next time. disloyalty_confirm = TRUE - if (HAS_TRAIT(target, TRAIT_MINDSHIELD)) + /*if(HAS_TRAIT(target, TRAIT_MINDSHIELD)) to_chat(target, "You give in to the will of your torturer. If they are successful, you will no longer be loyal to the station!") - +*/ /obj/structure/bloodsucker/vassalrack/proc/disloyalty_refuse(mob/living/target) // FAILSAFE: Still on the rack? - if (!(locate(target) in buckled_mobs)) + if(!(locate(target) in buckled_mobs)) return // Failsafe: You already said YES. - if (disloyalty_confirm) + if(disloyalty_confirm) return to_chat(target, "You refuse to give in! You will not break!") /obj/structure/bloodsucker/vassalrack/proc/remove_loyalties(mob/living/target) // Find Mind Implant & Destroy - if (HAS_TRAIT(target, TRAIT_MINDSHIELD)) + if(HAS_TRAIT(target, TRAIT_MINDSHIELD)) for(var/obj/item/implant/I in target.implants) if(I.type == /obj/item/implant/mindshield) I.removed(target,silent=TRUE) @@ -444,6 +451,15 @@ /obj/structure/bloodsucker/candelabrum/update_icon() icon_state = "candelabrum[lit ? "_lit" : ""]" +/obj/structure/bloodsucker/candelabrum/examine(mob/user) + . = ..() + if((user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) || isobserver(user)) + . += {"This is a magical candle which drains at the sanity of mortals who are not under your command while it is active."} + . += {"You can alt click on it from any range to turn it on remotely, or simply be next to it and click on it to turn it on and off normally."} +/* if(user.mind.has_antag_datum(ANTAG_DATUM_VASSAL) + . += {"This is a magical candle which drains at the sanity of the fools who havent yet accepted your master, as long as it is active.\n + You can turn it on and off by clicking on it while you are next to it"} */ + /obj/structure/bloodsucker/candelabrum/attack_hand(mob/user) var/datum/antagonist/bloodsucker/V = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) //I wish there was a better way to do this var/datum/antagonist/vassal/T = user.mind.has_antag_datum(ANTAG_DATUM_VASSAL) @@ -477,4 +493,5 @@ SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "vampcandle", /datum/mood_event/vampcandle) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // OTHER THINGS TO USE: HUMAN BLOOD. /obj/effect/decal/cleanable/blood + /obj/item/restraints/legcuffs/beartrap/bloodsucker diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm index f93d4d4261..f68191d6d7 100644 --- a/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm +++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm @@ -28,9 +28,6 @@ return */ - - - /datum/antagonist/bloodsucker/proc/RunLair() set waitfor = FALSE // Don't make on_gain() wait for this function to finish. This lets this code run on the side. while(!AmFinalDeath() && coffin && lair) @@ -64,7 +61,7 @@ // STEP TWO: DIRT new /obj/effect/decal/cleanable/dirt (T_Dirty) // Find Animals in Area - if(rand(0,2) == 0) + /* if(rand(0,2) == 0) var/mobCount = 0 var/mobMax = CLAMP(area_turfs.len / 25, 1, 4) for (var/turf/T in area_turfs) @@ -74,17 +71,16 @@ mobCount ++ if (mobCount >= mobMax) // Already at max break - // Spawn One + Spawn One if(mobCount < mobMax) - // Seek Out Location + Seek Out Location while(area_turfs.len > 0) - sleep(240) //We dont want this to happen often var/turf/T = pick(area_turfs) // We use while&pick instead of a for/loop so it's random, rather than from the top of the list. if(T && !T.density) var/mob/living/simple_animal/SA = /mob/living/simple_animal/mouse // pick(/mob/living/simple_animal/mouse,/mob/living/simple_animal/mouse,/mob/living/simple_animal/mouse, /mob/living/simple_animal/hostile/retaliate/bat) //prob(300) /mob/living/simple_animal/mouse, new SA (T) break - area_turfs -= T + area_turfs -= T*/ // NOTE: area_turfs is now cleared out! if(coffin) coffin.UnclaimCoffin() diff --git a/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm b/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm index 7d825d6f44..94bc0e11d0 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm @@ -11,7 +11,7 @@ button_icon_state = "power_mez" bloodcost = 30 cooldown = 200 - target_range = 2 + target_range = 1 power_activates_immediately = FALSE message_Trigger = "Whom will you subvert to your will?" must_be_capacitated = TRUE @@ -94,8 +94,8 @@ if(do_mob(user, target, 40, 0, TRUE, extra_checks=CALLBACK(src, .proc/ContinueActive, user, target))) PowerActivatedSuccessfully() // PAY COST! BEGIN COOLDOWN! - var/power_time = 90 + level_current * 15 - target.silent = power_time + 50 + var/power_time = 90 + level_current * 12 + target.silent = power_time + 20 target.apply_status_effect(STATUS_EFFECT_MESMERIZE, 100 + level_current * 15) to_chat(user, "[target] is fixed in place by your hypnotic gaze.") target.Stun(power_time) diff --git a/code/modules/language/vampiric.dm b/code/modules/language/vampiric.dm index e03fc235ba..6da54ce844 100644 --- a/code/modules/language/vampiric.dm +++ b/code/modules/language/vampiric.dm @@ -2,7 +2,7 @@ /datum/language/vampiric name = "Blah-Sucker" - desc = "The native language of the Bloodsucker elders, learned intuitively by Fledglings as they pass from death into immortality." + desc = "The native language of the Bloodsucker elders, learned intuitively by Fledglings and as they pass from death into immortality. Thralls are also given the ability to speak this as apart of their conversion ritual." speech_verb = "growls" ask_verb = "growls" exclaim_verb = "snarls" @@ -10,6 +10,7 @@ key = "b" space_chance = 40 default_priority = 90 + icon_state = "bloodsucker" flags = TONGUELESS_SPEECH | LANGUAGE_HIDE_ICON_IF_NOT_UNDERSTOOD // Hide the icon next to your text if someone doesn't know this language. syllables = list( @@ -22,6 +23,3 @@ "froz","etz","tzil", "t'","k'","t'","k'","th'","tz'" ) - - icon_state = "bloodsucker" - icon = 'icons/mob/hud.dmi' diff --git a/code/modules/mob/living/simple_animal/astral.dm b/code/modules/mob/living/simple_animal/astral.dm index 2aafedb149..3d0c335989 100644 --- a/code/modules/mob/living/simple_animal/astral.dm +++ b/code/modules/mob/living/simple_animal/astral.dm @@ -27,6 +27,7 @@ unsuitable_atmos_damage = 0 minbodytemp = 0 maxbodytemp = 100000 + blood_volume = 0 /mob/living/simple_animal/astral/death() icon_state = "shade_dead" diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index e61cfad068..7a653f4aa4 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -14,6 +14,7 @@ atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) maxbodytemp = INFINITY minbodytemp = 0 + blood_volume = 0 has_unlimited_silicon_privilege = 1 sentience_type = SENTIENCE_ARTIFICIAL status_flags = NONE //no default canpush diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index b7067f8904..be900aa4ef 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -33,6 +33,7 @@ initial_language_holder = /datum/language_holder/construct deathmessage = "collapses in a shattered heap." hud_type = /datum/hud/constructs + blood_volume = 0 var/list/construct_spells = list() var/playstyle_string = "You are a generic construct! Your job is to not exist, and you should probably adminhelp this." var/master = null @@ -459,4 +460,3 @@ hud_used.healths.icon_state = "[icon_state]_health5" else hud_used.healths.icon_state = "[icon_state]_health6" - diff --git a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm index 387973b979..7e0e43055f 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm @@ -50,6 +50,7 @@ dextrous_hud_type = /datum/hud/dextrous/drone lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE see_in_dark = 7 + blood_volume = 0 can_be_held = TRUE held_items = list(null, null) var/staticChoice = "static" diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index e3ef14c784..1bd434b233 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -20,6 +20,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians icon_living = "magicOrange" icon_dead = "magicOrange" speed = 0 + blood_volume = 0 a_intent = INTENT_HARM stop_automated_movement = 1 movement_type = FLYING // Immunity to chasms and landmines, etc. diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm index 4e7cb0ac70..bc766f7409 100644 --- a/code/modules/mob/living/simple_animal/hostile/faithless.dm +++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm @@ -19,6 +19,7 @@ spacewalk = TRUE stat_attack = UNCONSCIOUS robust_searching = 1 + blood_volume = 0 harm_intent_damage = 10 obj_damage = 50 @@ -42,4 +43,4 @@ var/mob/living/carbon/C = target C.Knockdown(60) C.visible_message("\The [src] knocks down \the [C]!", \ - "\The [src] knocks you down!") \ No newline at end of file + "\The [src] knocks you down!") diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm index ece5d7e24c..a9576a467b 100644 --- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm +++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm @@ -28,6 +28,7 @@ gold_core_spawnable = HOSTILE_SPAWN del_on_death = 1 loot = list(/obj/effect/decal/cleanable/robot_debris) + blood_volume = 0 do_footstep = TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/seedling.dm b/code/modules/mob/living/simple_animal/hostile/jungle/seedling.dm index 1a894734d8..38dd17a09b 100644 --- a/code/modules/mob/living/simple_animal/hostile/jungle/seedling.dm +++ b/code/modules/mob/living/simple_animal/hostile/jungle/seedling.dm @@ -30,6 +30,7 @@ robust_searching = TRUE stat_attack = UNCONSCIOUS anchored = TRUE + blood_volume = 0 var/combatant_state = SEEDLING_STATE_NEUTRAL var/obj/seedling_weakpoint/weak_point var/mob/living/beam_debuff_target diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index cca39cfea6..d96889cfb6 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -50,6 +50,7 @@ Difficulty: Normal armour_penetration = 75 melee_damage_lower = 15 melee_damage_upper = 20 + blood_volume = 0 speed = 1 move_to_delay = 11 ranged = 1 diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm index 20916c9311..51919dad24 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm @@ -22,6 +22,7 @@ environment_smash = ENVIRONMENT_SMASH_NONE sentience_type = SENTIENCE_BOSS layer = LARGE_MOB_LAYER + blood_volume = 0 var/doing_move_loop = FALSE var/mob/living/set_target var/timerid diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm index 32e1c4d047..bfe8349192 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm @@ -31,6 +31,7 @@ movement_type = FLYING pressure_resistance = 300 gold_core_spawnable = NO_SPAWN //too spooky for science + blood_volume = 0 var/ghost_hair_style var/ghost_hair_color var/mutable_appearance/ghost_hair diff --git a/code/modules/mob/living/simple_animal/hostile/skeleton.dm b/code/modules/mob/living/simple_animal/hostile/skeleton.dm index d0ae01f443..48b69a1f5c 100644 --- a/code/modules/mob/living/simple_animal/hostile/skeleton.dm +++ b/code/modules/mob/living/simple_animal/hostile/skeleton.dm @@ -12,6 +12,7 @@ emote_see = list("rattles") a_intent = INTENT_HARM maxHealth = 40 + blood_volume = 0 health = 40 speed = 1 harm_intent_damage = 5 diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm index 804989e71e..da423f3788 100644 --- a/code/modules/mob/living/simple_animal/hostile/statue.dm +++ b/code/modules/mob/living/simple_animal/hostile/statue.dm @@ -18,6 +18,7 @@ maxHealth = 50000 health = 50000 healable = 0 + blood_volume = 0 harm_intent_damage = 10 obj_damage = 100 diff --git a/code/modules/mob/living/simple_animal/hostile/stickman.dm b/code/modules/mob/living/simple_animal/hostile/stickman.dm index 7a86870aa1..fa5cb151ed 100644 --- a/code/modules/mob/living/simple_animal/hostile/stickman.dm +++ b/code/modules/mob/living/simple_animal/hostile/stickman.dm @@ -13,6 +13,7 @@ response_disarm = "shoves" response_harm = "hits" speed = 0 + blood_volume = 0 stat_attack = UNCONSCIOUS robust_searching = 1 environment_smash = ENVIRONMENT_SMASH_NONE diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm index 3bd24c4df7..32ef52a6ae 100644 --- a/code/modules/mob/living/simple_animal/shade.dm +++ b/code/modules/mob/living/simple_animal/shade.dm @@ -31,6 +31,7 @@ loot = list(/obj/item/ectoplasm) del_on_death = TRUE initial_language_holder = /datum/language_holder/construct + blood_volume = 0 /mob/living/simple_animal/shade/death() deathmessage = "lets out a contented sigh as [p_their()] form unwinds." diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index 185d717a00..d1e10ea693 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -26,6 +26,7 @@ health = 150 healable = 0 gender = NEUTER + blood_volume = 0 //Until someome reworks for them to have slime jelly see_in_dark = 8 diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 00ff3885ea..6ef262c7d7 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -30,7 +30,7 @@ if(iscarbon(L)) var/mob/living/carbon/C = L var/blood_id = C.get_blood_id() - if((blood_id == "blood" || blood_id == "jellyblood") && (method == INJECT || (method == INGEST && C.dna && C.dna.species && (DRINKSBLOOD in C.dna.species.species_traits)))) + if((HAS_TRAIT(C, TRAIT_NOMARROW) || blood_id == "blood" || blood_id == "jellyblood") && (method == INJECT || (method == INGEST && C.dna && C.dna.species && (DRINKSBLOOD in C.dna.species.species_traits)))) C.blood_volume = min(C.blood_volume + round(reac_volume, 0.1), BLOOD_VOLUME_MAXIMUM * C.blood_ratio) // we don't care about bloodtype here, we're just refilling the mob diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index 04cec0bc91..61449fc153 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -112,14 +112,14 @@ if (user != M) to_chat(user, "You force [M] to drink from the [src]") user.visible_message("[user] forces [M] to drink from the [src].") - if (!do_mob(user, M, 50)) + if(!do_mob(user, M, 50)) return else - if (!do_mob(user, M, 10)) + if(!do_mob(user, M, 10)) return to_chat(user, "You take a sip from the [src].") user.visible_message("[user] puts the [src] up to their mouth.") - if (reagents.total_volume <= 0) // Safety: In case you spam clicked the blood bag on yourself, and it is now empty (below will divide by zero) + if(reagents.total_volume <= 0) // Safety: In case you spam clicked the blood bag on yourself, and it is now empty (below will divide by zero) return var/gulp_size = 5 var/fraction = min(gulp_size / reagents.total_volume, 1) diff --git a/icons/misc/language.dmi b/icons/misc/language.dmi index dcd10a51b7de8d976b5b93b640da1c2c68bb41a6..6f6f2546d53c39bfac54b5d830cc8ea1898c0730 100644 GIT binary patch literal 4889 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 bI^h2Sd&i>l<-R%Z00000NkvXXu0mjfG>Q;w diff --git a/icons/misc/mark_icons.dmi b/icons/misc/mark_icons.dmi new file mode 100644 index 0000000000000000000000000000000000000000..1d8472752b08a949fc90e555e66a388cd355fe25 GIT binary patch literal 433 zcmV;i0Z#sjP)V=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex7wuvIWLJp@xj55`5_3}_Y&2!@=|!oPxYQ~u zxca#$xcGW<0RUN!C)X3M)gk}@0P;yhK~zYI?UlU^!Y~kppAl17jFFyfK!E zJ`%sGUpa{Ok@!{pDhEW>_7ew0)pp7O)xQf^@&dq$EhnFS@^k0FWPAvr6F&g>wKhMB bHwU-_pX_t)TAC;~00000NkvXXu0mjfG)uP& literal 0 HcmV?d00001 From 8ddde881991540f6aa6f4cad30e8de6592e82c5f Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 13 Dec 2019 23:33:34 -0600 Subject: [PATCH 53/64] Automatic changelog generation for PR #10050 [ci skip] --- html/changelogs/AutoChangeLog-pr-10050.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10050.yml diff --git a/html/changelogs/AutoChangeLog-pr-10050.yml b/html/changelogs/AutoChangeLog-pr-10050.yml new file mode 100644 index 0000000000..c736ded339 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10050.yml @@ -0,0 +1,5 @@ +author: "Ghommie" +delete-after: True +changes: + - tweak: "You shouldn't be able to target objects you can't see (excluding darkness) with the ARCD and RLD" + - tweak: "The admin RCD is ranged too, just like the ARCD." From d0493ac471731a76f056f0870fdd40fb06214101 Mon Sep 17 00:00:00 2001 From: Artur Date: Sat, 14 Dec 2019 17:09:39 +0200 Subject: [PATCH 54/64] Reviewer and linter fixes, and veil tweak --- .../bloodsucker/bloodsucker_integration.dm | 4 ++-- .../bloodsucker/bloodsucker_powers.dm | 18 +++++++++--------- .../bloodsucker/datum_bloodsucker.dm | 7 ++++--- .../antagonists/bloodsucker/datum_vassal.dm | 3 +-- .../bloodsucker/items/bloodsucker_organs.dm | 11 +++-------- .../bloodsucker/objects/bloodsucker_crypt.dm | 4 ++-- .../antagonists/bloodsucker/powers/bs_veil.dm | 5 ----- code/modules/surgery/organs/heart.dm | 5 +++++ 8 files changed, 26 insertions(+), 31 deletions(-) diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_integration.dm b/code/modules/antagonists/bloodsucker/bloodsucker_integration.dm index 3a2725cf91..bf4ae4b6b5 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_integration.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_integration.dm @@ -117,14 +117,14 @@ // Normal Creatures: if(!mind || !mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) - return blood_volume < BLOOD_VOLUME_SAFE + return blood_volume < (BLOOD_VOLUME_SAFE * blood_ratio) var/datum/antagonist/bloodsucker/bloodsuckerdatum = mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) if(bloodsuckerdatum.poweron_masquerade) return FALSE // If a Bloodsucker is malnourished, AND if his temperature matches his surroundings (aka he hasn't fed recently and looks COLD)... - return blood_volume < BLOOD_VOLUME_OKAY // && !(bodytemperature <= get_temperature() + 2) + return blood_volume < (BLOOD_VOLUME_OKAY * blood_ratio) // && !(bodytemperature <= get_temperature() + 2) /mob/living/carbon/human/ShowAsPaleExamine() // Check for albino, as per human/examine.dm's check. diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm b/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm index 821df92a19..dffdeaf7fc 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm @@ -128,7 +128,7 @@ /datum/action/bloodsucker/proc/CheckCanDeactivate(display_error) return TRUE -/datum/action/bloodsucker/UpdateButtonIcon() +/datum/action/bloodsucker/UpdateButtonIcon(force = FALSE) background_icon_state = active? background_icon_state_on : background_icon_state_off ..()//UpdateButtonIcon() @@ -197,28 +197,28 @@ // Click power: Begin Aim /datum/action/bloodsucker/targeted/Trigger() - if (active && CheckCanDeactivate(TRUE)) + if(active && CheckCanDeactivate(TRUE)) DeactivateRangedAbility() DeactivatePower() return - if (!CheckCanPayCost(TRUE) || !CheckCanUse(TRUE)) + if(!CheckCanPayCost(TRUE) || !CheckCanUse(TRUE)) return active = !active UpdateButtonIcon() // Create & Link Targeting Proc var/mob/living/L = owner - if (L.ranged_ability) + if(L.ranged_ability) L.ranged_ability.remove_ranged_ability() bs_proc_holder.add_ranged_ability(L) - if (message_Trigger != "") + if(message_Trigger != "") to_chat(owner, "[message_Trigger]") /datum/action/bloodsucker/targeted/CheckCanUse(display_error) . = ..() if(!.) return - if (!owner.client) // <--- We don't allow non client usage so that using powers like mesmerize will FAIL if you try to use them as ghost. Why? because ranged_abvility in spell.dm + if(!owner.client) // <--- We don't allow non client usage so that using powers like mesmerize will FAIL if you try to use them as ghost. Why? because ranged_abvility in spell.dm return FALSE // doesn't let you remove powers if you're not there. So, let's just cancel the power entirely. return TRUE @@ -247,13 +247,13 @@ // Click Target /datum/action/bloodsucker/targeted/proc/ClickWithPower(atom/A) // CANCEL RANGED TARGET check - if (power_in_use || !CheckValidTarget(A)) + if(power_in_use || !CheckValidTarget(A)) return FALSE // Valid? (return true means DON'T cancel power!) - if (!CheckCanPayCost(TRUE) || !CheckCanUse(TRUE) || !CheckCanTarget(A, TRUE)) + if(!CheckCanPayCost(TRUE) || !CheckCanUse(TRUE) || !CheckCanTarget(A, TRUE)) return TRUE // Skip this part so we can return TRUE right away. - if (power_activates_immediately) + if(power_activates_immediately) PowerActivatedSuccessfully() // Mesmerize pays only after success. power_in_use = TRUE // Lock us into this ability until it successfully fires off. Otherwise, we pay the blood even if we fail. FireTargetedPower(A) // We use this instead of ActivatePower(), which has no input diff --git a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm index ef59bfe7e0..febf53c324 100644 --- a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm +++ b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm @@ -103,7 +103,7 @@ "Sveyn","Aurel","Alexe","Iustin","Theodor","Dimitrie","Octav","Damien","Magnus","Caine","Abel", // Romanian/Ancient "Lucius","Gaius","Otho","Balbinus","Arcadius","Romanos","Alexios","Vitellius", // Latin "Melanthus","Teuthras","Orchamus","Amyntor","Axion", // Greek - "Thoth","Thutmose","Osorkon,","Nofret","Minmotu","Khafra" // Egyptian + "Thoth","Thutmose","Osorkon,","Nofret","Minmotu","Khafra", // Egyptian "Dio") else @@ -113,7 +113,7 @@ "Alcestis","Damaris","Elisavet","Khthonia","Teodora", // Greek "Nefret","Ankhesenpep") // Egyptian -/datum/antagonist/bloodsucker/proc/SelectTitle(am_fledgling = 0, forced=FALSE) +/datum/antagonist/bloodsucker/proc/SelectTitle(am_fledgling = 0, forced = FALSE) // Already have Title if (!forced && vamptitle != null) return @@ -181,6 +181,7 @@ // Powers BuyPower(new /datum/action/bloodsucker/feed) BuyPower(new /datum/action/bloodsucker/masquerade) + BuyPower(new /datum/action/bloodsucker/veil) // Traits for (var/T in defaultTraits) ADD_TRAIT(owner.current, T, "bloodsucker") @@ -334,7 +335,7 @@ datum/antagonist/bloodsucker/proc/SpendRank() // Assign True Reputation if(vamplevel == 4) - SelectReputation(am_fledgling=FALSE, forced=TRUE) + SelectReputation(am_fledgling = FALSE, forced = TRUE) to_chat(owner.current, "You are now a rank [vamplevel] Bloodsucker. Your strength, resistence, health, feed rate, regen rate, and maximum blood have all increased!") to_chat(owner.current, "Your existing powers have all ranked up as well!") update_hud(TRUE) diff --git a/code/modules/antagonists/bloodsucker/datum_vassal.dm b/code/modules/antagonists/bloodsucker/datum_vassal.dm index f582b882d8..71ee0bcc1d 100644 --- a/code/modules/antagonists/bloodsucker/datum_vassal.dm +++ b/code/modules/antagonists/bloodsucker/datum_vassal.dm @@ -62,9 +62,8 @@ flash_protect = -1 //These eyes are weaker to flashes, but let you see in the dark /datum/antagonist/vassal/proc/remove_thrall_eyes() - // Eyes var/obj/item/organ/eyes/E = new - E.Insert(owner.current) + E.Insert(owner.current) /datum/antagonist/vassal/on_removal() SSticker.mode.vassals -= owner // Add if not already in here (and you might be, if you were picked at round start) diff --git a/code/modules/antagonists/bloodsucker/items/bloodsucker_organs.dm b/code/modules/antagonists/bloodsucker/items/bloodsucker_organs.dm index 2664de0df5..5a905857c5 100644 --- a/code/modules/antagonists/bloodsucker/items/bloodsucker_organs.dm +++ b/code/modules/antagonists/bloodsucker/items/bloodsucker_organs.dm @@ -20,16 +20,11 @@ /datum/antagonist/bloodsucker/proc/RemoveVampOrgans() // Heart var/obj/item/organ/heart/H = new - H.Insert(owner.current) + H.Insert(owner.current) // Eyes var/obj/item/organ/eyes/E = new - E.Insert(owner.current) + E.Insert(owner.current) // HEART: OVERWRITE // - -/obj/item/organ/heart/proc/HeartStrengthMessage() - if (beating) - return "a healthy" - return "an unstable" // HEART // /obj/item/organ/heart/vampheart beating = 0 @@ -51,7 +46,7 @@ fakingit = 1 // We're pretending to beat, to fool people. /obj/item/organ/heart/vampheart/HeartStrengthMessage() - if (fakingit) + if(fakingit) return "a healthy" return "no" // Bloodsuckers don't have a heartbeat at all when stopped (default is "an unstable") // EYES // diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm index 99a01fd218..f73912d0f5 100644 --- a/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm +++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm @@ -196,7 +196,7 @@ ..() unbuckle_mob(M) -/obj/structure/bloodsucker/vassalrack/unbuckle_mob(mob/living/buckled_mob)//, force=FALSE) +/obj/structure/bloodsucker/vassalrack/unbuckle_mob(mob/living/buckled_mob, force = FALSE) if(!..()) return var/matrix/m180 = matrix(buckled_mob.transform) @@ -388,7 +388,7 @@ /* if(HAS_TRAIT(target, TRAIT_MINDSHIELD)) alert_text += "\n\nYou will no longer be loyal to the station!" if(SSticker.mode.AmValidAntag(target.mind)) */ - alert_text += "\n\nYou will not lose your current objectives, but they come second to the will of your new master!" + alert_text += "\n\nYou will not lose your current objectives, but they come second to the will of your new master!" switch(alert(target, alert_text,"THE HORRIBLE PAIN! WHEN WILL IT END?!","Yes, Master!", "NEVER!")) if("Yes, Master!") disloyalty_accept(target) diff --git a/code/modules/antagonists/bloodsucker/powers/bs_veil.dm b/code/modules/antagonists/bloodsucker/powers/bs_veil.dm index 02fb49a536..6db699d733 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_veil.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_veil.dm @@ -1,8 +1,4 @@ - - - - /datum/action/bloodsucker/veil name = "Veil of Many Faces" desc = "Disguise yourself in the illusion of another identity." @@ -169,7 +165,6 @@ /obj/effect/particle_effect/smoke/vampsmoke opaque = FALSE - amount = 0 lifetime = 0 /obj/effect/particle_effect/smoke/vampsmoke/fade_out(frames = 6) ..(frames) diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm index 212605669d..5b74b58cd0 100644 --- a/code/modules/surgery/organs/heart.dm +++ b/code/modules/surgery/organs/heart.dm @@ -55,6 +55,11 @@ update_icon() return 1 +/obj/item/organ/heart/proc/HeartStrengthMessage() + if(beating) + return "a healthy" + return "an unstable" + /obj/item/organ/heart/prepare_eat() var/obj/S = ..() S.icon_state = "[icon_base]-off" From 6124fbf3167a900db72f5412534a43d0b965be81 Mon Sep 17 00:00:00 2001 From: Artur Date: Sat, 14 Dec 2019 19:04:36 +0200 Subject: [PATCH 55/64] Hopefully this fixes the linter errors --- code/modules/antagonists/bloodsucker/powers/bs_veil.dm | 7 ------- 1 file changed, 7 deletions(-) diff --git a/code/modules/antagonists/bloodsucker/powers/bs_veil.dm b/code/modules/antagonists/bloodsucker/powers/bs_veil.dm index 6db699d733..0c83cc2d44 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_veil.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_veil.dm @@ -139,17 +139,12 @@ if (prev_disfigured) ADD_TRAIT(H, TRAIT_DISFIGURED, "husk") // NOTE: We are ASSUMING husk. // H.status_flags |= DISFIGURED // Restore "Unknown" disfigurement H.dna.features = prev_features - // Apply Appearance H.update_body() // Outfit and underware, also body. H.update_hair() H.update_body_parts() // Body itself, maybe skin color? - cast_effect() // POOF - - - // CAST EFFECT // // General effect (poof, splat, etc) when you cast. Doesn't happen automatically! /datum/action/bloodsucker/veil/proc/cast_effect() // Effect @@ -161,8 +156,6 @@ puff.start() owner.spin(8, 1) // Spin around like a loon. - ..() - /obj/effect/particle_effect/smoke/vampsmoke opaque = FALSE lifetime = 0 From b84b54d53f44a027cbbf070c77330544b25a8c3d Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 14 Dec 2019 13:04:40 -0600 Subject: [PATCH 56/64] Automatic changelog generation for PR #10171 [ci skip] --- html/changelogs/AutoChangeLog-pr-10171.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10171.yml diff --git a/html/changelogs/AutoChangeLog-pr-10171.yml b/html/changelogs/AutoChangeLog-pr-10171.yml new file mode 100644 index 0000000000..0138d7a381 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10171.yml @@ -0,0 +1,4 @@ +author: "r4d6" +delete-after: True +changes: + - rscdel: "Removed a AM Shielding from the crate" From f24dfa6387ad26157b1567c5332de0350ae2dfab Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 14 Dec 2019 18:00:01 -0600 Subject: [PATCH 57/64] Automatic changelog generation for PR #10163 [ci skip] --- html/changelogs/AutoChangeLog-pr-10163.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10163.yml diff --git a/html/changelogs/AutoChangeLog-pr-10163.yml b/html/changelogs/AutoChangeLog-pr-10163.yml new file mode 100644 index 0000000000..2818019ad7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10163.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - tweak: "Blood bank generators can now be anchored and unanchored now." From 773d574427a8c511d76fbdab5ba965d35ff9c925 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 14 Dec 2019 18:03:00 -0600 Subject: [PATCH 58/64] Automatic changelog generation for PR #10150 [ci skip] --- html/changelogs/AutoChangeLog-pr-10150.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10150.yml diff --git a/html/changelogs/AutoChangeLog-pr-10150.yml b/html/changelogs/AutoChangeLog-pr-10150.yml new file mode 100644 index 0000000000..d2a2b79ff0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10150.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - bugfix: "Wrong icon names, missing dog fashion with telegram hat" From 979807926f1e1ed06cce252317ace1803955bc46 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 14 Dec 2019 18:05:01 -0600 Subject: [PATCH 59/64] Automatic changelog generation for PR #10122 [ci skip] --- html/changelogs/AutoChangeLog-pr-10122.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10122.yml diff --git a/html/changelogs/AutoChangeLog-pr-10122.yml b/html/changelogs/AutoChangeLog-pr-10122.yml new file mode 100644 index 0000000000..4d503dc2be --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10122.yml @@ -0,0 +1,4 @@ +author: "kevinz000" +delete-after: True +changes: + - rscdel: "conveyors can only stack items on tiles to 150 now." From 0921c3541a474f09047ffbe32e71f79eb2233155 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 14 Dec 2019 18:16:37 -0600 Subject: [PATCH 60/64] Automatic changelog generation for PR #9970 [ci skip] --- html/changelogs/AutoChangeLog-pr-9970.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-9970.yml diff --git a/html/changelogs/AutoChangeLog-pr-9970.yml b/html/changelogs/AutoChangeLog-pr-9970.yml new file mode 100644 index 0000000000..ebeaa326e7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9970.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - rscdel: "Removed literally atrocious polka dotted accessories. They were even more atrocious than the yellow horrible tie." From 8e97b0e331650e0dabfba393d01cce70e7a102f5 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 14 Dec 2019 22:37:59 -0600 Subject: [PATCH 61/64] Automatic changelog generation for PR #10166 [ci skip] --- html/changelogs/AutoChangeLog-pr-10166.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10166.yml diff --git a/html/changelogs/AutoChangeLog-pr-10166.yml b/html/changelogs/AutoChangeLog-pr-10166.yml new file mode 100644 index 0000000000..ba919010af --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10166.yml @@ -0,0 +1,4 @@ +author: "nemvar" +delete-after: True +changes: + - bugfix: "The brains of roundstart borgs no longer decay." From 7ee71f9702a4090bb901c9cc2fba1d72684b1785 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 15 Dec 2019 14:08:48 -0600 Subject: [PATCH 62/64] Automatic changelog generation for PR #10144 [ci skip] --- html/changelogs/AutoChangeLog-pr-10144.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10144.yml diff --git a/html/changelogs/AutoChangeLog-pr-10144.yml b/html/changelogs/AutoChangeLog-pr-10144.yml new file mode 100644 index 0000000000..6b175b149b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10144.yml @@ -0,0 +1,4 @@ +author: "Linzolle" +delete-after: True +changes: + - bugfix: "officer's sabre now properly makes the unsheating and resheating noise" From 58f4f58cd2b08844602f65c42b4c49f3fb601d81 Mon Sep 17 00:00:00 2001 From: Artur Date: Mon, 16 Dec 2019 00:05:51 +0200 Subject: [PATCH 63/64] Slaughter demons shouldnt bleed --- code/modules/antagonists/slaughter/slaughter.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/antagonists/slaughter/slaughter.dm b/code/modules/antagonists/slaughter/slaughter.dm index f27da5f667..c669ff7877 100644 --- a/code/modules/antagonists/slaughter/slaughter.dm +++ b/code/modules/antagonists/slaughter/slaughter.dm @@ -33,6 +33,7 @@ melee_damage_lower = 30 melee_damage_upper = 30 see_in_dark = 8 + blood_volume = 0 //No bleeding on getting shot, for skeddadles lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE bloodcrawl = BLOODCRAWL_EAT var/playstyle_string = "You are a slaughter demon, a terrible creature from another realm. You have a single desire: To kill. \ From 423b2e7e90cbba15f23ece62af75978ba2fd3677 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 15 Dec 2019 16:41:39 -0600 Subject: [PATCH 64/64] Automatic changelog generation for PR #10011 [ci skip] --- html/changelogs/AutoChangeLog-pr-10011.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10011.yml diff --git a/html/changelogs/AutoChangeLog-pr-10011.yml b/html/changelogs/AutoChangeLog-pr-10011.yml new file mode 100644 index 0000000000..70d569699f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10011.yml @@ -0,0 +1,4 @@ +author: "Arturlang" +delete-after: True +changes: + - rscadd: "Adds Bloodsuckers, beware."
    ") dat += "Character Settings" @@ -333,7 +333,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "[name] " dat += "

    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%0ADDtu9ZY3jZt(i^ zXXIQ0)U>1!K?T z5S@EQzlKG-eDISNbzFtKLiFEb@75x`X(QVU9JcuR+ofJaC(>8j@pmgNkv}17dd(0i zS`sl7gp+T-&ZyYYHAF%JxaQgrOLZp+`|gRc$xsQ3bnbFlvGv*1m5bGkwmRa`ch*aq zc7Jbt_@i(4?WpYL#9dix;{ zrk5i65v#T|Fybw4CZGfWZ;lBV42Ic{QSIZ7!8hQl!~bH*|2QZ`3zE#ND~!aNuG>~t zD$@COKz#Jt-f#r40yaSH-v_0&PpV9}CrPB_v;8Q&q%|WE85-GU**kbenD_`M^l>G&)?=hac2l|EZ>Y=njg@SXj5?Nfdtw!9HK7#IAtXr70@P;NAiC(!W2mG;WchHgcyfE1={;x-sY5+#qeD zXNmP>WYPom{55)Z$w<}}j)GH*(YVl=Rm0qQHhrW`iM8li?bCuvAqVGsP23B5bVC31)J0JMmbvpU!`7yjlx*laPkcco-FG;Iz~M>2cv^s?o-@W6_%V>MNbptOZTGqkn`z?7A@4MQ`bo?Y&%iuH5OpDok&f8= zM;~&3j;>%!dnzkR)7xq(>EL(Rg3R7l-C?d_1V?ON<)r~Q8iHpd^*IQ`q&q1g8Q{w)u-0uV+|xoCV?2 z=hxr)qb0KpMox3PAn>D(sGw1TRq>oZ_`gi__JLw9p8VtgJ@yQsjb0)ETbU%W zFTklp<_hFqDX1>O4SJ6-n%QF0&V3{Jfhi0_*d5GVR6s|cA@<}l-nBK-&PXgw7KZ`s zloq%f_Z$ez7h4;@)LC(Pyrm-hKOC)>eJAEA;m)%7!tGFPfTDu1J{Ifbg=x*4RAb37 zyM|R>5dBko6jgsja$SlpiTb`gn95Q051T_y0gJm;*z1EI~0rogrM3++ta4 zAy~H;&Wh_PstVV8B6G%Ri+nog;DyqYA9jjSqL$XS?b1!D!%-nszBDZq>!jDheGPHg@ zyK7ThaYTQ|b`kQ+w*{-eR3ptI3um-^>LDaARyYD?|%&lY{=hQ3V{6tczt-0WOb1>?nWMGwmQ|!y3#g*O@n& zArQrJjTy=GTC))uHq^S>V)#(*C}Up~BlWf6g}0kykEYfI7>ldsnS9#8jp(fLV+M^F zI%xSvE8pIOP1yuYH0Mpcv^a;Ol_I$q6XnxLfU1i7k~Fuin+HSnc+x%b3f+rChI})q zz#4IC1OYb6moi(iqffOVUEK6SvFchv309%gR)WIkMyhU?SHhl-Z`P| zfWcK%(KtNHhTb&}zjiqJnTk5jbPVG$>P4Zlf~TR%IJY+qmQA`WxS;y^Sq(xeZiO+W z3f?>@Z;+-5_vvuou}cr;PJf5L$1S*<9M7c`bT~G^{aTZ4l&+iQrg-ii%4J?p+&0j# ze|@|OwBuhDg*Ii@h>s_eZtp427U)_z^u=gTbX*O41hNJp;lC+9yqCqx}$qUc-|ca>#ieOQn1muX2JP{`a4JX(F0@tc|**^-vG` z(kuH8#}Hb?mYWgvrZk@pnRj8oSTv#7H2Cj3{*hRxdY+1_l^<~E%LVITladE*!BgCW z$ZH8H(U*rpJ`MfYdv@7IXFNvfuWhH4bi--eUYxVD=PHlE@el7xZ-U5x9kQ|DH=e(b z$04!p@2)iSJ1a^Rl7|wkB}O;aSdrNnzrzkAYGLr)%=xziW|h7c)S1 zG%SG7Nj%#69;yif3eA8Uo_w{sd_Vv6Wq_^wclXV6dI( z_blG9agCtq5DHPtkzvLPsxkpr$lBViWFD-*5em_vk+V=%;H}&IJ@emjvK+R zhpKv~v{U0O7UXygQXZ%C@?LV>`*(WxwMZ@0BaN%!b`wV{>e8V(uf3!tLPt-r(Fkj2 zjX(VIg(RK#@wP6o5?WQ!#a33q&WHtIosufZ76feY1e`&sT? zihb18-$Fa4{j>#VwURuLcVq9mPg_pk{Ru*NXW^pJx0&CKhlpSm&8&wGFf|iD7HE|TNw-+GZ7s(fsN!a->@3PkwW_^DDiI1YfSAncX=Mp4>A>W zD_AS3E#L$hR=1(G^)$(czozj1;q(9-#m5WIwaw@8$a#2xeOWL9rr)nwsdt>ECnSUs z?0h8k!L#hsaou@i$A>rX&Iv^YJI!PZi7cty4Pm%kmw|c=ANFTv5U~HIa z@8ZZzi3Oe+Tm99ZxaoF8h4lWg$<+{IddC^a(b(c8^@*Qiar9RiA|XMrXu&yvt2-UU zK19jCIs2CND}r+2phw<0$PoN_=V5@rm+NOXhsZZL`%M%(W&Hgo143ydj;WPB6r@r1 z2mOVWk~!0CWM@6y5Pv}#Q575Pw#O}$v(w#I=OAz**Fm4J&u1gHS3c6|;IY3|<`hb? z8js>WFtv>0WE;yn!A^t=r#Kv+HfiC>h%#8t%9qTP8#1dkYU?zbljQOgMGV~YjlpQ| za^5r}P9T5t4U`W}W+EfJGI#+2#K7e8E@v^N%w3 zhLKVO^Uq1rU5|)%xw^F}TAxPw8rLQx5bZ5)0Y@i7lsF4kNlZ85=dEWS-LTUp#MFWM z8bRcP^0Uy(RpTeb47=`3!moG4&oE(1Xzvz|ILKwAoMdvQx4B&|L+ORId7)UmIYiB) zkr3Dq@ISzgyk53sO&q!|m?Ui-R>`Bs$lKnF{pw!b^h9dx+;KMRe`f#~WgyxqKV3~K zi#~uRb<=D2=pnkX*D+R^ME!~7RGANCmx6j#ivBM?K36NScs@e1joW9?m^T!PkM!q{ zjW26SOB**V#dy9gLwiNzLZ2{QMESze`^sM2Ac2s{I%Nr-5EZ6{492zs5~s(R4$9)Pverz{P4qb-> z6g*)xOx}zF0-kJqq1x)-?x36XjC6m$&B3v8V`6&z*ucG#t2LeK()1%^2ejPo);VYo z@lZCkvQ5R5?AQWKTk+k;D3!)@?8t=Rj6WJ(=FP?tQ)`cn7nJpYCg6-c_j;HAn=ub` z!N2PV8|CO0O`K*!AM*lFbK^(R%^Qyk+(1 zvk?*6#jM@ly5jmM_J@SR$%A)pn7kpCRw|v*J^di6tKuK+H-$;jhIX>kWEdm-1X?a} zU+{03+bFRshZlRS9gP>Y6Br2)V<=tUHHANEj>+0}rRbj&^8(|sBD$(AC_*X5afls9 z>G@skXjVI8IV*_2NDZ?#Sl<4e5ooFQ?KI?3Y27`Gr;8JaSj)KgIq_0n3OUaYNlAZd z0mEvDv^`7#P1*Fy6`}s%2NMzKrIw{T33+Y1y=wTVY5#@oe97MLf*<@ibfaWh&CMy$ zg33pbsr%-l;OU){r<=5%YbfPnOljMVYbAvPABkIt`U-kb`&4Ut2_&RE0ypj@@p zW})6_JS}3jm-96*?H%ldriSU*2{3}Di-AFkM5``x5_v04BUW;yfqCy`v}YJIJNm_l z5;~|zgw(R8SVfx3y<3}5OcssQnMl1F-P1%MKZ2ti&YCyhc|-1vwx6f^sk4MU+~s2`w~y zHD7Jo{nzTU=_hrV$35xERq(-d+B~^*>;NB^fBxDA7t4?78tolbjt-mj_niJaS*QO? zyYw@ELB_+q*XOo^VEZ|l__;@EeC155%+JwC7 zcoA*2!5FyM869(T!yseOx`7oZKKSCgQ#w0Iq?t>0J3&RG;J;1lK={*rEED8U6j6mPwwGP7-g?JmHwQH4I>AY@sp>1E$T^}v& z651xVDyz?u6tE@BA=>U-5~Zvp0#$q3fX<1h+?@#UtLnAZM zvbyJdCi*8;eENJ(Y^4l$pA!?)r`#P4xyk-CA6#yz#dC2&%AD=e_r189w05bPaSJN* zlT-~m()C(l$tk68eVLhfj3XS$6pI7=kW=@~G}ST@s_#9ULUxGidw~g(m-X;g#I2#s zTxI&L-;j0lV&4Z$4VzvdiN0in-=EQ>@H>xHtDN00$B-V*5z zH0Ob{@qbw#Bu@C_|Lg|Z@bm0nz4`Ub^UTXk59Sppu5p7I&3wvCX2vrwKvZzQYo4gz zWeYE!!-t+7i)mWuuJ5tEtQGs{-}d}FGBnQeT(+sN@gP6xTU{09u3?@pFP~PcNbSdG ziD|zT({`&!I0waA*wE|d8n*DK&?yIpme?Pvtc{K}ddNj)X2)#`=N9nLkQqY;~P8eX>06#u+% z3av>$%9srtbM=W#$@po-y7{mjKsqx)KJOZg5ZHSg~bFUi}|19aJkU85hMjH zJp!+gJo3>P?#R3e8=fBGuqr5wa42UXfW@=Z14*vi zxfWu}zQIB8m#w`?JChf%3DFeq+kg0z)mBTnC;8``!gUQJ|JBr!b;uDuMv2oUkkaHF$9zo{%I?+;>CJGKA75)V`enq zTQrAlh~q@XVu)r@+-r0_3L`Q`k|f?FKjgwqd9_~nFQOnAj623~mMW+KUdo|EzRF$Q zAkf|+{S!pfzp^M6oQOP!fTv$3-Si&@%Sz@oY4b0Sjy5~v% zXbuy!pmj749ID#HbiiS;1RAyMa{MOtI2XW8%ti1uJd%2TS0t64PZ)*%jauV|ehzpf zj&i~zF#S6i*<_8I5%xAl3yR9&o3h4NxoM(s%WIahrFuY<$5kBOcy*nJ@?tO`h@UUu zHFV$8F5}Lm+J&hnUtAuz-*izPTl;>>?kQyuc4iKu^Hp zQyjyB-0tcay@lY#I7E1|_PL4R#il-{u)w`@gV*J9a&k9OM|x$m8k`3`M5e5&X zZ$4Xx(*>B%>f!}Tk42A|YC-a)WDx$-i7Z<@lwX1C`ExYV`JM~7Fq(IRp%mavsZCqI z;Y2yroU|RPj6FI&!gt2gI;+KdkY)E}5YWQ(W>od@@{9^dL25P+7xl-#;L|PC3Kvci zatw}K3#mIIkJHv}5aY8o!9gpK*O9i)Y!oPUKy{}6cdbd;%&Ko_`LqFHMpq`CRzRSw zFq-5GDkZJ~z)bnh9#eZ@KbGAjq_ydQ(#p(**iHTzkBYYa$pd!g@+0>(><{-kN{P+x zfB5_?KWb5{K2giblkwL3JMPxn_tzalPq?FYC@5@%0+E!C`BDY)-t>9%m2INN55^VR z?72S97Qczh!4gl@50n)dvJSCuc3IFk{G`pPn1peXH@px-?u{H=K)J1K z&Zxd3Nq`ka0=@0c#j)k!1h%iKYWfZDSHb>pPnuKK*`~7zf8PJcmil5Z?3J6#z9(vw zW-vL*QFgLz2eTOsAU$FZ)_zuc<#X7-^}LYK1l{o9>|BZZ_w!#-!&I=ni>Fl=#ZQc= zave~AbJhQ857l+E-@9D4f2eQDn&4NM6GKML+OhYnpQ?;{S|-j2*Hs$4gqCmgMeQ1c zkn4a{vlz3FRct&J8zmd*P^$`JNvPBBWRlRC$+Os%1n{yOvo~_boPE+Sf(F%)(}r8c zJ!gt>9}RqiSCes+`{sh(!t*~U!*PparQ;fqY@dB?obt@~xg3sc^XgR_?L-YDSm6AF zxUZhyitP)tf^@uxZjDpF?X$Sq`tDeP!NWss1y5Xv%&&|=TN{Ll5i@BcU7Z|>Y#?%ex4&ppfMe9k$NLaUbX z%w^Q!>eU`+EXV^5x*LpUV70SX*K^?OF=VpVa%={mjURIxk&eOv=8MQuA!(>^eNi}~ zRO@bA4|>BTf*3auUFq~5e0+k96XGY029i_%cyau7OGehgPbsI58Xd7j0+u5&`9AgJ zt>9a&fx^P4i>%Cln-8$qSg?@h|DJXfTRbZb%C)9RWzMYZap%2H|gM4Ya%m zh(eXP$RmVk-w4t>8%~n8NE1U$s7wK^j>2B&vMrbGT|9GYMDj^|QgC8qS!UC(0Ubl* z!6a$Nz6%$K%AkZS(l^5J)Yfrjtg1WTi4^pWsb4r_avX2iT0(-7drNHz>?5R{?jT8@ z&mp4HsPZZ4`1h|??>jRyP4!()>nGfUhy(B^L?kh~PYEWoTbIEZRTk(x>xq33eZzhx zPA+)OMy5dD!c9k`>3&~1ND;u5bc4&!Sz|}Ya#bvgio?2FsgJ8-j@{eSz3EQU-RzSE zghoSl7k7N45zCab`4+#k8Sc5VsKDmf_rF*EeB4&5mlw^;*xB5_uB#t?G-jXsTHWHa zq5YVOm$dxAV%PAQtp~Q13!%4o-}h&gGo56?(3+Cs2>@)tA4{g7RRE%CY;IP<8Ba>6 zJ77EyiduK8!-_WH+tF7|I7@T_1GHQSrcn2b`Rpg5CnU>XHW-ySo%e!dz~(Gf=gAta``f_`X89V@c^R&-4GA7;;O2%#4auG zrTIqK7JG|L=yY(M=3tRJUArq&~WEIN&nIlmdggxJn`-16fv1t*vbjN&lm(7 zd3q#2z#fuInzgb1t-S_kFcuG86;byf z%^n%_^AShRwn=`Z>~e}V?8w2Ob&+U)e(Z01SCJEbUSLw1pFB?Fw%}s*@qxU@$(9FO zc5y~Xj%9akjreqK;W`-R;Sv#M z>q*_{_uGwfIr_d$`-k5=ceGCLwRs}`bKQ}Vz7dA}YK5&CwgrD0@{LS6nm6}L;}<(T z*ZHO_9_?-24+DeI9C+x{?=%9tS{rIL5j!(|b$4A;$r%`joTA0h(SA-2ViwUOM*#%V zJkIrYbUo}M!ChL~2%Xm|-mxB_HwR|wDkMt-p$94iO}~}^k6Ta;3@*ZUauh-HGopJh zs%;+uh>>RME=8mo!g)Z%(OYaJ@H)>+2mkvy&E6-Eju`wEwCP{@-2TqU z#bsq82OnCF=F$ZM$ZbR3=43s63M>9+8gsZF4_@;*&WiIEy-Y^Ug+2?a+?0ZIecFu| z(a}i($O2mjK6>;p$MR(7ernz@g(zKSs!|fH*(9bvg9HT z<;Ylt^}&%&zIP6c9cw#;@EKZHsJe%*i$miyCOf18S*=)v_>qcDQnM*y#4nKEY_w^JgiAl490t~lc zg)p{YOnDOX`S6ip!is9^uguoFPG;)Xp-XvAA!gWaQ6zs+{|eK+=Lzw?ymlD?+I3uv z8&3B~v?#df)w3E==XKOj1KDHdiZ0K9VgIp`x4I>zLKxNiyxW$ScbkP=0X)jNY- zPanoSQN$?kM3NcYzhFGy@j!9;TbcNqx2@Z%vH9_>*TH#Ql$4Oe815@*dsE3DWVfJ2 zo*+YksZ}jkXEr>V=KYmPQvRs_fCL|G%&6-UFS}8vrf_7WluUi#&{1FbItZ?8^4_F0 zLa~lrC{htFWR(ohZ@#EMV>UMV#)n5w-AMgxE3385%%kdD^`rjKUq5ZcF7W1^sxO7y zyLX>A7aR%2Eey|W0yHi!0k~$2C#-vbHK7#H-l(Ht`foCnpioA5)z`?+@CwW7U&%w} zd0wb!5mga;JO?p3tDaJ?ohL=HOMR)B;YGBE2RWlfA2jG~+lY3~??!F%Us{!2X;oGa zXkvi*!Nc+y$=a46g8vuC(EdLhgUIOF{EX|IIB*__x)o8tdN>NHB?0iC`_i%GGpBm9 zGdz@3_VMNa%xHSj^Ydw-O+d2QXtE~BV381^%i?US#ZMj@^-quU(n1A#;M` zFskk0MK@zp!&AC#_v$H7~Pyw9)vMbg4ulS}RpP-+}3mKux@X1vdOsl+gN; z`Sz~f51aNTuSSw1u^1Y&S|QL}$KgK&i)`-0&--wmqEJ}MUAI4BRVwU&RFd#>ar)dE zba=--?3<5?`qAw#H*E7PRJRs#PtV&BogB7MW1dA}u+P7JoaDPAphD=`8InAQgT1A} ztH1{s%bl-4_v(#8%gVxpbrC#wMLLv;_#FqtD|EFDuT3)g+B+WEa(j0BVx>}%=P$>^h%t*;m z3<`%#Quc6H{L#jG)?dKSq{O~#)^_R0FouRuuOqcDCXX|_HagxHD z{U^VKL>u(nI>3%U;XTgqtq6Zj#m=Xrk$&9`+}C}S`jbHY4WO^DPk>jgws_g=5aq~a znVk=c+a7ACoLIZhY2~AsW4%{B{!MWy3XznL>-J_wZgKy+$)Gv+8Qn%m@%t;8fYpd; zN4mPfC`2G2oNR2g^rO+tC$QU*38oRk=NA^fNzOLvp!g&7p~X=>LN(wS&-195*9UHl z4JggU(+R2Eh*P|{mu74t$Wddo4)HM9*dM6$%~F`JWu$oV7gISLi}^k?4q7Av)_w#2 zUB@wa0!l0QP%b0=53qrX{Fz^?kYSwd!O6w<&T)# z{I4heYhMM;<)inHevMD(KhrHpSCgt(QpIgBn z7D4}wW&FV|m!BT_Fj-o$hHQznE97?F#~A7^XHI`1?m8r1S@*PFuLJr+A@p(ZQ0HAv zc^CiZXMf~;ieL4~w0B?2;rp%=!|{LFR2UB~>oyqnif*UytP1-xrKHW}ki+ySS+pzU zP)CwODSwV*bkz14RYbmd=UhHrEAH&suX)ep|#qw&e%twx)i`gr2 zp6B;=j8viyO)rNcGP|>d!swrrL33USq+GAe^*j`}!${ z?Zvv9Pj80S9$CH?){V>LtQQ}g{3X#i*n1+l$9Uc6^($`Qg-ker9Rgmu8*qQ9aMmyalO_590op`Yx_{T9VV}`^KIr%s^3M zrD7POw!WVjsGFLdvqDQ<2yG`>SGqxZKULLeOfEEzI0gFR?_m{?5y%y7gTKpO+U5;N zdOv~}bz^gVUs2@G9^TG*kgq1GUSv0XgmD!Trn6rXYDM}|suh8sB3`u*60lirw*XGx z^Ni=qs@OUc4pMx^W90r&{Xj~sf1~_e+Y7#z^&|vViE%7X1Hei~$5C{~LUSlWbwx@a z?)J;Dd}JBjhdJ=Do3*3Cx=f01MH-1=Z-kBTj(qEHjE3uIn~d0Pt}t~U=Nj0&rG*_e zI*1~}G;wqkjj_2VediH6zsk1r$RHW<{4o!mtbIXd>^3hsc<^xLMTj{)RIqOBxVJT2 z=6Bx{xc^vhuSSekC{NK>6u4_k;*PYi)r51=HgPu;ivKZBKCZhVq>pGlw9B_{H1|#H z^X`bUG}KSn#bj4zLG}8ssWmSdaj*pV`}8j*?rLVg_r?cA0!8Ogu8@c!_o&8g)E85 zoEkpn3LC`80j#9>%%kbm2dguF_ROzaU)y)^>XG+cA6L=DmZu^mKlCLvPS2$K=hB1Q z==9zhb`;dfy3frDnoZ_n8PR3m^k|`yAMxjo17TmcOL<^3hJ;|G1Y)hsQ6V z>|Z4@JC!zIy?xT{oSCh|bHD#eWLqj~_B>p~kY{kGcMxv@b&$=w>&n{J;_}uikUAfV zW)=)WnuJ0g1feSQW70_cXRs_%jyzz>^wod}2N4qq`uUCo-FSfXu;R6jENm?YUkO2G z)rh>$@a(g^FQsXX3m>x2Z3+2Mol*foS;YgtzisX{ZaD)e=ojPbMY9m^l48B=JAD)4 z1oGWor>|n@LX{+Q+d)LT=0--m)TM6O-z5t8S`XJfK`#*QJxp>%XROpwfI|1lF5(`&0#2NK}H>32oKg}VE7zpm*p-tS(3}G5orgBCm8Gt}U(CMtWSTq-lw{Z!hxOzWp#N5u@;AZ3R@>yz3 zMHw27GNfMjtD&kjB9q)#_8D-Hs0?KtehnCH>d>FjEjVjQsvlT{F0RjvLEkv$tMNvc zm+id&_|(gv>2tH&beIp+_Qt!2;7(sQwe{BM^B;=YS@Xu7cE|7HuI}}|V(#43>bD-x z$LEIwWyAV>540e4l_yu`$9_h0Ax6fezPNVSG-reRvPyYBp=5~UT~XE!HX7!JV$x;< zqqt+TQIqB)iacfe3~oq6G?4yOD}vq zX6^49-H>f-iRAZfQMjKLSo>ZA$^Stwo!=G0xlaGpa|<}jRyVeR&Vj>zz`!!hvbXTu zX~pKWHA-1=ys^xTj+`s6kJMRk`>9{9>ay9M>DhL`x$D=n7|d*=UVg?i8UU(ZyU*JH zwJ>=NH#Xe)&*vd950m-bSvCcunm{?UwNQC#m5~}aGictMGvLlj0`^CZQZ!AbiccIx z0Ofexv6Sc3njL!aHI$7p3`+q*{V&04Pp`wVePHe&H`H|sm7kOi>%rj44k&?LUXFC-AW;@ra#BXiYfv{@Op(WSH z$!jcCgM5?2rQIv_efMlwYV@l~5iKaUVDHMRHl9=t3HIB^7ZthJSnziC^M9?eV&X_0 zSG1)($|6Bc1N={AXmbkv`Eh^+@IBgdm3sPn@FBnrP}8Wu5(v~{sTpzfM-&HE0L*9$ ziD3&IUNk*?*A9{8A=7)(=*@2Cj>a@}dy`z@N$7lC=$$^#GtbVBD=KV14iZ2}=)FAX zXF{gIj^QM~3TzAS1-}7P8+@^2)w0BeWL&?!kAQ!2Qs2T46-z#vSbab^IC!aJon88d z)lcGFCvP@KCd^CDdhJ-TJnV9aS)C36gOp6NAZp(=uZGrBXrX`64R&UgZ!MAz&oA?v z_TEUQpMU2mG^fXfl|Rs-H?6p!wGDUss7$6}XuaB8C*UXHz0Y%!x*fjPv>KIf4JENgsh)#( zuSUG$=S;j0dHk@fa!hQfQ_(jz@+sE5Y@&&F+Z0b+D7lgGudC2Rd6k2u5A$77;CJOU zB7zn_9#(n9!Zs$zP~WD`&DsHeWmR)-C6qdu=z0EDe~ zF28LfwG(t8HUA-$gyOLCU?%eRQob~@Pp^;Wxh*<9jD5h4+d|bGad9BaT0)&zI1u|a zai+GJ8F=?jTou!jzsr6e_pIFh*t*8yfXK)-}2e2(G6cN3l>hUUk}y#|H*TFcXt1AL#=QSip2{8FYYjk{&}e%3_~kyH&|UN)V-`sn&O{WTo?7xR~*U(R)5YC}QdR4IyNyx#ox` z_tI)&lxc;}RAI$cX;jVa1i%_i8jvhWj^_C8G8dXkPQbuMuaiF_{m^a!c@ZMh0jV4( z2v#{chcWd;Qj`WJJ#}N4VXO~<4z!3}IY8L>T^j!b4S+X6Jcy);4X`~$ z8Qd-b$r9(F`h>%h3s4{;Ve7j@13HBBRuwUpjG9b@B-bt1hoa?2YOPJ1{jDd>gqQ6X zFeUTl$h6#FMyhBsYT;F0(a#}jozN*_u#a1dzdCbb+Yx2eMU2D^evE5+; zMJtB6J{cD)LQ~rUcl?`Q$z55xaB%-qIDJ-sT66atJPEpP!=85Xh=2)a)b>x$)=jaP*wCVksY4XdD7_ZZ;iC)o<01gI^Z)eqm#g8T0sPWs*dPw{zjH~hZ zSHf{oXPlUhOJR%q*Ki|xuRiRx&2348QMXgsh$ChE%3_Vic@oqalKH?M3#MSNjRgtO zc&~u75+z?ysPUQ`KP!wR1O?G1GOpo!H43K3Pg$0_@RqRPe{&OJ-qI-3#U9iMOLH;- zc9G>WzQZ!IcXxp3{IV&Za>U^k+`>*=ku1r_;o?tUlnv~mPAvo8LMK>Qlbl-}5FPk4M$6)bXBQxh*u1M*-`%iMT`u_<3 z?Qo#DXrJyib+vu&tIj0tKWuKphL28cxbo3<#yjJBt;e~eJEZY7{GyQXpAnZnKbiH! z6oU-tm1W^}i|5Y0ro#{>0+vFJ2^56C7&WZ<9tX5I2uD2ORFn5(JTOVPAlIt3)AMRg zRk0Sh(4>aFgy|LD9wpzZsnQuej;DM%OJ6MVybf@&ih9;FC^UOs;u^BDfYB5HPrzPp zC8OW1`-#bK%y!N%hMO^2<@SK&L(TYGuO3OQOBXgQOQWgRs&xLR`Y1Hk;ltc(^2O^W zr&ACsk6$X>G)gZp%srm%dcWMziyy&C$*a*+D;+u7M=2x2>wGSW2yzlbk@iq>e-DbtJ zN1y&oe|=XJe%!8%6E!ySP+#8|noh(rnkE#VUzMA2`*DJ-izvB;3w=*>IRjQuDLeX& z7N_gLtV_83IjmTeD5hNNTykb&7zPtb7tHFju(IvN-ml)t_N-m+$XY?aP5)Rz zX?uSazN;4rSDFVMfu^CkWbREtyW6|Cn14DqA&VZAG_7H0vLryprH0sp1LH+1ox!?u10@EqlPIyjik=RZZB z*T&rKsy^A99GOH_X^RCRK^Qk9eQ$ybr6 zNX3U`3Z(fE=Ah|y9aafx^@5o2LO{k7#7HqQ#%z$ju$s9=uQ z%k#gXKlNR^!g(CUgl>Mf+U*L>{b;i0ry#ldm=tPDx&BrcX_E!l^!TgnkCWEi&~)TA zg(;D+FRi^sqJaI;@h2Df)4R4$QYSH!knX)Q>LPAcve5TFQBLl!4E$i1-o2;elcQMe z*4G!z&mvV!zBQ!hlgu?%bKnwF_`2Yss~_rHUM5060zLiK$5=;4$fV)d`NoDDi2H1^ z7p$3;%3j+Re|zs*dFWl+Mtzf$HS0?Pm!m-l4{HkZGv=WF{5EXV#Lg`1ItE1)NKa-f z*AG}_aWN`lkxPu6xKyvb82W<6EG%7~k+A zQ*Wo5g5ENQ9*WRiBaAk2^D)~EuE$b{t3K?XGNLCqlj#@r{2pVz$T^A3{9Btqg{%qt zd)w%K6%N5|!rFXQ{9JoOe2rEeMEkUcWiuyx>SW!!B{$lJ~LfvX~MgmO;bn+yDb1Ie-sDqb%;xzi-Z@-BOXm8L_}|y ze(4yY2fgwbP#_&7@+X*hv>0FU#nzNlC$S-&e2MY-SJbX}%v|sI@w*%7%l_9qFsqg} z%2%n^%<-a2;ep&SN1FIip|`ofmtKm*!c_-)7(ep@u1u2+cx;A61w=bZ6jGwzz2TIy z~CJ4fE0UZL4K`4hktq^sF8ZL~C>EvQb& z8(k$1R5+!KK5{~d%4K^SF}ca?o6sK5unj?g|AgIdLYk$JUQK2IG2a*1hF>=D!ePMv z*Ia_CG%&3@O4p?k_bp-&mjBiSkB&fT!13MID2PAFHJuP^zb3w*QEptz`{TdjWE#w- zLzjMk!t;NiuI>Pg)se=|)RRH$<5oH{Jl7s#sS3YdUHDHiLGyqvhCzn_(ZF#6?saDR_Wcd?MRB`tP6MT?ERvJEK>+ zO0LnO>WulIGQt>t7!JjDAzhyEmgaHaki1ge6kumq0HKmiF?6lp2IYTeZD?K;DjZnoE5PncSxr+ zoJY|0ah&98F_-sj$jcd%ciw-Ltii(@*>WV!gtoL;a!}%J$ zuUoP{tBMXtE^S>x)CYUAxo&!pbAA2p6xnW5iN&-n4dpq^oo~y%lX?fxJL1IK!;-hd zlHfU9le)-z;e8Ru3e=IvlVfw4#Hm?0iXKeVufjaUsy-WV)YbVUB|N}h;0krgjSgm+ z(m$vdE-nZu95ioQusCJ=74ad;e2tzvy%}I-973?9}YRc%ZeMos?t> z@SYGwF=O1jk@bEhD9cfb%-WV^zhpZE^>z-(5h_?ghZ04 zaKX8OuW1A7f&WycUmDs%47(*9wkwJ<8ECpP^33(7z3R!i+!I&qu%Wkmj30%;2Y_SD z{02!BKV}!OoUQEHmgl{?L)Oq4q_vi-;u@I6T#C2cJ*#;~BR*xGBoPH=$Hl}sa2{$i z+Y%?H?0w2+g_(j5J5$p|dds?>{eQP3|3{3Ys+Ke3$6foS6|)QTiX5psFVT0IC%KmsYXyqxW6AS+8em8OTDr-sXsI61y6|rpYkrQd+!S;&m5LT`e!R%C{=yF zV~sjdj^Z4Ln?n-ETf|7en0&vJ&g!rI%ubVI$X{;_BN*DuiALGc&dR~xZY-uQ8I8R)fqc?qEFT6lIMRy3EF(Auxg5PkWQe_{5UEfbg_Q0Bl+@5wh zyv%cFl$qtdK)|piaS{Ug`n_OCqawP6!(%zv_QlICjlfTU{HFnMiQSH#>^Bk7?$JN2 zW3H=a#?P7mspTy0JS`q4oc6!fJk5&^*&6+mTZ_Ms>Uk=+8PA_#zy5er0QyPgs;5&@ zrL57A;wJj^Ds|~3R2d&|Ur>`XCG)^#px`PY!^#I=P*ei`hr>?JQ!qET`EFCuWl3~} zPdB*FQ2!O;bp7(+iDvspa1Pu}w#d)(mYJR&*^u9hgpq%JX?kFTZ)EZ@G1&e))9z@SB`^EB$FF%=EJH*jpu^1u z%NE43?SlcLayAR54Ukwk)F{D<(T0Cr@fD>O&Dt8uubV8GiZ=ev4SEp&`L`^)p35Xh4s)_@wW1DIe))|-FKB?q zy{IkUZeT6G5-(&ce0oK2TaKxP?LVkd|5Rs|RAsFCUfD9%irx%%dZDd{!EE?gSKkhH z<(SO9_3wWOQ>uEeH=gR;zi@R8aRr~JHVs5vc(n@n=&uYPVj4U0vIKq33n%`5E)^>h z=AUtgx?d*MXL|NC$rydM+q(%h zx)gk_k@DG{Y?u?Fx6C*q91YsMAoD&uBHG-bQ+ZF8qnjV1QO*-s^Z#X9#Qq;>vJpOY zL_MHJ0{9j5r2|X$z_RcFxWpHFhMWN)C3-PF@{4VuTCC`%_g6nTu6=Rf+=nTe=G(3y zld&aYP7Ez`70%)L5P4_Sxo+Q+yP9dEgQ^!dRZVjI;)1F<&;l%0d z8mKkH$r=yb;U`CYOMf`8`#tnk;S?&&;Cj?MwDL73XHfR4tZVyaeOyrEWMk0bojURt z>@<$Pm%OI2Hh3fRm*@T%>#1v?OOT^l_4S?%x0LiX1Y)%Dgr7uln*xTjIbr($3>SI= z`Ez`Fb_quPy^$>i84F_vNz#Nf$(UKnKo@>?@N%KpWnw6l`sDZ4MRm(TX( z$^fJlv&Zx9xz1Gv_;kZNmi!h??mIUmEjHr87$QGZm`?mdf|XkJuwmXY=_HJXU9KBx z#0PO++Pb8OqB^*%=14e&)w#A+ri)9NNAs~b0R8GqfTw7k?;iE7=xu<;M3PKSwaIEu zaXi?yamRA6d8DsO3>bQgH4cD~p{9NEdO*m0L_Y~df6#RYLeTVB=*E2*ygC|N9=!TR z+}!=m+@Z4JRlN)U6*WV0fa$e5cef*Er5~Dm2bt78w%)3AY59^6cjmeb(?lVa>)I82 zgN#|$`Ym8MNh1Brk&$ecA~74NmD&Y#B9rS0aFtI-uthn=5ocKnB9<3 zaTU?pcg zB#q6mS#aQ_!Y4s)`sSg%NxQ~IUxo2)^RTPYzvj7d>a4iY1Us(#;KtR6=h&v5y*;%h z9|s~x4E!|0@e2?uF3z1pR0$%DTLcAU4`|%siZUau60W6db0%tt zh5CeakkS5#d#evrot-1emu$-GuASztJn?HE1j?xOMxlnrP@%q8=rz3c==V)ChyeR*iYI`I1SibK*Ure3zoq)1j~j2RIj zAMmT>R2?1B$PCl;+0}kZ0-Sf2n*!1QHiT+TvC+#mN!P33CzG+>ae-xnp(hhxiP+4z z(oY$U<=VV}E4J(#Dqfm32U`J6{BGb^BL-|HczN8e&j>TT-RB=w`0*e4yLUXN>ydZS zt+M%Kj@}{O>A~m3S41wkND$w6V(xK`*xHr;di%4^k7q>p5WKBN2Ouxw(RR7f4vDxe z*W8WWY&c*|KYRP`!NdO)x&qp#4N=^xq0a((TAEH@U}x=fcAxm-yO+c;vS9G+SxFa_ z^)9BYeZz{csjU^Hf2T@ttwz*fl%wY=gg#l|+(UVf3WFY;4Vn)0W^o4r^_sPt<G8MsvyT%-3m~O?_mSj( zjLb}a1+^F|z}zKD&9;TM=o6tvq|K}1RvNO_VYpW4u8hoZiBFqFsjoy5-92BLui@n( z56KS^ksw;i_PI$c#vUbLD@C8FAHAY~V=ChORFB-!BsEoycP6J~vr}}8VD%?Os9`_n3zfS@$ z57)Ydtf#zVDi7=(+|?3tBI{qRkMpHFJJw9zTq%D2!j(st)U)p@>tFf4UfPhAxq0^n z6VOETrD?gX&d0Hi@Lj5uxo79rarN@>qZ}Txp}zn+J`jYCV+{FNt#jeQLK0lznBDhX z_MpI+t(Ie_Nn>9|r8S+VjkueSHE>>8=IlTrd>Asu!)8$ru0vS-(g|Y9WHb8Mhcdkm z>7J$^N$33;0m>IooY)}OJvA%2X<#o2_WFF zSy+YZvXs;hse52LH%YbTr|cx?+a(~+7emEYb}BL7C^A2zTZP$AxDzCIm+O}NGG@&P zl6pJt-*iUWPc4*H>c!4tE_D-bc08P2WOpQ=zg{3EviQ>g=nQzU@ANkZn!q@_h~2lS z-1ol~E)9CUSSa;+)f@keqk8VPR_8Gfvkcq*q;sBQn~WMXd+GD8u*q7IF!P7x9D2)`!tR z_ptPAUwer-g(?rJlsw3!LsGtQ0ux7b8T0yNW~xOhLa8MD_KsBf9q4>z*oN3=@S<=wW2EHDe8jY~C@=GohEl-B!M8JG;yG2fc(* zyR7s$(8x0=1~Mqyy#kw_7el_mnBHPRJf=CP8iE|XSISd+oiI;V&sg(5I{OMpJ(5G4 zySg^M>cj*S@Rw>GJsDGx%D+-9N=LiQEMMPFYA>aK89ao+DpYk0ZwqoNv5yX`pZ zu1Fe3PTJty=X$^S`wg_k?k2ba!SCg&D7Wnh-EoQk6e) zQ&5LD3#0Q8Umy5K#B-1;VLgYw+0h>OsiWooLUeDcD3@$r^t(#K>RVH{cS`N}^uM96 zgDkX)^rc)(m^D|!&Lj^ZJbW~8Mm27jN%4rZlw~{lyjJ}~EnC;+v`C5=fG!IlkoEpq zt->ZLId{o{!O5)cA}*#kGEcKHXFH~mN-ytDc;$t-Mt(*1r-bn* zXh+upb<3XvrN1hY?9QV`70>Z&?I)Ntd)+=paeVD8Xtd+^zxGd9pMEU=@w>;e$?lpS zE+6d0biGn94|udPIgp3r!9^LF#G=N3c>o}z_z0cQV0{wvDb7CD^P^qXC_51_9f2pu z_b0oI!Vuu&oeiEC2PZCX`2x$4fS!Jby8@oFBPw$4%|8f$Kik0_-Ni5$h^`Qfmu8#p zy04kg^r`xaV6*Z)iJ9XkQYP%4xzpbUWO36(D4|qB;ac7~P^x`{>u2XL;eztj;6;~sL4*-Ods|StnFDID*l|`7Yu2X*MH_)crn;r%wtCN>1ag3jV2yyFw=?<=a zsD5;7cJ7N;3CBauH3Y2sORibjbbunK&`@N1NzhVIV6@Q1poLhHE}4_nY5G)WjlSA&MpNn9RfCr z%aT9bKK>08Hni@n9lD-ezi-c;m)sIOtNL-CxFQI)0bS<3T|;+4usgiK0tkPJIm2SB zls|)c6*p3q10$L%dAdcip2VLFrXVay7;18S{C&TZjuAIxwe984DOtLGT@+(-3@GGE;_DoZ zl1PX<>Vv=nd>f*^^?hvd@4`IZ9zWV@c0lY_agy!GH@Sv_T)jB+na45@Xhn(Y>$_L~ zQfI^t1+k*DZ0+x*ZMgewwA++ zBE^;O8Wlnn8j{TrrosVeH%v;y;Bk<8@!+98%ps14Y>fWx1hQ>6wyZaBZbET5y;*az z;b2{<&H<@}pj^|r=%C2DP-cYT@(dJ1*oV0=-{DN0Llk3u>u#{AGMfDsb?e@)lEBa=7ls^Q-6jVCe{Q_r-@e`LoM!7gC&#+{6{}xwg_d zu8_EbLm`v5U?s4f%7Pt}+&gDKCl)Ioo3r_6x#CEJ)s19P+i3MKEde&C`DK?{uS%s_ zv&U?Fm2bl5-nvqTyLD~=CFnYW zMTaTj|6JimL?%(SEIOt8{jD738=MMS(-gD;pipN`2`vqnOI{*IBsz0l>ntWySbQtZP zh2RYeL+8=_LvFsri*+)AQrk{1-nw?Xii8ijsytM4{t83fTrr2E&Joe}m8A`zWLLfLqGD_>V2;wmYP2S1ewO zLh?`>>X#a#0)nz6?54?CWYG&BrcRv-5`irWUb70S!TMf#KbBoV>|Y`7up9t%vX&#O zNKK7+mH1Qnt_ZG>8Fa-3WFY{q>mXy#>CF!E)H4%JeR&i2gBh*U!l%do6zJpsq3c4h zsULz(i8XQv*R5atr^d(Pi}^7NS&Rl)A&ad(R+>Y%eCBQpFk~gR8|vu%jnIs$DIGKc zUOh-JeZd+I!9MP&-EV5d1s*>2?a&+;H9ilQul^k?fsGHDiwIRdUD6(Ult;*pST~kHc^bJ3AQg6QaMMK<;vO zLD5Ba8S%1-Gy*Hx3k3jqXXA++u^E$cKACHYKC@cOWi$d(}PE)5Z7!@jvPj|X3L zvod=_bn`1oU*Ehxs}U(F>V9O?;HdA(o3Ux!A%R<+-+8Se9|$iIs8yjL(?0KF&M(F% zHWkh6d5T5ZLDs!%@7N9Jb0@3VL=oOtF_nCVY<^wW@;Cz<6zDd3o6kc9rH`2HH3eWv zAx{+&|J&&Auf zTF!+X-tEvU+_3R$4gKFCgd_Sv1?-1oKeTK?xB=w3Lf>dO&~kkVYq30HT9NWW;x~$; zJWA)RFYwmOY?Bd@n%gbbp>xp0Vc~Y~YQ@ro|Li zsHc;(8{l3>R+btDY1Q!ib1DAfP!`P;7O|i|L?$WhBYz1Jy>VZ<=QAnY815`iy?eiJ z{;|CivXY4$wU@ZN*mSZi;U6 zS8U1X9u$6=c2aD`TF00NY}AHghs%;$IY9tu!Ix3c;;lSHgAz|%D92}puW}rl-*j`6 zOAeV;fS;!4lI5fM`(dC)>Yk6+*!N8DZ8161&lZ(|ZVDo5n6wO$(>$jIx7|K@tJl-@ z-Etd=s}d~(ag0w?(=HH}-BMlWn_D_tdGt^2BF>o{2kzTZ+tur~HXX|Gw$(Mw>N*m( zd7laWa$X3O4k1R}juWx20s;K|({0lvitr)z$hA66x|}D=GDVQ3TF8QEk74k9N0c~v zd4h;^50saKBHGF(s_gYjGtjN&Ory-Zztt}z+dEZaS`NDwKDr^ZQBe6jDI%A93q*rEd*R{Oq6Px4ObnIgeosQRtVPC3SBlHVy zB@!Vv`O#Hd>UdBs)%q#RYar-vAQiuhX6O?w{0s-nL2WiWoGG86)XsDnfVw;x|sL}_wHv*>mA(qm#l%Wp0f9a(GnV(kR!fPCa( z*A)?^;hM*Zh_>+;3;S5xlOa-0pK2k26hpNt3RCl=zLoo%+S9{&m8jm6%DQq>gDx5< zgsiz9qi9oxeWaAM6;M}G&+zr?poVoeKNlU`w+W<1DS7wKG#J`Cq`C`=4L2!s)d!yc zK*>Qq^JyN>RhnU}7QU4I3=y9AR>*28aj*ZKv*!exgpTG+^ZnXtJrxwR^1#W)p0vnn&||B^!hUmziHR{*@}cFv zE?zq(2#b9lA4jwP?vTOaHAevop`Ql4$h^x#5Cm9@{D>9AAjJOUn^-E@D^S6jCxt`KZ4qW_(^9;0d;nk`w=+WK7za`gxN!3<&eBASBi$Bd|u+2Tk zQndaluB#F@ak42V!{aRy`3|*As%b|$ZmZsaK5cvGR}L2GQU#JsI6_{`Tm7)Y^fy%g zqvxFflS5oO-C}94GxelArsS2f_Ivq-C0=F;hUCMR%y{HKR1xuU$j0mVO1-uFtiPY;~;*~hYhiHlGMgWPeTfdfHMaI6yb<3mg0oTOq__DT<^;D9dOg z36Wh4DGE^%T9~p{wo;ZX^FP!3`_KD%n=$juGtYDHx#xV(_nw8yBIywDnLH3lj^Q7! zdw2JPPUhLFZN&Hk*w|C+kA6Rv$tIfUvnHfPkINt`9+$pw>qs4W;RHROFn)ls{IwF- z9K)KZTd_K(Mk~Q_mceLY(uWZnDtzMxGEVgu0m3W{ik@I3?j0CYGdKa_DhMY7@^}n| zw>3ax!DPXqXvR-cVU`!oNk4fl4?4DK1AD zCJ?QW0Pz}o83}9E&)@G!S+~jZsDYK!X^%rfKSkbL-xU3$G`%dF!8}WsaV~4d&~FU( zZreJHqkGn2n~;CsfOOLAA4F%b7g-`$$RqNcmeuPmScX{jCk2%CoetrlP%uvl!gw>+ z^3L46=;r3o!Ha(PM~u%KlfAVbFFrjp)A5t=eOGkUIw($sv#iRt5%sX*MM)(gfi`XM zvt;(OpM{xsdUmPUv`GH3a+}k(0~KbGex*%5J372%c(v|~cK*#9lDkuOu1KX`+39Qe z(8IaX&nI0lPbi{u(oSzeZ8~_LAP?&Py@~NUYT1BT&%;4O)9_dOzbSRejyNGqH?q#ehQ&Tv9CX()MMuTnMi*=1psURnj`gj@yNfDxOYAMWX zOT7*LCrH0A0m(rFhV@Jk09AS(HH4ki)@5RIghC-(CK-S@Y+}KJC`fz1dH1zjH^g=Q z6dto~zwKY9uYO*RV~u%aZj~`lwR?1I##uic7A|ucH>+N93RA};m8%Un8pmMETkP#+ zVw{Fre@k{Lt0x9s&$Gt40R7k?=e*CCIBBO|=GblbywQJcU95#!w4r9sTuRn1kD@FS zwX*=SjJYD|gv4}~Xl^#3J;X0r3=1sZSstu54vS3@gBDr00uHT$K|$o?o=mbJAN`D*d-~HjGSVd?b@2d zdgxe69OG!g`6+y7``p^=B%E@|2Nwuzu79P?)YY>NOy>k~wFj+3mb_T${!*TPxnEOn zQ6vxQ59I3rfr|zh4R+13Yta@us2zeGTWE88%1lOx_}i|Slbq8ChLYys0?i(QI){*@ zX`GDV>Jz*U4Dm$>DS%smQDOFS7A5}+%xfrk{@!5p#cuAGwcFyN1a{SQP1p}UT%AbX zEWXS{C9rkq`WXf2{q!ZG#&%x%W@!2?ug6P&CO_eh3-$aNxl1azL!RRr2SLFzR%0*Z zl~%K&<4;@^Q85z5t8LEC+O?4@Dl{ibLRTVg0GxTdi28=B+VP{f{ir+$RU4q}3HS_=*|wcV+fGj~6%vdzqEhX<3*b3`5B9#(nnIQL zzJA93Ou^ob?{NkrWzX>aRmm4Z@4kU{O@_}-5bbpWXjM#N2>*5DHRlaDvxUHGl zv8N}kQ0VfGeVrX&pALzgBU(Oo*_TsmAKS8Ov2py$E)!lbr&tC7CUv2#{_#gsgn#>fm4Q*)&X zA;KYnCGWg-ESRL|c+A+kvEhhJ_{3om7TXQF7MAOc#&MNnn&JSOFlYBTe)zDOr~|P^ zhkcj>40v-bpP1RDlRTGN@AiA?j;7z@jP?x;<6I3_&T{+g|4)6>K&1A+7LD+QL6(Vp zSUU#lVO)AW7#FY8)$YN2do7#Cw&|#FXO+eWKwb0i5X%NBq}84hXdKRbp4(Lb76$#LO4R)xFh*ixo z?tlVp=rg~pM!}B8+S3*<+?v+Kyo)6_-rt?7>^s#gr>A@W;o(UkZ9Zp7Qn#{3u6se2 zn4M>Y+NRX4L-$3@UNp4s)J|9R!6w`1b$!0?Y5`mI8ztqA*4AF{skz&?1@9Zx{FJP0PN)61 zE5$swCQH|oc-h%DgAoIv~?Ty}Hc!-dfc@@O1i(?YR8vmqCAHS~OkhkoUYQXS}im((l zH5#gysAAK4GQau+kd!MVX$WPkMKAy1^!{&cpXp5Cs5Z7uABVJ%+#zrVe-qGVYgAyo zqUv!ERv*OCA>SAg=l5wazHb!)v%>=T*Fz2d7NNoJYYr=RkoPnfV&X&h0`sP!o^!9d zRPNp1np}UyW%o)$KriFB!w`4YzsBZ3!_$IYiI~w8V7aBQWrS*))%-A$*&c1F7qLd^ zys)=LJ3ld0jst2!!Y}>CVV7=*K0@<2Q?A*Y_m3GZa7&ztxFA4Dwt1m|w*Ef74atvu zy`CaymORx6TwRCg-vvz*j-?N4lyn^GT6=1uV6@*h)2=7rsplWJH z%fX&)Sigy!<&MV+y=-KhVfR&ohM-|0zt-t5aar-b1&~7LS-@dV`{e1 z4RxoO5;eV+-F@)L7*H{rKjsQK!5ei@brgrLl&A}&=HOpd-h#>@Dv0%NvQCu+It;xx z>+n?4`R8odlsI4r?DrO$nyxsV8so}~a`4pz`cFL=b$T@sA_a&|UH6)+l@6!eM^sI} z>XJ)JpEh5*d%xO)$s1jk zjKn-nEHvQA8~0uH3$HJhnDQsHqr4}?Fpl{_0{)TiNoj)z)cvMMN9&)56b_IbN|jDr zeUCfdyhW^3nAiH8T9pvn=5ZWivxp4*SmJ-5HC8EBEyFOkoX;_k6{&|m#*BVVsY_Bl zS;b*p)64TYDB*dl`5ZL9{3O1rHRk$72h&;b+o4n8z1%3G22@bFQgWqr(3<5LjtSh& zSh2wE8*`E3N74oo0pr=6ih|xMv+{=#Xvg5Y6dsPlu>2XnQv&a2XG1korq>5succ6P z3#O=$d4ANZ%nXcC*fsLZxN%Ns_zeT@-UcCi5w z2f~_U#X+h5Hdh6`u7L1^lr?`$uWlYHNy{vlOGyQh_+d=bwR8*;u4^n0Ind{}T1j1$mqt$|SClC#6+r*{uuTtL6~h9#l1Q(Iubf zTw6E1XEU>klaSnb#WPZ&SH!rG?^bQJD{5r}l23nX0`;zGmg6fLI0pjKnEfQfIhu}z%ApxV>aUZiG&R^VH@<4@mc@*{r{b_ffBSwQj$2^-HGc6*#uZlx!zMIDYQsYm z6*=FC5a882KdumTZQ)g9!ihIr&xL)~FZ_6SXf;B!FZYW*JvgjEk?}i*hFwO? z0_^#O@Z2AO-lincAjRrWbQYqmYsD9=%!pggaa89SuE)A`&sp9qZ8niIhVs1Zkg)P1 z)Z=Q;NWE9k82g^DPuS?_HnIAHio5m8LX)QodXc^Dw5@?VQuxajIt>v%N0gq(@obm6 zFgoXoOh1fsdU*^a1qVdp69v`NH^6;NobJkD$W)LOi6p}H>E^MoHRIi@^_4~?ICCSY zqmm90T2{KP)F0;pMECC@*u9!=IX;l2n-E%jWNgZV!A0kXIFsdTsT@eyQGmfDGD-D! zoUyJ_R^H#w22K<09@~L$fhgWCh@!DJG^K#ZmSmU#0Jk#Odte~NlR!$y;-)wZ`2t`D@_)o}*UrNe3(){mAtl2q4@Rd6*)jFCprY27( z7=6wB5he58_&RGX9V*)C!Vc-9J#Jhiw3aGO3&iwtPqI~tVO5O9KvPBIwx_$y4%K_0 zyLL)Yq*Mg)t3ia!A;aNgMyWp-Gey-uuT2nX9OO)qs054M9K~HMr(YZGP^L3lJtn0& z(mH~*kbF)yIjM2X8%Hu$+^rmFEkKE$etv-s(Y3dI!0|6eO*imd4{viI$Ya$NC%-t% z7;v%q2}i|mGJmlTg}22guJ&8!@oMbWAOtGf-il!3zspJGXinnWO!=BI=7aD_y#{ovTH~o@|t&zByn2&232Z`IGSHZKZ9m zza^jjYjf@997xjokcJggGa-MIvS(&dRfc$BVIoWE;7}zfYsG2CQdKk$8!cuj>?Rhz zXe)wL1o)w=FFW(6q1K0y5@?E3CvGzTR0?f`&w-k`wgvvh9PC|~UK?d{DedUZ642R9 zP0f5TaJ0=fJ&|wVWzN2TjUYcMLdvZo4|TAPKwpE&`XB2d1KI{2%%UFp@H}BVa6_Eo z1AS0E7)6X&h9%=J@E>{%dxjyyrlH{6{LE&%&$chBH@w+)h_l>zN#DC*RARO0qd*!< zNVv>T3%^G`RR5niW{^!P!IDyIzWCi-_Fv-%HxJY~T4JELH*S4BW(2`aPsE-Om2))s z6-d)CXQ?-Mdm0O|bw3g=JzsK`#aKp6Y4z(8XQ?JO_oNIW2^c4;WnOAqd{$mpVYJO! zp)`|;$cg+hNN5|_QbFw)!Wh$z>eQPg4Y5gyDa2!4n@_)=y{!-JwnCZ()R zoJff2`muOctC0Cs*8fxeD84EDA-pNd4&DpQf7(SE*keF6Y+;MWG!6~sKVK>_9l1a4 zuIR6N``w!a`PkfkhaCHd#&Jnh?eKr32h>ktN4~||tx^4=G(ULauz&Jc9s9gig6Z&N zJkX2~K#6ssHKvJT7Zgw;P+T(LdWV@N$zUQRYg0*fWqF62U%KA-JlbiNf-Z8U?Ok$3 zxl$-A0WK?&p>yq`Tx7}pdw#lSSUPhTCJ=_Q9-N|Wr4OWwWOm=P)%SOD7#xep)rr=4 z9Wys3$lC1-H8s~XKH)gGPGDl9U5_=@*m3+v`jbwc4ZO`?4RM{?b(*x@xF>AbZ5-Ry z5|5YsR@Ax}8;bkl79O+I`s2V{gb$!t+>WtZ&;Tr0Ed#})_)?%Ki-;HzaVMJ|6eY_p zj*jpl{GnI?ei)uYltO%Zuv3ZnY4A6Z$~mzfHi;ueQ2`815tCm+(&^WP?H(b|H2$6M!k{9oe zWZnDa7IA!2v{B^ZB%wnLm7&3PUp{2g%RX5|Jqmd!53PdzK@8 z`PwpRaMh)XD*4k^TxuPP7&xTILx2KD)$v*L{r#e2)%Y1 z7JvH}d@}CfSTTY6FW=O)OT#{b+;tDt;WE;VBf1Q4O7pIcF*2Q)QdgJX=mTXo1o5a` z4XGsdg1q8ORW=Kh;#H729I!r~xDkB;D@cAZKqK=bny4YzOjfSf1Q^_XsZQsC^030j zn5Pnd!;M(*kXQ?UbnAXU3NCb&cjki9xrtoy=gz6KYo0NGw|E7&fBuM~nRWn1HI~J6 zWaJGQ!0O>=AsO?sMqnuh?u_s_|A>C54HeI#AG7NgKSWf+#TcPavzH1Be~9m)0J#C$ z>_$~Qz{LuQRDn2bP3AA~-=Me+hameA28$U63hHvO~Ku1hB z?!_#9bwb{8_q^?`{kLYI$ks~<>QU9RY`bT5B>o`2JhsQ^aNSbi1T+k1nSFC0-0h$V ztL~AD9a|@aW_sV*s9uoYnJo1>B042yAB#rdh_D?UV{x84JFoAl<`o-OML5tUuM5#j zB5Uo-u0-1MIMLZ~RHHOfz?s*}6weq!xd(4V$5xO3$Q@kiSf4OLcA%wL+xl95Ew<77 zdRvY^)y$4)m2+T;6GJFVVs|dRlDs#%F_esVtl3x$Was<8=wI zv48BI89w#vi*o?gVV=)W@&4WX(F>OlefNpE4ahb?k-g-#5q`17g@av&fPN*3CSu3W zUO}`68OT#m0Z}gvc&vJ9U3-;#YD1+uxSwL*nl1!fFFejzSv#Kq1X@Qv$XZEX{KWao zJ|+H|2XLfhiDwBzITBf4KC+RIYV(`&T8=FIO|SWLvHS#A(~ebd*r!519S|eL zEd+)*l8X`xc2J|E?$p<^r^4$)B0nE*;j(NcJ}a)n*m-=grXJ6X+*OG<|xk1@r zzTp7ar0~F?F`>;@afGFj&9*UzIX)2nVG*q&P$(M_H(4CP);(<#XdT-}J9XhBDy%ek zK>i{8O96e9Q+@9HOhkHd&i5xrdfrKjc>C~g?wxVtuYIc6C*gKT@1cHSFnqlPnC-tX z4OJg`!IUEEdO4#3ceMOc_OIy=UD1R`DHlFDLe8E6q90N$OyRxlUH5BR+spUN5|oNG zYnNbOddfy?5|2AK$-Uh!#!d#6!#O|uGU|N1b#~Nj{w}BSYMt7myg?>=rv`_a;FD{r zUr|O7>!9oQKx`6EaA*mWDs%l~O=}h~zuw|h66{53#3PzWW&O|jziiy`8$WkeQf~!p zTw7Bj$s_9W@HRF?&B!LN7B9&l%ln+zoc_>pdDPulz4^B6M^MMVPv}$T zF^lUcILf*eCrpKS-%c1H3?*A(ouD`{Q8XAReibm9Se(4`BO4GBOHV|CZ(?bM%7_ic zot|W#C#RtI`%GOm<&VPWd>6eK#jku^lexQX-+az~lKkMraQN@PcX1@xjzy?={J>Ub zI2}`rXI3~7y+i1el$!{4`ICsdT`Ym#lydUedZHpp#B&>jAs#n)S6tcYBixqBd2>b? zX8ghK+3g+f3d#}FiBVFb?X2aVLu}YMXvMS9P`ZoEzCKeGedR4xtlj~$t`qF8Hshir zBm=(%CGFycZj#H79#7W)mR+QCH08uCfCz|;D67AkDp<~QZ7VhW8u-Y;KL6;^lNA9d zev@u>k(H>jz~#fHUDy(3mFg^yjw^T zI+oYQqG;Jxo3t_Ss~m2O6n*B_4wh=&KHL67mX=>nel+q-3V$!E?U&@4A`RKRHQi3B z9CoE<?|!%N_VQZ}C%0x9s0}5*!}kmD#y*oRrhI;npBHg8A46d+~H;W(=`O)=Fzb zN#n*#`IUQx9}G8d9*t%sUmKOqp5~3H(U7;W_+!jUW$s!a_GZ7_qY#+A_H|j4Ne*mO zr*(LgENsnM&5c=C%t<>-ga(5MR7mg`@t7^xy*X ziWRr>sehF*hgT%m*u%68OOtf(H)`I$XdpL$Dp-{nYl{?p#M{<%Cswy^BtZ^l7q`o~ zZdzUTmI@+uwMnTA1twlVN{AxoR%*D`H;$iSfqspwGEdi7*Hc`N>y!(Gj;w?22307d z+O#jx9Yv|g$H#|m!|wUU^yBdmpY}nMpEYn3tg|PMf`FBXh}7`vgjL|RzNTj|8e!JI zwUh7MfDNenYl*k*{&@U=od)eWAJLT$Cf*RmlIdlw-EWdPNA+@HlY!v7ds#t4hE8Is z+IMj1dmt*U*){)W7*@Y9FRB%`EdDmtH`9dD%d^+?-gb7wv|tH+vjgjb(QPhld58^- zwbQhlX7YLKUA}9-U+r9jhy-@*)t3c*XC!V1p{{IpW*){`-1hvdwzvGPx{U}29S+dG z`SV?VFNi*Dzh3iP7UxcszVY#2Po5SsXl&#u-pnKkGO#T+=xHImTFb9E-zYzM<$dFE zS=Asupg^^d5vC@9~`9>$;a z_s{BE9)8%ps<(3){kD{OJpkk`R(Yl>?8$863xm((y$QzKyUTO)Hiy3HR3(svIH)w5 zq==(D!j%f14Z6BN=aXnt!b~D~ld?mOn{LnX$)nn3D;5^Tu+6s-=D~!=$>dr!5G{7l z!Q?(`HkJ9N*?nzz{80`ZwM1rO?j%<-A5`F^;ILt+FqB9hmqy^EA;LsnDZoX!|C|1NbOG;dm z{b`|i{i>(yd52xMcE$9(bUpI?+)=V1BDB4Gg;jX^O==$}WrcfnW8EzXayrgj|GLcE zi*V#&`bxs6)E2fWceGnq=<4M7WgDj$#8dEEe&s5NG^fwk&acZ!92q`PrC>EG$d;$| zR3N9xCEZ>2W&)1f;vJ*T?7@!CX)0fyv$9-$s#=!r(V3#+g6AGl85O2KDELxfa_M+^ zX2A#x(jbkL?7HjoxTbc$=Me8bM&$*`h7lOtxP7#|85jiTd_;Tt_LCAu08t!e9Wt&O z-IlE<^F5Z>Mbe+|;QrV*^n?;m5lv_d==*L$D3tb6G`Y5z%}G?eek%0SD?vr_&pfo~J}&I> zi>LD~RGmCi$Mf*j`D8@5bMmA8Y3$!GiMoApqtGyZS3L8S{+l%Li}rU|uNW;dQ3-o3$EzwQFH@ zZ#3H4^kTRI$~cfvQc@@`Zb&p^@<+uM6Ow&6UPC`i`sDRuj1<(O{3%>rWBJD0=&+a< zVx{Lw2<2kVYr|WSro(qt5((BCjk$fL2X?pNHee%gUu3u<;7NzsrwpF|$7VP%Vb*_a z23T_>C${T`Bx4K14cLnljO~nFj2#fmVa?EI>}FUn3}O7sJ#KAEZ#VV(xK851r?Jq4 zigJc~%(suvqSBUp;tObPZ|onzd5qzInqyRq?T9~G@Q_9ULp+!^Ca;ubDopPoc68vm zAayT`={`B<8YtY(4^u3p9fF)^vW~J82}wBJ#itUl1ni5>{;{4gqOv79I=oFn5wVzB zoiZfgQw@md!vw>Z1q~9wGzjkh!DI)Rzxa*ip_bq`zFaE*X-*ZoJ%sDnjY=KfA^qt2 z+{K(5wc47fW&V+|4S6#%|3ah%eJDBTgD9+9n*s;t5&0IMc#Kalpk$w!RsHA?0yh+F zoeutckjYjgOGSMWeYPfcRlt0C^WyWrK*qcD!Lnj*i_F(qlnecdvT|4ccu9 z$oUxceE1nYh$XxqD+{;KfT?dG_hVfrY2P-3qp-7?9zYo6q&s4zEoVKI;nKF| zE-&gx9L!^@riG;oGJR^KX!&xu=)#qlg~^KXLcA6y^^vSUU-1@*4yZv!38^Q}KOvgF z#1=ABEsXc{fXfMwsc&V$_6Z}nZUZNCrg|&ojxw}z%DbCt`sYXT9(cnN{-;?MfEOo3 z)467Qgd0}q8_Cgn1^E*yTnac143CJ{@*|IP6O>z{FS(G!k7AfI>2X-&!3%hFlr7Y0 z>3eJPdgwp4akX_$291aV_rQf+hT+!J`@KHNI0;lLq!R2M+>fI>Kg0QNW?t1l1Z)=o z@_P;t(oZv{`ozjh!O|dP5aGwnCD!(E_*~uR({aj~Pb|c3q11X>Rr5gYAm7XuX;v|{ zy>GjgT+~18J*xs=^oKi;s&10dIlctlUDbeu3`aO=bfo^%!%$)D zgB%XE^$^z6O@dz&IgAI#C;Yx|L}Y~s(z&v27FqZ|*X`hhWv1~KwM!Dq6Q!Ags-1ebdSn4Mg3OK z=(a|uSBmm(6|z#Uk{KJ2%C{;mtm@O&kc_nq-0ZBsk)#E)$TUk*s7TE6p2l|V=Ny#B z{lA76Z~{3fRraq65w}5n_Qx`Bib2f2gZ-6Z!YE~m*Hl2C3%s-S2)8 zkQk4rAmw0-N~sXQaMYM-R_tajC#0nUC0|&g!XFP3cCi8B=<(2w7BURDXlO-?38wk= zA7bXELxbGN8Mcc`Ry;&NC5M3_hX;w_nF;F*Ymf(3`FG+*i3m`Rh%P(x6h`uf2Pk)b z=|KkwBTaMdWMOid<0%Z;{synh3Ll}7Ru+fl|k)|btVHDd#1f1l9>r4a zMi1-bN*-SDkd~N0cQG&jqWqJ%*^`yWlDc5_@9=L;@3rNoev*m&RSTP{Fjh;ML^BJL zv4cZAUIqa(=fp4Zbi}xp<#+Exvu;*U3@tJ4YQyv3)M@Y_vIu&!veH_?0n)QL(6vYi ziDK)3xSr;<2we2&^b|P0|Zz)W8U&`EOdO^mA{uvbajc-l28}?*~xnhk1=U2s8a}3Birt zly!!;P*jHb_k}&qRfF5>{G)iYUq|eBYF_BOQTM@nq3^GCfLVxaZx?Lt$-U@p4w~EtcVpmYWs7?7NQXP zfGT2?)xREoH?9YF{MtAg%e{tneH%Fn{1YnLC0e?|OHo0ozatk5qBPjqH-V~bYN}Pm zK?x>Tk!9_P_JcJ_gx%vu$mT>7V?`!&gfo@!_KQuUCg3}J2XHv%((MNP#Jo~;>YJ%9 z8cdKcU$}hbkwNx~bi&MTt-j#>^5yA`7b*wUl>!BJp5v0L0MG^WEh4=eSzcqIuBM|S zU3*OSTO7V4#@&3Xa6@w;;r`xiPDD8zzG%|w9xa5lu0IDJWI&Ss(^p}K$QfcAHL}TY z2={Bta?M6?8oFcH4(muK>_5|n$WmU!b8p$C$4z#YhFM6m^yr)6KQn$u+uG3X2J0h@ znTD_Qfup{u7}@!F&SIGZGQ+hzR#@A?)J0?s?#B$qW-jK5baiC#~@TMlccp9?2{6tWBWX$SkQpbmf=>!25La`rILSp)~sqid2}x>M34f zH9^Q@E1WW>YCovOR1bd)hdG1iQv3;#ZX=}uW2P{+kO3?pDOdnZXh;Sd@vqV;6rDYW zbPn*qdkvxTL6=L?rXS1Jx3`AH8Ctz8Ns;twkkRg}HU3od(Y+$=wq)pa0H{pgT!T%m zG*_rpM$b7edlwS2y1V0|!6qS5XvrEMQ_8*pqTK37kB1uq%Q&HGi$|#dE3cy*eyPk^ z+Q$zr`%&AMlkx;IDFbQ3&Alh0k(g25AF^n7|s z#rYDQqf;tMz@_q*CXWrt;t^@39TKHu%k+QDIN>l!2HZEv_-{9fg%gHAZU`Y$Jb!={ zE3yoS6hU<4Df%_Mn>lbds$}t&6)dnZK%;AIGyykMo`Vwl`X4s>HOc7kDVBfWTP#vgc zxD6%EJV~R zr1B-V<;uy)!{s?d?`4kFNJJr35d>7u_--3B&5MeQ+CN&>RhQ+d_0j@(OU{!HUT_RAeadT~kTK(bMC z`_u0aZ?PKYjbHJ8Yy&ycY>MOpZu&v%t_NPo-nvN)*YGGyxGeSD0FXq`;oF!;<&_pw zRqM6Bc1}KWSQB1KJx-TdDgBbI%>TXUG$KoT^$cxaGLTK>Aafl4`-ysFriK#;F1|2t zJ$_ytL^FZizX1Z=D3gXIicxVG2FA-hw1;qvM>09WiTzLvsDjM$F$&}~Z z6J(6(#2cg8%lyF39)~KBn-@oifCRw2H&I2|;h4YM_}5M#8tvc(rb;At{bj#2RJy)COHYP+t0=m+h@f7uEPA|)XRtIx9&9$*Bqf3yWCnlJ*Rc-z*DoS z*VCr|0+g^Cd;qGKHa*kiep6JeoQB_a&g6FddWa_wEx{r3b(W@x^`uPh?Fs4{ibi6w zqEF~JMe6N)>HD=uyji5l?3B^hS`lgG2e{BaueTMFi`n|zT%>Ut4uAx|#>BCE7Oa>> zpYhEjn2Y2DM(r|w^rhFeClwjsuzOJ@#>fj#8*LsP|9I`;k-?*s>ue(Lx=K9OaHTlg zy`LJ-z0=;Ki zlmAg0=Rs!S!3@+efM@Zir??~;dw|f;2Xf;OB&BR%$OFY;4F9Py^c&`-+M>LA;;%gN zo?J+>AD*=ve-hW{ZBV$p!{w2C^E&c!LCF7vHi8Y?(BJBy7|J77?fmU!N0zB}T(OYF zQERYIvtb|aS7`3YtHvfjQ^03^!C^$^_jD!WOFCa++|W1Z+@8VS1W`M@9ee29voTe; zFqT(`2Ex(5o>XDt*|wMco&>gRwU_99XA*)GyD5pP7M54?IB$B+_T(9Sh}s3cu~7J1 z?c5t2=$Zl9XL8^OA@$pIVd3=B=PzPWrFzr+S*7=X@kzm%?SB5uzozZ>A*NyRDhr6~ zXWl5p$+FX7WA<-Yzm#t%sQGba+?aW zqnQ0?gXhaQH|WqJ>e+lidNFSoCZL3N>S(H=;ubE>tXrx0&+2HufYqT~+LM zj`_mjX;<_6BcI;G8(rPz(MHKxeYzgWoRsVGvc16hgD+)oRK<&YjN_hF3kI-ETWq*~ zm`6-6*=9v}Lx4+ihJ;}j{|hija|ssd@~?oVJ9P98h6*_a;%q!FEAdBH&L6Gar4eK1v3h-NUr{56W_(a#{uYYLqs#zSxKo-D5Q zYz&pIyQ-_umbJirBJ|Fv=e8NnfP^ENmyv^{xe^}> zIV5u=TH%|a#^1*!3ZS$=o3q7r8;>C0p+kUdKkA;x*ik`jpw?UbMK)q2DdL3Co;iHm zr8%+;?%b}E!hA+TFLF#7C(0i0zQcKu1DTCk!6w{Kwip4uP^Q3f2T#V}Bx~){pl%O*T4Nx8) zasn6KRIyqJKoj)mzY!x&R_^CKw6q7&4(WYhS+CowaN$0V@)Qrv^fYqA*Uqbtw#B3p zIlq^m#63}`hBUM8#sVN!9%DuZs~V<@bg=e&@1c8>nBE@xC%1tQP-Ob?p&bsA+KvM!X;qc3JqU9OX1Lq z7VD=jYS+1c2%>t6?%sW44PmRm#{R6khJ@^DunDb znIBZS9J2S)r>H6!-NUFVs(8jtcc2%{23jGuR2xJu4cf!*mk0+$cwc>DiLD!q9UU@G zA`V$~ZTTz4!Zt=&q+A)1r#gGA>E=%(J{RY0Tl!?$fmAO29bs)7B zMD5BMw}1E>)t&;ix~AZyy|BFV?w_ZHhiyM|JurKGbG{?~@}`ngQ|Y1HA9=;Zu3ml% zYQz}6N~_q6qFcsNr?D8E+wRK;3AD+oneG{M zrX~=s_0mq05ME(R?`>zp-0q>gwK^jl+0u*;x&rCO(_~NWIldjkPaXgLEJ#ood#T>H zu3tyC^Bwax*QRn$N~dt4&{H@xeB@Jfn5zitKJVtlj#z1u?LEG$+KSMT7!ZZqj zgw@YUk4-@W9rja~37mu>x|MpP*2yUpDlN&w8!g}u!4qU$SO5XDN9iu}4}RPy8UghT zvOHT%JIZ{+QCUQ*yqpQ?{!5?4L@(_lAW2a5YoeWAjnk$dgQ5dkrv?s)-u=tUGj;iz z``4AuqU^(C8@GQq23^YZAF&IYak>S#mCrMBSR73v!1aP?z@y^B@fBOmX+%xW6L3iR zbY`0V35Q4&kf#R0r*=L<4tc3KzC*XyiST1ty#&?6?8#9KYfEC;fb9*uwz4 z9q-v83~mY{Qv|-_h=~0AuVpM%dfi4j`YZh~?|c%$?(Tz->g7!<2gLN|8yA)z;1qcL z(9I%k?R90-Gp&=wnR%#9>1_M7eIXL=CZAs6dA)#~&TcJTdD(=cea?=*tb*dFE}j}g zX|5n@$wU9FL-Jt>t+WHBrtrhit~%R;2gdky9iVi0l!CiXtHnblS}xy;kz96m5?XmD z0c)tu1&5A%z!ByOR9>dMBFdCB7jtHy19jX!X40Meriy0c{W;CO+q}bnS#Nky!gFlA zK~3(@RC;Cq49RnU3fw9kP${0)l8sIVpp}nN=_o37lNqk~qNcXCHWthQXM4BNvoeW? z-b)}Yw*$a0Tg5Uk!pJMjt!&wN;w($#>%~vpDGEBz+2D zRB)vjnLz)Vg?ymjFvST zDQRE+ZR&E?;`UsFep*MLcbdwSZt;@_7xp@zJ9nVw`9EC>%) z0Hq%h*Fii4=>TIKBIf6@6DD&i2h6@JJ5@kf5u-gXJs?66e#eD!0vrx=ctyUhVd10m zw(XoiZP$zFFLz62Kp7;Mf@43le@~aCH&^q<$izcwuV53wRy8^7VCHSyY*%b7Nt;3a z=0&D%W_3EVlFKdVfO>b^pt{6rgNS0h8O!iyXR zFNCwY)Bx#2lB&g2Fahxm1}V={IJL04>_TA%Q1 zV6US{j$c>_xvlAlI+kCMb=Gz#cm|(B)DNoz`~`<2CPmjb?ENKfCugA=*VnI7MGz^( zqc!`^{i`A)q4|e9h~|iFrN@7D#WT}i5vH-bDu-TT zH7`i44nBm(H?z7PY|xO$H1H4DH)Mf{I1Vu>UP6oHZlXTn!P8~Cro;>MNPRoV1HqXc zyEq>W)(5kGR^%xOFUT+cl<52Ko=Rg4$i1_c5`T}iQj7lxTp0GwqNsRJhTS$i<}6&` zHnzVvCq{x#pjU+QqiY_zFK7zII}3Me^Kdv4X#1Q*5z(KIhwR-v=hbKamf(gQe~~R| z2iW4!!7a=IQi=ZVg2c~*Y@-op;6*@@^#ZLsF)Rw3uoI5(8%V~&sjN|5^XkdSLRHm# zqd6Y72E7N8D`y<(FO2iZX|%__+Otw)L_ zvmGaLqyp>^xs_j%C187DGke0JoGG%?HebYj>iyq2FF(}AiYQdRGh5aercFU; z;#)c7`2huw!dCoNw-M11f8@@EeG1sh&PpRsTD9Fd;H&SDSt|R29Vc9-F}sD6eER|i z*@nr0AxWfz;pxXO-!g6kClb5DWE|*6(HiUMT;rft!r!G^{U825WIxwmG&8NJAZ1-uM z0>ip0f=jo99=IYDeeAvuRq5tSwzk+wm$m)TKCya8(+$`!AYJ~}F+kx_ken@4^Q43# zBMR%QEAeSt95j#A--GSMXL#yIm@({?--gLYaV$6ZL3_ zFu#6M?(30|Eyu;}N3Y6V2rm4ps3Y=DTBbGq&*$MmWUa3u_KeaHxerk12CMrvt~rKg zH$lN9MztGBH0bCd?=BD#x#htwlTY51IB~~ z$j)EZ35TS8AAymA`lJwMCi++sZDe5)IF8Gm!lmv zm;SAoKnTFpJz_T2VZMM$Pt0d(uP=P|KQ^I(d3XP@35M|8Yh|h@1g+EwcA79fzyUx37C?jP4^n%j+xw^8- zeGI{2LCpjI#hR5aPup^3~b&7_n*qocR3r7zPGgVOc4Izwwgg_`-eKO zyqBpEBM|UXBy)JL^-c>MnIm4Yn(@O;0UbD6sMNbOzfiRoc5y`HX0NEboutxXYiiF{ z?zF{d90!dYLD2ZZ=h66YH0EZC%O#*5*?0s2QCi7HFf??}g$@Fa+`uGW5n2avz^wda z?6fzBI40<;Dk8{w_E}|CZ;(4*WAvJGyp!|vPHS#C_C#30vM$;={cwix-|)qv2UM7V z?qjFFfviFj0=z#s_T<^PkLBsmV;moM6ma+Luas(gdMBa3ao6S2+B6lrZ4haS>T&P3 z>r10G!j}H4+AB%gxiM}d;c^^eq0N0Qn$67>NKXWqT1up^(gk-dNosyKaC#)AhLUS4 z4T`>)%|)+@A_3C}k1Co7gPS1%KZx=t@C#w!a-($p`w&nD0W1`DROaSePd11r-$L9x ziRDJ!c02OuxbAAcxX$QJ;ER3cfAf5=>X)M^JVcxS3*(Fuk9M!44tK;(-e;qY!Axfc z>U6B`1NDorZ&iG}be?Mx9^RhJ_eBQ~bx7?Y4VG#$;4fWT6(SYlgG%f7!yeu$tVHxT zVY^(58LTHW1{9-#hrOB94yjgq;Z~$+|8L0e`omb+v-JOLu7!_jA1dHy{{2{G5GoRi8TDPgMF1X3*xyC8>-9z*7e2qazfo17Harw0Y0ij z&`XKb$YmFiu{t=oJNx_^_)FaL$Y=&;7K>bWL15#B zdwd>PHPuXJwy#(>OEg};S*0s_rEPigWm`T>&41pSADeQi2Mhhij_k zMJXtjl|NQ$jb}j{nLj}V-;c^(Tja|RHX#tr_d2fp^{?W%GV~Q&tD+ByKwhU>?ro`l zydGQR&$l1v1aZioeoO;|k+9PF4bMh%=YI@bbdj)7jiUa!{o9LCvj%1gmo_<6C5zn8 zcbsqRV)@qdOt3wwPFOkX#f_Rz>T(Y~j_1DJmRlc4;KaUVUK7}iAX1RY7LYqXLz&uX z8)6F03@Y*2N{Z6LmIv;p}eQFp9 z%rVU$zI~pHJ=Gf|;hS&k&(`t1dQ|%d8-E;(V?({SQGnYSb1)h<1j2rmYTF~PL?X8G zWTI}XXhFm!g+_<*5OU)@gN{Gkij{5~nIR!(mr`TQ|NUUu3LDkBeK*& z`~tMA_|b7FpTpz>ko$e^XT}j_3SH?Z!~Y)J>tY$@_sV8A{rMS*+_!gji<#E9h--J- z`vaXU3s*}Wd&5jorgKYP-7vdER#Xp=LePx_({KEFnJHyy_ z*%Of^`x<4LloGO(J!|$|mMGgOQK>9R_O&ESl#nH+WM2!}84PFkGp}l5J$)6-qasN{;a9Mffp5`eSp4A#fXRe2QG@je<-e3Oyj`CnO*LPi&4a<` zKXyl|H-Ull3pP$PZ5Ik2TT(0BKz@|1Fk&O)Wo2mSb8k{`mcUCK^VIoKv>AqXQhM-r z8t!7E09G1gvw7gcw#R9ONI>%>Rx%^06~(Nov*dle(u}On(TSQ69(DncavF6O<_hp# z>it%BF5J5v)t_pX`B;~Uk=dw48fpT2=(Od0s!}HLl2AL5`97QKs`FBb0UDcz;C1%| zb#%h2sZe?)hqtEXf2|z6qZ2=@>g2ZvsmG$mF>MN0!dMbL(7+JOkiOSP3$BVFJZ@8o z_yT%aNUme?%f$-viDqe>r(0p+MzH}a6uD@H$knxICT1lql=gq#9C_Yy+GN1E)bHR}Dn!tigt;G_C2SNa_pHvMj;8%#9 zmi2lFN;>1M{c#Jc*q*3!^_ajK*qDss~- zM-CmNS8+sYMEtP}W8kpCd0vI*$v9>)!%G%Koq9CRLF2<@p+AlZjrB)?%fb6jDkxeX zJjehvJWo%1tNa%<-8{yEA&&-McUsUH#u99t6{kt|)8td>6!#hQ4zL)YM4UjWmY~q` zdlX{e_=e&h!TwMGef|DGiWQu_Oa|Cx9F8Y2q_O=`-Ew8h2eB(v<&OGy)MB@C+lN#$ zHqLmlnlQg!p#LbK3l>Wmtpym3VoZmm#{*FIBneZimi$qK@# zfakB_xw=pGlIPwQ&ztZ{eb4&uUQQJcIec!`ce9|y<{oQhrV=+$h5to>@R9Sf0Hywo)p3K!XqXj5cd{-!VR;3as2Qs zFh~spEDrqCp{Z=UNwG#DJIDsW9u?Q}SQ(KLsK6v7tvI2OEa-O}hHqa)uy-rjEuR2< zPcj<(r?HQHd*j&9y654~g?`)P(c{mXzz6QvQ+?a7I2o?K+aHdWAC^o}B>Pcn_j^y} z-17~0d*K3O_4qf|fIsU?-EReoC%fsK1tDk)F!c+<-h{Lb3=q+xW}NbFvVnq1rRX2SNgg0CL%&W&dBT!q2#tdq+I|v`a zi>j%HrU5eZi(HPM0;5&%0(fk5pTS7-oBBbQ$dmZt?7-+lzV0^LcJ1kH$^5yUx8#t` zY2PgVe~6L+5&wjMx+a~f%<1)@Ap4#s<;07h{4!xTrMgCuG(2Gr3uRF_&BtkC%1TuDX;BE{mh;RZd;L&Ix=fMeqn7Zw)moW3fjSB#iqZ81D z!fC)AC6F@E+c4X{r)nGk0r$#+9#P+<gv8;%Nuou-1tI;22hh3AX4NUHERFRl<2 zo`RN+FD}?tvVnx3ydFBsm96*3P#o!$D0&mY(M!i5!roTrOq57I|Fd>N>G5oH1(`uW z49Z<)45@H~N%I#KHLXYH`ZNg+FVcQ2>V2r|qN9!M1^q}2f^YtCV)7RKMWswGtos+A zTWV;^Yy|lFUE=fhC!WhhaABC~UoGA%r}iVhN@CBYJxFTd$5hP-!*?GDn(v4AkX>CF zCUIPFCF7kp2PE)9_FyQH948OhD9&-Pz}dpq<1Sia$wAHu5~#9?S$(`X9>I7TFOPff zKKq>K*>XaFe#-)v@uPRwT`6GBH~T8z0KPlibAE;p^6&Ox;z(b(O3}1VaNbF$cQ$p> z)7YK5Q&saBb#IL26y@*o{vUZ9PZNp?IHV9KA75br9QxlsQ}-JtJHQnQtS4-taWl~4 z0QSlmIpr$tJU%qk7014n<}%TRC?UPl<@+k=_&+vE^8>r7NYyh()r;q$%s24m{dm=T zYgIM4qzL}q4Xp7ie=XZB5#MXAt$MJ!K6|aiR<@N7e^Cn z$z{E!%_>^Q>!Fy?{I4s$1479N_y>>vgA%9!oHt0I?|!H%i+ec!G$Sx(K!k^s%^L8n z)?|S4Cw9CfCvhimCHnNpNr`LLCM7%{e>&Y@bastJnf}vU8OH%mHzO=CNr3aEFcq7r z&lax43~A(!jyK`LUi<%W2)s2=c&zLb2c%PQ6Pbvd5EO|d20(&^HT*UuIuh+_%c&n& z`MWj`W$O%DlDzR(x#_TAWmWpJe_>IsEdH5^ojHBI%!Q#cxCN*A~#z@v#vxVBNrXrktyn83^9|3vXIxt~^bOmO6IHAA39E zF(z{rL*CRAT`n4iCVI5bOKk%l1d|CnubyL>r1N^RINwAK2M6#!)+J(=L#JW)IZA<8 z(0Nl4=bwJS42z<|YGD_U0m$_8U-7Ixjydggj7_v8j3wb}A4y)oWraKV1$T8X;70@5 z`(Ok9hb0{@t*9KX`H*sInYvYetFj_B&Vt1mZ~16pnF%_v3mG4RHC;`|J(#Z!)<6oN zF@(2Q`sjdp=I!A}x|x>~HNIz)-xWw=1zyzQqyX0>b`F8Ps6?s(PK`TXS{G6)h`zLkO1=YJEd;OyKB$RZ1fkV zoyVH036nAdw%$~B6A%zKsktbnQ-bKNeCMnFzn8R{^mzWcAE2V2zrsaed9r% z-MkFi{%V2qpR2wj~FLNaJUp@nwFkbmg2P%MD z-%5P_?6kd&XvWXgL3262jK}?~HV1d*0BhdrrJV=WI6Y0g@YNMl3Y4Lyw9SpUW3#N# zg*WaKD*9(Z5x|MIZ8#6`5W|ABEX@>2C-^&}pr}j1u<7ItxD%$BJ7Q!3v!i_?12$X7PlXsxLw_ z8H87^9D6xQ7p5lVJtNXtcD|_#hcI&TaGb#3yrMUt{cWl8GY24?(Ptk)fS%#|!d(Y+ z$BVM;w;)XI;)l+gfDUht)`9tub@NC}R;T4wh2TaZb=xNX1`2owZaS3ep+F{w#h*X# zz2N68_HlFL-K$^S8UQLz1Ld-s$r&tMLDY(Yys$nAh{p0qY2&;H6I@K!6HmWZ>ndyPW~8jn1?z0F-$l6rNxKVz z17Td&t+e^|iH{XPiKkbjZ zWlVL=DW&7kU0qhY6~?6>6UquJX^zuaHmKH?)a4BK9sxVA5kf=-iI=3iE=fv^NvJ1= zKtm`X1x=R~sAz7wze+r&?`2hZz4=9THKG`mu~Wtk!0Jvo6(J*4Ib&pz8ro}AF#i1- zXLA6qgJJM>(7x<&1buTQ)JDiTzgyGPx^HXc*NS$h}?8!mBq&Sp<))ag8X>%wNO z!PeaLm5vrS4?Qq28k;)6%Uc`irzL8!8IEl5;(#8Ei<5_da0fKKezCJ~f zash-y@JG}QT@=;mBG8AQ9((pIpf5;%G)nV-#hkfB_8RB=tw!avfUEptsa$0NT|1}t1Vd-69vG2^!RD|t=jp@z#&!ajOz7)G(UzUGd zuZucd=E6or#!!%sAlQ`}RyArUMS&;5bw9gbrsfkwAb5(ySqh)7k(KYFFc`18xB26w zvglNePD;*<@96gM8DjNxTO+5d?)6T2k+_Fzm%Ef$1mF(g`+jHx3z&@{Z3}T*6|5T< z%!@$feXtw}&M>}r%T>4@dkNj^qr%!v+Kq+garvNYei@Q(nVDs`sem??yjzN@qx&*F zWYchr%2C7GmY7fuC#Wv6oL@_&NPBdTe3X?L8;5;}%cU36z_DB*|HBEz&75}Y`5e5A z8q`^^H-sK405>J+pqKOn9bOMc7ADUb2AgTOWD^#iPA`ag)JhpfBrTWw1Y zh3q&!-ZBq(%;OofIg>5oi1Oix=bA^GZo`y*#4uw1IDDbhH4fTy(B@K(B zX(k!KQ+q|)O-D#7ktyLTudjetLjU^DUR+W5$o*F~a5|(VGgA{~n1LRPRC0rd)C=#$#@+Jcw`x6w=1hpZ>`W~mt6Tbl$dzR}d&mng zSFZkY*Edj6wDM}B+_#plw+CQ{&VWE}?v;yaLiUVjtOKZI4CQhypaENtJnV>Y^WeB* zdnUDRGSD@2E3n5caQ#vf@#OZCpX~ +*w!v&gMX0-u|G}EqS%7)2Lj*Kp-L0(x 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 z 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�THBCU@txhg` zagBZ0?{OGsdtJd3Ys@S4-=~f+9D5VE0;$wBe#`U~JU+{gJNRdPYr@HD?Df*&m3^=W zsZHS(l|KomgD!pF6@nIr`>O^!gmS-gK4Ec=->L@iegW00h2|f< z1s7bE_iwm|R-MXB~!&F>5?S>T86zT(lvQhYNT9+Bj;BVl)LW-dgp&$O#jkgokm z$k?&tPAvk1+OqW*U-De>_R)enF^(%ro?6OF8uQW=T%UDmkOX9lyI+lr)6y@fM`f=c zWl*Cf-YR3K^_fu5C0_(O(%%L7d!|Ju>Q^iqV0uw+L(^HS!2I^;l*D^~8i0oE(dEks z1L?33<+Cb$TR7MPnqLsl6EXJ@Q)2+jSsK(x8wl_W?`MRI-bV9oD=!SVQeWfUG&3@# zb#$w^&&f-sTEew}aF~n%nyP@fI~Fma&H(Uw(c-1q@K29ua75U^Vfhr*QG0dx)es8b zn+60W`oiC%Ue~|qXAIqGy`5t+6{9G2bF;C)d~8?rhH;glWq|b-0UF%UX+#KLtcowf z&y8XwGk@hHANK>y55ZIn?gX)R_zUKYQAojh~@|Gc+7jJi*o=YveomzRu(*X4#xaHj+u1uB7#E4H?i&tO)-NSM|m{F|uuiXv6 zCH8lMVEtVN^emX!iW&s+-`+-DflCP|tix5ZXZL0TgZKJ;;gl2-hLq?Cof=X@`4IF* z@4RM;aS4t4*>`UAe3OZMd1|+$R;Wegv5qX8AGW-+_sXHE@*m#0o<{>vK^J71Mkg@J z2nY7Atv;XoweuV=&RzTRrFT)|oC5tR{0khw&97{$M)B_NJ(IjH^L_RE9VjiFq&eCv zjJo(9-M#H?RW4$ED!ze+IM>Mu^tc}=e0EO+33E*Q=&!CrMtuatk|tZ z^8|q7-lLwa1ccmVTprGU-N7+$6gKoWEk5^kb&lR)H@9=f=Q-W9HP)8*%YoXW*~v&j zbIG}|)(hdZ<{z1V#VlUkHTh>0;0c8^h*a#j@+T0G`femzGIx(? zrSrVq%5C)WVtFC5WRV^Q*POb6$OnPi-Wrtgs>JqV2%LazO<~%*dwETT!mQM8--1xW z*lqcjFIPF*7y=G(7Pi_L_jikSC}+Y62i#oR-Y9|zvGdR``ImY`_0|*muST2$|HjJ@ z7%XBu$e~W){_3dj_DuZX zwS@8jGb?)EgX;^Y@wDid({tf)zdH{xJ)H0;_tE4u^xju-(WvKNb5Cc^V~J!p%JAR3 z?EYUTAxlt2_=OXnpnb&J*g^wRz6;%AJUU8w$0#dtn9lf+YtG>(oUG&rP-Xxz0aa#% zGu_?3Lc{EJtc!B~$f z&6SsieCtQx!ZvsxYi_*sUFRzLuTFNuyPUR9@MV{+t{TXyzED>BaG-J2{l zBTustMEs7!Bb>fE9&Bu$+@MgEF3vv%sbvP}Qz_TB!_Dxt_L-@NE-jojT165U5B6@R zT&!}L_>(v9oO0aLt+2Sel^cE%)lNq*Jo74~0n3Pg6qGs7%+`2_(VK%znLLzV+Y^1n zQ->@faky_k6A&GNoPB6xY%Ks;+l?NVBH0|Ti%03Q!tO<7^gjJbg9*D8S10^wfeu<+ zw!ZWm39zBDr0|ANW(&KyqQAnP3RN}7__Pp($9d@xIZ}+J1_6m`?#U0|v|JSK6qAsK zj1i!-=^XNFOWOGNvkEKelfJwKc_vby^9cuF^A}k z?VXwW>ZLao4{q6}-F@NsS+UG*ueN9R^it0QLq=0s863lZi^6yH^Ak1ztKF lvT zs8-w$b=Zr12O8roF~~JSsn>HQzyZ^I&^J-;&}|Aa=Jk(Z%{W}!v8fw-8ibkcQsmT+ zC1ElGC5Z!dt$Z_buQgdSS|9@16>{|$9*{lpbl;}^i4V2sFtQH-L;fshzS-AB}#b{Icjml zWVfD7fGsWgK{XEV3>{iXH^~3El^p-<|jVq zU$K_3Ud|Q`fXvYwPqR^o1o&=xDs`*zrq?YIEFWE3)ZR*8gyDbosmDjuH-8nLkOg^# zh-ZqZ^XlQ}$Nb0FP)e>1pIgn-$q7-MPz)`|7*2p192}5qUEqsi--GH55b|?pnry^v z4w2rExr7Gf%dVe#Sz&Wo^Tzb0QOmCDA|Yord>yu0RKbrsz?zzEFvaYx9|&S2zU={2l)Oz-7iS`%3R&NG;bxIy%^ z;;qWL4@?ls0`7m`uwX3c_xG zT+J;$P)xs(-8})O*c5DJMj)95i-Cu z+8R5^AyNG6g8s#vzwZ{tI7LCF#zNsUdKU9K=_hyhNB%tZ=~3I4s__q>@cyD8QR70C zdeqqnhM2``e37*No8cXPukGN1J^`pf;ojIPKP`~(K^atljvHu}z?`(NQxp7^H-`bl zseW1b$RMMdMvk@~Z*4ImE}(SVgJ{gb08?9SJI5_8fU#FD5%LN88M@!(q+01Z6bwB) z2rqJWV_I?HDb=X@xH5Nyr{!5n(n{0p{h&)nhMN1VIa>{aPr=8d64svD#ObiQzo0$q z_!1ePE=}OjPpW*-{89cnf$t`ZbNB91pFM3&zA~YZl@(KhFjUC`_jh^T<(0N5`C(1y6w8DY@Plj zo7H7})rSO5PiuLDn;Bf@3y;x>x6SP?k!v+Xo`GgpPl<=Km2I{vSQeCt^uRY~gDraG z>R%@blm?I@E7|+ZydSYK5p}U9%QWwd=ZrMqq(Svdj3hG{*c9sl zSPb}a8k)o(v)AZQp(aV3CMB$NfVg-+9jE+p@Y?>0sz~|(ipl`WQ4z!{(Tv>6+Yo3M zE=bftfG!>!+C7}*Dhg;700tc%I0tO=VK(!)n{`aOLDGkQ{Yyg+5B*K!qhFNyX6`nU zEE1Q`|Jh?@`^_4a!>OVg)&FJJAqo6|mIJtr<+4BEu_eias=98R2?Exq>rTX38yXAK z!L!kjd3&o)7Mzga_j^kLP$lFZhHImCZDXq{uiFT9;*^xPHdz7$OPB+)!<^s}u@uP( zj1b4_Kh#(Y-b5m`j_0Hb^P%!7+b>*_|;!qBd*J@?oi)2 zQZyeuxUw>-xi*xV`?&Pd;TM|~&!CvxrQT0EAZ^acp|F^w=A%7u+QdiSP*iTD z9IOcCbbL_hn|H_%!Y(Wy^G=;txE1(Z^`_R9$ugL@4Ye)meDFJRV(}y+k)(Ll-ux%A zFFSBksL$}5O)A80EORc|0Mf#PrCgHvcJxHa;VVus(xW5!?R`{)>dL^g-ijVY)$a-` zL{4SW1^X~3=^ACbJ1Ylo6O6R=m2>O?_YYO~9;$O_l>r)1o44^>3!Vjoa zF5Ztr`F^x-x5Jra-iB5&s%RuL7~hUrHLiPESyO4m9fLq5AoZ2zkfwdn+}$ZsR}Zro z^qb4#Nc`qqc_StCTH=6iI^7G~H^LgQtgTbdx%~ZJ|8ah+5aE{G&)3_`Ap(@4T}7h~ zJ?BD3Hz$&`NkDfTy6V#~a{UFWR>MqPJPsE@xN6fDq(SVm4+ou)1>hRWy*9z(OrH{nxx%0yU$7g&P+Ye0M3v~xS zrkaJmF{!xCKL1ULKCbT4Lm*9rGpiZ#?Eciv`Xb%f>!*iXjyg6W)+*=bGp+u5BSE>q zUgHwZo2wSkKB3m%_%B*u23jNG5CGKQtxlC0g+x`{7NzZ1B=hxkE@RHxe9EZdy>$o< z1lm#f?RPqLw2N^hm_6063krgKu0t(GoTzlR(ys5?p{e&38Pk#9e*65Jq9tv_C%nzG zp5I!7!<&Ax|M+m>`oN(u&>APGzOVVrY1x&}Uk;Jio_g%DQ8l%R+?VX{*FMTJO$=OV zsdEbCvYg_SArh=m_O+!ZWwme157m{xK;T`Z++zmwZZ=}CoMVi79U%IwEPZac1ORh} zf*c&P0Q95*HU@$ZQS(@ncTUhLc&vAbAt~jowU5j#)k`4hkN})P!<{wtGtBnO0eyNh zkW3S03?0XPk!s;)S+nN+uKQF`(q6D-D3R+|_Cwzb5{W67_&F4WpJZNMT8AEBYb8>s zp9d$FY)~u_Q>HcG9C9c--K-=?^;^ApSd10Vc>5Rc4}D1MB5Z|oWo3q0xT%8+pB*Z#doKvU z^e0H0fsC-M_`X{- z5EN@Pq{$HDD%L^oR*9ACFIn=TMj;DW*ftsN(j75V$`%DthH>E zy@Cj_UB;eN&1p>TDUOic;9KgH6Vmb4guT+m3w+|aIca$>`32ls*+jsVmO>X_1T{Q}>qx(bEZj7Tw@`y0ki&&@RfD1+dm{AoUGD>uzKY1W^g-Jt zyK&2+;^v;9pJ&yiAdK^0Vd{;3)ev|I<+?W#8P)NP0lfLBm@3o{8Ywa&E4Iwa!Do~) zaDRG!ZuGL7$REd+6~(1*zk}{YA~(H-Mdj;;DW?k~f=V0Xfo|_^q2Y+HIN&4<+Pi-j zI&gIvrsiO?K18&%2kLH{wZDif_3ediPcp5`2U!C z>$s@CsC)PfLw9!zNK1E&fCx$o2#9odcMXEHf&$WI0MZiDFi1B_ODiRflt|2b{XWm{ z^St_p3OM)NbI-YF@3q%n>vzNC;Mqp>G1#%;HYW3~AFNH+A;#k_c2k6iroiGzaft}# zAUj+*an%>|4v8(L64q%8kp`fUMyKu1k7QwhIt*BX?%oXP3Ek08EKp>yR=Vj)fD9^h zM7j-g554^H3yTYuS{m0(evaRANG&JoeUPYBTguS+t?s!W=9juYE&6R4%Zuhrnb|gY ztP-IHoYnheZ3VlbOC4~tyA0?%$^AnSkhw2D2dRTVfPz7N-}h@^_{5m)wjAY2w<$ib zlx6++CP5?poDT2z&s@7#)X(pyXVS{0tmFKXj9U2@;5LU}PUb@R^1*>GRIlR8U+WEv z{zyh1_Jj!q)7g8gT2lG|Bg+Gtbj04ns*|7cKe{5%&?-1!rN-fTS8q6PihYI0*{6Gz zFGy^>q9?y!Lx2xrlysBZ5eNC&n+Iz?biR_rEW(KwSAi4*y5!MF$y?T<`LAm}KLh_d z{alGWg5);Dn>x)EH){dHf0Y2|So@$sm;|y0Ac)OCPkO?{bi{?k80UU{yb(2w`3X(^ z<*YUZ^VQNVXz+)D!5jY$%q;dZs?ynmccpD#R|3%#;85kUh~#jsz}%t zCNUqjpv9!12Qy0O(dfdXm#_xqBS~ZHZ$}HVmVcv*gQv?=NbpZE&(FO+^=nDUXHXxxtpH&;gQA1o01GFzB>yZK3t>i!wAK{Ssiqnnl zTIZNTz?NSz=MJ%ZUP&Sy-pT2R{q}~H-N?aoBa-aCZ{q(fd<0IuJ%sp%o4}!j_)g^= zP*;hWW9by-PvOWwl(zbfLmdM$ZhI@)a&D3k#D-Ifyoy`Cu7HDa^T)`Q$aDQ*&eQK# z3Vyg}hS*YOHenCWEKK?{H3CyhHO_<=Mlb*+cR+~Ie3%3V_>O@91s-?*NGvw(|)iPb@i@u9&BGF%JC$V@Vwe$-pRyDp-+bt|1W@s9aAPRvtd^aWwh zD58>DG^%igAQqb%7DUAXMiFQz^aseEWJom;3NhAVlSC69n`l4O=5qa#7<={CM!@&{ zgRSP? z$N1zTiK8?5qc4e|Rl)I%j5+?u2I;fs{{!YA9rKo<+6h1r84|6?>qLk?6(3zomQt1O2-06GSw_-=3{mrjW1&}kpXduE99hrG@B z@?}>{lI3XpLH%nUd>hr&d$VQqwNaq^jAH3B&I z!Y76tAH7(EsxrxCVXIVk61dj!#U6ZExCr}z0eJZ?^Y|7)%BT*I7dxiQ?3N5yg%3jk ziD}5yyB-ZF^8a!bvJphU3a#a6&vAet0QBrdoxjNW0flin+PjeMXEY3O!>Z|#5?|Q2 zjS&k!x4k5pb+HS2aJ3Vf7?UY$sNO1g%vUsAvd~jTANQPjkO`}*BRs1`4XH^( zCIvgaQcj?0q-do0)4gF%Xl?v%Lg?ro`#70Mo`x*WEvuwE&GYrAvdjBg81A;tE;Lzo z68GG!>J}f21b(Q&0@$Bldbl z>z_^9&q>3o=QWx*>GgmT~gsk@y(p)_o-f( zSK^G#s`vDImZ%i!9P_}K%Y2_SToYf%m8H6}yPrDLBg~AozRnsiS!saD&jhH&RcS10 z510=md{BZO^W-E#z)>3~pSzsa{rC5kM3t4hKypqgZUOg(WAo>k=?~sD;tYw|LoZ66 zj_3@G;~SnQAL-Z^eH7%);7oWdAtuXF+~iFNBO2DAe)clFLv*Qk1k~{8MSYoVIBhVH z{JF(Jz&@h?W>g1JsWYIH-13ObUxFwao0aPxUlCyh(JVHMG{O}S#*_7O4L;%v!ib0Z zM?b?{06Pj;M)3_&3X*zv24qVQ}C%p-?{a}jO_N&I4?fz=wD3p&w}G* zc?OXI`$OCc&VHt!C+A!8Mv)+oWA4>cW$J#2w1KEKtvKLt&0Gx$Jc3|8nsn}I7^Zia z!p8N9*-m5}uxT%Ku%~I7;35GeS5Dqfd^sNOImZh49^tUNl6^ zN{ykPZfdp0E||G_wej}MM^n=*DARgzX7t7ff2N#_lnV##8BDw3jSBs-*yW5(QxHP> z1~+oJ&M4!~Sjdy5U8hC{NYN@*JA&KfGvVuz-|peMkoKty9*PwYSn^adi>bnh2(kVh z#G>ZG?uG7Ue*N47-C4SCXTHfF7T#0OWL59}S3CR{Y*wpx`LnuTYr|^v#w}lEwdteA6S#}G~cc}aPv`P2Rf5TlrL>0uX5N@;P+b{VV>#OrcxLo z83c((aVWspFUVa0g3JP#K%P*sFm@O%q0T-VC7#7wTvjUD0!(mYi^(8I@;QDMFEWwO z(^ypL$F1K2K6XEJy8idMj9Xxzm2cim+#5E#p#b)c9oCASCTtw@%j8ISL8-e+N#=VV zE_LYrb&Uf?BLdFvLl`EBx4Riq0FA@9>8^)jzQx?%^srz;gDfNn9mLRj=V#7CL62im z^H(!Z!$n;bVaOF&2oGYPesO>BmYGEPBDd!AQ*O=t%rd`8l`_eegWAgTaMxE18~XQ% z^!D7d7?1V!Pc%*w&as1+CR(rh?s&v;?hzS?c3~#tdWQbBOUJgzV~mv|T0Q8*W95dy z0|tYq<>3Gmfig+wgWc>ZAYhB~>bAacI7+_uZmC6l1R*lQB`8>ucqynjzc>iOYjb=H zvKoq0KC-zr-~KhSo)`MVC4O))-{TAtL`1Z_9@v}t;6L$z&s#o5)HzugX@oqEd~5dF0VXU< zs$+z~Y>ydfKA;^TVO-Ts_wkzUlCp+EN+cvGd~d3Ge&k6)Oe^}=kKG?8$E_hVV?mMd zo9tk+ksd>^dyK2`{O92e7K*F1o?iEZ!*@;yw^cn~W4mI0mOy`d$^$*CvAk`VJuId& z)!FDcGas^g-|~hb#Je)EpdTN_y;*sjFXt~A-%83WMN9z>j=~$?^(ek@{*_|C@MiyJ z{eow%-ORBy6GiN2BpGvdByfPoSfz-&u$xBAX>^s5mjoIkr{v)?4{uxK-5q(^ct+@$kn+?n z9F||c!Yi`sSj9z5jZaG|O>sln7TAv<`f)keyi>{a6SrPhvc<|D^Fwl1$@OI6Vm37i z_+xgx@$sOa5{O`Sn2tu-U(PCjwc8!UVz{=>-f&F1X}oj&p}om@_Vb_4&4Y%6D=m!# zDcin>KeN@y)hXlbf?xi4&;4x?>-11w8x=wR@pgcX{yoDFLro64KEEU#NuPxIE(gOIU8|-WpFICq==>}?qO^IijraF!_<*yVJY;QHQce}#ZGEQD+@jlh{18^&AfiQG z;VSZzvo!hmZXALQ<2i;{85_?R3{rB^G@5=h4uFA;^@b2If1g}Kn~*u}_Pj!!>c$PA zbzLxP&u=B;LaeltoxL5y_F&q-PV8NmGtOck<0eBIS?K;)YJ_7@X~IYKbl(*^Rf-vs zLMi{*?dk|w$^6`zQ(1vMw6%9|s$@g>sX@?kNl(TfbAGe_W~b3)Hv3us0Gd{Jj8sBc z>utsx&(l^qUfV#Gd3UYLWdp{wwsTeTIQ~)BwvTVCjt?4&3n4wci)&@V>JH!MtDPnO z84cAI(c&Cnf_~CPyvT1^OJ4`-mM+C8y0~~%7$_RkEWuB_{Kt&I`y9b(otAy=O(YK} zjqgZLjU>BC^_H)uFMeNmwmL?hIRE~9Gw4h^Z+&KBg@E#s&F=*^Yvz8;`@9LYTyIx7 zR9HSPA5MG&5fSCiJs1OFx-Eo}s9Irj(U`y{;s1{bk@J7pLga){Q16Hg#1lT z^6zhxnIuiWb@x+OCVu%_Q=5v+(&k5z|IYL850#46)`!Pute3Y7j?uo?7m+2uM~U1S zIYzJ2x36p5B}G)zgC~FdMnJvY1un1W1V-yb^A@QRI$zJ(|0S~93-KPQDe>Z{ANcjz zpiW`2s9XT7IHk=nzp3#5q4@O7hlU8D+dgNrs?WAaqRGXci}Eb&Ett)nUdebM@F47mH@nxzIz=e|29>gIxW zg`F+ik?5YXGSS3C^VTwoj_-!CF@nJ2aCfPXb?`V9W;XbUNMRhs=&68T^_M^nLJ9bu zV#(M-CP=eMQeXSLC}~D~D8)owN`$d5ln0Ze{*(|=vdVC~)_%i;C)fZrR+bg+c0Aib zw6~6zEp~O)d5e$LK04FtVdtw?L5hJ9J@1BY9L8!7v|5UiV&=(gau`tkDFjO@YJWUo zLQ^x_1_IAXHKCV0GT>wCgRzF)cVSnOM+#k3@2?eJ$e$04m|eE$G;p1UdMfJ_pd9+Y zw(;MKu#YC}3`QN?6Skcy6So;RPN?-Qv)9vIau;T;d6xV>dY_)MK5Sh_66`HuSY+JM zINhcCDie-;3-ef8Y&kf>i06e0*|C4Sfha!^^$6ED>xc69*cDRu>;st=-{=;_Nn_I7 zQ4af&qMA50hkhjg_?WhbT^0_8Z>%Yo<#GFbS+6bZO-pFHIc#M z>xt=nHOObwckFx2&VBWjtwR z-j_J(aDt*7a!fJGpBg1Uz5|4X__-L*{2Gd*Q%-vpar^B!ne9LQuc-Q6t8D$H7& znLGGXKD~wQ7vBaU_-j(x>fjbD&Tl`z)1p%^@{Clc42&P^g9p{KZL1ub276Bnxh9ku z;%TErjJvgb<);^vA|_^PYdb;2kD|9{VMh5%1#{3^|{1FX2~v zW;a)%X!ILc@90LtiydRKBdA`X16dmF)*UXN*JCB5hVQSY6>%*%&WpabTtApO-w8)k zrc4u7zTT@MWxw;lO!$YtM>g{dk)A&R#k_g;k6JJabQi+PkMl&5e@H8m{bh!zgs`TN z!pKONMf7)?KiC#T7_kNrx~?U4b<^^kLa40kvLLboMDjPY*GC~zOeICf(-wT+e^aD1KTV6IZ}FZ`cWs=l$` z<$Ke!EzN!v55S^7{yxMIXr_oB;EQT#yy1tp2w;ll6{|HGYkXu)H3N}CLT#plae-=H zI2r?0?yGGrh9!&Zaj-znCIWAh(ji1{))jeqpFVW@;wn@7w*7Ns! zk^-`yPvwl^M6YQOR{2BoZ9ObYskG1-?3O>v} zp%liOR6SM3gx|}|9L#vEY`2Z3dUSMzT3Z^Yvj_wwW9I(`Z@%ton}-w9y29;OiUx?N ze%b&MvEM=Db~wkNbaqd=M%7*UNd#S+?ZHm2 ziURL@yv%Z2W7Exq*Exhc)@;YMUjBXQ0j$w@Gj0_=telWUyn@L3aU@MAJ3co+?iW8# zffabOV%&^EK-$F(v>5;@@T6@HHjB}94yOfnlZ(P@gAag{f_mqMKB2X^v$U*PC^eb7 zmbN`?w*GJ+E2~E4YC4+eJGn}p6W8dYiCkmN+hT)hsotr;U$`=wJvTe>HxS*rp+*S9 z+XDB8b!A8WZ?IMw#z;RhWk6>(QYgou0HPQ@Fc&_PXyvQx3t!D$lY^lHC?0Tb4wN*z11I~ zGZZe>&#%r3l=>5X-hQjWZwi}u%PJ_591u){%dFY`Efvem75Q*eZ3mlND0FMhze_X(b%T9e1>Q4xE z-8Uwm%)%loDllq(We;ab{S~KPF?(FVWC1xrB@6Rh{pB)Mwywb(iJohVVUG)#=eo;_ zjPFewv4P2C&-bnj$9hTKrl&24cPU^Sc_KZ?yj6bXPlK8jLp9+y;S>sT1&_)8WXru% z5isVoMS5Fby%?)Ek_~`3X){eKmCD6`U z(hE&3YUSWZ{T7d1=JkZHqVRk}Bxb6RH-WRhvugHhXob+pgJ$7{frj+Lv+6zXy~Ih0 zuQ){R-e=jO%g6ag*Qbt-c94JBq%V!m5!UoNk<71v*7G;?k_L;WM@QYieO9WSF_t*n z`$s*dwZgEFS~R!rGjubcYM=TBJfv>j?k8-z5659z9^H>VbaUA_GCxn=E>Xo|m0Dq9 z78*eIGTo7Q5;{lzI3mx_mw#cZYhzO0&garE%ajS;$t5XG*g*44P><4TyI&Z9Z+ z+qQ4@_p~yq?yc}Y-SZJ0DiEpeym|j{QWD@Me*MCN0?|efkoWEUtT9=QSjkks!Tdq^YwGpv-(g4`CfHumrTP4}n-{i= zOr%A&mUz_@=Zvgxsjr~9z5L#Ut_&YKeJKOBPL31;9AA#{I@&e}JdkPo@;DowFe<`} ze86otT*2fXh`18Ls(qigB+&3VD28rHJ^a$E7+@Mq{tmLV>KdBp+wt1G)ith5Wc?_Q zn*$-SJ)`5`)CAV##4rDmK9KJfA1fnaB{;}H=(=F#KcX$^Ap;7-Mb@a=)~y#~dWHq5 zf|mwt9;NyCnIc|^jCjtDSffaPmS;|E;nWF-x`cYgXeHgYRjZ_dz2Kb= zzHb$nA}~R<_)LNN!J2?0$>@ZYCEGEJ#^U++ujN|UORO&9NMhI{6kyXxQd)JRG9Q(% zI=2Rde?dZdJP_#Ifn!F8wSc~_OKx}Yc)azMX3^EbmV4q5_Q)mVidXe2cD&E?;xvWC zPvTQ-#u?g>T4uaihOZG76>3sS{>Xr(l#5gE8FWu}fPHVMrwzMkwx#bNabWz{;Q5Twws%CUT%ey;7UtLd6zWI1A@GRgdU0L?d#3aMzcTG;H_KCZ?RwX^0E6W zhPFn1b+7yY@4bq|kwFE|CuQ;~ZEo{^Z~+P%REITG8KzJTofUvyp0a@8a20|*h(N%f zo84Rdw#ao9{WSj{F*v~Ps<__p9QZ^zO=2WE^o?@PrKm%FOuN8PjvBurwFuEPJgI6&vHgBTfTcVcXFjjWi(foDddIz7v3$^KEDAZWiY--t zP|6A|0!-wNFC6*${=)TW)z#3Ebyn4g0?mu8iUX&wK6wk|>pDyZ-`h+j-TA#EH?u#z zVf23YMvZp|??6NOyh*X)@0Uqf+Q6}U%U*xKqyk$g_@;W==6^-2snivJa4!pu%)NRM}2gCGcQID`c=~f<%EDRhh2!|H%J4Z17a0>P+@rhYCMjCd1`1vdg=Oq z9%zC9qZZrfuadRZfC(m$iL571gG$$F*3}n@+KKs{R+1A>C^^{Get0Ngh@BuJv&j6X z<ySz{-$%LHcbAMwAB_;4O{+LSIT`YX{9Z9hi!f)YFZj^vd?V@uP1+|9a>ro12>? zAwjNOyZ7+Lk*UH=saap_Y2pw)GPU*Lk2!4AziJ0=N zAHRRRcN`lrovZhuwvioX|TQ;i+{pfY!tTI37 zfv(NWL2CDA31o>d{Eoa4Z?_o}vFM)sKWyM?8|L4Wta07s&prH8SKx}jOeaD*2$>bx=1>V|392v$@nk^kY){ zDy8`M5zbs z`B80TSZRdH8j5ki#U7*4r+mMC58TL0)rqQ&{gnM7IP%?Xnw51~;haH(s~vMi1TP&6 zVR#*PF(nY=6(#D6VGPnA&QB*|7%rMVaR{sI#Kzj9UGcaw@xkfp49)UTU-o{p{s$A~ zLit9Z<8nV5SjeESs>A?-=?1L_Cjuw!Jv;fI0s%5F-w7L8E^>&$PYHdOjC1zqtXO`y zU+4O~;*f!xv`75{j21J~YbdeP;%VmQn>O6{m3!)Ngcw!T4z=NrL#B>Lg@Ws*>y_BV zCgDO%0OAU)aEr5Z@bBxE=z01&|HnfkmWc)W`=tCGdul4@37f{ zZ2{2vQs_B%5I7R(+(1)OEN_r9G*W%DNph`Xbb01i@l~bue#%p;)|jPzyNuil!!?k;z}k4wV~b^ z;FOZ%?;6#*eaDdoq{C;}&Y!S6EWH1kq~?XiV84qR4y&0R;ktGU8QCRjUo6x=GPAc& zaEkA3Rv0#hai55o9+ISSShs5|K9kTejl{=JMr4)Bc4>LtmLFSJ1q$1---_X`>Q^Qa~C%Bpo8BzeL)h^&_$b&ui%cm zKV_#EabXs41P>CbnCE69- zSI(85Q?5xx(rLLas7%)i$OcD$oPV+z{WDN;JOBrDMVn6!Hr;2H??1Ff3(a4zV5?G9 z9)7QWKlO^Sx944hfDMj-^^j!yQ<;5zt9*r~O51lI(gmbU1H)oWy&lA8%Z+(me}_UN z5aWhq0JN5n5)BDJX8u@=?1NfCAZY|ZAe7MZiG7UTxp{=cXK4R#*@(tD0(O0VGBUc? z=PNj;lN@^T-9`)%$ZGC*H(C~zk<~2g=Z!CmdSXLxYiMEpTI+?lRW#4`aWB-6bBf>h z?8E-sB9W@M7A#u~iuY_i*K-%;yQ*J8_S!*^4}jE3YjHuf4yy29dCO5?4Xx6yVeD#x zC-{-V*Ju&A-UXYGOC5dz(90L$l&g4DA@yb+DJi}V1O9* zV_A;L+uVHLvg|tI*!W^X{sPxpk9X51>^<@hSf5UcDQ>2TeLp%sTIf6TX&G0sd!0So zU2A(I#A$NjRe~mqXsv8>D(Zm7c7I*9K63;Q?hjV1YXF3-60p34(K5bpG#_D z;DI|s7|=@t(&7Mza&Q#=3JmaD1i=UiMg<56M9X=1=nG1eY&)xM?UBv`+r$)^1b{>Dx@epj55=?@oQi`YvX6GmP_*D zbB`7|v0#?+Ew&O&g4K`I4UnRZX?BPqw?AOzX#av40AnOY!H~ihNi57Cq4n#5fgzQT z1Mh8rJ|Fti%%0e%OODKdiezeg7}E|bkn!CF3?V-?qHn5WJQ&5xE_6>=$I-{SC+<$a zM#jjDAt`p%nIFbE*34+G`aT~_T%Wy$d%IHh(7&xDI4`CnAV!X5!|%glP}{s|*fj45 zh=5^Qu#2Q;{!?#jju5`G#t%uNhmMr~8eNqVLt5EUr58V{4 z!g9b6;pYNAdWPUJS)q{xf0?*aj~cYl)PVQ*{319QoCvJc4{TNP*zl=Zsn=g_o4jh^C6d!B<{o**c;vsDN=& zFWpPi-!xyuj~xL^owaqe)fR!m@x#Ecl%RU`2<5H+og6%12NwUhKo*{j7=RF=S}X>1 zoO>6DJrH+{AT=vtA`ek@(Pu)ruL|t-#OPKnvNUTuX#62xOAl|;7bbW@d%{yAHZPy- z7(Mo45h%}%D?S1U?J{p+;Udzj#Dv(heOT|iFZYz>N}y8nBwL(u!EL&N^2)B4?U5|N z``|9l?3RkkYZV%9ym1m0m>7VB(~SkT!u!IWIb|d4eY??iEqp1CDb6?05Fyzhq~qg0 zLiYY1Yzb6J6N~~?k5A!M>R47-`T+HBr|Q5G2Ox<8{#F>Py5tSjcIru}Nyy)XAZ029 z$~7GipH3BPptDW*@iA1Mug8;&lA9b-sn2`-`S+)|eKF&=t9%=MPA?pCd0q&w2kGyR z9fg|&86+${)cyEkV>y%3XqO3hrh9l^-)WRYjRykP9HB;fs5uDv&}kZHs;HYC$6+N% z4oYwQbny&giGdCtJNw;jpDw}amU&}~U|V5>_y}3p>#}@6FOG+WfZ-W-QWD9#KcoyB zotz|_3)g7M{mad5!NpU)G3v;2B`A60xw<=b94xxa*m&(BD!d!)-iGG;(IX|r@lk$ zjh8h%&}uY#|MAPNcF2G%mf>}2`cbE|e4BxNYqJoZw)>kOFISDS5PV*8HL9>Ym@CeBYI}uti zYnUt9eO3#kCbbhx&TO?cG@!x)*>MEL_OwVmi`2HDa6pTCcIwMajaUH%M#RWlPg-C$ zInM*(X7RbJ%kRx;bLUq@;!Woc2&;r@C|*i8{PzY6gPiniG3st-vVfTju%d+kDn;y~ z25F`L9g+oH2o9)6;pq-G_*8-C%X@3e?&5fwpbk*tj%sfPVV}xZ1-lMJn57F~0M1*l zbDBM!u%J=TDhCTKwcgIs`F%mZC%?Oz+2BZh;$h?3V02G=@43~N%Zx$sYIWqy-MnD* z&8}6M7@Km^9-rHs&7Ey8?E<>3FynL})UQjZbfGiV1PKln_-9bifkfcq^5vv}kL>_+ z>)y{N*+@_sd;v(XcNz#Xnuz{+pTqwiOL&-nKvF ztcyqoQJMn!25FDfMWBUK5Q?EjcLx-h=feRTA3%93@dS8P{@xrh>!{VjI)Kyj>W2{b zv14(k#T3cRjM_hk{*U^6g%lB=$!&O1RMtMBG-~qs_u9}reEc`l`+np5y;oilw?^x` zd9x*?oHw-;7mTvUmCK%&Kb`U2wwnoeu)`_YmfPR0f_n8vr6OpQ+Omqy06e3nmmGRq zA+4a#hrFa?AY~?qvHD-@ZM=uO8#wR%jagkyLhMxymEN$C_o0T*I5H&G3XGZnknqdt ztXO|}m{<=GB%%?RMvPzy3xR^QxcbA_46fqF$qD_7a#jQ^u>M$WdVCrl=`htg0Mb2TaM8JVplXXP)g|r;V z$TV(&Sy&*6qn5mkssf~^We@MS>JcO0nqMg{C|FiK-yA1nfrV_74`$`4y&Tv$9QJhe z|FKX0HEKh@{;8t=V~AW0ix$vB7>O2I6GBMz{^OmQcl`L|{_=l@7DZ-ZJK-g8G79O+urnR#S#ysoQEed0-)qQ23B^yqfJJ zILC{5M8r^uiG@2tWbP#>;T@lK>WZ9yz!c zhJK3GmSp9E)m2S>$9tm}N~TPDIQIC(T19Mey01VDQFr7aKIly#QJWZxK9B!Yi{R?cug4PTZ~Crx|0gm-8!6IQsF+=CpXWn85-gQk7U$xDA^>$49`J(a z+XusnWMZtxQSz7;LQ7fDH|Z^8>;lfDa;^0cr` zp>iodzoe*655g*mUnVuPTtcb_Yky@AvU3u1FAecxJok)XV*pOb`0_DTK#xtFQk!Sr z{xnkZ>Gw!kN)kCgSBVo!ymEEw$bH&kxvoiuC(d2#qieN){OEC7EEWjnRP%?fVSEp) zL5Q(9;(;z4W+1B6sIHn-CL;unGN212MOdjuQ;e4^e}G76mQeCbyeIPb-+F=(dN9>37=wifFV? zE~^spV{frO>A_aa>Kr~^Hex0QD)S`@H(?wwNN|?Es8(TWTv@q3wJE&gZ7gHH`+S)D zJHkC=x2CBQ1_&l~z(ai|E1*c%e*mPgQ7`bG6|?bpL~{19CcmS>es*m{M2O?`_xRd} zi+O1q8zKB%D-1lY;>3SMYhU1#bQzj2X)&629dX3m(JzqY1fsL3kcoF4aAO=v6D2~x zMAr-J{TSPxwcfj?N)oRckRO&hK0?)b^}Unj_lAxOMOJPiA4RWC`rpNV{+0D6TM?Qi zsC5?AfIL4+f`rU$i5ll&A+QBS1jbSg+au8lp@Dx{7RZ8)uddR;Se+CB>*!28o`68- z(_zW8J@Hx^;Bf6<^)rzgdMNqBT};mIfE1JEn+K_cI2;tFX02~9cS3M?x7kamE@XfV z71YhY?-rfHuw0+ZN9)|e+^3!Ad}NeQJI)Z{IKLRurs7pbh*I7@n+QB6^x!Jg^Lc>$ zG_(*OPg%bLjbmY!!z4mAwke&<0T&dw8mivo0IVW+4Iji4LM(OP>9Ts6iFd33sTo~A z#vzKjWzp?pX%c1Jl`KXs)ZiDqi`KUlYb_hasyd~qI z_f<27s6B!ekP=v6+ta!b7WJwucjFYY}7rr0E`y-t4M2YmumH8we_gBD`U%SIg%JKAPQ^fkWZp7hmjQ4O>Tw<^! z?RuC`*1{U}`PciGcpn6Jmt%Q`*W??P-&6b-C;zuTFSnEIK)_$PSr26LI!s-!jST|6 z>R6VQW?@hK%f^yn7VCjNKuBT0gavfBLtxN%d`#ZW2ZruC1Tdi5RxLV{8xoC(zS5%g zHzY|`Ml!ZKgCtL#ul?P7*&G6aAwTvv$mhM&(gZRUdC%?bdi;I|QQBnJ;>lPa?6Jr- zn|}E4m3D-TcZi`lrl)4Mosr#yb2LaP~1Q$YP*9N$z#AAx$`n?IC zkTO+mt>sLA`hjF14|&&>mF5q7No|sU_y^U5^Je354y(V+m}Ne&CFZ|!i{H1Nod4kG zV0%zhLS<%GNDl;12xvYyz>;yrk8t`+{MXja9ttjxWfxmlsk=^mT8GI0iy;4-S$BX; z!pJL~fUF(!i9Bw5AT@EHla!T~(%t(v?h-82>b@)=4)Xar7l`!&sAhA3l;jL10cr|K z$Bv-j5ZQF(q65Iap$5@&ENJf+V8>aBJ0IDJDsMQ4y{Dy678^rR@NP&hUiHAb@?yVn zm(SmbXnlPtX*O>BQ1t1j%snT@o00Vwi6`77puZ&9)^|4koYx`6;A|k}73xJ3yd5kSKL8z^i zf`AE~$i;AFlFMC(m`}LNGYNASHoMwSb!^&JK0*SvFSa-L3$ab2PK%(DMm@6>;? zr$tw{RV+md-Kk%S0i_G11<7@q2muHr$emq2Cx}(d3l0V4 zi~V+u2^OSWI|{JDDh~FIV{UhctslW&_R!$Gb%TEAn6B zS+_uWy!5he%tlAcA}N&!;7Bbl_04m~Yho_~{SQ8_dhK3S5fFhDChfeR=uvz?I?!LO zN<_-R;feWd%lbooDnbSt+SaRKYg}9*=E&!7kf?9XujxM*@q#FB8Rxj~w)|{*i_njF zJT(fQ7Kz*pegJ2*@Xv2f_3(X#WeH?@1&4oNlQYMx&rt1n48us>hab37Cz_0LhI>}zlSVR4bJ zuR(q>3BCP4VG#**<-?mHLjvF|jx0944F~%))tt#ju{l_z8wLh1kkI!*GL}W|LjC~u zih9@@KDb3q4hn__NDnd5zr}aE1Wo`V#Faz%17VaD{7-yd%MK;L=!_vf59t6apoNVrOMs#T9;~S6 zg0!UkNJd!-_7P~%Dk4y(gbgY21T)f;BjqRrFkqwxFQBhr(MF5zS~v_wbbet%7$ZMH z-mMlRbhj{id(^i~TJeOKaS;}5w|glQ;ml5^b5(zw#g_JB6|l3XslwlEc(%yN&re*K zzyAO2XY|bnIO=+${V|Ngqg7rS1|%4wHZ!>?bPTMaTnZ!;0Iqi=K=ZtC6S=NHwO~2TYrgj%qmvES)(Ub zM`1b@!!t_$PsyX?i8YjHGk<6I#)pW3NTpjMmDJ;;h2tv*2$=Phs)+!WL#{49Ij)fA z%g3+k3C2mK+@NT0)&LHp^LZSBSxq!fON+$x;{2;bjiTfaV5Vioi;uwioUvXZZN#N_ zo~`4;LJNd&>nw1eElZgo;7g9VYj>zHMjkU2dr@xHRqhri=g&FLzBDJv{!g3jzfBzi z2d&6EFlg0ze8&9E<52c%R)5Nt{NFiU1GD(~P73_~)gu97V<1Ke7qGbLj|JeaUKIv# zrD28ZAcmdunVJ=#q^5%>gW`cS|DnTubmK~!c)G^0$7Y^G8mx4&q>o-ak0l_v72?GG ze^k8(JeBVoKYpKcI44`OcO@ZvMHxpLlvTFKv1NGpefi$(*MWCf#^KZ6G_sjR~z;iOe}4{rdM1wfvH3@Cg(d@6MV z4L)BBc@~Pwg`V5T4>As>3(`i+&NFkqgh7g@lyH;DnSEC3Fboe`;Ihd9UcOD5T#f`k zBJFZQWc~x;Qjkd}=LX0BpcPS$|?UQuC`wB6Q^7nr!dw-^8-iz|*9%Zct)W6V0;o0cm@dWG&(yqGkB#_`b0Aj{Rz>CrY>3K3R3=kB zprS+Ub)*gG;nI=0fj(|39DJ-x$ONwIt!{s0gGiJ=jzRn(2K4!gzNwJG-MVcItJ_Kc zfARwVU-BXhe!_~~E;r}FnS-+s;vspU3csF!FNOoD110!UI1orTPTMFr;m_3IWo^~` zacu5QbAn&?L$il9=-|Tz9KL~-;6GeI%4-w}tSHN(fg+komJlXgRhS>1!pD2~2i8;w z6Av{AFZ2I?4CwHP0^X@x@hGG{>e%qsA_`7GRQl-t1}I_lC--?dS zA=3Yu`2nIYlf4>b=O#k_5c&luHsFgChB1{mgiUJ;yS+tr{K1XhqeSj+7;!+a)BO?q z@C-`lyWC$n5)G@NQo%Mg$I3!SJZ=>NMZjec7xn8)-%&sa z#QH=Yy99{80zRVf*$zy3_fxL&A4(%L3h^B;LK*D@$pg1f>&!rB@g^SiXJcaEi3Sk{ zDzc>|;YJ89)9aBu1ni9E-dm@XqIY;#e46{!jz-~uqhs{8imIN*x1fNfO7mLYdg)qn zK>y|*y@mH}V$8=cD15lbowS3QTDZFpu34}_dc4yHxFqBeVQoM{MhXz9d}yhGFh~7e z1VdeaYtJIq0?Ge!thapmQF=D`Y)vlWZXjzhECZpmmK!L53Yko2>o`psyDrSl(5T;d zjRrg!;|8n(el@p?z!zaos(W$T0NNJ~+t`t~M<4D`DG~k4#HF@o`UG`WpnbyC++LbC zzr>(hT=33&G{!e=L#!dTqBY~wyI_m!|Fdf)2No!zl9If!D%y=3pWU0^+@nWMaVX1# zqkwfBjc*y2J&zI>Rn7oNRd+t|+Pm-g3cuC!_*EcN!GZkQ1n7^{Udq5_-&k!{Zo@V*Dc-z&$Z zJ>Ym$q3YOe64f9mIdAry&)SBqG~X}G`*FNCqjaz}oiZupU3m~)`wQFU&@zZsxfGF> zJ>|Oh^3@{zRMR`fzecAlzI=^g0_;{18Ala?eRH>@Vhjpzw59S83o7nWFd%5ee+8!_ z$7Ymk-Y7|+#zqYY4!v!Ex4~a$b2gDpJi9Q-?`;tSCyS?w0iDd<@sYpoV196>=xdW1 z{S~RHsh_e$BCIPZ@jS74UT;TIDnedAHogl2nd={YsCsO*cSjf~{ILg!FE^JDSM%q$ zB0ilID%>VS)Yxt39p(7A0pT|VOG@c<$^DlO431xXF0q%)*2yFLpPa!~Ss!XSrF1h* zFz`-Q|B^%ggydnDEM6E5lmk3*KqAqb9Pxn6gE1_Cw3fGc9u4TF18=7UW_uk;SBTl( zvtm1PX)G(*Vb_0?Qt8~LXvih*eDkY2iaQ)s{lcnP-loeMzV>?;l$U~{s9|P>d)6bkgKM4 zWFJur#kj@cZQUmz$xW)Ga9^KEs?)q1&tfIrnqx>RA@6LTD>{0;Eop}O80JrkMmIfy znuHxwb#@#cs$7zw!K=h}(ev2PQYnbb{Pe9~L%d?(fy&P6n=vUPJNp1Hm4Eyg@(AO~ zP=|7(*!NwU&bWG|Zazs%%-ZDi)|LA@7H7?eF$*;R*a2lI0*48&IuOm1cNRt3;mFL+ zcQBxNO~H8*sx@Ay*49R8fM4qlP!pSkd=G|@&F-MU2Q(jFzrh;F4|Vjq86<_!8CajO z#D!BQMtnNoH)mbdp6=9r9M^Oqy7O74CdS46;*Hm#9-`-jgEvu6Qq3FqIbl3-OFJ#Y zHh=Dr|Ft=89_|ur<GS8x}s&au& zcWca&)mDU>&D_!GBbD3p54FZLNkiONDjzU11EkRt)vqX*bAT{55({Q*BF{@Xvf4v# z%v|4aE({4pnBe`e0-FjWhCdeq;Q!NY%t=cHZK)c95+}zWdS-n4zM9h+Ef-#Ir28*u zGAk8SySzVQ;I-!Ax+gz=^ZyCfYCsJc@Yx0P(ED<67}L<#hmI=%-vF{(2Y?+6O?~0E zwNZi9E^bCN@Hw6b#}*x&g?sz!Rs~GTcAbA|bncX@e9AzbCHZ~WqwH1;AY#s*024AIaK z#dUn4d7&tD&CI7PwlDkr%F4kpLE?PS?$5Ub6GdC5ov)RS`9MI_K3AQ!te6N^;Y#Qm z*d*0wsaQcNiU5PmphY9B4r>c7Md|Cml1u!^oh15RfAgP7j@us8Wo|G;zt z6--v2gCi~&L6?XrKp+HS?u$zp4wwoXLwwQ0>UJp5r0l9@b2^={uH}aO2rdu(xryGA zBM#Ae%y&nY(t1)vzU;WOA@_P8y7)9LnY%w|g2&xJ^I$o=$lxalyraIPmcSN^eg?$~ zlb(#RTJ%j%VJ# zpmej*XCeotcop>2CqZad#S@47(Bk^~wDrdymk`~VL9PT)2vAJLQ4x!nS^GN^r9l7z z{Cq1yU?T!Aa6HY5d8$3#9{?qj<{TU@FJjO?J%oEPx z8UROB^!4xS>z|^4cLN@vL1#4vc;x}!VnxuU6_7a*(&^DYR%Zpl9fR$0zr zlnCH9dAA&V2A%vN(0PkQ8(`2>Tpp`4a1gMv6tea20G@vY=GI*nuuZ!P$BW&-=x`mq z&UC-xpWM+4K>P`-ZEIXOFjWE{sXTM0z^a>*%S{E))hfXRSY0<8lc8qb+BcidxuJFR zvJ21c)V2)&p&q+m4hrA)KDSt8$Gm$2x49`c{oFWB@0Dp( zGwhAun@?PV0_w3hXNE%1u;XZ;gdEs9^~9A(ecokjN`C{r%`{yRiZ}_o5UbfNQ(6zV0T~ z(dM-G)O?Vp$9|{xJYp3o*iol)e!z+*h+6N0F5!#$9-8q!YD`^ZC-_YC=QXcXzt=41 z-sldQKE7zPyPdwoy^9Hk@_{JBH{!4!8efGNF8o?&0R1;H`9oRy$MPyPV&U(^DZ!T~ z$AIZd1~pLlN(R_9BOe8iNv%DZ9)-McMXM(Nhq&Jng(|I?kq9BDh3h_*FSEV6`r9BR7ls2wMa5k9~;h{YaVPI z@=na?ZfM*ad9qB_mat$eSO8!n_4!Qh>;gL z;P(F-g$`?f-TCTfiP*>3pTEE(F7|;|_!KthaBg=+7+*XL+7dq*9pm!uwGabdkN;{M z|LeEy8NZ9(%18nu-a6a2>}H|@$wF{){L&ChZSZkU5XNf94v-+EWZcjei$I?kw4yQf zg;Ykmeb`knkl(~nRX6nK@A0l2wQ$|*-cJHF18;PeWDFB2KiU2js;V5R>Zx>0vD%uF zX%`>GL?zRec@~OyrEPh4K6=7OVaY_4-o%<$woSy4in@UzoZhqrMo0aeT6C!QVjg41 zDld(!d@@zye#2#$d)EEvgP(;29D)ZJ7&2=*d6Zy+YpVFhz4xXG{ z;Q23S{$@8s41mS3HwHaf4*AE;;I82X!Rn?x1{tkEBafib`*Ff=&lz)_`?`P;C3x-= zmF*vMBPPr5G27DLRg{AZpTD)e2g2o4aXo{`eXrMxEa66T`qj#1#Vm&ok(;1zs4VKu zLMt3Bj_|$JFt@xBr3;IS@Lxp5hrdwPh;8Vnvxg50sJ%y1EVwFLyqC46jil%iMs`^eB1PaUtZDi?XXyB+ibG-JOQN|Fsoh>Zf) zF-BR%MZYjiVfBLIGUb46$lgdkLpUEwrg8FDRd))9>03f@jq$E~G+ilz7I{S}u6fjm zK5SE`-Xir9v{|Tqb>|=Er*s5e$BWW-vOZLFjSJDGIQvKI?pyKwCw2t~YN0foH-n}b zfw-Q2dw70c`Ql+vl*tHk$Dukl4?=+=B{+BP)gAKRL3;eNe%eQ1l67-bLkGvGbLZ2u zfe>2*(;Wr`u;W+kuDU4C{t07x8ln&r@lDr`tM}(@Zc^xnz6%BvOCklGFqsHriPb-2 z2k;7`tq_6$oi8dtBpAb17Nb7u#-ww=s|)M8VjI@^OWr2o=5XJu@kQ;Z{EFOPRBa~; zMa4v-snI(jXuzxX?#1$V8f{gy)XQ+3Y0x$~5j}aPu#JQSaxRXb^=^Rev?)g!g(&aD zWiYALHab&2!Ux*cFL>yyd=}ThFjxKvpyWkZ0rmfBUhz4+>3<;^_u1vIy!mkceQV5}fsXuIfe zkK9OnRXpt@D9(wCa;6@XioocsO$jdh-*XH~;w(xT4(B&?)5tDCTr z9TF2l5n|s#CP81J;N}|}(Uht4r2H&NyjomAj0QRiOsKLKtKci6uNb!HH02^{|7DQz zWyX`Q?DQfdH6Z(2%LhGmz0^ zI80RGU&2~=VEr|KHy+{!ZRT=-cNsS1EKVwdtgsuc?0~oQUG32b5HsO)x2VNqtEOI% zSIZ_|xbxXu(MC#4SFjn_x5=mSNPBCYd71?; z1c-`0FnA)G8^fn`_%jPLKmu{#o-xh1JNC;6lOnaE;+=jeWN>Dg)%K!C{t2n)%g)gh z(k!7@$$pys8k-H7Ud~3YMhRNJeRr*s%LOE^uHGbCa+b_y=suBEd+1=GMwEVAZ|U0! zK?fam$DcG+&d7{VzzI1S_p6gaH;fnsj2H-lKv)F}6oS+@;I2{jQq*^jeY!fceu2N_ zVXY8l`$OfRA@%NBx2-lFxJ1%F4$J;93l#{!ZNpP#!EoZ0jO)Dq8CXSzxA74W3$~YB z0bkKJ83AJPJ@NnjbzVK<&e91gr)h zhsb;VnQN(wX;XOal*Czlr@O78r=hIHoMwtfNAXhR_u{YI&7%$R3`d&wKJoEMtr8zE zlG*#<5CeRnROi>i{cqwjoe=mgnjih?Vk6)xlA^=tV%CrdU#nJJP}81zIN1 z6Xk735cLJ$I!8 z?fXV9t#_mxa>_XxKL(Di*cFN1QmnN_@lhmu_AF=z-a!g3`f3>Wv&!R9ktqK?#EMKw zFn;^MATsRplOO$cDkF*A{QJ6j0?X?gvI@_PpfZCPwL@z+_T<1{1lT)}AdZmjI8BL0 ziAg-;#9?LQ5|5-?zKzY=!Li@Zq(HAhs!2dmcM)E$S}Q;-Mcmm$kJ11%sK z`ymeHr%uNoxj>RKR~N33 zS%n9`XZ$>DcF%;J;Rru1deHMHc<9%`TCTicvdrO@*f6ZDm=i9n$3a5juL{Fe5l?b( zv&n1+pANdb?%aThZtzxjcJk=evW*xX?#WoA{LkP*HCGEcF=3*H{=_Sx$RoYiA+Hqt zgv_I0wSKb`WVUTWO$Xa7AeL6x@WU3^=CwWrkd7Yzw%FWQeN+7}CaLFlz0zav&=!XZ zFVHgBdv07AYBqI15vQrF`fL8SP)%xHgwyBm@FjRDx}KRLV-yCN`x!@=Padi>@x$&_ zScoi@h3}<=C_j*0Fib}B@@r%Xz>wT#0h*;mB4xP4GbsM#Uo#Il*)wS+ivE>H9QiSXc=SZ@i%?Lt#rwUQX1=(18{ z&-DlVI29HJZ5ADY8Wu@d1Yd5T#sjoY<}qJz2{p#rJ6qc`lRIW5r>p}}JOz=VKeqio z#a<0=JacdBAHDWZ(z|-!I}k;L8HFQ9PgoDxe$F@MKXq7p>^cJ4a)K=|`1A(oS^PQ! z#0`{A6Z0SC2tnSrBP)3k*oQvkQ(19ij-I=B0?Bd7J|Z?!{NsCb!v!gip(VB)sf-?< z8}gQjgvH~050foAb3a<>@~BUja$EekUJR9~8#pAg2TtE@ozbke!eDVxV?_5nHn$+d zFFjDHzyDck{>ZjncD&A_#_y>W4(^`ZK2Xy^FTL*ljd;V=!)XH(e2n z(FVE+Ibe2H08&J@_tuSn>r@~)$ctt)c?64GaDob`s@lZhoHu$=tAhLl9kc??b_ z%g=LlWY1#Mh1pvK3uX@--U2r>nC1+C;1PGoxX&eh4j>41E(-h@_jz@SGybn!aj9ii zkr*xe?6n0TRL@Uia;BTqnydB_1L1us7dpZchAW6O&@P)UeET%`dPW?y{G`9HKil;) zcdP}5t6&wDM**pXft>-?=7gh+fh|Eo9D5U}Kb_Ky7p!c&Yt_0f!Cad<(QL6Y#^Vz| z8Ls(z$%vCaJR65_AQO38$>;Xa;%l?f&-;6%rI3&?TZJ#bv|X^7I0G*Q8e$h{y6(G$ zh?1_;b;|(p$G)wiq~G79>!}T0nw!360o%1>?Ubs0?5V>bpEZ6e*n!>iCDXY3i`&a}B^RbY7PZGeoc=PmpvUba^WT|WDR3EsxJI~@ znMi(fK<;I=NHU0c$>al@&?gZAv!i%&a0|-b`t~YdM-GPfKEm2*U>Yn2$Zt_K*@SFM zvlTi2UTYY>?|0=oV7?lW!!t>4Ce3&`8y1VdL`R6ExQ%kp^P<=ym-HkRx2hoW6Y z10UD8zy}5k4Ds290(c@pFU_%WZXUHTu@Y%j?Qt_EW#y^>K&W0=CZI?xbQ)|4GI9>b*Qc8Yag%lF3%C;yY z^;_Bg_Hhlt&>68_6}il6>n6>lZt)OO$n3M)kPf8xqmo_5Wxua)2aP262+0~seRFE^ z=H9#Z@cw_|wz0p1ZX-&dfWq+$4(GyTH0tlF!~5V(;0L=N82uKyC z!x%;E;7N(K-)$~hKV1hB3!3T5$CxEg#1t-0p#xVoGZe^ey#_cMSmPyQkW~ah11}5E72XyN zc|As({XOe#9@6bG21dkc{O`6?MhAa~6bHcYt!^d_8Lc8!;V-_TAOj*yUgJm&gj<3e zv*X1gq3TZKSsi3dk+_c-xo zJ0u^{gCLjD#GiEOOyGSh)Rm{T0ZG~mIBZetDGmOF+E3^x6KJdcyP@ImE`>SqTYaVd zj{^hcKh_^};+Q~S&6vzLvsM<{2h>1E$+eH%Ov(JCoha4_2)X<*tMZaEf)@Y*u$r6z zE+i=mOIv%5&!KELb zS$~9WCS6*=m)aoO0xeno!wCq)T0cK>r7kD0Lql#EI@VO6Adm*P8bnjCTZrqMRE${T zcI3gE_bMmla4^_+&zw}hfVt<%t7b?MyXqde^iTqT@D@5HwhjBWS=Wz0=JGO%NRmTe zT;q?mr{!e0PtE?1%Xa$oSzwReJ^?-43p&n5d`t#$!pZPfbQpl2c?Qg4h(LuljRLj> z1wb41s$JU$5dSt`R|h0t=f6X5Bj1S`TJ3B6rl2zkaXojefUfkBA-zJA~Fk|AR-#MZ_}S}e@47sL>8qspADqD z0Y0`0%^_9N_wdg0Fe7A*vzI9c@vs!Lwui3wi11L4fo@7mRS2Nv=UZn>0S&y8##jYQ9cyow1Mm05|K4wI->A z<&=;NGgNMJ8i!6BpkoHuO)M+Y;EZBL#>cY;ey)wwJfA^8 zsR;;uZ&8QYaTt&r2}%(F4$B`yf!uq!m=hJp%%GN8t5hUMM0u^Bc*w^4a80ngqoO|E zf>{RNj=8Mf7WlT|F)gd3t;3EI{gah}A4hH**^Bm3$pf@=9R(+VLN;suTJV zW5YLP-cpzAU$3@LL(K%Q4i>3%B50k9iNlJY2iD4TVErkKDA6YecMKNMfh-ELXJ0Kv z>aS)OQYV{FQm=-|d^&U}K&h$Ax1DVk~@LbrN(vu^^}awJZF7i)HBYz1YwWo=jTZONntJ$C@ADW>T%=Kzaqq zZ>&QRL)}GjaG}|F+^^PCrTELu4)WX z!^R?N<*MZ$Fo3pwJ+AANUz1BJ`+RvWAzMQZJkr$k9UKWVE z&WDFh#+>h0X`=4)xrCQ!V<>JOjT=qt(FdIwZ}KR%>L|#B1+G1QshjX^;@2s(iB1<0 z`NF{fg5;d%3k*g=#{`Bk`S_n6Ov+z*PVLHBGh`e>fOvc zEYTxs;vxMRchKPKZ8X^11o)BOW*zb>@jMDpa~Y@p?POim>lX!FS)r148ReaR@sN+^ z)uS=bWt{ni`YjV2F~m7eny=$gycmqalBc?US8x3}2HS$OuEuHwo+j7A!qMtxyS{3G z2#!GlRy*kK0m32pmk4g!v96U`)CEU5EASjx2vr3l6-vm5%nH;ijf&z~_L;%Lh*8Wn zZ;aViSF(inlXvYu*klxqJ<)V#$66JEs#F6R#rgN_YDu(J50w`#Hem#ZsJCB#00MUB z{G235vun1P*6e6)r$Z!>w4Bre!EQ$NZt-*!MM6TD1UT{mVSmDJj`jkv0sw;|0425F zmgx^WjMbHkB%A^!uH$}S{Gder6FUxv>g9ig?H_Zz{}wAsGz17|zJqOce)f9;RP($- zNvyjUO;NmSsbrw5k^=1VvfZ{$fi6LqiDw!-%3#{8dl1UWxaisEGQp(% zy8mk#rF5PraWNvkq(DNw2MxLse#L7Y7*w*wLq?G1Iw`Fem(RdB2H?LQn}m8;WgBW6 zIK|Z#I!NMx$iL$zJa4=~m2gLRYB7 zl{hqbOBeRkcKL)M-XkfYAt;ll&U9{7+MPH@;KNNUa~t!wU9_?-SKj&IFg+nmxHa}o zIUe*7me)<)m+{~x3QbQkDJA;yQfD5YIDCjF;GNf8X_zqAyhi>oIeP1hE1gB$98&X!Bqlfe*QyA4hJFJC72xsm(g+oKhMeoGP)>J zKupSjkTeV5mB36%y-2Z)U}zvivp37eDPeJa!{S5;py%!Pvv`_7E+3FkcGLXDou+tl z<}}nb@ieWXp*lZXxzlU<>=}0f$+U9vN$}agK#~6PFkuYhQK|{qu!lycbG9o}Q@Y&b%=9=Ble!C6tw9pTlj@p%e>UNRt z4eOcNxRPUcCwZbZ(07~sUq{ewiyco>wJ9iOLIbpzd0%CH)2OyG&XtCClPJ!8I$wLm zI;i?UY!QR)+JM=W#!ndVLA$60hrg>31a@2-FP zWqLwITODCbbN{mZcg#jd? z=!iV44>5hAxOQprLGQW3g?sb?=F!1oi4CaD<&#G=SPNc8CYEVnoIX#};w4r+&wNod z8^!Yz?e(!x=Tyn0gbDSaXOLrLST zU0dL?2WrG$V7^HaF~&@O>6CwcbrR!(_RU8%ImSfs=)jWT04pzK7JyrRn zN?hYlo}P0S;`Sk1`RDNd<4Xs5wwQs;15_2=%k&d~Hze+`%I_e1@?!oqm9s~nP~-Iw zm)~)&1%S6e8%yM`g`JZgO5iwI?if4WDGVSnXzc0M0Ob4XoCCyn-m#quPHp#HK>@iZ zIKD_;^R=aC103fR*YxvxF3jHU{kZY|#B$+qtw5D^!ySnkK%73!G5)8tSNW<(u4XeJ zJdD3dJOl3)h_7M@#{{f#RQMpH52k_ifOsLvQp4(^VNpmuz>pyt876NTx`4P^?-}SV z%3lqtwFNM!29fR+mQUEqa5l>GD3)t7D5q5jQ&|O_G_9m=9ydn+CL{8kOo)URL*CS$ zI4KIqE+3hII_tP3dWl?|h#q4huM=zM_G}S5&9wI{PiCDvz9`^LTcMkylppDRanXOr zxcgVIvI#gWavQmObAinKr*8x>6Um;B7@=2<|H4E)@@q4m23fCKhpi=BPsxBq2Zj_E zI@62>yXOqGEPMg!;{%pHdxPBaz^WVmSNBWa+vbjZ<*=FZ**GpKRg(2u$~5cPMyLR= z_xOBU=?^RH!K3?v0`^)HspLMQ;)vIYP0KFl15GE zJ^0czm&?r7Loy@MQry*oQMoE0alsPukwHxb7X_-ugEv*tnQub;JJCTTR{DO3wscTs z%;FcG)k9;UYHUSy9j*ONi7bxu!oKfdfXq%|0V%`&?ynI63_xMoCx34|RzZQt@d6i@ zCUF0e>-Ujw9AK5mt;sXL0PfyB5%e`s*RRHZuB@{T)2vTXZfl&rDW$miHgN&q?99F& z39h`SJZ_+A1%O;1GkDZ)BbbXOY31jh2;l(R-o^tz%vhN>eLt~Ii!4=gEQpMcV;J#o zPM>+u7MMaRJ13WayBT}V5bQocd8Lb{5;eRMyih<|j(-p1INUDEiI%95YDb(MAEP_<;R+4LU%7!>!HpEu8H)CEf-(t$9gOFT+^mrV3yA zJUlyZO&7EwrRYKaCn-Nc{e_vtX(1U}I1=wCmFp<)^F*kA z1YVyr_HUYjDpq_CUO9mru^?JLCKqQ-wX!fiNM5;T+ww?*(9L3J8bNlBKq`NkN4sf?f(m_0mT*IdM>&)Y+6SJusCu5U;Jc+&CwSUdZ z?}o>Jex8zYQw|Crzy?Uy05ZvGb`9h@!v!u;sOG>r(F9dY4HziANk*y;EQ?H$J(HTK@+2OwB-t@-(E#8ph%=4sX+wuOsZ3c-CJ9|q+O zvRIkp{yoD1+)8om;4uX1(9e9LDil{j>1n3kv^P@Aeg;32DCj&TIXmuSW|gyG zigaHTi05rVkiT*V=@l9%tltV=@ugt{l#GFrf2APdMCa-BE!j~YTn7l zbD;2~mWCUPKwMxS=13-3xL(mwqTI>_YzG8yz@phJRd!9>2>5O1 z`{WD(`<@S_+lG+_;+|3r7d^jR-}7P`%i-dLYy@4pUk=_JN|T?z`^!DlsuGHTq64yB z*Pk&i$rMLS(gK_<{H@wFZ5o~#4+~cz8$X4LyGR_|9^ir-7SSYudPyKG0LECDb~9#k zur~&4T3&sz^2iyt*~~Soc@cZH{we#Ne~iQ78`$b+-=-&?@23DHKDSMBqkM<8d;?WU z%|jPYl!E_3;))Zv(B{ew3cadbPl4@6PpTJD_}?c^D{X0FL6x`15$`w{#mZ;7XpN%* zVs5PH1wm2(r?BnYfKE4je)qiD^^TBA>gCMEiFXJ!L)_cI=Mt`t*1j4Y|8Rt_C)8hbrTEM7XbB$b~z z46IrU!}t zH}M5ruG|}V6@vW!Q-CLmv&vfR)qJ%yjv_bMbD|RW+1j`lVi!;=Mcv5$NCH@kpLL=g zi?(|%#WD+xD0^AN6BqNH?W<{R(loIYfYJwQLqfQgc?1^lj_-dY&*Xyo>@;t=B*?BD z!OHQlQ32%qOpn#7G>zwH@w@()C8V=t#Wb=rWiYpKc7@GYcmnoJZ0k4NbDR~8r%&+ufx6pE^Tj<-|)gP4{>0eVE%<$e%H0dizHV7?vF8Bi1mfZrqY zE{^1YS6sQKvA+SH(ELg1wt1C|@#&9>t{IGqt8Zol^-xz)g6hX>mOQo-HqJ3gGFsoC z{&6nF>pK@wEu0#}P^f>=?NEc;j3hz1AfK4O^Tfxc@^^jAE!rGU`C6mcnW7cfrmt z2zhD%`FAm>be7i>wNiftPL)kMEspt~ebQzeaO&XsokdC0s%7>rWw<&20x$xDescp= zJ7S!+14LqmhUt~GUd}CNJe~ptPh4o0_-9@cgvp)#4QI`g1D({nFs{AX>iYLP8bvqe zIKAUM4QI%zi<-of-Q5mW^Bkr#Ob@siP3MR*Hkf*$HL`QByVLHB4I~pf*?;xzhw(-Q zflKhQvtPWtHOBe-LjDqR6ZgOIq?wZnKi+ZN-_bv+QEq&t7 zE%XAx9?{A)^%k>RT*1k%r=0~&zUF@k?HYT1{jJ!{jrt))FzQ*mb_qPV;>I5vX?;o+ z!0-|aF2U)eGuHFdQcB0kwVf*>u2(l*w#!le>QXZ4_PtNAN@?pq@%uH$0Br5F0h04; z;Uo~ptM#VjT@K^mJAWt{dg8OI8xd4Ma1uL=0g3#8@cbPmo+92`o=%J#Djr?BB~=t& zhTmgiD$ zZn1;RkdzJR4iHbm#|fe_Wn`RkeIz$qk{s#e{&N|*)xSpis+)fnMJpV3Cb%+-ujswg z)v3&mUEs=~tNq;c>Nb!)5HHgvx(B=6|2z-`mVLcg33V7e=2=bU7mc*0$gVd|Qi z=&mO(+W@Np5(yqi_?B-7Rv}aQ3A`jd1|N5p60bvow+grgWaew7ehJ?DBo+egZ-QUs<##)jc3vRUr36Q;H&%{=yLAK&mMUZ6_!Kmv z?IR9+GTeMJ05!F$CY{If*Haq5($rZ6Y_%?rk|Lwtj!^Uj=AtVqwL7#!Sz13egrLuI zEC*=aBUe%qSy;!?Q-e#i(%?gIpxEoU+X#x(2Z@q)y0uY+R!0iUG40}6s560_)V(?r z1-s*fAvCBwEX$`KS(++HNE@t|(%fPiGW8dGnYgZhEBsruh2zzk$NwEp#f~5pq7X>I z`J{;rDtCR&XL)KOWP=iiDUeD&)J4F17zLO%q>Mxnvh_S$Kn(37;1p{)X&c(;Bh zrZ-^l?^E^+&El(tik6S}&aU0M{%d+LQp>AHNZ?B^Q+u3OSwI}q3s~TM_GZv_UM!sk zvZ}bmo3Gi|5js_4Cl$slCrGr^)UArHMF)X>E9WAt)%ZY1 zBF}~q^W<0R?DTqhZ59ghBSNM^xE~O#FWwnC=(l3r?N(^{6E+C2umgHqR5$YI_ zz)$>QI5q}&Svn*EX@?cKbrwSI9C{fkaun2W5z~9Hqvz45ev$i|4CO5O{YN~(9`3Z|_SlnGjOp0AfCytA+rp28e9yb<)A-;-|ZlDu|ZeyETposHWk<@n6k zD4`T5z|ATfqS5?dSBfwV+=%s)T~6Z=y*o|j7 zZ-0{iyQ|L7$i4889AN7qs&o6`*!~g4i3kS!M-39$WuJxgu0Gi}i>@u->h^bf!u&r4 z-XMW-EMOsh#N_s}Z{#!EimE|LfS?Ol*8kj*012VbLQb^ol4f$m^#tv?)FXg#)w#a^ z;iDszVUG$@W^I2u#^31uwY|2HuU)xts&)~}2AOzCM`l_%409r9`PD` z%Vy}?IkLz+smP%OnY6&o(2a9-uG2ky+2wkR&}Ohb%S!jud2woKMQQ2wYWYix+Pb~c z8cLqYUth##U;6Q=wo|*%NqbCKTh6-|-)(BVdaABkS0TeP%Dk_NBmdk{Gf0mgf7Av+ zvx9*ZDxy=7xoClMnh`y)_i03M1K%+S&nn?j=z9m=jEHG+wF(4pQ9US30EP6Dp=EHX6aO;V?$0l~oBway zj&O(=8lq=&QVMB%Q>=4h;V$|e16nA2OR*ChXuie+YjmJ*?DBgYAhP%Y!hqJ90%eMr zW8Ejc1)0j$kxOgn2N-bWBu6aA>}+<<<-KQcyHX)tlw{y)<`As8$>kVl1kZQb8c_j! zPj_U;*!!2Nd9laq1qtatZ72b+poy>*?_LkLVF}nTCG4HubGs3!Eo(YHr};hS!;AD& zflSoPto3V}X(oI9ePZ7CJ05YYi7M33aIXfeu$U+AxvYGk^QMYe`ny?HN-p= z@~FShRi0bJMJ}d%LQ;B7jBLlyJ0QqtWKjPo zY(ahZmHcX4W7EvX-5Zkn!T3&3I5-<)T99k`(_j%5!v5a|iCSpVU2H?TULjs}k4M6YkWQMQB#|`}tlkO|`vM zUZpFQ`ei%mxX1T`s47vAA{?3GZ=S5*u)oEZ#8sgo?T8X~*Bn z3avY6TAiL(PVxq76*&r=;7)D`e|dI zF-|)aZqVTIF<|U1gebGV`T@WTSp>RhK~V1EuWPTL@hSwI3cNYVNs+eYYO^psS`(yk zTC?x~ZXAGn3p;_9U^Bff^Xe%;EPQ(+%EC75E=3Of#LPrw@ti3NDLc3fjJEb5nM#0A z98B6gZTvYu0K51~){lX-27|?v*KiD-Anlyv2n(N((*7-|-XaZR%X2rnsy63Pw0o3g6iP}NlcSG4b@!9$F zH&j%M?RfhOV)K+=PZEOiy^AUxlS^U+Gb;%WyJv=^SWo10|Mp@Hckka#m9w2DaUPKK zl%{BQo9Z(r>%GywOfJs$(N!>U3ze)?vltu`=-n*^t?+ryW%+(ZRvkQ=X5HiV>hso_ z_vzNQ(p)judCU&;RUo{Y%I} ziiklYLu>9_ot&=$T^CqMU;-WG5P1pn>|OAWw>LQechc{_msw!i@H zH*|k&;#1)L`pF{Y50v$5d+Cy%EOXgn!z+W#fVWk~kV@=>)z)(2*F&m+m^f_(tqQ^= zVc5IfhEJPC-H%;n$yuFr@_+j@%yjN(q9U`!_l>YIR6#SJ?wm2tCZVH_T19JtC?3NvR#wE zs1+fbb!Ee@1l3kNi?>5#(0JisK<6dw$3Hwv8GDbs7L?P-Ex0s_TC3#>Q!_y=Tr8ZBN>N z{eJg@{oIza^1In*f8P8L3Nv1Nh5|Ib=YVM_gQ#d)ro23BkHggMV=`oo5rjsZ#(}Wc zFz+~40|QiUMbqmg0C`lz6+yI^?Dl_Y=t}+ACU~T(KtvyT%jrQH6=3S#gtPALj535^&i8y@L!TZS#_};gxDWHo+vINO z|C8XLK1AI9+gtJgeqEovi7+2n9k?Di!i0v&fy;sILDRv|fyKeIecSaB)pw*5(%Q}f zIiXY&Uu-J(k75|p{x)fobcvA1`I$M!(|nnwb_XV6LDhj48sS)FgygLR=ab=dPfhf{ zM+-tPqgVoRUn!oHa$Tu^61cEeN)2-1Lmx0?1Yx{6e#OF6a1nFr*QL0T{N0;hw;ua7 zNhlsYeWh18*9PY#w0hy>8N9(|)kG8TPO9$p1c-bxPX0K#Km`c)jW-9#5O0PG^~?x< z9^OA?myMm0xJ^;b9DdaHL3(KR|``X*?%$V`30ZcCawy)nl{Q#wX# zr!B#E>4LJEQQ2R2N)Z*Hv6#GCO^csE-QdH=#_9PQ&zNXo=;?u;ifv!uX+V`N@ciAr z(W*^#fP#_$FGFTfq=>k%8eL*yPih026na5brLK)_UI~wJE^|Sg5H7lomyr*qoh!+j zc{ue&d851$6p{DWm!!`$#Oq~>@SyH{IZfz44r@>gSD4WwmSIo)-8H*)khZqb*g$&1 z`A?bRAD#VIm1YDEuow@R1zmlgZe3CmZj(ub5maF-m@TaJ16}g%5ZFJ02ENgWFJaH( zk!TOPI20wgIG!<&oJKlJzFi+aD>bW|T=@GS`P=NRh`ToaY%!=@8Or@0!I}6Kt4DW% z^?eiHEZX%4b^IzYR;GOT#}#{`nbU9R8$3L-@~b-kUsK;6&-5St|DL&&Ye_C8R4U0W za}AsF>7qz|m`jogTagfQw^311!pHqGx=?ag?q-tvSf7YoHsrG0HVngT`@Qw~{(j%z z>yNRwhwb%xo%1^9yw2r$ddy@1DANtC>u&Ks6Mki{{u8Lf;(_EEj) z$osoCJ!FX~Ne6|9OZ{FIYCr=8x=%9UeBvu7DCbD$ay;q|=;75fO>pyDHHlrL6Dw?* zk@AOxmtd~>dTxKeH545etsMAeBPhCScg?dn&_#9C7AW4Zcm*^`qKLTtuE0suTR{h5 zXikbwZNZFqQnrQr9PgU$svKwgN}uj!I+i=XIJx@&?iwI8k?45xpff-4X<#XR;3K;0 zWQh_Of4l|w8#oIQySV94AZ|+(sNnFE_5NqX#Q^d5C`C%-(%?e8&myo7i@0;3&BvRzo z1j1^zK79C`Qx?4DBdn5(<2&Pt4eYmi#j-ihtligfo8E#CRSwSraXWAm)FXg#d`qwa zwYKG(*w^w&OMnKk&vcXqZoS}F6PcC#sdEAXT*85Y^bOrOKEMo;Q?**lGKRmodE76o z)Q2JGiv4(~_Gh2|$}<=kcEfNrAQ@)x?Twu+4+;e>7@6_TRT&`n#qbTL8M3$}7u;@~ z$vyya%llD#OfL2*BFt3)XD@RG$c-O{0;b4O%84Djr_HyEc3w~^Y3Al>!{b0*DMohrO`2wIADA0Hnt|^+K!7mk${%Utkk5|AO9d$p@!H*u@>#dUB zU9GymvNt1eFt5-3_riT3ms((rzH~J{1)|d3?)UN}3S7hd)k_co7zr#BS^HR(ar9fW z+Eaqt8%01#4vliyc9D&R8i$SNijOyBGJ`N}%@Be1+Ym97Z6pA^*>T;1cq$6rUryZw zO$5lD^U%D}YkvdWe4U9acV!p4i+^K0e8qKAxVAb5n0-9~=)VodNTA z8-qpmxu=^C@85}PDxJWoQzKf%fRr_`xyNfzH;Sw0gV)<9<@4Rox@;ha7leNNbLCav zGdpZS2 zkIR?4V1oMg=nfz77a+FFv|DT!FolyIr&Gki;9XT*di+<+LU;U;f|j$pdSGo^#VZFa z2;PVa_5Ux2b+VcbsyQFy!Zjn{j+wnp_oqD7##7+l;u0iq5H>jrFx?my0e-&V2U7aJ z^9w6UG5jLH(C#kxhW66Paj5C8Q)B*DN^Y!ozVRS$jCA${%%|9$;hj~A(;I~GXIqi}Nh#~ex@37X~}(kH}^#dwJKZXx5JLB9d7 z-j^7~N*1wP@rRpuCZe18LD(1#Q_uhO~KpA zFa1mXJutAe&pc|Nb07c4U6LdfZ82x*`!lQcAV-2B$M<4#S<(@>EI-yEoreGkN@VhQ zx`14aCji(<_}mQEmIS;U6D~ZpQU96zI00lkS3XHNHUer&J5>n^3tJbMjlf_m>}WaWL7)9Cf5^QW=2{LfXj`JTye!9F8|!^ynq zu7#VTKi>7iDID=ym$@lJ1~GDB!l#DWb2maor0~~g{vK`L{l_b3HClC{!4rtB+LMkx z+bMg}cAvvR9K(8VG4vz0rGf%)k?EpZNDXa2&<7I|?VT(iy z0!JZb1OfyX;M}slntSreDnVjmv(grEs_2#3H80jzYuRcqN8!cPqY9@9N_lpv7I3eb z#8Q*7j(EE)$>NTSr$SbL|NG`P73uVGK7vKnv7E`NPgoec_Kix1A7WuoxJhUAt(nkR zn_O;qU1Vc=Ba6!8l{N;V(O*8$nSK$3F>6{@A-yw;#G~(_(!vc4Pmc?ZH^?smR_mD{79H{IjKRuv7d@gH_VOS6=h-NhM zcpSXtRq+;|-c3W=l3(vE{dmGA9fM#y5Ca9dp9i_yv=Qu}!iED!&3O&cQsx)MhaVYb5K$tI`e@b$OTI8flDvu4vG`GBoxuh9ZaJJD+{8(*7#9JgIx z-)z~ML1mc znB%S*fT`U+U}GUPY8-a$?bL(&8u`)%^^5n7dXJeA-h4W-_v9({efhV(=jjE9M;p;mOIUISg;Tg>j z4t`AE?pGLm`1%mduR;))1bzt3Z+$2kqvC<*P{2QwFp$9&xlFg7&24TNi%dTWfFBJ` z3cEgZ4O&lINCMwbl1&Uwv9N3=IVhOw%F8l;Z_Hk(#Bwos!wt4$$*`LY%yr1{??7DpXYIgh=751Rwig{d}|Hy%YEpc1xqby zIgI^oD!p7?&vObHTesA39B9|1ynlXsCGCp7_Qh$=@O77AHZWC?VQj%@kf{AI(^`1@ za*~#3gtr~>4fU7*$LNH;-tikOMYg}2hD=&ChrMrG>pHx;KX_{rI=@}>Ikg-my!cmBF{O#k3xz2iSwB&*4d%#d84BSV&RiN_)yJ{CKJC>j zx^N}qbsE@8ad@kRSxhFxr%tR>2>ZIW{b&4XFre(5m515>zIM_!Z{c*0>0ObjEa%dU zQ_p|VIth1@OYE+=kDg~u|8a-$xDGq`dpOMk`)w^y{~zY*r%wpi}r;cm@8S)8Cw0o zWEA1EVqd49+BZiWve}PqrVaiU7^HX&r897KAJa$^g!%bp{;Bf)lqqUb(lwjBdA{+L zzMB}CZ?)I43_jeM0){PJK35fORcZtxeY!xuH0xdX_8L2UO+*H8J!*dKy$^b?E46IkFus~%Sn+>5rCMJW#V#df1ggW{|&@BuXe^Wnk$yFaq{-+lCIx;b{J zggD!B$MHqRg`@q-=dGKS!CXf+wlQwZXtO3PBcdVW)5BCg2!vuL@<688BYzx6!mbHyQg`T%N)&Z{e#X;I>8To~0>sNZCP7cgq zUAsywnGxlgnQ;z7Sv?l5OVx(?Y89sMkVnKUK1sd)O&Qvv8z4$uB~QYB1)Fq6`R(t( ziI#tO_t$CvXYQuuacaNMnZLNx$!WN6?8GKy06FeqB=$kfK6Adn)a8dxgoC1o_-Z7^ zH;jFR^|ZpmNA9$!>7+S;ffE$Ad_Z>A=8>xdx1nLc3HxSo?l<Yo!Rl+!Ea3j^8-k=$XbS{phCl3}@f7pbw8x$tnB|5bAH+JiIs2C?s| zrdC&P>RVV}d$68^567I>rKwhoRpP6!n9(@%(1K4t|C7@didfz?3#li#xAjU z7*Wq}f(gN!nDp{h{hIGaxjVP+c9M+gKv9EOtYRU zFnkHsXYdP@yULP^hfb*XDC7#336^wk1UL}>;nN$(m`R~QXf);bVDtmLkVz(H*3~8| zcUFu30`|7+Ym2)zJRli=Jv|v8^yq2z89R)4>f*3HD7&KVKo> z8d+S8npaP_7!`*jLA`GR>8$MFq<(L&tHmJ$W$2=lRV5#vlj>?!fcm-Op(C|0i0X&O zv6*jG61&t?BvleKAD8D#RdeNS;4KX7L`WL2m-SQwM2Rm2cJLB#pk*ox zqQ7)+uok@c5c%(s-WN(rg5i-r110LJB78|ZuZA({r~pe+hQZ>I;CSUWvwttJ$Jd~N zpm6IbU!w9a9|QRnzQRJ`4pN9~S;`ivK|8XrP_=`^Ur4X}`24zrqhrc-XJ>CP4UX@NG5$^I!_?RL;YB2gzTB$jf+u^-xfqe#G0T~<(9 zOE7;fPr(S~5eJbriqrKJxnSbieLFG)Xwh;^D-LM^;pd3M5H&DAtPGqy2uY}g6A+aa zkrn}e0#x^HhMMzbKp?#)}?En(wf0P*UhG*B8{2~4_w46N(lAoVH zkni%-Wk@GIIawe%P}-uoOikLg>)rvBuxE+`R4=kw)>^F+<$=PT^wbvv5rYKvASf{{ zQG1j_^vNQJ=w@O@>j8UEo@~QsjCP^;oZIm8D*_M;B{3cRNOe^qI8@(9?U2oM*xGfi zqS~O=_y%P$UR(Bo&1S3aMs+e`M7cif=_l#F z{_Oji`Pf@$=KAEFS9h-uaCwbF%obw~nql|(`>W)*A%(<` z@pqf1>gy};ed@YCR5B*v&=m^as4aW;N)>O)Zh?ge9|ne;E5#RlGZz{8H7T#$<-|!7 zl9-8mXJqZegpAdo1Gh!#9O$?&g)fycZvV(?zJ2C4{)#+6OyxZ;SHr=`SU!fa4+;W( z)eRxIZx8o+*F~WmTT+(s7egNLi7QF{#2)mrEGvwP65j8&v;1pFu{@D%53g-|&o9vW zN>}c_@MA~))UMDD3p%Cv&RpazGzDL0FE4XeY8`LAwN6Y=KOCPUPB_a7(3pAf*T)}G zmV8s4IqMbcJnmrZhnZ{EHoh}83^>ikuC}JYqT`0=3r}^$h+e;~g00((U*0t4xQy+gWAw=tf zUc}e0C=U7std0Ko!N#33up>gpADxoVVKpa%iQ7Jae2$RI9LQBp26<@L@ zmKabRR2ZdM;p2<8EufVyBNUI2ln;u7I3YNAj-Y)BEPWU3sWU3AbCBCV|juyJH5* zk==X$NN61X4m13=4HN#h_+^GbMa{$O0n6D%AH-RC_5+&>cB9SPg-yqL;va z8ES@{=D#vv|J5jThP|-a={$7$39rG}TL%6v{?+y@KQgY(>K6O-^XbKko+p-<@^goJ zny|<5H((Enx(oEBc7HS6RZX4iDVG{pDaD)P?*1M!;n5nhGHejG4;*6)A_5U0By6d0!q`@Kx3_iUj_w8Cs#6y95M7fRZ`fcK!5nCkkngDXo4z)54PkyJ({?a=k z&9ZLU9&>(C_x`c9x@6nAb6-b0Eejl@Fz1-DHAlpuAv_e&4RXgC3`A@0;Ts#zAdCQBENf!KpbPa4b}{UcXyHmi(uSf(xy zKIBFL$6qn#mwsgIXv5^4HJi#iO${_NJx^z<1$mR|vLsBnrP7LAUs{zBc4Jy5$JgU3HXWw(GMoJfo65P)eEzTCfnMOA&KgOcO2;WKpY&jhDG&0Bl?&G9YVz`f zkw^Ww#@=_uANgWCqS{QDqzLq==%fOdp2e#PYVXztP}%xEYx2@KOJ07ypqieGy&Bh5 zu?)cYh3=EJj<>AbZLii1j1W=6L}H~i@pj}P0E7+yzl`oLht*)p@M}S6nO*N{$a?)Y z;91=tr3`KYZu^AG1NXV_6+v5pEl8y^IU~;DDcqI zCbRyKcTeW7wnH8H4xqMJ+>2!(5%v{U)#qGu=aTYdeHk$0;A{%o6DhOus z8ld*cNRsA-3z)I{UJ%AwO}b!kx`Dkvr}hzPWR*m|IsAK-#) zUeZLBlDLQJ-e}Ao1CRGx2tKE&V3+5}`wWoil7C2Eqdc{_$^D!+Fc?B02ekz*&TMtv zj<|m3>r^~iL|#71fN)>(U@AOkz1`Jr%C0N(s|AJQ&nE>x7!)xF+fArvQX8kvkhYCw z#sYd?S02&(d%)No|$uP9g_Ql_SxJ%L){0(Se~kC&WmfWHZDb9E71Y z7VqUsFm3hA3Nrf}j;XX;VMgk$%FuD_Q_bGIug7|fc87;VUru}S)5`cIZLAe1Bx=R? z1AzWO1V*R@2@*}zQs=>v7D+Nh1Lg2YNY+3UkPuNDUurOvm^}0|aEID>lkl^^!Qa~4 z;a=w*+s~{29C*a{DDj{BV@13=i+&XY#kMW4m3>W}V5mtLndB&B^rTl`wf;*}T=7WC zwy(1GEbS^w(06qG*%wX6w^r_U9=+fC1}%T|s;=bRDI9D4@HyMWB=Ea5D^S;#vqea; zIiXCqI{hHQgjfs6W=?)lYx!ANZJ}Q2E*+=-DAGmfXSrybhHJAHN>~I3iF?ut_M}5W ztU(X>KQ53mumg8Vcg?0llMY0lIQUw+@Xs`N2$gPgJ#bn;E|@glF_HXuvRr$jtMK*x zlEmaTYt~QoFdSg3-%k{-PL-~DZq z){cdyMTD|O&?w>aGThP`_G>4u#gY4^_A5a=$Q~oo?y=Xb{kJ z(|cOOX3*)Ri%XL}=)-Nl(kJdI#9r(hDwSpk+&LkT^Do) zq?D0ve+Q!fP9BuXHa}bPZ0G^nv+JIVG!VP>!~s+UVx$N6!kM3CPq`3v_=_U5wH=-R z{)^LE(*`A%Z*#??PmVX=#)<_AE)oBMEnh}Ew8XXOqG1NIVXbq9XrGht{-dvQ5sDhc7o3jZEV!! zd_3j%t293LPE^w|{Mc(Ec(%&9ybO2#ypVoug47 z&U+zWrBOl^3eB0P4BRp)QU_(pB+hr*c@J1e^j>HuRbFIA8&qa<|4fd?n@1;3`}4rRuy6R8=e_W_ZjmRYzp?3se1Cy&s|M3r#C9& zTU^T zMwVOgDtyAIiL}ha<5}|?wE3Djcpi4J=SFyb+7qngp}?DZ8!X@2z1HKe>0slXiI)YS^rSD?3a(u$@;4+`}(cT1Z{l}iy!4p0b}J>nH~p$ zN@Fn+W46fMAO0g2;P$EEFL~@0#h2QOxAJ4A+vrYA!q`F_ww_M)H2KOwG#Qw$H*>er zMz>ebrucR#UX^DXG=_*9Ot7w)MHg;!7t^1?_TAmw{gzG}WfJxfc;V6hK^5~?dPo$R z^%=TbHlOCce$PJEol}N@t6V@9nIKd7f{1#SC2ygFAqu`#?>3#Wnc0VkSV?tOqiO4sUWjV`JX-|fV>H~G0 znRi>@ePs4R=Bwac)O>8h#a&BR`2%PjCK*v`uRXbJte*A8@??v)_`@Q0o%{Sytg}-& z>A3iUeU*ajPe_@TC+H;kq6U;fiE02q;sXRzwm^TGbabQusOdL6jlxd~+%paGd;@kn z*g1mWAoUlvj~l2Rp+0LtJZB&zozQ>&Sh9mT1Qkt@*AvO@Fk<#LBpH3I0P`4OB8B6}8C``% ze8Q@=m8#Wx1yy>BU%q^~f7MG)q%6(}m7fBUeduSQ4if;NFaQRiP#|*Gjz=PNK;Lr5 z-NdaUDel-&0abaR(1_Zj{6|~h;^LGh)wQ2lYqM`(W?xLXKFKhr9{!A7F`xOm$JgXm zfzud%Onn_2a7dtQx1*Eb2gG{nWLN|@M0|7OXZ)nQ+!29~#Na|W3URQ|Q3KW1UiMNsV{ z1q1{R|FLi6Vx|E3c;%QuGoKEb?QawHlg85Amc^@YTV1KljLVDA1%uiv(B!&I8 z?(f%GruQonFhlFcUArD!%?eh;pPKhj_Y{(HkVBhNO{k2$y{22t{O_Y``6VU=qHd$#AG$36jYER^Y0e9$gto)FHsLGq=3H+GEuza*nE zRIxB&-FsNCGdmWCoq=Y${WW`@JxWuS9rXIUpW z7JYpjI8;=W1Lxk{&yCRC4=bnfdU%)!Uq*Wo>$7F<5_CK~EX-gae={S4Z+xx`Y6qq@ z8`#;|0azYX5yUZEg4_%Sd>SOigGzv!U(ZiTfN(N^ILKeMan3KJ(9ojds=_GM|4e33 zDIZ$}yU>!2RvR>X*x!4WjK#=(Fn_X<7DJ@LOuvN*ko&&%kcbUXm>HB~Y>BWk(}%S* zFle+BS>52c5`>RH%XeE;S-(HeyzR43S7RCck6isoC-5zyleS^t UN;beep`6LCCW&6~=_CaBKbGHo>i_@% literal 66206 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 From 788034014298a53ce3e8f256415889532905e85e Mon Sep 17 00:00:00 2001 From: Putnam Date: Tue, 10 Dec 2019 07:58:13 -0800 Subject: [PATCH 31/64] Make dynamic message in secret not bug me --- code/game/gamemodes/dynamic/dynamic.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/game/gamemodes/dynamic/dynamic.dm b/code/game/gamemodes/dynamic/dynamic.dm index cd9500284b..67ea855466 100644 --- a/code/game/gamemodes/dynamic/dynamic.dm +++ b/code/game/gamemodes/dynamic/dynamic.dm @@ -236,6 +236,9 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) return rule.round_result() return ..() +/datum/game_mode/dynamic/generate_report() + return "Mysterious signals that demonstrate strange dynamics have been detected in your sector. Watch out for oddities." + /datum/game_mode/dynamic/send_intercept() . = "Central Command Status Summary