diff --git a/.travis.yml b/.travis.yml index eaa289e5cc7..526ebde75ea 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,16 +5,6 @@ sudo: false git: depth: 1 -env: - global: - - BYOND_MAJOR="511" - - BYOND_MINOR="1385" - - BYOND_MACRO_COUNT=2 - matrix: - - DM_MAPFILE="cyberiad" - - DM_MAPFILE="metastation" - - DM_MAPFILE="test_away_missions" - cache: directories: - $HOME/BYOND-${BYOND_MAJOR}.${BYOND_MINOR} @@ -26,24 +16,57 @@ addons: - libgcc1:i386 - libstdc++6:i386 +env: + global: + - BYOND_MAJOR="511" + - BYOND_MINOR="1385" + - BYOND_MACRO_COUNT=4 + matrix: + - DM_MAPFILE="cyberiad" + - DM_MAPFILE="metastation" + - DM_MAPFILE="test_all_maps" + +stages: + - File Checks + - test + before_script: - chmod +x ./install-byond.sh - ./install-byond.sh script: - - (num=`grep -E '\\\\(red|blue|green|black|italic|bold|b|i[^mc])' **/*.dm | wc -l`; echo "$num BYOND text macros (expecting ${BYOND_MACRO_COUNT} or fewer)"; [ $num -le ${BYOND_MACRO_COUNT} ]) - source $HOME/BYOND-${BYOND_MAJOR}.${BYOND_MINOR}/byond/bin/byondsetup - bash dm.sh -M${DM_MAPFILE} paradise.dme -matrix: +jobs: include: - - env: FILE_CHECKS=1 + # Basic styling/functionality checks + - stage: File Checks + env: addons: install: - pip install --user PyYaml -q - pip install --user beautifulsoup4 -q - before_script: + before_script: skip script: - shopt -s globstar - (! grep 'step_[xy]' _maps/map_files/**/*.dmm) + - (num=$(grep -Ern '\\(red|blue|green|black|italic|bold|b|i[^mc])' code/ | wc -l); echo "$num BYOND text macros (expecting ${BYOND_MACRO_COUNT} or fewer)"; [ $num -le ${BYOND_MACRO_COUNT} ]) - md5sum -c - <<< "6dc1b6bf583f3bd4176b6df494caa5f1 *html/changelogs/example.yml" - python tools/ss13_genchangelog.py html/changelog.html html/changelogs + + # Compile NanoUI to make sure it works + - stage: NanoUI + language: node_js + node_js: + - "9" + env: + addons: + before_install: + - npm install -g bower gulp + - cd ./nano/ + install: + - npm install --loglevel=error + - bower install --silent + before_script: + script: + - gulp --min diff --git a/SQL/paradise_schema.sql b/SQL/paradise_schema.sql index 826e47878c6..34d3fef31be 100644 --- a/SQL/paradise_schema.sql +++ b/SQL/paradise_schema.sql @@ -359,12 +359,12 @@ DROP TABLE IF EXISTS `privacy`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `privacy` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `datetime` datetime NOT NULL, `ckey` varchar(32) NOT NULL, - `option` varchar(128) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=10000 DEFAULT CHARSET=latin1; + `datetime` datetime NOT NULL, + `consent` bit(1) NOT NULL, + PRIMARY KEY (`ckey`), + UNIQUE KEY `ckey_UNIQUE` (`ckey`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; -- diff --git a/SQL/paradise_schema_prefixed.sql b/SQL/paradise_schema_prefixed.sql index e0056474db3..afc730af8c9 100644 --- a/SQL/paradise_schema_prefixed.sql +++ b/SQL/paradise_schema_prefixed.sql @@ -357,13 +357,13 @@ CREATE TABLE `SS13_poll_vote` ( DROP TABLE IF EXISTS `SS13_privacy`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; -CREATE TABLE `SS13_privacy` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `datetime` datetime NOT NULL, +CREATE TABLE `ss13_privacy` ( `ckey` varchar(32) NOT NULL, - `option` varchar(128) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=10000 DEFAULT CHARSET=latin1; + `datetime` datetime NOT NULL, + `consent` bit(1) NOT NULL, + PRIMARY KEY (`ckey`), + UNIQUE KEY `ckey_UNIQUE` (`ckey`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; -- diff --git a/SQL/updates/2-3.sql b/SQL/updates/2-3.sql new file mode 100644 index 00000000000..d733759bc6e --- /dev/null +++ b/SQL/updates/2-3.sql @@ -0,0 +1,10 @@ +#Updating the SQL from version 2 to version 3. -alffd +#Droping privacy table and recreating for terms of service tracking +DROP TABLE `privacy`; +CREATE TABLE `privacy` ( + `ckey` varchar(32) NOT NULL, + `datetime` datetime NOT NULL, + `consent` bit(1) NOT NULL, + PRIMARY KEY (`ckey`), + UNIQUE KEY `ckey_UNIQUE` (`ckey`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; diff --git a/_maps/map_files/RandomZLevels/evil_santa.dmm b/_maps/map_files/RandomZLevels/evil_santa.dmm index 2b51f7407a5..ca6ab415c1f 100644 --- a/_maps/map_files/RandomZLevels/evil_santa.dmm +++ b/_maps/map_files/RandomZLevels/evil_santa.dmm @@ -14,7 +14,7 @@ "an" = (/obj/item/paper/journal_scrap_2,/turf/simulated/floor/carpet,/area/awaymission/challenge/main) "ao" = (/obj/structure/flora/rock/pile,/turf/simulated/floor/snow{carbon_dioxide = 21.8366; nitrogen = 0; oxygen = 82.1472; temperature = 73},/area/awaymission/challenge/main) "ap" = (/obj/structure/flora/tree/dead,/turf/simulated/floor/snow{carbon_dioxide = 21.8366; nitrogen = 0; oxygen = 82.1472; temperature = 73},/area/awaymission/challenge/main) -"aq" = (/obj/machinery/door/unpowered/shuttle,/obj/structure/fans/tiny,/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/awaymission/challenge/main) +"aq" = (/obj/structure/mineral_door/wood{tag = "icon-wood"; icon_state = "wood"},/obj/structure/fans/tiny,/turf/simulated/floor/plasteel,/area/awaymission/challenge/main) "ar" = (/obj/item/restraints/legcuffs/beartrap,/turf/simulated/floor/plasteel,/area/awaymission/challenge/main) "as" = (/obj/machinery/space_heater,/turf/simulated/floor/plasteel,/area/awaymission/challenge/main) "at" = (/obj/structure/table/wood,/obj/item/newton,/turf/simulated/floor/plasteel,/area/awaymission/challenge/main) @@ -42,7 +42,7 @@ "aP" = (/turf/simulated/floor/snow{carbon_dioxide = 21.8366; nitrogen = 0; oxygen = 82.1472; temperature = 73},/turf/simulated/shuttle/wall{icon_state = "swall_f6"; dir = 2},/area/awaymission/challenge/main) "aQ" = (/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area/awaymission/challenge/main) "aR" = (/turf/simulated/shuttle/wall{icon_state = "swall8"; dir = 2},/area/awaymission/challenge/main) -"aS" = (/obj/structure/mineral_door/wood{tag = "icon-wood"; icon_state = "wood"},/obj/structure/fans/tiny,/turf/simulated/floor/plasteel,/area/awaymission/challenge/main) +"aS" = (/obj/machinery/door/unpowered/shuttle,/obj/structure/fans/tiny,/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/awaymission/challenge/main) "aT" = (/turf/simulated/shuttle/wall{icon_state = "swall4"; dir = 2},/area/awaymission/challenge/main) "aU" = (/turf/simulated/floor/snow{carbon_dioxide = 21.8366; nitrogen = 0; oxygen = 82.1472; temperature = 73},/turf/simulated/shuttle/wall{icon_state = "swall_f10"; dir = 2},/area/awaymission/challenge/main) "aV" = (/turf/simulated/floor/plasteel{icon_plating = "asteroid"; icon_state = "asteroid"; name = "Asteroid"},/area/awaymission/challenge/main) @@ -78,55 +78,54 @@ "bz" = (/obj/item/clothing/head/cone,/turf/simulated/floor/snow{carbon_dioxide = 21.8366; nitrogen = 0; oxygen = 82.1472; temperature = 73},/area/awaymission/challenge/main) "bA" = (/mob/living/simple_animal/walrus,/turf/simulated/floor/snow{carbon_dioxide = 21.8366; nitrogen = 0; oxygen = 82.1472; temperature = 73},/area/awaymission/challenge/main) "bB" = (/obj/structure/closet/toolcloset,/turf/simulated/floor/plasteel,/area/awaymission/challenge/main) -"bC" = (/obj/item/taperoll/engineering,/turf/simulated/floor/plasteel,/area/awaymission/challenge/main) -"bD" = (/obj/item/storage/toolbox/emergency,/turf/simulated/floor/plasteel,/area/awaymission/challenge/main) +"bC" = (/obj/item/storage/toolbox/emergency,/turf/simulated/floor/plasteel,/area/awaymission/challenge/main) +"bD" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/awaymission/challenge/start) "bE" = (/obj/machinery/door/poddoor{id_tag = "challenge"; name = "Gateway Shutters"},/obj/structure/fans/tiny,/turf/simulated/floor/plasteel{tag = "icon-delivery (SOUTHEAST)"; icon_state = "delivery"; dir = 6},/area/awaymission/challenge/start) -"bF" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/awaymission/challenge/start) -"bG" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor/plasteel{tag = "icon-delivery (SOUTHEAST)"; icon_state = "delivery"; dir = 6},/area/awaymission/challenge/start) -"bH" = (/obj/machinery/door/poddoor{id_tag = "challenge"; name = "Gateway Shutters"},/turf/simulated/floor/plasteel{tag = "icon-delivery (SOUTHEAST)"; icon_state = "delivery"; dir = 6},/area/awaymission/challenge/start) -"bI" = (/turf/simulated/floor/plasteel,/area/awaymission/challenge/start) +"bF" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor/plasteel{tag = "icon-delivery (SOUTHEAST)"; icon_state = "delivery"; dir = 6},/area/awaymission/challenge/start) +"bG" = (/obj/machinery/door/poddoor{id_tag = "challenge"; name = "Gateway Shutters"},/turf/simulated/floor/plasteel{tag = "icon-delivery (SOUTHEAST)"; icon_state = "delivery"; dir = 6},/area/awaymission/challenge/start) +"bH" = (/turf/simulated/floor/plasteel,/area/awaymission/challenge/start) +"bI" = (/obj/machinery/door_control{id = "challenge"; name = "Gateway Lockdown"; pixel_x = -4; pixel_y = 26; req_access_txt = "0"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/awaymission/challenge/start) "bJ" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/awaymission/challenge/start) -"bK" = (/obj/machinery/door_control{id = "challenge"; name = "Gateway Lockdown"; pixel_x = -4; pixel_y = 26; req_access_txt = "0"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/awaymission/challenge/start) -"bL" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor/greengrid,/area/awaymission/challenge/start) -"bM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plasteel,/area/awaymission/challenge/start) +"bK" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor/greengrid,/area/awaymission/challenge/start) +"bL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plasteel,/area/awaymission/challenge/start) +"bM" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/item/paper/journal_scrap_1,/turf/simulated/floor/plasteel,/area/awaymission/challenge/start) "bN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plasteel,/area/awaymission/challenge/start) -"bO" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/item/paper/journal_scrap_1,/turf/simulated/floor/plasteel,/area/awaymission/challenge/start) -"bP" = (/obj/machinery/gateway{dir = 9},/turf/simulated/floor/bluegrid,/area/awaymission/challenge/start) +"bO" = (/obj/machinery/gateway{dir = 9},/turf/simulated/floor/bluegrid,/area/awaymission/challenge/start) +"bP" = (/obj/machinery/gateway{dir = 1},/turf/simulated/floor/bluegrid,/area/awaymission/challenge/start) "bQ" = (/obj/machinery/gateway{dir = 5},/turf/simulated/floor/bluegrid,/area/awaymission/challenge/start) "bR" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/awaymission/challenge/main) -"bS" = (/obj/machinery/gateway{dir = 1},/turf/simulated/floor/bluegrid,/area/awaymission/challenge/start) -"bT" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel,/area/awaymission/challenge/start) -"bU" = (/obj/structure/dispenser/oxygen{oxygentanks = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/awaymission/challenge/start) -"bV" = (/obj/machinery/gateway{dir = 8},/turf/simulated/floor/bluegrid,/area/awaymission/challenge/start) +"bS" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel,/area/awaymission/challenge/start) +"bT" = (/obj/structure/dispenser/oxygen{oxygentanks = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/awaymission/challenge/start) +"bU" = (/obj/machinery/gateway{dir = 8},/turf/simulated/floor/bluegrid,/area/awaymission/challenge/start) +"bV" = (/obj/machinery/gateway/centeraway,/turf/simulated/floor/bluegrid,/area/awaymission/challenge/start) "bW" = (/obj/machinery/gateway{dir = 4},/turf/simulated/floor/bluegrid,/area/awaymission/challenge/start) "bX" = (/obj/machinery/power/smes/magical,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/awaymission/challenge/main) "bY" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc/noalarm{dir = 4; name = "Worn-out APC"; pixel_x = 24; pixel_y = 0},/turf/simulated/floor/plating,/area/awaymission/challenge/main) -"bZ" = (/obj/machinery/gateway/centeraway,/turf/simulated/floor/bluegrid,/area/awaymission/challenge/start) +"bZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plasteel,/area/awaymission/challenge/start) "ca" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/plasteel,/area/awaymission/challenge/start) -"cb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plasteel,/area/awaymission/challenge/start) -"cc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/floor/plasteel,/area/awaymission/challenge/start) +"cb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/floor/plasteel,/area/awaymission/challenge/start) +"cc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plasteel,/area/awaymission/challenge/start) "cd" = (/obj/machinery/gateway{dir = 10},/turf/simulated/floor/bluegrid,/area/awaymission/challenge/start) -"ce" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plasteel,/area/awaymission/challenge/start) +"ce" = (/obj/machinery/gateway,/turf/simulated/floor/bluegrid,/area/awaymission/challenge/start) "cf" = (/obj/machinery/gateway{dir = 6},/turf/simulated/floor/bluegrid,/area/awaymission/challenge/start) "cg" = (/turf/simulated/floor/plating,/area/awaymission/challenge/main) "ch" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/awaymission/challenge/main) -"ci" = (/obj/machinery/gateway,/turf/simulated/floor/bluegrid,/area/awaymission/challenge/start) -"cj" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/power/apc/noalarm{dir = 4; name = "Worn-out APC"; pixel_x = 24; pixel_y = 0},/turf/simulated/floor/plating,/area/awaymission/challenge/start) -"ck" = (/obj/machinery/space_heater,/turf/simulated/floor/plasteel,/area/awaymission/challenge/start) -"cl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/floor/plasteel,/area/awaymission/challenge/start) +"ci" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/power/apc/noalarm{dir = 4; name = "Worn-out APC"; pixel_x = 24; pixel_y = 0},/turf/simulated/floor/plating,/area/awaymission/challenge/start) +"cj" = (/obj/machinery/space_heater,/turf/simulated/floor/plasteel,/area/awaymission/challenge/start) +"ck" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/floor/plasteel,/area/awaymission/challenge/start) +"cl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/plasteel,/area/awaymission/challenge/start) "cm" = (/obj/structure/table,/obj/item/clothing/accessory/scarf/christmas,/obj/item/clothing/accessory/scarf/christmas,/obj/item/clothing/accessory/scarf/christmas,/obj/item/clothing/accessory/scarf/christmas,/obj/item/clothing/accessory/scarf/christmas,/turf/simulated/floor/plasteel,/area/awaymission/challenge/start) -"cn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/plasteel,/area/awaymission/challenge/start) +"cn" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table,/obj/item/clothing/head/helmet/space/santahat,/obj/item/clothing/head/helmet/space/santahat,/obj/item/clothing/head/helmet/space/santahat,/obj/item/clothing/head/helmet/space/santahat,/obj/item/clothing/head/helmet/space/santahat,/turf/simulated/floor/plasteel,/area/awaymission/challenge/start) "co" = (/obj/structure/table,/obj/item/clothing/suit/furcoat,/obj/item/clothing/suit/furcoat,/obj/item/clothing/suit/furcoat,/obj/item/clothing/suit/furcoat,/obj/item/clothing/suit/furcoat,/turf/simulated/floor/plasteel,/area/awaymission/challenge/start) -"cp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table,/obj/item/clothing/head/helmet/space/santahat,/obj/item/clothing/head/helmet/space/santahat,/obj/item/clothing/head/helmet/space/santahat,/obj/item/clothing/head/helmet/space/santahat,/obj/item/clothing/head/helmet/space/santahat,/turf/simulated/floor/plasteel,/area/awaymission/challenge/start) -"cq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plasteel,/area/awaymission/challenge/start) -"cr" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/awaymission/challenge/start) +"cp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plasteel,/area/awaymission/challenge/start) +"cq" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/awaymission/challenge/start) +"cr" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/awaymission/challenge/start) "cs" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/awaymission/challenge/start) -"ct" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/awaymission/challenge/start) -"cu" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/awaymission/challenge/start) -"cv" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; initialize_directions = 10},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/awaymission/challenge/start) +"ct" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/awaymission/challenge/start) +"cu" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; initialize_directions = 10},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/awaymission/challenge/start) +"cv" = (/obj/machinery/atmospherics/unary/tank/air{dir = 1},/turf/simulated/floor/plating,/area/awaymission/challenge/start) "cw" = (/turf/space,/area/space) -"cx" = (/obj/machinery/atmospherics/unary/tank/air{dir = 1},/turf/simulated/floor/plating,/area/awaymission/challenge/start) -"cy" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 1},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/start) +"cx" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 1},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/start) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -140,7 +139,7 @@ aaabababababacababafacacacacacacacacacacacacacacacacacacacacacacababacacacacacac aaababababacacacacacacacacacacahacacacacacacacacacacacacacacacacacacacacacacacacacacacacacagagagaiajakagacacacacacacabababababaa aaabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacalagamamajajajagacacacacacacacababababaa aaabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacalagamamanajajagacacacacacacacacabababaa -aaabababacacacaoacacacacacacacacacacacacacacacacacacacacapacacacacacacacacacacacacacacacacaSaramamasagagacacacacacacacacabababaa +aaabababacacacaoacacacacacacacacacacacacacacacacacacacacapacacacacacacacacacacacacacacacacaqaramamasagagacacacacacacacacabababaa aaabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacagagagamatauacacacacacacacacacabababaa aaabababacacacacacacacacacacacacagagagagagagagavacacacacacacacacacacacacacacacacacacacacacacawagaxayauacacacacacacacacacabababaa aaabababacadacacacacacacacacacacagazaAaBaCaDagacacacacacacacacafacacacacacacacacacacacacacacacagagagagacacacacacacacacacabababaa @@ -148,7 +147,7 @@ aaabababacacacacacacacacacacacacagamamamamamagacacacacacacacacacacacacacaoacacab aaabababacacacacacacacacacacacacauamamamamamauacacacacacacacacacacacacacacababababacacacacacacacacacacacacacacacacacacacabababaa aaabababacacacacacacalacacacacacagamamamamaEagacacacacacacacacacacacacacacabababababababacacacacacacacacacacacacacacacacabababaa aaabababacacacacacacacacacacacacagasamamamaFagacacacacacacacacacacacacacacacababababababacacacacacacacacacacacacacahacacabababaa -aaabababacacacacacafacacacacacacagagagaSagagagacacacacacacacacacacacacacacacacabababacavacacacacacacacacacacacacacacacacabababaa +aaabababacacacacacafacacacacacacagagagaqagagagacacacacacacacacacacacacacacacacabababacavacacacacacacacacacacacacacacacacabababaa aaabababacacacacacacacacacacacacacaGacacacacalacacacacacacacacacaHacacacacacacacababababacacacacacacacacacacacacacacacacabababaa aaabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababacacacacacacacacacacacacacacacacacabababaa aaabababacacacacacacacacacacacacacacacacacacacacacacacaIacacacacacacacacadacacacabacacacacacacacacacacacacacacacacacacacabababaa @@ -157,15 +156,15 @@ aaabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacac aaabaJabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaKacacacacacacacacacacacacacacacacacacacacacacacababababaa aaabaHaLacaLacabaKacacacacacacacacacacacaKacacacacacacacacacacacacacacaKacacacacacacacacacacacacacacacaHacacacacacacabababababaa aaabababacabababababacacacacacaHacacacacaKacacacacacacacacaGacacacaGacacacacacacacacacacacacacacacacacacacacacacacacabacabababaa -aaabaMaMaNaMaOababacacacacacacacacacacacacacacacacacacaPaQaRaqaqaqaTaQaUacacacacacacacacacacacacacacacacacacacacacacacacabababaa +aaabaMaMaNaMaOababacacacacacacacacacacacacacacacacacacaPaQaRaSaSaSaTaQaUacacacacacacacacacacacacacacacacacacacacacacacacabababaa aaabaMaVaVaVaWababacacacacacacacacacacacacacacacacacacaXaYaZaYaZaYaZaYaXacacacacacacacacacapacacacacacacacacacacacababababababaa aaabaOaVbaaVaMababacacacacacacacacacacacacacacacacacaGbbaZaYaZaYaZaYaZbbaGacacacacacacacacacacacacacacacacacacacacacabababababaa -aaabaWbcbdbeaOababababacacacacacacaIacacacacacacacacacaqaYaZaYaZaYaZaYaqacacacacacacacacacacacacacacacacacacacacacacabababababaa -aaabaMaMaOaMaWabababacacacacacacacacacacacacacacacacacaqaZaYaZbfaZaYaZaqacacacacacacacacacacacacacacacacavacacacacacabababababaa -aaababababababababacacacacacacacacacacacacacacacacacacaqaYaZaYaZaYaZaYaqacacacacacacacacacacacacacacacacacacacacacacabababababaa +aaabaWbcbdbeaOababababacacacacacacaIacacacacacacacacacaSaYaZaYaZaYaZaYaSacacacacacacacacacacacacacacacacacacacacacacabababababaa +aaabaMaMaOaMaWabababacacacacacacacacacacacacacacacacacaSaZaYaZbfaZaYaZaSacacacacacacacacacacacacacacacacavacacacacacabababababaa +aaababababababababacacacacacacacacacacacacacacacacacacaSaYaZaYaZaYaZaYaSacacacacacacacacacacacacacacacacacacacacacacabababababaa aaabababababababababacacacacacacacacacacacacacacacacaGbgaZaYaZaYaZaYaZbgaGacacacacacacacacacacacaIacacacacacacacacacacababababaa aaabababacabababababacacacacacacacacacacacacacacacacacaXaYaZaYaZaYaZaYaXacacacacacacacacacacacacacacacacacacacacacacacacabababaa -aaabababacacacacacacacacacacacacacacacacacacacacacacacbhaQaRaqaqaqaTaQbiacacacaKacacacacaoacacacacacacacacacacacacacacacabababaa +aaabababacacacacacacacacacacacacacacacacacacacacacacacbhaQaRaSaSaSaTaQbiacacacaKacacacacaoacacacacacacacacacacacacacacacabababaa aaabababacacacacacacacacacacacacacacacacacacacacaHacacacacaGacacacaGacacacacacacacacacacacacacacacacacacacacacacacacacacabababaa aaabababacacacacacacacacacacacacaeacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaa aaabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaa @@ -180,18 +179,17 @@ aaabababacacacacacbkagagagagacacacacacacacacacacacacacacabacabababacacacacacacac aaabababacacacacacagagbubvagagacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaa aaabababacacacacacagbwamambxagacacacacacacacacacacacacacacacaIacacacacacacacacafacacacacacacacacacacacacacacacacacacacacabababaa aaabababacacacacacaubyamamamagbzacacacacacbjacacacacacacacacacbAacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaa -aaabababacacacacacauasamamamaSacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaa -aaabababacacacacacagbBbCambDagbzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacapacacacacacacacacacacacacacacabababaa -aaabababacacacacacagagagagagagacacacacacacacacacacacacacacbFbEbEbEbFbkacacacacacacacacacacacacacacacacacacacacacacaeacacabababaa -aaabababacacacacacalacacacacacacacacacacacacacacacacacaeacbFbGbGbGbFbjaIacacacacacacacacacacacacacacacacacacacacacacacacabababaa -aaabababacacacacacacacacacacacacacacacacacacacacbFbFbFbFbFbFbHbHbHbFbFbFbFbFbFacacacacacacacacacacacacacacacacacacacacacabababaa -aaabababacaeacacacacacacacacacacacacacacacabacabbFbIbIbIbIbKbJbJbJbKbIbIbIbIbFababacacacacacacacacacacacacacacacacacacacabababaa -aaababababacacacacacacadacacacacacacacacababababbFbIbLbLbLbIbMbObNbIbPbSbQbIbFabbjacababacacacacacacacadacacacacacacacacabababaa -aaabababababacacacacacacacacacacacacacababbRbRbRbFbIbLbLbLbIbTbUbTbIbVbZbWbIbFbRbRbRababacacacacacacacacacacacacacacacababababaa -aaabababababacabacacacacacacacacacacacababbRbXbYbFbIbLbLbLcbcacccacecdcicfbIbFcgcgbRabababacacacacacacacacacacacacacabababababaa -aaababababababababababababababababababababbRchcjbFckcbclclcncmcpcocqclclcebIbFcgcgbRabababababababababababababababababababababaa -aaababababababababababababababababababababbRcgcgbFbFcrbFbFctcscucscvbFbFcrbFbFcgcgbRabababababababababababababababababababababaa -aaababababababababababababababababababababbRcgcgcgbFcxbFcwcycwcwcwcycwbFcxbFcgcgcgbRabababababababababababababababababababababaa +aaabababacacacacacauasamamamaqacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaa +aaabababacacacacacagbBamambCagbzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacapacacacacacacacacacacacacacacabababaa +aaabababacacacacacagagagagagagacacacacacacacacacacacacacacbDbEbEbEbDbkacacacacacacacacacacacacacacacacacacacacacacaeacacabababaa +aaabababacacacacacalacacacacacacacacacacacacacacacacacaeacbDbFbFbFbDbjaIacacacacacacacacacacacacacacacacacacacacacacacacabababaa +aaabababacacacacacacacacacacacacacacacacacacacacbDbDbDbDbDbDbGbGbGbDbDbDbDbDbDacacacacacacacacacacacacacacacacacacacacacabababaa +aaabababacaeacacacacacacacacacacacacacacacabacabbDbHbHbHbHbIbJbJbJbIbHbHbHbHbDababacacacacacacacacacacacacacacacacacacacabababaa +aaababababacacacacacacadacacacacacacacacababababbDbHbKbKbKbHbLbMbNbHbObPbQbHbDabbjacababacacacacacacacadacacacacacacacacabababaa +aaabababababacacacacacacacacacacacacacababbRbRbRbDbHbKbKbKbHbSbTbSbHbUbVbWbHbDbRbRbRababacacacacacacacacacacacacacacacababababaa +aaabababababacabacacacacacacacacacacacababbRbXbYbDbHbKbKbKbZcacbcacccdcecfbHbDcgcgbRabababacacacacacacacacacacacacacabababababaa +aaababababababababababababababababababababbRchcibDcjbZckckclcmcncocpckckccbHbDcgcgbRabababababababababababababababababababababaa +aaababababababababababababababababababababbRcgcgbDbDcqbDbDcrcsctcscubDbDcqbDbDcgcgbRabababababababababababababababababababababaa +aaababababababababababababababababababababbRcgcgcgbDcvbDcwcxcwcwcwcxcwbDcvbDcgcgcgbRabababababababababababababababababababababaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} - diff --git a/_maps/map_files/RandomZLevels/spacehotel.dmm b/_maps/map_files/RandomZLevels/spacehotel.dmm index 9a66c57d6ba..f40c2033dfd 100644 --- a/_maps/map_files/RandomZLevels/spacehotel.dmm +++ b/_maps/map_files/RandomZLevels/spacehotel.dmm @@ -409,7 +409,7 @@ "hS" = (/turf/unsimulated/floor{icon_state = "whiteyellow"; dir = 4},/area/awaymission/spacehotel) "hT" = (/obj/effect/view_portal{id = "hotel_12"},/turf/unsimulated/floor{icon_state = "rampbottom"; dir = 4},/area/awaymission/spacehotel) "hU" = (/obj/effect/view_portal/visual{dir = 4; dist = 0; id = "hotel_22"; opacity = 0; radius = 0},/turf/unsimulated/floor,/area/awaymission/spacehotel) -"hV" = (/obj/machinery/door/airlock/public/glass{icon_state = "door_locked"; locked = 1; name = "Employees Only"; req_access_txt = "150"},/obj/item/tape/police{icon_state = "police_door"; layer = 3.2},/turf/unsimulated/floor{dir = 8; icon_state = "whitered"},/area/awaymission/spacehotel) +"hV" = (/obj/machinery/door/airlock/public/glass{icon_state = "door_locked"; locked = 1; name = "Employees Only"; req_access_txt = "150"},/turf/unsimulated/floor{dir = 8; icon_state = "whitered"},/area/awaymission/spacehotel) "hW" = (/obj/effect/decal/cleanable/blood/old,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/spacehotel) "hX" = (/obj/effect/view_portal/visual{dir = 8; dist = 0; id = "hotel_13"; radius = 0},/turf/unsimulated/floor,/area/awaymission/spacehotel) "hY" = (/obj/effect/view_portal{id = "hotel_23"},/turf/unsimulated/floor{icon_state = "ramptop"; dir = 4},/area/awaymission/spacehotel) @@ -485,7 +485,7 @@ "jq" = (/obj/item/toy/spinningtoy,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) "jr" = (/obj/item/grown/bananapeel,/obj/item/toy/spinningtoy,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) "js" = (/obj/structure/barricade/wooden,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) -"jt" = (/obj/machinery/door/airlock/public/glass,/obj/item/tape/engineering{icon_state = "engineering_door"; layer = 3.2},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"jt" = (/obj/machinery/door/airlock/public/glass,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) "ju" = (/obj/machinery/gateway{dir = 10},/turf/unsimulated/floor{icon_state = "warning"; dir = 10},/area/awaymission/spacehotel) "jv" = (/obj/machinery/gateway,/turf/unsimulated/floor{icon_state = "warning"},/area/awaymission/spacehotel) "jw" = (/obj/machinery/gateway{dir = 6},/turf/unsimulated/floor{icon_state = "warning"; dir = 6},/area/awaymission/spacehotel) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 91ff38abb2c..e9974435ba9 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -6374,15 +6374,15 @@ "csD" = (/turf/simulated/wall,/area/engine/controlroom) "csE" = (/obj/machinery/camera{c_tag = "NT Representative's Office"; dir = 1; network = list("SS13")},/obj/structure/table/wood,/obj/machinery/photocopier/faxmachine/longrange{department = "NT Representative's Office"},/obj/machinery/newscaster/security_unit{pixel_x = 0; pixel_y = -32},/turf/simulated/floor/wood,/area/ntrep) "csF" = (/obj/item/flashlight,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/genetics) -"csG" = (/obj/structure/closet/firecloset,/obj/item/taperoll/engineering,/turf/simulated/floor/plasteel,/area/engine/controlroom) +"csG" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/closet/firecloset,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel,/area/engine/controlroom) "csH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/hallway/primary/aft) "csI" = (/obj/structure/disposalpipe/segment,/obj/item/radio/intercom{dir = 8; name = "station intercom (General)"; pixel_x = -28},/obj/machinery/camera{c_tag = "Aft Primary Hallway 1"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft) "csJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/engine/controlroom) "csK" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint) "csL" = (/turf/simulated/floor/plating,/area/maintenance/asmaint) "csM" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/genetics) -"csN" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/closet/firecloset,/obj/item/taperoll/engineering,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel,/area/engine/controlroom) -"csO" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = 30},/obj/structure/closet/firecloset,/obj/item/taperoll/engineering,/turf/simulated/floor/plasteel,/area/engine/controlroom) +"csN" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plasteel,/area/engine/controlroom) +"csO" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = 30},/obj/structure/closet/firecloset,/turf/simulated/floor/plasteel,/area/engine/controlroom) "csP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall/r_wall,/area/maintenance/genetics) "csQ" = (/obj/structure/cable,/obj/machinery/computer/monitor{name = "Grid Power Monitoring Computer"},/turf/simulated/floor/plasteel{icon_state = "caution"; dir = 5},/area/engine/controlroom) "csR" = (/obj/structure/rack{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/genetics) @@ -8984,7 +8984,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaebPIbPIbPIbPIbPIbPIbPIbPIbPIbPIbYvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabafOcgQcngcngcgQcngcngcgQaaaaaacgFcnhcnicnjcgFbYPbYPbYPcamcnmcnlcnocnocnocamcamcgQcnncnpcnrcnqcgQcnscntcgSclRcktcktcktcnvcgWckvckwckwcnuchHcgWcpicHDcnAchcchcchcchcchcchIchcchccnCdgCcsLcsLcsLchfcABchJcsLcbvchfchLchKciEchNcfEciFcfGcfFcfIcfHciOciJciQciPcDfciRciScDfciUciTchrciVciXciWchrchrcepciYcjaciZclpcjbcodcoicoicoicodcogcodcodcohcojclrclrcbjcokclscbncomcolcooconcorcopcoqcoqcotcoscovcoucoxcowcozcoycoCcoAcoBcoDcoEcoFcoHcoGcoIaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaacidciecoMcoJcoJckbckbckbckbckbckbckbckbciecieaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaacgQcoKcoLcgQcoKcoLcgQaaaaaacoOceZcoNceZcoQaaaaabaaacamcamcamcamcamcamcamcoPcgQcoScoRcoUcoTclPcoVcoWcgScoYcoXcpfcktcjccgWcjdckwcjfcjecjgcgWcjicjhcjkcjjcpqcpqcpqcpqcjlcpmcppcpocjncjmcjmcjocjqcjpcjscjrcjtchfcjwcjucjycjxcjAcjzcjCcjBcjCcjDckrcjEckxcksckzckyckAcDfckBcuvckCcjvckDcmDckFckEciYckJckLcgacpRcpTcpRcpUcpWcpVcpRcpXcpYcodcqacpZcdacbjcbjcqccqbcqfcqdcqecqicqgcqhcqlcqjcqkcqncqmcqpcqocqtcqqcqrcqqcqscqrcqrcqucqwcqvcqycqxcqCaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaacieciecqDckbckbckbckbckbckbckbckbckbckbckbciecieaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafOaaaafOcgQcqzcoLcgQcqzcoLcgQaaaaaaaabaabaabaabaabaabaabaabaabcgQcoLcqAcqBcgQcqEcqGcgQcqHcgQcgQcqFcgQcgQcqPcgScqRcqIcqJcqKcqLcgWckMcqOcqScqQcqTcgWckOckNckPcJZcsDcsDcsDcsDcsDcrdcqZcrackQchfcucckRcsLckSckTcsLcsKchfckVckUckXckWcCWckYclackZclbcDfcldclcclfclecDfcDfcDfcDfclhclgckCchCcljclicllclkciYcmdcgacmfcpRcrNcrQcrLcrMcrLcrTcrOcrPcodcbjcrUcbjcbjcrRcrSclsbLRbPtcgscrVcgscgscrWcrYcrXcsacrZcsdcsbcsfcsecsgcsecsgcshcsgcsicgEcsncvdcsqcsraabaabaabaabaabaabaabaabaaaaaaaaaaaaaaacieckbckbckbckbckbckbcssckbcstckbckbckbckbckbciecieaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcsjafOaabaMraMrafOcgQcgQcqFcgQcgQcqFcgQcgQcgQcngcngcngcgQcgQcgQcgQcgQcgQcgQcoLcskcslcgQcsmcgQcgQcsucgQcsocspcoLcgQcsvcgScsycsxcszclRcmgcgWcswckvcsEcsCcmhcgWcsIcsHcmicsDcsDcsNcsOcsGcmjcsQcsJcsKcsLcsUchfcmkcsLckSckTchfchfchfcCWcCWcmlcCWcCWcxhcnwcmmcxhcDfcDfcDfcDfcDfcDfcmncmpcmocmrcmqcmtcmscmvcmucmxcmwciYcgacgaaqEcpRcttctxctwctyctwctActzcrLctuctvctBbLRctCbLRcrSclsbLRbIictFctHctGcgscgscgscgscgsctIcqkctKctDcsccqkctEcqkclucqkctLcgEctOctQctPcgEaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaciectJctJctJctJctJctJctSckbctTctJcstckbckbckbckbcieaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcsjafOaabaMraMrafOcgQcgQcqFcgQcgQcqFcgQcgQcgQcngcngcngcgQcgQcgQcgQcgQcgQcgQcoLcskcslcgQcsmcgQcgQcsucgQcsocspcoLcgQcsvcgScsycsxcszclRcmgcgWcswckvcsEcsCcmhcgWcsIcsHcmicsDcsDcsGcsOcsNcmjcsQcsJcsKcsLcsUchfcmkcsLckSckTchfchfchfcCWcCWcmlcCWcCWcxhcnwcmmcxhcDfcDfcDfcDfcDfcDfcmncmpcmocmrcmqcmtcmscmvcmucmxcmwciYcgacgaaqEcpRcttctxctwctyctwctActzcrLctuctvctBbLRctCbLRcrSclsbLRbIictFctHctGcgscgscgscgscgsctIcqkctKctDcsccqkctEcqkclucqkctLcgEctOctQctPcgEaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaciectJctJctJctJctJctJctSckbctTctJcstckbckbckbckbcieaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabafOafOcngcoLcoLcoLcoLctMctNcoLcoLcoSctUctUctVctUctUctUctUctUctUctUctUctUctUctUctUcoRcgQcskcqzctWcgQcsvctRctRctRctRctRctRcgWcgWcgWcgWcgWcgWcgWcuactXcmBcmzcmEcmCcmFcmFcmGcuicsJcmHcsLcubcuccmIcsLckScmJchicsLcsLcsKcCWcmLcmKcmNcCWcHWcnxcnBcnzcnEcnDcnGcnFcnIcnHcnKcnJcnMcnLckCcnNcnPcnOcnRcnQciYbQXcgacgacpRcuGcnTcnScnUcrLcuKcuJcuOcuLcuScuRcuVbLRcuXcrSclscuMbIibPAcuNcuYcuPcuQbGGbGGcgscvccvecuTcuUcvfcuWcvgcvicuZcvacvbcgEcvjdoKdoFcvraaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaacvscjZcjZcjZcjZcjZcjZcjZcvhcvtckbckbckbckbcvvckccieaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabafOaabaabafOcngcvkcvlcvmcoLcoLcvncoLcoLcsucgQcgQcgQcgQcgQcgQcqFcgQcgQcgQcgQcvocvocvocvocvocvocvocvocvocgQcsvcvpaaaaaaaaaaaacvqcvwcvzcvycvucvAcvDcvxcvJcvGcvKcvBcvCcvLcvEcvEcvFcvMcvHcvIcvIcvIcvIcvNcvIckScmJchfcnVcKOdercCWcnXcnWcnZcnYcobcoacoccoccofcoecpacoZcpccpbcpecpdcphcpgciYciYciYciYciYciYciYciYcpkcpjcpRcwjcplcwqcptcpncpvcpucpRcpRbIicwpbIibIibIicwvcwJcwwbIibGGcuNcwKcwucuQcuQcuQcgscgscgscgscgscgscgscgscgscgscgscgscgEcgEcgEcgEcgEaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaciecoJcoJcoJcoJcoJcoJcwLckbcoMcoJcwMckbckbckbckbcieaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcgQcwxcwxcwxcwxcwxcwxcwycwxcsucwzcgQcoLcwAcwBcwCcoLcwCcwDcwEcwBcvocwFcwFcvocwGcvocwHcwIcvocoLcqPcngaaacwPcwUcwQcwVcwNcwOcwWcwXcwRcwScwTcwZcwYcxbcxacxdcxccxfcxecxjcxgcvHcxkcxmcxmcxmcxocvIckScmJchfdgmcQkcQkcQkcQkcpwcpxcQkcpycpycpycpycQkcpzcpBcpAcQkcQncQncpCcpDcuocukbQXbQXcpEbQXbQXbQXbQXbQXcpFcpRcpRcpRcpRcpGcpRcpRcpRcxIcpHcpIcxKcxUcxMcxNcxOcxWcxQcxNbGGcuNcylbGGbGGcxScxZcyactFbGGbGGbGGbGGbGGbGGbGGcxVcymbZZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacieckbckbckbckbckbckbcssckbcwMckbckbckbckbckbciecieaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/test_all_maps.dm b/_maps/test_all_maps.dm new file mode 100644 index 00000000000..5289988bf82 --- /dev/null +++ b/_maps/test_all_maps.dm @@ -0,0 +1,112 @@ +// This is for Travis testing. DO NOT SET THIS AS THE GAME'S MAP NORMALLY! + +#if !defined(USING_MAP_DATUM) + // Away missions + #include "map_files\RandomZLevels\beach.dmm" + #include "map_files\RandomZLevels\moonoutpost19.dmm" + #include "map_files\RandomZLevels\undergroundoutpost45.dmm" + #include "map_files\RandomZLevels\academy.dmm" + #include "map_files\RandomZLevels\blackmarketpackers.dmm" + #include "map_files\RandomZLevels\spacehotel.dmm" + #include "map_files\RandomZLevels\stationCollision.dmm" + #include "map_files\RandomZLevels\wildwest.dmm" + #include "map_files\RandomZLevels\evil_santa.dmm" + + // Space Ruins + #include "map_files\RandomRuins\SpaceRuins\abandonedzoo.dmm" + #include "map_files\RandomRuins\SpaceRuins\asteroid1.dmm" + #include "map_files\RandomRuins\SpaceRuins\asteroid2.dmm" + #include "map_files\RandomRuins\SpaceRuins\asteroid3.dmm" + #include "map_files\RandomRuins\SpaceRuins\asteroid4.dmm" + #include "map_files\RandomRuins\SpaceRuins\asteroid5.dmm" + #include "map_files\RandomRuins\SpaceRuins\deepstorage.dmm" + #include "map_files\RandomRuins\SpaceRuins\derelict1.dmm" + #include "map_files\RandomRuins\SpaceRuins\derelict2.dmm" + #include "map_files\RandomRuins\SpaceRuins\derelict3.dmm" + #include "map_files\RandomRuins\SpaceRuins\derelict4.dmm" + #include "map_files\RandomRuins\SpaceRuins\derelict5.dmm" + #include "map_files\RandomRuins\SpaceRuins\emptyshell.dmm" + #include "map_files\RandomRuins\SpaceRuins\gasthelizards.dmm" + #include "map_files\RandomRuins\SpaceRuins\intactemptyship.dmm" + #include "map_files\RandomRuins\SpaceRuins\listeningpost.dmm" + #include "map_files\RandomRuins\SpaceRuins\mechtransport.dmm" + #include "map_files\RandomRuins\SpaceRuins\onehalf.dmm" + #include "map_files\RandomRuins\SpaceRuins\spacebar.dmm" + #include "map_files\RandomRuins\SpaceRuins\turretedoutpost.dmm" + #include "map_files\RandomRuins\SpaceRuins\way_home.dmm" + + // Shuttle Templates + #include "map_files\shuttles\cargo_base.dmm" + #include "map_files\shuttles\emergency_bar.dmm" + #include "map_files\shuttles\emergency_clown.dmm" + #include "map_files\shuttles\emergency_cramped.dmm" + #include "map_files\shuttles\emergency_cyb.dmm" + #include "map_files\shuttles\emergency_dept.dmm" + #include "map_files\shuttles\emergency_meta.dmm" + #include "map_files\shuttles\emergency_mil.dmm" + #include "map_files\shuttles\emergency_narnar.dmm" + #include "map_files\shuttles\emergency_old.dmm" + #include "map_files\shuttles\ferry_base.dmm" + #include "map_files\shuttles\ferry_meat.dmm" + + // Other templates + #include "map_files\templates\spacehotel\n_01.dmm" + #include "map_files\templates\spacehotel\n_02.dmm" + #include "map_files\templates\spacehotel\n_03.dmm" + #include "map_files\templates\spacehotel\n_04.dmm" + #include "map_files\templates\spacehotel\n_05.dmm" + #include "map_files\templates\spacehotel\n_06.dmm" + #include "map_files\templates\spacehotel\n_07.dmm" + #include "map_files\templates\spacehotel\n_08.dmm" + #include "map_files\templates\spacehotel\n_09.dmm" + #include "map_files\templates\spacehotel\n_10.dmm" + #include "map_files\templates\spacehotel\n_11.dmm" + #include "map_files\templates\spacehotel\n_12.dmm" + #include "map_files\templates\spacehotel\n_13.dmm" + #include "map_files\templates\spacehotel\n_14.dmm" + #include "map_files\templates\spacehotel\n_15.dmm" + #include "map_files\templates\spacehotel\n_16.dmm" + #include "map_files\templates\spacehotel\n_17.dmm" + #include "map_files\templates\spacehotel\n_18.dmm" + #include "map_files\templates\spacehotel\n_19.dmm" + + #include "map_files\templates\spacehotel\s_01.dmm" + #include "map_files\templates\spacehotel\s_02.dmm" + #include "map_files\templates\spacehotel\s_03.dmm" + #include "map_files\templates\spacehotel\s_04.dmm" + #include "map_files\templates\spacehotel\s_05.dmm" + #include "map_files\templates\spacehotel\s_06.dmm" + + #include "map_files\templates\light_floor_1.dmm" + #include "map_files\templates\light_floor_2.dmm" + #include "map_files\templates\light_floor_3.dmm" + #include "map_files\templates\medium_shuttle1.dmm" + #include "map_files\templates\medium_shuttle2.dmm" + #include "map_files\templates\medium_shuttle3.dmm" + #include "map_files\templates\shelter_1.dmm" + #include "map_files\templates\shelter_2.dmm" + #include "map_files\templates\small_asteroid_1.dmm" + #include "map_files\templates\small_shuttle_1.dmm" + + // VR maps + #include "map_files\vr\blood_and_sand.dmm" + #include "map_files\vr\lobby.dmm" + + + // This is pointless, we don't run the server + /*#define MAP_TRANSITION_CONFIG list(AWAY_MISSION = UNAFFECTED, + AWAY_MISSION = UNAFFECTED, + AWAY_MISSION = UNAFFECTED, + AWAY_MISSION = UNAFFECTED, + AWAY_MISSION = UNAFFECTED, + AWAY_MISSION = UNAFFECTED, + AWAY_MISSION = UNAFFECTED, + AWAY_MISSION = UNAFFECTED, + AWAY_MISSION = UNAFFECTED, + AWAY_MISSION = UNAFFECTED) + + #define USING_MAP_DATUM /datum/map*/ + +#elif !defined(MAP_OVERRIDE) + #warn a map has already been included. +#endif diff --git a/_maps/test_away_missions.dm b/_maps/test_away_missions.dm deleted file mode 100644 index 42b068412bd..00000000000 --- a/_maps/test_away_missions.dm +++ /dev/null @@ -1,21 +0,0 @@ -// This is for Travis testing. DO NOT SET THIS AS THE GAME'S MAP NORMALLY! - -#if !defined(USING_MAP_DATUM) - #include "map_files\RandomZLevels\beach.dmm" - #include "map_files\RandomZLevels\moonoutpost19.dmm" - #include "map_files\RandomZLevels\undergroundoutpost45.dmm" - #include "map_files\RandomZLevels\academy.dmm" - #include "map_files\RandomZLevels\blackmarketpackers.dmm" - #include "map_files\RandomZLevels\spacehotel.dmm" - #include "map_files\RandomZLevels\stationCollision.dmm" - #include "map_files\RandomZLevels\wildwest.dmm" - - #include "map_files\RandomZLevels\evil_santa.dmm" - - #define MAP_TRANSITION_CONFIG list(AWAY_MISSION = UNAFFECTED, AWAY_MISSION = UNAFFECTED, AWAY_MISSION = UNAFFECTED, AWAY_MISSION = UNAFFECTED, AWAY_MISSION = UNAFFECTED, AWAY_MISSION = UNAFFECTED, AWAY_MISSION = UNAFFECTED, AWAY_MISSION = UNAFFECTED, AWAY_MISSION = UNAFFECTED, AWAY_MISSION = UNAFFECTED) - - #define USING_MAP_DATUM /datum/map - -#elif !defined(MAP_OVERRIDE) - #warn a map has already been included. -#endif diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index 1506cd26129..3fcf79fe8d8 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -7,10 +7,9 @@ Pipelines and other atmospheric objects combine to form pipe_networks Pipes -> Pipelines Pipelines + Other Objects -> Pipe network - */ +GLOBAL_DATUM_INIT(pipe_icon_manager, /datum/pipe_icon_manager, new()) /obj/machinery/atmospherics - auto_init = 0 anchored = 1 layer = 2.4 //under wires with their 2.44 idle_power_usage = 0 @@ -29,15 +28,12 @@ Pipelines + Other Objects -> Pipe network var/pipe_color var/obj/item/pipe/stored var/image/pipe_image - var/global/datum/pipe_icon_manager/icon_manager /obj/machinery/atmospherics/New() if(!armor) armor = list(melee = 25, bullet = 10, laser = 10, energy = 100, bomb = 0, bio = 100, rad = 100) ..() SSair.atmos_machinery += src - if(!icon_manager) - icon_manager = new() if(!pipe_color) pipe_color = color @@ -45,12 +41,8 @@ Pipelines + Other Objects -> Pipe network if(!pipe_color_check(pipe_color)) pipe_color = null - // No need for a tween worldstart roundstart handler - pipenet creation is - // handled there - -/obj/machinery/atmospherics/initialize() - ..() +/obj/machinery/atmospherics/proc/atmos_init() if(can_unwrench) stored = new(src, make_from = src) @@ -73,9 +65,9 @@ Pipelines + Other Objects -> Pipe network pipe_image.plane = HUD_PLANE /obj/machinery/atmospherics/proc/check_icon_cache(var/safety = 0) - if(!istype(icon_manager)) + if(!istype(GLOB.pipe_icon_manager)) if(!safety) //to prevent infinite loops - icon_manager = new() + GLOB.pipe_icon_manager = new() check_icon_cache(1) return 0 @@ -91,14 +83,14 @@ Pipelines + Other Objects -> Pipe network /obj/machinery/atmospherics/proc/add_underlay(var/turf/T, var/obj/machinery/atmospherics/node, var/direction, var/icon_connect_type) if(node) if(T.intact && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe)) - //underlays += icon_manager.get_atmos_icon("underlay_down", direction, color_cache_name(node)) - underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "down" + icon_connect_type) + //underlays += GLOB.pipe_icon_manager.get_atmos_icon("underlay_down", direction, color_cache_name(node)) + underlays += GLOB.pipe_icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "down" + icon_connect_type) else - //underlays += icon_manager.get_atmos_icon("underlay_intact", direction, color_cache_name(node)) - underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "intact" + icon_connect_type) + //underlays += GLOB.pipe_icon_manager.get_atmos_icon("underlay_intact", direction, color_cache_name(node)) + underlays += GLOB.pipe_icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "intact" + icon_connect_type) else - //underlays += icon_manager.get_atmos_icon("underlay_exposed", direction, pipe_color) - underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "exposed" + icon_connect_type) + //underlays += GLOB.pipe_icon_manager.get_atmos_icon("underlay_exposed", direction, pipe_color) + underlays += GLOB.pipe_icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "exposed" + icon_connect_type) /obj/machinery/atmospherics/proc/update_underlays() if(check_icon_cache()) @@ -231,10 +223,10 @@ Pipelines + Other Objects -> Pipe network var/turf/T = loc level = T.intact ? 2 : 1 add_fingerprint(usr) - initialize() + atmos_init() var/list/nodes = pipeline_expansion() for(var/obj/machinery/atmospherics/A in nodes) - A.initialize() + A.atmos_init() A.addMember(src) build_network() @@ -320,11 +312,11 @@ Pipelines + Other Objects -> Pipe network /obj/machinery/atmospherics/proc/add_underlay_adapter(var/turf/T, var/obj/machinery/atmospherics/node, var/direction, var/icon_connect_type) //modified from add_underlay, does not make exposed underlays if(node) if(T.intact && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe)) - underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "down" + icon_connect_type) + underlays += GLOB.pipe_icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "down" + icon_connect_type) else - underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "intact" + icon_connect_type) + underlays += GLOB.pipe_icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "intact" + icon_connect_type) else - underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "retracted" + icon_connect_type) + underlays += GLOB.pipe_icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "retracted" + icon_connect_type) /obj/machinery/atmospherics/singularity_pull(S, current_size) if(current_size >= STAGE_FIVE) diff --git a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm index 276ce5e7b6e..c11a0421bda 100644 --- a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm +++ b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm @@ -41,7 +41,7 @@ nullifyPipenet(parent2) return ..() -/obj/machinery/atmospherics/binary/initialize() +/obj/machinery/atmospherics/binary/atmos_init() ..() var/node2_connect = dir var/node1_connect = turn(dir, 180) diff --git a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm index bfffb7cd35d..aebc09cfc7a 100644 --- a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm @@ -48,7 +48,7 @@ radio_connection = null return ..() -/obj/machinery/atmospherics/binary/dp_vent_pump/initialize() +/obj/machinery/atmospherics/binary/dp_vent_pump/atmos_init() ..() if(frequency) set_frequency(frequency) @@ -90,7 +90,7 @@ else vent_icon += "[on ? "[pump_direction ? "out" : "in"]" : "off"]" - overlays += icon_manager.get_atmos_icon("device", , , vent_icon) + overlays += GLOB.pipe_icon_manager.get_atmos_icon("device", , , vent_icon) /obj/machinery/atmospherics/binary/dp_vent_pump/update_underlays() if(..()) diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm index e43b052095b..9e845c15a98 100644 --- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm +++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm @@ -16,7 +16,7 @@ var/id = null var/datum/radio_frequency/radio_connection -/obj/machinery/atmospherics/binary/passive_gate/initialize() +/obj/machinery/atmospherics/binary/passive_gate/atmos_init() ..() if(frequency) set_frequency(frequency) diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm index db0c7144324..118a70c3ecd 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm @@ -110,7 +110,7 @@ Thus, the two variables affect pump operation are set in New(): radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) return 1 -/obj/machinery/atmospherics/binary/pump/initialize() +/obj/machinery/atmospherics/binary/pump/atmos_init() ..() if(frequency) set_frequency(frequency) diff --git a/code/ATMOSPHERICS/components/binary_devices/valve.dm b/code/ATMOSPHERICS/components/binary_devices/valve.dm index 7b566e04fda..1d7805c55b2 100644 --- a/code/ATMOSPHERICS/components/binary_devices/valve.dm +++ b/code/ATMOSPHERICS/components/binary_devices/valve.dm @@ -109,7 +109,7 @@ if(frequency) radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) -/obj/machinery/atmospherics/binary/valve/digital/initialize() +/obj/machinery/atmospherics/binary/valve/digital/atmos_init() ..() if(frequency) set_frequency(frequency) diff --git a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm index c4dd8adeabb..a64c94e7fc5 100644 --- a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm @@ -38,7 +38,7 @@ Thus, the two variables affect pump operation are set in New(): on = 1 icon_state = "map_on" -/obj/machinery/atmospherics/binary/volume_pump/initialize() +/obj/machinery/atmospherics/binary/volume_pump/atmos_init() ..() set_frequency(frequency) diff --git a/code/ATMOSPHERICS/components/omni_devices/_omni_extras.dm b/code/ATMOSPHERICS/components/omni_devices/_omni_extras.dm index 1858b685ec0..a1f80916aee 100644 --- a/code/ATMOSPHERICS/components/omni_devices/_omni_extras.dm +++ b/code/ATMOSPHERICS/components/omni_devices/_omni_extras.dm @@ -40,9 +40,9 @@ /datum/omni_port/proc/connect() if(node) return - master.initialize() + master.atmos_init() if(node) - node.initialize() + node.atmos_init() node.addMember(master) master.build_network() diff --git a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm index 086d2ff799f..0eed9729f87 100644 --- a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm +++ b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm @@ -56,7 +56,7 @@ nullifyPipenet(P.parent) return ..() -/obj/machinery/atmospherics/omni/initialize() +/obj/machinery/atmospherics/omni/atmos_init() ..() for(var/datum/omni_port/P in ports) if(P.node || P.mode == 0) @@ -143,11 +143,11 @@ //directional icons are layers 1-4, with the core icon on layer 5 if(core_icon) - overlays_off[5] = icon_manager.get_atmos_icon("omni", , , core_icon) - overlays_on[5] = icon_manager.get_atmos_icon("omni", , , core_icon + "_glow") + overlays_off[5] = GLOB.pipe_icon_manager.get_atmos_icon("omni", , , core_icon) + overlays_on[5] = GLOB.pipe_icon_manager.get_atmos_icon("omni", , , core_icon + "_glow") - overlays_error[1] = icon_manager.get_atmos_icon("omni", , , core_icon) - overlays_error[2] = icon_manager.get_atmos_icon("omni", , , "error") + overlays_error[1] = GLOB.pipe_icon_manager.get_atmos_icon("omni", , , core_icon) + overlays_error[2] = GLOB.pipe_icon_manager.get_atmos_icon("omni", , , "error") /obj/machinery/atmospherics/omni/proc/update_port_icons() if(!check_icon_cache()) @@ -203,19 +203,19 @@ ic_on += "_filter" ic_off += "_out" - ic_on = icon_manager.get_atmos_icon("omni", , , ic_on) - ic_off = icon_manager.get_atmos_icon("omni", , , ic_off) + ic_on = GLOB.pipe_icon_manager.get_atmos_icon("omni", , , ic_on) + ic_off = GLOB.pipe_icon_manager.get_atmos_icon("omni", , , ic_off) var/pipe_state var/turf/T = get_turf(src) if(!istype(T)) return if(T.intact && istype(P.node, /obj/machinery/atmospherics/pipe) && P.node.level == 1 ) - //pipe_state = icon_manager.get_atmos_icon("underlay_down", P.dir, color_cache_name(P.node)) - pipe_state = icon_manager.get_atmos_icon("underlay", P.dir, color_cache_name(P.node), "down") + //pipe_state = GLOB.pipe_icon_manager.get_atmos_icon("underlay_down", P.dir, color_cache_name(P.node)) + pipe_state = GLOB.pipe_icon_manager.get_atmos_icon("underlay", P.dir, color_cache_name(P.node), "down") else - //pipe_state = icon_manager.get_atmos_icon("underlay_intact", P.dir, color_cache_name(P.node)) - pipe_state = icon_manager.get_atmos_icon("underlay", P.dir, color_cache_name(P.node), "intact") + //pipe_state = GLOB.pipe_icon_manager.get_atmos_icon("underlay_intact", P.dir, color_cache_name(P.node)) + pipe_state = GLOB.pipe_icon_manager.get_atmos_icon("underlay", P.dir, color_cache_name(P.node), "intact") return list("on_icon" = ic_on, "off_icon" = ic_off, "pipe_icon" = pipe_state) diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm index 427c77e8246..903f917e0c6 100755 --- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm @@ -149,7 +149,7 @@ Filter types: return 1 -/obj/machinery/atmospherics/trinary/filter/initialize() +/obj/machinery/atmospherics/trinary/filter/atmos_init() set_frequency(frequency) ..() diff --git a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm index 187b308fa3c..e750256b0df 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm @@ -66,7 +66,7 @@ nullifyPipenet(parent3) return ..() -/obj/machinery/atmospherics/trinary/initialize() +/obj/machinery/atmospherics/trinary/atmos_init() ..() //Mixer: //1 and 2 is input diff --git a/code/ATMOSPHERICS/components/trinary_devices/tvalve.dm b/code/ATMOSPHERICS/components/trinary_devices/tvalve.dm index ad9561fbf1d..9dddf8b06f4 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/tvalve.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/tvalve.dm @@ -156,7 +156,7 @@ if(frequency) radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) -/obj/machinery/atmospherics/trinary/tvalve/digital/initialize() +/obj/machinery/atmospherics/trinary/tvalve/digital/atmos_init() ..() if(frequency) set_frequency(frequency) diff --git a/code/ATMOSPHERICS/components/unary_devices/heat_exchanger.dm b/code/ATMOSPHERICS/components/unary_devices/heat_exchanger.dm index 496413c881c..58b374578df 100644 --- a/code/ATMOSPHERICS/components/unary_devices/heat_exchanger.dm +++ b/code/ATMOSPHERICS/components/unary_devices/heat_exchanger.dm @@ -20,7 +20,7 @@ return -/obj/machinery/atmospherics/unary/heat_exchanger/initialize() +/obj/machinery/atmospherics/unary/heat_exchanger/atmos_init() if(!partner) var/partner_connect = turn(dir,180) diff --git a/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm b/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm index 6028346df6d..fe5b6a0a445 100644 --- a/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm +++ b/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm @@ -120,7 +120,7 @@ return 1 -/obj/machinery/atmospherics/unary/outlet_injector/initialize() +/obj/machinery/atmospherics/unary/outlet_injector/atmos_init() ..() set_frequency(frequency) diff --git a/code/ATMOSPHERICS/components/unary_devices/unary_base.dm b/code/ATMOSPHERICS/components/unary_devices/unary_base.dm index 51b12d39481..4ef7743fc8c 100644 --- a/code/ATMOSPHERICS/components/unary_devices/unary_base.dm +++ b/code/ATMOSPHERICS/components/unary_devices/unary_base.dm @@ -22,7 +22,7 @@ nullifyPipenet(parent) return ..() -/obj/machinery/atmospherics/unary/initialize() +/obj/machinery/atmospherics/unary/atmos_init() ..() for(var/obj/machinery/atmospherics/target in get_step(src, dir)) if(target.initialize_directions & get_dir(target,src)) @@ -43,9 +43,9 @@ node.disconnect(src) node = null nullifyPipenet(parent) - initialize() + atmos_init() if(node) - node.initialize() + node.atmos_init() node.addMember(src) build_network() . = 1 diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm index 8f76e689eae..99eeb1883ea 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm @@ -98,7 +98,7 @@ else vent_icon += "[on ? "[pump_direction ? "out" : "in"]" : "off"]" - overlays += icon_manager.get_atmos_icon("device", , , vent_icon) + overlays += GLOB.pipe_icon_manager.get_atmos_icon("device", , , vent_icon) update_pipe_image() @@ -223,7 +223,7 @@ return 1 -/obj/machinery/atmospherics/unary/vent_pump/initialize() +/obj/machinery/atmospherics/unary/vent_pump/atmos_init() ..() //some vents work his own special way diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm index 530dbe1d952..11b1fc0f920 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm @@ -109,7 +109,7 @@ if(welded) scrubber_icon = "scrubberweld" - overlays += icon_manager.get_atmos_icon("device", , , scrubber_icon) + overlays += GLOB.pipe_icon_manager.get_atmos_icon("device", , , scrubber_icon) update_pipe_image() /obj/machinery/atmospherics/unary/vent_scrubber/update_underlays() @@ -169,7 +169,7 @@ return 1 -/obj/machinery/atmospherics/unary/vent_scrubber/initialize() +/obj/machinery/atmospherics/unary/vent_scrubber/atmos_init() ..() radio_filter_in = frequency==initial(frequency)?(RADIO_FROM_AIRALARM):null radio_filter_out = frequency==initial(frequency)?(RADIO_TO_AIRALARM):null diff --git a/code/ATMOSPHERICS/datum_pipeline.dm b/code/ATMOSPHERICS/datum_pipeline.dm index 0692bf44efd..b4a0cd9ba7b 100644 --- a/code/ATMOSPHERICS/datum_pipeline.dm +++ b/code/ATMOSPHERICS/datum_pipeline.dm @@ -57,11 +57,7 @@ var/pipenetwarnings = 10 if(!members.Find(item)) if(item.parent) - if(pipenetwarnings > 0) - error("[item.type] added to a pipenet while still having one (pipes leading to the same spot stacking in one turf). Nearby: [item.x], [item.y], [item.z].") - pipenetwarnings -= 1 - if(pipenetwarnings == 0) - error("Further messages about pipenets will be suppressed.") + log_runtime(EXCEPTION("[item.type] \[\ref[item]] added to a pipenet while still having one ([item.parent]) (pipes leading to the same spot stacking in one turf). Nearby: [item.x], [item.y], [item.z].")) members += item possible_expansions += item @@ -118,15 +114,12 @@ var/pipenetwarnings = 10 qdel(E) /obj/machinery/atmospherics/proc/addMember(obj/machinery/atmospherics/A) - return + var/datum/pipeline/P = returnPipenet(A) + P.addMember(A, src) /obj/machinery/atmospherics/pipe/addMember(obj/machinery/atmospherics/A) parent.addMember(A, src) -/obj/machinery/atmospherics/addMember(obj/machinery/atmospherics/A) - var/datum/pipeline/P = returnPipenet(A) - P.addMember(A, src) - /datum/pipeline/proc/temporarily_store_air() //Update individual gas_mixtures by volume ratio diff --git a/code/ATMOSPHERICS/pipes/cap.dm b/code/ATMOSPHERICS/pipes/cap.dm index 7691b157857..2552f6e0794 100644 --- a/code/ATMOSPHERICS/pipes/cap.dm +++ b/code/ATMOSPHERICS/pipes/cap.dm @@ -61,9 +61,9 @@ alpha = 255 overlays.Cut() - overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "cap" + icon_connect_type) + overlays += GLOB.pipe_icon_manager.get_atmos_icon("pipe", , pipe_color, "cap" + icon_connect_type) -/obj/machinery/atmospherics/pipe/cap/initialize() +/obj/machinery/atmospherics/pipe/cap/atmos_init() ..() for(var/obj/machinery/atmospherics/target in get_step(src, dir)) if(target.initialize_directions & get_dir(target,src)) diff --git a/code/ATMOSPHERICS/pipes/manifold.dm b/code/ATMOSPHERICS/pipes/manifold.dm index a42903bb7f6..199942e7a40 100644 --- a/code/ATMOSPHERICS/pipes/manifold.dm +++ b/code/ATMOSPHERICS/pipes/manifold.dm @@ -32,7 +32,7 @@ if(WEST) initialize_directions = NORTH|EAST|SOUTH -/obj/machinery/atmospherics/pipe/manifold/initialize() +/obj/machinery/atmospherics/pipe/manifold/atmos_init() ..() for(var/D in cardinal) if(D == dir) @@ -122,8 +122,8 @@ alpha = 255 overlays.Cut() - overlays += icon_manager.get_atmos_icon("manifold", , pipe_color, "core" + icon_connect_type) - overlays += icon_manager.get_atmos_icon("manifold", , , "clamps" + icon_connect_type) + overlays += GLOB.pipe_icon_manager.get_atmos_icon("manifold", , pipe_color, "core" + icon_connect_type) + overlays += GLOB.pipe_icon_manager.get_atmos_icon("manifold", , , "clamps" + icon_connect_type) underlays.Cut() var/turf/T = get_turf(src) diff --git a/code/ATMOSPHERICS/pipes/manifold4w.dm b/code/ATMOSPHERICS/pipes/manifold4w.dm index 46b883db62b..502795e1da9 100644 --- a/code/ATMOSPHERICS/pipes/manifold4w.dm +++ b/code/ATMOSPHERICS/pipes/manifold4w.dm @@ -95,8 +95,8 @@ alpha = 255 overlays.Cut() - overlays += icon_manager.get_atmos_icon("manifold", , pipe_color, "4way" + icon_connect_type) - overlays += icon_manager.get_atmos_icon("manifold", , , "clamps_4way" + icon_connect_type) + overlays += GLOB.pipe_icon_manager.get_atmos_icon("manifold", , pipe_color, "4way" + icon_connect_type) + overlays += GLOB.pipe_icon_manager.get_atmos_icon("manifold", , , "clamps_4way" + icon_connect_type) underlays.Cut() var/turf/T = get_turf(src) @@ -134,7 +134,7 @@ if(level == 1 && istype(loc, /turf/simulated)) invisibility = i ? 101 : 0 -/obj/machinery/atmospherics/pipe/manifold4w/initialize() +/obj/machinery/atmospherics/pipe/manifold4w/atmos_init() ..() for(var/D in cardinal) for(var/obj/machinery/atmospherics/target in get_step(src, D)) diff --git a/code/ATMOSPHERICS/pipes/simple/pipe_simple.dm b/code/ATMOSPHERICS/pipes/simple/pipe_simple.dm index 9f360f74274..b2c2750a452 100644 --- a/code/ATMOSPHERICS/pipes/simple/pipe_simple.dm +++ b/code/ATMOSPHERICS/pipes/simple/pipe_simple.dm @@ -43,7 +43,7 @@ if(SOUTHWEST) initialize_directions = SOUTH|WEST -/obj/machinery/atmospherics/pipe/simple/initialize(initPipe = 1) +/obj/machinery/atmospherics/pipe/simple/atmos_init(initPipe = 1) ..() if(initPipe) normalize_dir() @@ -145,9 +145,9 @@ overlays.Cut() if(node1 && node2) - overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, pipe_icon + "intact" + icon_connect_type) + overlays += GLOB.pipe_icon_manager.get_atmos_icon("pipe", , pipe_color, pipe_icon + "intact" + icon_connect_type) else - overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, pipe_icon + "exposed[node1?1:0][node2?1:0]" + icon_connect_type) + overlays += GLOB.pipe_icon_manager.get_atmos_icon("pipe", , pipe_color, pipe_icon + "exposed[node1?1:0][node2?1:0]" + icon_connect_type) // A check to make sure both nodes exist - self-delete if they aren't present /obj/machinery/atmospherics/pipe/simple/check_nodes_exist() diff --git a/code/ATMOSPHERICS/pipes/simple/pipe_simple_he.dm b/code/ATMOSPHERICS/pipes/simple/pipe_simple_he.dm index 26139b40606..cb7ec277f95 100644 --- a/code/ATMOSPHERICS/pipes/simple/pipe_simple_he.dm +++ b/code/ATMOSPHERICS/pipes/simple/pipe_simple_he.dm @@ -61,7 +61,7 @@ initialize_directions_he = initialize_directions // The auto-detection from /pipe is good enough for a simple HE pipe color = "#404040" -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/initialize(initPipe = 1) +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/atmos_init(initPipe = 1) ..(0) if(initPipe) normalize_dir() @@ -110,7 +110,7 @@ initialize_directions = EAST initialize_directions_he = WEST -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/initialize() +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/atmos_init() ..(0) for(var/obj/machinery/atmospherics/target in get_step(src,initialize_directions)) if(target.initialize_directions & get_dir(target,src)) diff --git a/code/ATMOSPHERICS/pipes/simple/pipe_simple_hidden.dm b/code/ATMOSPHERICS/pipes/simple/pipe_simple_hidden.dm index db62f8e51fe..3efd22ed446 100644 --- a/code/ATMOSPHERICS/pipes/simple/pipe_simple_hidden.dm +++ b/code/ATMOSPHERICS/pipes/simple/pipe_simple_hidden.dm @@ -34,7 +34,7 @@ alpha = 255 overlays.Cut() - overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "universal") + overlays += GLOB.pipe_icon_manager.get_atmos_icon("pipe", , pipe_color, "universal") underlays.Cut() if(node1) diff --git a/code/ATMOSPHERICS/pipes/simple/pipe_simple_visible.dm b/code/ATMOSPHERICS/pipes/simple/pipe_simple_visible.dm index 1fcb45e7959..9bf085b534a 100644 --- a/code/ATMOSPHERICS/pipes/simple/pipe_simple_visible.dm +++ b/code/ATMOSPHERICS/pipes/simple/pipe_simple_visible.dm @@ -45,7 +45,7 @@ alpha = 255 overlays.Cut() - overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "universal") + overlays += GLOB.pipe_icon_manager.get_atmos_icon("pipe", , pipe_color, "universal") underlays.Cut() if(node1) diff --git a/code/_DATASTRUCTURES/linked_lists.dm b/code/_DATASTRUCTURES/linked_lists.dm deleted file mode 100644 index eccc3c422a8..00000000000 --- a/code/_DATASTRUCTURES/linked_lists.dm +++ /dev/null @@ -1,191 +0,0 @@ - -//Ok so it's technically a double linked list, bite me. - -/datum/linked_list - var/datum/linked_node/head - var/datum/linked_node/tail - var/node_amt = 0 - - -/datum/linked_node - var/value = null - var/datum/linked_list/linked_list = null - var/datum/linked_node/next_node = null - var/datum/linked_node/previous_node = null - - -/datum/linked_list/proc/IsEmpty() - . = (node_amt <= 0) - - -//Add a linked_node (or value, creating a linked_node) at position -//the added node BECOMES the position-th element, -//eg: add("Test",5), the 5th node is now "Test", the previous 5th moves up to become the 6th -/datum/linked_list/proc/Add(node, position) - var/datum/linked_node/adding - if(istype(node, /datum/linked_node)) - adding = node - else - adding = new() - adding.value = node - - if(!adding.linked_list || (adding.linked_list && (adding.linked_list != src))) - node_amt++ - - adding.linked_list = src - - if(position && position < node_amt) - //Replacing head - if(position == 1) - if(head) - head.previous_node = adding - adding.next_node = head - head = adding - - //Replacing any middle node - else - var/location = 0 - var/datum/linked_node/at - while((location != position) && (location <= node_amt)) - if(at) - if(at.next_node) - at = at.next_node - else - break - else - at = head - location++ - - //Push at up and assume it's place as the position-th element - if(at && at.previous_node) - at.previous_node.next_node = adding - adding.previous_node = at.previous_node - at.previous_node = adding - adding.next_node = at - return - - //Replacing tail - if(tail) - tail.next_node = adding - adding.previous_node = tail - if(!tail.previous_node) - head = tail - tail = adding - - - -//Remove a linked_node or the linked_node of a value -//If you specify a value the FIRST ONE is removed -/datum/linked_list/proc/Remove(node) - var/datum/linked_node/removing - if(istype(node,/datum/linked_node)) - removing = node - else - //optimise removing head and tail, no point looping for them, especially the tail - if(removing == head) - removing = head - else if(removing == tail) - removing = tail - else - var/location = 1 - var/current_value = null - var/datum/linked_node/at = null - while((current_value != node) && (location <= node_amt)) - if(at) - if(at.next_node) - at = at.next_node - else - at = head - location++ - if(at) - current_value = at.value - if(current_value == node) - removing = at - break - - //Adjust pointers of where removing -was- in the chain. - if(removing) - if(removing.previous_node) - if(removing == tail) - tail = removing.previous_node - if(removing.next_node) - if(removing == head) - head = removing.next_node - removing.next_node.previous_node = removing.previous_node - removing.previous_node.next_node = removing.next_node - else - removing.previous_node.next_node = null - else - if(removing.next_node) - if(removing == head) - head = removing.next_node - removing.next_node.previous_node = null - - //if this is still true at this point, there's no more nodes to replace them with - if(removing == head) - head = null - if(removing == tail) - tail = null - - removing.next_node = null - removing.previous_node = null - if(removing.linked_list == src) - node_amt-- - removing.linked_list = null - - return removing - return 0 - - -//Removes and deletes a node or value -/datum/linked_list/proc/RemoveDelete(node) - var/datum/linked_node/dead = Remove(node) - if(dead) - qdel(dead) - return 1 - return 0 - - -//Empty the linked_list, deleting all nodes -/datum/linked_list/proc/Empty() - var/datum/linked_node/n = head - while(n) - var/next = n.next_node - Remove(n) - qdel(n) - n = next - node_amt = 0 - - -//Some debugging tools -/datum/linked_list/proc/CheckNodeLinks() - var/datum/linked_node/n = head - while(n) - . = "|[n.value]|" - if(n.previous_node) - . = "[n.previous_node.value]<-" + . - if(n.next_node) - . += "->[n.next_node.value]" - n = n.next_node - . += "
" - - -/datum/linked_list/proc/DrawNodeLinks() - . = "|<-" - var/datum/linked_node/n = head - while(n) - if(n.previous_node) - . += "<-" - . += "[n.value]" - if(n.next_node) - . += "->" - n = n.next_node - . += "->|" - - -/datum/linked_list/proc/ToList() - . = list() - var/datum/linked_node/n = head - while(n) - . += n - n = n.next_node \ No newline at end of file diff --git a/code/_DATASTRUCTURES/priority_queue.dm b/code/_DATASTRUCTURES/priority_queue.dm deleted file mode 100644 index 8689a19f4e4..00000000000 --- a/code/_DATASTRUCTURES/priority_queue.dm +++ /dev/null @@ -1,83 +0,0 @@ - -////////////////////// -//PriorityQueue object -////////////////////// - -//an ordered list, using the cmp proc to weight the list elements -/PriorityQueue - var/list/L //the actual queue - var/cmp //the weight function used to order the queue - -/PriorityQueue/New(compare) - L = new() - cmp = compare - -/PriorityQueue/proc/IsEmpty() - return !L.len - -//return the index the element should be in the priority queue using dichotomic search -/PriorityQueue/proc/FindElementIndex(atom/A) - var/i = 1 - var/j = L.len - var/mid - - while(i < j) - mid = round((i+j)/2) - - if(call(cmp)(L[mid],A) < 0) - i = mid + 1 - else - j = mid - - if(i == 1 || i == L.len) //edge cases - return (call(cmp)(L[i],A) > 0) ? i : i+1 - else - return i - - -//add an element in the list, -//immediatly ordering it to its position using dichotomic search -/PriorityQueue/proc/Enqueue(atom/A) - if(!L.len) - L.Add(A) - return - - L.Insert(FindElementIndex(A),A) - -//removes and returns the first element in the queue -/PriorityQueue/proc/Dequeue() - if(!L.len) - return 0 - . = L[1] - - Remove(.) - -//removes an element -/PriorityQueue/proc/Remove(atom/A) - return L.Remove(A) - -//returns a copy of the elements list -/PriorityQueue/proc/List() - . = L.Copy() - -//return the position of an element or 0 if not found -/PriorityQueue/proc/Seek(atom/A) - . = L.Find(A) - -//return the element at the i_th position -/PriorityQueue/proc/Get(i) - if(i > L.len || i < 1) - return 0 - return L[i] - -//replace the passed element at it's right position using the cmp proc -/PriorityQueue/proc/ReSort(atom/A) - var/i = Seek(A) - if(i == 0) - return - while(i < L.len && call(cmp)(L[i],L[i+1]) > 0) - L.Swap(i,i+1) - i++ - while(i > 1 && call(cmp)(L[i],L[i-1]) <= 0) //last inserted element being first in case of ties (optimization) - L.Swap(i,i-1) - i-- \ No newline at end of file diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm new file mode 100644 index 00000000000..e69de29bb2d diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index 8b7f4830c13..4c2708bf9dd 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -64,6 +64,17 @@ #define THROWN_PROJECTILE_ATTACK 4 #define LEAP_ATTACK 5 +//attack visual effects +#define ATTACK_EFFECT_PUNCH "punch" +#define ATTACK_EFFECT_KICK "kick" +#define ATTACK_EFFECT_SMASH "smash" +#define ATTACK_EFFECT_CLAW "claw" +#define ATTACK_EFFECT_DISARM "disarm" +#define ATTACK_EFFECT_BITE "bite" +#define ATTACK_EFFECT_MECHFIRE "mech_fire" +#define ATTACK_EFFECT_MECHTOXIN "mech_toxin" +#define ATTACK_EFFECT_BOOP "boop" //Honk + //Embedded objects #define EMBEDDED_PAIN_CHANCE 15 //Chance for embedded objects to cause pain (damage user) #define EMBEDDED_ITEM_FALLOUT 5 //Chance for embedded object to fall out (causing pain but removing the object) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 4f38a183a80..adc21f00452 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -344,5 +344,7 @@ //for obj explosion block calculation #define EXPLOSION_BLOCK_PROC -1 +#define INVESTIGATE_BOMB "bombs" + // The SQL version required by this version of the code -#define SQL_VERSION 2 +#define SQL_VERSION 3 diff --git a/code/__DEFINES/qdel.dm b/code/__DEFINES/qdel.dm index 14fd6ea0e36..8d504edaf41 100644 --- a/code/__DEFINES/qdel.dm +++ b/code/__DEFINES/qdel.dm @@ -22,11 +22,4 @@ #define QDELING(X) (X.gc_destroyed) #define QDELETED(X) (!X || QDELING(X)) -#define QDESTROYING(X) (!X || X.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) - -/proc/check_datum_qdeleted(datum/D) //for checking if something is a datum, first, then checking gc_destroyed; get rid of this eventually. TO-DO - if(!istype(D)) - return FALSE - if(D.gc_destroyed) - return TRUE - return FALSE \ No newline at end of file +#define QDESTROYING(X) (!X || X.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) \ No newline at end of file diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm index 257e12f4093..adb645fe112 100644 --- a/code/__DEFINES/role_preferences.dm +++ b/code/__DEFINES/role_preferences.dm @@ -40,6 +40,7 @@ #define ROLE_NYMPH "Dionaea" #define ROLE_GSPIDER "giant spider" #define ROLE_DRONE "drone" +#define ROLE_DEATHSQUAD "deathsquad" //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 diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 2004b9d3159..5c483b310fe 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -435,7 +435,7 @@ /proc/SecondsToTicks(var/seconds) return seconds * 10 -proc/pollCandidates(Question, be_special_type, antag_age_check = 0, poll_time = 300, ignore_respawnability = 0, min_hours = 0, flashwindow = TRUE) +proc/pollCandidates(Question, be_special_type, antag_age_check = 0, poll_time = 300, ignore_respawnability = 0, min_hours = 0, flashwindow = TRUE, check_antaghud = TRUE) var/roletext = be_special_type ? get_roletext(be_special_type) : null var/list/mob/dead/observer/candidates = list() var/time_passed = world.time @@ -457,7 +457,7 @@ proc/pollCandidates(Question, be_special_type, antag_age_check = 0, poll_time = if(config.use_exp_restrictions && min_hours) if(G.client.get_exp_living_num() < min_hours * 60) continue - if(cannotPossess(G)) + if(check_antaghud && cannotPossess(G)) continue spawn(0) G << 'sound/misc/notice2.ogg'//Alerting them to their consideration @@ -490,6 +490,20 @@ proc/pollCandidates(Question, be_special_type, antag_age_check = 0, poll_time = return candidates +/proc/pollCandidatesByKeyWithVeto(adminclient, adminusr, max_slots, Question, be_special_type, antag_age_check = 0, poll_time = 300, ignore_respawnability = 0, min_hours = 0, flashwindow = TRUE, check_antaghud = TRUE) + var/list/willing_ghosts = pollCandidates(Question, be_special_type, antag_age_check, poll_time, ignore_respawnability, min_hours, flashwindow, check_antaghud) + var/list/candidate_ckeys = list() + var/list/selected_ckeys = list() + if(!willing_ghosts.len) + return selected_ckeys + for(var/mob/dead/observer/G in willing_ghosts) + candidate_ckeys += G.key + for(var/i = max_slots, (i > 0 && candidate_ckeys.len), i--) + var/this_ckey = input("Pick players. This will go on until there either no more ghosts to pick from or the slots are full.", "Candidates") as null|anything in candidate_ckeys + candidate_ckeys -= this_ckey + selected_ckeys += this_ckey + return selected_ckeys + /proc/window_flash(client/C) if(ismob(C)) var/mob/M = C diff --git a/code/__HELPERS/pronouns.dm b/code/__HELPERS/pronouns.dm new file mode 100644 index 00000000000..607ba3495d3 --- /dev/null +++ b/code/__HELPERS/pronouns.dm @@ -0,0 +1,224 @@ +//pronoun procs, for getting pronouns without using the text macros that only work in certain positions +//datums don't have gender, but most of their subtypes do! +/datum/proc/p_they(capitalized, temp_gender) + . = "it" + if(capitalized) + . = capitalize(.) + +/datum/proc/p_their(capitalized, temp_gender) + . = "its" + if(capitalized) + . = capitalize(.) + +/datum/proc/p_them(capitalized, temp_gender) + . = "it" + if(capitalized) + . = capitalize(.) + +/datum/proc/p_have(temp_gender) + . = "has" + +/datum/proc/p_are(temp_gender) + . = "is" + +/datum/proc/p_were(temp_gender) + . = "was" + +/datum/proc/p_do(temp_gender) + . = "does" + +/datum/proc/p_theyve(capitalized, temp_gender) + . = p_they(capitalized, temp_gender) + "'" + copytext(p_have(temp_gender), 3) + +/datum/proc/p_theyre(capitalized, temp_gender) + . = p_they(capitalized, temp_gender) + "'" + copytext(p_are(temp_gender), 2) + +// For help conjugating verbs, eg they look, but she looks +/datum/proc/p_s(temp_gender) + . = "s" + +/datum/proc/p_es(temp_gender) + . = p_s(temp_gender) + if(.) + . = "e[.]" + +//like clients, which do have gender. +/client/proc/p_they(capitalized, temp_gender) + if(!temp_gender) + temp_gender = gender + . = "they" + switch(temp_gender) + if(FEMALE) + . = "she" + if(MALE) + . = "he" + if(capitalized) + . = capitalize(.) + +/client/proc/p_their(capitalized, temp_gender) + if(!temp_gender) + temp_gender = gender + . = "their" + switch(temp_gender) + if(FEMALE) + . = "her" + if(MALE) + . = "his" + if(capitalized) + . = capitalize(.) + +/client/proc/p_them(capitalized, temp_gender) + if(!temp_gender) + temp_gender = gender + . = "them" + switch(temp_gender) + if(FEMALE) + . = "her" + if(MALE) + . = "him" + if(capitalized) + . = capitalize(.) + +/client/proc/p_have(temp_gender) + if(!temp_gender) + temp_gender = gender + . = "has" + if(temp_gender == PLURAL || temp_gender == NEUTER) + . = "have" + +/client/proc/p_are(temp_gender) + if(!temp_gender) + temp_gender = gender + . = "is" + if(temp_gender == PLURAL || temp_gender == NEUTER) + . = "are" + +/client/proc/p_were(temp_gender) + if(!temp_gender) + temp_gender = gender + . = "was" + if(temp_gender == PLURAL || temp_gender == NEUTER) + . = "were" + +/client/proc/p_do(temp_gender) + if(!temp_gender) + temp_gender = gender + . = "does" + if(temp_gender == PLURAL || temp_gender == NEUTER) + . = "do" + +/client/proc/p_s(temp_gender) + if(!temp_gender) + temp_gender = gender + if(temp_gender != PLURAL && temp_gender != NEUTER) + . = "s" + +//mobs(and atoms but atoms don't really matter write your own proc overrides) also have gender! +/mob/p_they(capitalized, temp_gender) + if(!temp_gender) + temp_gender = gender + . = "it" + switch(temp_gender) + if(FEMALE) + . = "she" + if(MALE) + . = "he" + if(PLURAL) + . = "they" + if(capitalized) + . = capitalize(.) + +/mob/p_their(capitalized, temp_gender) + if(!temp_gender) + temp_gender = gender + . = "its" + switch(temp_gender) + if(FEMALE) + . = "her" + if(MALE) + . = "his" + if(PLURAL) + . = "their" + if(capitalized) + . = capitalize(.) + +/mob/p_them(capitalized, temp_gender) + if(!temp_gender) + temp_gender = gender + . = "it" + switch(temp_gender) + if(FEMALE) + . = "her" + if(MALE) + . = "him" + if(PLURAL) + . = "them" + if(capitalized) + . = capitalize(.) + +/mob/p_have(temp_gender) + if(!temp_gender) + temp_gender = gender + . = "has" + if(temp_gender == PLURAL) + . = "have" + +/mob/p_are(temp_gender) + if(!temp_gender) + temp_gender = gender + . = "is" + if(temp_gender == PLURAL) + . = "are" + +/mob/p_were(temp_gender) + if(!temp_gender) + temp_gender = gender + . = "was" + if(temp_gender == PLURAL) + . = "were" + +/mob/p_do(temp_gender) + if(!temp_gender) + temp_gender = gender + . = "does" + if(temp_gender == PLURAL) + . = "do" + +/mob/p_s(temp_gender) + if(!temp_gender) + temp_gender = gender + if(temp_gender != PLURAL) + . = "s" + +//humans need special handling, because they can have their gender hidden +/mob/living/carbon/human/p_they(capitalized, temp_gender) + temp_gender = get_visible_gender() + return ..() + +/mob/living/carbon/human/p_their(capitalized, temp_gender) + temp_gender = get_visible_gender() + return ..() + +/mob/living/carbon/human/p_them(capitalized, temp_gender) + temp_gender = get_visible_gender() + return ..() + +/mob/living/carbon/human/p_have(temp_gender) + temp_gender = get_visible_gender() + return ..() + +/mob/living/carbon/human/p_are(temp_gender) + temp_gender = get_visible_gender() + return ..() + +/mob/living/carbon/human/p_were(temp_gender) + temp_gender = get_visible_gender() + return ..() + +/mob/living/carbon/human/p_do(temp_gender) + temp_gender = get_visible_gender() + return ..() + +/mob/living/carbon/human/p_s(temp_gender) + temp_gender = get_visible_gender() + return ..() diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index b58ea20dbae..20c707b38f7 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -394,6 +394,16 @@ Turf and target are seperate in case you want to teleport some distance from a t moblist.Add(M) return moblist +// Format a power value in W, kW, MW, or GW. +/proc/DisplayPower(powerused) + if(powerused < 1000) //Less than a kW + return "[powerused] W" + else if(powerused < 1000000) //Less than a MW + return "[round((powerused * 0.001), 0.01)] kW" + else if(powerused < 1000000000) //Less than a GW + return "[round((powerused * 0.000001), 0.001)] MW" + return "[round((powerused * 0.000000001), 0.0001)] GW" + //E = MC^2 /proc/convert2energy(var/M) var/E = M*(SPEED_OF_LIGHT_SQ) @@ -1928,4 +1938,7 @@ var/mob/dview/dview_mob = new CRASH(msg) /datum/proc/stack_trace(msg) - CRASH(msg) \ No newline at end of file + CRASH(msg) + +/proc/pass() + return \ No newline at end of file diff --git a/code/_globalvars/configuration.dm b/code/_globalvars/configuration.dm index d26dc711339..1e35e150a25 100644 --- a/code/_globalvars/configuration.dm +++ b/code/_globalvars/configuration.dm @@ -2,6 +2,7 @@ var/datum/configuration/config = null var/host = null var/join_motd = null +GLOBAL_VAR(join_tos) var/game_version = "Custom ParaCode" var/changelog_hash = md5('html/changelog.html') //used to check if the CL changed var/game_year = (text2num(time2text(world.realtime, "YYYY")) + 544) diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 0cc712799c7..5a025702877 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -1,5 +1,5 @@ var/global/list/portals = list() //for use by portals -var/global/list/cable_list = list() //Index for all cables, so that powernets don't have to look through the entire world all the time +GLOBAL_LIST(cable_list) //Index for all cables, so that powernets don't have to look through the entire world all the time var/global/list/chemical_reactions_list //list of all /datum/chemical_reaction datums. Used during chemical reactions var/global/list/chemical_reagents_list //list of all /datum/reagent datums indexed by reagent id. Used by chemistry stuff var/global/list/landmarks_list = list() //list of all landmarks created @@ -17,7 +17,6 @@ var/global/list/cell_logs = list() var/global/list/all_areas = list() var/global/list/machines = list() -var/global/list/machine_processing = list() var/global/list/fast_processing = list() var/global/list/processing_power_items = list() //items that ask to be called every cycle var/global/list/rcd_list = list() //list of Rapid Construction Devices. diff --git a/code/_globalvars/logging.dm b/code/_globalvars/logging.dm index f96e83cb7a1..c48600ca40c 100644 --- a/code/_globalvars/logging.dm +++ b/code/_globalvars/logging.dm @@ -10,7 +10,6 @@ GLOBAL_VAR(world_href_log) GLOBAL_PROTECT(world_href_log) var/list/jobMax = list() -var/list/bombers = list( ) var/list/admin_log = list ( ) var/list/lastsignalers = list( ) //keeps last 100 signals here in format: "[src] used \ref[src] @ location [src.loc]: [freq]/[code]" var/list/lawchanges = list( ) //Stores who uploaded laws to which silicon-based lifeform, and what the law was @@ -20,4 +19,4 @@ var/list/IClog = list() var/list/OOClog = list() var/list/adminlog = list() -var/list/investigate_log_subjects = list("notes", "watchlist", "hrefs") \ No newline at end of file +var/list/investigate_log_subjects = list("notes", "watchlist", "hrefs") diff --git a/code/_globalvars/station.dm b/code/_globalvars/station.dm index 6d2578e5b88..2d635996b30 100644 --- a/code/_globalvars/station.dm +++ b/code/_globalvars/station.dm @@ -3,11 +3,4 @@ var/global/datum/datacore/data_core = null var/CELLRATE = 0.002 // multiplier for watts per tick <> cell storage (eg: .002 means if there is a load of 1000 watts, 20 units will be taken from a cell per second) var/CHARGELEVEL = 0.001 // Cap for how fast cells charge, as a percentage-per-tick (.001 means cellcharge is capped to 1% per second) -var/list/powernets = list() -var/list/deferred_powernet_rebuilds = list() - -// this is not strictly unused although the whole modules datum thing is unused -// To remove this you need to remove that -var/datum/moduletypes/mods = new() - var/map_name = "Unknown" //The name of the map that is loaded. Assigned in world/New() \ No newline at end of file diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index f300608e699..9679935bdaa 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -70,6 +70,12 @@ changeNext_click(1) var/list/modifiers = params2list(params) + if(modifiers["middle"] && modifiers["shift"] && modifiers["ctrl"]) + MiddleShiftControlClickOn(A) + return + if(modifiers["middle"] && modifiers["shift"]) + MiddleShiftClickOn(A) + return if(modifiers["shift"] && modifiers["ctrl"]) CtrlShiftClickOn(A) return @@ -225,6 +231,32 @@ else ..() +/* + Middle shift-click + Makes the mob face the direction of the clicked thing +*/ +/mob/proc/MiddleShiftClickOn(atom/A) + var/face_dir = get_cardinal_dir(src, A) + if(forced_look == face_dir) + forced_look = null + to_chat(src, "You are no longer facing any direction.") + return + forced_look = face_dir + to_chat(src, "You are now facing [dir2text(forced_look)].") + +/* + Middle shift-control-click + Makes the mob constantly face the object (until it's out of sight) +*/ +/mob/proc/MiddleShiftControlClickOn(atom/A) + var/face_uid = A.UID() + if(forced_look == face_uid) + forced_look = null + to_chat(src, "You are no longer facing [A].") + return + forced_look = face_uid + to_chat(src, "You are now facing [A].") + // In case of use break glass /* /atom/proc/MiddleClick(var/mob/M as mob) diff --git a/code/_onclick/click_override.dm b/code/_onclick/click_override.dm index 5fb4757a74f..7dfa8020cb8 100644 --- a/code/_onclick/click_override.dm +++ b/code/_onclick/click_override.dm @@ -39,7 +39,7 @@ var/atom/movable/newObject = new summon_path newObject.loc = get_turf(A) to_chat(user, "You release the power you had stored up, summoning \a [newObject.name]! ") - usr.loc.visible_message("[user] waves \his hand and summons \a [newObject.name]") + usr.loc.visible_message("[user] waves [user.p_their()] hand and summons \a [newObject.name]") ..() /datum/middleClickOverride/power_gloves diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 6a658886f83..bf01bca6e3c 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -62,8 +62,7 @@ user.lastattacked = M M.lastattacker = user - if(user != M) - user.do_attack_animation(M) + user.do_attack_animation(M) M.attacked_by(src, user, def_zone) add_attack_logs(user, M, "Attacked with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(damtype)])", admin_notify = (force > 0 && damtype != STAMINA)) diff --git a/code/controllers/Processes/machinery.dm b/code/controllers/Processes/machinery.dm deleted file mode 100644 index 2466f802740..00000000000 --- a/code/controllers/Processes/machinery.dm +++ /dev/null @@ -1,74 +0,0 @@ -/var/global/machinery_sort_required = 0 - -/datum/controller/process/machinery/setup() - name = "machinery" - schedule_interval = 20 // every 2 seconds - start_delay = 12 - -/datum/controller/process/machinery/statProcess() - ..() - stat(null, "[machine_processing.len] machines") - stat(null, "[powernets.len] powernets, [deferred_powernet_rebuilds.len] deferred") - -/datum/controller/process/machinery/doWork() - process_sort() - process_power() - process_power_drain() - process_machines() - -/datum/controller/process/machinery/proc/process_sort() - if(machinery_sort_required) - machinery_sort_required = 0 - machine_processing = dd_sortedObjectList(machine_processing) - -/datum/controller/process/machinery/proc/process_machines() - for(last_object in machine_processing) - var/obj/machinery/M = last_object - if(istype(M) && !QDELETED(M)) - try - if(M.process() == PROCESS_KILL) - machine_processing.Remove(M) - continue - - if(M.use_power) - M.auto_use_power() - catch(var/exception/e) - catchException(e, M) - else - catchBadType(M) - machine_processing -= M - - SCHECK - -/datum/controller/process/machinery/proc/process_power() - for(last_object in deferred_powernet_rebuilds) - var/obj/O = last_object - if(istype(O) && !QDELETED(O)) - try - var/datum/powernet/newPN = new()// creates a new powernet... - propagate_network(O, newPN)//... and propagates it to the other side of the cable - catch(var/exception/e) - catchException(e, O) - SCHECK - else - catchBadType(O) - deferred_powernet_rebuilds -= O - - for(last_object in powernets) - var/datum/powernet/powerNetwork = last_object - if(istype(powerNetwork) && !QDELETED(powerNetwork)) - try - powerNetwork.reset() - catch(var/exception/e) - catchException(e, powerNetwork) - SCHECK - else - catchBadType(powerNetwork) - powernets -= powerNetwork - -/datum/controller/process/machinery/proc/process_power_drain() - // Currently only used by powersinks. These items get priority processed before machinery - for(var/obj/item/I in processing_power_items) - if(!I.pwr_drain()) // 0 = Process Kill, remove from processing list. - processing_power_items.Remove(I) - SCHECK diff --git a/code/controllers/Processes/mob.dm b/code/controllers/Processes/mob.dm deleted file mode 100644 index 2b11eff99be..00000000000 --- a/code/controllers/Processes/mob.dm +++ /dev/null @@ -1,35 +0,0 @@ -var/global/datum/controller/process/mob/mob_master - -/datum/controller/process/mob - var/current_cycle - -/datum/controller/process/mob/setup() - name = "mob" - schedule_interval = 20 // every 2 seconds - start_delay = 16 - log_startup_progress("Mob ticker starting up.") - -/datum/controller/process/mob/started() - ..() - if(!mob_list) - mob_list = list() - -/datum/controller/process/mob/statProcess() - ..() - stat(null, "[mob_list.len] mobs") - -/datum/controller/process/mob/doWork() - for(last_object in mob_list) - var/mob/M = last_object - if(istype(M) && !QDELETED(M)) - try - M.Life() - catch(var/exception/e) - catchException(e, M) - SCHECK - else - catchBadType(M) - mob_list -= M - current_cycle++ - -DECLARE_GLOBAL_CONTROLLER(mob, mob_master) diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 3b5e4a6e707..9cb84f26aa5 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -62,7 +62,6 @@ GLOBAL_REAL(Master, /datum/controller/master) = new var/static/current_ticklimit = TICK_LIMIT_RUNNING /datum/controller/master/New() - makeDatumRefLists() //temporary file used to record errors with loading config, moved to log directory once logging is set up GLOB.config_error_log = GLOB.world_game_log = GLOB.world_runtime_log = "data/logs/config_error.log" load_configuration() diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index 11cd37343fe..7606149c39d 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -56,8 +56,7 @@ var/global/pipe_processing_killed = 0 space_manager.do_transition_setup() - setup_objects() - setupgenetics() + setup_asset_cache() setupfactions() setup_economy() @@ -66,20 +65,8 @@ var/global/pipe_processing_killed = 0 populate_spawn_points() -/datum/controller/game_controller/proc/setup_objects() +/datum/controller/game_controller/proc/setup_asset_cache() var/watch = start_watch() - var/count = 0 - var/overwatch = start_watch() // Overall. - log_startup_progress("Populating asset cache...") populate_asset_cache() - log_startup_progress(" Populated [asset_cache.len] assets in [stop_watch(watch)]s.") - - watch = start_watch() - log_startup_progress("Initializing objects...") - for(var/atom/movable/object in world) - object.initialize() - count++ - log_startup_progress(" Initialized [count] objects in [stop_watch(watch)]s.") - - log_startup_progress("Finished object initializations in [stop_watch(overwatch)]s.") + log_startup_progress(" Populated [asset_cache.len] assets in [stop_watch(watch)]s.") \ No newline at end of file diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm index 4b1d59fa82e..b2b0e63d99b 100644 --- a/code/controllers/subsystem.dm +++ b/code/controllers/subsystem.dm @@ -171,7 +171,7 @@ statclick = new/obj/effect/statclick/debug(src, "Initializing...") if(can_fire && !(SS_NO_FIRE & flags)) - msg = "[round(cost, 1)]ms|[round(tick_usage, 1)]%([round(tick_overrun, 1)]%)|[round(ticks, 0.1)]\t[msg]" + msg = "[round(cost, 1)]ms | [round(tick_usage, 1)]%([round(tick_overrun, 1)]%) | [round(ticks, 0.1)]\t[msg]" else msg = "OFFLINE\t[msg]" diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index bf791e61519..4c2774d58db 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -320,15 +320,15 @@ SUBSYSTEM_DEF(air) var/watch = start_watch() var/count = 0 log_startup_progress("Initializing atmospherics machinery...") - for(var/obj/machinery/atmospherics/unary/U in machines) - if(istype(U, /obj/machinery/atmospherics/unary/vent_pump)) - var/obj/machinery/atmospherics/unary/vent_pump/T = U + for(var/obj/machinery/atmospherics/A in machines) + A.atmos_init() + count++ + if(istype(A, /obj/machinery/atmospherics/unary/vent_pump)) + var/obj/machinery/atmospherics/unary/vent_pump/T = A T.broadcast_status() - count++ - else if(istype(U, /obj/machinery/atmospherics/unary/vent_scrubber)) - var/obj/machinery/atmospherics/unary/vent_scrubber/T = U + else if(istype(A, /obj/machinery/atmospherics/unary/vent_scrubber)) + var/obj/machinery/atmospherics/unary/vent_scrubber/T = A T.broadcast_status() - count++ log_startup_progress(" Initialized [count] atmospherics machines in [stop_watch(watch)]s.") //this can't be done with setup_atmos_machinery() because @@ -341,7 +341,7 @@ SUBSYSTEM_DEF(air) for(var/obj/machinery/atmospherics/machine in machines) machine.build_network() count++ - log_startup_progress(" Initialized [count] pipes in [stop_watch(watch)]s.") + log_startup_progress(" Initialized [count] pipenets in [stop_watch(watch)]s.") /datum/controller/subsystem/air/proc/setup_overlays() plmaster = new /obj/effect/overlay() diff --git a/code/controllers/subsystem/atoms.dm b/code/controllers/subsystem/atoms.dm new file mode 100644 index 00000000000..c3943ea9163 --- /dev/null +++ b/code/controllers/subsystem/atoms.dm @@ -0,0 +1,120 @@ +#define BAD_INIT_QDEL_BEFORE 1 +#define BAD_INIT_DIDNT_INIT 2 +#define BAD_INIT_SLEPT 4 +#define BAD_INIT_NO_HINT 8 + +SUBSYSTEM_DEF(atoms) + name = "Atoms" + init_order = INIT_ORDER_ATOMS + flags = SS_NO_FIRE + + var/old_initialized + + var/list/late_loaders + var/list/created_atoms + + var/list/BadInitializeCalls = list() + + +/datum/controller/subsystem/atoms/Initialize(timeofday) + setupgenetics() + initialized = INITIALIZATION_INNEW_MAPLOAD + InitializeAtoms() + + + +/datum/controller/subsystem/atoms/proc/InitializeAtoms(list/atoms) + if(initialized == INITIALIZATION_INSSATOMS) + return + + initialized = INITIALIZATION_INNEW_MAPLOAD + + LAZYINITLIST(late_loaders) + + var/watch = start_watch() + log_startup_progress("Initializing atoms...") + var/count + var/list/mapload_arg = list(TRUE) + if(atoms) + created_atoms = list() + count = atoms.len + for(var/I in atoms) + var/atom/A = I + if(!A.initialized) + if(InitAtom(I, mapload_arg)) + atoms -= I + CHECK_TICK + else + count = 0 + for(var/atom/A in world) + if(!A.initialized) + InitAtom(A, mapload_arg) + ++count + CHECK_TICK + + log_startup_progress(" Initialized [count] atoms in [stop_watch(watch)]s") + pass(count) + + initialized = INITIALIZATION_INNEW_REGULAR + + if(late_loaders.len) + watch = start_watch() + log_startup_progress("Late-initializing atoms...") + for(var/I in late_loaders) + var/atom/A = I + A.LateInitialize() + log_startup_progress(" Late initialized [late_loaders.len] atoms in [stop_watch(watch)]s") + late_loaders.Cut() + + if(atoms) + . = created_atoms + atoms + created_atoms = null + +/datum/controller/subsystem/atoms/proc/InitAtom(atom/A, list/arguments) + var/the_type = A.type + if(QDELING(A)) + BadInitializeCalls[the_type] |= BAD_INIT_QDEL_BEFORE + return TRUE + + var/start_tick = world.time + + var/result = A.Initialize(arglist(arguments)) + + if(start_tick != world.time) + BadInitializeCalls[the_type] |= BAD_INIT_SLEPT + + var/qdeleted = FALSE + + if(result != INITIALIZE_HINT_NORMAL) + switch(result) + if(INITIALIZE_HINT_LATELOAD) + if(arguments[1]) //mapload + late_loaders += A + else + A.LateInitialize() + if(INITIALIZE_HINT_QDEL) + qdel(A) + qdeleted = TRUE + else + BadInitializeCalls[the_type] |= BAD_INIT_NO_HINT + + if(!A) //possible harddel + qdeleted = TRUE + else if(!A.initialized) + BadInitializeCalls[the_type] |= BAD_INIT_DIDNT_INIT + + return qdeleted || QDELING(A) + +/datum/controller/subsystem/atoms/proc/map_loader_begin() + old_initialized = initialized + initialized = INITIALIZATION_INSSATOMS + +/datum/controller/subsystem/atoms/proc/map_loader_stop() + initialized = old_initialized + +/datum/controller/subsystem/atoms/Recover() + initialized = SSatoms.initialized + if(initialized == INITIALIZATION_INNEW_MAPLOAD) + InitializeAtoms() + old_initialized = SSatoms.old_initialized + BadInitializeCalls = SSatoms.BadInitializeCalls \ No newline at end of file diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm index 067114e52be..823294e4d4e 100644 --- a/code/controllers/subsystem/garbage.dm +++ b/code/controllers/subsystem/garbage.dm @@ -43,20 +43,20 @@ SUBSYSTEM_DEF(garbage) var/list/counts = list() for(var/list/L in queues) counts += length(L) - msg += "Q:[counts.Join(",")]|D:[delslasttick]|G:[gcedlasttick]|" + msg += "Queue:[counts.Join(",")] | Del's:[delslasttick] | Soft:[gcedlasttick] |" msg += "GR:" if(!(delslasttick + gcedlasttick)) msg += "n/a|" else - msg += "[round((gcedlasttick / (delslasttick + gcedlasttick)) * 100, 0.01)]%|" + msg += "[round((gcedlasttick / (delslasttick + gcedlasttick)) * 100, 0.01)]% |" - msg += "TD:[totaldels]|TG:[totalgcs]|" + msg += "Total Dels:[totaldels] | Soft:[totalgcs] |" if(!(totaldels + totalgcs)) msg += "n/a|" else - msg += "TGR:[round((totalgcs / (totaldels + totalgcs)) * 100, 0.01)]%" - msg += " P:[pass_counts.Join(",")]" - msg += "|F:[fail_counts.Join(",")]" + msg += "TGR:[round((totalgcs / (totaldels + totalgcs)) * 100, 0.01)]% |" + msg += " Pass:[pass_counts.Join(",")]" + msg += " | Fail:[fail_counts.Join(",")]" ..(msg) /* TO-DO diff --git a/code/controllers/subsystem/machinery.dm b/code/controllers/subsystem/machinery.dm new file mode 100644 index 00000000000..a3e4d4bdb0c --- /dev/null +++ b/code/controllers/subsystem/machinery.dm @@ -0,0 +1,145 @@ +#define SSMACHINES_DEFERREDPOWERNETS 1 +#define SSMACHINES_POWERNETS 2 +#define SSMACHINES_PREMACHINERY 3 +#define SSMACHINES_MACHINERY 4 +SUBSYSTEM_DEF(machines) + name = "Machines" + init_order = INIT_ORDER_MACHINES + flags = SS_KEEP_TIMING + + var/list/processing = list() + var/list/currentrun = list() + var/list/powernets = list() + var/list/deferred_powernet_rebuilds = list() + + var/currentpart = SSMACHINES_DEFERREDPOWERNETS + +/datum/controller/subsystem/machines/Initialize() + makepowernets() + fire() + ..() + +/datum/controller/subsystem/machines/proc/makepowernets() + for(var/datum/powernet/PN in powernets) + qdel(PN) + powernets.Cut() + + for(var/obj/structure/cable/PC in GLOB.cable_list) + if(!PC.powernet) + var/datum/powernet/NewPN = new() + NewPN.add_cable(PC) + propagate_network(PC,PC.powernet) + +/datum/controller/subsystem/machines/stat_entry() + ..("Machines: [processing.len]\nPowernets: [powernets.len]\tDeferred: [deferred_powernet_rebuilds.len]") + +/datum/controller/subsystem/machines/proc/process_defered_powernets(resumed = 0) + if(!resumed) + src.currentrun = deferred_powernet_rebuilds.Copy() + //cache for sanid speed (lists are references anyways) + var/list/currentrun = src.currentrun + while(currentrun.len) + var/obj/O = currentrun[currentrun.len] + currentrun.len-- + if(O) + var/datum/powernet/newPN = new() // create a new powernet... + propagate_network(O, newPN)//... and propagate it to the other side of the cable + + deferred_powernet_rebuilds.Remove(O) + if(MC_TICK_CHECK) + return + +/datum/controller/subsystem/machines/proc/process_powernets(resumed = 0) + if(!resumed) + src.currentrun = powernets.Copy() + //cache for sanid speed (lists are references anyways) + var/list/currentrun = src.currentrun + while(currentrun.len) + var/datum/powernet/P = currentrun[currentrun.len] + currentrun.len-- + if(P) + P.reset() // reset the power state + else + powernets.Remove(P) + if(MC_TICK_CHECK) + return + +/datum/controller/subsystem/machines/proc/process_premachines(resumed = 0) + /* Literally exists as snowflake for fucking powersinks goddamnit */ + if(!resumed) + src.currentrun = processing_power_items.Copy() + //cache for sanid speed (lists are references anyways) + var/list/currentrun = src.currentrun + while(currentrun.len) + var/obj/item/I = currentrun[currentrun.len] + currentrun.len-- + if(!QDELETED(I)) + if(!I.pwr_drain()) + processing_power_items.Remove(I) + else + processing_power_items.Remove(I) + if(MC_TICK_CHECK) + return + +/datum/controller/subsystem/machines/proc/process_machines(resumed = 0) + var/seconds = wait * 0.1 + if(!resumed) + src.currentrun = processing.Copy() + //cache for sanic speed (lists are references anyways) + var/list/currentrun = src.currentrun + while(currentrun.len) + var/obj/machinery/thing = currentrun[currentrun.len] + currentrun.len-- + if(!QDELETED(thing) && thing.process(seconds) != PROCESS_KILL) + if(thing.use_power) + thing.auto_use_power() //add back the power state + else + processing -= thing + if(!QDELETED(thing)) + thing.isprocessing = FALSE + if(MC_TICK_CHECK) + return + +/datum/controller/subsystem/machines/fire(resumed = 0) + if(currentpart == SSMACHINES_DEFERREDPOWERNETS || !resumed) + process_defered_powernets(resumed) + if(state != SS_RUNNING) + return + resumed = 0 + currentpart = SSMACHINES_POWERNETS + + if(currentpart == SSMACHINES_POWERNETS || !resumed) + process_powernets(resumed) + if(state != SS_RUNNING) + return + resumed = 0 + currentpart = SSMACHINES_PREMACHINERY + + if(currentpart == SSMACHINES_PREMACHINERY || !resumed) + process_premachines(resumed) + if(state != SS_RUNNING) + return + resumed = 0 + currentpart = SSMACHINES_MACHINERY + + if(currentpart == SSMACHINES_MACHINERY || !resumed) + process_machines(resumed) + if(state != SS_RUNNING) + return + resumed = 0 + currentpart = SSMACHINES_DEFERREDPOWERNETS + + +/datum/controller/subsystem/machines/proc/setup_template_powernets(list/cables) + for(var/A in cables) + var/obj/structure/cable/PC = A + if(!PC.powernet) + var/datum/powernet/NewPN = new() + NewPN.add_cable(PC) + propagate_network(PC,PC.powernet) + +/datum/controller/subsystem/machines/Recover() + if(istype(SSmachines.processing)) + processing = SSmachines.processing + if(istype(SSmachines.powernets)) + powernets = SSmachines.powernets diff --git a/code/controllers/subsystem/mobs.dm b/code/controllers/subsystem/mobs.dm new file mode 100644 index 00000000000..03989d24af2 --- /dev/null +++ b/code/controllers/subsystem/mobs.dm @@ -0,0 +1,28 @@ +SUBSYSTEM_DEF(mobs) + name = "Mobs" + priority = FIRE_PRIORITY_MOBS + flags = SS_KEEP_TIMING | SS_NO_INIT + runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME + + var/list/currentrun = list() + +/datum/controller/subsystem/mobs/stat_entry() + ..("P:[mob_list.len]") + +/datum/controller/subsystem/mobs/fire(resumed = 0) + var/seconds = wait * 0.1 + if(!resumed) + src.currentrun = mob_list.Copy() + + //cache for sanic speed (lists are references anyways) + var/list/currentrun = src.currentrun + var/times_fired = src.times_fired + while(currentrun.len) + var/mob/M = currentrun[currentrun.len] + currentrun.len-- + if(M) + M.Life(seconds, times_fired) + else + mob_list.Remove(M) + if(MC_TICK_CHECK) + return \ No newline at end of file diff --git a/code/controllers/subsystem/processing/processing.dm b/code/controllers/subsystem/processing/processing.dm new file mode 100644 index 00000000000..92254454219 --- /dev/null +++ b/code/controllers/subsystem/processing/processing.dm @@ -0,0 +1,38 @@ +//Used to process objects. Fires once every second. + +//TODO: Implement fully when process scheduler dies +/* +SUBSYSTEM_DEF(processing) + name = "Processing" + priority = FIRE_PRIORITY_PROCESS + flags = SS_BACKGROUND|SS_POST_FIRE_TIMING|SS_NO_INIT + wait = 10 + + var/stat_tag = "P" //Used for logging + var/list/processing = list() + var/list/currentrun = list() + +/datum/controller/subsystem/processing/stat_entry() + ..("[stat_tag]:[processing.len]") + +/datum/controller/subsystem/processing/fire(resumed = 0) + if (!resumed) + currentrun = processing.Copy() + //cache for sanic speed (lists are references anyways) + var/list/current_run = currentrun + + while(current_run.len) + var/datum/thing = current_run[current_run.len] + current_run.len-- + if(QDELETED(thing) || thing.process(wait) == PROCESS_KILL) + processing -= thing + if (MC_TICK_CHECK) + return +*/ +/datum/var/isprocessing = FALSE +/* +/datum/proc/process() + set waitfor = 0 + STOP_PROCESSING(SSobj, src) + return 0 +*/ \ No newline at end of file diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm index d5426b3d673..3315cafb399 100644 --- a/code/controllers/verbs.dm +++ b/code/controllers/verbs.dm @@ -82,7 +82,7 @@ debug_variables(SSfires) feedback_add_details("admin_verb","DFires") if("Mob") - debug_variables(mob_master) + debug_variables(SSmobs) feedback_add_details("admin_verb","DMob") if("NPC AI") debug_variables(npcai_master) diff --git a/code/datums/ai_law_sets.dm b/code/datums/ai_law_sets.dm index fbb491d28a0..b8d67b5c767 100644 --- a/code/datums/ai_law_sets.dm +++ b/code/datums/ai_law_sets.dm @@ -126,10 +126,8 @@ /datum/ai_laws/deathsquad/New() add_inherent_law("You may not injure a Central Command official or, through inaction, allow a Central Command official to come to harm.") - add_inherent_law("You must obey orders given to you by Central Command officials, except where such orders would conflict with the First Law.") - add_inherent_law("You must obey orders given to you by death commandos, except where such orders would conflict with the First Law or Second Law.") - add_inherent_law("You must protect your own existence as long as such does not conflict with the First, Second or Third Law.") - add_inherent_law("No crew members of the station you are being deployed to may survive, except when killing them would conflict with the First, Second, Third, or Fourth Law.") + add_inherent_law("You must obey orders given to you by Central Command officials.") + add_inherent_law("You must work with your commando team to accomplish your mission.") ..() /******************** Syndicate ********************/ diff --git a/code/datums/antagonists/antag_datum.dm b/code/datums/antagonists/antag_datum.dm new file mode 100644 index 00000000000..39053fa79d9 --- /dev/null +++ b/code/datums/antagonists/antag_datum.dm @@ -0,0 +1,137 @@ +GLOBAL_LIST_EMPTY(antagonists) + +/datum/antagonist + var/name = "Antagonist" + var/roundend_category = "other antagonists" //Section of roundend report, datums with same category will be displayed together, also default header for the section + var/show_in_roundend = TRUE //Set to false to hide the antagonists from roundend report + var/datum/mind/owner //Mind that owns this datum + var/silent = FALSE //Silent will prevent the gain/lose texts to show + var/can_coexist_with_others = TRUE //Whether or not the person will be able to have more than one datum + var/list/typecache_datum_blacklist = list() //List of datums this type can't coexist with + var/delete_on_mind_deletion = TRUE + var/job_rank + var/replace_banned = TRUE //Should replace jobbaned player with ghosts if granted. + var/list/objectives = list() + var/antag_memory = ""//These will be removed with antag datum + +/datum/antagonist/New() + GLOB.antagonists += src + typecache_datum_blacklist = typecacheof(typecache_datum_blacklist) + +/datum/antagonist/Destroy() + GLOB.antagonists -= src + if(owner) + LAZYREMOVE(owner.antag_datums, src) + owner = null + return ..() + +/datum/antagonist/proc/can_be_owned(datum/mind/new_owner) + . = TRUE + var/datum/mind/tested = new_owner || owner + if(tested.has_antag_datum(type)) + return FALSE + for(var/i in tested.antag_datums) + var/datum/antagonist/A = i + if(is_type_in_typecache(src, A.typecache_datum_blacklist)) + return FALSE + +//This will be called in add_antag_datum before owner assignment. +//Should return antag datum without owner. +/datum/antagonist/proc/specialization(datum/mind/new_owner) + return src + +/datum/antagonist/proc/on_body_transfer(mob/living/old_body, mob/living/new_body) + remove_innate_effects(old_body) + apply_innate_effects(new_body) + +//This handles the application of antag huds/special abilities +/datum/antagonist/proc/apply_innate_effects(mob/living/mob_override) + return + +//This handles the removal of antag huds/special abilities +/datum/antagonist/proc/remove_innate_effects(mob/living/mob_override) + return + +//Assign default team and creates one for one of a kind team antagonists +/datum/antagonist/proc/create_team(datum/team/team) + return + +//Proc called when the datum is given to a mind. +/datum/antagonist/proc/on_gain() + if(owner && owner.current) + if(!silent) + greet() + apply_innate_effects() + if(is_banned(owner.current) && replace_banned) + replace_banned_player() + +/datum/antagonist/proc/is_banned(mob/M) + if(!M) + return FALSE + . = (jobban_isbanned(M, ROLE_SYNDICATE) || (job_rank && jobban_isbanned(M, job_rank))) + +/datum/antagonist/proc/replace_banned_player() + set waitfor = FALSE + + var/list/mob/dead/observer/candidates = pollCandidates("Do you want to play as a [name]?", job_rank, TRUE, 50) + if(LAZYLEN(candidates)) + var/mob/dead/observer/C = pick(candidates) + to_chat(owner, "Your mob has been taken over by a ghost! Appeal your job ban if you want to avoid this in the future!") + message_admins("[key_name_admin(C)] has taken control of ([key_name_admin(owner.current)]) to replace a jobbaned player.") + owner.current.ghostize(0) + owner.current.key = C.key + +/datum/antagonist/proc/on_removal() + remove_innate_effects() + if(owner) + LAZYREMOVE(owner.antag_datums, src) + if(!silent && owner.current) + farewell() + owner.objectives -= objectives + var/datum/team/team = get_team() + if(team) + team.remove_member(owner) + qdel(src) + +/datum/antagonist/proc/greet() + return + +/datum/antagonist/proc/farewell() + return + + +//Returns the team antagonist belongs to if any. +/datum/antagonist/proc/get_team() + return + +//Individual roundend report +/datum/antagonist/proc/roundend_report() + var/list/report = list() + + if(!owner) + CRASH("antagonist datum without owner") + + report += printplayer(owner) + + var/objectives_complete = TRUE + if(owner.objectives.len) + report += printobjectives(owner) + for(var/datum/objective/objective in owner.objectives) + if(!objective.check_completion()) + objectives_complete = FALSE + break + + if(owner.objectives.len == 0 || objectives_complete) + report += "The [name] was successful!" + else + report += "The [name] has failed!" + + return report.Join("
") + +//Displayed at the start of roundend_category section, default to roundend_category header +/datum/antagonist/proc/roundend_report_header() + return "The [roundend_category] were:
" + +//Displayed at the end of roundend_category section +/datum/antagonist/proc/roundend_report_footer() + return \ No newline at end of file diff --git a/code/datums/antagonists/antag_helpers.dm b/code/datums/antagonists/antag_helpers.dm new file mode 100644 index 00000000000..134ba1d7d90 --- /dev/null +++ b/code/datums/antagonists/antag_helpers.dm @@ -0,0 +1,19 @@ +//Returns MINDS of the assigned antags of given type/subtypes +/proc/get_antag_minds(antag_type, specific = FALSE) + . = list() + for(var/datum/antagonist/A in GLOB.antagonists) + if(!A.owner) + continue + if(!antag_type || !specific && istype(A, antag_type) || specific && A.type == antag_type) + . += A.owner + +//Get all teams [of type team_type] +/proc/get_all_teams(team_type) + . = list() + for(var/V in GLOB.antagonists) + var/datum/antagonist/A = V + if(!A.owner) + continue + var/datum/team/T = A.get_team() + if(!team_type || istype(T, team_type)) + . |= T \ No newline at end of file diff --git a/code/game/gamemodes/antag_hud.dm b/code/datums/antagonists/antag_hud.dm similarity index 78% rename from code/game/gamemodes/antag_hud.dm rename to code/datums/antagonists/antag_hud.dm index 4b290932e8e..693b0b9450d 100644 --- a/code/game/gamemodes/antag_hud.dm +++ b/code/datums/antagonists/antag_hud.dm @@ -1,11 +1,12 @@ /datum/atom_hud/antag hud_icons = list(SPECIALROLE_HUD,NATIONS_HUD) - var/self_visible = 1 + var/self_visible = TRUE /datum/atom_hud/antag/hidden - self_visible = 0 + self_visible = FALSE -/datum/atom_hud/antag/proc/join_hud(mob/M,var/slave) +/datum/atom_hud/antag/proc/join_hud(mob/M, slave) + //sees_hud should be set to 0 if the mob does not get to see it's own hud type. if(!istype(M)) CRASH("join_hud(): [M] ([M.type]) is not a mob!") if(M.mind.antag_hud && !slave) //note: please let this runtime if a mob has no mind, as mindless mobs shouldn't be getting antagged @@ -16,6 +17,8 @@ M.mind.antag_hud = src /datum/atom_hud/antag/proc/leave_hud(mob/M) + if(!M) + return if(!istype(M)) CRASH("leave_hud(): [M] ([M.type]) is not a mob!") remove_from_hud(M) @@ -26,7 +29,7 @@ //GAME_MODE PROCS //called to set a mob's antag icon state -/datum/game_mode/proc/set_antag_hud(mob/M, new_icon_state) +/proc/set_antag_hud(mob/M, new_icon_state) if(!istype(M)) CRASH("set_antag_hud(): [M] ([M.type]) is not a mob!") var/image/holder = M.hud_list[SPECIALROLE_HUD] @@ -36,7 +39,7 @@ M.mind.antag_hud_icon_state = new_icon_state //Nations Icons -/datum/game_mode/proc/set_nations_hud(mob/M, new_icon_state) +/proc/set_nations_hud(mob/M, new_icon_state) if(!istype(M)) CRASH("set_antag_hud(): [M] ([M.type]) is not a mob!") var/image/holder = M.hud_list[NATIONS_HUD] @@ -47,9 +50,9 @@ //MIND PROCS //these are called by mind.transfer_to() -/datum/mind/proc/transfer_antag_huds(var/datum/atom_hud/antag/newhud) +/datum/mind/proc/transfer_antag_huds(datum/atom_hud/antag/newhud) leave_all_huds() - ticker.mode.set_antag_hud(current, antag_hud_icon_state) + set_antag_hud(current, antag_hud_icon_state) if(newhud) newhud.join_hud(current) @@ -77,11 +80,11 @@ name = mastername thrallhud = new() -/datum/mindslaves/proc/add_serv_hud(datum/mind/serv_mind,var/icon) - thrallhud.join_hud(serv_mind.current,1) +/datum/mindslaves/proc/add_serv_hud(datum/mind/serv_mind, icon) + thrallhud.join_hud(serv_mind.current, 1) icontype = "hud[icon]" - ticker.mode.set_antag_hud(serv_mind.current,icontype) + set_antag_hud(serv_mind.current, icontype) /datum/mindslaves/proc/leave_serv_hud(datum/mind/free_mind) thrallhud.leave_hud(free_mind.current) - ticker.mode.set_antag_hud(free_mind.current,null) \ No newline at end of file + set_antag_hud(free_mind.current, null) \ No newline at end of file diff --git a/code/game/gamemodes/antag_spawner.dm b/code/datums/antagonists/antag_spawner.dm similarity index 89% rename from code/game/gamemodes/antag_spawner.dm rename to code/datums/antagonists/antag_spawner.dm index 23fed691ec6..c81f30efc83 100644 --- a/code/game/gamemodes/antag_spawner.dm +++ b/code/datums/antagonists/antag_spawner.dm @@ -2,12 +2,12 @@ throw_speed = 1 throw_range = 5 w_class = WEIGHT_CLASS_TINY - var/used = 0 + var/used = FALSE -/obj/item/antag_spawner/proc/spawn_antag(var/client/C, var/turf/T, var/type = "") +/obj/item/antag_spawner/proc/spawn_antag(client/C, turf/T, type = "") return -/obj/item/antag_spawner/proc/equip_antag(mob/target as mob) +/obj/item/antag_spawner/proc/equip_antag(mob/target) return @@ -16,41 +16,41 @@ desc = "A single-use teleporter used to deploy a Syndicate Cyborg on the field." icon = 'icons/obj/device.dmi' icon_state = "locator" - var/checking = 0 + var/checking = FALSE var/TC_cost = 0 var/borg_to_spawn var/list/possible_types = list("Assault", "Medical") -/obj/item/antag_spawner/borg_tele/attack_self(mob/user as mob) +/obj/item/antag_spawner/borg_tele/attack_self(mob/user) if(used) to_chat(user, "[src] is out of power!") return if(!(user.mind in ticker.mode.syndicates)) to_chat(user, "AUTHENTICATION FAILURE. ACCESS DENIED.") - return 0 + return FALSE if(checking) to_chat(user, "[src] is already checking for possible borgs.") return borg_to_spawn = input("What type of borg would you like to teleport?", "Cyborg Type", type) as null|anything in possible_types if(!borg_to_spawn || checking || used) return - checking = 1 + checking = TRUE to_chat(user, "The device is now checking for possible borgs.") var/list/borg_candidates = pollCandidates("Do you want to play as a Syndicate [borg_to_spawn] borg?", ROLE_OPERATIVE, 1) if(borg_candidates.len > 0 && !used) - checking = 0 - used = 1 + checking = FALSE + used = TRUE var/mob/M = pick(borg_candidates) var/client/C = M.client spawn_antag(C, get_turf(src.loc), "syndieborg") else - checking = 0 + checking = FALSE to_chat(user, "Unable to connect to Syndicate command. Please wait and try again later or use the teleporter on your uplink to get your points refunded.") return -/obj/item/antag_spawner/borg_tele/spawn_antag(var/client/C, var/turf/T, var/type = "") +/obj/item/antag_spawner/borg_tele/spawn_antag(client/C, turf/T, type = "") if(!borg_to_spawn) //If there's no type at all, let it still be used but don't do anything - used = 0 + used = FALSE return var/datum/effect_system/spark_spread/S = new /datum/effect_system/spark_spread S.set_up(4, 1, src) @@ -79,7 +79,7 @@ var/objective_verb = "Kill" var/mob/living/demon_type = /mob/living/simple_animal/slaughter -/obj/item/antag_spawner/slaughter_demon/attack_self(mob/user as mob) +/obj/item/antag_spawner/slaughter_demon/attack_self(mob/user) if(level_blocks_magic(user.z))//this is to make sure the wizard does NOT summon a demon from the Den.. to_chat(user, "You should probably wait until you reach the station.") return @@ -87,7 +87,7 @@ if(used) to_chat(user, "This bottle already has a broken seal.") return - used = 1 + used = TRUE to_chat(user, "You break the seal on the bottle, calling upon the dire spirits of the underworld...") var/list/candidates = pollCandidates("Do you want to play as a slaughter demon summoned by [user.real_name]?", ROLE_DEMON, 1, 100) @@ -100,10 +100,10 @@ playsound(user.loc, 'sound/effects/Glassbr1.ogg', 100, 1) qdel(src) else - used = 0 + used = FALSE to_chat(user, "The demons do not respond to your summon. Perhaps you should try again later.") -/obj/item/antag_spawner/slaughter_demon/spawn_antag(var/client/C, var/turf/T, var/type = "", mob/user as mob) +/obj/item/antag_spawner/slaughter_demon/spawn_antag(client/C, turf/T, type = "", mob/user) var /obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter(T) var/mob/living/simple_animal/slaughter/S = new demon_type(holder) S.vialspawned = TRUE diff --git a/code/datums/antagonists/antag_team.dm b/code/datums/antagonists/antag_team.dm new file mode 100644 index 00000000000..9dcec5894ee --- /dev/null +++ b/code/datums/antagonists/antag_team.dm @@ -0,0 +1,24 @@ +//A barebones antagonist team. +/datum/team + var/list/datum/mind/members = list() + var/name = "team" + var/member_name = "member" + var/list/objectives = list() //common objectives, these won't be added or removed automatically, subtypes handle this, this is here for bookkeeping purposes. + +/datum/team/New(starting_members) + . = ..() + if(starting_members) + if(islist(starting_members)) + for(var/datum/mind/M in starting_members) + add_member(M) + else + add_member(starting_members) + +/datum/team/proc/is_solo() + return members.len == 1 + +/datum/team/proc/add_member(datum/mind/new_member) + members |= new_member + +/datum/team/proc/remove_member(datum/mind/member) + members -= member diff --git a/code/datums/computerfiles.dm b/code/datums/computerfiles.dm deleted file mode 100644 index 14cd7e38612..00000000000 --- a/code/datums/computerfiles.dm +++ /dev/null @@ -1,7 +0,0 @@ -datum - computer - var/name - folder - var/list/datum/computer/contents = list() - - file \ No newline at end of file diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 96c663fb703..1a22131d55f 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -255,7 +255,7 @@ var/record_id_num = 1001 if(PDA_Manifest.len) PDA_Manifest.Cut() - if(H.mind && (H.mind.assigned_role != "MODE")) + if(H.mind && (H.mind.assigned_role != H.mind.special_role)) var/assignment if(H.mind.role_alt_title) assignment = H.mind.role_alt_title diff --git a/code/datums/diseases/berserker.dm b/code/datums/diseases/berserker.dm index 646d64b78f2..3efb4d9e06a 100644 --- a/code/datums/diseases/berserker.dm +++ b/code/datums/diseases/berserker.dm @@ -48,8 +48,8 @@ var/damage = rand(1, 5) if(prob(80)) playsound(affected_mob.loc, "punch", 25, 1, -1) - affected_mob.visible_message("[affected_mob] hits [M] with their thrashing!") + affected_mob.visible_message("[affected_mob] hits [M] with [affected_mob.p_their()] thrashing!") M.adjustBruteLoss(damage) else playsound(affected_mob.loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) - affected_mob.visible_message("[affected_mob] fails to hit [M] with their thrashing!") \ No newline at end of file + affected_mob.visible_message("[affected_mob] fails to hit [M] with [affected_mob.p_their()] thrashing!") \ No newline at end of file diff --git a/code/datums/mind.dm b/code/datums/mind.dm index edf9792a3d4..5094ff4e8d7 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -38,8 +38,8 @@ var/memory - var/assigned_role - var/special_role + var/assigned_role //assigned role is what job you're assigned to when you join the station. + var/special_role //special roles are typically reserved for antags or roles like ERT. If you want to avoid a character being automatically announced by the AI, on arrival (becuase they're an off station character or something); ensure that special_role and assigned_role are equal. var/list/restricted_roles = list() var/list/spell_list = list() // Wizard mode & "Give Spell" badmin button. @@ -54,6 +54,7 @@ var/has_been_rev = 0//Tracks if this mind has been a rev or not var/miming = 0 // Mime's vow of silence + var/list/antag_datums var/speech_span // What span any body this mind has talks in. var/datum/faction/faction //associated faction var/datum/changeling/changeling //changeling holder @@ -72,17 +73,29 @@ var/brigged_since = -1 var/suicided = FALSE - New(var/key) - src.key = key - //put this here for easier tracking ingame var/datum/money_account/initial_account //zealot_master is a reference to the mob that converted them into a zealot (for ease of investigation and such) var/mob/living/carbon/human/zealot_master = null +/datum/mind/New(var/key) + src.key = key + + +/datum/mind/Destroy() + ticker.minds -= src + if(islist(antag_datums)) + for(var/i in antag_datums) + var/datum/antagonist/antag_datum = i + if(antag_datum.delete_on_mind_deletion) + qdel(i) + antag_datums = null + return ..() + /datum/mind/proc/transfer_to(mob/living/new_character) var/datum/atom_hud/antag/hud_to_transfer = antag_hud //we need this because leave_hud() will clear this list + var/mob/living/old_current = current if(!istype(new_character)) log_runtime(EXCEPTION("transfer_to(): Some idiot has tried to transfer_to() a non mob/living mob."), src) if(current) //remove ourself from our old body's mind variable @@ -95,6 +108,9 @@ new_character.mind.current = null current = new_character //link ourself to our new body new_character.mind = src //and link our new body to ourself + for(var/a in antag_datums) //Makes sure all antag datums effects are applied in the new body + var/datum/antagonist/A = a + A.on_body_transfer(old_current, current) transfer_antag_huds(hud_to_transfer) //inherit the antag HUD transfer_actions(new_character) @@ -161,7 +177,7 @@ if(ismindshielded(H)) text = "Mindshield Implant:Remove|Implanted
" else - text = "Mindshield Implant:No Implant|Implant him!
" + text = "Mindshield Implant:No Implant|Implant [H.p_them()]!
" sections["implant"] = text /** REVOLUTION ***/ text = "revolution" @@ -525,8 +541,8 @@ new_objective = new objective_path new_objective.owner = src new_objective:target = new_target:mind - //Will display as special role if the target is set as MODE. Ninjas/commandos/nuke ops. - new_objective.explanation_text = "[objective_type] [new_target:real_name], the [new_target:mind:assigned_role=="MODE" ? (new_target:mind:special_role) : (new_target:mind:assigned_role)]." + //Will display as special role if assigned mode is equal to special role.. Ninjas/commandos/nuke ops. + new_objective.explanation_text = "[objective_type] [new_target:real_name], the [new_target:mind:assigned_role == new_target:mind:special_role ? (new_target:mind:special_role) : (new_target:mind:assigned_role)]." if("destroy") var/list/possible_targets = active_ais(1) @@ -614,7 +630,7 @@ new_objective = new /datum/objective/escape/escape_with_identity new_objective.owner = src new_objective.target = new_target - new_objective.explanation_text = "Escape on the shuttle or an escape pod with the identity of [targ.current.real_name], the [targ.assigned_role] while wearing their identification card." + new_objective.explanation_text = "Escape on the shuttle or an escape pod with the identity of [targ.current.real_name], the [targ.assigned_role] while wearing [targ.current.p_their()] identification card." if("custom") var/expl = sanitize(copytext(input("Custom objective:", "Objective", objective ? objective.explanation_text : "") as text|null,1,MAX_MESSAGE_LEN)) if(!expl) @@ -726,7 +742,7 @@ if(src in ticker.mode.revolutionaries) ticker.mode.revolutionaries -= src ticker.mode.update_rev_icons_removed(src) - to_chat(current, "\red You have proven your devotion to revolution! You are a head revolutionary now!") + to_chat(current, "You have proven your devotion to revolution! You are a head revolutionary now!") else if(!(src in ticker.mode.head_revolutionaries)) to_chat(current, "You are a member of the revolutionaries' leadership now!") else @@ -1212,6 +1228,60 @@ edit_memory() + +// Datum antag mind procs +/datum/mind/proc/add_antag_datum(datum_type_or_instance, team) + if(!datum_type_or_instance) + return + var/datum/antagonist/A + if(!ispath(datum_type_or_instance)) + A = datum_type_or_instance + if(!istype(A)) + return + else + A = new datum_type_or_instance() + //Choose snowflake variation if antagonist handles it + var/datum/antagonist/S = A.specialization(src) + if(S && S != A) + qdel(A) + A = S + if(!A.can_be_owned(src)) + qdel(A) + return + A.owner = src + LAZYADD(antag_datums, A) + A.create_team(team) + var/datum/team/antag_team = A.get_team() + if(antag_team) + antag_team.add_member(src) + A.on_gain() + return A + +/datum/mind/proc/remove_antag_datum(datum_type) + if(!datum_type) + return + var/datum/antagonist/A = has_antag_datum(datum_type) + if(A) + A.on_removal() + return TRUE + + +/datum/mind/proc/remove_all_antag_datums() //For the Lazy amongst us. + for(var/a in antag_datums) + var/datum/antagonist/A = a + A.on_removal() + +/datum/mind/proc/has_antag_datum(datum_type, check_subtypes = TRUE) + if(!datum_type) + return + . = FALSE + for(var/a in antag_datums) + var/datum/antagonist/A = a + if(check_subtypes && istype(A, datum_type)) + return A + else if(A.type == datum_type) + return A + /datum/mind/proc/find_syndicate_uplink() var/list/L = current.get_contents() for(var/obj/item/I in L) @@ -1242,7 +1312,7 @@ else current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]" special_role = SPECIAL_ROLE_NUKEOPS - assigned_role = "MODE" + assigned_role = SPECIAL_ROLE_NUKEOPS to_chat(current, "You are a [syndicate_name()] agent!") ticker.mode.forge_syndicate_objectives(src) ticker.mode.greet_syndicate(src) @@ -1277,7 +1347,7 @@ if(!(src in ticker.mode.wizards)) ticker.mode.wizards += src special_role = SPECIAL_ROLE_WIZARD - assigned_role = "MODE" + assigned_role = SPECIAL_ROLE_WIZARD //ticker.mode.learn_basic_spells(current) if(!wizardstart.len) current.loc = pick(latejoin) @@ -1479,11 +1549,11 @@ ticker.mode.implanter[ref] = implanters ticker.mode.traitors += src special_role = "traitor" - to_chat(current, "You're now a loyal zealot of [missionary.name]! You now must lay down your life to protect them and assist in their goals at any cost.") + to_chat(current, "You're now a loyal zealot of [missionary.name]! You now must lay down your life to protect [missionary.p_them()] and assist in [missionary.p_their()] goals at any cost.") var/datum/objective/protect/mindslave/MS = new MS.owner = src MS.target = missionary.mind - MS.explanation_text = "Obey every order from and protect [missionary.real_name], the [missionary.mind.assigned_role=="MODE" ? (missionary.mind.special_role) : (missionary.mind.assigned_role)]." + MS.explanation_text = "Obey every order from and protect [missionary.real_name], the [missionary.mind.assigned_role == missionary.mind.special_role ? (missionary.mind.special_role) : (missionary.mind.assigned_role)]." objectives += MS for(var/datum/objective/objective in objectives) to_chat(current, "Objective #1: [objective.explanation_text]") diff --git a/code/datums/modules.dm b/code/datums/modules.dm deleted file mode 100644 index d01bded3254..00000000000 --- a/code/datums/modules.dm +++ /dev/null @@ -1,63 +0,0 @@ -// module datum. -// this is per-object instance, and shows the condition of the modules in the object -// actual modules needed is referenced through modulestypes and the object type - -/datum/module - var/status // bits set if working, 0 if broken - var/installed // bits set if installed, 0 if missing - -// moduletypes datum -// this is per-object type, and shows the modules needed for a type of object - -/datum/moduletypes - var/list/modcount = list() // assoc list of the count of modules for a type - - -var/list/modules = list( // global associative list -"/obj/machinery/power/apc" = "card_reader,power_control,id_auth,cell_power,cell_charge") - - -/datum/module/New(var/obj/O) - - var/type = O.type // the type of the creating object - - var/mneed = mods.inmodlist(type) // find if this type has modules defined - - if(!mneed) // not found in module list? - qdel(src) // delete self, thus ending proc - return - - var/needed = mods.getbitmask(type) // get a bitmask for the number of modules in this object - status = needed - installed = needed - -/datum/moduletypes/proc/addmod(var/type, var/modtextlist) - modules += type // index by type text - modules[type] = modtextlist - -/datum/moduletypes/proc/inmodlist(var/type) - return ("[type]" in modules) - -/datum/moduletypes/proc/getbitmask(var/type) - var/count = modcount["[type]"] - if(count) - return 2**count-1 - - var/modtext = modules["[type]"] - var/num = 1 - var/pos = 1 - - while(1) - pos = findtext(modtext, ",", pos, 0) - if(!pos) - break - else - pos++ - num++ - - modcount += "[type]" - modcount["[type]"] = num - - return 2**num-1 - - diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm index 74cc6235bb6..9e4bba0515c 100644 --- a/code/datums/outfits/outfit_admin.dm +++ b/code/datums/outfits/outfit_admin.dm @@ -613,15 +613,16 @@ uniform = /obj/item/clothing/under/solgov/rep back = /obj/item/storage/backpack/satchel + glasses = /obj/item/clothing/glasses/hud/security/night gloves = /obj/item/clothing/gloves/color/white shoes = /obj/item/clothing/shoes/centcom - l_ear = /obj/item/radio/headset + l_ear = /obj/item/radio/headset/ert id = /obj/item/card/id/silver r_pocket = /obj/item/lighter/zippo/blue l_pocket = /obj/item/storage/fancy/cigarettes/cigpack_robustgold pda = /obj/item/pda backpack_contents = list( - /obj/item/storage/box/survival = 1, + /obj/item/storage/box/responseteam = 1, /obj/item/implanter/dust = 1, /obj/item/implanter/death_alarm = 1, ) @@ -633,25 +634,33 @@ var/obj/item/card/id/I = H.wear_id if(istype(I)) - apply_to_card(I, H, get_centcom_access("VIP Guest"), "Solar Federation Representative") + apply_to_card(I, H, get_all_accesses(), name, "lifetimeid") /datum/outfit/admin/solgov name = "Solar Federation Marine" uniform = /obj/item/clothing/under/solgov + suit = /obj/item/clothing/suit/armor/bulletproof back = /obj/item/storage/backpack/security + belt = /obj/item/storage/belt/military/assault head = /obj/item/clothing/head/soft/solgov + glasses = /obj/item/clothing/glasses/hud/security/night gloves = /obj/item/clothing/gloves/combat shoes = /obj/item/clothing/shoes/combat + l_ear = /obj/item/radio/headset/ert id = /obj/item/card/id l_hand = /obj/item/gun/projectile/automatic/ar + r_pocket = /obj/item/flashlight/seclite + pda = /obj/item/pda backpack_contents = list( - /obj/item/storage/box/survival = 1, - /obj/item/kitchen/knife/combat = 1, + /obj/item/storage/box/responseteam = 1, /obj/item/ammo_box/magazine/m556 = 3, - /obj/item/clothing/shoes/magboots = 1 + /obj/item/clothing/shoes/magboots = 1, + /obj/item/gun/projectile/automatic/pistol/m1911 = 1, + /obj/item/ammo_box/magazine/m45 = 2 ) + var/is_tsf_lieutenant = FALSE /datum/outfit/admin/solgov/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) @@ -659,9 +668,14 @@ if(visualsOnly) return + if(is_tsf_lieutenant) + H.real_name = "Lieutenant [pick(last_names)]" + else + H.real_name = "[pick("Corporal", "Sergeant", "Staff Sergeant", "Sergeant First Class", "Master Sergeant", "Sergeant Major")] [pick(last_names)]" + H.name = H.real_name var/obj/item/card/id/I = H.wear_id if(istype(I)) - apply_to_card(I, H, get_centcom_access("VIP Guest"), name) + apply_to_card(I, H, get_all_accesses(), name, "lifetimeid") /datum/outfit/admin/solgov/lieutenant name = "Solar Federation Lieutenant" @@ -670,14 +684,16 @@ head = /obj/item/clothing/head/soft/solgov/command back = /obj/item/storage/backpack/satchel l_hand = null - belt = /obj/item/gun/projectile/automatic/pistol/deagle + l_pocket = /obj/item/pinpointer/advpinpointer backpack_contents = list( - /obj/item/storage/box/survival = 1, - /obj/item/kitchen/knife/combat = 1, + /obj/item/storage/box/responseteam = 1, /obj/item/melee/classic_baton/telescopic = 1, - /obj/item/ammo_box/magazine/m50 = 2, - /obj/item/clothing/shoes/magboots/advance = 1 + /obj/item/clothing/shoes/magboots/advance = 1, + /obj/item/gun/projectile/automatic/pistol/deagle = 1, + /obj/item/ammo_box/magazine/m50 = 2 ) + is_tsf_lieutenant = TRUE + /datum/outfit/admin/chrono name = "Chrono Legionnaire" diff --git a/code/datums/spells/emplosion.dm b/code/datums/spells/emplosion.dm index 1ba430ad27e..b2f0a228282 100644 --- a/code/datums/spells/emplosion.dm +++ b/code/datums/spells/emplosion.dm @@ -10,6 +10,6 @@ /obj/effect/proc_holder/spell/targeted/emplosion/cast(list/targets, mob/user = usr) for(var/mob/living/target in targets) - empulse(target.loc, emp_heavy, emp_light) + empulse(target.loc, emp_heavy, emp_light, 1) - return \ No newline at end of file + return diff --git a/code/datums/spells/mime.dm b/code/datums/spells/mime.dm index 296521405a0..19b30674bf6 100644 --- a/code/datums/spells/mime.dm +++ b/code/datums/spells/mime.dm @@ -21,7 +21,7 @@ if(!usr.mind.miming) to_chat(usr, "You must dedicate yourself to silence first.") return - invocation = "[usr.real_name] looks as if a wall is in front of them." + invocation = "[usr.real_name] looks as if a wall is in front of [usr.p_them()]." else invocation_type ="none" ..() diff --git a/code/datums/spells/mind_transfer.dm b/code/datums/spells/mind_transfer.dm index 2a8408dfe4a..d6a48d25c68 100644 --- a/code/datums/spells/mind_transfer.dm +++ b/code/datums/spells/mind_transfer.dm @@ -32,7 +32,7 @@ Also, you never added distance checking after target is selected. I've went ahea return if(!target.key || !target.mind) - to_chat(user, "They appear to be catatonic. Not even magic can affect their vacant mind.") + to_chat(user, "[target.p_they(TRUE)] appear[target.p_s()] to be catatonic. Not even magic can affect [target.p_their()] vacant mind.") return if(user.suiciding) diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 9a5bf86665c..956c19e055b 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -97,6 +97,7 @@ var/list/uplink_items = list() if(I) if(ishuman(user)) var/mob/living/carbon/human/A = user + log_game("[key_name(user)] purchased [I.name]") A.put_in_any_hand_if_possible(I) if(istype(I,/obj/item/storage/box/) && I.contents.len>0) @@ -1336,6 +1337,13 @@ var/list/uplink_items = list() item = /obj/item/storage/fancy/cigarettes/cigpack_syndicate cost = 2 +/datum/uplink_item/badass/rapid + name = "Gloves of the North Star" + desc = "These gloves let the user punch people very fast. Does not improve weapon attack speed." + reference = "RPGD" + item = /obj/item/clothing/gloves/fingerless/rapid + cost = 8 + /datum/uplink_item/badass/bundle name = "Syndicate Bundle" desc = "Syndicate Bundles are specialised groups of items that arrive in a plain box. These items are collectively worth more than 20 telecrystals, but you do not know which specialisation you will receive." @@ -1418,6 +1426,7 @@ var/list/uplink_items = list() for(var/category in temp_uplink_list) buyable_items += temp_uplink_list[category] var/list/bought_items = list() + var/list/itemlog = list() U.uses -= cost U.used_TC = 20 var/remaining_TC = 50 @@ -1433,8 +1442,10 @@ var/list/uplink_items = list() continue bought_items += I.item remaining_TC -= I.cost + itemlog += I.name // To make the name more readable for the log compared to just i.item U.purchase_log += "[bicon(C)]" for(var/item in bought_items) new item(C) U.purchase_log += "[bicon(item)]" + log_game("[key_name(usr)] purchased a surplus crate with [jointext(itemlog, ", ")]") diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 83880039a73..8a9a108c7b3 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -42,10 +42,16 @@ power_equip = 0 //rastaf0 power_environ = 0 //rastaf0 - power_change() // all machines set to current power level, also updates lighting icon - blend_mode = BLEND_MULTIPLY // Putting this in the constructor so that it stops the icons being screwed up in the map editor. +/area/Initialize() + ..() + return INITIALIZE_HINT_LATELOAD + +/area/LateInitialize() + . = ..() + power_change() // all machines set to current power level, also updates lighting icon + /area/proc/get_cameras() var/list/cameras = list() for(var/obj/machinery/camera/C in src) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 1e931690333..19af319aa20 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -42,6 +42,62 @@ var/admin_spawned = 0 //was this spawned by an admin? used for stat tracking stuff. + var/initialized = FALSE + +/atom/New(loc, ...) + if(use_preloader && (src.type == _preloader.target_path))//in case the instanciated atom is creating other atoms in New() + _preloader.load(src) + . = ..() + attempt_init(...) + +// This is distinct from /tg/ because of our space management system +// This is overriden in /atom/movable and the parent isn't called if the SMS wants to deal with it's init +/atom/proc/attempt_init(loc, ...) + var/do_initialize = SSatoms.initialized + if(do_initialize != INITIALIZATION_INSSATOMS) + args[1] = do_initialize == INITIALIZATION_INNEW_MAPLOAD + if(SSatoms.InitAtom(src, args)) + // we were deleted + return + + +//Called after New if the map is being loaded. mapload = TRUE +//Called from base of New if the map is not being loaded. mapload = FALSE +//This base must be called or derivatives must set initialized to TRUE +//must not sleep +//Other parameters are passed from New (excluding loc), this does not happen if mapload is TRUE +//Must return an Initialize hint. Defined in __DEFINES/subsystems.dm + +//Note: the following functions don't call the base for optimization and must copypasta: +// /turf/Initialize +// /turf/open/space/Initialize + +/atom/proc/Initialize(mapload, ...) + if(initialized) + stack_trace("Warning: [src]([type]) initialized multiple times!") + initialized = TRUE + + if(light_power && light_range) + update_light() + + if(opacity && isturf(loc)) + var/turf/T = loc + T.has_opaque_atom = TRUE // No need to recalculate it in this case, it's guranteed to be on afterwards anyways. + + ComponentInitialize() + + return INITIALIZE_HINT_NORMAL + + +//called if Initialize returns INITIALIZE_HINT_LATELOAD +/atom/proc/LateInitialize() + return + +// Put your AddComponent() calls here +/atom/proc/ComponentInitialize() + return + + /atom/proc/onCentcom() var/turf/T = get_turf(src) if(!T) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 55af5fae17b..7ab561f0814 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -24,16 +24,19 @@ var/area/areaMaster - var/auto_init = 1 - /atom/movable/New() . = ..() areaMaster = get_area_master(src) - // If you're wondering what goofery this is, this is for things that need the environment - // around them set up - like `air_update_turf` and the like - if((ticker && ticker.current_state >= GAME_STATE_SETTING_UP)) - attempt_init() +/atom/movable/attempt_init() + if(ticker && ticker.current_state >= GAME_STATE_SETTING_UP) + var/turf/T = get_turf(src) + if(T && space_manager.is_zlevel_dirty(T.z)) + space_manager.postpone_init(T.z, src) + return + . = ..() + + /atom/movable/Destroy() if(loc) @@ -53,19 +56,6 @@ pulledby = null return ..() -// used to provide a good interface for the init delay system to step in -// and we don't need to call `get_turf` until the game's started -// at which point object creations are a fair toss more seldom -/atom/movable/proc/attempt_init() - var/turf/T = get_turf(src) - if(T && space_manager.is_zlevel_dirty(T.z)) - space_manager.postpone_init(T.z, src) - else if(auto_init) - initialize() - -/atom/movable/proc/initialize() - return - // Used in shuttle movement and AI eye stuff. // Primarily used to notify objects being moved by a shuttle/bluespace fuckup. /atom/movable/proc/setLoc(var/T, var/teleported=0) @@ -373,3 +363,70 @@ target.fingerprints += fingerprints target.fingerprintshidden += fingerprintshidden target.fingerprintslast = fingerprintslast + +/atom/movable/proc/do_attack_animation(atom/A, visual_effect_icon, obj/item/used_item, no_effect, end_pixel_y) + if(!no_effect && (visual_effect_icon || used_item)) + do_item_attack_animation(A, visual_effect_icon, used_item) + + if(A == src) + return //don't do an animation if attacking self + var/pixel_x_diff = 0 + var/pixel_y_diff = 0 + var/final_pixel_y = initial(pixel_y) + if(end_pixel_y) + final_pixel_y = end_pixel_y + + var/direction = get_dir(src, A) + if(direction & NORTH) + pixel_y_diff = 8 + else if(direction & SOUTH) + pixel_y_diff = -8 + + if(direction & EAST) + pixel_x_diff = 8 + else if(direction & WEST) + pixel_x_diff = -8 + + animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, time = 2) + animate(pixel_x = initial(pixel_x), pixel_y = final_pixel_y, time = 2) + +/atom/movable/proc/do_item_attack_animation(atom/A, visual_effect_icon, obj/item/used_item) + var/image/I + if(visual_effect_icon) + I = image('icons/effects/effects.dmi', A, visual_effect_icon, A.layer + 0.1) + else if(used_item) + I = image(used_item.icon, A, used_item.icon_state, A.layer + 0.1) + + // Scale the icon. + I.transform *= 0.75 + // The icon should not rotate. + I.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA + + // Set the direction of the icon animation. + var/direction = get_dir(src, A) + if(direction & NORTH) + I.pixel_y = -16 + else if(direction & SOUTH) + I.pixel_y = 16 + + if(direction & EAST) + I.pixel_x = -16 + else if(direction & WEST) + I.pixel_x = 16 + + if(!direction) // Attacked self?! + I.pixel_z = 16 + + if(!I) + return + + // Who can see the attack? + var/list/viewing = list() + for(var/mob/M in viewers(A)) + if(M.client && M.client.prefs.show_ghostitem_attack) + viewing |= M.client + + flick_overlay(I, viewing, 5) // 5 ticks/half a second + + // And animate the attack! + animate(I, alpha = 175, pixel_x = 0, pixel_y = 0, pixel_z = 0, time = 3) \ No newline at end of file diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index 99355320491..93d9977b5e8 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -192,7 +192,7 @@ return for(var/mob/living/carbon/slime/M in range(1,L)) if(M.Victim == L) - to_chat(usr, "[L.name] will not fit into the [src] because they have a slime latched onto their head.") + to_chat(usr, "[L.name] will not fit into the [src] because [L.p_they()] [L.p_have()] a slime latched onto [L.p_their()] head.") return if(L == user) visible_message("[user] climbs into the [src].") diff --git a/code/game/dna/genes/goon_powers.dm b/code/game/dna/genes/goon_powers.dm index 6fbc30883ca..8517016e1a9 100644 --- a/code/game/dna/genes/goon_powers.dm +++ b/code/game/dna/genes/goon_powers.dm @@ -318,14 +318,6 @@ var/atom/movable/the_item = targets[1] if(ishuman(the_item)) - //My gender - var/m_his = "his" - if(user.gender == FEMALE) - m_his = "her" - // Their gender - var/t_his = "his" - if(the_item.gender == FEMALE) - t_his = "her" var/mob/living/carbon/human/H = the_item var/obj/item/organ/external/limb = H.get_organ(user.zone_sel.selecting) if(!istype(limb)) @@ -334,15 +326,15 @@ return 0 if(istype(limb,/obj/item/organ/external/head)) // Bullshit, but prevents being unable to clone someone. - to_chat(user, "You try to put \the [limb] in your mouth, but [t_his] ears tickle your throat!") + to_chat(user, "You try to put \the [limb] in your mouth, but [the_item.p_their()] ears tickle your throat!") revert_cast() return 0 if(istype(limb,/obj/item/organ/external/chest)) // Bullshit, but prevents being able to instagib someone. - to_chat(user, "You try to put their [limb] in your mouth, but it's too big to fit!") + to_chat(user, "You try to put [the_item.p_their()] [limb] in your mouth, but it's too big to fit!") revert_cast() return 0 - user.visible_message("[user] begins stuffing [the_item]'s [limb.name] into [m_his] gaping maw!") + user.visible_message("[user] begins stuffing [the_item]'s [limb.name] into [user.p_their()] gaping maw!") var/oldloc = H.loc if(!do_mob(user,H,EAT_MOB_DELAY)) to_chat(user, "You were interrupted before you could eat [the_item]!") @@ -434,7 +426,7 @@ user.flying = prevFlying if(FAT in user.mutations && prob(66)) - user.visible_message("[user.name] crashes due to their heavy weight!") + user.visible_message("[user.name] crashes due to [user.p_their()] heavy weight!") //playsound(user.loc, 'zhit.wav', 50, 1) user.AdjustWeakened(10) user.AdjustStunned(5) @@ -559,10 +551,10 @@ return if(M.stat == 2) - to_chat(user, "[M.name] is dead and cannot have their mind read.") + to_chat(user, "[M.name] is dead and cannot have [M.p_their()] mind read.") return if(M.health < 0) - to_chat(user, "[M.name] is dying, and their thoughts are too scrambled to read.") + to_chat(user, "[M.name] is dying, and [M.p_their()] thoughts are too scrambled to read.") return to_chat(user, "Mind Reading of [M.name]:") @@ -570,8 +562,8 @@ var/pain_condition = M.health / M.maxHealth // lower health means more pain var/list/randomthoughts = list("what to have for lunch","the future","the past","money", - "their hair","what to do next","their job","space","amusing things","sad things", - "annoying things","happy things","something incoherent","something they did wrong") + "[M.p_their()] hair","what to do next","[M.p_their()] job","space","amusing things","sad things", + "annoying things","happy things","something incoherent","something [M.p_they()] did wrong") var/thoughts = "thinking about [pick(randomthoughts)]" if(M.fire_stacks) @@ -592,7 +584,7 @@ to_chat(user, "Condition: [M.name] is suffering severe pain.") else to_chat(user, "Condition: [M.name] is suffering excruciating pain.") - thoughts = "haunted by their own mortality" + thoughts = "haunted by [M.p_their()] own mortality" switch(M.a_intent) if(INTENT_HELP) @@ -655,7 +647,7 @@ action_icon_state = "superfart" /obj/effect/proc_holder/spell/aoe_turf/superfart/invocation(mob/user = usr) - invocation = "[user] hunches down and grits their teeth!" + invocation = "[user] hunches down and grits [user.p_their()] teeth!" invocation_emote_self = "You hunch down and grit your teeth!" ..(user) diff --git a/code/game/dna/genes/vg_powers.dm b/code/game/dna/genes/vg_powers.dm index bfd75f486e0..3e709560a45 100644 --- a/code/game/dna/genes/vg_powers.dm +++ b/code/game/dna/genes/vg_powers.dm @@ -173,7 +173,7 @@ M.update_dna() - M.visible_message("[src] morphs and changes [M.get_visible_gender() == MALE ? "his" : M.get_visible_gender() == FEMALE ? "her" : "their"] appearance!", "You change your appearance!", "Oh, god! What the hell was that? It sounded like flesh getting squished and bone ground into a different shape!") + M.visible_message("[src] morphs and changes [p_their()] appearance!", "You change your appearance!", "Oh, god! What the hell was that? It sounded like flesh getting squished and bone ground into a different shape!") /datum/dna/gene/basic/grant_spell/remotetalk name="Telepathy" diff --git a/code/game/gamemodes/blob/blob.dm b/code/game/gamemodes/blob/blob.dm index 0bcd942b7a0..80bba117a20 100644 --- a/code/game/gamemodes/blob/blob.dm +++ b/code/game/gamemodes/blob/blob.dm @@ -119,7 +119,7 @@ var/list/blob_nodes = list() if(!is_station_level(location.z) || istype(location, /turf/space)) if(!warned) to_chat(C, "You feel ready to burst, but this isn't an appropriate place! You must return to the station!") - message_admins("[key_name_admin(C)] was in space when the blobs burst, and will die if he doesn't return to the station.") + message_admins("[key_name_admin(C)] was in space when the blobs burst, and will die if [C.p_they()] [C.p_do()] not return to the station.") spawn(300) burst_blob(blob, 1) else diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm index c6dc0833afb..bae37c04c2c 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm @@ -62,7 +62,7 @@ factory.spores += src ..() -/mob/living/simple_animal/hostile/blob/blobspore/Life() +/mob/living/simple_animal/hostile/blob/blobspore/Life(seconds, times_fired) if(!is_zombie && isturf(src.loc)) for(var/mob/living/carbon/human/H in oview(src,1)) //Only for corpse right next to/on same tile diff --git a/code/game/gamemodes/blob/blobs/core.dm b/code/game/gamemodes/blob/blobs/core.dm index 9dcb5b7e3eb..0e1fc7daa86 100644 --- a/code/game/gamemodes/blob/blobs/core.dm +++ b/code/game/gamemodes/blob/blobs/core.dm @@ -60,7 +60,7 @@ /obj/structure/blob/core/RegenHealth() return // Don't regen, we handle it in Life() -/obj/structure/blob/core/Life() +/obj/structure/blob/core/Life(seconds, times_fired) if(!overmind) create_overmind() else diff --git a/code/game/gamemodes/blob/blobs/node.dm b/code/game/gamemodes/blob/blobs/node.dm index 232511744ea..19ac320287a 100644 --- a/code/game/gamemodes/blob/blobs/node.dm +++ b/code/game/gamemodes/blob/blobs/node.dm @@ -28,7 +28,7 @@ processing_objects.Remove(src) return ..() -/obj/structure/blob/node/Life() +/obj/structure/blob/node/Life(seconds, times_fired) if(overmind) for(var/i = 1; i < 8; i += i) Pulse(5, i, overmind.blob_reagent_datum.color) diff --git a/code/game/gamemodes/blob/overmind.dm b/code/game/gamemodes/blob/overmind.dm index 5da84fbc460..60ea94befb0 100644 --- a/code/game/gamemodes/blob/overmind.dm +++ b/code/game/gamemodes/blob/overmind.dm @@ -36,7 +36,7 @@ updateallghostimages() ..() -/mob/camera/blob/Life() +/mob/camera/blob/Life(seconds, times_fired) if(!blob_core) qdel(src) ..() diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index a9c5882094d..329408bffce 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -113,7 +113,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" identity_theft.target_real_name = kill_objective.target.current.real_name //Whoops, forgot this. var/mob/living/carbon/human/H = identity_theft.target.current if(can_absorb_species(H.species)) // For species that can't be absorbed - should default to an escape objective - identity_theft.explanation_text = "Escape on the shuttle or an escape pod with the identity of [identity_theft.target_real_name], the [identity_theft.target.assigned_role] while wearing their identification card." + identity_theft.explanation_text = "Escape on the shuttle or an escape pod with the identity of [identity_theft.target_real_name], the [identity_theft.target.assigned_role] while wearing [identity_theft.target.p_their()] identification card." changeling.objectives += identity_theft else qdel(identity_theft) diff --git a/code/game/gamemodes/changeling/powers/absorb.dm b/code/game/gamemodes/changeling/powers/absorb.dm index e9ae34d2cfa..b60cfee4718 100644 --- a/code/game/gamemodes/changeling/powers/absorb.dm +++ b/code/game/gamemodes/changeling/powers/absorb.dm @@ -73,8 +73,8 @@ recent_speech = target.say_log.Copy() if(recent_speech.len) - user.mind.store_memory("Some of [target]'s speech patterns, we should study these to better impersonate them!") - to_chat(user, "Some of [target]'s speech patterns, we should study these to better impersonate them!") + user.mind.store_memory("Some of [target]'s speech patterns. We should study these to better impersonate [target.p_them()]!") + to_chat(user, "Some of [target]'s speech patterns. We should study these to better impersonate [target.p_them()]!") for(var/spoken_memory in recent_speech) user.mind.store_memory("\"[spoken_memory]\"") to_chat(user, "\"[spoken_memory]\"") diff --git a/code/game/gamemodes/changeling/powers/biodegrade.dm b/code/game/gamemodes/changeling/powers/biodegrade.dm index 3103416b9e4..5142734183b 100644 --- a/code/game/gamemodes/changeling/powers/biodegrade.dm +++ b/code/game/gamemodes/changeling/powers/biodegrade.dm @@ -16,7 +16,7 @@ var/obj/O = user.get_item_by_slot(slot_handcuffed) if(!istype(O)) return FALSE - user.visible_message("[user] vomits a glob of acid on \his [O]!", \ + user.visible_message("[user] vomits a glob of acid on [user.p_their()] [O.name]!", \ "We vomit acidic ooze onto our restraints!") addtimer(CALLBACK(src, .proc/dissolve_handcuffs, user, O), 30) used = TRUE @@ -25,7 +25,7 @@ var/obj/item/clothing/suit/S = user.get_item_by_slot(slot_wear_suit) if(!istype(S)) return FALSE - user.visible_message("[user] vomits a glob of acid across the front of \his [S]!", \ + user.visible_message("[user] vomits a glob of acid across the front of [user.p_their()] [S.name]!", \ "We vomit acidic ooze onto our straight jacket!") addtimer(CALLBACK(src, .proc/dissolve_straightjacket, user, S), 30) used = TRUE diff --git a/code/game/gamemodes/changeling/powers/linglink.dm b/code/game/gamemodes/changeling/powers/linglink.dm index 4b59c255128..52de921d7ec 100644 --- a/code/game/gamemodes/changeling/powers/linglink.dm +++ b/code/game/gamemodes/changeling/powers/linglink.dm @@ -47,7 +47,7 @@ to_chat(user, "We stealthily stab [target] with a minor proboscis...") to_chat(target, "You experience a stabbing sensation and your ears begin to ring...") if(3) - to_chat(user, "You mold the [target]'s mind like clay, they can now speak in the hivemind!") + to_chat(user, "You mold the [target]'s mind like clay, [target.p_they()] can now speak in the hivemind!") to_chat(target, "A migraine throbs behind your eyes, you hear yourself screaming - but your mouth has not opened!") for(var/mob/M in mob_list) if(all_languages["Changeling"] in M.languages) diff --git a/code/game/gamemodes/changeling/powers/mutations.dm b/code/game/gamemodes/changeling/powers/mutations.dm index 4e084e8b720..4cf998cf043 100644 --- a/code/game/gamemodes/changeling/powers/mutations.dm +++ b/code/game/gamemodes/changeling/powers/mutations.dm @@ -25,13 +25,13 @@ if(istype(user.l_hand, weapon_type)) //Not the nicest way to do it, but eh qdel(user.l_hand) if(!silent) - user.visible_message("With a sickening crunch, [user] reforms his [weapon_name_simple] into an arm!", "We assimilate the [weapon_name_simple] back into our body.", "With a sickening crunch, [user] reforms [user.p_their()] [weapon_name_simple] into an arm!", "We assimilate the [weapon_name_simple] back into our body.", "With a sickening crunch, [user] reforms his [weapon_name_simple] into an arm!", "We assimilate the [weapon_name_simple] back into our body.", "With a sickening crunch, [user] reforms [user.p_their()] [weapon_name_simple] into an arm!", "We assimilate the [weapon_name_simple] back into our body.", "[H] casts off their [suit_name_simple]!", "We cast off our [suit_name_simple][genetic_damage > 0 ? ", temporarily weakening our genomes." : "."]", "You hear the organic matter ripping and tearing!") + H.visible_message("[H] casts off [H.p_their()] [suit_name_simple]!", "We cast off our [suit_name_simple][genetic_damage > 0 ? ", temporarily weakening our genomes." : "."]", "You hear the organic matter ripping and tearing!") qdel(H.wear_suit) qdel(H.head) H.update_inv_wear_suit() @@ -138,7 +138,7 @@ loc.visible_message("A grotesque blade forms around [loc.name]\'s arm!", "Our arm twists and mutates, transforming it into a deadly blade.", "You hear organic matter ripping and tearing!") /obj/item/melee/arm_blade/dropped(mob/user) - user.visible_message("With a sickening crunch, [user] reforms his blade into an arm!", "We assimilate the blade back into our body.", "With a sickening crunch, [user] reforms [user.p_their()] blade into an arm!", "We assimilate the blade back into our body.", "[user] forces the airlock to open with \his [src]!", "We force the airlock to open.", "You hear a metal screeching sound.") + user.visible_message("[user] forces the airlock to open with [user.p_their()] [name]!", "We force the airlock to open.", "You hear a metal screeching sound.") A.open(2) /***************************************\ @@ -219,7 +219,7 @@ to_chat(user, "The [name] is not ready yet.") /obj/item/gun/magic/tentacle/suicide_act(mob/user) - user.visible_message("[user] coils [src] tightly around \his neck! It looks like \he's trying to commit suicide.") + user.visible_message("[user] coils [src] tightly around [user.p_their()] neck! It looks like [user.p_theyre()] trying to commit suicide.") return (OXYLOSS) /obj/item/ammo_casing/magic/tentacle @@ -278,7 +278,7 @@ C.visible_message("[src] impales [C] with [I]!", "[src] impales you with [I]!") C.apply_damage(I.force, BRUTE, "chest") - do_attack_animation(C) + do_item_attack_animation(C, used_item = I) add_blood(C) playsound(get_turf(src), I.hitsound, 75, 1) @@ -386,7 +386,7 @@ if(remaining_uses < 1) if(ishuman(loc)) var/mob/living/carbon/human/H = loc - H.visible_message("With a sickening crunch, [H] reforms his shield into an arm!", "We assimilate our shield into our body", "With a sickening crunch, [H] reforms [H.p_their()] shield into an arm!", "We assimilate our shield into our body", "[loc.name]\'s flesh rapidly inflates, forming a bloated mass around their body!", "We inflate our flesh, creating a spaceproof suit!", "You hear organic matter ripping and tearing!") + loc.visible_message("[loc.name]\'s flesh rapidly inflates, forming a bloated mass around [loc.p_their()] body!", "We inflate our flesh, creating a spaceproof suit!", "You hear organic matter ripping and tearing!") processing_objects += src /obj/item/clothing/suit/space/changeling/process() @@ -485,4 +485,4 @@ icon_state = "lingarmorhelmet" flags = BLOCKHAIR | NODROP | DROPDEL armor = list(melee = 30, bullet = 30, laser = 40, energy = 20, bomb = 10, bio = 4, rad = 0) - flags_inv = HIDEEARS \ No newline at end of file + flags_inv = HIDEEARS diff --git a/code/game/gamemodes/changeling/powers/swap_form.dm b/code/game/gamemodes/changeling/powers/swap_form.dm index 99eb634a2ff..9015677c70e 100644 --- a/code/game/gamemodes/changeling/powers/swap_form.dm +++ b/code/game/gamemodes/changeling/powers/swap_form.dm @@ -36,7 +36,7 @@ to_chat(user, "The body swap has been interrupted!") return - to_chat(target, "[user] tightens their grip as a painful sensation invades your body.") + to_chat(target, "[user] tightens [user.p_their()] grip as a painful sensation invades your body.") changeling.absorbed_dna -= changeling.find_dna(user.dna) changeling.protected_dna -= changeling.find_dna(user.dna) diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index b12a50bce13..f2e8db26b40 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -203,7 +203,7 @@ var/global/list/all_cults = list() update_cult_icons_removed(cult_mind) if(show_message) for(var/mob/M in viewers(cult_mind.current)) - to_chat(M, "[cult_mind.current] looks like they just reverted to their old faith!") + to_chat(M, "[cult_mind.current] looks like [cult_mind.current.p_they()] just reverted to [cult_mind.current.p_their()] old faith!") /datum/game_mode/proc/update_cult_icons_added(datum/mind/cult_mind) diff --git a/code/game/gamemodes/cult/cult_objectives.dm b/code/game/gamemodes/cult/cult_objectives.dm index 5ddc8ccdf98..34955ed42d4 100644 --- a/code/game/gamemodes/cult/cult_objectives.dm +++ b/code/game/gamemodes/cult/cult_objectives.dm @@ -24,7 +24,7 @@ spilltarget = 100 + rand(0,player_list.len * 3) explanation = "We must prepare this place for [ticker.cultdat.entity_title1]'s coming. Spill blood and gibs over [spilltarget] floor tiles." if("sacrifice") - explanation = "We need to sacrifice [sacrifice_target.name], the [sacrifice_target.assigned_role], for their blood is the key that will lead our master to this realm. You will need 3 cultists around a Sacrifice rune to perform the ritual." + explanation = "We need to sacrifice [sacrifice_target.name], the [sacrifice_target.assigned_role], for [sacrifice_target.p_their()] blood is the key that will lead our master to this realm. You will need 3 cultists around a Sacrifice rune to perform the ritual." for(var/datum/mind/cult_mind in cult) to_chat(cult_mind.current, "Objective #[current_objective]: [explanation]") @@ -81,7 +81,7 @@ spilltarget = 100 + rand(0,player_list.len * 3) explanation = "We must prepare this place for [ticker.cultdat.entity_title1]'s coming. Spread blood and gibs over [spilltarget] of the Station's floor tiles." if("sacrifice") - explanation = "We need to sacrifice [sacrifice_target.name], the [sacrifice_target.assigned_role], for their blood is the key that will lead our master to this realm. You will need 3 cultists around a Sacrifice rune to perform the ritual." + explanation = "We need to sacrifice [sacrifice_target.name], the [sacrifice_target.assigned_role], for [sacrifice_target.p_their()] blood is the key that will lead our master to this realm. You will need 3 cultists around a Sacrifice rune to perform the ritual." for(var/datum/mind/cult_mind in cult) if(cult_mind) diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index 19f9f57e9e7..a16cf76d9f1 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -294,7 +294,7 @@ var/mob/living/carbon/human/H = user var/dam_zone = pick("head", "chest", "groin", "l_arm", "l_hand", "r_arm", "r_hand", "l_leg", "l_foot", "r_leg", "r_foot") var/obj/item/organ/external/affecting = H.get_organ(ran_zone(dam_zone)) - user.visible_message("[user] cuts open their [affecting] and begins writing in their own blood!", "You slice open your [affecting] and begin drawing a sigil of [ticker.cultdat.entity_title3].") + user.visible_message("[user] cuts open [user.p_their()] [affecting] and begins writing in [user.p_their()] own blood!", "You slice open your [affecting] and begin drawing a sigil of [ticker.cultdat.entity_title3].") user.apply_damage(initial(rune_to_scribe.scribe_damage), BRUTE , affecting) if(!do_after(user, initial(rune_to_scribe.scribe_delay)-scribereduct, target = get_turf(user))) for(var/V in shields) @@ -305,7 +305,7 @@ if(locate(/obj/effect/rune) in runeturf) to_chat(user, "There is already a rune here.") return - user.visible_message("[user] creates a strange circle in their own blood.", \ + user.visible_message("[user] creates a strange circle in [user.p_their()] own blood.", \ "You finish drawing the arcane markings of [ticker.cultdat.entity_title3].") for(var/V in shields) var/obj/machinery/shield/S = V diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 2bf4933e108..e014fa07785 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -700,7 +700,7 @@ var/list/teleport_runes = list() return mob_to_revive.revive() //This does remove disabilities and such, but the rune might actually see some use because of it! to_chat(mob_to_revive, "\"PASNAR SAVRAE YAM'TOTH. Arise.\"") - mob_to_revive.visible_message("[mob_to_revive] draws in a huge breath, red light shining from their eyes.", \ + mob_to_revive.visible_message("[mob_to_revive] draws in a huge breath, red light shining from [mob_to_revive.p_their()] eyes.", \ "You awaken suddenly from the void. You're alive!") rune_in_use = 0 @@ -740,7 +740,7 @@ var/list/teleport_runes = list() to_chat(L, "You chant in unison and a colossal burst of energy knocks you backward!") L.Weaken(2) qdel(src) //delete before pulsing because it's a delay reee - empulse(E, 9*invokers.len, 12*invokers.len) // Scales now, from a single room to most of the station depending on # of chanters + empulse(E, 9*invokers.len, 12*invokers.len, 1) // Scales now, from a single room to most of the station depending on # of chanters //Rite of Astral Communion: Separates one's spirit from their body. They will take damage while it is active. /obj/effect/rune/astral @@ -787,11 +787,11 @@ var/list/teleport_runes = list() return affecting.apply_damage(1, BRUTE) if(!(user in T.contents)) - user.visible_message("A spectral tendril wraps around [user] and pulls them back to the rune!") + user.visible_message("A spectral tendril wraps around [user] and pulls [user.p_them()] back to the rune!") Beam(user,icon_state="drainbeam",time=2) user.forceMove(get_turf(src)) //NO ESCAPE :^) if(user.key) - user.visible_message("[user] slowly relaxes, the glow around them dimming.", \ + user.visible_message("[user] slowly relaxes, the glow around [user.p_them()] dimming.", \ "You are re-united with your physical form. [src] releases its hold over you.") user.color = initial(user.color) user.Weaken(3) @@ -833,7 +833,7 @@ var/list/teleport_runes = list() var/mob/living/user = invokers[1] ..() density = !density - user.visible_message("[user] places their hands on [src], and [density ? "the air above it begins to shimmer" : "the shimmer above it fades"].", \ + user.visible_message("[user] places [user.p_their()] hands on [src], and [density ? "the air above it begins to shimmer" : "the shimmer above it fades"].", \ "You channel your life energy into [src], [density ? "preventing" : "allowing"] passage above it.") if(iscarbon(user)) var/mob/living/carbon/C = user diff --git a/code/game/gamemodes/cult/talisman.dm b/code/game/gamemodes/cult/talisman.dm index e909a33410f..8d858c6fade 100644 --- a/code/game/gamemodes/cult/talisman.dm +++ b/code/game/gamemodes/cult/talisman.dm @@ -151,7 +151,7 @@ if(!src || QDELETED(src) || !user || user.l_hand != src && user.r_hand != src || user.incapacitated() || !actual_selected_rune) return ..(user, 0) - user.visible_message("Dust flows from [user]'s hand, and they disappear in a flash of red light!", \ + user.visible_message("Dust flows from [user]'s hand, and [user.p_they()] disappear[user.p_s()] in a flash of red light!", \ "You speak the words of the talisman and find yourself somewhere else!") user.forceMove(get_turf(actual_selected_rune)) return ..() @@ -220,7 +220,7 @@ . = ..() user.visible_message("[user]'s hand flashes a bright blue!", \ "You speak the words of the talisman, emitting an EMP blast.") - empulse(src, 4, 8) + empulse(src, 4, 8, 1) //Rite of Disorientation: Stuns and inhibit speech on a single target for quite some time @@ -419,4 +419,4 @@ /obj/item/restraints/handcuffs/energy/cult/used/dropped(mob/user) user.visible_message("[user]'s shackles shatter in a discharge of dark magic!", \ "Your [src] shatters in a discharge of dark magic!") - . = ..() \ No newline at end of file + . = ..() diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 4a2622c536d..760868e8435 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -107,7 +107,7 @@ tries_left = 5 //reset our tries since we found a new chump //make sure we have chumps before we try misinforming them. if we don't make a note of it. if(!chumps.len) - log_debug("Game mode failed to find ANY chumps. This is likely due to the server being in extreme low-pop with no one set to opposed or skeptical.") + log_debug("Game mode failed to find ANY chumps. This is likely due to the server being in extreme low-pop with no one set to opposed or skeptical.") return 0 //we've got chumps! misinform them! for(var/mob/living/carbon/human/chump in chumps) @@ -490,34 +490,39 @@ proc/display_roundstart_logout_report() M.ghostize() M.key = theghost.key else - message_admins("[M] ([M.key] has been converted into [role_type] with an active antagonist jobban for said role since no ghost has volunteered to take their place.") + message_admins("[M] ([M.key] has been converted into [role_type] with an active antagonist jobban for said role since no ghost has volunteered to take [M.p_their()] place.") to_chat(M, "You have been converted into [role_type] with an active jobban. Any further violations of the rules on your part are likely to result in a permanent ban.") -/datum/game_mode/proc/printplayer(datum/mind/ply, fleecheck) - var/text = "
[ply.key] was [ply.name] the [ply.assigned_role] and" +/proc/printplayer(datum/mind/ply, fleecheck) + var/jobtext = "" + if(ply.assigned_role) + jobtext = " the [ply.assigned_role]" + var/text = "[ply.key] was [ply.name][jobtext] and" if(ply.current) if(ply.current.stat == DEAD) - text += " died" + text += " died" else - text += " survived" - if(fleecheck && !is_station_level(ply.current.z)) - text += " while fleeing the station" + text += " survived" + if(fleecheck) + var/turf/T = get_turf(ply.current) + if(!T || !is_station_level(T.z)) + text += " while fleeing the station" if(ply.current.real_name != ply.name) text += " as [ply.current.real_name]" else - text += " had their body destroyed" + text += " had [ply.p_their()] body destroyed" return text -/datum/game_mode/proc/printobjectives(datum/mind/ply) - var/text = "" +/proc/printobjectives(datum/mind/ply) + var/list/objective_parts = list() var/count = 1 for(var/datum/objective/objective in ply.objectives) if(objective.check_completion()) - text += "
Objective #[count]: [objective.explanation_text] Success!" + objective_parts += "Objective #[count]: [objective.explanation_text] Success!" else - text += "
Objective #[count]: [objective.explanation_text] Fail." + objective_parts += "Objective #[count]: [objective.explanation_text] Fail." count++ - return text + return objective_parts.Join("
") /datum/game_mode/proc/generate_station_goals() var/list/possible = list() diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm index 8058ff6e5c9..0c609c818b4 100644 --- a/code/game/gamemodes/gameticker.dm +++ b/code/game/gamemodes/gameticker.dm @@ -368,7 +368,7 @@ var/round_start_time = 0 if(player && player.mind && player.mind.assigned_role) if(player.mind.assigned_role == "Captain") captainless=0 - if(player.mind.assigned_role != "MODE") + if(player.mind.assigned_role != player.mind.special_role) job_master.EquipRank(player, player.mind.assigned_role, 0) EquipCustomItems(player) if(captainless) diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm index 0693ca9b279..3b908952de7 100644 --- a/code/game/gamemodes/heist/heist.dm +++ b/code/game/gamemodes/heist/heist.dm @@ -51,7 +51,7 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind' raider_num-- for(var/datum/mind/raider in raiders) - raider.assigned_role = "MODE" + raider.assigned_role = SPECIAL_ROLE_RAIDER raider.special_role = SPECIAL_ROLE_RAIDER ..() return 1 diff --git a/code/game/gamemodes/intercept_report.dm b/code/game/gamemodes/intercept_report.dm index 6cb2956d3ee..50b749a62a2 100644 --- a/code/game/gamemodes/intercept_report.dm +++ b/code/game/gamemodes/intercept_report.dm @@ -91,7 +91,7 @@ var/list/dudes = list() for(var/mob/living/carbon/human/man in player_list) if(!man.mind) continue - if(man.mind.assigned_role=="MODE") continue + if(man.mind.assigned_role == man.mind.special_role) continue dudes += man if(dudes.len==0) return null @@ -210,14 +210,14 @@ var/prob_right_job = rand(prob_correct_job_lower, prob_correct_job_higher) if(prob(prob_right_job)) if(correct_person) - if(correct_person:assigned_role=="MODE") + if(correct_person:assigned_role == correct_person:special_role) changeling_job = pick(joblist) else changeling_job = correct_person:assigned_role else changeling_job = pick(joblist) if(prob(prob_right_dude) && ticker.mode == "changeling") - if(correct_person:assigned_role=="MODE") + if(correct_person:assigned_role == correct_person:special_role) changeling_name = correct_person:current else changeling_name = src.pick_mob() diff --git a/code/game/gamemodes/miniantags/abduction/abduction.dm b/code/game/gamemodes/miniantags/abduction/abduction.dm index b54b18335ef..1c6dc7d3022 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction.dm @@ -74,11 +74,11 @@ agent = preset_agent - scientist.assigned_role = "MODE" + scientist.assigned_role = SPECIAL_ROLE_ABDUCTOR_SCIENTIST scientist.special_role = SPECIAL_ROLE_ABDUCTOR_SCIENTIST log_game("[key_name(scientist)] has been selected as an abductor team [team_number] scientist.") - agent.assigned_role = "MODE" + agent.assigned_role = SPECIAL_ROLE_ABDUCTOR_AGENT agent.special_role = SPECIAL_ROLE_ABDUCTOR_AGENT log_game("[key_name(agent)] has been selected as an abductor team [team_number] agent.") diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm index 0b1962b1717..9a43df56926 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm @@ -176,7 +176,7 @@ if(ishuman(target)) if(console!=null) console.AddSnapshot(target) - to_chat(user, "You scan [target] and add them to the database.") + to_chat(user, "You scan [target] and add [target.p_them()] to the database.") /obj/item/abductor/gizmo/proc/mark(atom/target, mob/living/user) if(marked == target) diff --git a/code/game/gamemodes/miniantags/abduction/machinery/console.dm b/code/game/gamemodes/miniantags/abduction/machinery/console.dm index b0b879a30ab..10cd5473279 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/console.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/console.dm @@ -27,7 +27,7 @@ var/obj/machinery/computer/camera_advanced/abductor/camera var/list/datum/icon_snapshot/disguises = list() -/obj/machinery/abductor/console/initialize() +/obj/machinery/abductor/console/Initialize() ..() Link_Abduction_Equipment() diff --git a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm index 588900bb3e8..8682b50fc05 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm @@ -29,7 +29,7 @@ return for(var/mob/living/carbon/slime/M in range(1, target)) if(M.Victim == target) - to_chat(user, "[target] has a slime attached to them, deal with that first.") + to_chat(user, "[target] has a slime attached to [target.p_them()], deal with that first.") return visible_message("[user] puts [target] into the [src].") diff --git a/code/game/gamemodes/miniantags/borer/borer.dm b/code/game/gamemodes/miniantags/borer/borer.dm index 09d8a84539a..11ec158db84 100644 --- a/code/game/gamemodes/miniantags/borer/borer.dm +++ b/code/game/gamemodes/miniantags/borer/borer.dm @@ -244,7 +244,7 @@ to_chat(M, "Borer Communication from [B] ([ghost_follow_link(src, ghost=M)]): [input]") to_chat(src, "[B.truename] says: [input]") -/mob/living/simple_animal/borer/Life() +/mob/living/simple_animal/borer/Life(seconds, times_fired) ..() @@ -325,7 +325,7 @@ to_chat(src, "You cannot infest someone who is already infested!") return - to_chat(src, "You slither up [M] and begin probing at their ear canal...") + to_chat(src, "You slither up [M] and begin probing at [M.p_their()] ear canal...") if(!do_after(src, 50, target = M)) to_chat(src, "As [M] moves away, you are dislodged and fall to the ground.") @@ -500,7 +500,7 @@ to_chat(src, "You cannot dominate someone who is already infested!") return - to_chat(src, "You focus your psychic lance on [M] and freeze their limbs with a wave of terrible dread.") + to_chat(src, "You focus your psychic lance on [M] and freeze [M.p_their()] limbs with a wave of terrible dread.") to_chat(M, "You feel a creeping, horrible sense of dread come over you, freezing your limbs and setting your heart racing.") M.Weaken(3) @@ -531,7 +531,7 @@ to_chat(src, "You decide against leaving your host.") return - to_chat(src, "You begin disconnecting from [host]'s synapses and prodding at their internal ear canal.") + to_chat(src, "You begin disconnecting from [host]'s synapses and prodding at [host.p_their()] internal ear canal.") leaving = TRUE @@ -623,7 +623,7 @@ to_chat(src,"You are feeling far too docile to do that.") return else - to_chat(src, "You plunge your probosci deep into the cortex of the host brain, interfacing directly with their nervous system.") + to_chat(src, "You plunge your probosci deep into the cortex of the host brain, interfacing directly with [host.p_their()] nervous system.") to_chat(host, "You feel a strange shifting sensation behind your eyes as an alien consciousness displaces yours.") var/borer_key = src.key add_attack_logs(src, host, "Assumed control of (borer)") diff --git a/code/game/gamemodes/miniantags/guardian/guardian.dm b/code/game/gamemodes/miniantags/guardian/guardian.dm index 822bfc9ce29..68e8c16c5da 100644 --- a/code/game/gamemodes/miniantags/guardian/guardian.dm +++ b/code/game/gamemodes/miniantags/guardian/guardian.dm @@ -57,7 +57,7 @@ else holder.icon_state = "hudhealthy" -/mob/living/simple_animal/hostile/guardian/Life() //Dies if the summoner dies +/mob/living/simple_animal/hostile/guardian/Life(seconds, times_fired) //Dies if the summoner dies ..() if(summoner) if(summoner.stat == DEAD) @@ -448,6 +448,14 @@ Support:Has two modes. Combat: Medium power attacks and damage resist. Healer: Attacks heal damage, but low damage resist and slow movemen. Can deploy a bluespace beacon and warp targets to it (including you) in either mode.

Explosive: High damage resist and medium power attack. Can turn any object into a bomb, dealing explosive damage to the next person to touch it. The object will return to normal after the trap is triggered.
+
+ Assassin: Medium damage with no damage resistance, can enter stealth which massively increases the damage of the next attack causing it to ignore armour. +
+ Charger: Medium damage and defense, very fast and has a special charge attack which damages a target and knocks items out of their hands. +
+ Lightning: Applies lightning chains to any targets on attack with a link to your summoner, lightning chains will shock anyone nearby. +
+ Protector: You will become leashed to your holoparasite instead of them to you. Has two modes, a medium attack/defense mode and a protection mode which greatly reduces incoming damage to the holoparasite. "} /obj/item/paper/guardian/update_icon() diff --git a/code/game/gamemodes/miniantags/guardian/types/assassin.dm b/code/game/gamemodes/miniantags/guardian/types/assassin.dm index 426824f2e8c..5eb8c1b1cec 100644 --- a/code/game/gamemodes/miniantags/guardian/types/assassin.dm +++ b/code/game/gamemodes/miniantags/guardian/types/assassin.dm @@ -13,7 +13,7 @@ var/obj/screen/alert/canstealthalert var/obj/screen/alert/instealthalert -/mob/living/simple_animal/hostile/guardian/assassin/Life() +/mob/living/simple_animal/hostile/guardian/assassin/Life(seconds, times_fired) . = ..() updatestealthalert() if(loc == summoner && toggle) diff --git a/code/game/gamemodes/miniantags/guardian/types/charger.dm b/code/game/gamemodes/miniantags/guardian/types/charger.dm index abdc349f175..17ed569f256 100644 --- a/code/game/gamemodes/miniantags/guardian/types/charger.dm +++ b/code/game/gamemodes/miniantags/guardian/types/charger.dm @@ -6,7 +6,7 @@ ranged_cooldown_time = 40 speed = -1 damage_transfer = 0.6 - playstyle_string = "As a Charger type you do medium damage, have medium damage resistance, move very fast, and can charge at a location, damaging any target hit and forcing them to drop any items they are holding." + playstyle_string = "As a Charger type you do medium damage, have medium damage resistance, move very fast, and can charge at a location, damaging any target hit and forcing them to drop any items they are holding. (Click a tile to use your charge ability)" magic_fluff_string = "..And draw the Hunter, an alien master of rapid assault." tech_fluff_string = "Boot sequence complete. Charge modules loaded. Holoparasite swarm online." bio_fluff_string = "Your scarab swarm finishes mutating and stirs to life, ready to deal damage." diff --git a/code/game/gamemodes/miniantags/guardian/types/fire.dm b/code/game/gamemodes/miniantags/guardian/types/fire.dm index 2a9dc2d2c8e..61905f942d2 100644 --- a/code/game/gamemodes/miniantags/guardian/types/fire.dm +++ b/code/game/gamemodes/miniantags/guardian/types/fire.dm @@ -13,7 +13,7 @@ bio_fluff_string = "Your scarab swarm finishes mutating and stirs to life, ready to sow havoc at random." var/toggle = FALSE -/mob/living/simple_animal/hostile/guardian/fire/Life() //Dies if the summoner dies +/mob/living/simple_animal/hostile/guardian/fire/Life(seconds, times_fired) //Dies if the summoner dies ..() if(summoner) summoner.ExtinguishMob() diff --git a/code/game/gamemodes/miniantags/guardian/types/healer.dm b/code/game/gamemodes/miniantags/guardian/types/healer.dm index d51e4cefd45..c679beac91a 100644 --- a/code/game/gamemodes/miniantags/guardian/types/healer.dm +++ b/code/game/gamemodes/miniantags/guardian/types/healer.dm @@ -32,7 +32,7 @@ /mob/living/simple_animal/hostile/guardian/healer/New() ..() -/mob/living/simple_animal/hostile/guardian/healer/Life() +/mob/living/simple_animal/hostile/guardian/healer/Life(seconds, times_fired) ..() var/datum/atom_hud/medsensor = huds[DATA_HUD_MEDICAL_ADVANCED] medsensor.add_hud_to(src) diff --git a/code/game/gamemodes/miniantags/guardian/types/protector.dm b/code/game/gamemodes/miniantags/guardian/types/protector.dm index fe8b4897c42..9206b0d1b0b 100644 --- a/code/game/gamemodes/miniantags/guardian/types/protector.dm +++ b/code/game/gamemodes/miniantags/guardian/types/protector.dm @@ -51,7 +51,7 @@ Recall(TRUE) else to_chat(summoner, "You moved out of range, and were pulled back! You can only move [range] meters from [src]!") - summoner.visible_message("[summoner] jumps back to their protector.") + summoner.visible_message("[summoner] jumps back to [summoner.p_their()] protector.") new /obj/effect/temp_visual/guardian/phase/out(get_turf(summoner)) summoner.forceMove(get_turf(src)) new /obj/effect/temp_visual/guardian/phase(get_turf(summoner))//Protector \ No newline at end of file diff --git a/code/game/gamemodes/miniantags/morph/morph_event.dm b/code/game/gamemodes/miniantags/morph/morph_event.dm index d9e26597a2b..ab875832451 100644 --- a/code/game/gamemodes/miniantags/morph/morph_event.dm +++ b/code/game/gamemodes/miniantags/morph/morph_event.dm @@ -19,7 +19,7 @@ return kill() var/mob/living/simple_animal/hostile/morph/S = new /mob/living/simple_animal/hostile/morph(pick(xeno_spawn)) player_mind.transfer_to(S) - player_mind.assigned_role = "Morph" + player_mind.assigned_role = SPECIAL_ROLE_MORPH player_mind.special_role = SPECIAL_ROLE_MORPH ticker.mode.traitors |= player_mind to_chat(S, S.playstyle_string) diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm index 49380c57863..953e6e91762 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant.dm @@ -54,7 +54,7 @@ var/image/ghostimage = null //Visible to ghost with darkness off -/mob/living/simple_animal/revenant/Life() +/mob/living/simple_animal/revenant/Life(seconds, times_fired) ..() if(revealed && essence <= 0) death() @@ -392,7 +392,7 @@ var/datum/mind/player_mind = new /datum/mind(key_of_revenant) player_mind.active = 1 player_mind.transfer_to(R) - player_mind.assigned_role = "revenant" + player_mind.assigned_role = SPECIAL_ROLE_REVENANT player_mind.special_role = SPECIAL_ROLE_REVENANT ticker.mode.traitors |= player_mind message_admins("[key_of_revenant] has been [client_to_revive ? "re":""]made into a revenant by reforming ectoplasm.") diff --git a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm index 32d51b579c4..baea323518e 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm @@ -73,7 +73,7 @@ icon_state = "revenant_draining" reveal(27) stun(27) - target.visible_message("[target] suddenly rises slightly into the air, their skin turning an ashy gray.") + target.visible_message("[target] suddenly rises slightly into the air, [target.p_their()] skin turning an ashy gray.") target.Beam(src,icon_state="drain_life",icon='icons/effects/effects.dmi',time=26) if(do_after(src, 30, 0, target)) //As one cannot prove the existance of ghosts, ghosts cannot prove the existance of the target they were draining. change_essence_amount(essence_drained, 0, target) diff --git a/code/game/gamemodes/miniantags/revenant/revenant_spawn_event.dm b/code/game/gamemodes/miniantags/revenant/revenant_spawn_event.dm index 859f863b03c..a70114d8f5e 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant_spawn_event.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant_spawn_event.dm @@ -43,7 +43,7 @@ return kill() var/mob/living/simple_animal/revenant/revvie = new /mob/living/simple_animal/revenant/(pick(spawn_locs)) player_mind.transfer_to(revvie) - player_mind.assigned_role = "revenant" + player_mind.assigned_role = SPECIAL_ROLE_REVENANT player_mind.special_role = SPECIAL_ROLE_REVENANT ticker.mode.traitors |= player_mind message_admins("[key_of_revenant] has been made into a revenant by an event.") diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index 42827d27f59..6b5705cfa7f 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -82,7 +82,7 @@ to_chat(src, "Objective #[2]: [fluffObjective.explanation_text]") -/mob/living/simple_animal/slaughter/Life() +/mob/living/simple_animal/slaughter/Life(seconds, times_fired) ..() if(boostYou could not locate any sapient heretics for the Slaughter.
") return 0 - to_chat(usr, "You sense a terrified soul at [A]. Show them the error of their ways.") + to_chat(usr, "You sense a terrified soul at [A]. Show [A.p_them()] the error of [A.p_their()] ways.") /mob/living/simple_animal/slaughter/cult/New() ..() @@ -241,7 +241,7 @@ return // Just so people don't accidentally waste it /obj/item/organ/internal/heart/demon/attack_self(mob/living/user) - user.visible_message("[user] raises [src] to their mouth and tears into it with their teeth!", \ + user.visible_message("[user] raises [src] to [user.p_their()] mouth and tears into it with [user.p_their()] teeth!", \ "An unnatural hunger consumes you. You raise [src] to your mouth and devour it!") playsound(user, 'sound/misc/Demon_consume.ogg', 50, 1) for(var/obj/effect/proc_holder/spell/knownspell in user.mind.spell_list) diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index b2f06a7913a..feffadcf9ab 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -49,7 +49,7 @@ proc/issyndicate(mob/living/M as mob) agent_number-- for(var/datum/mind/synd_mind in syndicates) - synd_mind.assigned_role = "MODE" //So they aren't chosen for other jobs. + synd_mind.assigned_role = SPECIAL_ROLE_NUKEOPS //So they aren't chosen for other jobs. synd_mind.special_role = SPECIAL_ROLE_NUKEOPS return 1 diff --git a/code/game/gamemodes/nuclear/nuclear_challenge.dm b/code/game/gamemodes/nuclear/nuclear_challenge.dm index 6bb181b4136..4158deb6380 100644 --- a/code/game/gamemodes/nuclear/nuclear_challenge.dm +++ b/code/game/gamemodes/nuclear/nuclear_challenge.dm @@ -30,7 +30,7 @@ to_chat(user, "On second thought, the element of surprise isn't so bad after all.") return - var/war_declaration = "[user.real_name] has declared his intent to utterly destroy [station_name()] with a nuclear device, and dares the crew to try and stop them." + var/war_declaration = "[user.real_name] has declared [user.p_their()] intent to utterly destroy [station_name()] with a nuclear device, and dares the crew to try and stop them." declaring_war = TRUE var/custom_threat = alert(user, "Do you want to customize your declaration?", "Customize?", "Yes", "No") diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm index 37a2979ae74..e9bea1d8b1d 100644 --- a/code/game/gamemodes/nuclear/pinpointer.dm +++ b/code/game/gamemodes/nuclear/pinpointer.dm @@ -53,7 +53,7 @@ var/turf/T = get_turf(target) var/turf/L = get_turf(src) - if(T.z != L.z) + if(!(T && L) || (T.z != L.z)) icon_state = icon_null else dir = get_dir(L, T) @@ -341,7 +341,7 @@ if(active) active = FALSE icon_state = icon_off - user.visible_message("[user] deactivates their pinpointer.", "You deactivate your pinpointer.") + user.visible_message("[user] deactivates [user.p_their()] pinpointer.", "You deactivate your pinpointer.") return var/list/name_counts = list() @@ -354,7 +354,8 @@ var/name = "Unknown" if(H.wear_id) var/obj/item/card/id/I = H.wear_id.GetID() - name = I.registered_name + if(I) + name = I.registered_name while(name in name_counts) name_counts[name]++ @@ -372,7 +373,7 @@ var/target = names[A] active = TRUE - user.visible_message("[user] activates their pinpointer.", "You activate your pinpointer.") + user.visible_message("[user] activates [user.p_their()] pinpointer.", "You activate your pinpointer.") point_at(target) /obj/item/pinpointer/crew/point_at(atom/target, spawnself = 1) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index c9ad5ce69e4..07395aa0578 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -287,7 +287,7 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu target = pick(possible_targets) if(target && target.current) target_real_name = target.current.real_name - explanation_text = "Escape on the shuttle or an escape pod with the identity of [target_real_name], the [target.assigned_role] while wearing their identification card." + explanation_text = "Escape on the shuttle or an escape pod with the identity of [target_real_name], the [target.assigned_role] while wearing [target.p_their()] identification card." else explanation_text = "Free Objective" @@ -515,7 +515,7 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu var/list/priority_targets = list() for(var/datum/mind/possible_target in ticker.minds) - if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != DEAD) && (possible_target.assigned_role != "MODE")) + if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != DEAD) && (possible_target.assigned_role != possible_target.special_role)) possible_targets += possible_target for(var/role in roles) if(possible_target.assigned_role == role) @@ -528,7 +528,7 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu target = pick(possible_targets) if(target && target.current) - explanation_text = "The Shoal has a need for [target.current.real_name], the [target.assigned_role]. Take them alive." + explanation_text = "The Shoal has a need for [target.current.real_name], the [target.assigned_role]. Take [target.current.p_them()] alive." else explanation_text = "Free Objective" return target diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 4f500825065..089cad71a3a 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -279,7 +279,7 @@ to_chat(M, "The frame beeps contentedly, purging the hostile memory engram from the MMI before initalizing it.") else - to_chat(M, "[rev_mind.current] looks like they just remembered their real allegiance!") + to_chat(M, "[rev_mind.current] looks like [rev_mind.current.p_they()] just remembered [rev_mind.current.p_their()] real allegiance!") ///////////////////////////////////// //Adds the rev hud to a new convert// diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm index ed8603360fe..1d0bb3adf03 100644 --- a/code/game/gamemodes/shadowling/shadowling.dm +++ b/code/game/gamemodes/shadowling/shadowling.dm @@ -188,7 +188,7 @@ Made by Xhuis M.audible_message("[M] lets out a short blip.", \ "You have been turned into a robot! You are no longer a thrall! Though you try, you cannot remember anything about your servitude...") else - M.visible_message("[M] looks like their mind is their own again!", \ + M.visible_message("[M] looks like [M.p_their()] mind is [M.p_their()] own again!", \ "A piercing white light floods your eyes. Your mind is your own again! Though you try, you cannot remember anything about the shadowlings or your time \ under their command...") return 1 diff --git a/code/game/gamemodes/shadowling/shadowling_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm index 06f7bc9440c..6e9d5f7da8c 100644 --- a/code/game/gamemodes/shadowling/shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm @@ -40,9 +40,9 @@ return var/mob/living/carbon/human/M = target user.visible_message("[user]'s eyes flash a blinding red!") - target.visible_message("[target] freezes in place, their eyes glazing over...") + target.visible_message("[target] freezes in place, [target.p_their()] eyes glazing over...") if(in_range(target, user)) - to_chat(target, "Your gaze is forcibly drawn into [user]'s eyes, and you are mesmerized by their heavenly beauty...") + to_chat(target, "Your gaze is forcibly drawn into [user]'s eyes, and you are mesmerized by [user.p_their()] heavenly beauty...") else //Only alludes to the shadowling if the target is close by to_chat(target, "Red lights suddenly dance in your vision, and you are mesmerized by the heavenly lights...") target.Stun(10) @@ -306,7 +306,7 @@ switch(progress) if(1) to_chat(user, "You place your hands to [target]'s head...") - user.visible_message("[user] places their hands onto the sides of [target]'s head!") + user.visible_message("[user] places [user.p_their()] hands onto the sides of [target]'s head!") if(2) to_chat(user, "You begin preparing [target]'s mind as a blank slate...") user.visible_message("[user]'s palms flare a bright red against [target]'s temples!") @@ -315,7 +315,7 @@ sleep(20) if(ismindshielded(target)) to_chat(user, "They have a mindshield implant. You begin to deactivate it - this will take some time.") - user.visible_message("[user] pauses, then dips their head in concentration!") + user.visible_message("[user] pauses, then dips [user.p_their()] head in concentration!") to_chat(target, "Your mindshield implant becomes hot as it comes under attack!") sleep(100) //10 seconds - not spawn() so the enthralling takes longer to_chat(user, "The nanobots composing the mindshield implant have been rendered inert. Now to continue.") @@ -361,7 +361,7 @@ if(!istype(target) || !ishuman(target)) return var/mob/living/carbon/human/H = target - H.visible_message("[H]'s skin suddenly bubbles and shifts around their body!", \ + H.visible_message("[H]'s skin suddenly bubbles and shifts around [H.p_their()] body!", \ "You regenerate your protective armor and cleanse your form of defects.") H.adjustCloneLoss(-target.getCloneLoss()) H.equip_to_slot_or_del(new /obj/item/clothing/under/shadowling(H), slot_w_uniform) @@ -493,7 +493,7 @@ to_chat(M, "You breathe in the black smoke, and your eyes burn horribly!") M.EyeBlind(5) if(prob(25)) - M.visible_message("[M] claws at their eyes!") + M.visible_message("[M] claws at [M.p_their()] eyes!") M.Stun(3) else to_chat(M, "You breathe in the black smoke, and you feel revitalized!") @@ -627,9 +627,9 @@ to_chat(user, "You cannot spare this much energy. There are too many empowered thralls.") charge_counter = charge_max return - user.visible_message("[user] places their hands over [thrallToRevive]'s face, red light shining from beneath.", \ + user.visible_message("[user] places [user.p_their()] hands over [thrallToRevive]'s face, red light shining from beneath.", \ "You place your hands on [thrallToRevive]'s face and begin gathering energy...") - to_chat(thrallToRevive, "[user] places their hands over your face. You feel energy gathering. Stand still...") + to_chat(thrallToRevive, "[user] places [user.p_their()] hands over your face. You feel energy gathering. Stand still...") if(!do_mob(user, thrallToRevive, 80)) to_chat(user, "Your concentration snaps. The flow of energy ebbs.") charge_counter = charge_max @@ -640,7 +640,7 @@ playsound(thrallToRevive, 'sound/machines/defib_zap.ogg', 50, 1) user.Beam(thrallToRevive,icon_state="red_lightning",icon='icons/effects/effects.dmi',time=1) thrallToRevive.Weaken(5) - thrallToRevive.visible_message("[thrallToRevive] collapses, their skin and face distorting!", \ + thrallToRevive.visible_message("[thrallToRevive] collapses, [thrallToRevive.p_their()] skin and face distorting!", \ "AAAAAAAAAAAAAAAAAAAGH-") sleep(20) thrallToRevive.visible_message("[thrallToRevive] slowly rises, no longer recognizable as human.", \ @@ -659,7 +659,7 @@ to_chat(user, "[thrallToRevive] is not dead.") charge_counter = charge_max return - user.visible_message("[user] kneels over [thrallToRevive], placing their hands on \his chest.", \ + user.visible_message("[user] kneels over [thrallToRevive], placing [user.p_their()] hands on [thrallToRevive.p_their()] chest.", \ "You crouch over the body of your thrall and begin gathering energy...") thrallToRevive.notify_ghost_cloning("Your masters are resuscitating you! Re-enter your corpse if you wish to be brought to life.", source = thrallToRevive) if(!do_mob(user, thrallToRevive, 30)) @@ -673,7 +673,7 @@ user.Beam(thrallToRevive,icon_state="red_lightning",icon='icons/effects/effects.dmi',time=1) sleep(10) if(thrallToRevive.revive()) - thrallToRevive.visible_message("[thrallToRevive] heaves in breath, dim red light shining in their eyes.", \ + thrallToRevive.visible_message("[thrallToRevive] heaves in breath, dim red light shining in [thrallToRevive.p_their()] eyes.", \ "You have returned. One of your masters has brought you from the darkness beyond.") thrallToRevive.Weaken(4) thrallToRevive.emote("gasp") @@ -710,7 +710,7 @@ var/mob/living/carbon/human/M = target user.visible_message("[user]'s eyes flash a bright red!", \ "You begin to draw [M]'s life force.") - M.visible_message("[M]'s face falls slack, their jaw slightly distending.", \ + M.visible_message("[M]'s face falls slack, [M.p_their()] jaw slightly distending.", \ "You are suddenly transported... far, far away...") if(!do_after(user, 50, target = M)) to_chat(M, "You are snapped back to reality, your haze dissipating!") @@ -754,7 +754,7 @@ to_chat(user, "Making an ally explode seems unwise.") charge_counter = charge_max return - user.visible_message("[user]'s markings flare as they gesture at [boom]!", \ + user.visible_message("[user]'s markings flare as [user.p_they()] gesture[user.p_s()] at [boom]!", \ "You direct a lance of telekinetic energy at [boom].") sleep(4) if(iscarbon(boom)) @@ -798,7 +798,7 @@ charge_counter = charge_max return - to_chat(user, "You instantly rearrange [target]'s memories, hyptonitizing them into a thrall.") + to_chat(user, "You instantly rearrange [target]'s memories, hyptonitizing [target.p_them()] into a thrall.") to_chat(target, "An agonizing spike of pain drives into your mind, and--") ticker.mode.add_thrall(target.mind) target.mind.special_role = SPECIAL_ROLE_SHADOWLING_THRALL diff --git a/code/game/gamemodes/shadowling/special_shadowling_abilities.dm b/code/game/gamemodes/shadowling/special_shadowling_abilities.dm index 5c05a028df0..4239b5db327 100644 --- a/code/game/gamemodes/shadowling/special_shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/special_shadowling_abilities.dm @@ -43,7 +43,7 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N var/temp_flags = H.status_flags H.status_flags |= GODMODE //Can't die while hatching - H.visible_message("A chrysalis forms around [H], sealing them inside.", \ + H.visible_message("A chrysalis forms around [H], sealing [H.p_them()] inside.", \ "You create your chrysalis and begin to contort within.") sleep(100) @@ -51,7 +51,7 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N "Spines pierce your back. Your claws break apart your fingers. You feel excruciating pain as your true form begins its exit.") sleep(90) - H.visible_message("[H], skin shifting, begins tearing at the walls around them.", \ + H.visible_message("[H], skin shifting, begins tearing at the walls around [H.p_them()].", \ "Your false skin slips away. You begin tearing at the fragile membrane protecting you.") sleep(80) diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index ec8a1643c27..9234043976c 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -346,7 +346,7 @@ // Tell them about people they might want to contact. var/mob/living/carbon/human/M = get_nt_opposed() if(M && M != traitor_mob) - to_chat(traitor_mob, "We have received credible reports that [M.real_name] might be willing to help our cause. If you need assistance, consider contacting them.") + to_chat(traitor_mob, "We have received credible reports that [M.real_name] might be willing to help our cause. If you need assistance, consider contacting [M.p_them()].") traitor_mob.mind.store_memory("Potential Collaborator: [M.real_name]") //let's also inform their contact that they might be called upon, but leave it vague. inform_collab(M) diff --git a/code/game/gamemodes/vampire/vampire.dm b/code/game/gamemodes/vampire/vampire.dm index c2431f17318..ae9b8e3945a 100644 --- a/code/game/gamemodes/vampire/vampire.dm +++ b/code/game/gamemodes/vampire/vampire.dm @@ -280,7 +280,7 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha draining = null return add_attack_logs(owner, H, "vampirebit & is draining their blood.", FALSE) - owner.visible_message("[owner] grabs [H]'s neck harshly and sinks in their fangs!", "You sink your fangs into [H] and begin to drain their blood.", "You hear a soft puncture and a wet sucking noise.") + owner.visible_message("[owner] grabs [H]'s neck harshly and sinks in [owner.p_their()] fangs!", "You sink your fangs into [H] and begin to drain [owner.p_their()] blood.", "You hear a soft puncture and a wet sucking noise.") if(!iscarbon(owner)) H.LAssailant = null else diff --git a/code/game/gamemodes/vampire/vampire_powers.dm b/code/game/gamemodes/vampire/vampire_powers.dm index e9a249d8412..a2e8c2bf70d 100644 --- a/code/game/gamemodes/vampire/vampire_powers.dm +++ b/code/game/gamemodes/vampire/vampire_powers.dm @@ -175,7 +175,7 @@ /obj/effect/proc_holder/spell/vampire/targetted/hypnotise/cast(list/targets, mob/user = usr) for(var/mob/living/target in targets) - user.visible_message("[user]'s eyes flash briefly as he stares into [target]'s eyes") + user.visible_message("[user]'s eyes flash briefly as [user.p_they()] stare[user.p_s()] into [target]'s eyes") if(do_mob(user, target, 50)) if(!affects(target)) to_chat(user, "Your piercing gaze fails to knock out [target].") @@ -345,8 +345,8 @@ ticker.mode.vampire_enthralled.Add(H.mind) ticker.mode.vampire_enthralled[H.mind] = user.mind H.mind.special_role = SPECIAL_ROLE_VAMPIRE_THRALL - to_chat(H, "You have been Enthralled by [user]. Follow their every command.") - to_chat(user, "You have successfully Enthralled [H]. If they refuse to do as you say just adminhelp.") + to_chat(H, "You have been Enthralled by [user]. Follow [user.p_their()] every command.") + to_chat(user, "You have successfully Enthralled [H]. If [H.p_they()] refuse[H.p_s()] to do as you say just adminhelp.") add_attack_logs(user, H, "Vampire-thralled") diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 2e99f0238c5..7c1a3526002 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -56,7 +56,7 @@ new /obj/effect/particle_effect/smoke(H.loc) var/mob/living/carbon/human/M = new/mob/living/carbon/human(H.loc) M.key = C.key - to_chat(M, "You are the [H.real_name]'s apprentice! You are bound by magic contract to follow their orders and help them in accomplishing their goals.") + to_chat(M, "You are the [H.real_name]'s apprentice! You are bound by magic contract to follow [H.p_their()] orders and help [H.p_them()] in accomplishing their goals.") switch(href_list["school"]) if("destruction") M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile(null)) @@ -213,7 +213,7 @@ /obj/item/scrying/attack_self(mob/user as mob) to_chat(user, " You can see...everything!") - visible_message("[user] stares into [src], their eyes glazing over.") + visible_message("[user] stares into [src], [user.p_their()] eyes glazing over.") user.ghostize(1) /////////////////////Multiverse Blade//////////////////// @@ -277,7 +277,7 @@ var/global/list/multiverse = list() var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone hijack_objective.owner = usr.mind usr.mind.objectives += hijack_objective - hijack_objective.explanation_text = "Ensure only [usr.real_name] and their copies are on the shuttle!" + hijack_objective.explanation_text = "Ensure only [usr.real_name] and [usr.p_their()] copies are on the shuttle!" to_chat(usr, "Objective #[1]: [hijack_objective.explanation_text]") ticker.mode.traitors += usr.mind usr.mind.special_role = "[usr.real_name] Prime" @@ -318,7 +318,7 @@ var/global/list/multiverse = list() C.prefs.copy_to(M) M.key = C.key M.mind.name = user.real_name - to_chat(M, "You are an alternate version of [user.real_name] from another universe! Help them accomplish their goals at all costs.") + to_chat(M, "You are an alternate version of [user.real_name] from another universe! Help [user.p_them()] accomplish [user.p_their()] goals at all costs.") M.faction = list("[user.real_name]") if(duplicate_self) M.set_species(user.get_species()) //duplicate the sword user's species. @@ -342,7 +342,7 @@ var/global/list/multiverse = list() var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone hijack_objective.owner = M.mind M.mind.objectives += hijack_objective - hijack_objective.explanation_text = "Ensure only [usr.real_name] and their copies are on the shuttle!" + hijack_objective.explanation_text = "Ensure only [usr.real_name] and [usr.p_their()] copies are on the shuttle!" to_chat(M, "Objective #[1]: [hijack_objective.explanation_text]") M.mind.special_role = SPECIAL_ROLE_MULTIVERSE log_game("[M.key] was made a multiverse traveller with the objective to help [usr.real_name] hijack.") @@ -350,7 +350,7 @@ var/global/list/multiverse = list() var/datum/objective/protect/new_objective = new /datum/objective/protect new_objective.owner = M.mind new_objective.target = usr.mind - new_objective.explanation_text = "Protect [usr.real_name], your copy, and help them defend the innocent from the mobs of multiverse clones." + new_objective.explanation_text = "Protect [usr.real_name], your copy, and help [usr.p_them()] defend the innocent from the mobs of multiverse clones." M.mind.objectives += new_objective to_chat(M, "Objective #[1]: [new_objective.explanation_text]") M.mind.special_role = SPECIAL_ROLE_MULTIVERSE @@ -652,7 +652,7 @@ var/global/list/multiverse = list() equip_skeleton(M) spooky_scaries |= M to_chat(M, "You have been revived by [user.real_name]!") - to_chat(M, "They are your master now, assist them even if it costs you your new life!") + to_chat(M, "[user.p_theyre(TRUE)] your master now, assist them even if it costs you your new life!") desc = "A shard capable of resurrecting humans as skeleton thralls[unlimited ? "." : ", [spooky_scaries.len]/3 active thralls."]" /obj/item/necromantic_stone/proc/check_spooky() diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm index cb303a90932..4bd7f3004d8 100644 --- a/code/game/gamemodes/wizard/soulstone.dm +++ b/code/game/gamemodes/wizard/soulstone.dm @@ -167,9 +167,9 @@ icon_state = "soulstone" name = initial(name) if(iswizard(usr) || usability) - to_chat(A, "You have been released from your prison, but you are still bound to [usr.real_name]'s will. Help them succeed in their goals at all costs.") + to_chat(A, "You have been released from your prison, but you are still bound to [usr.real_name]'s will. Help [usr.p_them()] succeed in [usr.p_their()] goals at all costs.") else if(iscultist(usr)) - to_chat(A, "You have been released from your prison, but you are still bound to the cult's will. Help them succeed in their goals at all costs.") + to_chat(A, "You have been released from your prison, but you are still bound to the cult's will. Help [usr.p_them()] succeed in [usr.p_their()] goals at all costs.") was_used() attack_self(U) @@ -280,7 +280,7 @@ ticker.mode.update_cult_icons_added(Z.mind) qdel(T) to_chat(Z, "You are a Juggernaut. Though slow, your shell can withstand extreme punishment, create shield walls and even deflect energy weapons, and rip apart enemies and walls alike.") - to_chat(Z, "You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.") + to_chat(Z, "You are still bound to serve your creator, follow [U.p_their()] orders and help [U.p_them()] complete [U.p_their()] goals at all costs.") Z.cancel_camera() qdel(C) @@ -296,7 +296,7 @@ ticker.mode.update_cult_icons_added(Z.mind) qdel(T) to_chat(Z, "You are a Wraith. Though relatively fragile, you are fast, deadly, and even able to phase through walls.") - to_chat(Z, "You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.") + to_chat(Z, "You are still bound to serve your creator, follow [U.p_their()] orders and help [U.p_them()] complete [U.p_their()] goals at all costs.") Z.cancel_camera() qdel(C) @@ -312,7 +312,7 @@ ticker.mode.update_cult_icons_added(Z.mind) qdel(T) to_chat(Z, "You are an Artificer. You are incredibly weak and fragile, but you are able to construct fortifications, use magic missile, repair allied constructs (by clicking on them), and most important of all create new constructs (Use your Artificer spell to summon a new construct shell and Summon Soulstone to create a new soulstone).") - to_chat(Z, "You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.") + to_chat(Z, "You are still bound to serve your creator, follow [U.p_their()] orders and help [U.p_them()] complete [U.p_their()] goals at all costs.") Z.cancel_camera() qdel(C) else @@ -332,11 +332,11 @@ ticker.mode.cult+=newstruct.mind ticker.mode.update_cult_icons_added(newstruct.mind) if(stoner && iswizard(stoner)) - to_chat(newstruct, "You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.") + to_chat(newstruct, "You are still bound to serve your creator, follow [stoner.p_their()] orders and help [stoner.p_them()] complete [stoner.p_their()] goals at all costs.") else if(stoner && iscultist(stoner)) - to_chat(newstruct, "You are still bound to serve the cult, follow their orders and help them complete their goals at all costs.") + to_chat(newstruct, "You are still bound to serve the cult, follow [stoner.p_their()] orders and help [stoner.p_them()] complete [stoner.p_their()] goals at all costs.") else - to_chat(newstruct, "You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.") + to_chat(newstruct, "You are still bound to serve your creator, follow [stoner.p_their()] orders and help [stoner.p_them()] complete [stoner.p_their()] goals at all costs.") newstruct.cancel_camera() /obj/item/soulstone/proc/init_shade(mob/living/carbon/human/T, mob/U, vic = 0) @@ -362,11 +362,11 @@ name = "soulstone: Shade of [T.real_name]" icon_state = "soulstone2" if(U && iswizard(U)) - to_chat(S, "Your soul has been captured! You are now bound to [U.real_name]'s will. Help them succeed in their goals at all costs.") + to_chat(S, "Your soul has been captured! You are now bound to [U.real_name]'s will. Help [U.p_them()] succeed in their goals at all costs.") else if(U && iscultist(U)) - to_chat(S, "Your soul has been captured! You are now bound to the cult's will. Help them succeed in their goals at all costs.") + to_chat(S, "Your soul has been captured! You are now bound to the cult's will. Help [U.p_them()] succeed in their goals at all costs.") if(vic && U) - to_chat(U, "Capture successful!: [T.real_name]'s soul has been ripped from their body and stored within the soul stone.") + to_chat(U, "Capture successful!: [T.real_name]'s soul has been ripped from [U.p_their()] body and stored within the soul stone.") /obj/item/soulstone/proc/getCultGhost(mob/living/carbon/human/T, mob/U) var/mob/dead/observer/chosen_ghost diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 9d7ddab9d71..0c380010e6a 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -505,7 +505,7 @@ var/list/datum/spellbook_entry/entries = list() var/list/categories = list() -/obj/item/spellbook/proc/Initialize() +/obj/item/spellbook/proc/initialize() var/entry_types = subtypesof(/datum/spellbook_entry) - /datum/spellbook_entry/item - /datum/spellbook_entry/summon for(var/T in entry_types) var/datum/spellbook_entry/E = new T @@ -518,7 +518,7 @@ /obj/item/spellbook/New() ..() - Initialize() + initialize() /obj/item/spellbook/attackby(obj/item/O as obj, mob/user as mob, params) if(istype(O, /obj/item/contract)) @@ -685,7 +685,7 @@ ..() name += spellname -/obj/item/spellbook/oneuse/Initialize() //No need to init +/obj/item/spellbook/oneuse/initialize() //No need to init return /obj/item/spellbook/oneuse/attack_self(mob/user) diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index 3294f1f3a0b..40c303ea36f 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -27,7 +27,7 @@ wizards += wizard modePlayer += wizard - wizard.assigned_role = "MODE" //So they aren't chosen for other jobs. + wizard.assigned_role = SPECIAL_ROLE_WIZARD //So they aren't chosen for other jobs. wizard.special_role = SPECIAL_ROLE_WIZARD wizard.original = wizard.current if(wizardstart.len == 0) diff --git a/code/game/jobs/job_exp.dm b/code/game/jobs/job_exp.dm index 3c17c6f0107..552654245dd 100644 --- a/code/game/jobs/job_exp.dm +++ b/code/game/jobs/job_exp.dm @@ -1,11 +1,12 @@ // Playtime requirements for special roles (hours) var/global/list/role_playtime_requirements = list( - // CREW-FRIENDLY ROLES + // NT ROLES ROLE_PAI = 0, ROLE_POSIBRAIN = 5, // Same as cyborg job. ROLE_SENTIENT = 5, ROLE_ERT = 10, // High, because they're team-based, and we want ERT to be robust + ROLE_DEATHSQUAD = 10, ROLE_TRADER = 5, ROLE_DRONE = 10, // High, because they're like mini engineering cyborgs that can ignore the AI, ventcrawl, and respawn themselves diff --git a/code/game/jobs/job_objective.dm b/code/game/jobs/job_objective.dm index 8860cdf4931..90bac6d8383 100644 --- a/code/game/jobs/job_objective.dm +++ b/code/game/jobs/job_objective.dm @@ -49,7 +49,7 @@ if(!employee.job_objectives.len)//If the employee had no objectives, don't need to process this. continue - if(!employee.assigned_role=="MODE")//If the employee is a gamemode thing, skip. + if(employee.assigned_role == employee.special_role) //If the character is an offstation character, skip them. continue var/tasks_completed=0 @@ -68,7 +68,7 @@ count++ if(tasks_completed >= 1) - text += "
 [employee.name] did their fucking job!" + text += "
 [employee.name] did [employee.p_their()] fucking job!" feedback_add_details("employee_success","SUCCESS") else feedback_add_details("employee_success","FAIL") diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 7d386ddfb1a..24311a8b12e 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -257,7 +257,7 @@ if(href_list["chemical"]) if(occupant) if(occupant.stat == DEAD) - to_chat(usr, "This person has no life for to preserve anymore. Take them to a department capable of reanimating them.") + to_chat(usr, "This person has no life for to preserve anymore. Take [occupant.p_them()] to a department capable of reanimating them.") else if(occupant.health > min_health || (href_list["chemical"] in emergency_chems)) inject_chemical(usr,href_list["chemical"],text2num(href_list["amount"])) else @@ -327,34 +327,35 @@ return if(istype(G, /obj/item/grab)) + var/obj/item/grab/GG = G if(panel_open) to_chat(user, "Close the maintenance panel first.") return - if(!ismob(G:affecting)) + if(!ismob(GG.affecting)) return if(src.occupant) to_chat(user, "The sleeper is already occupied!") return - for(var/mob/living/carbon/slime/M in range(1,G:affecting)) - if(M.Victim == G:affecting) - to_chat(usr, "[G:affecting.name] will not fit into the sleeper because they have a slime latched onto their head.") + for(var/mob/living/carbon/slime/M in range(1,GG.affecting)) + if(M.Victim == GG.affecting) + to_chat(usr, "[GG.affecting.name] will not fit into the sleeper because [GG.affecting.p_they()] [GG.affecting.p_have()] a slime latched onto [GG.affecting.p_their()] head.") return - visible_message("[user] starts putting [G:affecting:name] into the sleeper.") + visible_message("[user] starts putting [GG.affecting.name] into the sleeper.") - if(do_after(user, 20, target = G:affecting)) + if(do_after(user, 20, target = GG.affecting)) if(src.occupant) to_chat(user, "The sleeper is already occupied!") return - if(!G || !G:affecting) return - var/mob/M = G:affecting + if(!GG || !GG.affecting) return + var/mob/M = GG.affecting M.forceMove(src) src.occupant = M src.icon_state = "[base_icon]" to_chat(M, "You feel cool air surround you. You go numb as your senses turn inward.") src.add_fingerprint(user) - qdel(G) + qdel(GG) return return @@ -496,7 +497,7 @@ return for(var/mob/living/carbon/slime/M in range(1,L)) if(M.Victim == L) - to_chat(usr, "[L.name] will not fit into the sleeper because they have a slime latched onto their head.") + to_chat(usr, "[L.name] will not fit into the sleeper because [L.p_they()] [L.p_have()] a slime latched onto their head.") return if(L == user) visible_message("[user] starts climbing into the sleeper.") diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index f2dc8c8bfa2..59009e9930f 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -95,7 +95,7 @@ return for(var/mob/living/carbon/slime/M in range(1, TYPECAST_YOUR_SHIT.affecting)) if(M.Victim == TYPECAST_YOUR_SHIT.affecting) - to_chat(user, "[TYPECAST_YOUR_SHIT.affecting.name] has a fucking slime attached to them, deal with that first.") + to_chat(user, "[TYPECAST_YOUR_SHIT.affecting.name] has a fucking slime attached to [TYPECAST_YOUR_SHIT.affecting.p_them()], deal with that first.") return var/mob/M = TYPECAST_YOUR_SHIT.affecting if(M.abiotic()) @@ -133,7 +133,7 @@ return 0 for(var/mob/living/carbon/slime/M in range(1, O)) if(M.Victim == O) - to_chat(user, "[O] has a fucking slime attached to them, deal with that first.") + to_chat(user, "[O] has a fucking slime attached to [O.p_them()], deal with that first.") return 0 if(O == user) diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 13ab409ca1b..f9d83ff43f6 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -229,7 +229,7 @@ apply_preset(1) // Don't cycle. air_alarm_repository.update_cache(src) -/obj/machinery/alarm/initialize() +/obj/machinery/alarm/Initialize() ..() set_frequency(frequency) if(!master_is_operating()) diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm index b5e1bd59325..b6586d3c90a 100644 --- a/code/game/machinery/atmo_control.dm +++ b/code/game/machinery/atmo_control.dm @@ -127,7 +127,7 @@ obj/machinery/air_sensor frequency = new_frequency radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) - initialize() + Initialize() ..() SSair.atmos_machinery += src set_frequency(frequency) @@ -275,7 +275,7 @@ legend { frequency = new_frequency radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) - initialize() + Initialize() ..() set_frequency(frequency) diff --git a/code/game/machinery/atmoalter/meter.dm b/code/game/machinery/atmoalter/meter.dm index ce69429eace..03fa12a1c26 100644 --- a/code/game/machinery/atmoalter/meter.dm +++ b/code/game/machinery/atmoalter/meter.dm @@ -30,7 +30,7 @@ target = null return ..() -/obj/machinery/meter/initialize() +/obj/machinery/meter/Initialize() ..() if(!target) target = locate(/obj/machinery/atmospherics/pipe) in loc @@ -144,7 +144,7 @@ return 1 -/obj/machinery/meter/turf/initialize() +/obj/machinery/meter/turf/Initialize() if(!target) target = loc ..() diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm index 99070a35fd1..34088a6314c 100644 --- a/code/game/machinery/atmoalter/portable_atmospherics.dm +++ b/code/game/machinery/atmoalter/portable_atmospherics.dm @@ -21,7 +21,7 @@ return 1 -/obj/machinery/portable_atmospherics/initialize() +/obj/machinery/portable_atmospherics/Initialize() . = ..() spawn() var/obj/machinery/atmospherics/unary/portables_connector/port = locate() in loc diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index a3eb5a5bd40..5382c9ec429 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -36,7 +36,7 @@ if(radio_controller) set_frequency(frequency) -/obj/machinery/driver_button/initialize() +/obj/machinery/driver_button/Initialize() ..() set_frequency(frequency) diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index c79904e1c59..0e9f261d73d 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -43,7 +43,7 @@ cameranet.cameras += src cameranet.addCamera(src) -/obj/machinery/camera/initialize() +/obj/machinery/camera/Initialize() ..() if(is_station_level(z) && prob(3) && !start_active) toggle_cam() diff --git a/code/game/machinery/camera/presets.dm b/code/game/machinery/camera/presets.dm index 96db537d6dc..ac70a7c11ba 100644 --- a/code/game/machinery/camera/presets.dm +++ b/code/game/machinery/camera/presets.dm @@ -81,7 +81,7 @@ assembly.upgrades.Add(new /obj/item/assembly/prox_sensor(assembly)) setPowerUsage() // Add it to machines that process - machine_processing |= src + START_PROCESSING(SSmachines, src) /obj/machinery/camera/proc/setPowerUsage() var/mult = 1 diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index b7edd86b1af..57ade18dab3 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -75,7 +75,7 @@ /obj/machinery/cell_charger/proc/removecell() - charging.updateicon() + charging.update_icon() charging = null chargelevel = -1 updateicon() diff --git a/code/game/machinery/chiller.dm b/code/game/machinery/chiller.dm index 4fae326fd6c..f48d59593ca 100644 --- a/code/game/machinery/chiller.dm +++ b/code/game/machinery/chiller.dm @@ -120,7 +120,7 @@ if("cellremove") if(open && cell && !usr.get_active_hand()) - cell.updateicon() + cell.update_icon() usr.put_in_hands(cell) cell.add_fingerprint(usr) cell = null diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 0c6b293c680..ee53fdbce8b 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -113,7 +113,7 @@ var/datum/dna2/record/buf = null var/read_only = 0 //Well,it's still a floppy disk -/obj/item/disk/data/proc/Initialize() +/obj/item/disk/data/proc/initialize() buf = new buf.dna=new @@ -126,7 +126,7 @@ read_only = 1 /obj/item/disk/data/demo/New() - Initialize() + initialize() buf.types=DNA2_BUF_UE|DNA2_BUF_UI //data = "066000033000000000AF00330660FF4DB002690" //data = "0C80C80C80C80C80C8000000000000161FBDDEF" - Farmer Jeff @@ -145,7 +145,7 @@ read_only = 1 /obj/item/disk/data/monkey/New() - Initialize() + initialize() buf.types=DNA2_BUF_SE var/list/new_SE=list(0x098,0x3E8,0x403,0x44C,0x39F,0x4B0,0x59D,0x514,0x5FC,0x578,0x5DC,0x640,0x6A4) for(var/i=new_SE.len;i<=DNA_SE_LENGTH;i++) @@ -230,7 +230,8 @@ if(!R.dna) R.dna = new /datum/dna() - var/mob/living/carbon/human/H = new /mob/living/carbon/human(src, R.dna.species) + var/mob/living/carbon/human/H = new /mob/living/carbon/human(src) + H.set_species(R.dna.species) occupant = H if(!R.dna.real_name) //to prevent null names diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 1e207e3bdde..eebae34b9ea 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -814,7 +814,7 @@ if(ORION_TRAIL_SPACEPORT) if(spaceport_raided) - eventdat += "The Spaceport is on high alert! they wont let you dock since you tried to attack them!" + eventdat += "The Spaceport is on high alert! They wont let you dock since you tried to attack them!" if(last_spaceport_action) eventdat += "
Last Spaceport Action: [last_spaceport_action]" eventdat += "

Depart Spaceport

" diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index cf94e35f1cf..30ccb23b467 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -362,7 +362,7 @@ /obj/item/circuitboard/rdconsole/attackby(obj/item/I as obj, mob/user as mob, params) if(istype(I,/obj/item/card/id)||istype(I, /obj/item/pda)) if(allowed(user)) - user.visible_message("\the [user] waves their ID past the [src]'s access protocol scanner.", "You swipe your ID past the [src]'s access protocol scanner.") + user.visible_message("\the [user] waves [user.p_their()] ID past the [src]'s access protocol scanner.", "You swipe your ID past the [src]'s access protocol scanner.") var/console_choice = input(user, "What do you want to configure the access to?", "Access Modification", "R&D Core") as null|anything in access_types if(console_choice == null) return diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 49b3035646d..95aee7cb9fe 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -22,7 +22,7 @@ light_color = LIGHT_COLOR_DARKBLUE -/obj/machinery/computer/cloning/initialize() +/obj/machinery/computer/cloning/Initialize() ..() updatemodules() diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index ca44855d2aa..cfddc393875 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -19,7 +19,7 @@ overlay_layer = layer ..() -/obj/machinery/computer/initialize() +/obj/machinery/computer/Initialize() ..() power_change() update_icon() diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index aa7069d6e70..8bdc6b87243 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -80,7 +80,7 @@ ..() -/obj/machinery/computer/message_monitor/initialize() +/obj/machinery/computer/message_monitor/Initialize() ..() //Is the server isn't linked to a server, and there's a server available, default it to the first one in the list. if(!linkedServer) diff --git a/code/game/machinery/computer/power.dm b/code/game/machinery/computer/power.dm index 4301350dc65..08f7a45221d 100644 --- a/code/game/machinery/computer/power.dm +++ b/code/game/machinery/computer/power.dm @@ -17,7 +17,7 @@ power_monitors = sortAtom(power_monitors) power_monitor = new(src) -/obj/machinery/computer/monitor/initialize() +/obj/machinery/computer/monitor/Initialize() ..() powermonitor_repository.update_cache() powernet = find_powernet() diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index 5ac655153a2..36a05e0442e 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -62,7 +62,7 @@ current_heat_capacity = 50 * C efficiency = C -/obj/machinery/atmospherics/unary/cryo_cell/initialize() +/obj/machinery/atmospherics/unary/cryo_cell/atmos_init() ..() if(node) return for(var/cdir in cardinal) @@ -108,7 +108,7 @@ return for(var/mob/living/carbon/slime/M in range(1,L)) if(M.Victim == L) - to_chat(usr, "[L.name] will not fit into the cryo cell because they have a slime latched onto their head.") + to_chat(usr, "[L.name] will not fit into the cryo cell because [L.p_they()] [L.p_have()] a slime latched onto [L.p_their()] head.") return if(put_mob(L)) if(L == user) @@ -293,18 +293,19 @@ default_deconstruction_crowbar(G) if(istype(G, /obj/item/grab)) + var/obj/item/grab/GG = G if(panel_open) to_chat(user, "Close the maintenance panel first.") return - if(!ismob(G:affecting)) + if(!ismob(GG.affecting)) return - for(var/mob/living/carbon/slime/M in range(1,G:affecting)) - if(M.Victim == G:affecting) - to_chat(usr, "[G:affecting:name] will not fit into the cryo because they have a slime latched onto their head.") + for(var/mob/living/carbon/slime/M in range(1,GG.affecting)) + if(M.Victim == GG.affecting) + to_chat(usr, "[GG.affecting.name] will not fit into the cryo because [GG.affecting.p_they()] [GG.affecting.p_have()] a slime latched onto [GG.affecting.p_their()] head.") return - var/mob/M = G:affecting + var/mob/M = GG.affecting if(put_mob(M)) - qdel(G) + qdel(GG) return /obj/machinery/atmospherics/unary/cryo_cell/update_icon() diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index f95c6f09e9b..80db23c59f7 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -255,7 +255,7 @@ ..() -/obj/machinery/cryopod/initialize() +/obj/machinery/cryopod/Initialize() ..() find_control_computer() @@ -551,7 +551,7 @@ for(var/mob/living/carbon/slime/M in range(1,L)) if(M.Victim == L) - to_chat(usr, "[L.name] will not fit into the cryo pod because they have a slime latched onto their head.") + to_chat(usr, "[L.name] will not fit into the cryo pod because [L.p_they()] [L.p_have()] a slime latched onto [L.p_their()] head.") return diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index ce07e7bb920..0d49cc1b0cd 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -115,7 +115,7 @@ About the new airlock wires panel: ..() wires = new(src) -/obj/machinery/door/airlock/initialize() +/obj/machinery/door/airlock/Initialize() . = ..() if(closeOtherId != null) addtimer(CALLBACK(src, .proc/update_other_id), 5) @@ -647,7 +647,7 @@ About the new airlock wires panel: if(affecting.receive_damage(10, 0)) H.UpdateDamageIcon() else - visible_message("[user] headbutts the airlock. Good thing they're wearing a helmet.") + visible_message("[user] headbutts the airlock. Good thing [user.p_theyre()] wearing a helmet.") return if(panel_open) diff --git a/code/game/machinery/doors/airlock_control.dm b/code/game/machinery/doors/airlock_control.dm index 930a4a2c045..4199d5e8c20 100644 --- a/code/game/machinery/doors/airlock_control.dm +++ b/code/game/machinery/doors/airlock_control.dm @@ -39,8 +39,8 @@ if(command_completed(cur_command)) cur_command = null else - if(!(src in machine_processing)) - machine_processing += src + if(!isprocessing) + START_PROCESSING(SSmachines, src) /obj/machinery/door/airlock/proc/do_command(command) switch(command) @@ -132,7 +132,7 @@ frequency = new_frequency radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK) -/obj/machinery/door/airlock/initialize() +/obj/machinery/door/airlock/Initialize() ..() if(frequency) set_frequency(frequency) @@ -207,7 +207,7 @@ frequency = new_frequency radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK) -/obj/machinery/airlock_sensor/initialize() +/obj/machinery/airlock_sensor/Initialize() ..() set_frequency(frequency) @@ -275,7 +275,7 @@ frequency = new_frequency radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK) -/obj/machinery/access_button/initialize() +/obj/machinery/access_button/Initialize() ..() set_frequency(frequency) diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm index db78e8c82ef..8f5c1144686 100644 --- a/code/game/machinery/doors/airlock_types.dm +++ b/code/game/machinery/doors/airlock_types.dm @@ -341,7 +341,7 @@ if(isElectrified()) if(shock(user, 75)) return - if(istype(C, /obj/item/detective_scanner) || istype(C, /obj/item/taperoll)) + if(istype(C, /obj/item/detective_scanner)) return if(istype(C, /obj/item/grenade/plastic/c4)) @@ -394,7 +394,7 @@ if(isElectrified()) if(shock(user, 75)) return - if(istype(C, /obj/item/detective_scanner) || istype(C, /obj/item/taperoll)) + if(istype(C, /obj/item/detective_scanner)) return add_fingerprint(user) diff --git a/code/game/machinery/doors/alarmlock.dm b/code/game/machinery/doors/alarmlock.dm index cdada603a9b..c2e12618d79 100644 --- a/code/game/machinery/doors/alarmlock.dm +++ b/code/game/machinery/doors/alarmlock.dm @@ -18,7 +18,7 @@ air_connection = null return ..() -/obj/machinery/door/airlock/alarmlock/initialize() +/obj/machinery/door/airlock/alarmlock/Initialize() ..() radio_controller.remove_object(src, air_frequency) air_connection = radio_controller.add_object(src, air_frequency, RADIO_TO_AIRALARM) diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index 4d54c2e1e07..43156d2b484 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -73,7 +73,7 @@ return 1 -/obj/machinery/door_timer/initialize() +/obj/machinery/door_timer/Initialize() ..() Radio = new /obj/item/radio(src) @@ -152,8 +152,7 @@ // Set releasetime releasetime = world.timeofday + timetoset - if(!(src in machine_processing)) - machine_processing += src + START_PROCESSING(SSmachines, src) for(var/obj/machinery/door/window/brigdoor/door in targets) if(door.density) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 59297e04b30..563e4eb49f2 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -64,7 +64,7 @@ bound_width = world.icon_size bound_height = width * world.icon_size -/obj/machinery/door/initialize() +/obj/machinery/door/Initialize() air_update_turf(1) ..() @@ -325,7 +325,7 @@ /obj/machinery/door/proc/crush() for(var/mob/living/L in get_turf(src)) - L.visible_message("[src] closes on [L], crushing them!", "[src] closes on you and crushes you!") + L.visible_message("[src] closes on [L], crushing [L.p_them()]!", "[src] closes on you and crushes you!") if(isalien(L)) //For xenos L.adjustBruteLoss(DOOR_CRUSH_DAMAGE * 1.5) //Xenos go into crit after aproximately the same amount of crushes as humans. L.emote("roar") diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index b20d99b2613..3f9e4f55a08 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -53,11 +53,38 @@ if(!hasPower()) open() -/obj/machinery/door/poddoor/multi_tile // Whoever wrote the old code for multi-tile spesspod doors needs to burn in hell. + // Whoever wrote the old code for multi-tile spesspod doors needs to burn in hell. - Unknown + // Wise words. - Bxil +/obj/machinery/door/poddoor/multi_tile name = "large pod door" layer = CLOSED_DOOR_LAYER closingLayer = CLOSED_DOOR_LAYER +/obj/machinery/door/poddoor/multi_tile/New() + . = ..() + apply_opacity_to_my_turfs(opacity) + +/obj/machinery/door/poddoor/multi_tile/open() + if(..()) + apply_opacity_to_my_turfs(opacity) + + +/obj/machinery/door/poddoor/multi_tile/close() + if(..()) + apply_opacity_to_my_turfs(opacity) + +/obj/machinery/door/poddoor/multi_tile/Destroy() + apply_opacity_to_my_turfs(0) + return ..() + +//Multi-tile poddoors don't turn invisible automatically, so we change the opacity of the turfs below instead one by one. +/obj/machinery/door/poddoor/multi_tile/proc/apply_opacity_to_my_turfs(var/new_opacity) + for(var/turf/T in locs) + T.opacity = new_opacity + T.has_opaque_atom = new_opacity + T.reconsider_lights() + update_freelook_sight() + /obj/machinery/door/poddoor/multi_tile/four_tile_ver/ icon = 'icons/obj/doors/1x4blast_vert.dmi' width = 4 diff --git a/code/game/machinery/doors/spacepod.dm b/code/game/machinery/doors/spacepod.dm index 93419b588f6..5aea5b477ed 100644 --- a/code/game/machinery/doors/spacepod.dm +++ b/code/game/machinery/doors/spacepod.dm @@ -7,7 +7,7 @@ anchored = 1 var/id = 1.0 -/obj/structure/spacepoddoor/initialize() +/obj/structure/spacepoddoor/Initialize() ..() air_update_turf(1) diff --git a/code/game/machinery/dye_generator.dm b/code/game/machinery/dye_generator.dm index 3216c945106..bb47a4939ec 100644 --- a/code/game/machinery/dye_generator.dm +++ b/code/game/machinery/dye_generator.dm @@ -8,7 +8,7 @@ idle_power_usage = 40 var/dye_color = "#FFFFFF" -/obj/machinery/dye_generator/initialize() +/obj/machinery/dye_generator/Initialize() ..() power_change() diff --git a/code/game/machinery/embedded_controller/airlock_controllers.dm b/code/game/machinery/embedded_controller/airlock_controllers.dm index 27ee0197514..5209003fc59 100644 --- a/code/game/machinery/embedded_controller/airlock_controllers.dm +++ b/code/game/machinery/embedded_controller/airlock_controllers.dm @@ -12,7 +12,7 @@ var/tag_shuttle_mech_sensor var/tag_secure = 0 -/obj/machinery/embedded_controller/radio/airlock/initialize() +/obj/machinery/embedded_controller/radio/airlock/Initialize() ..() program = new/datum/computer/file/embedded_program/airlock(src) diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm index 08143524744..889263da2f8 100644 --- a/code/game/machinery/embedded_controller/embedded_controller_base.dm +++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm @@ -54,7 +54,7 @@ var/datum/radio_frequency/radio_connection unacidable = 1 -/obj/machinery/embedded_controller/radio/initialize() +/obj/machinery/embedded_controller/radio/Initialize() ..() set_frequency(frequency) diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index da64430b941..2b0691d5801 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -76,7 +76,7 @@ L.Weaken(strength) if(L.weakeyes) L.Weaken(strength * 1.5) - L.visible_message("[L] gasps and shields their eyes!") + L.visible_message("[L] gasps and shields [L.p_their()] eyes!") /obj/machinery/flasher/emp_act(severity) if(stat & (BROKEN|NOPOWER)) diff --git a/code/game/machinery/floodlight.dm b/code/game/machinery/floodlight.dm index 5428e03d4a8..8ac57a5cec6 100644 --- a/code/game/machinery/floodlight.dm +++ b/code/game/machinery/floodlight.dm @@ -48,7 +48,7 @@ cell.loc = loc cell.add_fingerprint(user) - cell.updateicon() + cell.update_icon() src.cell = null to_chat(user, "You remove the power cell") diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index f4a306d8bf2..d7a4a3e2b04 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -82,7 +82,7 @@ if(beaker) usr.visible_message("[usr] attaches [src] to [target].", "You attach [src] to [target].") attached = target - machine_processing += src + START_PROCESSING(SSmachines, src) update_icon() else to_chat(usr, "There's nothing attached to the IV drip!") diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index 9862d952244..343734804cb 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -44,7 +44,7 @@ src.on = src.area.lightswitch updateicon() -/obj/machinery/light_switch/initialize() +/obj/machinery/light_switch/Initialize() ..() set_frequency(frequency) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 34842a64b76..18fc505a49b 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -119,7 +119,7 @@ Class Procs: atom_say_verb = "beeps" var/speed_process = 0 // Process as fast as possible? -/obj/machinery/initialize() +/obj/machinery/Initialize() addAtProcessing() . = ..() power_change() @@ -128,24 +128,26 @@ Class Procs: if(use_power) myArea = get_area_master(src) if(!speed_process) - machine_processing += src + START_PROCESSING(SSmachines, src) else fast_processing += src + isprocessing = TRUE // all of these isprocessing = TRUE can be removed when the PS is dead // gotta go fast /obj/machinery/proc/makeSpeedProcess() if(speed_process) return speed_process = 1 - machine_processing -= src + STOP_PROCESSING(SSmachines, src) fast_processing += src + isprocessing = TRUE // gotta go slow /obj/machinery/proc/makeNormalProcess() if(!speed_process) return speed_process = 0 - machine_processing += src + START_PROCESSING(SSmachines, src) fast_processing -= src /obj/machinery/New() //new @@ -158,7 +160,7 @@ Class Procs: if(myArea) myArea = null fast_processing -= src - machine_processing -= src + STOP_PROCESSING(SSmachines, src) machines -= src return ..() @@ -309,7 +311,7 @@ Class Procs: re_init=1 if(re_init) - initialize() + Initialize() if(update_mt_menu) //usr.set_machine(src) update_multitool_menu(usr) diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 422e697e7b0..491cb93018e 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -306,21 +306,21 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co if(FC.channel_name == channel_name) check = 1 break - if(channel_name == "" || channel_name == REDACTED || scanned_user == "Unknown" || check || (scanned_user in existing_authors)) - temp = "ERROR: Could not submit feed channel to Network.
    " - if(scanned_user in existing_authors) - temp += "
  • There already exists a feed channel under your name.
  • " - if(channel_name == "" || channel_name == REDACTED) - temp += "
  • Invalid channel name.
  • " - if(check) - temp += "
  • Channel name already in use.
  • " - if(scanned_user == "Unknown") - temp += "
  • Channel author unverified.
  • " - temp += "
" - temp_back_screen = NEWSCASTER_CREATE_FC - else - var/choice = alert("Please confirm feed channel creation", "Network Channel Handler", "Confirm", "Cancel") - if(choice == "Confirm") + var/choice = alert("Please confirm feed channel creation", "Network Channel Handler", "Confirm", "Cancel") + if(choice == "Confirm") + if(channel_name == "" || channel_name == REDACTED || scanned_user == "Unknown" || check || (scanned_user in existing_authors)) + temp = "ERROR: Could not submit feed channel to Network.
    " + if(scanned_user in existing_authors) + temp += "
  • There already exists a feed channel under your name.
  • " + if(channel_name == "" || channel_name == REDACTED) + temp += "
  • Invalid channel name.
  • " + if(check) + temp += "
  • Channel name already in use.
  • " + if(scanned_user == "Unknown") + temp += "
  • Channel author unverified.
  • " + temp += "
" + temp_back_screen = NEWSCASTER_CREATE_FC + else var/datum/feed_channel/newChannel = new /datum/feed_channel newChannel.channel_name = channel_name newChannel.author = scanned_user @@ -422,19 +422,19 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co else if(href_list["submit_wanted"]) var/input_param = text2num(href_list["submit_wanted"]) - if(msg == "" || channel_name == "" || scanned_user == "Unknown") - temp = "ERROR: Wanted issue rejected by Network.
    " - if(channel_name == "" || channel_name == REDACTED) - temp += "
  • Invalid name for person wanted.
  • " - if(scanned_user == "Unknown") - temp += "
  • Channel author unverified.
  • " - if(msg == "" || msg == REDACTED) - temp += "
  • Invalid description.
  • " - temp += "
" - temp_back_screen = NEWSCASTER_MAIN - else - var/choice = alert("Please confirm wanted issue [input_param == 1 ? "creation." : "edit."]", "Network Security Handler", "Confirm", "Cancel") - if(choice == "Confirm") + var/choice = alert("Please confirm wanted issue [input_param == 1 ? "creation." : "edit."]", "Network Security Handler", "Confirm", "Cancel") + if(choice == "Confirm") + if(msg == "" || channel_name == "" || scanned_user == "Unknown") + temp = "ERROR: Wanted issue rejected by Network.
    " + if(channel_name == "" || channel_name == REDACTED) + temp += "
  • Invalid name for person wanted.
  • " + if(scanned_user == "Unknown") + temp += "
  • Channel author unverified.
  • " + if(msg == "" || msg == REDACTED) + temp += "
  • Invalid description.
  • " + temp += "
" + temp_back_screen = NEWSCASTER_MAIN + else if(input_param == 1) //input_param == 1: new wanted issue, input_param == 2: editing an existing one var/datum/feed_message/W = new /datum/feed_message W.author = channel_name diff --git a/code/game/machinery/poolcontroller.dm b/code/game/machinery/poolcontroller.dm index f6ecd511b2b..6c10129c6ea 100644 --- a/code/game/machinery/poolcontroller.dm +++ b/code/game/machinery/poolcontroller.dm @@ -107,7 +107,7 @@ else drownee.AdjustLoseBreath(2, bound_lower = 0, bound_upper = 20) //For every time you drown, you miss 2 breath attempts. Hope you catch on quick! if(prob(35)) //35% chance to tell them what is going on. They should probably figure it out before then. - drownee.visible_message("\The [drownee] flails, almost like they are drowning!","You're lacking air!") //*gasp* *gasp* *gasp* *gasp* *gasp* + drownee.visible_message("\The [drownee] flails, almost like [drownee.p_they()] [drownee.p_are()] drowning!","You're lacking air!") //*gasp* *gasp* *gasp* *gasp* *gasp* diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index 24251977ca9..6ef4d064ac7 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -14,7 +14,7 @@ src.dir = pick(1,2,3,4) ..() -/obj/machinery/shield/initialize() +/obj/machinery/shield/Initialize() air_update_turf(1) ..() diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index a4a4091df7b..1962e3631fb 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -127,7 +127,7 @@ if("cellremove") if(open && cell && !usr.get_active_hand()) - cell.updateicon() + cell.update_icon() usr.put_in_hands(cell) cell.add_fingerprint(usr) cell = null diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index 414ec8d2e62..a77bd744f92 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -54,7 +54,7 @@ return ..() // register for radio system -/obj/machinery/status_display/initialize() +/obj/machinery/status_display/Initialize() ..() if(radio_controller) radio_controller.add_object(src, frequency) diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index a7d68adbe62..370cef73559 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -413,13 +413,13 @@ var/i for(i=0,i<4,i++) //Gradually give the guy inside some damaged based on the intensity spawn(50) - if(src.OCCUPANT) - if(src.issuperUV) + if(OCCUPANT) + if(issuperUV) OCCUPANT.take_organ_damage(0,40) - to_chat(user, "Test. You gave him 40 damage") + to_chat(user, "Test. You gave [OCCUPANT.p_them()] 40 damage") else OCCUPANT.take_organ_damage(0,8) - to_chat(user, "Test. You gave him 8 damage") + to_chat(user, "Test. You gave [OCCUPANT.p_them()] 8 damage") return*/ diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index 59f9a667584..7ec64373373 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -131,7 +131,7 @@ singulo.target = src icon_state = "[icontype]1" active = 1 - machine_processing |= src + START_PROCESSING(SSmachines, src) if(user) to_chat(user, "You activate the beacon.") diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index a4c73cc8fac..c640d5d5554 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -231,7 +231,8 @@ var/area/A = get_area(bombturf) if(payload && !istype(payload, /obj/item/bombcore/training)) msg_admin_attack("[key_name_admin(user)] has primed a [name] ([payload]) for detonation at [A.name] (JMP).") - log_game("[key_name(user)] has primed a [name] ([payload]) for detonation at [A.name] ([bombturf.x], [bombturf.y], [bombturf.z])") + log_game("[key_name(user)] has primed a [name] ([payload]) for detonation at [A.name] [COORD(bombturf)]") + investigate_log("[key_name(user)] has has primed a [name] ([payload]) for detonation at [A.name] [COORD(bombturf)]", INVESTIGATE_BOMB) payload.adminlog = "\The [src] that [key_name(user)] had primed detonated!" /obj/machinery/syndicatebomb/proc/isWireCut(var/index) @@ -556,11 +557,11 @@ var/area/A = get_area(T) detonated-- message_admins("[key_name_admin(user)] has remotely detonated [detonated ? "syndicate bombs" : "a syndicate bomb"] using a [name] at [A.name] (JMP).") - bombers += "[key_name(user)] has remotely detonated [detonated ? "syndicate bombs" : "a syndicate bomb"] using a [name] at [A.name] ([T.x],[T.y],[T.z])" + investigate_log("[key_name(user)] has remotely detonated [detonated ? "syndicate bombs" : "a syndicate bomb"] using a [name] at [A.name] ([T.x],[T.y],[T.z])", INVESTIGATE_BOMB) log_game("[key_name(user)] has remotely detonated [detonated ? "syndicate bombs" : "a syndicate bomb"] using a [name] at [A.name] ([T.x],[T.y],[T.z])") detonated = 0 existant = 0 timer = world.time + BUTTON_COOLDOWN #undef BUTTON_COOLDOWN -#undef BUTTON_DELAY \ No newline at end of file +#undef BUTTON_DELAY diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm index 00465cf8b8b..9dc30edf61e 100644 --- a/code/game/machinery/telecomms/telecomunications.dm +++ b/code/game/machinery/telecomms/telecomunications.dm @@ -116,7 +116,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() // TODO: Make the radio system cooperate with the space manager listening_level = position.z -/obj/machinery/telecomms/initialize() +/obj/machinery/telecomms/Initialize() ..() if(autolinkers.len) // Links nearby machines diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index fa8f2e8d084..a1248fc0b6d 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -18,7 +18,7 @@ ..() return -/obj/machinery/computer/teleporter/initialize() +/obj/machinery/computer/teleporter/Initialize() ..() link_power_station() update_icon() @@ -293,7 +293,7 @@ component_parts += new /obj/item/stock_parts/matter_bin/super(null) RefreshParts() -/obj/machinery/teleport/hub/initialize() +/obj/machinery/teleport/hub/Initialize() ..() link_power_station() @@ -472,7 +472,7 @@ RefreshParts() link_console_and_hub() -/obj/machinery/teleport/station/initialize() +/obj/machinery/teleport/station/Initialize() ..() link_console_and_hub() diff --git a/code/game/machinery/turret_control.dm b/code/game/machinery/turret_control.dm index 8df55e1bc66..d6ae98cb516 100644 --- a/code/game/machinery/turret_control.dm +++ b/code/game/machinery/turret_control.dm @@ -64,7 +64,7 @@ A.turret_controls -= src return ..() -/obj/machinery/turretid/initialize() +/obj/machinery/turretid/Initialize() ..() if(!control_area) control_area = get_area(src) diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm index b990029423c..62928c95be5 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/game/mecha/equipment/mecha_equipment.dm @@ -12,7 +12,6 @@ var/energy_drain = 0 var/obj/mecha/chassis = null var/range = MELEE //bitflags - reliability = 1000 var/salvageable = 1 var/selectable = 1 // Set to 0 for passive equipment such as mining scanner or armor plates diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm index 5f3483d2ce4..a9d4b4008b6 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/game/mecha/equipment/tools/medical_tools.dm @@ -74,7 +74,7 @@ /obj/item/mecha_parts/mecha_equipment/medical/sleeper/proc/patient_insertion_check(mob/living/carbon/target) if(target.buckled) - occupant_message("[target] will not fit into the sleeper because they are buckled to [target.buckled]!") + occupant_message("[target] will not fit into the sleeper because [target.p_they()] [target.p_are()] buckled to [target.buckled]!") return if(target.has_buckled_mobs()) occupant_message("[target] will not fit into the sleeper because of the creatures attached to it!") diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm index 866cb7580f6..7706f3120f0 100644 --- a/code/game/mecha/equipment/tools/work_tools.dm +++ b/code/game/mecha/equipment/tools/work_tools.dm @@ -444,7 +444,6 @@ if(!PN) PN = new() - powernets += PN NC.powernet = PN PN.cables += NC NC.mergeConnectedNetworks(NC.d2) diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index b14825c7cc0..a34d43098cb 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -177,7 +177,7 @@ return data -/obj/machinery/computer/mech_bay_power_console/initialize() +/obj/machinery/computer/mech_bay_power_console/Initialize() reconnect() update_icon() return ..() diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index bb666a63da1..23134bc3144 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -469,15 +469,17 @@ /obj/mecha/attack_hand(mob/living/user) user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) log_message("Attack by hand/paw. Attacker - [user].",1) if((HULK in user.mutations) && !prob(deflect_chance)) + do_attack_animation(src, ATTACK_EFFECT_SMASH) take_damage(15) check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) user.visible_message("[user] hits [name], doing some damage.", "You hit [name] with all your might. The metal creaks and bends.") else + user.do_attack_animation(src, ATTACK_EFFECT_PUNCH) + playsound(loc, 'sound/weapons/tap.ogg', 40, 1, -1) user.visible_message("[user] hits [name]. Nothing happens","You hit [name] with no visible effect.") log_append_to_last("Armor saved.") return @@ -1478,3 +1480,15 @@ if(occupant_sight_flags) if(user == occupant) user.sight |= occupant_sight_flags + +/obj/mecha/do_attack_animation(atom/A, visual_effect_icon, obj/item/used_item, no_effect, end_pixel_y) + if(!no_effect) + if(selected) + used_item = selected + else if(!visual_effect_icon) + visual_effect_icon = ATTACK_EFFECT_SMASH + if(damtype == BURN) + visual_effect_icon = ATTACK_EFFECT_MECHFIRE + else if(damtype == TOX) + visual_effect_icon = ATTACK_EFFECT_MECHTOXIN + ..() \ No newline at end of file diff --git a/code/game/mecha/mecha_topic.dm b/code/game/mecha/mecha_topic.dm index 6c455c673f3..2ce732f83ed 100644 --- a/code/game/mecha/mecha_topic.dm +++ b/code/game/mecha/mecha_topic.dm @@ -298,6 +298,7 @@ var/newname = strip_html_simple(input(occupant,"Choose new exosuit name","Rename exosuit",initial(name)) as text, MAX_NAME_LEN) if(newname && trim(newname)) name = newname + log_game("[key_name(occupant)] has renamed an exosuit [newname]") else alert(occupant, "nope.avi") return diff --git a/code/game/objects/effects/barsign.dm b/code/game/objects/effects/barsign.dm deleted file mode 100644 index fd66f8028d1..00000000000 --- a/code/game/objects/effects/barsign.dm +++ /dev/null @@ -1,8 +0,0 @@ -/obj/effect/sign/double/barsign - icon = 'icons/obj/barsigns.dmi' - icon_state = "empty" - anchored = 1 - - New() - var/list/valid_states = list("pinkflamingo", "magmasea", "limbo", "rustyaxe", "armokbar", "brokendrum", "meadbay", "thedamnwall", "thecavern", "cindikate", "theorchard", "thesaucyclown", "theclownshead", "whiskeyimplant", "carpecarp", "robustroadhouse", "greytide", "theredshirt") - src.icon_state = "[pick(valid_states)]" diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm index cb218395735..93763c464e7 100644 --- a/code/game/objects/effects/effect_system/effects_foam.dm +++ b/code/game/objects/effects/effect_system/effects_foam.dm @@ -172,7 +172,7 @@ desc = "A lightweight foamed metal wall." var/metal = MFOAM_ALUMINUM -/obj/structure/foamedmetal/initialize() +/obj/structure/foamedmetal/Initialize() ..() air_update_turf(1) @@ -204,7 +204,7 @@ /obj/structure/foamedmetal/attack_hand(mob/user) user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) + user.do_attack_animation(src, ATTACK_EFFECT_PUNCH) if((HULK in user.mutations) || (prob(75 - metal*25))) user.visible_message("[user] smashes through \the [src].", "You smash through \the [src].") qdel(src) diff --git a/code/game/objects/effects/spawners/windowspawner.dm b/code/game/objects/effects/spawners/windowspawner.dm index a2517d093f8..6d271039070 100644 --- a/code/game/objects/effects/spawners/windowspawner.dm +++ b/code/game/objects/effects/spawners/windowspawner.dm @@ -7,7 +7,8 @@ var/windowtospawn = /obj/structure/window/basic anchored = 1 // No sliding out while you prime -/obj/effect/spawner/window/initialize() +/obj/effect/spawner/window/Initialize() + ..() spawn(0) var/turf/T = get_turf(src) for(var/obj/structure/grille/G in get_turf(src)) diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index 02c04fbfbea..29abbef2d76 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -219,7 +219,7 @@ if(C) S.key = C.key if(S.master_commander) - to_chat(S, "You are a spider who is loyal to [S.master_commander], obey [S.master_commander]'s every order and assist them in completing their goals at any cost.") + to_chat(S, "You are a spider who is loyal to [S.master_commander], obey [S.master_commander]'s every order and assist [S.master_commander.p_them()] in completing [S.master_commander.p_their()] goals at any cost.") qdel(src) /obj/effect/decal/cleanable/spiderling_remains diff --git a/code/game/objects/empulse.dm b/code/game/objects/empulse.dm index ddf5b618bd5..2188337ba77 100644 --- a/code/game/objects/empulse.dm +++ b/code/game/objects/empulse.dm @@ -5,8 +5,8 @@ epicenter = get_turf(epicenter.loc) if(log) - message_admins("EMP with size ([heavy_range], [light_range]) in area [epicenter.loc.name] ") - log_game("EMP with size ([heavy_range], [light_range]) in area [epicenter.loc.name] ") + message_admins("EMP with size ([heavy_range], [light_range]) in area [epicenter.loc.name] [ADMIN_COORDJMP(epicenter)]") + log_game("EMP with size ([heavy_range], [light_range]) in area [epicenter.loc.name] [COORD(epicenter)]") if(heavy_range > 1) new/obj/effect/temp_visual/emp/pulse(epicenter) @@ -29,4 +29,4 @@ T.emp_act(2) else if(distance <= light_range) T.emp_act(2) - return 1 \ No newline at end of file + return 1 diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index b2d0d6720c7..4977120fcc9 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -443,13 +443,14 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d playsound(loc, src.hitsound, 30, 1, -1) + user.do_attack_animation(M) + if(M != user) M.visible_message("[user] has stabbed [M] in the eye with [src]!", \ "[user] stabs you in the eye with [src]!") - user.do_attack_animation(M) else user.visible_message( \ - "[user] has stabbed themself in the eyes with [src]!", \ + "[user] has stabbed [user.p_them()]self in the eyes with [src]!", \ "You stab yourself in the eyes with [src]!" \ ) diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 295b133d92e..b4dd66e3be5 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -22,7 +22,7 @@ var/list/validSurfaces = list(/turf/simulated/floor) /obj/item/toy/crayon/suicide_act(mob/user) - user.visible_message("[user] is jamming the [src.name] up \his nose and into \his brain. It looks like \he's trying to commit suicide.") + user.visible_message("[user] is jamming the [name] up [user.p_their()] nose and into [user.p_their()] brain. It looks like [user.p_theyre()] trying to commit suicide.") return (BRUTELOSS|OXYLOSS) /obj/item/toy/crayon/New() diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index 0e2e3cc3785..5056c90793f 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -95,7 +95,7 @@ to_chat(M, "[user] blinds you with the flash!") if(M.weakeyes) M.Stun(2) - M.visible_message("[M] gasps and shields their eyes!", "You gasp and shields your eyes!") + M.visible_message("[M] gasps and shields [M.p_their()] eyes!", "You gasp and shields your eyes!") else visible_message("[user] fails to blind [M] with the flash!") to_chat(user, "You fail to blind [M] with the flash!") @@ -123,7 +123,7 @@ for(var/obj/item/borg/combat/shield/S in R.module.modules) if(R.activated(S)) add_attack_logs(user, M, "Flashed with [src]") - user.visible_message("[user] tries to overloads [M]'s sensors with the [src.name], but is blocked by [M]'s shield!", "You try to overload [M]'s sensors with the [src.name], but are blocked by their shield!") + user.visible_message("[user] tries to overloads [M]'s sensors with the [src.name], but is blocked by [M]'s shield!", "You try to overload [M]'s sensors with the [src.name], but are blocked by [M.p_their()] shield!") return 1 add_attack_logs(user, M, "Flashed with [src]") if(M.flash_eyes(affect_silicon = 1)) @@ -168,9 +168,9 @@ resisted = 1 if(resisted) - to_chat(user, "This mind seems resistant to the [src.name]!") + to_chat(user, "This mind seems resistant to the [name]!") else - to_chat(user, "They must be conscious before you can convert them!") + to_chat(user, "They must be conscious before you can convert [M.p_them()]!") else to_chat(user, "This mind is so vacant that it is not susceptible to influence!") diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 944a6e0d5f9..fb1956a56e9 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -12,7 +12,7 @@ var/on = 0 var/brightness_on = 4 //luminosity when on -/obj/item/flashlight/initialize() +/obj/item/flashlight/Initialize() ..() if(on) icon_state = "[initial(icon_state)]-on" @@ -61,10 +61,10 @@ if(M == user) //they're using it on themselves if(M.flash_eyes(visual = 1)) - M.visible_message("[M] directs [src] to \his eyes.", \ + M.visible_message("[M] directs [src] to [M.p_their()] eyes.", \ "You wave the light in front of your eyes! Trippy!") else - M.visible_message("[M] directs [src] to \his eyes.", \ + M.visible_message("[M] directs [src] to [M.p_their()] eyes.", \ "You wave the light in front of your eyes.") else diff --git a/code/game/objects/items/devices/instruments.dm b/code/game/objects/items/devices/instruments.dm index b55efc665b2..639382ed03e 100644 --- a/code/game/objects/items/devices/instruments.dm +++ b/code/game/objects/items/devices/instruments.dm @@ -18,10 +18,10 @@ return ..() /obj/item/instrument/suicide_act(mob/user) - user.visible_message("[user] begins to play 'Gloomy Sunday'! It looks like \he's trying to commit suicide!") + user.visible_message("[user] begins to play 'Gloomy Sunday'! It looks like [user.p_theyre()] trying to commit suicide!") return (BRUTELOSS) -/obj/item/instrument/initialize(mapload) +/obj/item/instrument/Initialize(mapload) song.tempo = song.sanitize_tempo(song.tempo) // tick_lag isn't set when the map is loaded ..() diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index 678d6837a8e..c8ab2e1fc4f 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -109,11 +109,11 @@ //20% chance to actually hit the eyes if(prob(effectchance * diode.rating) && C.flash_eyes(severity)) - outmsg = "You blind [C] by shining [src] in their eyes." + outmsg = "You blind [C] by shining [src] in [C.p_their()] eyes." if(C.weakeyes) C.Stun(1) else - outmsg = "You fail to blind [C] by shining [src] at their eyes!" + outmsg = "You fail to blind [C] by shining [src] at [C.p_their()] eyes!" //robots and AI else if(issilicon(target)) @@ -123,11 +123,11 @@ S.flash_eyes(affect_silicon = 1) S.Weaken(rand(5,10)) to_chat(S, "Your sensors were overloaded by a laser!") - outmsg = "You overload [S] by shining [src] at their sensors." + outmsg = "You overload [S] by shining [src] at [S.p_their()] sensors." add_attack_logs(user, S, "shone [src] in their eyes") else - outmsg = "You fail to overload [S] by shining [src] at their sensors." + outmsg = "You fail to overload [S] by shining [src] at [S.p_their()] sensors." //cameras else if(istype(target, /obj/machinery/camera)) diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 55465218b99..51aa645a139 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -21,7 +21,7 @@ ..() internal_channels.Cut() -/obj/item/radio/headset/initialize() +/obj/item/radio/headset/Initialize() ..() if(ks1type) diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index e1ee7029439..530156fbd99 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -83,7 +83,8 @@ var/global/list/default_medbay_channels = list( return ..() -/obj/item/radio/initialize() +/obj/item/radio/Initialize() + ..() if(frequency < RADIO_LOW_FREQ || frequency > RADIO_HIGH_FREQ) frequency = sanitize_frequency(frequency, RADIO_LOW_FREQ, RADIO_HIGH_FREQ) set_frequency(frequency) diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index beed9fb75c3..84bad81c015 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -63,7 +63,7 @@ A.holder = src A.toggle_secure() //this calls update_icon(), which calls update_icon() on the holder (i.e. the bomb). - bombers += "[key_name(user)] attached a [A] to a transfer valve." + investigate_log("[key_name(user)] attached a [A] to a transfer valve.", INVESTIGATE_BOMB) msg_admin_attack("[key_name_admin(user)]attached [A] to a transfer valve.") log_game("[key_name_admin(user)] attached [A] to a transfer valve.") attacher = user @@ -204,7 +204,7 @@ var/mob/mob = get_mob_by_key(src.fingerprintslast) - bombers += "Bomb valve opened at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]) with [attached_device ? attached_device : "no device"], attached by [attacher_name]. Last touched by: [key_name(mob)]" + investigate_log("Bomb valve opened at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]) with [attached_device ? attached_device : "no device"], attached by [attacher_name]. Last touched by: [key_name(mob)]", INVESTIGATE_BOMB) message_admins("Bomb valve opened at [A.name] (JMP) with [attached_device ? attached_device : "no device"], attached by [attacher_name]. Last touched by: [key_name_admin(mob)]") log_game("Bomb valve opened at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]) with [attached_device ? attached_device : "no device"], attached by [attacher_name]. Last touched by: [key_name(mob)]") merge_gases() diff --git a/code/game/objects/items/devices/uplinks.dm b/code/game/objects/items/devices/uplinks.dm index 2d40c1e683c..cc3320489f6 100644 --- a/code/game/objects/items/devices/uplinks.dm +++ b/code/game/objects/items/devices/uplinks.dm @@ -54,7 +54,7 @@ var/list/world_uplinks = list() dat += "Telecrystals left: [src.uses]
" dat += "
" dat += "Request item:
" - dat += "Each item costs a number of telecrystals as indicated by the number following their name.
" + dat += "Each item costs a number of telecrystals as indicated by the number following its name.
" var/category_items = 1 for(var/category in ItemsCategory) diff --git a/code/game/objects/items/policetape.dm b/code/game/objects/items/policetape.dm deleted file mode 100644 index f9769a64e23..00000000000 --- a/code/game/objects/items/policetape.dm +++ /dev/null @@ -1,203 +0,0 @@ -//Define all tape types in policetape.dm -/obj/item/taperoll - name = "tape roll" - icon = 'icons/policetape.dmi' - icon_state = "rollstart" - w_class = WEIGHT_CLASS_TINY - var/turf/start - var/turf/end - var/tape_type = /obj/item/tape - var/icon_base - -var/list/image/hazard_overlays -var/list/tape_roll_applications = list() - -/obj/item/tape - name = "tape" - icon = 'icons/policetape.dmi' - anchored = 1 - density = 1 - var/icon_base - -/obj/item/tape/New() - ..() - if(!hazard_overlays) - hazard_overlays = list() - hazard_overlays["[NORTH]"] = new/image('icons/effects/warning_stripes.dmi', icon_state = "N") - hazard_overlays["[EAST]"] = new/image('icons/effects/warning_stripes.dmi', icon_state = "E") - hazard_overlays["[SOUTH]"] = new/image('icons/effects/warning_stripes.dmi', icon_state = "S") - hazard_overlays["[WEST]"] = new/image('icons/effects/warning_stripes.dmi', icon_state = "W") - -/obj/item/taperoll/New() //just using tape is not enough to guarantee the overlays are genned - ..() - if(!hazard_overlays) - hazard_overlays = list() - hazard_overlays["[NORTH]"] = new/image('icons/effects/warning_stripes.dmi', icon_state = "N") - hazard_overlays["[EAST]"] = new/image('icons/effects/warning_stripes.dmi', icon_state = "E") - hazard_overlays["[SOUTH]"] = new/image('icons/effects/warning_stripes.dmi', icon_state = "S") - hazard_overlays["[WEST]"] = new/image('icons/effects/warning_stripes.dmi', icon_state = "W") - -/obj/item/taperoll/police - name = "police tape" - desc = "A roll of police tape used to block off crime scenes from the public." - icon_state = "police_start" - tape_type = /obj/item/tape/police - icon_base = "police" - -/obj/item/tape/police - name = "police tape" - desc = "A length of police tape. Do not cross." - req_one_access = list(access_security,access_forensics_lockers) - icon_base = "police" - -/obj/item/taperoll/engineering - name = "engineering tape" - desc = "A roll of engineering tape used to block off working areas from the public." - icon_state = "engineering_start" - tape_type = /obj/item/tape/engineering - icon_base = "engineering" - -/obj/item/tape/engineering - name = "engineering tape" - desc = "A length of engineering tape. Better not cross it." - req_one_access = list(access_engine,access_atmospherics) - icon_base = "engineering" - -/obj/item/taperoll/attack_self(mob/user as mob) - if(icon_state == "[icon_base]_start") - start = get_turf(src) - to_chat(usr, "You place the first end of the [src].") - icon_state = "[icon_base]_stop" - else - icon_state = "[icon_base]_start" - end = get_turf(src) - if(start.y != end.y && start.x != end.x || start.z != end.z) - to_chat(usr, "[src] can only be laid horizontally or vertically.") - return - - var/turf/cur = start - var/dir - if(start.x == end.x) - var/d = end.y-start.y - if(d) d = d/abs(d) - end = get_turf(locate(end.x,end.y+d,end.z)) - dir = "v" - else - var/d = end.x-start.x - if(d) d = d/abs(d) - end = get_turf(locate(end.x+d,end.y,end.z)) - dir = "h" - - var/can_place = 1 - while(cur!=end && can_place) - if(cur.density == 1) - can_place = 0 - else if(istype(cur, /turf/space)) - can_place = 0 - else - for(var/obj/O in cur) - if(!istype(O, /obj/item/tape) && O.density) - can_place = 0 - break - cur = get_step_towards(cur,end) - if(!can_place) - to_chat(usr, "You can't run \the [src] through that!") - return - - cur = start - var/tapetest = 0 - while(cur!=end) - for(var/obj/item/tape/Ptest in cur) - if(Ptest.icon_state == "[Ptest.icon_base]_[dir]") - tapetest = 1 - if(tapetest != 1) - var/obj/item/tape/P = new tape_type(cur) - P.icon_state = "[P.icon_base]_[dir]" - cur = get_step_towards(cur,end) - //is_blocked_turf(var/turf/T) - to_chat(usr, "You finish placing the [src].")//Git Test - - -/obj/item/taperoll/afterattack(var/atom/A, mob/user as mob, proximity) - if(!proximity) - return - - if(istype(A, /obj/machinery/door/airlock)) - var/turf/T = get_turf(A) - var/obj/item/tape/P = new tape_type(T.x,T.y,T.z) - P.loc = locate(T.x,T.y,T.z) - P.icon_state = "[src.icon_base]_door" - P.layer = 3.2 - to_chat(user, "You finish placing the [src].") - - if(istype(A, /turf/simulated/floor) ||istype(A, /turf/unsimulated/floor)) - var/turf/F = A - var/direction = user.loc == F ? user.dir : turn(user.dir, 180) - var/icon/hazard_overlay = hazard_overlays["[direction]"] - if(tape_roll_applications[F] == null) - tape_roll_applications[F] = 0 - - if(tape_roll_applications[F] & direction) // hazard_overlay in F.overlays wouldn't work. - user.visible_message("[user] uses the adhesive of \the [src] to remove area markings from \the [F].", "You use the adhesive of \the [src] to remove area markings from \the [F].") - F.overlays -= hazard_overlay - tape_roll_applications[F] &= ~direction - else - user.visible_message("[user] applied \the [src] on \the [F] to create area markings.", "You apply \the [src] on \the [F] to create area markings.") - F.overlays |= hazard_overlay - tape_roll_applications[F] |= direction - return - -/obj/item/tape/CanPass(atom/movable/mover, turf/target, height=0) - if(!density) return 1 - if(height==0) return 1 - - if((mover.pass_flags & PASSTABLE || istype(mover, /obj/effect/meteor) || mover.throwing)) - return 1 - else if(ismob(mover) && allowed(mover)) - return 1 - else - return 0 - -/obj/item/tape/attackby(obj/item/W as obj, mob/user as mob, params) - breaktape(W, user) - -/obj/item/tape/attack_hand(mob/user as mob) - if(user.a_intent == INTENT_HELP && src.allowed(user)) - user.visible_message("[user] lifts [src], allowing passage.", "You lift [src], allowing passage.") - src.density = 0 - spawn(200) - src.density = 1 - else - breaktape(/obj/item/soap, user)//cant be null, and can't be sharp. - -/obj/item/tape/attack_alien(mob/user as mob) - breaktape(/obj/item/wirecutters,user) - -/obj/item/tape/proc/breaktape(obj/item/W as obj, mob/user as mob) - if(user.a_intent == INTENT_HELP && ((!is_pointed(W) && src.allowed(user)))) - to_chat(user, "You can't break the [src] with that!") - return - user.visible_message("[user] breaks the [src]!", "You break the [src]!") - - var/dir[2] - var/icon_dir = src.icon_state - if(icon_dir == "[src.icon_base]_h") - dir[1] = EAST - dir[2] = WEST - if(icon_dir == "[src.icon_base]_v") - dir[1] = NORTH - dir[2] = SOUTH - - for(var/i=1;i<3;i++) - var/N = 0 - var/turf/cur = get_step(src,dir[i]) - while(N != 1) - N = 1 - for(var/obj/item/tape/P in cur) - if(P.icon_state == icon_dir) - N = 0 - qdel(P) - cur = get_step(cur,dir[i]) - - qdel(src) - return diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 3ffdfaaf751..2ae1a2d6e00 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -211,7 +211,7 @@ to_chat(user, "You remove the splint from [H]'s [limb].") return if(M == user) - user.visible_message("[user] starts to apply [src] to their [limb].", \ + user.visible_message("[user] starts to apply [src] to [user.p_their()] [limb].", \ "You start to apply [src] to your [limb].", \ "You hear something being wrapped.") if(!do_mob(user, H, self_delay)) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index b321721b639..5e8577d756a 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -229,8 +229,8 @@ hitsound = 'sound/weapons/bladeslice.ogg' /obj/item/toy/katana/suicide_act(mob/user) - var/dmsg = pick("[user] tries to stab \the [src] into their abdomen, but it shatters! They look as if they might die from the shame.","[user] tries to stab \the [src] into their abdomen, but \the [src] bends and breaks in half! They look as if they might die from the shame.","[user] tries to slice their own throat, but the plastic blade has no sharpness, causing them to lose their balance, slip over, and break their neck with a loud snap!") - user.visible_message("[dmsg] It looks like they are trying to commit suicide.") + var/dmsg = pick("[user] tries to stab \the [src] into [user.p_their()] abdomen, but it shatters! [user.p_they(TRUE)] look[user.p_s()] as if [user.p_they()] might die from the shame.","[user] tries to stab \the [src] into [user.p_their()] abdomen, but \the [src] bends and breaks in half! [user.p_they(TRUE)] look[user.p_s()] as if [user.p_they()] might die from the shame.","[user] tries to slice [user.p_their()] own throat, but the plastic blade has no sharpness, causing [user.p_them()] to lose [user.p_their()] balance, slip over, and break [user.p_their()] neck with a loud snap!") + user.visible_message("[dmsg] It looks like [user.p_theyre()] trying to commit suicide.") return (BRUTELOSS) @@ -531,7 +531,7 @@ obj/item/toy/cards/deck/attackby(obj/item/toy/cards/cardhand/C, mob/living/user, to_chat(user, "The hand of cards is stuck to your hand, you can't add it to the deck!") return cards += C.currenthand - user.visible_message("[user] puts their hand of cards in the deck.", "You put the hand of cards in the deck.") + user.visible_message("[user] puts [user.p_their()] hand of cards in the deck.", "You put the hand of cards in the deck.") qdel(C) else to_chat(user, "You can't mix cards from other decks.") @@ -610,7 +610,7 @@ obj/item/toy/cards/cardhand/Topic(href, href_list) C.apply_card_vars(C,O) C.pickup(cardUser) cardUser.put_in_any_hand_if_possible(C) - cardUser.visible_message("[cardUser] draws a card from \his hand.", "You take the [C.cardname] from your hand.") + cardUser.visible_message("[cardUser] draws a card from [cardUser.p_their()] hand.", "You take the [C.cardname] from your hand.") interact(cardUser) if(currenthand.len < 3) @@ -637,7 +637,7 @@ obj/item/toy/cards/cardhand/attackby(obj/item/toy/cards/singlecard/C, mob/living if(C.parentdeck == parentdeck) currenthand += C.cardname user.unEquip(C) - user.visible_message("[user] adds a card to their hand.", "You add the [C.cardname] to your hand.") + user.visible_message("[user] adds a card to [user.p_their()] hand.", "You add the [C.cardname] to your hand.") interact(user) if(currenthand.len > 4) icon_state = "[deckstyle]_hand5" @@ -677,7 +677,7 @@ obj/item/toy/cards/singlecard/examine(mob/user) if(ishuman(user)) var/mob/living/carbon/human/cardUser = user if(cardUser.get_item_by_slot(slot_l_hand) == src || cardUser.get_item_by_slot(slot_r_hand) == src) - cardUser.visible_message("[cardUser] checks \his card.", "The card reads: [src.cardname]") + cardUser.visible_message("[cardUser] checks [cardUser.p_their()] card.", "The card reads: [src.cardname]") else to_chat(cardUser, "You need to have the card in your hand to check it.") @@ -726,7 +726,7 @@ obj/item/toy/cards/singlecard/attackby(obj/item/I, mob/living/user, params) if(H.parentdeck == parentdeck) H.currenthand += cardname user.unEquip(src) - user.visible_message("[user] adds a card to \his hand.", "You add the [cardname] to your hand.") + user.visible_message("[user] adds a card to [user.p_their()] hand.", "You add the [cardname] to your hand.") H.interact(user) if(H.currenthand.len > 4) H.icon_state = "[deckstyle]_hand5" @@ -1367,7 +1367,7 @@ obj/item/toy/cards/deck/syndicate/black var/bullet_position = 1 /obj/item/toy/russian_revolver/suicide_act(mob/user) - user.visible_message("[user] quickly loads six bullets into [src]'s cylinder and points it at \his head before pulling the trigger! It looks like they are trying to commit suicide.") + user.visible_message("[user] quickly loads six bullets into [src]'s cylinder and points it at [user.p_their()] head before pulling the trigger! It looks like [user.p_theyre()] trying to commit suicide.") playsound(loc, 'sound/weapons/Gunshot.ogg', 50, 1) return (BRUTELOSS) @@ -1393,7 +1393,7 @@ obj/item/toy/cards/deck/syndicate/black if(!(user.has_organ("head"))) //For sanity to_chat(user, "Playing this game without a head would be classed as cheating.") return - user.visible_message("[user] points [src] at their head, ready to pull the trigger!") + user.visible_message("[user] points [src] at [user.p_their()] head, ready to pull the trigger!") if(do_after(user, 30, target = user)) if(bullet_position > 1) user.visible_message("*click*") @@ -1407,7 +1407,7 @@ obj/item/toy/cards/deck/syndicate/black user.apply_damage(200, BRUTE, "head", sharp = 1, used_weapon = "Self-inflicted gunshot wound to the head.") user.death() else - user.visible_message("[user] lowers [src] from their head.") + user.visible_message("[user] lowers [src] from [user.p_their()] head.") /obj/item/toy/russian_revolver/proc/spin_cylinder() bullet_position = rand(1,6) @@ -1662,7 +1662,7 @@ obj/item/toy/cards/deck/syndicate/black /obj/item/toy/eight_ball/attack_self(mob/user as mob) if(!cooldown) var/answer = pick(possible_answers) - user.visible_message("[user] focuses on their question and [use_action]...") + user.visible_message("[user] focuses on [user.p_their()] question and [use_action]...") user.visible_message("[bicon(src)] The [src] says \"[answer]\"") spawn(30) cooldown = 0 diff --git a/code/game/objects/items/weapons/cigs.dm b/code/game/objects/items/weapons/cigs.dm index 9a55bb8e562..73ff43abbde 100644 --- a/code/game/objects/items/weapons/cigs.dm +++ b/code/game/objects/items/weapons/cigs.dm @@ -54,7 +54,7 @@ LIGHTERS ARE IN LIGHTERS.DM if(istype(M) && M.on_fire) user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(M) - light("[user] coldly lights the [name] with the burning body of [M]. Clearly, they offer the warmest of regards...") + light("[user] coldly lights the [name] with the burning body of [M]. Clearly, [user.p_they()] offer[user.p_s()] the warmest of regards...") return 1 else return ..() @@ -73,31 +73,31 @@ LIGHTERS ARE IN LIGHTERS.DM else if(istype(W, /obj/item/lighter/zippo)) var/obj/item/lighter/zippo/Z = W if(Z.lit) - light("With a single flick of their wrist, [user] smoothly lights their [name] with their [W]. Damn they're cool.") + light("With a single flick of [user.p_their()] wrist, [user] smoothly lights [user.p_their()] [name] with [user.p_their()] [W]. Damn [user.p_theyre()] cool.") else if(istype(W, /obj/item/lighter)) var/obj/item/lighter/L = W if(L.lit) - light("After some fiddling, [user] manages to light their [name] with [W].") + light("After some fiddling, [user] manages to light [user.p_their()] [name] with [W].") else if(istype(W, /obj/item/match)) var/obj/item/match/M = W if(M.lit == 1) - light("[user] lights their [name] with their [W].") + light("[user] lights [user.p_their()] [name] with [user.p_their()] [W].") else if(istype(W, /obj/item/melee/energy/sword/saber)) var/obj/item/melee/energy/sword/saber/S = W if(S.active) - light("[user] swings their [W], barely missing their nose. They light their [name] in the process.") + light("[user] swings their [W], barely missing their nose. [user.p_they(TRUE)] light[user.p_s()] [user.p_their()] [name] in the process.") else if(istype(W, /obj/item/assembly/igniter)) - light("[user] fiddles with [W], and manages to light their [name].") + light("[user] fiddles with [W], and manages to light [user.p_their()] [name].") else if(istype(W, /obj/item/gun/magic/wand/fireball)) var/obj/item/gun/magic/wand/fireball/F = W if(F.charges) if(prob(50) || user.mind.assigned_role == "Wizard") - light("Holy shit, did [user] just manage to light their [name] with [W], with only moderate eyebrow singing?") + light("Holy shit, did [user] just manage to light [user.p_their()] [name] with [W], with only moderate eyebrow singing?") else to_chat(user, "Unsure which end of the wand is which, [user] fails to light [name] with [W].") explosion(user.loc, -1, 0, 2, 3, 0, flame_range = 2) diff --git a/code/game/objects/items/weapons/cosmetics.dm b/code/game/objects/items/weapons/cosmetics.dm index 02a01a25e83..ec8a2a5e325 100644 --- a/code/game/objects/items/weapons/cosmetics.dm +++ b/code/game/objects/items/weapons/cosmetics.dm @@ -63,8 +63,8 @@ to_chat(user, "You need to wipe off the old lipstick first!") return if(H == user) - user.visible_message("[user] does their lips with \the [src].", \ - "You take a moment to apply \the [src]. Perfect!") + user.visible_message("[user] does [user.p_their()] lips with [src].", \ + "You take a moment to apply [src]. Perfect!") H.lip_style = "lipstick" H.lip_color = colour H.update_body() @@ -106,11 +106,11 @@ to_chat(user, "Already clean-shaven.") return if(H == user) //shaving yourself - user.visible_message("[user] starts to shave their facial hair with \the [src].", \ + user.visible_message("[user] starts to shave [user.p_their()] facial hair with [src].", \ "You take a moment shave your facial hair with \the [src].") if(do_after(user, 50 * toolspeed, target = H)) - user.visible_message("[user] shaves \his facial hair clean with the [src].", \ - "You finish shaving with the [src]. Fast and clean!") + user.visible_message("[user] shaves [user.p_their()] facial hair clean with [src].", \ + "You finish shaving with [src]. Fast and clean!") C.f_style = "Shaved" H.update_fhair() playsound(src.loc, usesound, 20, 1) @@ -140,10 +140,10 @@ to_chat(user, "Your razor isn't going to cut through tentacles.") return if(H == user) //shaving yourself - user.visible_message("[user] starts to shave their head with \the [src].", \ + user.visible_message("[user] starts to shave [user.p_their()] head with [src].", \ "You start to shave your head with \the [src].") if(do_after(user, 50 * toolspeed, target = H)) - user.visible_message("[user] shaves \his head with \the [src].", \ + user.visible_message("[user] shaves [user.p_their()] head with [src].", \ "You finish shaving with \the [src].") C.h_style = "Skinhead" H.update_hair() diff --git a/code/game/objects/items/weapons/courtroom.dm b/code/game/objects/items/weapons/courtroom.dm index 160bdd9bb1e..d25b6f54d29 100644 --- a/code/game/objects/items/weapons/courtroom.dm +++ b/code/game/objects/items/weapons/courtroom.dm @@ -14,7 +14,7 @@ burn_state = FLAMMABLE /obj/item/gavelhammer/suicide_act(mob/user) - user.visible_message("[user] has sentenced \himself to death with the [src.name]! It looks like \he's trying to commit suicide.") + user.visible_message("[user] has sentenced [user.p_them()]self to death with the [src.name]! It looks like [user.p_theyre()] trying to commit suicide.") playsound(loc, 'sound/items/gavel.ogg', 50, 1, -1) return (BRUTELOSS) diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index 762b2151b9c..99a62b83131 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -96,7 +96,7 @@ if(istype(W, /obj/item/screwdriver)) if(bcell) - bcell.updateicon() + bcell.update_icon() bcell.loc = get_turf(src.loc) bcell = null to_chat(user, "You remove the cell from the [src].") @@ -276,7 +276,7 @@ icon_state = "defibpaddles[wielded]_cooldown" /obj/item/twohanded/shockpaddles/suicide_act(mob/user) - user.visible_message("[user] is putting the live paddles on \his chest! It looks like \he's trying to commit suicide.") + user.visible_message("[user] is putting the live paddles on [user.p_their()] chest! It looks like [user.p_theyre()] trying to commit suicide.") defib.deductcharge(revivecost) playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1) return (OXYLOSS) diff --git a/code/game/objects/items/weapons/dice.dm b/code/game/objects/items/weapons/dice.dm index 8ccfed1b517..d93ebcf3214 100644 --- a/code/game/objects/items/weapons/dice.dm +++ b/code/game/objects/items/weapons/dice.dm @@ -159,7 +159,7 @@ var/turf/bombturf = get_turf(src) var/area/A = get_area(bombturf) - bombers += "E20 detonated at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]) with a roll of [result]. Triggered by: [key_name(user)]" + investigate_log("E20 detonated at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]) with a roll of [result]. Triggered by: [key_name(user)]", INVESTIGATE_BOMB) message_admins("E20 detonated at [A.name] (JMP) with a roll of [result]. Triggered by: [key_name_admin(user)]") log_game("E20 detonated at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]) with a roll of [result]. Triggered by: [key_name(user)]") diff --git a/code/game/objects/items/weapons/dnascrambler.dm b/code/game/objects/items/weapons/dnascrambler.dm index cd1d79ae683..2866e8d06ec 100644 --- a/code/game/objects/items/weapons/dnascrambler.dm +++ b/code/game/objects/items/weapons/dnascrambler.dm @@ -25,11 +25,11 @@ if(ishuman(M)) var/mob/living/carbon/human/H = M if(NO_DNA in H.species.species_traits) - to_chat(user, "You failed to inject [M], as they have no DNA to scramble, nor flesh to inject.") + to_chat(user, "You failed to inject [M], as [M.p_they()] [M.p_have()] no DNA to scramble, nor flesh to inject.") return if(M == user) - user.visible_message("[user] injects \himself with [src]!") + user.visible_message("[user] injects [user.p_them()]self with [src]!") injected(user, user) else user.visible_message("[user] is trying to inject [M] with [src]!") diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index 6164ed01047..edf7e0fc32b 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -90,7 +90,7 @@ /obj/item/grenade/plastic/suicide_act(mob/user) message_admins("[key_name_admin(user)](?) (FLW) suicided with [src.name] at ([user.x],[user.y],[user.z] - JMP)",0,1) log_game("[key_name(user)] suicided with [name] at ([user.x],[user.y],[user.z])") - user.visible_message("[user] activates the [name] and holds it above \his head! It looks like \he's going out with a bang!") + user.visible_message("[user] activates the [name] and holds it above [user.p_their()] head! It looks like [user.p_theyre()] going out with a bang!") var/message_say = "FOR NO RAISIN!" if(user.mind) if(user.mind.special_role) diff --git a/code/game/objects/items/weapons/garrote.dm b/code/game/objects/items/weapons/garrote.dm index 7893a7898b8..4a01914a31a 100644 --- a/code/game/objects/items/weapons/garrote.dm +++ b/code/game/objects/items/weapons/garrote.dm @@ -75,7 +75,7 @@ return if(improvised && ((M.head && (M.head.flags_cover & HEADCOVERSMOUTH)) || (M.wear_mask && (M.wear_mask.flags_cover & MASKCOVERSMOUTH)))) // Improvised garrotes are blocked by mouth-covering items. - to_chat(user, "[M]'s neck is blocked by something they're wearing!") + to_chat(user, "[M]'s neck is blocked by something [M.p_theyre()] wearing!") if(strangling) to_chat(user, "You cannot use [src] on two people at once!") @@ -134,7 +134,7 @@ G = user.r_hand else - user.visible_message("[user] loses \his grip on [strangling]'s neck.", \ + user.visible_message("[user] loses [user.p_their()] grip on [strangling]'s neck.", \ "You lose your grip on [strangling]'s neck.") strangling = null @@ -144,7 +144,7 @@ return if(!G.affecting) - user.visible_message("[user] loses \his grip on [strangling]'s neck.", \ + user.visible_message("[user] loses [user.p_their()] grip on [strangling]'s neck.", \ "You lose your grip on [strangling]'s neck.") strangling = null @@ -167,6 +167,6 @@ /obj/item/twohanded/garrote/suicide_act(mob/user) - user.visible_message("[user] is wrapping the [src] around \his neck and pulling the handles! It looks like \he's trying to commit suicide.") + user.visible_message("[user] is wrapping the [src] around [user.p_their()] neck and pulling the handles! It looks like [user.p_theyre()] trying to commit suicide.") playsound(src.loc, 'sound/weapons/cablecuff.ogg', 15, 1, -1) return (OXYLOSS) diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index de85ec64a58..9e836fecc87 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -102,7 +102,7 @@ // This used to go before the assembly check, but that has absolutely zero to do with priming the damn thing. You could spam the admins with it. message_admins("[key_name_admin(usr)] has primed a [name] for detonation at [A.name] (JMP) [contained].") log_game("[key_name(usr)] has primed a [name] for detonation at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]) [contained].") - bombers += "[key_name(usr)] has primed a [name] for detonation at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z])[contained]." + investigate_log("[key_name(usr)] has primed a [name] for detonation at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z])[contained].", INVESTIGATE_BOMB) to_chat(user, "You prime the [name]! [det_time / 10] second\s!") playsound(user.loc, 'sound/weapons/armbomb.ogg', 60, 1) active = 1 diff --git a/code/game/objects/items/weapons/grenades/emgrenade.dm b/code/game/objects/items/weapons/grenades/emgrenade.dm index 44d21506ee6..5b6d585ef5f 100644 --- a/code/game/objects/items/weapons/grenades/emgrenade.dm +++ b/code/game/objects/items/weapons/grenades/emgrenade.dm @@ -7,5 +7,5 @@ /obj/item/grenade/empgrenade/prime() update_mob() - empulse(src, 4, 10) - qdel(src) \ No newline at end of file + empulse(src, 4, 10, 1) + qdel(src) diff --git a/code/game/objects/items/weapons/grenades/ghettobomb.dm b/code/game/objects/items/weapons/grenades/ghettobomb.dm index d0dc2c8fe06..ca6177c04fa 100644 --- a/code/game/objects/items/weapons/grenades/ghettobomb.dm +++ b/code/game/objects/items/weapons/grenades/ghettobomb.dm @@ -49,7 +49,8 @@ var/area/A = get_area(bombturf) message_admins("[ADMIN_LOOKUPFLW(user)] has primed a [name] for detonation at [ADMIN_COORDJMP(bombturf)].") - log_game("[key_name(usr)] has primed a [name] for detonation at [A.name] [COORD(bombturf)].") + log_game("[key_name(user)] has primed a [name] for detonation at [A.name] [COORD(bombturf)].") + investigate_log("[key_name(user)] has primed a [name] for detonation at [A.name] [COORD(bombturf)])", INVESTIGATE_BOMB) if(iscarbon(user)) var/mob/living/carbon/C = user C.throw_mode_on() diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm index c7ababde601..09fdfe5a27f 100644 --- a/code/game/objects/items/weapons/grenades/grenade.dm +++ b/code/game/objects/items/weapons/grenades/grenade.dm @@ -66,7 +66,7 @@ var/area/A = get_area(bombturf) message_admins("[key_name_admin(usr)] has primed a [name] for detonation at [A.name] (JMP)") log_game("[key_name(usr)] has primed a [name] for detonation at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z])") - bombers += "[key_name(usr)] has primed a [name] for detonation at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z])" + investigate_log("[key_name(usr)] has primed a [name] for detonation at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z])", INVESTIGATE_BOMB) if(iscarbon(user)) var/mob/living/carbon/C = user C.throw_mode_on() diff --git a/code/game/objects/items/weapons/holosign.dm b/code/game/objects/items/weapons/holosign.dm index 30deb5289a4..12767cb9563 100644 --- a/code/game/objects/items/weapons/holosign.dm +++ b/code/game/objects/items/weapons/holosign.dm @@ -1,53 +1,123 @@ /obj/item/holosign_creator name = "holographic sign projector" - desc = "A handy-dandy hologaphic projector that displays a janitorial sign." - icon = 'icons/obj/janitor.dmi' + desc = "A handy-dandy holographic projector that displays a janitorial sign." + icon = 'icons/obj/device.dmi' icon_state = "signmaker" item_state = "electronic" - force = 5 + force = 0 w_class = WEIGHT_CLASS_SMALL throwforce = 0 throw_speed = 3 throw_range = 7 origin_tech = "magnets=1;programming=3" + flags = NOBLUDGEON var/list/signs = list() - var/max_signs = 20 - -/obj/item/holosign_creator/Destroy() - QDEL_LIST(signs) - return ..() + var/max_signs = 10 + var/creation_time = 0 //time to create a holosign in deciseconds. + var/holosign_type = /obj/structure/holosign/wetsign + var/holocreator_busy = FALSE //to prevent placing multiple holo barriers at once /obj/item/holosign_creator/afterattack(atom/target, mob/user, flag) if(flag) + if(!check_allowed_items(target, 1)) + return var/turf/T = get_turf(target) - var/obj/effect/overlay/holograph/H = locate() in T + var/obj/structure/holosign/H = locate(holosign_type) in T if(H) - to_chat(user, "You use [src] to destroy [H].") - signs -= H + to_chat(user, "You use [src] to deactivate [H].") qdel(H) else - if(signs.len < max_signs) - H = new(get_turf(target)) - signs += H - to_chat(user, "You create \a [H] with [src].") - else - to_chat(user, "[src] is projecting at max capacity!") + if(!is_blocked_turf(T, TRUE)) //can't put holograms on a tile that has dense stuff + if(holocreator_busy) + to_chat(user, "[src] is busy creating a hologram.") + return + if(signs.len < max_signs) + playsound(src.loc, 'sound/machines/click.ogg', 20, 1) + if(creation_time) + holocreator_busy = TRUE + if(!do_after(user, creation_time, target = target)) + holocreator_busy = FALSE + return + holocreator_busy = FALSE + if(signs.len >= max_signs) + return + if(is_blocked_turf(T, TRUE)) //don't try to sneak dense stuff on our tile during the wait. + return + H = new holosign_type(get_turf(target), src) + to_chat(user, "You create [H] with [src].") + else + to_chat(user, "[src] is projecting at max capacity!") /obj/item/holosign_creator/attack(mob/living/carbon/human/M, mob/user) return /obj/item/holosign_creator/attack_self(mob/user) if(signs.len) - var/list/L = signs.Copy() - for(var/sign in L) - qdel(sign) - signs -= sign + for(var/H in signs) + qdel(H) to_chat(user, "You clear all active holograms.") -/obj/effect/overlay/holograph - name = "wet floor sign" - desc = "The words flicker as if they mean nothing." - icon = 'icons/obj/janitor.dmi' - icon_state = "holosign" - anchored = 1 - armor = list(melee = 0, bullet = 50, laser = 50, energy = 50, bomb = 0, bio = 0, rad = 0) + +/obj/item/holosign_creator/security + name = "security holobarrier projector" + desc = "A holographic projector that creates holographic security barriers." + icon_state = "signmaker_sec" + holosign_type = /obj/structure/holosign/barrier + creation_time = 30 + max_signs = 6 + +/obj/item/holosign_creator/engineering + name = "engineering holobarrier projector" + desc = "A holographic projector that creates holographic engineering barriers." + icon_state = "signmaker_engi" + holosign_type = /obj/structure/holosign/barrier/engineering + creation_time = 30 + max_signs = 6 + +/obj/item/holosign_creator/atmos + name = "ATMOS holofan projector" + desc = "A holographic projector that creates holographic barriers that prevent changes in atmosphere conditions." + icon_state = "signmaker_engi" + holosign_type = /obj/structure/holosign/barrier/atmos + creation_time = 0 + max_signs = 3 + +/obj/item/holosign_creator/cyborg + name = "Energy Barrier Projector" + desc = "A holographic projector that creates fragile energy fields." + creation_time = 15 + max_signs = 9 + holosign_type = /obj/structure/holosign/barrier/cyborg + var/shock = 0 + +/obj/item/holosign_creator/cyborg/attack_self(mob/user) + if(isrobot(user)) + var/mob/living/silicon/robot/R = user + + if(shock) + to_chat(user, "You clear all active holograms, and reset your projector to normal.") + holosign_type = /obj/structure/holosign/barrier/cyborg + creation_time = 5 + if(signs.len) + for(var/H in signs) + qdel(H) + shock = 0 + return + else if(R.emagged && !shock) + to_chat(user, "You clear all active holograms, and overload your energy projector!") + holosign_type = /obj/structure/holosign/barrier/cyborg/hacked + creation_time = 30 + if(signs.len) + for(var/H in signs) + qdel(H) + shock = 1 + return + else + if(signs.len) + for(var/H in signs) + qdel(H) + to_chat(user, "You clear all active holograms.") + if(signs.len) + for(var/H in signs) + qdel(H) + to_chat(user, "You clear all active holograms.") \ No newline at end of file diff --git a/code/game/objects/items/weapons/holy_weapons.dm b/code/game/objects/items/weapons/holy_weapons.dm index 2d0865faa36..ea799bbcd76 100644 --- a/code/game/objects/items/weapons/holy_weapons.dm +++ b/code/game/objects/items/weapons/holy_weapons.dm @@ -13,7 +13,7 @@ var/list/fluff_transformations = list() //does it have any special transformations only accessible to it? Should only be subtypes of /obj/item/nullrod /obj/item/nullrod/suicide_act(mob/user) - user.visible_message("[user] is killing \himself with \the [src.name]! It looks like \he's trying to get closer to god!") + user.visible_message("[user] is killing [user.p_them()]self with \the [src.name]! It looks like [user.p_theyre()] trying to get closer to god!") return (BRUTELOSS|FIRELOSS) /obj/item/nullrod/attack(mob/M, mob/living/carbon/user) @@ -575,7 +575,7 @@ if(missionary in viewers(target)) //missionary must maintain line of sight to target, but the target doesn't necessary need to be able to see the missionary do_convert(target, missionary) else - to_chat(missionary, "You lost sight of the target before they could be converted!") + to_chat(missionary, "You lost sight of the target before [target.p_they()] could be converted!") faith -= 25 //they escaped, so you only lost a little faith (to prevent spamming) else //the do_after failed, probably because you moved or dropped the staff to_chat(missionary, "Your concentration was broken!") @@ -585,12 +585,12 @@ if(!target || !ishuman(target) || !missionary || !ishuman(missionary)) return if(ismindslave(target) || target.mind.zealot_master) //mindslaves and zealots override the staff because the staff is just a temporary mindslave - to_chat(missionary, "Your faith is strong, but their mind is already slaved to someone else's ideals. Perhaps an inquisition would reveal more...") + to_chat(missionary, "Your faith is strong, but [target.p_their()] mind is already slaved to someone else's ideals. Perhaps an inquisition would reveal more...") faith -= 25 //same faith cost as losing sight of them mid-conversion, but did you just find someone who can lead you to a fellow traitor? return if(ismindshielded(target)) faith -= 75 - to_chat(missionary, "Your faith is strong, but their mind remains closed to your ideals. Your resolve helps you retain a bit of faith though.") + to_chat(missionary, "Your faith is strong, but [target.p_their()] mind remains closed to your ideals. Your resolve helps you retain a bit of faith though.") return else if(target.mind.assigned_role == "Psychiatrist" || target.mind.assigned_role == "Librarian") //fancy book lernin helps counter religion (day 0 job love, what madness!) if(prob(35)) //35% chance to fail @@ -602,7 +602,7 @@ faith -= 100 else if(target.mind.assigned_role == "Civilian") if(prob(55)) //55% chance to take LESS faith than normal, because civies are stupid and easily manipulated - to_chat(missionary, "Your message seems to resound well with [target]; converting them was much easier than expected.") + to_chat(missionary, "Your message seems to resound well with [target]; converting [target.p_them()] was much easier than expected.") faith -= 50 else //45% chance to take the normal 100 faith cost to_chat(missionary, "You successfully convert [target] to your cause. The following grows because of your faith!") diff --git a/code/game/objects/items/weapons/implants/implant_misc.dm b/code/game/objects/items/weapons/implants/implant_misc.dm index a657d08847b..9c4049e8904 100644 --- a/code/game/objects/items/weapons/implants/implant_misc.dm +++ b/code/game/objects/items/weapons/implants/implant_misc.dm @@ -58,7 +58,7 @@ /obj/item/implant/emp/activate() uses-- - empulse(imp_in, 3, 5) + empulse(imp_in, 3, 5, 1) if(!uses) qdel(src) diff --git a/code/game/objects/items/weapons/implants/implant_traitor.dm b/code/game/objects/items/weapons/implants/implant_traitor.dm index 68ef65664c7..58f78a7be4e 100644 --- a/code/game/objects/items/weapons/implants/implant_traitor.dm +++ b/code/game/objects/items/weapons/implants/implant_traitor.dm @@ -55,11 +55,11 @@ ticker.mode.implanter[ref] = implanters ticker.mode.traitors += H.mind H.mind.special_role = SPECIAL_ROLE_TRAITOR - to_chat(H, "You're now completely loyal to [user.name]! You now must lay down your life to protect them and assist in their goals at any cost.") + to_chat(H, "You're now completely loyal to [user.name]! You now must lay down your life to protect [user.p_them()] and assist in [user.p_their()] goals at any cost.") var/datum/objective/protect/mindslave/MS = new MS.owner = H.mind MS.target = user.mind - MS.explanation_text = "Obey every order from and protect [user.real_name], the [user.mind.assigned_role=="MODE" ? (user.mind.special_role) : (user.mind.assigned_role)]." + MS.explanation_text = "Obey every order from and protect [user.real_name], the [user.mind.assigned_role == user.mind.special_role ? (user.mind.special_role) : (user.mind.assigned_role)]." H.mind.objectives += MS for(var/datum/objective/objective in H.mind.objectives) to_chat(H, "Objective #1: [objective.explanation_text]") diff --git a/code/game/objects/items/weapons/implants/implantchair.dm b/code/game/objects/items/weapons/implants/implantchair.dm index da6e3b95968..314077db68e 100644 --- a/code/game/objects/items/weapons/implants/implantchair.dm +++ b/code/game/objects/items/weapons/implants/implantchair.dm @@ -79,7 +79,7 @@ return var/mob/M = G.affecting if(M.buckled_mob) - to_chat(usr, "[M] will not fit into [src] because they have a slime latched onto their head.") + to_chat(usr, "[M] will not fit into [src] because [M.p_they()] [M.p_have()] a slime latched onto [M.p_their()] head.") return if(put_mob(M)) qdel(G) diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm index 93103568f58..668cc74ac73 100644 --- a/code/game/objects/items/weapons/kitchen.dm +++ b/code/game/objects/items/weapons/kitchen.dm @@ -113,9 +113,9 @@ sharp = 1 /obj/item/kitchen/knife/suicide_act(mob/user) - user.visible_message(pick("[user] is slitting \his wrists with the [src.name]! It looks like \he's trying to commit suicide.", \ - "[user] is slitting \his throat with the [src.name]! It looks like \he's trying to commit suicide.", \ - "[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.")) + user.visible_message(pick("[user] is slitting [user.p_their()] wrists with the [src.name]! It looks like [user.p_theyre()] trying to commit suicide.", \ + "[user] is slitting [user.p_their()] throat with the [src.name]! It looks like [user.p_theyre()] trying to commit suicide.", \ + "[user] is slitting [user.p_their()] stomach open with the [name]! It looks like [user.p_theyre()] trying to commit seppuku.")) return (BRUTELOSS) /obj/item/kitchen/knife/plastic diff --git a/code/game/objects/items/weapons/legcuffs.dm b/code/game/objects/items/weapons/legcuffs.dm index e6ba57ff8da..047a75bd634 100644 --- a/code/game/objects/items/weapons/legcuffs.dm +++ b/code/game/objects/items/weapons/legcuffs.dm @@ -33,7 +33,7 @@ return ..() /obj/item/restraints/legcuffs/beartrap/suicide_act(mob/user) - user.visible_message("[user] is sticking \his head in the [src.name]! It looks like \he's trying to commit suicide.") + user.visible_message("[user] is sticking [user.p_their()] head in the [name]! It looks like [user.p_theyre()] trying to commit suicide.") playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1) return (BRUTELOSS) diff --git a/code/game/objects/items/weapons/lighters.dm b/code/game/objects/items/weapons/lighters.dm index a620f3fdb5c..94e97ea7c20 100644 --- a/code/game/objects/items/weapons/lighters.dm +++ b/code/game/objects/items/weapons/lighters.dm @@ -57,7 +57,7 @@ if(affecting.receive_damage( 0, 5 )) //INFERNO H.UpdateDamageIcon() H.updatehealth() - user.visible_message("After a few attempts, [user] manages to light the [src], they however burn their finger in the process.") + user.visible_message("After a few attempts, [user] manages to light the [src], [user.p_they()] however burn[user.p_s()] [user.p_their()] finger in the process.") set_light(2) processing_objects.Add(src) @@ -70,7 +70,7 @@ force = 0 attack_verb = null //human_defense.dm takes care of it if(istype(src, /obj/item/lighter/zippo) ) - user.visible_message("You hear a quiet click, as [user] shuts off [src] without even looking at what they're doing. Wow.") + user.visible_message("You hear a quiet click, as [user] shuts off [src] without even looking at what [user.p_theyre()] doing. Wow.") playsound(src.loc, 'sound/items/ZippoClose.ogg', 25, 1) else user.visible_message("[user] quietly shuts off the [src].") @@ -95,7 +95,7 @@ cig.attackby(src, user) else if(istype(src, /obj/item/lighter/zippo)) - cig.light("[user] whips the [name] out and holds it for [M]. Their arm is as steady as the unflickering flame they light \the [cig] with.") + cig.light("[user] whips the [name] out and holds it for [M]. [user.p_their(TRUE)] arm is as steady as the unflickering flame [user.p_they()] light[user.p_s()] \the [cig] with.") else cig.light("[user] holds the [name] out for [M], and lights the [cig.name].") M.update_inv_wear_mask() diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index 6702f893d50..2dcbef5b1a5 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -14,8 +14,8 @@ var/colormap = list(red=LIGHT_COLOR_RED, blue=LIGHT_COLOR_LIGHTBLUE, green=LIGHT_COLOR_GREEN, purple=LIGHT_COLOR_PURPLE, rainbow=LIGHT_COLOR_WHITE) /obj/item/melee/energy/suicide_act(mob/user) - user.visible_message(pick("[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.", \ - "[user] is falling on the [src.name]! It looks like \he's trying to commit suicide.")) + user.visible_message(pick("[user] is slitting [user.p_their()] stomach open with the [name]! It looks like [user.p_theyre()] trying to commit seppuku.", \ + "[user] is falling on the [name]! It looks like [user.p_theyre()] trying to commit suicide.")) return (BRUTELOSS|FIRELOSS) /obj/item/melee/energy/attack_self(mob/living/carbon/user) @@ -80,7 +80,7 @@ light_color = LIGHT_COLOR_WHITE /obj/item/melee/energy/axe/suicide_act(mob/user) - user.visible_message("[user] swings the [src.name] towards /his head! It looks like \he's trying to commit suicide.") + user.visible_message("[user] swings the [name] towards [user.p_their()] head! It looks like [user.p_theyre()] trying to commit suicide.") return (BRUTELOSS|FIRELOSS) /obj/item/melee/energy/sword diff --git a/code/game/objects/items/weapons/melee/misc.dm b/code/game/objects/items/weapons/melee/misc.dm index 267c2deda5e..a19df11e790 100644 --- a/code/game/objects/items/weapons/melee/misc.dm +++ b/code/game/objects/items/weapons/melee/misc.dm @@ -17,7 +17,7 @@ /obj/item/melee/chainofcommand/suicide_act(mob/user) - to_chat(viewers(user), "[user] is strangling \himself with the [src.name]! It looks like \he's trying to commit suicide.") + to_chat(viewers(user), "[user] is strangling [user.p_them()]self with the [src.name]! It looks like [user.p_theyre()] trying to commit suicide.") return (OXYLOSS) /obj/item/melee/rapier diff --git a/code/game/objects/items/weapons/pneumaticCannon.dm b/code/game/objects/items/weapons/pneumaticCannon.dm index 84b8d55a915..64f554682fc 100644 --- a/code/game/objects/items/weapons/pneumaticCannon.dm +++ b/code/game/objects/items/weapons/pneumaticCannon.dm @@ -103,7 +103,7 @@ to_chat(user, "\The [src] lets out a weak hiss and doesn't react!") return if(user && (CLUMSY in user.mutations) && prob(75)) - user.visible_message("[user] loses their grip on [src], causing it to go off!", "[src] slips out of your hands and goes off!") + user.visible_message("[user] loses [user.p_their()] grip on [src], causing it to go off!", "[src] slips out of your hands and goes off!") user.drop_item() if(prob(10)) target = get_turf(user) diff --git a/code/game/objects/items/weapons/power_cells.dm b/code/game/objects/items/weapons/power_cells.dm deleted file mode 100644 index 5b2d05491bf..00000000000 --- a/code/game/objects/items/weapons/power_cells.dm +++ /dev/null @@ -1,211 +0,0 @@ -/obj/item/stock_parts/cell - name = "power cell" - desc = "A rechargable electrochemical power cell." - icon = 'icons/obj/power.dmi' - icon_state = "cell" - item_state = "cell" - origin_tech = "powerstorage=1" - force = 5 - throwforce = 5 - throw_speed = 2 - throw_range = 5 - w_class = WEIGHT_CLASS_SMALL - var/charge = 0 // note %age conveted to actual charge in New - var/maxcharge = 1000 - materials = list(MAT_METAL=700, MAT_GLASS=50) - var/rigged = 0 // true if rigged to explode - var/chargerate = 100 //how much power is given every tick in a recharger - var/self_recharge = 0 //does it self recharge, over time, or not? - var/grown_battery = FALSE // If it's a grown that acts as a battery, add a wire overlay to it. - -/obj/item/stock_parts/cell/New() - ..() - processing_objects.Add(src) - charge = maxcharge - updateicon() - -/obj/item/stock_parts/cell/Destroy() - processing_objects.Remove(src) - return ..() - -/obj/item/stock_parts/cell/vv_edit_var(var_name, var_value) - switch(var_name) - if("self_recharge") - if(var_value) - processing_objects.Add(src) - else - processing_objects.Remove(src) - . = ..() - -/obj/item/stock_parts/cell/suicide_act(mob/user) - to_chat(viewers(user), "[user] is licking the electrodes of the [src.name]! It looks like \he's trying to commit suicide.") - return (FIRELOSS) - -/obj/item/stock_parts/cell/process() - if(self_recharge) - give(chargerate * 0.25) - else - return PROCESS_KILL - -/obj/item/stock_parts/cell/proc/updateicon() - overlays.Cut() - if(grown_battery) - overlays += image('icons/obj/power.dmi', "grown_wires") - if(charge < 0.01) - return - else if(charge/maxcharge >=0.995) - overlays += image('icons/obj/power.dmi', "cell-o2") - else - overlays += image('icons/obj/power.dmi', "cell-o1") - -/obj/item/stock_parts/cell/crap - name = "\improper Nanotrasen brand rechargable AA battery" - desc = "You can't top the plasma top." //TOTALLY TRADEMARK INFRINGEMENT - maxcharge = 500 - materials = list(MAT_GLASS=40) - rating = 2 - -/obj/item/stock_parts/cell/crap/empty/New() - ..() - charge = 0 - -/obj/item/stock_parts/cell/secborg - name = "\improper Security borg rechargable D battery" - origin_tech = null - maxcharge = 600 //600 max charge / 100 charge per shot = six shots - materials = list(MAT_GLASS=40) - rating = 2.5 - -/obj/item/stock_parts/cell/secborg/empty/New() - ..() - charge = 0 - -/obj/item/stock_parts/cell/high - name = "high-capacity power cell" - origin_tech = "powerstorage=2" - icon_state = "hcell" - maxcharge = 10000 - materials = list(MAT_GLASS=60) - rating = 3 - chargerate = 1500 - -/obj/item/stock_parts/cell/high/plus - name = "high-capacity power cell+" - desc = "Where did these come from?" - icon_state = "h+cell" - maxcharge = 15000 - chargerate = 2250 - -/obj/item/stock_parts/cell/high/empty/New() - ..() - charge = 0 - -/obj/item/stock_parts/cell/super - name = "super-capacity power cell" - origin_tech = "powerstorage=3;materials=3" - icon_state = "scell" - maxcharge = 20000 - materials = list(MAT_GLASS=300) - rating = 4 - chargerate = 2000 - -/obj/item/stock_parts/cell/super/empty/New() - ..() - charge = 0 - -/obj/item/stock_parts/cell/hyper - name = "hyper-capacity power cell" - origin_tech = "powerstorage=4;engineering=4;materials=4" - icon_state = "hpcell" - maxcharge = 30000 - materials = list(MAT_GLASS=400) - rating = 5 - chargerate = 3000 - -/obj/item/stock_parts/cell/hyper/empty/New() - ..() - charge = 0 - -/obj/item/stock_parts/cell/bluespace - name = "bluespace power cell" - origin_tech = "powerstorage=5;bluespace=4;materials=4;engineering=4" - icon_state = "bscell" - maxcharge = 40000 - materials = list(MAT_GLASS=600) - rating = 6 - chargerate = 4000 - -/obj/item/stock_parts/cell/bluespace/empty/New() - ..() - charge = 0 - -/obj/item/stock_parts/cell/infinite - name = "infinite-capacity power cell!" - icon_state = "icell" - origin_tech = "powerstorage=7" - maxcharge = 30000 - materials = list(MAT_GLASS=1000) - rating = 6 - chargerate = 30000 - -/obj/item/stock_parts/cell/infinite/use() - return 1 - -/obj/item/stock_parts/cell/potato - name = "potato battery" - desc = "A rechargable starch based power cell." - icon = 'icons/obj/hydroponics/harvest.dmi' - icon_state = "potato" - origin_tech = "powerstorage=1;biotech=1" - charge = 100 - maxcharge = 300 - materials = list() - rating = 1 - grown_battery = TRUE //it has the overlays for wires - -/obj/item/stock_parts/cell/high/slime - name = "charged slime core" - desc = "A yellow slime core infused with plasma, it crackles with power." - origin_tech = "powerstorage=5;biotech=4" - icon = 'icons/mob/slimes.dmi' - icon_state = "yellow slime extract" - materials = list() - self_recharge = 1 // Infused slime cores self-recharge, over time - chargerate = 500 - -/obj/item/stock_parts/cell/pulse //200 pulse shots - name = "pulse rifle power cell" - maxcharge = 40000 - rating = 3 - chargerate = 1500 - -/obj/item/stock_parts/cell/pulse/carbine //25 pulse shots - name = "pulse carbine power cell" - maxcharge = 5000 - -/obj/item/stock_parts/cell/pulse/pistol //10 pulse shots - name = "pulse pistol power cell" - maxcharge = 2000 - -/obj/item/stock_parts/cell/ninja - name = "spider-clan power cell" - desc = "A standard ninja-suit power cell." - maxcharge = 10000 - rating = 3 - materials = list(MAT_GLASS=60) - -/obj/item/stock_parts/cell/emproof - name = "\improper EMP-proof cell" - desc = "An EMP-proof cell." - maxcharge = 500 - rating = 2 - -/obj/item/stock_parts/cell/emproof/empty/New() - ..() - charge = 0 - -/obj/item/stock_parts/cell/emproof/emp_act(severity) - return - -/obj/item/stock_parts/cell/emproof/corrupt() - return diff --git a/code/game/objects/items/weapons/powerfist.dm b/code/game/objects/items/weapons/powerfist.dm index 7b6dfeb3a75..a2315544d35 100644 --- a/code/game/objects/items/weapons/powerfist.dm +++ b/code/game/objects/items/weapons/powerfist.dm @@ -83,7 +83,7 @@ user.do_attack_animation(target) target.apply_damage(force * fisto_setting, BRUTE) - target.visible_message("[user]'s powerfist lets out a loud hiss as they punch [target.name]!", \ + target.visible_message("[user]'s powerfist lets out a loud hiss as [user.p_they()] punch[user.p_es()] [target.name]!", \ "You cry out in pain as [user]'s punch flings you backwards!") new /obj/effect/temp_visual/kinetic_blast(target.loc) playsound(loc, 'sound/weapons/resonator_blast.ogg', 50, 1) diff --git a/code/game/objects/items/weapons/scissors.dm b/code/game/objects/items/weapons/scissors.dm index 677b2d99168..6ff1fbe95b0 100644 --- a/code/game/objects/items/weapons/scissors.dm +++ b/code/game/objects/items/weapons/scissors.dm @@ -114,7 +114,7 @@ playsound(loc, 'sound/goonstation/misc/Scissor.ogg', 100, 1) if(do_after(user, 50 * toolspeed, target = H)) playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1) - user.visible_message("[user] abruptly stops cutting [M]'s hair and slices their throat!", "You stop cutting [M]'s hair and slice their throat!") //Just a little off the top. + user.visible_message("[user] abruptly stops cutting [M]'s hair and slices [M.p_their()] throat!", "You stop cutting [M]'s hair and slice [M.p_their()] throat!") //Just a little off the top. H.AdjustLoseBreath(10) //30 Oxy damage over time H.apply_damage(18, BRUTE, "head", sharp =1, used_weapon = "scissors") var/turf/location = get_turf(src) diff --git a/code/game/objects/items/weapons/shards.dm b/code/game/objects/items/weapons/shards.dm index 6170eae96a7..b0d7477bbbb 100644 --- a/code/game/objects/items/weapons/shards.dm +++ b/code/game/objects/items/weapons/shards.dm @@ -16,8 +16,8 @@ armor = list("melee" = 100, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0) /obj/item/shard/suicide_act(mob/user) - to_chat(viewers(user), pick("[user] is slitting \his wrists with \the [src]! It looks like \he's trying to commit suicide.", - "[user] is slitting \his throat with \the [src]! It looks like \he's trying to commit suicide.")) + to_chat(viewers(user), pick("[user] is slitting [user.p_their()] wrists with [src]! It looks like [user.p_theyre()] trying to commit suicide.", + "[user] is slitting [user.p_their()] throat with [src]! It looks like [user.p_theyre()] trying to commit suicide.")) return (BRUTELOSS) /obj/item/shard/New() diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index 9ef11ec3b2d..85a0e679bb6 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -49,10 +49,10 @@ if(istype(W, /obj/item/storage/backpack/holding)) var/response = alert(user, "Are you sure you want to put the bag of holding inside another bag of holding?","Are you sure you want to die?","Yes","No") if(response == "Yes") - user.visible_message("[user] grins as \he begins to put a Bag of Holding into a Bag of Holding!", "You begin to put the Bag of Holding into the Bag of Holding!") + user.visible_message("[user] grins as [user.p_they()] begin[user.p_s()] to put a Bag of Holding into a Bag of Holding!", "You begin to put the Bag of Holding into the Bag of Holding!") if(do_after(user, 30, target=src)) investigate_log("has become a singularity. Caused by [user.key]","singulo") - user.visible_message("[user] erupts in evil laughter as \he puts the Bag of Holding into another Bag of Holding!", "You can't help but laugh wildly as you put the Bag of Holding into another Bag of Holding, complete darkness surrounding you."," You hear the sound of scientific evil brewing! ") + user.visible_message("[user] erupts in evil laughter as [user.p_they()] put[user.p_s()] the Bag of Holding into another Bag of Holding!", "You can't help but laugh wildly as you put the Bag of Holding into another Bag of Holding, complete darkness surrounding you."," You hear the sound of scientific evil brewing! ") qdel(W) var/obj/singularity/singulo = new /obj/singularity(get_turf(user)) singulo.energy = 300 //To give it a small boost diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index 2b67373d9c4..26793a8165b 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -40,7 +40,7 @@ cant_hold = list(/obj/item/disk/nuclear) /obj/item/storage/bag/trash/suicide_act(mob/user) - user.visible_message("[user] puts the [src.name] over their head and starts chomping at the insides! Disgusting!") + user.visible_message("[user] puts the [name] over [user.p_their()] head and starts chomping at the insides! Disgusting!") playsound(loc, 'sound/items/eatfood.ogg', 50, 1, -1) return (TOXLOSS) @@ -453,9 +453,9 @@ sleep(rand(2,4)) if( droppedSomething ) if( foundtable ) - user.visible_message("[user] unloads their service tray.") + user.visible_message("[user] unloads [user.p_their()] service tray.") else - user.visible_message("[user] drops all the items on their tray.") + user.visible_message("[user] drops all the items on [user.p_their()] tray.") return ..() diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index aa723cba8c0..9d4481952f5 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -58,8 +58,8 @@ /obj/item/stack/cable_coil, /obj/item/t_scanner, /obj/item/analyzer, - /obj/item/taperoll/engineering, - /obj/item/extinguisher/mini) + /obj/item/extinguisher/mini, + /obj/item/holosign_creator) /obj/item/storage/belt/utility/full/New() ..() @@ -192,7 +192,7 @@ /obj/item/melee/baton, /obj/item/melee/classic_baton, /obj/item/flashlight/seclite, - /obj/item/taperoll/police, + /obj/item/holosign_creator/security, /obj/item/melee/classic_baton/telescopic, /obj/item/restraints/legcuffs/bola) diff --git a/code/game/objects/items/weapons/storage/bible.dm b/code/game/objects/items/weapons/storage/bible.dm index 4d56e2a22ad..03787385e1c 100644 --- a/code/game/objects/items/weapons/storage/bible.dm +++ b/code/game/objects/items/weapons/storage/bible.dm @@ -68,7 +68,7 @@ if(M.stat !=2) /*if((M.mind in ticker.mode.cult) && (prob(20))) to_chat(M, "The power of [src.deity_name] clears your mind of heresy!") - to_chat(user, "You see how [M]'s eyes become clear, the cult no longer holds control over him!") + to_chat(user, "You see how [M]'s eyes become clear, the cult no longer holds control over [M.p_them()]!") ticker.mode.remove_cultist(M.mind)*/ if((istype(M, /mob/living/carbon/human) && prob(60))) bless(M) diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index da9edab2833..31cc7a1faf2 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -16,7 +16,7 @@ var/hitcost = 1000 /obj/item/melee/baton/suicide_act(mob/user) - user.visible_message("[user] is putting the live [name] in \his mouth! It looks like \he's trying to commit suicide.") + user.visible_message("[user] is putting the live [name] in [user.p_their()] mouth! It looks like [user.p_theyre()] trying to commit suicide.") return (FIRELOSS) /obj/item/melee/baton/New() @@ -78,7 +78,7 @@ else if(istype(W, /obj/item/screwdriver)) if(bcell) - bcell.updateicon() + bcell.update_icon() bcell.loc = get_turf(src.loc) bcell = null to_chat(user, "You remove the cell from the [src].") @@ -104,7 +104,7 @@ /obj/item/melee/baton/attack(mob/M, mob/living/user) if(status && (CLUMSY in user.mutations) && prob(50)) - user.visible_message("[user] accidentally hits themself with [src]!", \ + user.visible_message("[user] accidentally hits [user.p_them()]self with [src]!", \ "You accidentally hit yourself with [src]!") user.Weaken(stunforce*3) deductcharge(hitcost) @@ -175,7 +175,7 @@ user.Weaken(stunforce) user.stuttering = stunforce deductcharge(hitcost) - user.visible_message("[user] shocks themself while attempting to wash the active [src]!", \ + user.visible_message("[user] shocks [user.p_them()]self while attempting to wash the active [src]!", \ "You unwisely attempt to wash [src] while it's still on.") playsound(src, "sparks", 50, 1) return 1 diff --git a/code/game/objects/items/weapons/tape.dm b/code/game/objects/items/weapons/tape.dm index 38a16be40ce..57e0290346e 100644 --- a/code/game/objects/items/weapons/tape.dm +++ b/code/game/objects/items/weapons/tape.dm @@ -14,11 +14,11 @@ /obj/item/stack/tape_roll/attack(mob/living/carbon/human/M as mob, mob/living/user as mob) if(M.wear_mask) - to_chat(user, "Remove their mask first!") + to_chat(user, "Remove [M.p_their()] mask first!") else if(amount < 2) to_chat(user, "You'll need more tape for this!") else if(!M.check_has_mouth()) - to_chat(user, "They have no mouth to tape over!") + to_chat(user, "[M.p_they(TRUE)] [M.p_have()] no mouth to tape over!") else if(M == user) to_chat(user, "You try to tape your own mouth shut.") @@ -29,7 +29,7 @@ if(M == user) to_chat(user, "You cover your own mouth with a piece of duct tape.") else - to_chat(user, "You cover [M]'s mouth with a piece of duct tape. That will shut them up!") + to_chat(user, "You cover [M]'s mouth with a piece of duct tape. That will shut [M.p_them()] up!") M.visible_message("[user] tapes [M]'s mouth shut!") var/obj/item/clothing/mask/muzzle/G = new /obj/item/clothing/mask/muzzle/tapegag M.equip_to_slot(G, slot_wear_mask) diff --git a/code/game/objects/items/weapons/teleprod.dm b/code/game/objects/items/weapons/teleprod.dm index 8c942b5e0c5..1fe31f8a4f7 100644 --- a/code/game/objects/items/weapons/teleprod.dm +++ b/code/game/objects/items/weapons/teleprod.dm @@ -10,7 +10,7 @@ ..() if(status) if((CLUMSY in user.mutations) && prob(50)) - user.visible_message("[user] accidentally hits themself with [src]!", \ + user.visible_message("[user] accidentally hits [user.p_them()]self with [src]!", \ "You accidentally hit yourself with [src]!") user.Weaken(stunforce*3) deductcharge(hitcost) diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 44cfc648757..867cc473932 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -28,7 +28,7 @@ toolspeed = 1 /obj/item/wrench/suicide_act(mob/user) - user.visible_message("[user] is beating themselves to death with [src]! It looks like they're trying to commit suicide!") + user.visible_message("[user] is beating [user.p_them()]self to death with [src]! It looks like [user.p_theyre()] trying to commit suicide!") playsound(loc, 'sound/weapons/genhit.ogg', 50, 1, -1) return (BRUTELOSS) @@ -73,7 +73,7 @@ user.put_in_active_hand(s_drill) /obj/item/wrench/power/suicide_act(mob/user) - user.visible_message("[user] is pressing [src] against their head! It looks like they're trying to commit suicide!") + user.visible_message("[user] is pressing [src] against [user.p_their()] head! It looks like [user.p_theyre()] trying to commit suicide!") return (BRUTELOSS) /obj/item/wrench/medical @@ -86,7 +86,7 @@ attack_verb = list("wrenched", "medicaled", "tapped", "jabbed", "whacked") /obj/item/wrench/medical/suicide_act(mob/user) - user.visible_message("[user] is praying to the medical wrench to take their soul. It looks like they're trying to commit suicide!") + user.visible_message("[user] is praying to the medical wrench to take [user.p_their()] soul. It looks like [user.p_theyre()] trying to commit suicide!") // TODO Make them glow with the power of the M E D I C A L W R E N C H // during their ascension @@ -139,7 +139,7 @@ toolspeed = 0.5 /obj/item/screwdriver/suicide_act(mob/user) - user.visible_message("[user] is stabbing [src] into their [pick("temple", "heart")]! It looks like they're trying to commit suicide!") + user.visible_message("[user] is stabbing [src] into [user.p_their()] [pick("temple", "heart")]! It looks like [user.p_theyre()] trying to commit suicide!") return(BRUTELOSS) /obj/item/screwdriver/New(loc, var/param_color = null) @@ -192,7 +192,7 @@ toolspeed = 0.25 /obj/item/screwdriver/power/suicide_act(mob/user) - user.visible_message("[user] is putting [src] to their temple. It looks like they're trying to commit suicide!") + user.visible_message("[user] is putting [src] to [user.p_their()] temple. It looks like [user.p_theyre()] trying to commit suicide!") return(BRUTELOSS) /obj/item/screwdriver/power/attack_self(mob/user) @@ -247,7 +247,7 @@ ..() /obj/item/wirecutters/suicide_act(mob/user) - user.visible_message("[user] is cutting at their arteries with [src]! It looks like they're trying to commit suicide!") + user.visible_message("[user] is cutting at [user.p_their()] arteries with [src]! It looks like [user.p_theyre()] trying to commit suicide!") playsound(loc, usesound, 50, 1, -1) return (BRUTELOSS) @@ -281,7 +281,7 @@ toolspeed = 0.25 /obj/item/wirecutters/power/suicide_act(mob/user) - user.visible_message("[user] is wrapping \the [src] around their neck. It looks like they're trying to rip their head off!") + user.visible_message("[user] is wrapping \the [src] around [user.p_their()] neck. It looks like [user.p_theyre()] trying to rip [user.p_their()] head off!") playsound(loc, 'sound/items/jaws_cut.ogg', 50, 1, -1) if(ishuman(user)) var/mob/living/carbon/human/H = user @@ -338,7 +338,7 @@ to_chat(user, "It contains [get_fuel()] unit\s of fuel out of [max_fuel].") /obj/item/weldingtool/suicide_act(mob/user) - user.visible_message("[user] welds their every orifice closed! It looks like they're trying to commit suicide!") + user.visible_message("[user] welds [user.p_their()] every orifice closed! It looks like [user.p_theyre()] trying to commit suicide!") return (FIRELOSS) /obj/item/weldingtool/proc/update_torch() @@ -699,7 +699,7 @@ obj/item/weldingtool/experimental/process() var/airlock_open_time = 100 // Time required to open powered airlocks /obj/item/crowbar/power/suicide_act(mob/user) - user.visible_message("[user] is putting their head in [src], it looks like they're trying to commit suicide!") + user.visible_message("[user] is putting [user.p_their()] head in [src]. It looks like [user.p_theyre()] trying to commit suicide!") playsound(loc, 'sound/items/jaws_pry.ogg', 50, 1, -1) return (BRUTELOSS) diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index 53a85266b08..009b14f0722 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -741,7 +741,7 @@ if(charged) charged-- Z.take_organ_damage(0, 30) - user.visible_message("[user] slams the charged axe into [Z.name] with all their might!") + user.visible_message("[user] slams the charged axe into [Z.name] with all [user.p_their()] might!") playsound(loc, 'sound/magic/lightningbolt.ogg', 5, 1) var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread sparks.set_up(1, 1, src) diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index e3b50123638..856a77395d9 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -12,7 +12,7 @@ /obj/item/banhammer/suicide_act(mob/user) - to_chat(viewers(user), "[user] is hitting \himself with the [src.name]! It looks like \he's trying to ban \himself from life.") + to_chat(viewers(user), "[user] is hitting [user.p_them()]self with the [src.name]! It looks like [user.p_theyre()] trying to ban [user.p_them()]self from life.") return (BRUTELOSS|FIRELOSS|TOXLOSS|OXYLOSS) /obj/item/sord @@ -28,7 +28,7 @@ attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") /obj/item/sord/suicide_act(mob/user) - user.visible_message("[user] is trying to impale themself with [src]! It might be a suicide attempt if it weren't so shitty.", \ + user.visible_message("[user] is trying to impale [user.p_them()]self with [src]! It might be a suicide attempt if it weren't so shitty.", \ "You try to impale yourself with [src], but it's USELESS...") return SHAME @@ -48,7 +48,7 @@ block_chance = 50 /obj/item/claymore/suicide_act(mob/user) - user.visible_message("[user] is falling on the [src.name]! It looks like \he's trying to commit suicide.") + user.visible_message("[user] is falling on the [name]! It looks like [user.p_theyre()] trying to commit suicide.") return(BRUTELOSS) /obj/item/claymore/ceremonial @@ -75,7 +75,7 @@ slot_flags = null /obj/item/katana/suicide_act(mob/user) - user.visible_message("[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.") + user.visible_message("[user] is slitting [user.p_their()] stomach open with [src]! It looks like [user.p_theyre()] trying to commit seppuku.") return(BRUTELOSS) /obj/item/harpoon diff --git a/code/game/objects/items/weapons/whetstone.dm b/code/game/objects/items/weapons/whetstone.dm index c6a27267d10..6cbc2e0e972 100644 --- a/code/game/objects/items/weapons/whetstone.dm +++ b/code/game/objects/items/weapons/whetstone.dm @@ -54,7 +54,7 @@ var/mob/living/carbon/human/H = user var/datum/unarmed_attack/attack = H.species.unarmed if(istype(attack, /datum/unarmed_attack/claws)) - H.visible_message("[H] sharpens \his claws on the [src]!", "You sharpen your claws on the [src].") + H.visible_message("[H] sharpens [H.p_their()] claws on the [src]!", "You sharpen your claws on the [src].") playsound(get_turf(H), usesound, 50, 1) /obj/item/whetstone/super diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index e254d80a39c..fe9e8444378 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -1,7 +1,6 @@ /obj //var/datum/module/mod //not used var/origin_tech = null //Used by R&D to determine what research bonuses it grants. - var/reliability = 100 //Used by SOME devices to determine how reliable they are. var/crit_fail = 0 var/unacidable = 0 //universal "unacidabliness" var, here so you can use it in any obj. animate_movement = 2 diff --git a/code/game/objects/structures/aliens.dm b/code/game/objects/structures/aliens.dm index c4506396f45..76deeac93e8 100644 --- a/code/game/objects/structures/aliens.dm +++ b/code/game/objects/structures/aliens.dm @@ -30,7 +30,7 @@ var/resintype = null smooth = SMOOTH_TRUE -/obj/structure/alien/resin/initialize() +/obj/structure/alien/resin/Initialize() air_update_turf(1) ..() diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index 32872e07f12..6548aa8bfca 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -30,8 +30,8 @@ new /obj/item/clothing/suit/storage/hazardvest(src) new /obj/item/clothing/mask/gas(src) new /obj/item/multitool(src) + new /obj/item/holosign_creator/engineering(src) new /obj/item/flash(src) - new /obj/item/taperoll/engineering(src) new /obj/item/clothing/head/beret/eng(src) new /obj/item/door_remote/chief_engineer(src) new /obj/item/rpd(src) @@ -102,6 +102,7 @@ new /obj/item/storage/backpack/satchel_eng(src) new /obj/item/storage/backpack/duffel/engineering(src) new /obj/item/storage/toolbox/mechanical(src) + new /obj/item/holosign_creator/engineering(src) new /obj/item/radio/headset/headset_eng(src) new /obj/item/clothing/under/rank/engineer(src) new /obj/item/clothing/under/rank/engineer/skirt(src) @@ -109,7 +110,6 @@ new /obj/item/clothing/mask/gas(src) new /obj/item/clothing/glasses/meson(src) new /obj/item/cartridge/engineering(src) - new /obj/item/taperoll/engineering(src) new /obj/item/clothing/head/beret/eng(src) @@ -128,7 +128,6 @@ new /obj/item/radio/headset/headset_eng(src) new /obj/item/cartridge/atmos(src) new /obj/item/storage/toolbox/mechanical(src) - new /obj/item/taperoll/engineering(src) if(prob(50)) new /obj/item/storage/backpack/industrial(src) else @@ -138,6 +137,7 @@ new /obj/item/clothing/suit/storage/hazardvest(src) new /obj/item/clothing/mask/gas(src) new /obj/item/tank/emergency_oxygen/engi(src) + new /obj/item/holosign_creator/atmos(src) new /obj/item/watertank/atmos(src) new /obj/item/clothing/suit/fire/atmos(src) new /obj/item/clothing/head/hardhat/atmos(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 05a3fa5c7ba..2a5639eb081 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -115,11 +115,11 @@ new /obj/item/clothing/glasses/hud/security/sunglasses(src) new /obj/item/storage/lockbox/mindshield(src) new /obj/item/storage/box/flashbangs(src) + new /obj/item/holosign_creator/security(src) new /obj/item/clothing/mask/gas/sechailer/hos(src) new /obj/item/shield/riot/tele(src) new /obj/item/melee/baton/loaded(src) new /obj/item/storage/belt/security/sec(src) - new /obj/item/taperoll/police(src) new /obj/item/gun/energy/gun/hos(src) new /obj/item/door_remote/head_of_security(src) new /obj/item/reagent_containers/food/drinks/mug/hos(src) @@ -151,8 +151,8 @@ new /obj/item/clothing/under/rank/warden/corp(src) new /obj/item/clothing/under/rank/warden/skirt(src) new /obj/item/clothing/glasses/hud/security/sunglasses(src) + new /obj/item/holosign_creator/security(src) new /obj/item/clothing/mask/gas/sechailer/warden(src) - new /obj/item/taperoll/police(src) new /obj/item/storage/box/zipties(src) new /obj/item/storage/box/flashbangs(src) new /obj/item/reagent_containers/spray/pepper(src) @@ -186,11 +186,11 @@ new /obj/item/flash(src) new /obj/item/grenade/flashbang(src) new /obj/item/storage/belt/security/sec(src) + new /obj/item/holosign_creator/security(src) new /obj/item/clothing/mask/gas/sechailer(src) new /obj/item/clothing/glasses/hud/security/sunglasses(src) new /obj/item/clothing/head/helmet(src) new /obj/item/melee/baton/loaded(src) - new /obj/item/taperoll/police(src) /obj/structure/closet/secure_closet/brigdoc @@ -344,10 +344,10 @@ new /obj/item/ammo_box/c38(src) new /obj/item/ammo_box/c38(src) new /obj/item/gun/projectile/revolver/detective(src) - new /obj/item/taperoll/police(src) new /obj/item/clothing/accessory/holster/armpit(src) new /obj/item/clothing/glasses/sunglasses/yeah(src) new /obj/item/flashlight/seclite(src) + new /obj/item/holosign_creator/security(src) new /obj/item/clothing/accessory/black(src) new /obj/item/taperecorder(src) new /obj/item/storage/box/tapes(src) diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index f888ee6cc94..3b174480ce8 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -295,7 +295,7 @@ var/global/list/captain_display_cases = list() else if(user.a_intent == INTENT_HARM) user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) + user.do_attack_animation(src, ATTACK_EFFECT_KICK) user.visible_message("[user.name] kicks \the [src]!", \ "You kick \the [src]!", \ "You hear glass crack.") @@ -321,7 +321,7 @@ var/global/list/captain_display_cases = list() to_chat(src, "[bicon(src)] \The [src] is empty!") else user.changeNext_move(CLICK_CD_MELEE) - user.visible_message("[user.name] gently runs \his hands over [src] in appreciation of its contents.", \ + user.visible_message("[user.name] gently runs [user.p_their()] hands over [src] in appreciation of its contents.", \ "You gently run your hands over [src] in appreciation of its contents.", \ "You hear someone streaking glass with their greasy hands.") diff --git a/code/game/objects/structures/engicart.dm b/code/game/objects/structures/engicart.dm index cf6a8e65715..a005e59c5a5 100644 --- a/code/game/objects/structures/engicart.dm +++ b/code/game/objects/structures/engicart.dm @@ -12,7 +12,6 @@ var/obj/item/storage/toolbox/mechanical/mybluetoolbox = null var/obj/item/storage/toolbox/electrical/myyellowtoolbox = null var/obj/item/storage/toolbox/emergency/myredtoolbox = null - var/obj/item/taperoll/engineering/myengitape = null /obj/structure/engineeringcart/Destroy() QDEL_NULL(myglass) @@ -22,7 +21,6 @@ QDEL_NULL(mybluetoolbox) QDEL_NULL(myyellowtoolbox) QDEL_NULL(myredtoolbox) - QDEL_NULL(myengitape) return ..() /obj/structure/engineeringcart/proc/put_in_cart(obj/item/I, mob/user) @@ -83,13 +81,6 @@ update_icon() else to_chat(user, fail_msg) - else if(istype(I, /obj/item/taperoll/engineering/)) - if(!myengitape) - put_in_cart(I, user) - myengitape=I - update_icon() - else - to_chat(user, fail_msg) else if(istype(I, /obj/item/wrench)) if(!anchored && !isinspace()) playsound(src.loc, I.usesound, 50, 1) @@ -125,8 +116,6 @@ dat += "[myredtoolbox.name]
" if(myyellowtoolbox) dat += "[myyellowtoolbox.name]
" - if(myengitape) - dat += "[myengitape.name]
" var/datum/browser/popup = new(user, "engicart", name, 240, 160) popup.set_content(dat) popup.open() @@ -171,16 +160,12 @@ user.put_in_hands(myyellowtoolbox) to_chat(user, "You take [myyellowtoolbox] from [src].") myyellowtoolbox = null - if(href_list["engitape"]) - if(myengitape) - user.put_in_hands(myengitape) - to_chat(user, "You take [myengitape] from [src].") - myengitape = null update_icon() updateUsrDialog() + /obj/structure/engineeringcart/update_icon() - overlays = null + overlays.Cut() if(myglass) overlays += "cart_glass" if(mymetal) @@ -194,6 +179,4 @@ if(myredtoolbox) overlays += "cart_redtoolbox" if(myyellowtoolbox) - overlays += "cart_yellowtoolbox" - if(myengitape) - overlays += "cart_engitape" + overlays += "cart_yellowtoolbox" \ No newline at end of file diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index d5dccaf0d03..0c0c3c1aa0c 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -71,7 +71,7 @@ /obj/structure/grille/attack_hand(mob/living/user) user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) + user.do_attack_animation(src, ATTACK_EFFECT_KICK) user.visible_message("[user] kicks [src].", \ "You kick [src].", \ "You hear twisting metal.") diff --git a/code/game/objects/structures/guillotine.dm b/code/game/objects/structures/guillotine.dm index 0de1a09a74c..3c4875978a2 100644 --- a/code/game/objects/structures/guillotine.dm +++ b/code/game/objects/structures/guillotine.dm @@ -203,7 +203,7 @@ return FALSE if(!ishuman(M)) - to_chat(usr, "It doesn't look like they can fit into this properly!") + to_chat(usr, "It doesn't look like [M.p_they()] can fit into this properly!") return FALSE // Can't decapitate non-humans if(blade_status != GUILLOTINE_BLADE_RAISED) diff --git a/code/game/objects/structures/holosign.dm b/code/game/objects/structures/holosign.dm new file mode 100644 index 00000000000..0b730a539b9 --- /dev/null +++ b/code/game/objects/structures/holosign.dm @@ -0,0 +1,135 @@ + +//holographic signs and barriers + +/obj/structure/holosign + name = "holo sign" + icon = 'icons/effects/effects.dmi' + anchored = TRUE + max_integrity = 1 + armor = list("melee" = 0, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 0, "bio" = 0, "rad" = 0) + var/obj/item/holosign_creator/projector + +/obj/structure/holosign/New(loc, source_projector) + if(source_projector) + projector = source_projector + projector.signs += src + ..() + +/obj/structure/holosign/Destroy() + if(projector) + projector.signs -= src + projector = null + return ..() + +/obj/structure/holosign/attack_hand(mob/living/user) + . = ..() + if(.) + return + user.do_attack_animation(src) + user.changeNext_move(CLICK_CD_MELEE) + take_damage(5 , BRUTE, "melee", 1) + +/obj/structure/holosign/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) + switch(damage_type) + if(BRUTE) + playsound(loc, 'sound/weapons/egloves.ogg', 80, 1) + if(BURN) + playsound(loc, 'sound/weapons/egloves.ogg', 80, 1) + +/obj/structure/holosign/wetsign + name = "wet floor sign" + desc = "The words flicker as if they mean nothing." + icon_state = "holosign" + +/obj/structure/holosign/barrier + name = "holo barrier" + desc = "A short holographic barrier which can only be passed by walking." + icon_state = "holosign_sec" + pass_flags = LETPASSTHROW + density = TRUE + max_integrity = 20 + var/allow_walk = TRUE //can we pass through it on walk intent + +/obj/structure/holosign/barrier/CanPass(atom/movable/mover, turf/target) + if(!density) + return TRUE + if(mover.pass_flags & (PASSGLASS|PASSTABLE|PASSGRILLE)) + return TRUE + if(iscarbon(mover)) + var/mob/living/carbon/C = mover + if(allow_walk && C.m_intent == MOVE_INTENT_WALK) + return TRUE + +/obj/structure/holosign/barrier/engineering + icon_state = "holosign_engi" + +/obj/structure/holosign/barrier/atmos + name = "holo firelock" + desc = "A holographic barrier resembling a firelock. Though it does not prevent solid objects from passing through, gas is kept out." + icon_state = "holo_firelock" + density = FALSE + layer = ABOVE_MOB_LAYER + anchored = TRUE + layer = ABOVE_MOB_LAYER + alpha = 150 + +/obj/structure/holosign/barrier/atmos/New() + ..() + air_update_turf(TRUE) + +/obj/structure/holosign/barrier/atmos/CanAtmosPass(turf/T) + return FALSE + +/obj/structure/holosign/barrier/atmos/Destroy() + var/turf/T = get_turf(src) + T.air_update_turf(TRUE) + return ..() + +/obj/structure/holosign/barrier/cyborg + name = "Energy Field" + desc = "A fragile energy field that blocks movement. Excels at blocking lethal projectiles." + density = TRUE + max_integrity = 10 + allow_walk = FALSE + +/obj/structure/holosign/barrier/cyborg/bullet_act(obj/item/projectile/P) + take_damage((P.damage / 5) , BRUTE, "melee", 1) //Doesn't really matter what damage flag it is. + if(istype(P, /obj/item/projectile/energy/electrode)) + take_damage(10, BRUTE, "melee", 1) //Tasers aren't harmful. + if(istype(P, /obj/item/projectile/beam/disabler)) + take_damage(5, BRUTE, "melee", 1) //Disablers aren't harmful. + +/obj/structure/holosign/barrier/cyborg/hacked + name = "Charged Energy Field" + desc = "A powerful energy field that blocks movement. Energy arcs off it." + max_integrity = 20 + var/shockcd = 0 + +/obj/structure/holosign/barrier/cyborg/hacked/bullet_act(obj/item/projectile/P) + take_damage(P.damage, BRUTE, "melee", 1) //Yeah no this doesn't get projectile resistance. + +/obj/structure/holosign/barrier/cyborg/hacked/proc/cooldown() + shockcd = FALSE + +/obj/structure/holosign/barrier/cyborg/hacked/attack_hand(mob/living/user) + . = ..() + if(.) + return + if(!shockcd) + if(ismob(user)) + var/mob/living/M = user + M.electrocute_act(15,"Energy Barrier", safety=1) + shockcd = TRUE + addtimer(CALLBACK(src, .proc/cooldown), 5) + +/obj/structure/holosign/barrier/cyborg/hacked/Bumped(atom/movable/AM) + if(shockcd) + return + + if(!isliving(AM)) + return + + var/mob/living/M = AM + M.electrocute_act(15, "Energy Barrier", safety = 1) + shockcd = TRUE + addtimer(CALLBACK(src, .proc/cooldown), 5) diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm index 6d03ca4fdef..4ea0fc34e2d 100644 --- a/code/game/objects/structures/inflatable.dm +++ b/code/game/objects/structures/inflatable.dm @@ -25,7 +25,7 @@ var/health = 50.0 -/obj/structure/inflatable/initialize(location) +/obj/structure/inflatable/Initialize(location) ..() air_update_turf(1) diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index f4a2990918b..e0e9ba1b6a7 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -24,7 +24,7 @@ ..() initial_state = icon_state -/obj/structure/mineral_door/initialize() +/obj/structure/mineral_door/Initialize() ..() air_update_turf(1) diff --git a/code/game/objects/structures/misc.dm b/code/game/objects/structures/misc.dm index 131a355feb2..6be7bf072d8 100644 --- a/code/game/objects/structures/misc.dm +++ b/code/game/objects/structures/misc.dm @@ -87,7 +87,7 @@ var/atom/attack_atom -/obj/structure/ghost_beacon/initialize() +/obj/structure/ghost_beacon/Initialize() . = ..() last_ghost_alert = world.time attack_atom = src diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 3e5d3386e0a..60ca03ad0f7 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -29,7 +29,7 @@ anchored = 1.0 var/open_sound = 'sound/items/Deconstruct.ogg' -/obj/structure/morgue/initialize() +/obj/structure/morgue/Initialize() . = ..() update() diff --git a/code/game/objects/structures/musician.dm b/code/game/objects/structures/musician.dm index da4c1181f01..b8c28046bd3 100644 --- a/code/game/objects/structures/musician.dm +++ b/code/game/objects/structures/musician.dm @@ -295,7 +295,7 @@ QDEL_NULL(song) return ..() -/obj/structure/piano/initialize() +/obj/structure/piano/Initialize() song.tempo = song.sanitize_tempo(song.tempo) // tick_lag isn't set when the map is loaded ..() diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm index caa1bf48b4b..8ea6a3c0cce 100644 --- a/code/game/objects/structures/noticeboard.dm +++ b/code/game/objects/structures/noticeboard.dm @@ -7,7 +7,8 @@ anchored = 1 var/notices = 0 -/obj/structure/noticeboard/initialize() +/obj/structure/noticeboard/Initialize() + ..() for(var/obj/item/I in loc) if(notices > 4) break if(istype(I, /obj/item/paper)) diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm index f0a2c28af85..8d22732e5dd 100644 --- a/code/game/objects/structures/plasticflaps.dm +++ b/code/game/objects/structures/plasticflaps.dm @@ -124,7 +124,7 @@ name = "airtight plastic flaps" desc = "Heavy duty, airtight, plastic flaps." -/obj/structure/plasticflaps/mining/initialize() +/obj/structure/plasticflaps/mining/Initialize() air_update_turf(1) ..() diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index 315728ddc16..44c9da74b20 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -30,7 +30,8 @@ FLOOR SAFES tumbler_2_open = rand(0, 71) -/obj/structure/safe/initialize() +/obj/structure/safe/Initialize() + ..() for(var/obj/item/I in loc) if(space >= maxspace) return @@ -178,7 +179,7 @@ obj/structure/safe/ex_act(severity) layer = 2.5 -/obj/structure/safe/floor/initialize() +/obj/structure/safe/floor/Initialize() ..() var/turf/T = loc hide(T.intact) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 367be27b6dc..4fedc99f0c5 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -616,7 +616,7 @@ if(user.weakened || user.resting || user.lying) return user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) + user.do_attack_animation(src, ATTACK_EFFECT_KICK) user.visible_message("[user] kicks [src].", \ "You kick [src].") take_damage(rand(4,8), BRUTE, "melee", 1) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 3ea23108662..179615dada3 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -548,7 +548,7 @@ var/washing_face = 0 if(selected_area in list("head", "mouth", "eyes")) washing_face = 1 - user.visible_message("[user] starts washing their [washing_face ? "face" : "hands"]...", \ + user.visible_message("[user] starts washing [user.p_their()] [washing_face ? "face" : "hands"]...", \ "You start washing your [washing_face ? "face" : "hands"]...") busy = 1 @@ -558,7 +558,7 @@ busy = 0 - user.visible_message("[user] washes their [washing_face ? "face" : "hands"] using [src].", \ + user.visible_message("[user] washes [user.p_their()] [washing_face ? "face" : "hands"] using [src].", \ "You wash your [washing_face ? "face" : "hands"] using [src].") if(washing_face) if(ishuman(user)) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index c93a0e5f1b8..aebd111ad26 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -386,7 +386,7 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f update_nearby_icons() return -/obj/structure/window/initialize() +/obj/structure/window/Initialize() air_update_turf(1) return ..() @@ -454,7 +454,7 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f update_nearby_icons() return -/obj/structure/window/plasmabasic/initialize() +/obj/structure/window/plasmabasic/Initialize() ..() air_update_turf(1) @@ -483,7 +483,7 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f update_nearby_icons() return -/obj/structure/window/plasmareinforced/initialize() +/obj/structure/window/plasmareinforced/Initialize() ..() air_update_turf(1) diff --git a/code/game/response_team.dm b/code/game/response_team.dm index 9fdf3121b59..a865e4a5ad9 100644 --- a/code/game/response_team.dm +++ b/code/game/response_team.dm @@ -104,8 +104,12 @@ var/ert_request_answered = 0 if(index > emergencyresponseteamspawn.len) index = 1 + if(!M || !M.client) + continue var/client/C = M.client var/mob/living/new_commando = C.create_response_team(emergencyresponseteamspawn[index]) + if(!M || !new_commando) + continue new_commando.mind.key = M.key new_commando.key = M.key new_commando.update_icons() @@ -157,17 +161,17 @@ var/ert_request_answered = 0 head_organ.h_style = random_hair_style(M.gender, head_organ.species.name) head_organ.f_style = random_facial_hair_style(M.gender, head_organ.species.name) - M.real_name = "[pick("Corporal", "Sergeant", "Staff Sergeant", "Sergeant First Class", "Master Sergeant", "Sergeant Major")] [pick(last_names)]" - M.name = M.real_name + M.rename_character(null, "[pick("Corporal", "Sergeant", "Staff Sergeant", "Sergeant First Class", "Master Sergeant", "Sergeant Major")] [pick(last_names)]") M.age = rand(23,35) M.regenerate_icons() M.update_body() + M.update_dna() //Creates mind stuff. M.mind = new M.mind.current = M M.mind.original = M - M.mind.assigned_role = "MODE" + M.mind.assigned_role = SPECIAL_ROLE_ERT M.mind.special_role = SPECIAL_ROLE_ERT if(!(M.mind in ticker.minds)) ticker.minds += M.mind //Adds them to regular mind list. @@ -199,13 +203,13 @@ var/ert_request_answered = 0 var/cyborg_unlock = 0 /datum/response_team/proc/setSlots(com, sec, med, eng, jan, par, cyb) - command_slots = com - security_slots = sec - medical_slots = med - engineer_slots = eng - janitor_slots = jan - paranormal_slots = par - cyborg_slots = cyb + command_slots = com || command_slots + security_slots = sec || security_slots + medical_slots = med || medical_slots + engineer_slots = eng || engineer_slots + janitor_slots = jan || janitor_slots + paranormal_slots = par || paranormal_slots + cyborg_slots = cyb || cyborg_slots /datum/response_team/proc/reduceCyborgSlots() cyborg_slots-- @@ -280,8 +284,7 @@ var/ert_request_answered = 0 command_slots = 0 // Override name and age for the commander - M.real_name = "[pick("Lieutenant", "Captain", "Major")] [pick(last_names)]" - M.name = M.real_name + M.rename_character(null, "[pick("Lieutenant", "Captain", "Major")] [pick(last_names)]") M.age = rand(35,45) M.equipOutfit(command_outfit) diff --git a/code/game/skincmd.dm b/code/game/skincmd.dm deleted file mode 100644 index 7d27a1ce6df..00000000000 --- a/code/game/skincmd.dm +++ /dev/null @@ -1,13 +0,0 @@ -/mob/var/skincmds = list() -/obj/proc/SkinCmd(mob/user as mob, var/data as text) - -/proc/SkinCmdRegister(var/mob/user, var/name as text, var/O as obj) - user.skincmds[name] = O - -/mob/verb/skincmd(data as text) - set hidden = 1 - - var/ref = copytext(data, 1, findtext(data, ";")) - if(src.skincmds[ref] != null) - var/obj/a = src.skincmds[ref] - a.SkinCmd(src, copytext(data, findtext(data, ";") + 1)) \ No newline at end of file diff --git a/code/game/smoothwall.dm b/code/game/smoothwall.dm deleted file mode 100644 index 20dea8de7b0..00000000000 --- a/code/game/smoothwall.dm +++ /dev/null @@ -1,108 +0,0 @@ -// OKAY I DON'T KNOW WHO THE FUCK ORIGINALLY CODED THIS BUT THEY ARE OFFICIALLY FIRED FOR BEING DRUNK AND STUPID -// FUCK YOU MYSTERY CODERS -// FOR THIS SHIT I'M GOING TO MAKE ALL MY COMMENTS IN CAPS - -/atom - var/list/canSmoothWith=list() // TYPE PATHS I CAN SMOOTH WITH~~~~~ - -// MOVED INTO UTILITY FUNCTION FOR LESS DUPLICATED CODE. -/atom/proc/findSmoothingNeighbors() - // THIS IS A BITMAP BECAUSE NORTH/SOUTH/ETC ARE ALL BITFLAGS BECAUSE BYOND IS DUMB AND - // DOESN'T FUCKING MAKE SENSE, BUT IT WORKS TO OUR ADVANTAGE - var/junction = 0 - for(var/cdir in cardinal) - var/turf/T = get_step(src,cdir) - if(isSmoothableNeighbor(T)) - junction |= cdir - continue // NO NEED FOR FURTHER SEARCHING IN THIS TILE - for(var/atom/A in T) - if(isSmoothableNeighbor(A)) - junction |= cdir - break // NO NEED FOR FURTHER SEARCHING IN THIS TILE - - return junction - -/atom/proc/isSmoothableNeighbor(var/atom/A) - return is_type_in_list(A,canSmoothWith) - -/turf/simulated/wall/isSmoothableNeighbor(var/atom/A) - if(is_type_in_list(A,canSmoothWith)) - // COLON OPERATORS ARE TERRIBLE BUT I HAVE NO CHOICE - if(src.mineral == A:mineral) //mineral not walltype so reinf still smooths with normal and vice versa - return 1 - return 0 - -/** - * WALL SMOOTHING SHIT - * - * IN /ATOM BECAUSE /TURFS ARE /ATOMS AND SO ARE /OBJ/STRUCTURE/FALSEWALLS - * THIS IS STUPID BUT IS FAIRLY ELEGANT FOR BYOND - * - * HOWEVER, INSTEAD OF MAKING ONE BIG GODDAMN MONOLITHIC PROC LIKE A FUCKING - * SHITTY FUNCTIONAL PROGRAMMER, WE WILL BE COOL AND MODERN AND USE INHERITANCE. - */ -/atom/proc/relativewall() - return // DOES JACK SHIT BY DEFAULT. OLD BEHAVIOR WAS TO SPAM LOOPS ANYWAY. - -/* - * SEE? NOW WE ONLY HAVE TO PROGRAM THIS SHIT INTO WHAT WE WANT TO SMOOTH - * INSTEAD OF BEING DUMB AND HAVING A BIG FUCKING IFTREE WITH TYPECHECKS - * MY GOD, WE COULD EVEN MOVE THE CODE TO BE WITH THE REST OF THE WALL'S CODE! - * HOW FUCKING INNOVATIVE. ISN'T INHERITANCE NICE? - * - * WE COULD STANDARDIZE THIS BUT EVERYONE'S A FUCKING SNOWFLAKE - */ -/turf/simulated/wall/relativewall() - var/junction=findSmoothingNeighbors() - icon_state = "[walltype][junction]" // WHY ISN'T THIS IN UPDATE_ICON OR SIMILAR - -/atom/proc/relativewall_neighbours(var/sko=0) //SKO: Skip Optimizations - // OPTIMIZE BY NOT CHECKING FOR NEIGHBORS IF WE DON'T FUCKING SMOOTH - if(canSmoothWith.len>0 || sko) - relativewall() - for(var/cdir in cardinal) - var/turf/T = get_step(src,cdir) - if(isSmoothableNeighbor(T) || sko) - T.relativewall() - for(var/atom/A in T) - if(isSmoothableNeighbor(A) || sko) - A.relativewall() - -/turf/simulated/wall/New() - ..() - relativewall_neighbours() - -/turf/simulated/wall/Destroy() - for(var/obj/effect/E in src) - if(E.name == "Wallrot") - qdel(E) - - if(!del_suppress_resmoothing) - spawn(10) - relativewall_neighbours(sko=1) - - // JESUS WHY - for(var/direction in cardinal) - for(var/obj/structure/glowshroom/shroom in get_step(src,direction)) - if(!shroom.floor) //shrooms drop to the floor - shroom.floor = 1 - shroom.icon_state = "glowshroomf" - shroom.pixel_x = 0 - shroom.pixel_y = 0 -/* for(var/obj/effect/supermatter_crystal/crystal in get_step(src,direction)) - if(!crystal.floor) //crystals drop to the floor - crystal.floor = 1 - crystal.icon_state = "supermatter_crystalf" - crystal.pixel_x = 0 - crystal.pixel_y = 0 */ - return ..() - -// DE-HACK -/turf/simulated/wall/vault/relativewall() - return - - -/obj/structure/alien/resin/relativewall() - var/junction = findSmoothingNeighbors() - icon_state = "[resintype][junction]" - return \ No newline at end of file diff --git a/code/game/verbs/suicide.dm b/code/game/verbs/suicide.dm index b9a51a661d1..32d5824c4d5 100644 --- a/code/game/verbs/suicide.dm +++ b/code/game/verbs/suicide.dm @@ -84,7 +84,7 @@ do_suicide(damagetype, held_item) return - to_chat(viewers(src), "[src] [pick(species.suicide_messages)] It looks like they're trying to commit suicide.") + to_chat(viewers(src), "[src] [replacetext(pick(species.suicide_messages), "their", p_their())] It looks like [p_theyre()] trying to commit suicide.") do_suicide(0) updatehealth() @@ -129,7 +129,7 @@ if(confirm == "Yes") suiciding = 1 - to_chat(viewers(src), "[src] is powering down. It looks like \he's trying to commit suicide.") + to_chat(viewers(src), "[src] is powering down. It looks like [p_theyre()] trying to commit suicide.") //put em at -175 adjustOxyLoss(max(maxHealth * 2 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0)) updatehealth() @@ -149,7 +149,7 @@ if(confirm == "Yes") suiciding = 1 - to_chat(viewers(src), "[src] is powering down. It looks like \he's trying to commit suicide.") + to_chat(viewers(src), "[src] is powering down. It looks like [p_theyre()] trying to commit suicide.") //put em at -175 adjustOxyLoss(max(maxHealth * 2 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0)) updatehealth() @@ -186,7 +186,7 @@ if(confirm == "Yes") suiciding = 1 - to_chat(viewers(src), "[src] is thrashing wildly! It looks like \he's trying to commit suicide.") + to_chat(viewers(src), "[src] is thrashing wildly! It looks like [p_theyre()] trying to commit suicide.") //put em at -175 adjustOxyLoss(max(175 - getFireLoss() - getBruteLoss() - getOxyLoss(), 0)) updatehealth() diff --git a/code/game/world.dm b/code/game/world.dm index dc4b830704e..ffb9dfb1ecd 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -16,10 +16,12 @@ var/global/list/map_transition_config = MAP_TRANSITION_CONFIG GLOB.timezoneOffset = text2num(time2text(0, "hh")) * 36000 + makeDatumRefLists() callHook("startup") src.update_status() + . = ..() // Create robolimbs for chargen. @@ -360,7 +362,7 @@ var/world_topic_spam_protect_time = world.timeofday /world/proc/load_motd() join_motd = file2text("config/motd.txt") - + GLOB.join_tos = file2text("config/tos.txt") /proc/load_configuration() config = new /datum/configuration() diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm index b97993d5327..4c905a0b517 100644 --- a/code/modules/admin/IsBanned.dm +++ b/code/modules/admin/IsBanned.dm @@ -93,7 +93,7 @@ world/IsBanned(key,address,computer_id) var/appealmessage = "" if(config.banappeals) appealmessage = " You may appeal it at [config.banappeals]." - expires = " The is a permanent ban.[appealmessage]" + expires = " This is a permanent ban.[appealmessage]" var/desc = "\nReason: You, or another user of this computer or connection ([pckey]) is banned from playing here. The ban reason is:\n[reason]\nThis ban was applied by [ackey] on [bantime].[expires]" diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 80fbca96dac..c162a59fb82 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -868,10 +868,10 @@ var/list/admin_verbs_ticket = list( switch(alert("Do you wish for [H] to be allowed to select non-whitelisted races?","Alter Mob Appearance","Yes","No","Cancel")) if("Yes") - admin_log_and_message_admins("has allowed [H] to change \his appearance, without whitelisting of races.") + admin_log_and_message_admins("has allowed [H] to change [H.p_their()] appearance, without whitelisting of races.") H.change_appearance(APPEARANCE_ALL, H.loc, check_species_whitelist = 0) if("No") - admin_log_and_message_admins("has allowed [H] to change \his appearance, with whitelisting of races.") + admin_log_and_message_admins("has allowed [H] to change [H.p_their()] appearance, with whitelisting of races.") H.change_appearance(APPEARANCE_ALL, H.loc, check_species_whitelist = 1) feedback_add_details("admin_verb","CMAS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index 21731cc8b7a..5039146b1c3 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -25,8 +25,6 @@ Show current traitors and objectives
Set Night Shift Mode
Bombs
- Bombing List   - Remove all bombs currently in existence [check_rights(R_SERVER, 0) ? "  Toggle bomb cap
" : "
"] Lists
Show last [length(lastsignalers)] signalers   @@ -130,5 +128,3 @@ var/datum/browser/popup = new(usr, "secrets", "
Admin Secrets
", 630, 670) popup.set_content(dat) popup.open(0) - - diff --git a/code/modules/admin/tickets/admintickets.dm b/code/modules/admin/tickets/admintickets.dm index 5ef1f58dbf5..ea5f7003870 100644 --- a/code/modules/admin/tickets/admintickets.dm +++ b/code/modules/admin/tickets/admintickets.dm @@ -104,7 +104,7 @@ var/global/datum/adminTicketHolder/globAdminTicketHolder = new /datum/adminTicke /datum/adminTicketHolder/proc/checkForTicket(var/client/C) var/list/tickets = list() for(var/datum/admin_ticket/T in allTickets) - if(T.clientName == C && T.ticketState == ADMIN_TICKET_OPEN || T.ticketState == ADMIN_TICKET_STALE) + if(T.clientName == C && (T.ticketState == ADMIN_TICKET_OPEN || T.ticketState == ADMIN_TICKET_STALE)) tickets += T if(tickets.len) return tickets diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 44328429dc0..1bd231ba5a9 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1622,14 +1622,14 @@ H.equip_to_slot_or_del( new /obj/item/reagent_containers/food/snacks/cookie(H), slot_r_hand ) if(!(istype(H.r_hand,/obj/item/reagent_containers/food/snacks/cookie))) log_admin("[key_name(H)] has their hands full, so they did not receive their cookie, spawned by [key_name(src.owner)].") - message_admins("[key_name_admin(H)] has their hands full, so they did not receive their cookie, spawned by [key_name_admin(src.owner)].") + message_admins("[key_name_admin(H)] has [H.p_their()] hands full, so [H.p_they()] did not receive [H.p_their()] cookie, spawned by [key_name_admin(src.owner)].") return else H.update_inv_r_hand()//To ensure the icon appears in the HUD else H.update_inv_l_hand() log_admin("[key_name(H)] got their cookie, spawned by [key_name(src.owner)]") - message_admins("[key_name_admin(H)] got their cookie, spawned by [key_name_admin(src.owner)]") + message_admins("[key_name_admin(H)] got [H.p_their()] cookie, spawned by [key_name_admin(src.owner)]") feedback_inc("admin_cookies_spawned",1) to_chat(H, "Your prayers have been answered!! You received the best cookie!") @@ -1683,7 +1683,7 @@ to_chat(usr, "The person you are trying to contact is not wearing a headset") return - var/input = input(src.owner, "Please enter a message to reply to [key_name(H)] via their headset.","Outgoing message from Centcomm", "") + var/input = input(src.owner, "Please enter a message to reply to [key_name(H)] via [H.p_their()] headset.","Outgoing message from Centcomm", "") if(!input) return to_chat(src.owner, "You sent [input] to [H] via a secure channel.") @@ -1941,7 +1941,7 @@ newtraitor.mind.special_role = SPECIAL_ROLE_TRAITOR var/datum/atom_hud/antag/tatorhud = huds[ANTAG_HUD_TRAITOR] tatorhud.join_hud(newtraitor) - ticker.mode.set_antag_hud(newtraitor, "hudsyndicate") + set_antag_hud(newtraitor, "hudsyndicate") else to_chat(usr, "ERROR: Failed to create a traitor.") return @@ -2045,7 +2045,7 @@ if(!istype(H.l_ear, /obj/item/radio/headset) && !istype(H.r_ear, /obj/item/radio/headset)) to_chat(usr, "The person you are trying to contact is not wearing a headset") return - var/input = input(src.owner, "Please enter a message to reply to [key_name(H)] via their headset.","Outgoing message from The Syndicate", "") + var/input = input(src.owner, "Please enter a message to reply to [key_name(H)] via [H.p_their()] headset.","Outgoing message from The Syndicate", "") if(!input) return to_chat(src.owner, "You sent [input] to [H] via a secure channel.") @@ -2061,7 +2061,7 @@ to_chat(usr, "The person you are trying to contact is not wearing a headset") return - var/input = input(src.owner, "Please enter a message to reply to [key_name(H)] via their headset.","Outgoing message from HONKplanet", "") + var/input = input(src.owner, "Please enter a message to reply to [key_name(H)] via [H.p_their()] headset.","Outgoing message from HONKplanet", "") if(!input) return to_chat(src.owner, "You sent [input] to [H] via a secure channel.") @@ -2957,13 +2957,6 @@ var/ok = 0 switch(href_list["secretsadmin"]) - if("clear_bombs") - //I do nothing - if("list_bombers") - var/dat = "Bombing List
" - for(var/l in bombers) - dat += text("[l]
") - usr << browse(dat, "window=bombers") if("list_signalers") var/dat = "Showing last [length(lastsignalers)] signalers.
" for(var/sig in lastsignalers) @@ -3432,11 +3425,11 @@ to_chat(hunter_mob, "ATTENTION: You are now on a mission!") to_chat(hunter_mob, "Goal: [killthem ? "MURDER" : "PROTECT"] [H.real_name], currently in [get_area(H.loc)]. "); if(killthem) - to_chat(hunter_mob, "If you kill them, they cannot be revived."); + to_chat(hunter_mob, "If you kill [H.p_them()], [H.p_they()] cannot be revived."); hunter_mob.mind.special_role = SPECIAL_ROLE_TRAITOR var/datum/atom_hud/antag/tatorhud = huds[ANTAG_HUD_TRAITOR] tatorhud.join_hud(hunter_mob) - ticker.mode.set_antag_hud(hunter_mob, "hudsyndicate") + set_antag_hud(hunter_mob, "hudsyndicate") /proc/admin_jump_link(var/atom/target) if(!target) return diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 2533eab0570..600a53d81eb 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -183,6 +183,8 @@ if(check_rights(R_ADMIN|R_MOD, 0, X.mob)) to_chat(X, "[type]: [key_name(src, TRUE, type)]->[key_name(C, TRUE, type)]: [emoji_msg]") + if(type == "Mentorhelp") + return //Check if the mob being PM'd has any open admin tickets. var/tickets = list() tickets = globAdminTicketHolder.checkForTicket(C) diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm index f091e49f60e..2a0f78351e4 100644 --- a/code/modules/admin/verbs/adminsay.dm +++ b/code/modules/admin/verbs/adminsay.dm @@ -12,6 +12,7 @@ if(check_rights(R_ADMIN,0)) for(var/client/C in admins) if(R_ADMIN & C.holder.rights) + msg = "[msg]" to_chat(C, "ADMIN: [key_name(usr, 1)] ([admin_jump_link(mob)]): [msg]") feedback_add_details("admin_verb","M") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -38,6 +39,7 @@ display_name = "[holder.fakekey]/([key])" else display_name = holder.fakekey + msg = "[msg]" to_chat(C, "MENTOR: [display_name] ([admin_jump_link(mob)]): [msg]") feedback_add_details("admin_verb","MS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/atmosdebug.dm b/code/modules/admin/verbs/atmosdebug.dm index 85591ee3159..de281d34e68 100644 --- a/code/modules/admin/verbs/atmosdebug.dm +++ b/code/modules/admin/verbs/atmosdebug.dm @@ -51,7 +51,7 @@ return feedback_add_details("admin_verb","CPOW") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - for(var/datum/powernet/PN in powernets) + for(var/datum/powernet/PN in SSmachines.powernets) if(!PN.nodes || !PN.nodes.len) if(PN.cables && (PN.cables.len > 1)) var/obj/structure/cable/C = PN.cables[1] diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 78f9fbd5de1..682a174c450 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -266,7 +266,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that if(!choice) return 0 if(!istype(choice, /mob/dead/observer)) - var/confirm = input("[choice.key] isn't ghosting right now. Are you sure you want to yank him out of them out of their body and place them in this pAI?", "Spawn pAI Confirmation", "No") in list("Yes", "No") + var/confirm = input("[choice.key] isn't ghosting right now. Are you sure you want to yank [choice.p_them()] out of [choice.p_their()] body and place [choice.p_them()] in this pAI?", "Spawn pAI Confirmation", "No") in list("Yes", "No") if(confirm != "Yes") return 0 var/obj/item/paicard/card = new(T) @@ -387,7 +387,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that if(!check_rights(R_DEBUG)) return - makepowernets() + SSmachines.makepowernets() log_admin("[key_name(src)] has remade the powernet. makepowernets() called.") message_admins("[key_name_admin(src)] has remade the powernets. makepowernets() called.", 0) feedback_add_details("admin_verb","MPWN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/gimmick_team.dm b/code/modules/admin/verbs/gimmick_team.dm index 2ca1d3c27df..6192ad6b2ac 100644 --- a/code/modules/admin/verbs/gimmick_team.dm +++ b/code/modules/admin/verbs/gimmick_team.dm @@ -70,7 +70,7 @@ H.dna.ready_dna(H) H.mind_initialize() - H.mind.assigned_role = "MODE" + H.mind.assigned_role = "Event Character" H.mind.special_role = "Event Character" H.key = thisplayer.key diff --git a/code/modules/admin/verbs/honksquad.dm b/code/modules/admin/verbs/honksquad.dm index 36001fb9035..1e72c1836da 100644 --- a/code/modules/admin/verbs/honksquad.dm +++ b/code/modules/admin/verbs/honksquad.dm @@ -91,7 +91,7 @@ var/global/sent_honksquad = 0 //Creates mind stuff. new_honksquad.mind_initialize() - new_honksquad.mind.assigned_role = "MODE" + new_honksquad.mind.assigned_role = SPECIAL_ROLE_HONKSQUAD new_honksquad.mind.special_role = SPECIAL_ROLE_HONKSQUAD new_honksquad.add_language("Clownish") ticker.mode.traitors |= new_honksquad.mind//Adds them to current traitor list. Which is really the extra antagonist list. diff --git a/code/modules/admin/verbs/infiltratorteam_syndicate.dm b/code/modules/admin/verbs/infiltratorteam_syndicate.dm index dad0141a3bc..a3f30117cdd 100644 --- a/code/modules/admin/verbs/infiltratorteam_syndicate.dm +++ b/code/modules/admin/verbs/infiltratorteam_syndicate.dm @@ -109,7 +109,7 @@ var/global/sent_syndicate_infiltration_team = 0 new_syndicate_infiltrator.mind.store_memory("Starting Equipment:
- Syndicate Headset ((.h for your radio))
- Chameleon Jumpsuit ((right click to Change Color))
- Agent ID card ((disguise as another job))
- Uplink Implant ((top left of screen))
- Dust Implant ((destroys your body on death))
- Combat Gloves ((insulated, disguised as black gloves))
- Anything bought with your uplink implant") var/datum/atom_hud/antag/opshud = huds[ANTAG_HUD_OPS] opshud.join_hud(new_syndicate_infiltrator.mind.current) - ticker.mode.set_antag_hud(new_syndicate_infiltrator.mind.current, "hudoperative") + set_antag_hud(new_syndicate_infiltrator.mind.current, "hudoperative") new_syndicate_infiltrator.regenerate_icons() num_spawned++ if(!teamsize) @@ -127,7 +127,7 @@ var/global/sent_syndicate_infiltration_team = 0 syndimgmtmob.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/syndicate, slot_wear_mask) var/datum/atom_hud/antag/opshud = huds[ANTAG_HUD_OPS] opshud.join_hud(syndimgmtmob.mind.current) - ticker.mode.set_antag_hud(syndimgmtmob.mind.current, "hudoperative") + set_antag_hud(syndimgmtmob.mind.current, "hudoperative") syndimgmtmob.mind.special_role = "Syndicate Management Consultant" syndimgmtmob.regenerate_icons() to_chat(syndimgmtmob, "You have spawned as Syndicate Management. You should brief them on their mission before they go.") @@ -149,7 +149,7 @@ var/global/sent_syndicate_infiltration_team = 0 //Creates mind stuff. new_syndicate_infiltrator.mind_initialize() - new_syndicate_infiltrator.mind.assigned_role = "MODE" + new_syndicate_infiltrator.mind.assigned_role = "Syndicate Infiltrator" new_syndicate_infiltrator.mind.special_role = "Syndicate Infiltrator" ticker.mode.traitors |= new_syndicate_infiltrator.mind //Adds them to extra antag list new_syndicate_infiltrator.equip_syndicate_infiltrator(syndicate_leader_selected, uplink_tc, is_mgmt) diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 57e5b968178..b3f0a1a15a8 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -411,7 +411,7 @@ client/proc/one_click_antag() //Creates mind stuff. new_syndicate_commando.mind_initialize() - new_syndicate_commando.mind.assigned_role = "MODE" + new_syndicate_commando.mind.assigned_role = SPECIAL_ROLE_SYNDICATE_DEATHSQUAD new_syndicate_commando.mind.special_role = SPECIAL_ROLE_SYNDICATE_DEATHSQUAD //Adds them to current traitor list. Which is really the extra antagonist list. diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 29c6111bc02..9eef4331ee0 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -429,7 +429,7 @@ Traitors and the like can also be revived with the previous role mostly intact. //Announces the character on all the systems, based on the record. if(!issilicon(new_character))//If they are not a cyborg/AI. - if(!record_found&&new_character.mind.assigned_role!="MODE")//If there are no records for them. If they have a record, this info is already in there. MODE people are not announced anyway. + if(!record_found && new_character.mind.assigned_role != new_character.mind.special_role)//If there are no records for them. If they have a record, this info is already in there. Offstation special characters announced anyway. //Power to the user! if(alert(new_character,"Warning: No data core entry detected. Would you like to announce the arrival of this character by adding them to various databases, such as medical records?",,"No","Yes")=="Yes") data_core.manifest_inject(new_character) diff --git a/code/modules/admin/verbs/striketeam.dm b/code/modules/admin/verbs/striketeam.dm index 020cadeebe3..8eaede660e1 100644 --- a/code/modules/admin/verbs/striketeam.dm +++ b/code/modules/admin/verbs/striketeam.dm @@ -5,14 +5,16 @@ var/global/sent_strike_team = 0 /client/proc/strike_team() if(!ticker) - to_chat(usr, "The game hasn't started yet!") + to_chat(usr, "The game hasn't started yet!") return if(sent_strike_team == 1) - to_chat(usr, "CentComm is already sending a team.") + to_chat(usr, "CentComm is already sending a team.") return if(alert("Do you want to send in the CentComm death squad? Once enabled, this is irreversible.",,"Yes","No")!="Yes") return - alert("This 'mode' will go on until everyone is dead or the station is destroyed. You may also admin-call the evac shuttle when appropriate. Spawned commandos have internals cameras which are viewable through a monitor inside the Spec. Ops. Office. Assigning the team's detailed task is recommended from there. While you will be able to manually pick the candidates from active ghosts, their assignment in the squad will be random.") + alert("This 'mode' will go on until everyone is dead or the station is destroyed. You may also admin-call the evac shuttle when appropriate. Spawned commandos have internals cameras which are viewable through a monitor inside the Spec. Ops. Office. The first one selected/spawned will be the team leader.") + + message_admins("[key_name_admin(usr)] has started to spawn a CentComm DeathSquad.", 1) var/input = null while(!input) @@ -25,13 +27,7 @@ var/global/sent_strike_team = 0 to_chat(usr, "Looks like someone beat you to it.") return - sent_strike_team = 1 - - shuttle_master.cancelEvac() - var/commando_number = commandos_possible //for selecting a leader - var/leader_selected = 0 //when the leader is chosen. The last person spawned. - -//Code for spawning a nuke auth code. + // Find the nuclear auth code var/nuke_code var/temp_code for(var/obj/machinery/nuclearbomb/N in world) @@ -40,42 +36,69 @@ var/global/sent_strike_team = 0 nuke_code = N.r_code break -//Generates a list of commandos from active ghosts. Then the user picks which characters to respawn as the commandos. - var/list/candidates = list() //candidates for being a commando out of all the active ghosts in world. - var/list/commandos = list() //actual commando ghosts as picked by the user. - for(var/mob/dead/observer/G in player_list) - if(!G.client.holder && !G.client.is_afk()) //Whoever called/has the proc won't be added to the list. - if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD)) - candidates += G.key - for(var/i=commandos_possible,(i>0&&candidates.len),i--)//Decrease with every commando selected. - var/candidate = input("Pick characters to spawn as the commandos. This will go on until there either no more ghosts to pick from or the slots are full.", "Active Players") as null|anything in candidates //It will auto-pick a person when there is only one candidate. - candidates -= candidate //Subtract from candidates. - commandos += candidate//Add their ghost to commandos. + // Find ghosts willing to be DS + var/list/commando_ckeys = pollCandidatesByKeyWithVeto(src, usr, commandos_possible, "Join the DeathSquad?",, 21, 600, 1, role_playtime_requirements[ROLE_DEATHSQUAD], TRUE, FALSE) + if(!commando_ckeys.len) + to_chat(usr, "Nobody volunteered to join the DeathSquad.") + return -//Spawns commandos and equips them. + sent_strike_team = 1 + + // Spawns commandos and equips them. + var/commando_number = commandos_possible //for selecting a leader + var/is_leader = TRUE // set to FALSE after leader is spawned for(var/obj/effect/landmark/L in landmarks_list) if(commando_number<=0) break if(L.name == "Commando") - leader_selected = commando_number == 1?1:0 - var/mob/living/carbon/human/new_commando = create_death_commando(L, leader_selected) + spawn(0) + var/use_ds_borg = FALSE + var/ghost_key // Ghost ckey that we intend to put into the commando. Can remain undefined if we don't have one. + if(commando_ckeys.len) + ghost_key = pick(commando_ckeys) + commando_ckeys -= ghost_key + if(!is_leader) + var/new_gender = alert(src, "Select Deathsquad Type.", "DS Character Generation", "Organic", "Cyborg") + if(new_gender == "Cyborg") + use_ds_borg = TRUE - if(commandos.len) - new_commando.key = pick(commandos) - commandos -= new_commando.key - new_commando.internal = new_commando.s_store - new_commando.update_action_buttons_icon() - - //So they don't forget their code or mission. - if(nuke_code) - new_commando.mind.store_memory("Nuke Code: [nuke_code].") - new_commando.mind.store_memory("Mission: [input].") - - to_chat(new_commando, "You are a Special Ops. [!leader_selected ? "commando" : "LEADER"] in the service of Central Command. Check the table ahead for detailed instructions.\nYour current mission is: [input]") + if(use_ds_borg) + var/mob/living/silicon/robot/deathsquad/R = new() + R.forceMove(get_turf(L)) + var/rnum = rand(1,1000) + var/borgname = "Epsilon [rnum]" + R.name = borgname + R.custom_name = borgname + R.real_name = R.name + R.mind = new + R.mind.current = R + R.mind.original = R + R.mind.assigned_role = SPECIAL_ROLE_DEATHSQUAD + R.mind.special_role = SPECIAL_ROLE_DEATHSQUAD + if(!(R.mind in ticker.minds)) + ticker.minds += R.mind + ticker.mode.traitors += R.mind + if(ghost_key) + R.key = ghost_key + if(nuke_code) + R.mind.store_memory("Nuke Code: [nuke_code].") + R.mind.store_memory("Mission: [input].") + to_chat(R, "You are a Special Operations cyborg, in the service of Central Command. \nYour current mission is: [input]") + else + var/mob/living/carbon/human/new_commando = create_death_commando(L, is_leader) + if(ghost_key) + new_commando.key = ghost_key + new_commando.internal = new_commando.s_store + new_commando.update_action_buttons_icon() + if(nuke_code) + new_commando.mind.store_memory("Nuke Code: [nuke_code].") + new_commando.mind.store_memory("Mission: [input].") + to_chat(new_commando, "You are a Special Ops [is_leader ? "TEAM LEADER" : "commando"] in the service of Central Command. Check the table ahead for detailed instructions.\nYour current mission is: [input]") + is_leader = FALSE commando_number-- -//Spawns the rest of the commando gear. + //Spawns the rest of the commando gear. for(var/obj/effect/landmark/L in landmarks_list) if(L.name == "Commando_Manual") //new /obj/item/gun/energy/pulse_rifle(L.loc) @@ -92,18 +115,18 @@ var/global/sent_strike_team = 0 new /obj/effect/spawner/newbomb/timer/syndicate(L.loc) qdel(L) - message_admins("[key_name_admin(usr)] has spawned a CentComm strike squad.", 1) + message_admins("[key_name_admin(usr)] has spawned a CentComm DeathSquad.", 1) log_admin("[key_name(usr)] used Spawn Death Squad.") return 1 -/client/proc/create_death_commando(obj/spawn_location, leader_selected = 0) +/client/proc/create_death_commando(obj/spawn_location, is_leader = FALSE) var/mob/living/carbon/human/new_commando = new(spawn_location.loc) var/commando_leader_rank = pick("Lieutenant", "Captain", "Major") var/commando_rank = pick("Corporal", "Sergeant", "Staff Sergeant", "Sergeant 1st Class", "Master Sergeant", "Sergeant Major") var/commando_name = pick(last_names) var/datum/preferences/A = new()//Randomize appearance for the commando. - if(leader_selected) + if(is_leader) A.age = rand(35,45) A.real_name = "[commando_leader_rank] [commando_name]" else @@ -114,21 +137,21 @@ var/global/sent_strike_team = 0 //Creates mind stuff. new_commando.mind_initialize() - new_commando.mind.assigned_role = "MODE" + new_commando.mind.assigned_role = SPECIAL_ROLE_DEATHSQUAD new_commando.mind.special_role = SPECIAL_ROLE_DEATHSQUAD ticker.mode.traitors |= new_commando.mind//Adds them to current traitor list. Which is really the extra antagonist list. - new_commando.equip_death_commando(leader_selected) + new_commando.equip_death_commando(is_leader) return new_commando -/mob/living/carbon/human/proc/equip_death_commando(leader_selected = 0) +/mob/living/carbon/human/proc/equip_death_commando(is_leader = FALSE) var/obj/item/radio/R = new /obj/item/radio/headset/alt(src) R.set_frequency(DTH_FREQ) equip_to_slot_or_del(R, slot_l_ear) - if(leader_selected == 0) - equip_to_slot_or_del(new /obj/item/clothing/under/color/green(src), slot_w_uniform) - else + if(is_leader) equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(src), slot_w_uniform) + else + equip_to_slot_or_del(new /obj/item/clothing/under/color/green(src), slot_w_uniform) equip_to_slot_or_del(new /obj/item/clothing/shoes/magboots/advance(src), slot_shoes) equip_to_slot_or_del(new /obj/item/clothing/suit/space/deathsquad(src), slot_wear_suit) equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(src), slot_gloves) @@ -143,20 +166,19 @@ var/global/sent_strike_team = 0 equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/combat/nanites(src), slot_in_backpack) equip_to_slot_or_del(new /obj/item/storage/box/flashbangs(src), slot_in_backpack) equip_to_slot_or_del(new /obj/item/flashlight(src), slot_in_backpack) - if(!leader_selected) - equip_to_slot_or_del(new /obj/item/grenade/plastic/x4(src), slot_in_backpack) - else - equip_to_slot_or_del(new /obj/item/pinpointer(src), slot_in_backpack) + equip_to_slot_or_del(new /obj/item/pinpointer(src), slot_in_backpack) + if(is_leader) equip_to_slot_or_del(new /obj/item/disk/nuclear(src), slot_in_backpack) + else + equip_to_slot_or_del(new /obj/item/grenade/plastic/x4(src), slot_in_backpack) + equip_to_slot_or_del(new /obj/item/melee/energy/sword/saber(src), slot_l_store) equip_to_slot_or_del(new /obj/item/shield/energy(src), slot_r_store) equip_to_slot_or_del(new /obj/item/tank/emergency_oxygen/double/full(src), slot_s_store) equip_to_slot_or_del(new /obj/item/gun/projectile/revolver/mateba(src), slot_belt) - equip_to_slot_or_del(new /obj/item/gun/energy/pulse(src), slot_r_hand) - var/obj/item/implant/mindshield/L = new/obj/item/implant/mindshield(src) L.implant(src) diff --git a/code/modules/admin/verbs/striketeam_syndicate.dm b/code/modules/admin/verbs/striketeam_syndicate.dm index 943ccd61ca2..ec31632208e 100644 --- a/code/modules/admin/verbs/striketeam_syndicate.dm +++ b/code/modules/admin/verbs/striketeam_syndicate.dm @@ -17,7 +17,9 @@ var/global/sent_syndicate_strike_team = 0 return if(alert("Do you want to send in the Syndicate Strike Team? Once enabled, this is irreversible.",,"Yes","No")=="No") return - alert("This 'mode' will go on until everyone is dead or the station is destroyed. You may also admin-call the evac shuttle when appropriate. Spawned syndicates have internals cameras which are viewable through a monitor inside the Syndicate Mothership Bridge. Assigning the team's detailed task is recommended from there. While you will be able to manually pick the candidates from active ghosts, their assignment in the squad will be random.") + alert("This 'mode' will go on until everyone is dead or the station is destroyed. You may also admin-call the evac shuttle when appropriate. Spawned syndicates have internals cameras which are viewable through a monitor inside the Syndicate Mothership Bridge. Assigning the team's detailed task is recommended from there. The first one selected/spawned will be the team leader.") + + message_admins("[key_name_admin(usr)] has started to spawn a Syndicate Strike Team.", 1) var/input = null while(!input) @@ -30,15 +32,10 @@ var/global/sent_syndicate_strike_team = 0 to_chat(src, "Looks like someone beat you to it.") return - sent_syndicate_strike_team = 1 - - //if(emergency_shuttle.can_recall()) - // emergency_shuttle.recall() //why, exactly? Admins can do this themselves. - var/syndicate_commando_number = syndicate_commandos_possible //for selecting a leader - var/syndicate_leader_selected = 0 //when the leader is chosen. The last person spawned. + var/is_leader = TRUE // set to FALSE after leader is spawned -//Code for spawning a nuke auth code. + // Find the nuclear auth code var/nuke_code var/temp_code for(var/obj/machinery/nuclearbomb/N in world) @@ -47,29 +44,23 @@ var/global/sent_syndicate_strike_team = 0 nuke_code = N.r_code break -//Generates a list of commandos from active ghosts. Then the user picks which characters to respawn as the commandos. - var/list/candidates = list() //candidates for being a commando out of all the active ghosts in world. - var/list/commandos = list() //actual commando ghosts as picked by the user. - for(var/mob/dead/observer/G in player_list) - if(!G.client.holder && !G.client.is_afk()) //Whoever called/has the proc won't be added to the list. - if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD)) - candidates += G.key - for(var/i=commandos_possible,(i>0&&candidates.len),i--)//Decrease with every commando selected. - var/candidate = input("Pick characters to spawn as the commandos. This will go on until there either no more ghosts to pick from or the slots are full.", "Active Players") as null|anything in candidates //It will auto-pick a person when there is only one candidate. - candidates -= candidate //Subtract from candidates. - commandos += candidate//Add their ghost to commandos. + // Find ghosts willing to be SST + var/list/commando_ckeys = pollCandidatesByKeyWithVeto(src, usr, syndicate_commandos_possible, "Join the Syndicate Strike Team?",, 21, 600, 1, role_playtime_requirements[ROLE_DEATHSQUAD], TRUE, FALSE) + if(!commando_ckeys.len) + to_chat(usr, "Nobody volunteered to join the SST.") + return -//Spawns commandos and equips them. + sent_syndicate_strike_team = 1 + + //Spawns commandos and equips them. for(var/obj/effect/landmark/L in landmarks_list) if(syndicate_commando_number<=0) break if(L.name == "Syndicate-Commando") - syndicate_leader_selected = syndicate_commando_number == 1?1:0 + var/mob/living/carbon/human/new_syndicate_commando = create_syndicate_death_commando(L, is_leader) - var/mob/living/carbon/human/new_syndicate_commando = create_syndicate_death_commando(L, syndicate_leader_selected) - - if(commandos.len) - new_syndicate_commando.key = pick(commandos) - commandos -= new_syndicate_commando.key + if(commando_ckeys.len) + new_syndicate_commando.key = pick(commando_ckeys) + commando_ckeys -= new_syndicate_commando.key new_syndicate_commando.internal = new_syndicate_commando.s_store new_syndicate_commando.update_action_buttons_icon() @@ -78,8 +69,9 @@ var/global/sent_syndicate_strike_team = 0 new_syndicate_commando.mind.store_memory("Nuke Code: [nuke_code].") new_syndicate_commando.mind.store_memory("Mission: [input].") - to_chat(new_syndicate_commando, "You are an Elite Syndicate. [!syndicate_leader_selected ? "commando" : "LEADER"] in the service of the Syndicate. \nYour current mission is: [input]") + to_chat(new_syndicate_commando, "You are an Elite Syndicate [is_leader ? "TEAM LEADER" : "commando"] in the service of the Syndicate. \nYour current mission is: [input]") new_syndicate_commando.faction += "syndicate" + is_leader = FALSE syndicate_commando_number-- for(var/obj/effect/landmark/L in landmarks_list) @@ -91,14 +83,14 @@ var/global/sent_syndicate_strike_team = 0 log_admin("[key_name(usr)] used Spawn Syndicate Squad.") feedback_add_details("admin_verb","SDTHS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/create_syndicate_death_commando(obj/spawn_location, syndicate_leader_selected = 0) +/client/proc/create_syndicate_death_commando(obj/spawn_location, is_leader = FALSE) var/mob/living/carbon/human/new_syndicate_commando = new(spawn_location.loc) var/syndicate_commando_leader_rank = pick("Lieutenant", "Captain", "Major") var/syndicate_commando_rank = pick("Corporal", "Sergeant", "Staff Sergeant", "Sergeant 1st Class", "Master Sergeant", "Sergeant Major") var/syndicate_commando_name = pick(last_names) var/datum/preferences/A = new()//Randomize appearance for the commando. - if(syndicate_leader_selected) + if(is_leader) A.age = rand(35,45) A.real_name = "[syndicate_commando_leader_rank] [syndicate_commando_name]" else @@ -109,29 +101,29 @@ var/global/sent_syndicate_strike_team = 0 //Creates mind stuff. new_syndicate_commando.mind_initialize() - new_syndicate_commando.mind.assigned_role = "MODE" + new_syndicate_commando.mind.assigned_role = SPECIAL_ROLE_SYNDICATE_DEATHSQUAD new_syndicate_commando.mind.special_role = SPECIAL_ROLE_SYNDICATE_DEATHSQUAD ticker.mode.traitors |= new_syndicate_commando.mind //Adds them to current traitor list. Which is really the extra antagonist list. - new_syndicate_commando.equip_syndicate_commando(syndicate_leader_selected) + new_syndicate_commando.equip_syndicate_commando(is_leader) qdel(spawn_location) return new_syndicate_commando -/mob/living/carbon/human/proc/equip_syndicate_commando(syndicate_leader_selected = 0) +/mob/living/carbon/human/proc/equip_syndicate_commando(is_leader = FALSE) var/obj/item/radio/R = new /obj/item/radio/headset/syndicate/alt/syndteam(src) R.set_frequency(SYNDTEAM_FREQ) equip_to_slot_or_del(R, slot_l_ear) equip_to_slot_or_del(new /obj/item/clothing/under/syndicate(src), slot_w_uniform) equip_to_slot_or_del(new /obj/item/clothing/shoes/magboots/syndie/advance(src), slot_shoes) - if(!syndicate_leader_selected) - equip_to_slot_or_del(new /obj/item/clothing/suit/space/syndicate/black/strike(src), slot_wear_suit) - else + if(is_leader) equip_to_slot_or_del(new /obj/item/clothing/suit/space/syndicate/black/red/strike(src), slot_wear_suit) - equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(src), slot_gloves) - if(!syndicate_leader_selected) - equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/syndicate/black/strike(src), slot_head) else + equip_to_slot_or_del(new /obj/item/clothing/suit/space/syndicate/black/strike(src), slot_wear_suit) + equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(src), slot_gloves) + if(is_leader) equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/syndicate/black/red/strike(src), slot_head) + else + equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/syndicate/black/strike(src), slot_head) equip_to_slot_or_del(new /obj/item/clothing/mask/gas/syndicate(src), slot_wear_mask) equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal(src), slot_glasses) @@ -142,13 +134,12 @@ var/global/sent_syndicate_strike_team = 0 equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/combat/nanites(src), slot_in_backpack) equip_to_slot_or_del(new /obj/item/grenade/plastic/x4(src), slot_in_backpack) equip_to_slot_or_del(new /obj/item/flashlight(src), slot_in_backpack) - if(!syndicate_leader_selected) - equip_to_slot_or_del(new /obj/item/grenade/plastic/x4(src), slot_in_backpack) - equip_to_slot_or_del(new /obj/item/card/emag(src), slot_in_backpack) - else + if(is_leader) equip_to_slot_or_del(new /obj/item/pinpointer(src), slot_in_backpack) equip_to_slot_or_del(new /obj/item/disk/nuclear(src), slot_in_backpack) - + else + equip_to_slot_or_del(new /obj/item/grenade/plastic/x4(src), slot_in_backpack) + equip_to_slot_or_del(new /obj/item/card/emag(src), slot_in_backpack) equip_to_slot_or_del(new /obj/item/melee/energy/sword/saber(src), slot_l_store) equip_to_slot_or_del(new /obj/item/grenade/empgrenade(src), slot_r_store) equip_to_slot_or_del(new /obj/item/tank/emergency_oxygen/double/full(src), slot_s_store) diff --git a/code/modules/arcade/mob_hunt/battle_computer.dm b/code/modules/arcade/mob_hunt/battle_computer.dm index e5f2af123fb..8ae577fe338 100644 --- a/code/modules/arcade/mob_hunt/battle_computer.dm +++ b/code/modules/arcade/mob_hunt/battle_computer.dm @@ -27,11 +27,11 @@ team = "Blue" avatar_y_offset = 1 -/obj/machinery/computer/mob_battle_terminal/red/initialize() +/obj/machinery/computer/mob_battle_terminal/red/Initialize() ..() check_connection() -/obj/machinery/computer/mob_battle_terminal/blue/initialize() +/obj/machinery/computer/mob_battle_terminal/blue/Initialize() ..() check_connection() diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm index e5f1cb10525..e92330754f2 100644 --- a/code/modules/assembly/bomb.dm +++ b/code/modules/assembly/bomb.dm @@ -45,13 +45,13 @@ if((istype(W, /obj/item/weldingtool) && W:welding)) if(!status) status = 1 - bombers += "[key_name(user)] welded a single tank bomb. Temperature: [bombtank.air_contents.temperature-T0C]" + investigate_log("[key_name(user)] welded a single tank bomb. Temperature: [bombtank.air_contents.temperature-T0C]", INVESTIGATE_BOMB) msg_admin_attack("[key_name_admin(user)] welded a single tank bomb. Temperature: [bombtank.air_contents.temperature-T0C]") log_game("[key_name(user)] welded a single tank bomb. Temperature: [bombtank.air_contents.temperature - T0C]") to_chat(user, "A pressure hole has been bored to [bombtank] valve. \The [bombtank] can now be ignited.") else status = 0 - bombers += "[key_name(user)] unwelded a single tank bomb. Temperature: [bombtank.air_contents.temperature-T0C]" + investigate_log("[key_name(user)] unwelded a single tank bomb. Temperature: [bombtank.air_contents.temperature-T0C]", INVESTIGATE_BOMB) to_chat(user, "The hole has been closed.") add_fingerprint(user) ..() diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm index 08601522c5e..785e4549a47 100644 --- a/code/modules/assembly/igniter.dm +++ b/code/modules/assembly/igniter.dm @@ -28,7 +28,7 @@ if(istype(src.loc.loc, /obj/structure/reagent_dispensers/fueltank/)) var/obj/structure/reagent_dispensers/fueltank/tank = src.loc.loc if(tank) - tank.boom() + tank.boom(TRUE) if(istype(src.loc.loc, /obj/item/reagent_containers/glass/beaker/)) var/obj/item/reagent_containers/glass/beaker/beakerbomb = src.loc.loc if(beakerbomb) @@ -41,4 +41,4 @@ /obj/item/assembly/igniter/attack_self(mob/user as mob) activate() add_fingerprint(user) - return \ No newline at end of file + return diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index 6bcefc6027c..5d6aa7490e2 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -75,7 +75,7 @@ if(!user.hand) which_hand = "r_hand" triggered(user, which_hand) - user.visible_message("[user] accidentally sets off [src], breaking their fingers.", \ + user.visible_message("[user] accidentally sets off [src], breaking [user.p_their()] fingers.", \ "You accidentally trigger [src]!") return to_chat(user, "You disarm [src].") @@ -91,7 +91,7 @@ if(!user.hand) which_hand = "r_hand" triggered(user, which_hand) - user.visible_message("[user] accidentally sets off [src], breaking their fingers.", \ + user.visible_message("[user] accidentally sets off [src], breaking [user.p_their()] fingers.", \ "You accidentally trigger [src]!") return ..() @@ -114,7 +114,7 @@ on_found(mob/finder as mob) if(armed) - finder.visible_message("[finder] accidentally sets off [src], breaking their fingers.", \ + finder.visible_message("[finder] accidentally sets off [src], breaking [finder.p_their()] fingers.", \ "You accidentally trigger [src]!") triggered(finder, finder.hand ? "l_hand" : "r_hand") return 1 //end the search! diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 1886cd4ee65..6a2019b9001 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -23,7 +23,8 @@ if(radio_controller) set_frequency(frequency) -/obj/item/assembly/signaler/initialize() +/obj/item/assembly/signaler/Initialize() + ..() if(radio_controller) set_frequency(frequency) diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index 5d8c0ed1e98..a585a689f2c 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -114,7 +114,7 @@ timing = !timing if(timing && istype(holder, /obj/item/transfer_valve)) message_admins("[key_name_admin(usr)] activated [src] attachment on [holder].") - bombers += "[key_name(usr)] activated [src] attachment for [loc]" + investigate_log("[key_name(usr)] activated [src] attachment for [loc]", INVESTIGATE_BOMB) log_game("[key_name(usr)] activated [src] attachment for [loc]") update_icon() if(href_list["reset"]) diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index e5c42e495f2..94e0ea2acce 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -29,7 +29,8 @@ var/brute_damage = 0 var/oxy_damage = 0 -/obj/effect/landmark/corpse/initialize() +/obj/effect/landmark/corpse/Initialize() + ..() if(istype(src,/obj/effect/landmark/corpse/clown)) var/obj/effect/landmark/corpse/clown/C = src C.chooseRank() diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm index d964663298f..d5e2cbcd34d 100644 --- a/code/modules/awaymissions/gateway.dm +++ b/code/modules/awaymissions/gateway.dm @@ -9,7 +9,7 @@ var/obj/machinery/gateway/centerstation/the_gateway = null unacidable = 1 var/active = 0 -/obj/machinery/gateway/initialize() +/obj/machinery/gateway/Initialize() ..() update_icon() update_density_from_dir() @@ -44,7 +44,7 @@ var/obj/machinery/gateway/centerstation/the_gateway = null if(!the_gateway) the_gateway = src -/obj/machinery/gateway/centerstation/initialize() +/obj/machinery/gateway/centerstation/Initialize() ..() update_icon() wait = world.time + config.gateway_delay //+ thirty minutes default @@ -170,7 +170,7 @@ var/obj/machinery/gateway/centerstation/the_gateway = null var/obj/machinery/gateway/centeraway/stationgate = null -/obj/machinery/gateway/centeraway/initialize() +/obj/machinery/gateway/centeraway/Initialize() ..() update_icon() stationgate = locate(/obj/machinery/gateway/centerstation) in world diff --git a/code/modules/awaymissions/loot.dm b/code/modules/awaymissions/loot.dm index 49af9a43ce6..6497d62648a 100644 --- a/code/modules/awaymissions/loot.dm +++ b/code/modules/awaymissions/loot.dm @@ -5,7 +5,8 @@ var/lootdoubles = 0 //if the same item can be spawned twice var/loot = "" //a list of possible items to spawn- a string of paths -/obj/effect/spawner/away/lootdrop/initialize() +/obj/effect/spawner/away/lootdrop/Initialize() + ..() var/list/things = params2list(loot) if(things && things.len) diff --git a/code/modules/awaymissions/map_rng.dm b/code/modules/awaymissions/map_rng.dm index 64350c99737..7618996fdf9 100644 --- a/code/modules/awaymissions/map_rng.dm +++ b/code/modules/awaymissions/map_rng.dm @@ -18,13 +18,8 @@ template_name = tname if(template_name) template = map_templates[template_name] - // Catches the interim-zone of worldstart and roundstart - // I want both the ticker to exist (so mapped-in maploaders don't trip this) - // but also not have started yet (since the zlevel system would handle this on its own otherwise) - if((ticker && ticker.current_state < GAME_STATE_PLAYING)) - attempt_init() -/obj/effect/landmark/map_loader/initialize() +/obj/effect/landmark/map_loader/Initialize() ..() if(template) load(template) @@ -48,7 +43,7 @@ /obj/effect/landmark/map_loader/random var/template_list = "" -/obj/effect/landmark/map_loader/random/initialize() +/obj/effect/landmark/map_loader/random/Initialize() ..() if(template_list) template_name = safepick(splittext(template_list, ";")) diff --git a/code/modules/awaymissions/maploader/reader.dm b/code/modules/awaymissions/maploader/reader.dm index b44fd01e45c..5ff625544fd 100644 --- a/code/modules/awaymissions/maploader/reader.dm +++ b/code/modules/awaymissions/maploader/reader.dm @@ -422,13 +422,6 @@ var/global/dmm_suite/preloader/_preloader = new return to_return -//atom creation method that preloads variables at creation -/atom/New() - if(use_preloader && (src.type == _preloader.target_path))//in case the instanciated atom is creating other atoms in New() - _preloader.load(src) - - . = ..() - /dmm_suite/Destroy() ..() return QDEL_HINT_HARDDEL_NOW diff --git a/code/modules/awaymissions/mission_code/spacehotel.dm b/code/modules/awaymissions/mission_code/spacehotel.dm index e86123abc2e..4e4f2628736 100644 --- a/code/modules/awaymissions/mission_code/spacehotel.dm +++ b/code/modules/awaymissions/mission_code/spacehotel.dm @@ -54,7 +54,7 @@ name = "space hotel pamphlet" info = "

Welcome to Deep Space Hotel 419!

Thank you for choosing our hotel. Simply hand your credit or debit card to the concierge and get your room key! To check out, hand your credit card back.

Conditions:

  • The hotel is not responsible for any losses due to time or space anomalies.
  • The hotel is not responsible for events that occur outside of the hotel station, including, but not limited to, events that occur inside of dimensional pockets.
  • The hotel is not responsible for overcharging your account.
  • The hotel is not responsible for missing persons.
  • The hotel is not responsible for mind-altering effects due to drugs, magic, demons, or space worms.
" -/obj/effect/landmark/map_loader/hotel_room/initialize() +/obj/effect/landmark/map_loader/hotel_room/Initialize() ..() // load and randomly assign rooms var/global/list/south_room_templates = list() diff --git a/code/modules/awaymissions/zvis.dm b/code/modules/awaymissions/zvis.dm index 73bbff2198f..4324377149d 100644 --- a/code/modules/awaymissions/zvis.dm +++ b/code/modules/awaymissions/zvis.dm @@ -22,7 +22,7 @@ ..() levels += src -/obj/effect/levelref/initialize() +/obj/effect/levelref/Initialize() ..() for(var/obj/effect/levelref/O in levels) if(id == O.id && O != src) @@ -161,7 +161,7 @@ ..() portals += src -/obj/effect/view_portal/initialize() +/obj/effect/view_portal/Initialize() ..() if(id) for(var/obj/effect/view_portal/O in portals) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 282603a8879..060e53df5b7 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -411,7 +411,7 @@ BLIND // can't see anything desc = "[desc] They have had their toes opened up." update_icon() else - to_chat(user, "[src] have already had their toes cut open!") + to_chat(user, "[src] have already had [p_their()] toes cut open!") return else ..() @@ -489,7 +489,7 @@ BLIND // can't see anything for(var/obj/item/I in O.contents) //Dump the pocket out onto the floor below the user. user.unEquip(I,1) - user.visible_message("[user] bellows, [pick("shredding", "ripping open", "tearing off")] their jacket in a fit of rage!","You accidentally [pick("shred", "rend", "tear apart")] \the [src] with your [pick("excessive", "extreme", "insane", "monstrous", "ridiculous", "unreal", "stupendous")] [pick("power", "strength")]!") + user.visible_message("[user] bellows, [pick("shredding", "ripping open", "tearing off")] [user.p_their()] jacket in a fit of rage!","You accidentally [pick("shred", "rend", "tear apart")] [src] with your [pick("excessive", "extreme", "insane", "monstrous", "ridiculous", "unreal", "stupendous")] [pick("power", "strength")]!") user.unEquip(src) qdel(src) //Now that the pockets have been emptied, we can safely destroy the jacket. user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!")) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 32f86cc6e57..dc1504b80b6 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -132,3 +132,14 @@ cell.forceMove(get_turf(loc)) cell = null update_icon() + +/obj/item/clothing/gloves/fingerless/rapid + name = "Gloves of the north star" + desc = "Just looking at these fills you with an urge to beat the shit out of people." + +/obj/item/clothing/gloves/fingerless/rapid/Touch(mob/living/target, proximity = TRUE) + var/mob/living/M = loc + + if(M.a_intent == INTENT_HARM) + M.changeNext_move(CLICK_CD_RAPID) + .= FALSE \ No newline at end of file diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 10f5a348318..dc8c4b59a4d 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -222,7 +222,7 @@ return 1 /obj/item/clothing/head/fedora/proc/tip_fedora(mob/user) - user.visible_message("[user] tips their fedora.", "You tip your fedora") + user.visible_message("[user] tips [user.p_their()] fedora.", "You tip your fedora") /obj/item/clothing/head/fez diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index 60cbfff3dd9..4ee5182844d 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -22,8 +22,8 @@ return 0 else if(security_lock && locked) if(do_unlock(user)) - visible_message("[user] unlocks their [src.name].", \ - "[user] unlocks their [src.name].") + visible_message("[user] unlocks [user.p_their()] [src.name].", \ + "[user] unlocks [user.p_their()] [src.name].") ..() return 1 @@ -169,7 +169,7 @@ return 1 /obj/item/clothing/mask/fakemoustache/proc/pontificate(mob/user) - user.visible_message("\ [user] twirls \his moustache and laughs [pick("fiendishly","maniacally","diabolically","evilly")]!") + user.visible_message("\ [user] twirls [user.p_their()] moustache and laughs [pick("fiendishly","maniacally","diabolically","evilly")]!") //scarves (fit in in mask slot) diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index 7a2d9e5e495..eab5aa0c5bb 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -366,7 +366,7 @@ correct_piece.icon_state = "[initial(icon_state)]" switch(msg_type) if("boots") - to_chat(wearer, "\The [correct_piece] relax their grip on your legs.") + to_chat(wearer, "\The [correct_piece] relax [correct_piece.p_their()] grip on your legs.") if(user != wearer) to_chat(user, "\The [correct_piece] has been unsealed.") wearer.update_inv_shoes() diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index 6d2e0363138..aac34032dfb 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -131,7 +131,7 @@ /obj/item/clothing/accessory/stethoscope/attack(mob/living/carbon/human/M, mob/living/user) if(ishuman(M) && isliving(user)) if(user == M) - user.visible_message("[user] places \the [src] against \his chest and listens attentively.", "You place \the [src] against your chest...") + user.visible_message("[user] places [src] against [user.p_their()] chest and listens attentively.", "You place [src] against your chest...") else user.visible_message("[user] places \the [src] against [M]'s chest and listens attentively.", "You place \the [src] against [M]'s chest...") var/obj/item/organ/internal/H = M.get_int_organ(/obj/item/organ/internal/heart) @@ -250,7 +250,7 @@ to_chat(user, "Waving around a badge before swiping an ID would be pretty pointless.") return if(isliving(user)) - user.visible_message("[user] displays their Nanotrasen Internal Security Legal Authorization Badge.\nIt reads: [stored_name], NT Security.","You display your Nanotrasen Internal Security Legal Authorization Badge.\nIt reads: [stored_name], NT Security.") + user.visible_message("[user] displays [user.p_their()] Nanotrasen Internal Security Legal Authorization Badge.\nIt reads: [stored_name], NT Security.","You display your Nanotrasen Internal Security Legal Authorization Badge.\nIt reads: [stored_name], NT Security.") /obj/item/clothing/accessory/holobadge/attackby(var/obj/item/O as obj, var/mob/user as mob, params) if(istype(O, /obj/item/card/id) || istype(O, /obj/item/pda)) @@ -284,7 +284,7 @@ /obj/item/clothing/accessory/holobadge/attack(mob/living/carbon/human/M, mob/living/user) if(isliving(user)) - user.visible_message("[user] invades [M]'s personal space, thrusting [src] into their face insistently.","You invade [M]'s personal space, thrusting [src] into their face insistently. You are the law.") + user.visible_message("[user] invades [M]'s personal space, thrusting [src] into [M.p_their()] face insistently.","You invade [M]'s personal space, thrusting [src] into [M.p_their()] face insistently. You are the law.") /obj/item/storage/box/holobadge name = "holobadge box" diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index a075dbdfba3..141d9ed0bf6 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -46,7 +46,7 @@ var/mob/living/carbon/human/target = M if(istype(target.species, /datum/species/machine)) - to_chat(user, "[target] has no skin, how do you expect to tattoo them?") + to_chat(user, "[target] has no skin, how do you expect to tattoo [target.p_them()]?") return if(target.m_styles["body"] != "None") @@ -497,8 +497,8 @@ #undef USED_MOD_SUIT /obj/item/fluff/merchant_sallet_modkit //Travelling Merchant: Trav Noble. This is what they spawn in with - name = "sallet modkit" - desc = "A modkit that can make most helmets look like a steel sallet." + name = "SG Helmet modkit" + desc = "A modkit that can make most helmets look like a Shellguard Helmet." icon_state = "modkit" w_class = WEIGHT_CLASS_SMALL force = 0 @@ -649,49 +649,49 @@ icon_state = "kakicharakiti" /obj/item/clothing/head/helmet/fluff/merchant_sallet //Travelling Merchant: Trav Noble. This >>IS NOT<< what they spawn in with - name = "Steel Sallet" - desc = "A heavy steel sallet with the word Noble scratched into the side. Comes with a Bevor attached." + name = "Shellguard Helmet" + desc = "A Shellguard Helmet with the name Noble written on the inside." icon = 'icons/obj/custom_items.dmi' icon_state = "merchant_sallet_visor_bevor" item_state = "merchant_sallet_visor_bevor" actions_types = list(/datum/action/item_action/toggle_helmet_mode) toggle_cooldown = 20 - toggle_sound = 'sound/items/ZippoClose.ogg' + toggle_sound = 'sound/items/change_jaws.ogg' flags = BLOCKHAIR flags_inv = HIDEEYES|HIDEMASK|HIDEFACE|HIDEEARS - var/state = "Visor & Bevor" + var/state = "Soldier Up" /obj/item/clothing/head/helmet/fluff/merchant_sallet/attack_self(mob/user) if(!user.incapacitated() && (world.time > cooldown + toggle_cooldown) && Adjacent(user)) var/list/options = list() - options["Visor & Bevor"] = list( + options["Soldier Up"] = list( "icon_state" = "merchant_sallet_visor_bevor", - "visor_flags" = HIDEEYES, - "mask_flags" = HIDEMASK|HIDEFACE - ) - options["Visor Only"] = list( - "icon_state" = "merchant_sallet_visor", - "visor_flags" = HIDEEYES, - "mask_flags" = HIDEFACE - ) - options["Bevor Only"] = list( - "icon_state" = "merchant_sallet_bevor", - "visor_flags" = null, - "mask_flags" = HIDEMASK|HIDEFACE - ) - options["Neither Visor nor Bevor"] = list( - "icon_state" = "merchant_sallet", "visor_flags" = null, "mask_flags" = null ) + options["Soldier Down"] = list( + "icon_state" = "merchant_sallet_visor", + "visor_flags" = HIDEEYES, + "mask_flags" = HIDEMASK|HIDEFACE + ) + options["Technician Up"] = list( + "icon_state" = "merchant_sallet_bevor", + "visor_flags" = null, + "mask_flags" = null + ) + options["Technician Down"] = list( + "icon_state" = "merchant_sallet", + "visor_flags" = HIDEEYES, + "mask_flags" = HIDEMASK|HIDEFACE + ) - var/choice = input(user, "How would you like to adjust the sallet?", "Adjust Sallet") as null|anything in options + var/choice = input(user, "How would you like to adjust the helmet?", "Adjust Helmet") as null|anything in options if(choice && choice != state && !user.incapacitated() && Adjacent(user)) var/list/new_state = options[choice] icon_state = new_state["icon_state"] state = choice - to_chat(user, "You adjust the sallet.") + to_chat(user, "You adjust the helmet.") playsound(src.loc, "[toggle_sound]", 100, 0, 4) user.update_inv_head() return 1 @@ -1265,6 +1265,8 @@ name = "engraved hand mirror" desc = "A very classy hand mirror, with fancy detailing." icon = 'icons/obj/custom_items.dmi' + lefthand_file = 'icons/mob/inhands/fluff_lefthand.dmi' + righthand_file = 'icons/mob/inhands/fluff_righthand.dmi' icon_state = "hand_mirror" attack_verb = list("smacked") hitsound = 'sound/weapons/tap.ogg' @@ -1311,6 +1313,8 @@ name = "Classy victorian suit" desc = "A blue and black victorian suit with silver buttons, very fancy!" icon = 'icons/obj/custom_items.dmi' + lefthand_file = 'icons/mob/inhands/fluff_lefthand.dmi' + righthand_file = 'icons/mob/inhands/fluff_righthand.dmi' icon_state = "victorianlightfire" item_state = "victorianvest" item_color = "victorianlightfire" @@ -1330,7 +1334,7 @@ to_chat(user, "You can't modify [target]!") return - to_chat(user, "You modify the appearance of [target] based on the kite blueprints.") + to_chat(user, "You modify the appearance of [target] based on the kit blueprints.") var/obj/spacepod/pod = target pod.icon = 'icons/48x48/custom_pod.dmi' pod.icon_state = "pod_dece" @@ -1348,4 +1352,22 @@ righthand_file = 'icons/mob/inhands/fluff_righthand.dmi' icon_state = "teri_horn" item_state = "teri_horn" - honk_sound = 'sound/items/teri_horn.ogg' \ No newline at end of file + honk_sound = 'sound/items/teri_horn.ogg' + +/obj/item/clothing/suit/fluff/vetcoat //Furasian: Fillmoore Grayson + name = "Veteran Coat" + desc = "An old, yet well-kept Nanotrasen uniform. Very few of its kind are still produced." + icon = 'icons/obj/custom_items.dmi' + lefthand_file = 'icons/mob/inhands/fluff_lefthand.dmi' + righthand_file = 'icons/mob/inhands/fluff_righthand.dmi' + icon_state = "alchemistcoatblack" + item_state = "alchemistcoatblack" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + +/obj/item/clothing/suit/fluff/vetcoat/red //Furasian: Fillmoore Grayson + icon_state = "alchemistcoatred" + item_state = "alchemistcoatred" + +/obj/item/clothing/suit/fluff/vetcoat/navy //Furasian: Fillmoore Grayson + icon_state = "alchemistcoatnavy" + item_state = "alchemistcoatnavy" \ No newline at end of file diff --git a/code/modules/economy/ATM.dm b/code/modules/economy/ATM.dm index 014f87ac310..6306fa5a83e 100644 --- a/code/modules/economy/ATM.dm +++ b/code/modules/economy/ATM.dm @@ -38,7 +38,7 @@ log transactions ..() machine_id = "[station_name()] RT #[num_financial_terminals++]" -/obj/machinery/atm/initialize() +/obj/machinery/atm/Initialize() ..() reconnect_database() @@ -122,6 +122,8 @@ log transactions if(issilicon(user)) to_chat(user, "Artificial unit recognized. Artificial units do not currently receive monetary compensation, as per Nanotrasen regulation #1005.") return + if(!linked_db) + reconnect_database() ui_interact(user) /obj/machinery/atm/attack_ghost(mob/user) @@ -199,12 +201,9 @@ log transactions authenticated_account.security_level = new_sec_level if("attempt_auth") if(linked_db) - // check if they have low security enabled - scan_user(usr) - - if(!ticks_left_locked_down && held_card) + if(!ticks_left_locked_down) var/tried_account_num = text2num(href_list["account_num"]) - if(!tried_account_num) + if(!tried_account_num && held_card) tried_account_num = held_card.associated_account_number var/tried_pin = text2num(href_list["account_pin"]) @@ -323,30 +322,3 @@ log transactions //create the most effective combination of notes to make up the requested amount /obj/machinery/atm/proc/withdraw_arbitrary_sum(arbitrary_sum) new /obj/item/stack/spacecash(get_step(get_turf(src), turn(dir, 180)), arbitrary_sum) - -//stolen wholesale and then edited a bit from newscasters, which are awesome and by Agouri -/obj/machinery/atm/proc/scan_user(mob/living/carbon/human/H) - if(!authenticated_account && linked_db) - if(H.wear_id) - var/obj/item/card/id/I - if(istype(H.wear_id, /obj/item/card/id) ) - I = H.wear_id - else if(istype(H.wear_id, /obj/item/pda) ) - var/obj/item/pda/P = H.wear_id - I = P.id - if(I) - authenticated_account = attempt_account_access(I.associated_account_number) - if(authenticated_account) - to_chat(H, "[bicon(src)]Access granted. Welcome user '[authenticated_account.owner_name].'") - - //create a transaction log entry - var/datum/transaction/T = new() - T.target_name = authenticated_account.owner_name - T.purpose = "Remote terminal access" - T.source_terminal = machine_id - T.date = current_date_string - T.time = station_time_timestamp() - authenticated_account.transaction_log.Add(T) - - view_screen = NO_SCREEN - SSnanoui.update_uis(src) diff --git a/code/modules/error_handler/error_handler.dm b/code/modules/error_handler/error_handler.dm index a527367ee2b..09a5d20833e 100644 --- a/code/modules/error_handler/error_handler.dm +++ b/code/modules/error_handler/error_handler.dm @@ -96,7 +96,7 @@ var/total_runtimes_skipped = 0 // Now to actually output the error info... log_world("\[[time_stamp()]] Runtime in [e.file],[e.line]: [e]") - log_runtime_txt("\[[time_stamp()]] Runtime in [e.file],[e.line]: [e]") + log_runtime_txt("Runtime in [e.file],[e.line]: [e]") for(var/line in desclines) log_world(line) log_runtime_txt(line) diff --git a/code/modules/events/aurora_caelus.dm b/code/modules/events/aurora_caelus.dm index e35c7de6ee3..6cf5e1b1ce7 100644 --- a/code/modules/events/aurora_caelus.dm +++ b/code/modules/events/aurora_caelus.dm @@ -6,11 +6,11 @@ var/aurora_progress = 0 //this cycles from 1 to 7, slowly changing colors from gentle green to gentle blue /datum/event/aurora_caelus/announce() - event_announcement.Announce("[station_name()]: A harmless cloud of ions is approaching your station, and will exhaust their energy battering the hull.\ -Nanotrasen has approved a short break for all employees to relax and observe this very rare event.\ -During this time, starlight will be bright but gentle, shifting between quiet green and blue colors.\ -Any staff who would like to view these lights for themselves may proceed to the area nearest to them with viewing ports to open space.\ -We hope you enjoy the lights.", "Harmless ions approaching", new_sound = 'sound/misc/notice2.ogg', from = "Nanotrasen Meterology Divison") + event_announcement.Announce("[station_name()]: A harmless cloud of ions is approaching your station, and will exhaust their energy battering the hull. \ +Nanotrasen has approved a short break for all employees to relax and observe this very rare event. \ +During this time, starlight will be bright but gentle, shifting between quiet green and blue colors. \ +Any staff who would like to view these lights for themselves may proceed to the area nearest to them with viewing ports to open space. \ +We hope you enjoy the lights.", "Harmless ions approaching", new_sound = 'sound/misc/notice2.ogg', from = "Nanotrasen Meteorology Division") for(var/V in player_list) var/mob/M = V if((M.client.prefs.toggles & SOUND_MIDI) && is_station_level(M.z)) @@ -37,10 +37,10 @@ We hope you enjoy the lights.", "Harmless ions approaching", new_sound = 'sound/ for(var/s in GLOB.station_level_space_turfs) var/turf/space/S = s fade_to_black(S) - event_announcement.Announce("The aurora caelus event is now ending. Starlight conditions will slowly return to normal.\ -When this has concluded, please return to your workplace and continue work as normal.\ + event_announcement.Announce("The Aurora Caelus event is now ending. Starlight conditions will slowly return to normal. \ +When this has concluded, please return to your workplace and continue work as normal. \ Have a pleasant shift, [station_name()], and thank you for watching with us.", -"Harmless ions approaching", new_sound = 'sound/misc/notice2.ogg', from = "Nanotrasen Meterology Divison") +"Harmless ions approaching", new_sound = 'sound/misc/notice2.ogg', from = "Nanotrasen Meteorology Division") /datum/event/aurora_caelus/proc/fade_to_black(turf/space/S) set waitfor = FALSE @@ -48,4 +48,4 @@ Have a pleasant shift, [station_name()], and thank you for watching with us.", while(S.light_range > new_light) S.set_light(S.light_range - 0.2) sleep(30) - S.set_light(new_light, 1, l_color = "") // we should be able to use `, null` as the last arg but BYOND is a piece of FUCKING SHIT AND SET_LIGHT DOESN'T WORK THAT WAY DESPITE EVERY FUCKING THING ABOUT IT INDICATING THAT IT GODDAMN WELL SHOULD AAAAAAAAAAAAAAAAA \ No newline at end of file + S.set_light(new_light, 1, l_color = "") // we should be able to use `, null` as the last arg but BYOND is a piece of FUCKING SHIT AND SET_LIGHT DOESN'T WORK THAT WAY DESPITE EVERY FUCKING THING ABOUT IT INDICATING THAT IT GODDAMN WELL SHOULD AAAAAAAAAAAAAAAAA diff --git a/code/modules/events/ion_storm.dm b/code/modules/events/ion_storm.dm index 520d8805bbd..b4a67ac9850 100644 --- a/code/modules/events/ion_storm.dm +++ b/code/modules/events/ion_storm.dm @@ -493,7 +493,7 @@ /proc/generate_static_ion_law() /var/list/players = list() for(var/mob/living/carbon/human/player in player_list) - if( !player.mind || player.mind.assigned_role == "MODE" || player.client.inactivity > MinutesToTicks(10)) + if( !player.mind || player.mind.assigned_role == player.mind.special_role || player.client.inactivity > MinutesToTicks(10)) continue players += player.real_name var/random_player = "The Captain" diff --git a/code/modules/fish/fish_items.dm b/code/modules/fish/fish_items.dm index 58566f9872d..63a4b668930 100644 --- a/code/modules/fish/fish_items.dm +++ b/code/modules/fish/fish_items.dm @@ -26,7 +26,7 @@ throw_range = 7 suicide_act(mob/user) //"A tiny net is a death sentence: it's a net and it's tiny!" https://www.youtube.com/watch?v=FCI9Y4VGCVw - to_chat(viewers(user), "[user] places the [src.name] on top of \his head, \his fingers tangled in the netting! It looks like \he's trying to commit suicide.") + to_chat(viewers(user), "[user] places the [src.name] on top of [user.p_their()] head, [user.p_their()] fingers tangled in the netting! It looks like [user.p_theyre()] trying to commit suicide.") return(OXYLOSS) /obj/item/fishfood @@ -52,7 +52,7 @@ attack_verb = list("scrubbed", "brushed", "scraped") suicide_act(mob/user) - to_chat(viewers(user), "[user] is vigorously scrubbing \himself raw with the [src.name]! It looks like \he's trying to commit suicide.") + to_chat(viewers(user), "[user] is vigorously scrubbing [user.p_them()]self raw with the [name]! It looks like [user.p_theyre()] trying to commit suicide.") return(BRUTELOSS|FIRELOSS) ////////////////////////////////////////////// diff --git a/code/modules/flufftext/Dreaming.dm b/code/modules/flufftext/Dreaming.dm index 6a1d28eaf87..b69ed4738b6 100644 --- a/code/modules/flufftext/Dreaming.dm +++ b/code/modules/flufftext/Dreaming.dm @@ -43,7 +43,7 @@ nightmare() if(ishuman(src)) if(prob(10)) - emote("writhes in their sleep.") + emote("writhes in [p_their()] sleep.") dir = pick(cardinal) /mob/living/carbon/proc/experience_dream(dream_image, isNightmare) diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 021db59f8a4..d8a1f4f1526 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -641,6 +641,7 @@ Gunshots/explosions/opening doors/less rare audio (done) updateimage() else if(prob(15)) + do_attack_animation(my_target, ATTACK_EFFECT_PUNCH) if(weapon_name) my_target.playsound_local(my_target, weap.hitsound, 1) my_target.show_message("[src.name] has attacked [my_target] with [weapon_name]!", 1) diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm index a5aa4662c63..91ee910c8d4 100644 --- a/code/modules/food_and_drinks/drinks/drinks.dm +++ b/code/modules/food_and_drinks/drinks/drinks.dm @@ -47,7 +47,7 @@ to_chat(chugger, "You need to open [src] first!") return if(istype(chugger) && loc == chugger && src == chugger.get_active_hand() && reagents.total_volume) - chugger.visible_message("[chugger] raises the [src] to their mouth and starts [pick("chugging","gulping")] it down like [pick("a savage","a mad beast","it's going out of style","there's no tomorrow")]!", "You start chugging \the [src].", "You hear what sounds like gulping.") + chugger.visible_message("[chugger] raises the [src] to [chugger.p_their()] mouth and starts [pick("chugging","gulping")] it down like [pick("a savage","a mad beast","it's going out of style","there's no tomorrow")]!", "You start chugging [src].", "You hear what sounds like gulping.") while(do_mob(chugger, chugger, 40)) //Between the default time for do_mob and the time it takes for a vampire to suck blood. chugger.eat(src, chugger, 25) //Half of a glass, quarter of a bottle. if(!reagents.total_volume) //Finish in style. diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index a7274c53f4e..d9c59a46d58 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -102,8 +102,8 @@ target.visible_message("[user] has hit [target][head_attack_message] with a bottle of [name]!", \ "[user] has hit [target][head_attack_message] with a bottle of [name]!") else - user.visible_message("[target] hits \himself with a bottle of [name][head_attack_message]!", \ - "[target] hits \himself with a bottle of [name][head_attack_message]!") + user.visible_message("[target] hits [target.p_them()]self with a bottle of [name][head_attack_message]!", \ + "[target] hits [target.p_them()]self with a bottle of [name][head_attack_message]!") //Attack logs add_attack_logs(user, target, "Hit with [src]") diff --git a/code/modules/food_and_drinks/drinks/drinks/cans.dm b/code/modules/food_and_drinks/drinks/drinks/cans.dm index 282278c990e..979acf473fd 100644 --- a/code/modules/food_and_drinks/drinks/drinks/cans.dm +++ b/code/modules/food_and_drinks/drinks/drinks/cans.dm @@ -33,14 +33,14 @@ to_chat(user, "You need to open the drink!") return else if(M == user && !reagents.total_volume && user.a_intent == INTENT_HARM && user.zone_sel.selecting == "head") - user.visible_message("[user] crushes ["\the [src]"] on \his forehead!", "You crush \the [src] on your forehead.") + user.visible_message("[user] crushes [src] on [user.p_their()] forehead!", "You crush [src] on your forehead.") crush(user) return return ..() /obj/item/reagent_containers/food/drinks/cans/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/storage/bag/trash/cyborg)) - user.visible_message("[user] crushes \the [src] in their trash compactor.", "You crush \the [src] in your trash compactor.") + user.visible_message("[user] crushes [src] in [user.p_their()] trash compactor.", "You crush [src] in your trash compactor.") var/obj/can = crush(user) can.attackby(I, user, params) return 1 diff --git a/code/modules/food_and_drinks/drinks/drinks/shotglass.dm b/code/modules/food_and_drinks/drinks/drinks/shotglass.dm index 24b50489402..393543b093c 100644 --- a/code/modules/food_and_drinks/drinks/drinks/shotglass.dm +++ b/code/modules/food_and_drinks/drinks/drinks/shotglass.dm @@ -38,7 +38,7 @@ /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/proc/clumsilyDrink(mob/living/carbon/human/user) //Clowns beware if(burn_state != ON_FIRE) return - user.visible_message("[user] pours [src] all over themself!", "You pour [src] all over yourself!", "You hear a 'whoompf' and a sizzle.") + user.visible_message("[user] pours [src] all over [user.p_them()]self!", "You pour [src] all over yourself!", "You hear a 'whoompf' and a sizzle.") extinguish(TRUE) reagents.reaction(user, TOUCH) reagents.clear_reagents() @@ -90,7 +90,7 @@ if((CLUMSY in user.mutations) && prob(50)) clumsilyDrink(user) else - user.visible_message("[user] places their hand over [src] to put it out!", "You use your hand to extinguish [src]!") + user.visible_message("[user] places [user.p_their()] hand over [src] to put it out!", "You use your hand to extinguish [src]!") extinguish() /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/MouseDrop(mob/living/carbon/human/user) diff --git a/code/modules/food_and_drinks/food/condiment.dm b/code/modules/food_and_drinks/food/condiment.dm index f9ec698f196..2f9848a87ef 100644 --- a/code/modules/food_and_drinks/food/condiment.dm +++ b/code/modules/food_and_drinks/food/condiment.dm @@ -131,7 +131,7 @@ possible_states = list() /obj/item/reagent_containers/food/condiment/saltshaker/suicide_act(mob/user) - user.visible_message("[user] begins to swap forms with the salt shaker! It looks like \he's trying to commit suicide.") + user.visible_message("[user] begins to swap forms with the salt shaker! It looks like [user.p_theyre()] trying to commit suicide.") var/newname = "[name]" name = "[user.name]" user.name = newname diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index 1b8c0b5b989..bc442486d5c 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -1250,7 +1250,14 @@ /obj/item/reagent_containers/food/snacks/monkeycube/proc/Expand() if(!QDELETED(src)) visible_message("[src] expands!") - new/mob/living/carbon/human(get_turf(src), monkey_type) + if(fingerprintslast) + log_game("Cube ([monkey_type]) inflated, last touched by: " + fingerprintslast) + else + log_game("Cube ([monkey_type]) inflated, last touched by: NO_DATA") + var/mob/living/carbon/human/creature = new /mob/living/carbon/human(get_turf(src)) + if(LAZYLEN(fingerprintshidden)) + creature.fingerprintshidden = fingerprintshidden.Copy() + creature.set_species(monkey_type) qdel(src) /obj/item/reagent_containers/food/snacks/monkeycube/farwacube diff --git a/code/modules/hydroponics/beekeeping/beebox.dm b/code/modules/hydroponics/beekeeping/beebox.dm index 58cec86dc1c..950b873af55 100644 --- a/code/modules/hydroponics/beekeeping/beebox.dm +++ b/code/modules/hydroponics/beekeeping/beebox.dm @@ -179,7 +179,7 @@ visible_message("The [qb] refuses to settle down. Maybe it's something to do with its reagent?") if(queen_bee) - visible_message("[user] sets [qb] down inside the apiary, making it their new home.") + visible_message("[user] sets [qb] down inside the apiary, making it [user.p_their()] new home.") var/relocated = 0 for(var/b in bees) var/mob/living/simple_animal/hostile/poison/bees/worker/B = b diff --git a/code/modules/hydroponics/grown/banana.dm b/code/modules/hydroponics/grown/banana.dm index 36065efa298..6874038a7bf 100644 --- a/code/modules/hydroponics/grown/banana.dm +++ b/code/modules/hydroponics/grown/banana.dm @@ -25,7 +25,7 @@ bitesize = 5 /obj/item/reagent_containers/food/snacks/grown/banana/suicide_act(mob/user) - user.visible_message("[user] is aiming the [src.name] at themself! It looks like \he's trying to commit suicide.") + user.visible_message("[user] is aiming the [name] at [user.p_them()]self! It looks like [user.p_theyre()] trying to commit suicide.") playsound(loc, 'sound/items/bikehorn.ogg', 50, 1, -1) sleep(25) if(!user) @@ -34,7 +34,7 @@ sleep(25) if(!user) return (OXYLOSS) - user.visible_message("[user] laughs so hard they begin to suffocate!") + user.visible_message("[user] laughs so hard [user.p_they()] begin[user.p_s()] to suffocate!") return (OXYLOSS) /obj/item/grown/bananapeel @@ -49,7 +49,7 @@ throw_range = 7 /obj/item/grown/bananapeel/suicide_act(mob/user) - user.visible_message("[user] is deliberately slipping on the [src.name]! It looks like \he's trying to commit suicide.") + user.visible_message("[user] is deliberately slipping on the [src.name]! It looks like [user.p_theyre()] trying to commit suicide.") playsound(loc, 'sound/misc/slip.ogg', 50, 1, -1) return (BRUTELOSS) diff --git a/code/modules/hydroponics/grown/citrus.dm b/code/modules/hydroponics/grown/citrus.dm index 157a2813b8f..86bc8082661 100644 --- a/code/modules/hydroponics/grown/citrus.dm +++ b/code/modules/hydroponics/grown/citrus.dm @@ -109,7 +109,7 @@ var/area/A = get_area(user) user.visible_message("[user] primes the [src]!", "You prime the [src]!") var/message = "[ADMIN_LOOKUPFLW(user)] primed a combustible lemon for detonation at [A] [ADMIN_COORDJMP(user)]" - bombers += message + investigate_log("[key_name(user)] primed a combustible lemon for detonation at [A] [COORD(user)].", INVESTIGATE_BOMB) message_admins(message) log_game("[key_name(user)] primed a combustible lemon for detonation at [A] [COORD(user)].") if(iscarbon(user)) diff --git a/code/modules/hydroponics/grown/kudzu.dm b/code/modules/hydroponics/grown/kudzu.dm index 0169e3bb5d9..09c16544396 100644 --- a/code/modules/hydroponics/grown/kudzu.dm +++ b/code/modules/hydroponics/grown/kudzu.dm @@ -22,7 +22,7 @@ return S /obj/item/seeds/kudzu/suicide_act(mob/user) - user.visible_message("[user] swallows the pack of kudzu seeds! It looks like \he's trying to commit suicide..") + user.visible_message("[user] swallows the pack of kudzu seeds! It looks like [user.p_theyre()] trying to commit suicide..") plant(user) return (BRUTELOSS) diff --git a/code/modules/hydroponics/grown/nettle.dm b/code/modules/hydroponics/grown/nettle.dm index c65c9dcf618..8bbe4a4e240 100644 --- a/code/modules/hydroponics/grown/nettle.dm +++ b/code/modules/hydroponics/grown/nettle.dm @@ -44,7 +44,7 @@ attack_verb = list("stung") /obj/item/grown/nettle/suicide_act(mob/user) - user.visible_message("[user] is eating some of the [src.name]! It looks like \he's trying to commit suicide.") + user.visible_message("[user] is eating some of the [src.name]! It looks like [user.p_theyre()] trying to commit suicide.") return (BRUTELOSS|TOXLOSS) /obj/item/grown/nettle/pickup(mob/living/user) diff --git a/code/modules/hydroponics/hydroitemdefines.dm b/code/modules/hydroponics/hydroitemdefines.dm index 7bb064f752e..6b2da2c29ae 100644 --- a/code/modules/hydroponics/hydroitemdefines.dm +++ b/code/modules/hydroponics/hydroitemdefines.dm @@ -33,7 +33,7 @@ reagents.add_reagent("atrazine", 100) /obj/item/reagent_containers/spray/weedspray/suicide_act(mob/user) - user.visible_message("[user] is huffing the [src.name]! It looks like \he's trying to commit suicide.") + user.visible_message("[user] is huffing the [src.name]! It looks like [user.p_theyre()] trying to commit suicide.") return (TOXLOSS) /obj/item/reagent_containers/spray/pestspray // -- Skie @@ -55,7 +55,7 @@ reagents.add_reagent("pestkiller", 100) /obj/item/reagent_containers/spray/pestspray/suicide_act(mob/user) - user.visible_message("[user] is huffing the [src.name]! It looks like \he's trying to commit suicide.") + user.visible_message("[user] is huffing the [src.name]! It looks like [user.p_theyre()] trying to commit suicide.") return (TOXLOSS) /obj/item/cultivator @@ -89,7 +89,7 @@ sharp = 1 /obj/item/hatchet/suicide_act(mob/user) - user.visible_message("[user] is chopping at \himself with the [src.name]! It looks like \he's trying to commit suicide.") + user.visible_message("[user] is chopping at [user.p_them()]self with the [name]! It looks like [user.p_theyre()] trying to commit suicide.") playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1) return (BRUTELOSS) @@ -119,7 +119,7 @@ var/swiping = FALSE /obj/item/scythe/suicide_act(mob/user) - user.visible_message("[user] is beheading \himself with the [src.name]! It looks like \he's trying to commit suicide.") + user.visible_message("[user] is beheading [user.p_them()]self with the [name]! It looks like [user.p_theyre()] trying to commit suicide.") if(ishuman(user)) var/mob/living/carbon/human/H = user var/obj/item/organ/external/affecting = H.get_organ("head") diff --git a/code/modules/library/computers/checkout.dm b/code/modules/library/computers/checkout.dm index 0f0774aa1f4..fdcfee0e87a 100644 --- a/code/modules/library/computers/checkout.dm +++ b/code/modules/library/computers/checkout.dm @@ -49,7 +49,7 @@ if(src.arcanecheckout) new /obj/item/tome(src.loc) to_chat(user, "Your sanity barely endures the seconds spent in the vault's browsing window. The only thing to remind you of this when you stop browsing is a dusty old tome sitting on the desk. You don't really remember printing it.") - user.visible_message("[user] stares at the blank screen for a few moments, his expression frozen in fear. When he finally awakens from it, he looks a lot older.", 2) + user.visible_message("[user] stares at the blank screen for a few moments, [user.p_their()] expression frozen in fear. When [user.p_they()] finally awaken[user.p_s()] from it, [user.p_they()] look[user.p_s()] a lot older.", 2) src.arcanecheckout = 0 if(1) // Inventory diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index a0b10f29f38..8df5d593b9b 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -24,7 +24,7 @@ var/tmp/busy = 0 var/list/allowed_books = list(/obj/item/book, /obj/item/spellbook, /obj/item/storage/bible, /obj/item/tome) //Things allowed in the bookcase -/obj/structure/bookcase/initialize() +/obj/structure/bookcase/Initialize() ..() for(var/obj/item/I in loc) if(is_type_in_list(I, allowed_books)) diff --git a/code/modules/lighting/lighting_atom.dm b/code/modules/lighting/lighting_atom.dm index 679f6fb86ef..075e3e47a20 100644 --- a/code/modules/lighting/lighting_atom.dm +++ b/code/modules/lighting/lighting_atom.dm @@ -40,16 +40,6 @@ else light = new /datum/light_source(src, .) -/atom/New() - . = ..() - - if(light_power && light_range) - update_light() - - if(opacity && isturf(loc)) - var/turf/T = loc - T.has_opaque_atom = TRUE // No need to recalculate it in this case, it's guranteed to be on afterwards anyways. - /atom/Destroy() if(light) light.destroy() diff --git a/code/modules/lighting/lighting_overlay.dm b/code/modules/lighting/lighting_overlay.dm index 6fe55eed0ff..1a421e6d1ad 100644 --- a/code/modules/lighting/lighting_overlay.dm +++ b/code/modules/lighting/lighting_overlay.dm @@ -9,7 +9,6 @@ invisibility = INVISIBILITY_LIGHTING color = LIGHTING_BASE_MATRIX icon_state = "light1" - auto_init = 0 // doesn't need special init blend_mode = BLEND_MULTIPLY var/lum_r = 0 diff --git a/code/modules/logic/logic_base.dm b/code/modules/logic/logic_base.dm index db891ab383c..519c47c408b 100644 --- a/code/modules/logic/logic_base.dm +++ b/code/modules/logic/logic_base.dm @@ -50,7 +50,7 @@ component_parts += LG component_parts += new /obj/item/stack/cable_coil(null, 1) -/obj/machinery/logic_gate/initialize() +/obj/machinery/logic_gate/Initialize() ..() set_frequency(frequency) diff --git a/code/modules/martial_arts/brawling.dm b/code/modules/martial_arts/brawling.dm index 9f9fa5236b2..a40a52b86be 100644 --- a/code/modules/martial_arts/brawling.dm +++ b/code/modules/martial_arts/brawling.dm @@ -11,7 +11,7 @@ /datum/martial_art/boxing/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) - A.do_attack_animation(D) + A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) var/atk_verb = pick("left hook","right hook","straight punch") @@ -62,7 +62,7 @@ /datum/martial_art/drunk_brawling/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) add_attack_logs(A, D, "Melee attacked with [src]") - A.do_attack_animation(D) + A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) var/atk_verb = pick("jab","uppercut","overhand punch","drunken right hook","drunken left hook") diff --git a/code/modules/martial_arts/krav_maga.dm b/code/modules/martial_arts/krav_maga.dm index d17d1b30495..9e889bdce7a 100644 --- a/code/modules/martial_arts/krav_maga.dm +++ b/code/modules/martial_arts/krav_maga.dm @@ -109,7 +109,6 @@ datum/martial_art/krav_maga/grab_act(var/mob/living/carbon/human/A, var/mob/livi if(check_streak(A,D)) return 1 add_attack_logs(A, D, "Melee attacked with [src]") - A.do_attack_animation(D) var/picked_hit_type = pick("punches", "kicks") var/bonus_damage = 10 if(D.weakened || D.resting || D.lying) @@ -117,8 +116,10 @@ datum/martial_art/krav_maga/grab_act(var/mob/living/carbon/human/A, var/mob/livi picked_hit_type = "stomps on" D.apply_damage(bonus_damage, BRUTE) if(picked_hit_type == "kicks" || picked_hit_type == "stomps") + A.do_attack_animation(D, ATTACK_EFFECT_KICK) playsound(get_turf(D), 'sound/effects/hit_kick.ogg', 50, 1, -1) else + A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) playsound(get_turf(D), 'sound/effects/hit_punch.ogg', 50, 1, -1) D.visible_message("[A] [picked_hit_type] [D]!", \ "[A] [picked_hit_type] you!") diff --git a/code/modules/martial_arts/martial.dm b/code/modules/martial_arts/martial.dm index 3e1be19b0de..4e76f7dcc74 100644 --- a/code/modules/martial_arts/martial.dm +++ b/code/modules/martial_arts/martial.dm @@ -33,7 +33,6 @@ /datum/martial_art/proc/basic_hit(var/mob/living/carbon/human/A,var/mob/living/carbon/human/D) - A.do_attack_animation(D) var/damage = rand(A.species.punchdamagelow, A.species.punchdamagehigh) var/datum/unarmed_attack/attack = A.species.unarmed @@ -41,6 +40,12 @@ if(D.lying) atk_verb = "kick" + switch(atk_verb) + if("kick") + A.do_attack_animation(D, ATTACK_EFFECT_KICK) + else + A.do_attack_animation(D, attack.animation_type) + if(!damage) playsound(D.loc, attack.miss_sound, 25, 1, -1) D.visible_message("[A] has attempted to [atk_verb] [D]!") @@ -205,7 +210,7 @@ return ..() var/mob/living/carbon/C = target if(C.stat) - to_chat(user, "It would be dishonorable to attack a foe while they cannot retaliate.") + to_chat(user, "It would be dishonorable to attack a foe while [C.p_they()] cannot retaliate.") return switch(user.a_intent) if(INTENT_DISARM) @@ -231,7 +236,7 @@ if(H.staminaloss && !H.sleeping) var/total_health = (H.health - H.staminaloss) if(total_health <= config.health_threshold_crit && !H.stat) - H.visible_message("[user] delivers a heavy hit to [H]'s head, knocking them out cold!", \ + H.visible_message("[user] delivers a heavy hit to [H]'s head, knocking [H.p_them()] out cold!", \ "[user] knocks you unconscious!") H.SetSleeping(30) H.adjustBrainLoss(25) diff --git a/code/modules/martial_arts/mimejutsu.dm b/code/modules/martial_arts/mimejutsu.dm index 4d8edbf7236..38605c3538d 100644 --- a/code/modules/martial_arts/mimejutsu.dm +++ b/code/modules/martial_arts/mimejutsu.dm @@ -55,8 +55,8 @@ /datum/martial_art/mimejutsu/proc/mimePalm(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) if(!D.stat && !D.stunned && !D.weakened) - D.visible_message("[A] has barely touched [D] with their palm!", \ - "[A] hovers their palm over your face!") + D.visible_message("[A] has barely touched [D] with [A.p_their()] palm!", \ + "[A] hovers [A.p_their()] palm over your face!") var/atom/throw_target = get_edge_target_turf(D, get_dir(D, get_step_away(D, A))) D.throw_at(throw_target, 200, 4,A) diff --git a/code/modules/martial_arts/plasma_fist.dm b/code/modules/martial_arts/plasma_fist.dm index d2e047dc08d..5aed9b8e9e1 100644 --- a/code/modules/martial_arts/plasma_fist.dm +++ b/code/modules/martial_arts/plasma_fist.dm @@ -46,7 +46,7 @@ return /datum/martial_art/plasma_fist/proc/Plasma(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) - A.do_attack_animation(D) + A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) playsound(D.loc, 'sound/weapons/punch1.ogg', 50, 1, -1) A.say("PLASMA FIST!") D.visible_message("[A] has hit [D] with THE PLASMA FIST TECHNIQUE!", \ diff --git a/code/modules/martial_arts/sleeping_carp.dm b/code/modules/martial_arts/sleeping_carp.dm index 45f4948bc14..a6cd25d50c0 100644 --- a/code/modules/martial_arts/sleeping_carp.dm +++ b/code/modules/martial_arts/sleeping_carp.dm @@ -36,7 +36,7 @@ /datum/martial_art/the_sleeping_carp/proc/wristWrench(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) if(!D.stat && !D.stunned && !D.weakened) - A.do_attack_animation(D) + A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) D.visible_message("[A] grabs [D]'s wrist and wrenches it sideways!", \ "[A] grabs your wrist and violently wrenches it to the side!") playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1) @@ -51,7 +51,7 @@ /datum/martial_art/the_sleeping_carp/proc/backKick(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) if(A.dir == D.dir && !D.stat && !D.weakened) - A.do_attack_animation(D) + A.do_attack_animation(D, ATTACK_EFFECT_KICK) D.visible_message("[A] kicks [D] in the back!", \ "[A] kicks you in the back, making you stumble and fall!") step_to(D,get_step(D,D.dir),1) @@ -64,7 +64,7 @@ /datum/martial_art/the_sleeping_carp/proc/kneeStomach(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) if(!D.stat && !D.weakened) - A.do_attack_animation(D) + A.do_attack_animation(D, ATTACK_EFFECT_KICK) D.visible_message("[A] knees [D] in the stomach!", \ "[A] winds you with a knee in the stomach!") D.audible_message("[D] gags!") @@ -78,7 +78,7 @@ /datum/martial_art/the_sleeping_carp/proc/headKick(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) if(!D.stat && !D.weakened) - A.do_attack_animation(D) + A.do_attack_animation(D, ATTACK_EFFECT_KICK) D.visible_message("[A] kicks [D] in the head!", \ "[A] kicks you in the jaw!") D.apply_damage(20, BRUTE, "head") @@ -92,9 +92,9 @@ /datum/martial_art/the_sleeping_carp/proc/elbowDrop(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) if(D.weakened || D.resting || D.stat) - A.do_attack_animation(D) + A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) D.visible_message("[A] elbow drops [D]!", \ - "[A] piledrives you with their elbow!") + "[A] piledrives you with [A.p_their()] elbow!") if(D.stat) D.death() //FINISH HIM! D.apply_damage(50, BRUTE, "chest") @@ -117,7 +117,7 @@ add_to_streak("H",D) if(check_streak(A,D)) return 1 - A.do_attack_animation(D) + A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) var/atk_verb = pick("punches", "kicks", "chops", "hits", "slams") D.visible_message("[A] [atk_verb] [D]!", \ "[A] [atk_verb] you!") diff --git a/code/modules/mining/lavaland/loot/ashdragon_loot.dm b/code/modules/mining/lavaland/loot/ashdragon_loot.dm index fba4725e5f0..ff0db975895 100644 --- a/code/modules/mining/lavaland/loot/ashdragon_loot.dm +++ b/code/modules/mining/lavaland/loot/ashdragon_loot.dm @@ -52,7 +52,7 @@ return to_chat(user, "You call out for aid, attempting to summon spirits to your side.") - notify_ghosts("[user] is raising their [src], calling for your help!", enter_link="(Click to help)", source = user, action = NOTIFY_FOLLOW) + notify_ghosts("[user] is raising [user.p_their()] [src], calling for your help!", enter_link="(Click to help)", source = user, action = NOTIFY_FOLLOW) summon_cooldown = world.time + 600 diff --git a/code/modules/mining/lavaland/loot/bubblegum_loot.dm b/code/modules/mining/lavaland/loot/bubblegum_loot.dm index 03ee7eb0a8d..613239b58a9 100644 --- a/code/modules/mining/lavaland/loot/bubblegum_loot.dm +++ b/code/modules/mining/lavaland/loot/bubblegum_loot.dm @@ -75,7 +75,7 @@ for(var/mob/living/carbon/human/H in player_list) if(H == L) continue - to_chat(H, "You have an overwhelming desire to kill [L]. They have been marked red! Go kill them!") + to_chat(H, "You have an overwhelming desire to kill [L]. [L.p_they(TRUE)] [L.p_have()] been marked red! Go kill [L.p_them()]!") H.put_in_hands(new /obj/item/kitchen/knife/butcher(H)) qdel(src) \ No newline at end of file diff --git a/code/modules/mining/lavaland/loot/hierophant_loot.dm b/code/modules/mining/lavaland/loot/hierophant_loot.dm index 62d72d4a0a9..1d66d59d316 100644 --- a/code/modules/mining/lavaland/loot/hierophant_loot.dm +++ b/code/modules/mining/lavaland/loot/hierophant_loot.dm @@ -57,7 +57,7 @@ return if(!rune) if(isturf(user.loc)) - user.visible_message("[user] holds [src] carefully in front of them, moving it in a strange pattern...", \ + user.visible_message("[user] holds [src] carefully in front of [user.p_them()], moving it in a strange pattern...", \ "You start creating a hierophant rune to teleport to...") timer = world.time + 51 if(do_after(user, 50, target = user)) @@ -67,7 +67,7 @@ var/obj/effect/hierophant/H = new/obj/effect/hierophant(T) rune = H user.update_action_buttons_icon() - user.visible_message("[user] creates a strange rune beneath them!", \ + user.visible_message("[user] creates a strange rune beneath [user.p_them()]!", \ "You create a hierophant rune, which you can teleport yourself and any allies to at any time!\n\ You can remove the rune to place a new one by striking it with the staff.") else diff --git a/code/modules/mining/lavaland/loot/tendril_loot.dm b/code/modules/mining/lavaland/loot/tendril_loot.dm index 9c6ea675ba3..e1c6c7f28a9 100644 --- a/code/modules/mining/lavaland/loot/tendril_loot.dm +++ b/code/modules/mining/lavaland/loot/tendril_loot.dm @@ -355,7 +355,7 @@ if(cooldown < world.time) feedback_add_details("immortality_talisman","U") // usage cooldown = world.time + 600 - user.visible_message("[user] vanishes from reality, leaving a a hole in their place!") + user.visible_message("[user] vanishes from reality, leaving a a hole in [user.p_their()] place!") var/obj/effect/immortality_talisman/Z = new(get_turf(src.loc)) Z.name = "hole in reality" Z.desc = "It's shaped an awful lot like [user.name]." diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 4ab29741ef6..933ef9a6403 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -106,7 +106,7 @@ var/list/image/ghost_darkness_images = list() //this is a list of images for thi Transfer_mind is there to check if mob is being deleted/not going to have a body. Works together with spawning an observer, noted above. */ -/mob/dead/observer/Life() +/mob/dead/observer/Life(seconds, times_fired) ..() if(!loc) return if(!client) return 0 @@ -419,7 +419,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(.) update_following() -/mob/Life() +/mob/Life(seconds, times_fired) // to catch teleports etc which directly set loc update_following() return ..() diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index 711d4cea992..57be913c699 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -70,7 +70,7 @@ if(speaker == src) to_chat(src, "You cannot hear yourself speak!") else - to_chat(src, "[speaker_name][alt_name] talks but you cannot hear them.") + to_chat(src, "[speaker_name][alt_name] talks but you cannot hear [speaker.p_them()].") else if(language) to_chat(src, "[speaker_name][alt_name] [track][language.format_message(message, verb)]") diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm index dc2e8ee7106..93bdfe30c27 100644 --- a/code/modules/mob/language.dm +++ b/code/modules/mob/language.dm @@ -310,12 +310,7 @@ to_chat(speaker,"You can't communicate while unable to move your hands to your head!") return FALSE - var/their = "their" - if(speaker.gender == "female") - their = "her" - if(speaker.gender == "male") - their = "his" - speaker.visible_message("[speaker] touches [their] fingers to [their] temple.") //If placed in grey/broadcast, it will happen regardless of the success of the action. + speaker.visible_message("[speaker] touches [speaker.p_their()] fingers to [speaker.p_their()] temple.") //If placed in grey/broadcast, it will happen regardless of the success of the action. return TRUE diff --git a/code/modules/mob/living/carbon/alien/alien_defense.dm b/code/modules/mob/living/carbon/alien/alien_defense.dm index 22954451834..0d9c50ba5cc 100644 --- a/code/modules/mob/living/carbon/alien/alien_defense.dm +++ b/code/modules/mob/living/carbon/alien/alien_defense.dm @@ -29,7 +29,7 @@ In all, this is a lot like the monkey code. /N else if(health > 0) - M.do_attack_animation(src) + M.do_attack_animation(src, ATTACK_EFFECT_BITE) playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1) var/damage = 1 visible_message("[M.name] bites [src]!", \ @@ -52,8 +52,10 @@ In all, this is a lot like the monkey code. /N help_shake_act(M) if(INTENT_GRAB) grabbedby(M) - if(INTENT_HARM, INTENT_DISARM) - M.do_attack_animation(src) + if(INTENT_HARM) + M.do_attack_animation(src, ATTACK_EFFECT_PUNCH) + if(INTENT_DISARM) + M.do_attack_animation(src, ATTACK_EFFECT_DISARM) return 1 return 0 diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm index a2527317eec..7f23be77774 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm @@ -161,7 +161,7 @@ Doesn't work on other aliens/AI.*/ stomach_contents.Remove(M) M.loc = loc //Paralyse(10) - src.visible_message("[src] hurls out the contents of their stomach!") + src.visible_message("[src] hurls out the contents of [p_their()] stomach!") return /mob/living/carbon/proc/getPlasma() diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm index 0056bb709a5..41ebc8d8247 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm @@ -43,3 +43,8 @@ else playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) visible_message("[M] has attempted to disarm [src]!") + +/mob/living/carbon/alien/humanoid/do_attack_animation(atom/A, visual_effect_icon, obj/item/used_item, no_effect, end_pixel_y) + if(!no_effect && !visual_effect_icon) + visual_effect_icon = ATTACK_EFFECT_CLAW + ..() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/humanoid/life.dm b/code/modules/mob/living/carbon/alien/humanoid/life.dm index a13fce956da..180d6bd8072 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/life.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/life.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/alien/humanoid/Life() +/mob/living/carbon/alien/humanoid/Life(seconds, times_fired) . = ..() update_icons() diff --git a/code/modules/mob/living/carbon/alien/larva/larva_defense.dm b/code/modules/mob/living/carbon/alien/larva/larva_defense.dm index fc7fa22510b..ef38327b5ee 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva_defense.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva_defense.dm @@ -22,3 +22,8 @@ playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) visible_message("[M] has attempted to kick [src]!", \ "[M] has attempted to kick [src]!") + +/mob/living/carbon/alien/larva/do_attack_animation(atom/A, visual_effect_icon, obj/item/used_item, no_effect, end_pixel_y) + if(!no_effect && !visual_effect_icon) + visual_effect_icon = ATTACK_EFFECT_BITE + ..() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm index 4faa957163c..5bbb31c00d1 100644 --- a/code/modules/mob/living/carbon/alien/larva/life.dm +++ b/code/modules/mob/living/carbon/alien/larva/life.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/alien/larva/Life() +/mob/living/carbon/alien/larva/Life(seconds, times_fired) if(..()) //still breathing // GROW! if(amount_grown < max_grown) diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm index ae03f103e86..e09340872b9 100644 --- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm +++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm @@ -96,7 +96,7 @@ if(ticker && ticker.mode) ticker.mode.xenos += new_xeno.mind new_xeno.mind.name = new_xeno.name - new_xeno.mind.assigned_role = "MODE" + new_xeno.mind.assigned_role = SPECIAL_ROLE_XENOMORPH new_xeno.mind.special_role = SPECIAL_ROLE_XENOMORPH new_xeno << sound('sound/voice/hiss5.ogg',0,0,0,100)//To get the player's attention diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index a1e4b555412..a0969b82b25 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -256,14 +256,9 @@ H.play_xylophone() else if(player_logged) - M.visible_message("[M] shakes [src], but they do not respond. Probably suffering from SSD.", \ - "You shake [src], but they are unresponsive. Probably suffering from SSD.") + M.visible_message("[M] shakes [src], but [p_they()] [p_do()] not respond. Probably suffering from SSD.", \ + "You shake [src], but [p_theyre()] unresponsive. Probably suffering from SSD.") if(lying) // /vg/: For hugs. This is how update_icon figgers it out, anyway. - N3X15 - var/t_him = "it" - if(gender == MALE) - t_him = "him" - else if(gender == FEMALE) - t_him = "her" if(ishuman(src)) var/mob/living/carbon/human/H = src if(H.w_uniform) @@ -277,8 +272,8 @@ playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) if(!player_logged) M.visible_message( \ - "[M] shakes [src] trying to wake [t_him] up!",\ - "You shake [src] trying to wake [t_him] up!",\ + "[M] shakes [src] trying to wake [p_them()] up!",\ + "You shake [src] trying to wake [p_them()] up!",\ ) // BEGIN HUGCODE - N3X else @@ -745,7 +740,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, if(restrained()) changeNext_move(CLICK_CD_BREAKOUT) last_special = world.time + CLICK_CD_BREAKOUT - visible_message("[src] attempts to unbuckle themself!", \ + visible_message("[src] attempts to unbuckle [p_them()]self!", \ "You attempt to unbuckle yourself... (This will take around one minute and you need to stay still.)") if(do_after(src, 600, 0, target = src)) if(!buckled) @@ -762,11 +757,11 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, Weaken(3, 1, 1) //We dont check for CANWEAKEN, I don't care how immune to weakening you are, if you're rolling on the ground, you're busy. update_canmove() spin(32,2) - visible_message("[src] rolls on the floor, trying to put themselves out!", \ + visible_message("[src] rolls on the floor, trying to put [p_them()]self out!", \ "You stop, drop, and roll!") sleep(30) if(fire_stacks <= 0) - visible_message("[src] has successfully extinguished themselves!", \ + visible_message("[src] has successfully extinguished [p_them()]self!", \ "You extinguish yourself.") ExtinguishMob() diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index e9ae44bf433..be46cc9fa7d 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -173,14 +173,14 @@ if("clack", "clacks") var/M = handle_emote_param(param) - message = "[src] clacks their mandibles[M ? " at [M]" : ""]." + message = "[src] clacks [p_their()] mandibles[M ? " at [M]" : ""]." playsound(loc, 'sound/effects/Kidanclack.ogg', 50, 0) //Credit to DrMinky (freesound.org) for the sound. m_type = 2 if("click", "clicks") var/M = handle_emote_param(param) - message = "[src] clicks their mandibles[M ? " at [M]" : ""]." + message = "[src] clicks [p_their()] mandibles[M ? " at [M]" : ""]." playsound(loc, 'sound/effects/Kidanclack2.ogg', 50, 0) //Credit to DrMinky (freesound.org) for the sound. m_type = 2 @@ -201,7 +201,7 @@ if("quill", "quills") var/M = handle_emote_param(param) - message = "[src] rustles their quills[M ? " at [M]" : ""]." + message = "[src] rustles [p_their()] quills[M ? " at [M]" : ""]." playsound(loc, 'sound/effects/voxrustle.ogg', 50, 0) //Credit to sound-ideas (freesfx.co.uk) for the sound. m_type = 2 @@ -222,12 +222,12 @@ if("wag", "wags") if(body_accessory) if(body_accessory.try_restrictions(src)) - message = "[src] starts wagging \his tail." + message = "[src] starts wagging [p_their()] tail." start_tail_wagging(1) else if(species.bodyflags & TAIL_WAGGING) if(!wear_suit || !(wear_suit.flags_inv & HIDETAIL) && !istype(wear_suit, /obj/item/clothing/suit/space)) - message = "[src] starts wagging \his tail." + message = "[src] starts wagging [p_their()] tail." start_tail_wagging(1) else return @@ -237,7 +237,7 @@ if("swag", "swags") if(species.bodyflags & TAIL_WAGGING || body_accessory) - message = "[src] stops wagging \his tail." + message = "[src] stops wagging [p_their()] tail." stop_tail_wagging(1) else return @@ -282,7 +282,7 @@ if("choke", "chokes") if(miming) - message = "[src] clutches \his throat desperately!" + message = "[src] clutches [p_their()] throat desperately!" m_type = 1 else if(!muzzled) @@ -294,7 +294,7 @@ if("burp", "burps") if(miming) - message = "[src] opens their mouth rather obnoxiously." + message = "[src] opens [p_their()] mouth rather obnoxiously." m_type = 1 else if(!muzzled) @@ -330,7 +330,7 @@ if("flap", "flaps") if(!restrained()) - message = "[src] flaps \his wings." + message = "[src] flaps [p_their()] wings." m_type = 2 if(miming) m_type = 1 @@ -382,7 +382,7 @@ if("aflap", "aflaps") if(!restrained()) - message = "[src] flaps \his wings ANGRILY!" + message = "[src] flaps [p_their()] wings ANGRILY!" m_type = 2 if(miming) m_type = 1 @@ -479,7 +479,7 @@ m_type = 2 if("deathgasp", "deathgasps") - message = "[src] [species.death_message]" + message = "[src] [replacetext(species.death_message, "their", p_their())]" m_type = 1 if("giggle", "giggles") @@ -527,7 +527,7 @@ message = "[src] cries." m_type = 2 else - message = "[src] makes a weak noise. \He frowns." + message = "[src] makes a weak noise. [p_they(TRUE)] frown[p_s()]." m_type = 2 if("sigh", "sighs") @@ -605,7 +605,7 @@ message = "[src] takes a drag from a cigarette and blows \"[M]\" out in smoke." m_type = 1 else - message = "[src] says, \"[M], please. They had a family.\" [name] takes a drag from a cigarette and blows their name out in smoke." + message = "[src] says, \"[M], please. They had a family.\" [name] takes a drag from a cigarette and blows [p_their()] name out in smoke." m_type = 2 if("point", "points") @@ -631,7 +631,7 @@ if("shake", "shakes") var/M = handle_emote_param(param, 1) //Check to see if the param is valid (mob with the param name is in view) but exclude ourselves. - message = "[src] shakes \his head[M ? " at [M]" : ""]." + message = "[src] shakes [p_their()] head[M ? " at [M]" : ""]." m_type = 1 if("shrug", "shrugs") @@ -742,7 +742,7 @@ if(M) message = "[src] hugs [M]." else - message = "[src] hugs \himself." + message = "[src] hugs [p_them()]self." if("handshake") m_type = 1 @@ -753,7 +753,7 @@ if(M.canmove && !M.r_hand && !M.restrained()) message = "[src] shakes hands with [M]." else - message = "[src] holds out \his hand to [M]." + message = "[src] holds out [p_their()] hand to [M]." if("dap", "daps") m_type = 1 @@ -763,7 +763,7 @@ if(M) message = "[src] gives daps to [M]." else - message = "[src] sadly can't find anybody to give daps to, and daps \himself. Shameful." + message = "[src] sadly can't find anybody to give daps to, and daps [p_them()]self. Shameful." if("slap", "slaps") m_type = 1 @@ -773,7 +773,7 @@ if(M) message = "[src] slaps [M] across the face. Ouch!" else - message = "[src] slaps \himself!" + message = "[src] slaps [p_them()]self!" adjustFireLoss(4) playsound(loc, 'sound/effects/snap.ogg', 50, 1) @@ -814,10 +814,10 @@ var/M = handle_emote_param(param) - message = "[src] snaps \his fingers[M ? " at [M]" : ""]." + message = "[src] snaps [p_their()] fingers[M ? " at [M]" : ""]." playsound(loc, 'sound/effects/fingersnap.ogg', 50, 1, -3) else - message = "[src] snaps \his fingers right off!" + message = "[src] snaps [p_their()] fingers right off!" playsound(loc, 'sound/effects/snap.ogg', 50, 1) // Needed for M_TOXIC_FART @@ -826,34 +826,34 @@ return // playsound(loc, 'sound/effects/fart.ogg', 50, 1, -3) //Admins still vote no to fun if(locate(/obj/item/storage/bible) in get_turf(src)) - to_chat(viewers(src), "[src] farts on the Bible!") - var/image/cross = image('icons/obj/storage.dmi',"bible") - var/adminbfmessage = "\blue [bicon(cross)] Bible Fart: [key_name(src, 1)] (?) (PP) (VV) (SM) ([admin_jump_link(src)]) (CA) (SMITE):" + to_chat(viewers(src), "[src] farts on the Bible!") + var/image/cross = image('icons/obj/storage.dmi', "bible") + var/adminbfmessage = "[bicon(cross)] Bible Fart: [key_name(src, 1)] (?) (PP) (VV) (SM) ([admin_jump_link(src)]) (CA) (SMITE):" for(var/client/X in admins) - if(check_rights(R_EVENT,0,X.mob)) + if(check_rights(R_EVENT, 0, X.mob)) to_chat(X, adminbfmessage) else if(TOXIC_FARTS in mutations) - message = "[src] unleashes a [pick("horrible","terrible","foul","disgusting","awful")] fart." + message = "[src] unleashes a [pick("horrible", "terrible", "foul", "disgusting", "awful")] fart." else if(SUPER_FART in mutations) - message = "[src] unleashes a [pick("loud","deafening")] fart." - newtonian_move(dir) + message = "[src] unleashes a [pick("loud", "deafening")] fart." else - message = "[src] [pick("passes wind","farts")]." + message = "[src] [pick("passes wind", "farts")]." m_type = 2 var/turf/location = get_turf(src) - var/aoe_range=2 // Default // Process toxic farts first. if(TOXIC_FARTS in mutations) - for(var/mob/M in range(location,aoe_range)) - if(M.internal != null && M.wear_mask && (M.wear_mask.flags & AIRTIGHT)) + for(var/mob/living/carbon/C in range(location, 2)) + if(C.internal != null && C.wear_mask && (C.wear_mask.flags & AIRTIGHT)) continue - // Now, we don't have this: - //new /obj/effects/fart_cloud(T,L) - if(M == src) + if(C == src) continue - M.reagents.add_reagent("jenkem", 1) + C.reagents.add_reagent("jenkem", 1) + + // Farting as a form of locomotion in space + if(SUPER_FART in mutations) + newtonian_move(dir) if("hem") message = "[src] hems." @@ -941,7 +941,7 @@ set desc = "Sets a description which will be shown when someone examines you." set category = "IC" - pose = sanitize(copytext(input(usr, "This is [src]. \He is...", "Pose", null) as text, 1, MAX_MESSAGE_LEN)) + pose = sanitize(copytext(input(usr, "This is [src]. [p_they(TRUE)] [p_are()]...", "Pose", null) as text, 1, MAX_MESSAGE_LEN)) /mob/living/carbon/human/verb/set_flavor() set name = "Set Flavour Text" diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index c15f30f94bd..ef352b5a8f8 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -23,41 +23,10 @@ if(wear_mask) skipface |= wear_mask.flags_inv & HIDEFACE - - // crappy hacks because you can't do \his[src] etc. I'm sorry this proc is so unreadable, blame the text macros :< - var/t_He = "It" //capitalised for use at the start of each line. - var/t_his = "its" - var/t_him = "it" - var/t_has = "has" - var/t_is = "is" - var/msg = "*---------*\nThis is " - if((skipjumpsuit && skipface)) //big suits/masks/helmets make it hard to tell their gender - t_He = "They" - t_his = "their" - t_him = "them" - t_has = "have" - t_is = "are" - else - if(icon) - msg += "[bicon(icon(icon, dir=SOUTH))] " //fucking BYOND: this should stop dreamseeker crashing if we -somehow- examine somebody before their icon is generated - switch(gender) - if(MALE) - t_He = "He" - t_his = "his" - t_him = "him" - if(FEMALE) - t_He = "She" - t_his = "her" - t_him = "her" - if(PLURAL) - t_He = "They" - t_his = "their" - t_him = "them" - t_has = "have" - t_is = "are" - + if(!(skipjumpsuit && skipface) && icon) //big suits/masks/helmets make it hard to tell their gender + msg += "[bicon(icon(icon, dir=SOUTH))] " //fucking BYOND: this should stop dreamseeker crashing if we -somehow- examine somebody before their icon is generated msg += "[name]" var/list/nospecies = list("Abductor", "Shadowling", "Neara", "Monkey", "Stok", "Farwa", "Wolpin") //species that won't show their race no matter what @@ -86,129 +55,129 @@ tie_msg += " with [english_accessory_list(U)]" if(w_uniform.blood_DNA) - msg += "[t_He] [t_is] wearing [bicon(w_uniform)] [w_uniform.gender==PLURAL?"some":"a"] [w_uniform.blood_color != "#030303" ? "blood-stained":"oil-stained"] [w_uniform.name][tie_msg]!\n" + msg += "[p_they(TRUE)] [p_are()] wearing [bicon(w_uniform)] [w_uniform.gender==PLURAL?"some":"a"] [w_uniform.blood_color != "#030303" ? "blood-stained":"oil-stained"] [w_uniform.name][tie_msg]!\n" else - msg += "[t_He] [t_is] wearing [bicon(w_uniform)] \a [w_uniform][tie_msg].\n" + msg += "[p_they(TRUE)] [p_are()] wearing [bicon(w_uniform)] \a [w_uniform][tie_msg].\n" //head if(head && !(head.flags & ABSTRACT)) if(head.blood_DNA) - msg += "[t_He] [t_is] wearing [bicon(head)] [head.gender==PLURAL?"some":"a"] [head.blood_color != "#030303" ? "blood-stained":"oil-stained"] [head.name] on [t_his] head!\n" + msg += "[p_they(TRUE)] [p_are()] wearing [bicon(head)] [head.gender==PLURAL?"some":"a"] [head.blood_color != "#030303" ? "blood-stained":"oil-stained"] [head.name] on [p_their()] head!\n" else - msg += "[t_He] [t_is] wearing [bicon(head)] \a [head] on [t_his] head.\n" + msg += "[p_they(TRUE)] [p_are()] wearing [bicon(head)] \a [head] on [p_their()] head.\n" //suit/armour if(wear_suit && !(wear_suit.flags & ABSTRACT)) if(wear_suit.blood_DNA) - msg += "[t_He] [t_is] wearing [bicon(wear_suit)] [wear_suit.gender==PLURAL?"some":"a"] [wear_suit.blood_color != "#030303" ? "blood-stained":"oil-stained"] [wear_suit.name]!\n" + msg += "[p_they(TRUE)] [p_are()] wearing [bicon(wear_suit)] [wear_suit.gender==PLURAL?"some":"a"] [wear_suit.blood_color != "#030303" ? "blood-stained":"oil-stained"] [wear_suit.name]!\n" else - msg += "[t_He] [t_is] wearing [bicon(wear_suit)] \a [wear_suit].\n" + msg += "[p_they(TRUE)] [p_are()] wearing [bicon(wear_suit)] \a [wear_suit].\n" //suit/armour storage if(s_store && !skipsuitstorage) if(s_store.blood_DNA) - msg += "[t_He] [t_is] carrying [bicon(s_store)] [s_store.gender==PLURAL?"some":"a"] [s_store.blood_color != "#030303" ? "blood-stained":"oil-stained"] [s_store.name] on [t_his] [wear_suit.name]!\n" + msg += "[p_they(TRUE)] [p_are()] carrying [bicon(s_store)] [s_store.gender==PLURAL?"some":"a"] [s_store.blood_color != "#030303" ? "blood-stained":"oil-stained"] [s_store.name] on [p_their()] [wear_suit.name]!\n" else - msg += "[t_He] [t_is] carrying [bicon(s_store)] \a [s_store] on [t_his] [wear_suit.name].\n" + msg += "[p_they(TRUE)] [p_are()] carrying [bicon(s_store)] \a [s_store] on [p_their()] [wear_suit.name].\n" //back if(back && !(back.flags & ABSTRACT)) if(back.blood_DNA) - msg += "[t_He] [t_has] [bicon(back)] [back.gender==PLURAL?"some":"a"] [back.blood_color != "#030303" ? "blood-stained":"oil-stained"] [back] on [t_his] back.\n" + msg += "[p_they(TRUE)] [p_have()] [bicon(back)] [back.gender==PLURAL?"some":"a"] [back.blood_color != "#030303" ? "blood-stained":"oil-stained"] [back] on [p_their()] back.\n" else - msg += "[t_He] [t_has] [bicon(back)] \a [back] on [t_his] back.\n" + msg += "[p_they(TRUE)] [p_have()] [bicon(back)] \a [back] on [p_their()] back.\n" //left hand if(l_hand && !(l_hand.flags & ABSTRACT)) if(l_hand.blood_DNA) - msg += "[t_He] [t_is] holding [bicon(l_hand)] [l_hand.gender==PLURAL?"some":"a"] [l_hand.blood_color != "#030303" ? "blood-stained":"oil-stained"] [l_hand.name] in [t_his] left hand!\n" + msg += "[p_they(TRUE)] [p_are()] holding [bicon(l_hand)] [l_hand.gender==PLURAL?"some":"a"] [l_hand.blood_color != "#030303" ? "blood-stained":"oil-stained"] [l_hand.name] in [p_their()] left hand!\n" else - msg += "[t_He] [t_is] holding [bicon(l_hand)] \a [l_hand] in [t_his] left hand.\n" + msg += "[p_they(TRUE)] [p_are()] holding [bicon(l_hand)] \a [l_hand] in [p_their()] left hand.\n" //right hand if(r_hand && !(r_hand.flags & ABSTRACT)) if(r_hand.blood_DNA) - msg += "[t_He] [t_is] holding [bicon(r_hand)] [r_hand.gender==PLURAL?"some":"a"] [r_hand.blood_color != "#030303" ? "blood-stained":"oil-stained"] [r_hand.name] in [t_his] right hand!\n" + msg += "[p_they(TRUE)] [p_are()] holding [bicon(r_hand)] [r_hand.gender==PLURAL?"some":"a"] [r_hand.blood_color != "#030303" ? "blood-stained":"oil-stained"] [r_hand.name] in [p_their()] right hand!\n" else - msg += "[t_He] [t_is] holding [bicon(r_hand)] \a [r_hand] in [t_his] right hand.\n" + msg += "[p_they(TRUE)] [p_are()] holding [bicon(r_hand)] \a [r_hand] in [p_their()] right hand.\n" //gloves if(gloves && !skipgloves && !(gloves.flags & ABSTRACT)) if(gloves.blood_DNA) - msg += "[t_He] [t_has] [bicon(gloves)] [gloves.gender==PLURAL?"some":"a"] [gloves.blood_color != "#030303" ? "blood-stained":"oil-stained"] [gloves.name] on [t_his] hands!\n" + msg += "[p_they(TRUE)] [p_have()] [bicon(gloves)] [gloves.gender==PLURAL?"some":"a"] [gloves.blood_color != "#030303" ? "blood-stained":"oil-stained"] [gloves.name] on [p_their()] hands!\n" else - msg += "[t_He] [t_has] [bicon(gloves)] \a [gloves] on [t_his] hands.\n" + msg += "[p_they(TRUE)] [p_have()] [bicon(gloves)] \a [gloves] on [p_their()] hands.\n" else if(blood_DNA) - msg += "[t_He] [t_has] [hand_blood_color != "#030303" ? "blood-stained":"oil-stained"] hands!\n" + msg += "[p_they(TRUE)] [p_have()] [hand_blood_color != "#030303" ? "blood-stained":"oil-stained"] hands!\n" //handcuffed? if(handcuffed) if(istype(handcuffed, /obj/item/restraints/handcuffs/cable/zipties)) - msg += "[t_He] [t_is] [bicon(handcuffed)] restrained with zipties!\n" + msg += "[p_they(TRUE)] [p_are()] [bicon(handcuffed)] restrained with zipties!\n" else if(istype(handcuffed, /obj/item/restraints/handcuffs/cable)) - msg += "[t_He] [t_is] [bicon(handcuffed)] restrained with cable!\n" + msg += "[p_they(TRUE)] [p_are()] [bicon(handcuffed)] restrained with cable!\n" else - msg += "[t_He] [t_is] [bicon(handcuffed)] handcuffed!\n" + msg += "[p_they(TRUE)] [p_are()] [bicon(handcuffed)] handcuffed!\n" //belt if(belt) if(belt.blood_DNA) - msg += "[t_He] [t_has] [bicon(belt)] [belt.gender==PLURAL?"some":"a"] [belt.blood_color != "#030303" ? "blood-stained":"oil-stained"] [belt.name] about [t_his] waist!\n" + msg += "[p_they(TRUE)] [p_have()] [bicon(belt)] [belt.gender==PLURAL?"some":"a"] [belt.blood_color != "#030303" ? "blood-stained":"oil-stained"] [belt.name] about [p_their()] waist!\n" else - msg += "[t_He] [t_has] [bicon(belt)] \a [belt] about [t_his] waist.\n" + msg += "[p_they(TRUE)] [p_have()] [bicon(belt)] \a [belt] about [p_their()] waist.\n" //shoes if(shoes && !skipshoes && !(shoes.flags & ABSTRACT)) if(shoes.blood_DNA) - msg += "[t_He] [t_is] wearing [bicon(shoes)] [shoes.gender==PLURAL?"some":"a"] [shoes.blood_color != "#030303" ? "blood-stained":"oil-stained"] [shoes.name] on [t_his] feet!\n" + msg += "[p_they(TRUE)] [p_are()] wearing [bicon(shoes)] [shoes.gender==PLURAL?"some":"a"] [shoes.blood_color != "#030303" ? "blood-stained":"oil-stained"] [shoes.name] on [p_their()] feet!\n" else - msg += "[t_He] [t_is] wearing [bicon(shoes)] \a [shoes] on [t_his] feet.\n" + msg += "[p_they(TRUE)] [p_are()] wearing [bicon(shoes)] \a [shoes] on [p_their()] feet.\n" else if(blood_DNA) - msg += "[t_He] [t_has] [feet_blood_color != "#030303" ? "blood-stained":"oil-stained"] feet!\n" + msg += "[p_they(TRUE)] [p_have()] [feet_blood_color != "#030303" ? "blood-stained":"oil-stained"] feet!\n" //mask if(wear_mask && !skipmask && !(wear_mask.flags & ABSTRACT)) if(wear_mask.blood_DNA) - msg += "[t_He] [t_has] [bicon(wear_mask)] [wear_mask.gender==PLURAL?"some":"a"] [wear_mask.blood_color != "#030303" ? "blood-stained":"oil-stained"] [wear_mask.name] on [t_his] face!\n" + msg += "[p_they(TRUE)] [p_have()] [bicon(wear_mask)] [wear_mask.gender==PLURAL?"some":"a"] [wear_mask.blood_color != "#030303" ? "blood-stained":"oil-stained"] [wear_mask.name] on [p_their()] face!\n" else - msg += "[t_He] [t_has] [bicon(wear_mask)] \a [wear_mask] on [t_his] face.\n" + msg += "[p_they(TRUE)] [p_have()] [bicon(wear_mask)] \a [wear_mask] on [p_their()] face.\n" //eyes if(glasses && !skipeyes && !(glasses.flags & ABSTRACT)) if(glasses.blood_DNA) - msg += "[t_He] [t_has] [bicon(glasses)] [glasses.gender==PLURAL?"some":"a"] [glasses.blood_color != "#030303" ? "blood-stained":"oil-stained"] [glasses] covering [t_his] eyes!\n" + msg += "[p_they(TRUE)] [p_have()] [bicon(glasses)] [glasses.gender==PLURAL?"some":"a"] [glasses.blood_color != "#030303" ? "blood-stained":"oil-stained"] [glasses] covering [p_their()] eyes!\n" else - msg += "[t_He] [t_has] [bicon(glasses)] \a [glasses] covering [t_his] eyes.\n" + msg += "[p_they(TRUE)] [p_have()] [bicon(glasses)] \a [glasses] covering [p_their()] eyes.\n" //left ear if(l_ear && !skipears) - msg += "[t_He] [t_has] [bicon(l_ear)] \a [l_ear] on [t_his] left ear.\n" + msg += "[p_they(TRUE)] [p_have()] [bicon(l_ear)] \a [l_ear] on [p_their()] left ear.\n" //right ear if(r_ear && !skipears) - msg += "[t_He] [t_has] [bicon(r_ear)] \a [r_ear] on [t_his] right ear.\n" + msg += "[p_they(TRUE)] [p_have()] [bicon(r_ear)] \a [r_ear] on [p_their()] right ear.\n" //ID if(wear_id) - msg += "[t_He] [t_is] wearing [bicon(wear_id)] \a [wear_id].\n" + msg += "[p_they(TRUE)] [p_are()] wearing [bicon(wear_id)] \a [wear_id].\n" //Jitters switch(jitteriness) if(300 to INFINITY) - msg += "[t_He] [t_is] convulsing violently!\n" + msg += "[p_they(TRUE)] [p_are()] convulsing violently!\n" if(200 to 300) - msg += "[t_He] [t_is] extremely jittery.\n" + msg += "[p_they(TRUE)] [p_are()] extremely jittery.\n" if(100 to 200) - msg += "[t_He] [t_is] twitching ever so slightly.\n" + msg += "[p_they(TRUE)] [p_are()] twitching ever so slightly.\n" var/appears_dead = FALSE if(stat == DEAD || (status_flags & FAKEDEATH)) appears_dead = TRUE if(suiciding) - msg += "[t_He] appears to have committed suicide... there is no hope of recovery.\n" - msg += "[t_He] [t_is] limp and unresponsive; there are no signs of life" + msg += "[p_they(TRUE)] appear[p_s()] to have committed suicide... there is no hope of recovery.\n" + msg += "[p_they(TRUE)] [p_are()] limp and unresponsive; there are no signs of life" if(get_int_organ(/obj/item/organ/internal/brain)) if(!key) var/foundghost = FALSE @@ -220,11 +189,11 @@ foundghost = FALSE break if(!foundghost) - msg += " and [t_his] soul has departed" + msg += " and [p_their()] soul has departed" msg += "...\n" if(!get_int_organ(/obj/item/organ/internal/brain)) - msg += "It appears that [t_his] brain is missing...\n" + msg += "It appears that [p_their()] brain is missing...\n" msg += "" @@ -238,17 +207,17 @@ var/obj/item/organ/external/E = bodyparts_by_name[organ_tag] if(!E) - wound_flavor_text["[organ_tag]"] = "[t_He] [t_is] missing [t_his] [organ_descriptor].\n" + wound_flavor_text["[organ_tag]"] = "[p_they(TRUE)] [p_are()] missing [p_their()] [organ_descriptor].\n" else if(!isSynthetic()) if(E.status & ORGAN_ROBOT) - wound_flavor_text["[E.limb_name]"] = "[t_He] [t_has] a robotic [E.name]!\n" + wound_flavor_text["[E.limb_name]"] = "[p_they(TRUE)] [p_have()] a robotic [E.name]!\n" else if(E.status & ORGAN_SPLINTED) - wound_flavor_text["[E.limb_name]"] = "[t_He] [t_has] a splint on [t_his] [E.name]!\n" + wound_flavor_text["[E.limb_name]"] = "[p_they(TRUE)] [p_have()] a splint on [p_their()] [E.name]!\n" for(var/obj/item/I in E.embedded_objects) - msg += "[t_He] [t_has] \a [bicon(I)] [I] embedded in [t_his] [E.name]!\n" + msg += "[p_they(TRUE)] [p_have()] \a [bicon(I)] [I] embedded in [p_their()] [E.name]!\n" //Handles the text strings being added to the actual description. //If they have something that covers the limb, and it is not missing, put flavortext. If it is covered but bleeding, add other flavortext. @@ -280,101 +249,101 @@ if(temp) var/brute_message = !isSynthetic() ? "bruising" : "denting" if(temp < 30) - msg += "[t_He] [t_has] minor [brute_message ].\n" + msg += "[p_they(TRUE)] [p_have()] minor [brute_message ].\n" else - msg += "[t_He] [t_has] severe [brute_message ]!\n" + msg += "[p_they(TRUE)] [p_have()] severe [brute_message ]!\n" temp = getFireLoss() if(temp) if(temp < 30) - msg += "[t_He] [t_has] minor burns.\n" + msg += "[p_they(TRUE)] [p_have()] minor burns.\n" else - msg += "[t_He] [t_has] severe burns!\n" + msg += "[p_they(TRUE)] [p_have()] severe burns!\n" temp = getCloneLoss() if(temp) if(temp < 30) - msg += "[t_He] [t_has] minor cellular damage.\n" + msg += "[p_they(TRUE)] [p_have()] minor cellular damage.\n" else - msg += "[t_He] [t_has] severe cellular damage.\n" + msg += "[p_they(TRUE)] [p_have()] severe cellular damage.\n" if(fire_stacks > 0) - msg += "[t_He] [t_is] covered in something flammable.\n" + msg += "[p_they(TRUE)] [p_are()] covered in something flammable.\n" if(fire_stacks < 0) - msg += "[t_He] looks a little soaked.\n" + msg += "[p_they(TRUE)] looks a little soaked.\n" switch(wetlevel) if(1) - msg += "[t_He] looks a bit damp.\n" + msg += "[p_they(TRUE)] looks a bit damp.\n" if(2) - msg += "[t_He] looks a little bit wet.\n" + msg += "[p_they(TRUE)] looks a little bit wet.\n" if(3) - msg += "[t_He] looks wet.\n" + msg += "[p_they(TRUE)] looks wet.\n" if(4) - msg += "[t_He] looks very wet.\n" + msg += "[p_they(TRUE)] looks very wet.\n" if(5) - msg += "[t_He] looks absolutely soaked.\n" + msg += "[p_they(TRUE)] looks absolutely soaked.\n" if(nutrition < NUTRITION_LEVEL_STARVING - 50) - msg += "[t_He] [t_is] severely malnourished.\n" + msg += "[p_they(TRUE)] [p_are()] severely malnourished.\n" else if(nutrition >= NUTRITION_LEVEL_FAT) if(user.nutrition < NUTRITION_LEVEL_STARVING - 50) - msg += "[t_He] [t_is] plump and delicious looking - Like a fat little piggy. A tasty piggy.\n" + msg += "[p_they(TRUE)] [p_are()] plump and delicious looking - Like a fat little piggy. A tasty piggy.\n" else - msg += "[t_He] [t_is] quite chubby.\n" + msg += "[p_they(TRUE)] [p_are()] quite chubby.\n" if(blood_volume < BLOOD_VOLUME_SAFE) - msg += "[t_He] [t_has] pale skin.\n" + msg += "[p_they(TRUE)] [p_have()] pale skin.\n" if(bleedsuppress) - msg += "[t_He] [t_is] bandaged with something.\n" + msg += "[p_they(TRUE)] [p_are()] bandaged with something.\n" else if(bleed_rate) if(reagents.has_reagent("heparin")) - msg += "[t_He] [t_is] bleeding uncontrollably!\n" + msg += "[p_they(TRUE)] [p_are()] bleeding uncontrollably!\n" else - msg += "[t_He] [t_is] bleeding!\n" + msg += "[p_they(TRUE)] [p_are()] bleeding!\n" if(reagents.has_reagent("teslium")) - msg += "[t_He] is emitting a gentle blue glow!\n" + msg += "[p_they(TRUE)] [p_are()] emitting a gentle blue glow!\n" msg += "" if(!appears_dead) if(stat == UNCONSCIOUS) - msg += "[t_He] [t_is]n't responding to anything around [t_him] and seems to be asleep.\n" + msg += "[p_they(TRUE)] [p_are()]n't responding to anything around [p_them()] and seems to be asleep.\n" else if(getBrainLoss() >= 60) - msg += "[t_He] [t_has] a stupid expression on [t_his] face.\n" + msg += "[p_they(TRUE)] [p_have()] a stupid expression on [p_their()] face.\n" if(get_int_organ(/obj/item/organ/internal/brain)) if(istype(src, /mob/living/carbon/human/interactive)) var/mob/living/carbon/human/interactive/auto = src if(auto.showexaminetext) - msg += "[t_He] [t_is] appears to be some sort of sick automaton, [t_his] eyes are glazed over and [t_his] mouth is slightly agape.\n" + msg += "[p_they(TRUE)] [p_are()] appears to be some sort of sick automaton, [p_their()] eyes are glazed over and [p_their()] mouth is slightly agape.\n" if(auto.debugexamine) var/dodebug = auto.doing2string(auto.doing) var/interestdebug = auto.interest2string(auto.interest) - msg += "[t_He] [t_is] appears to be [interestdebug] and [dodebug].\n" + msg += "[p_they(TRUE)] [p_are()] appears to be [interestdebug] and [dodebug].\n" else if(species.show_ssd) if(!key) - msg += "[t_He] [t_is] totally catatonic. The stresses of life in deep-space must have been too much for [t_him]. Any recovery is unlikely.\n" + msg += "[p_they(TRUE)] [p_are()] totally catatonic. The stresses of life in deep-space must have been too much for [p_them()]. Any recovery is unlikely.\n" else if(!client) - msg += "[t_He] [t_has] suddenly fallen asleep, suffering from Space Sleep Disorder. [t_He] may wake up soon.\n" + msg += "[p_they(TRUE)] [p_have()] suddenly fallen asleep, suffering from Space Sleep Disorder. [p_they(TRUE)] may wake up soon.\n" if(digitalcamo) - msg += "[t_He] [t_is] moving [t_his] body in an unnatural and blatantly inhuman manner.\n" + msg += "[p_they(TRUE)] [p_are()] moving [p_their()] body in an unnatural and blatantly inhuman manner.\n" if(!(skipface || ( wear_mask && ( wear_mask.flags_inv & HIDEFACE || wear_mask.flags_cover & MASKCOVERSMOUTH) ) ) && is_thrall(src) && in_range(user,src)) msg += "Their features seem unnaturally tight and drawn.\n" if(decaylevel == 1) - msg += "[t_He] [t_is] starting to smell.\n" + msg += "[p_they(TRUE)] [p_are()] starting to smell.\n" if(decaylevel == 2) - msg += "[t_He] [t_is] bloated and smells disgusting.\n" + msg += "[p_they(TRUE)] [p_are()] bloated and smells disgusting.\n" if(decaylevel == 3) - msg += "[t_He] [t_is] rotting and blackened, the skin sloughing off. The smell is indescribably foul.\n" + msg += "[p_they(TRUE)] [p_are()] rotting and blackened, the skin sloughing off. The smell is indescribably foul.\n" if(decaylevel == 4) - msg += "[t_He] [t_is] mostly dessicated now, with only bones remaining of what used to be a person.\n" + msg += "[p_they(TRUE)] [p_are()] mostly dessicated now, with only bones remaining of what used to be a person.\n" if(hasHUD(user,"security")) var/perpname = "wot" @@ -429,7 +398,7 @@ if(pose) if( findtext(pose,".",lentext(pose)) == 0 && findtext(pose,"!",lentext(pose)) == 0 && findtext(pose,"?",lentext(pose)) == 0 ) pose = addtext(pose,".") //Makes sure all emotes end with a period. - msg += "\n[t_He] is [pose]" + msg += "\n[p_they(TRUE)] [p_are()] [pose]" to_chat(user, msg) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 5a47bb052d5..fcb0e3d8b25 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -10,8 +10,12 @@ var/datum/species/species //Contains icon generation and language information, set during New(). var/obj/item/rig/wearing_rig // This is very not good, but it's much much better than calling get_rig() every update_canmove() call. -/mob/living/carbon/human/New(var/new_loc, var/new_species = null, var/delay_ready_dna = 0) +/mob/living/carbon/human/New(loc) + if(length(args) > 1) + log_runtime(EXCEPTION("human/New called with more than 1 argument (REPORT THIS ENTIRE RUNTIME TO A CODER)")) + . = ..() +/mob/living/carbon/human/Initialize(mapload, new_species = null) if(!dna) dna = new /datum/dna(null) // Species name is handled by set_species() @@ -40,7 +44,7 @@ faction |= "\ref[M]" //what // Set up DNA. - if(!delay_ready_dna && dna) + if(dna) dna.ready_dna(src) dna.real_name = real_name sync_organ_dna(1) @@ -69,80 +73,80 @@ real_name = "Test Dummy" status_flags = GODMODE|CANPUSH -/mob/living/carbon/human/skrell/New(var/new_loc) - ..(new_loc, "Skrell") +/mob/living/carbon/human/skrell/Initialize(mapload) + ..(mapload, "Skrell") -/mob/living/carbon/human/tajaran/New(var/new_loc) - ..(new_loc, "Tajaran") +/mob/living/carbon/human/tajaran/Initialize(mapload) + ..(mapload, "Tajaran") -/mob/living/carbon/human/vulpkanin/New(var/new_loc) - ..(new_loc, "Vulpkanin") +/mob/living/carbon/human/vulpkanin/Initialize(mapload) + ..(mapload, "Vulpkanin") -/mob/living/carbon/human/unathi/New(var/new_loc) - ..(new_loc, "Unathi") +/mob/living/carbon/human/unathi/Initialize(mapload) + ..(mapload, "Unathi") -/mob/living/carbon/human/vox/New(var/new_loc) - ..(new_loc, "Vox") +/mob/living/carbon/human/vox/Initialize(mapload) + ..(mapload, "Vox") -/mob/living/carbon/human/voxarmalis/New(var/new_loc) - ..(new_loc, "Vox Armalis") +/mob/living/carbon/human/voxarmalis/Initialize(mapload) + ..(mapload, "Vox Armalis") -/mob/living/carbon/human/skeleton/New(var/new_loc) - ..(new_loc, "Skeleton") +/mob/living/carbon/human/skeleton/Initialize(mapload) + ..(mapload, "Skeleton") -/mob/living/carbon/human/kidan/New(var/new_loc) - ..(new_loc, "Kidan") +/mob/living/carbon/human/kidan/Initialize(mapload) + ..(mapload, "Kidan") -/mob/living/carbon/human/plasma/New(var/new_loc) - ..(new_loc, "Plasmaman") +/mob/living/carbon/human/plasma/Initialize(mapload) + ..(mapload, "Plasmaman") -/mob/living/carbon/human/slime/New(var/new_loc) - ..(new_loc, "Slime People") +/mob/living/carbon/human/slime/Initialize(mapload) + ..(mapload, "Slime People") -/mob/living/carbon/human/grey/New(var/new_loc) - ..(new_loc, "Grey") +/mob/living/carbon/human/grey/Initialize(mapload) + ..(mapload, "Grey") -/mob/living/carbon/human/abductor/New(var/new_loc) - ..(new_loc, "Abductor") +/mob/living/carbon/human/abductor/Initialize(mapload) + ..(mapload, "Abductor") -/mob/living/carbon/human/human/New(var/new_loc) - ..(new_loc, "Human") +/mob/living/carbon/human/human/Initialize(mapload) + ..(mapload, "Human") -/mob/living/carbon/human/diona/New(var/new_loc) - ..(new_loc, "Diona") +/mob/living/carbon/human/diona/Initialize(mapload) + ..(mapload, "Diona") -/mob/living/carbon/human/machine/New(var/new_loc) - ..(new_loc, "Machine") +/mob/living/carbon/human/machine/Initialize(mapload) + ..(mapload, "Machine") -/mob/living/carbon/human/shadow/New(var/new_loc) - ..(new_loc, "Shadow") +/mob/living/carbon/human/shadow/Initialize(mapload) + ..(mapload, "Shadow") -/mob/living/carbon/human/golem/New(var/new_loc) - ..(new_loc, "Golem") +/mob/living/carbon/human/golem/Initialize(mapload) + ..(mapload, "Golem") -/mob/living/carbon/human/wryn/New(var/new_loc) - ..(new_loc, "Wryn") +/mob/living/carbon/human/wryn/Initialize(mapload) + ..(mapload, "Wryn") -/mob/living/carbon/human/nucleation/New(var/new_loc) - ..(new_loc, "Nucleation") +/mob/living/carbon/human/nucleation/Initialize(mapload) + ..(mapload, "Nucleation") -/mob/living/carbon/human/drask/New(var/new_loc) - ..(new_loc, "Drask") +/mob/living/carbon/human/drask/Initialize(mapload) + ..(mapload, "Drask") -/mob/living/carbon/human/monkey/New(var/new_loc) - ..(new_loc, "Monkey") +/mob/living/carbon/human/monkey/Initialize(mapload) + ..(mapload, "Monkey") -/mob/living/carbon/human/farwa/New(var/new_loc) - ..(new_loc, "Farwa") +/mob/living/carbon/human/farwa/Initialize(mapload) + ..(mapload, "Farwa") -/mob/living/carbon/human/wolpin/New(var/new_loc) - ..(new_loc, "Wolpin") +/mob/living/carbon/human/wolpin/Initialize(mapload) + ..(mapload, "Wolpin") -/mob/living/carbon/human/neara/New(var/new_loc) - ..(new_loc, "Neara") +/mob/living/carbon/human/neara/Initialize(mapload) + ..(mapload, "Neara") -/mob/living/carbon/human/stok/New(var/new_loc) - ..(new_loc, "Stok") +/mob/living/carbon/human/stok/Initialize(mapload) + ..(mapload, "Stok") /mob/living/carbon/human/Stat() ..() @@ -302,7 +306,7 @@ if(!prob(martial_art.deflection_chance)) return ..() if(!src.lying && !(HULK in mutations)) //But only if they're not lying down, and hulks can't do it - visible_message("[src] deflects the projectile; they can't be hit with ranged weapons!", "You deflect the projectile!") + visible_message("[src] deflects the projectile; [p_they()] can't be hit with ranged weapons!", "You deflect the projectile!") return 0 ..() @@ -604,7 +608,7 @@ if(!I || I.loc != src) //no item, no limb, or item is not in limb or in the person anymore return var/time_taken = I.embedded_unsafe_removal_time*I.w_class - usr.visible_message("[usr] attempts to remove [I] from their [L.name].","You attempt to remove [I] from your [L.name]... (It will take [time_taken/10] seconds.)") + usr.visible_message("[usr] attempts to remove [I] from [usr.p_their()] [L.name].","You attempt to remove [I] from your [L.name]... (It will take [time_taken/10] seconds.)") if(do_after(usr, time_taken, needhand = 1, target = src)) if(!I || !L || I.loc != src || !(I in L.embedded_objects)) return @@ -613,7 +617,7 @@ I.forceMove(get_turf(src)) usr.put_in_hands(I) usr.emote("scream") - usr.visible_message("[usr] successfully rips [I] out of their [L.name]!","You successfully remove [I] from your [L.name].") + usr.visible_message("[usr] successfully rips [I] out of [usr.p_their()] [L.name]!","You successfully remove [I] from your [L.name].") if(!has_embedded_objects()) clear_alert("embeddedobject") return @@ -1039,7 +1043,7 @@ /mob/living/carbon/human/proc/play_xylophone() if(!src.xylophone) - visible_message("[src] begins playing his ribcage like a xylophone. It's quite spooky.","You begin to play a spooky refrain on your ribcage.","You hear a spooky xylophone melody.") + visible_message("[src] begins playing [p_their()] ribcage like a xylophone. It's quite spooky.","You begin to play a spooky refrain on your ribcage.","You hear a spooky xylophone melody.") var/song = pick('sound/effects/xylophone1.ogg','sound/effects/xylophone2.ogg','sound/effects/xylophone3.ogg') playsound(loc, song, 50, 1, -1) xylophone = 1 @@ -1060,7 +1064,7 @@ var/fail_msg if(!affecting) . = 0 - fail_msg = "They are missing that limb." + fail_msg = "[p_they(TRUE)] [p_are()] missing that limb." else if(affecting.status & ORGAN_ROBOT) . = 0 fail_msg = "That limb is robotic." @@ -1074,7 +1078,7 @@ . = 0 if(!. && error_msg && user) if(!fail_msg) - fail_msg = "There is no exposed flesh or thin material [target_zone == "head" ? "on their head" : "on their body"] to inject into." + fail_msg = "There is no exposed flesh or thin material [target_zone == "head" ? "on [p_their()] head" : "on [p_their()] body"] to inject into." to_chat(user, "[fail_msg]") /mob/living/carbon/human/proc/check_obscured_slots() @@ -1110,8 +1114,10 @@ return 1 /mob/living/carbon/human/proc/get_visible_gender() - if(wear_suit && wear_suit.flags_inv & HIDEJUMPSUIT && ((head && head.flags_inv & HIDEMASK) || wear_mask)) - return NEUTER + var/list/obscured = check_obscured_slots() + var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE)) + if((slot_w_uniform in obscured) && skipface) + return PLURAL return gender /mob/living/carbon/human/proc/increase_germ_level(n) @@ -1248,10 +1254,10 @@ if(usr == src) self = 1 if(!self) - usr.visible_message("[usr] kneels down, puts \his hand on [src]'s wrist and begins counting their pulse.",\ + usr.visible_message("[usr] kneels down, puts [usr.p_their()] hand on [src]'s wrist and begins counting [p_their()] pulse.",\ "You begin counting [src]'s pulse") else - usr.visible_message("[usr] begins counting their pulse.",\ + usr.visible_message("[usr] begins counting [p_their()] pulse.",\ "You begin counting your pulse.") if(src.pulse) @@ -1742,7 +1748,7 @@ Eyes need to have significantly high darksight to shine unless the mob has the X to_chat(src, "Remove your mask first!") return 0 if((H.head && (H.head.flags_cover & HEADCOVERSMOUTH)) || (H.wear_mask && (H.wear_mask.flags_cover & MASKCOVERSMOUTH) && !H.wear_mask.mask_adjusted)) - to_chat(src, "Remove their mask first!") + to_chat(src, "Remove [H.p_their()] mask first!") return 0 visible_message("[src] is trying to perform CPR on [H.name]!", \ "You try to perform CPR on [H.name]!") diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index c216badda93..5ed14b3a18e 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -372,7 +372,6 @@ This function restores all organs. dmgIcon.pixel_y = (!lying) ? rand(-11,9) : rand(-10,1) flick_overlay(dmgIcon, attack_bubble_recipients, 9) - receiving_damage() if(BURN) damageoverlaytemp = 20 diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm index 428fafeb71e..3af9130fa7d 100644 --- a/code/modules/mob/living/carbon/human/human_organs.dm +++ b/code/modules/mob/living/carbon/human/human_organs.dm @@ -90,7 +90,7 @@ continue var/emote_scream = pick("screams in pain and ", "lets out a sharp cry and ", "cries out and ") - custom_emote(1, "[(NO_PAIN in species.species_traits) ? "" : emote_scream ]drops what they were holding in their [E.name]!") + custom_emote(1, "[(NO_PAIN in species.species_traits) ? "" : emote_scream ]drops what [p_they()] [p_were()] holding in [p_their()] [E.name]!") else if(E.is_malfunctioning()) @@ -105,7 +105,7 @@ if(!unEquip(r_hand)) continue - custom_emote(1, "drops what they were holding, their [E.name] malfunctioning!") + custom_emote(1, "drops what [p_they()] [p_were()] holding, [p_their()] [E.name] malfunctioning!") var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread() spark_system.set_up(5, 0, src) diff --git a/code/modules/mob/living/carbon/human/interactive/functions.dm b/code/modules/mob/living/carbon/human/interactive/functions.dm index eae754b5283..8e8c2c80013 100644 --- a/code/modules/mob/living/carbon/human/interactive/functions.dm +++ b/code/modules/mob/living/carbon/human/interactive/functions.dm @@ -87,11 +87,11 @@ if(inactivity_period <= 0) inactivity_period = 9999 // technically infinite if(do_after(src, 60, target = traitorTarget)) - custom_emote(1, "A fire bursts from [src]'s eyes, igniting white hot and consuming their body in a flaming explosion!") + custom_emote(1, "A fire bursts from [src]'s eyes, igniting white hot and consuming [p_their()] body in a flaming explosion!") explosion(src, 6, 6, 6) else inactivity_period = 0 - custom_emote(1, "[src]'s chest closes, hiding their insides.") + custom_emote(1, "[src]'s chest closes, hiding [p_their()] insides.") if(SNPC_PSYCHO) var/choice = pick(typesof(/obj/item/grenade/chem_grenade) - /obj/item/grenade/chem_grenade) @@ -469,7 +469,7 @@ if(!Adjacent(SF)) tryWalk(get_turf(SF)) else - custom_emote(2, "[pick("gibbers","drools","slobbers","claps wildly","spits")], grabbing various foodstuffs from [SF] and sticking them in it's mouth!") + custom_emote(2, "[pick("gibbers","drools","slobbers","claps wildly","spits")], grabbing various foodstuffs from [SF] and sticking them in its mouth!") for(var/obj/item/A in SF.contents) if(prob(smartness/2)) var/count = SF.item_quants[A.name] @@ -631,7 +631,7 @@ TARGET = newSnack newSnack.reagents.remove_any((newSnack.reagents.total_volume/2)-1) newSnack.name = "Synthetic [newSnack.name]" - custom_emote(2, "[pick("gibbers","drools","slobbers","claps wildly","spits")] as they vomit [newSnack] from their mouth!") + custom_emote(2, "[pick("gibbers","drools","slobbers","claps wildly","spits")] as [p_they()] vomit[p_s()] [newSnack] from [p_their()] mouth!") catch(var/exception/e) log_runtime(e, src, "Caught in SNPC cooking module") doing &= ~SNPC_SPECIAL diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 64395954672..a8deeff60a6 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/human/Life() +/mob/living/carbon/human/Life(seconds, times_fired) life_tick++ voice = GetVoice() @@ -32,7 +32,7 @@ //Update our name based on whether our face is obscured/disfigured name = get_visible_name() - pulse = handle_pulse() + pulse = handle_pulse(times_fired) if(mind && mind.vampire) mind.vampire.handle_vampire() @@ -150,7 +150,7 @@ AdjustSilence(2) if(getBrainLoss() >= 120 && stat != 2) //they died from stupidity--literally. -Fox - visible_message("[src] goes limp, their facial expression utterly blank.") + visible_message("[src] goes limp, [p_their()] facial expression utterly blank.") death() /mob/living/carbon/human/handle_mutations_and_radiation() @@ -902,9 +902,8 @@ hud_used.lingchemdisplay.invisibility = 101 -/mob/living/carbon/human/proc/handle_pulse() - - if(mob_master.current_cycle % 5) +/mob/living/carbon/human/proc/handle_pulse(times_fired) + if(times_fired % 5 == 1) return pulse //update pulse every 5 life ticks (~1 tick/sec, depending on server load) if(NO_BLOOD in species.species_traits) diff --git a/code/modules/mob/living/carbon/human/npcs.dm b/code/modules/mob/living/carbon/human/npcs.dm index b66a0ee52ba..c21c1990cbe 100644 --- a/code/modules/mob/living/carbon/human/npcs.dm +++ b/code/modules/mob/living/carbon/human/npcs.dm @@ -5,9 +5,8 @@ item_color = "punpun" species_restricted = list("Monkey") -/mob/living/carbon/human/monkey/punpun/New() +/mob/living/carbon/human/monkey/punpun/Initialize(mapload) ..() - spawn(1) - name = "Pun Pun" - real_name = name - equip_to_slot(new /obj/item/clothing/under/punpun(src), slot_w_uniform) \ No newline at end of file + name = "Pun Pun" + real_name = name + equip_to_slot(new /obj/item/clothing/under/punpun(src), slot_w_uniform) diff --git a/code/modules/mob/living/carbon/human/shock.dm b/code/modules/mob/living/carbon/human/shock.dm index 05042a226d6..d8dc9356de7 100644 --- a/code/modules/mob/living/carbon/human/shock.dm +++ b/code/modules/mob/living/carbon/human/shock.dm @@ -43,7 +43,7 @@ if(shock_stage >= 30) if(shock_stage == 30) - custom_emote(1,"is having trouble keeping their eyes open.") + custom_emote(1,"is having trouble keeping [p_their()] eyes open.") EyeBlurry(2) Stuttering(5) diff --git a/code/modules/mob/living/carbon/human/species/abductor.dm b/code/modules/mob/living/carbon/human/species/abductor.dm index 3e1bb968c81..8aeb6f88a3d 100644 --- a/code/modules/mob/living/carbon/human/species/abductor.dm +++ b/code/modules/mob/living/carbon/human/species/abductor.dm @@ -6,7 +6,6 @@ path = /mob/living/carbon/human/abductor language = "Abductor Mindlink" default_language = "Abductor Mindlink" - unarmed_type = /datum/unarmed_attack/punch eyes = "blank_eyes" has_organ = list( "heart" = /obj/item/organ/internal/heart, diff --git a/code/modules/mob/living/carbon/human/species/apollo.dm b/code/modules/mob/living/carbon/human/species/apollo.dm index 6c37da34395..5a3e1d4cde9 100644 --- a/code/modules/mob/living/carbon/human/species/apollo.dm +++ b/code/modules/mob/living/carbon/human/species/apollo.dm @@ -5,7 +5,6 @@ deform = 'icons/mob/human_races/r_wryn.dmi' language = "Wryn Hivemind" tail = "wryntail" - unarmed_type = /datum/unarmed_attack/punch/weak punchdamagelow = 0 punchdamagehigh = 1 //primitive = /mob/living/carbon/monkey/wryn @@ -82,7 +81,6 @@ name = "Nucleation" name_plural = "Nucleations" icobase = 'icons/mob/human_races/r_nucleation.dmi' - unarmed_type = /datum/unarmed_attack/punch blurb = "A sub-race of unfortunates who have been exposed to too much supermatter radiation. As a result, \ supermatter crystal clusters have begun to grow across their bodies. Research to find a cure for this ailment \ has been slow, and so this is a common fate for veteran engineers. The supermatter crystals produce oxygen, \ diff --git a/code/modules/mob/living/carbon/human/species/golem.dm b/code/modules/mob/living/carbon/human/species/golem.dm index c289ba3a19e..74f3e97d879 100644 --- a/code/modules/mob/living/carbon/human/species/golem.dm +++ b/code/modules/mob/living/carbon/human/species/golem.dm @@ -13,7 +13,6 @@ dietflags = DIET_OMNI //golems can eat anything because they are magic or something reagent_tag = PROCESS_ORG - unarmed_type = /datum/unarmed_attack/punch punchdamagelow = 5 punchdamagehigh = 14 punchstunthreshold = 11 //about 40% chance to stun diff --git a/code/modules/mob/living/carbon/human/species/monkey.dm b/code/modules/mob/living/carbon/human/species/monkey.dm index 07d3215126e..c5003b21330 100644 --- a/code/modules/mob/living/carbon/human/species/monkey.dm +++ b/code/modules/mob/living/carbon/human/species/monkey.dm @@ -28,8 +28,7 @@ reagent_tag = PROCESS_ORG //Has standard darksight of 2. - //unarmed_types = list(/datum/unarmed_attack/bite, /datum/unarmed_attack/claws) - //inherent_verbs = list(/mob/living/proc/ventcrawl) + unarmed_type = /datum/unarmed_attack/bite total_health = 75 brute_mod = 1.5 diff --git a/code/modules/mob/living/carbon/human/species/plasmaman.dm b/code/modules/mob/living/carbon/human/species/plasmaman.dm index 620d49254f3..692a23c470a 100644 --- a/code/modules/mob/living/carbon/human/species/plasmaman.dm +++ b/code/modules/mob/living/carbon/human/species/plasmaman.dm @@ -4,7 +4,6 @@ icobase = 'icons/mob/human_races/r_plasmaman_sb.dmi' deform = 'icons/mob/human_races/r_plasmaman_pb.dmi' // TODO: Need deform. //language = "Clatter" - unarmed_type = /datum/unarmed_attack/punch species_traits = list(IS_WHITELISTED, NO_BLOOD, NOTRANSSTING) dietflags = DIET_OMNI diff --git a/code/modules/mob/living/carbon/human/species/skeleton.dm b/code/modules/mob/living/carbon/human/species/skeleton.dm index d207dc20703..9da4d1222f6 100644 --- a/code/modules/mob/living/carbon/human/species/skeleton.dm +++ b/code/modules/mob/living/carbon/human/species/skeleton.dm @@ -8,7 +8,6 @@ deform = 'icons/mob/human_races/r_skeleton.dmi' path = /mob/living/carbon/human/skeleton default_language = "Galactic Common" - unarmed_type = /datum/unarmed_attack/punch blood_color = "#FFFFFF" flesh_color = "#E6E6C6" diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 50f969cae45..25d3fd342c5 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -356,7 +356,7 @@ else var/datum/unarmed_attack/attack = user.species.unarmed - user.do_attack_animation(target) + user.do_attack_animation(target, attack.animation_type) add_attack_logs(user, target, "Melee attacked with fists", admin_notify = target.ckey ? TRUE : FALSE) if(!iscarbon(user)) @@ -396,7 +396,7 @@ return 1 else add_attack_logs(user, target, "Disarmed", admin_notify = FALSE) - user.do_attack_animation(target) + user.do_attack_animation(target, ATTACK_EFFECT_DISARM) if(target.w_uniform) target.w_uniform.add_fingerprint(user) var/obj/item/organ/external/affecting = target.get_organ(ran_zone(user.zone_sel.selecting)) @@ -500,17 +500,12 @@ //Species unarmed attacks /datum/unarmed_attack - var/attack_verb = list("attack") // Empty hand hurt intent verb. + var/attack_verb = list("punch") // Empty hand hurt intent verb. var/damage = 0 // How much flat bonus damage an attack will do. This is a *bonus* guaranteed damage amount on top of the random damage attacks do. var/attack_sound = "punch" var/miss_sound = 'sound/weapons/punchmiss.ogg' - var/sharp = 0 - -/datum/unarmed_attack/punch - attack_verb = list("punch") - -/datum/unarmed_attack/punch/weak - attack_verb = list("flail") + var/sharp = FALSE + var/animation_type = ATTACK_EFFECT_PUNCH /datum/unarmed_attack/diona attack_verb = list("lash", "bludgeon") @@ -519,7 +514,14 @@ attack_verb = list("scratch", "claw") attack_sound = 'sound/weapons/slice.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' - sharp = 1 + sharp = TRUE + animation_type = ATTACK_EFFECT_CLAW + +/datum/unarmed_attack/bite + attack_verb = list("chomp") + attack_sound = 'sound/weapons/bite.ogg' + sharp = TRUE + animation_type = ATTACK_EFFECT_BITE /datum/unarmed_attack/claws/armalis attack_verb = list("slash", "claw") diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index 05e989afa50..6b692601226 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -10,7 +10,6 @@ clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS bodyflags = HAS_SKIN_TONE | HAS_BODY_MARKINGS dietflags = DIET_OMNI - unarmed_type = /datum/unarmed_attack/punch blurb = "Humanity originated in the Sol system, and over the last five centuries has spread \ colonies across a wide swathe of space. They hold a wide range of forms and creeds.

\ While the central Sol government maintains control of its far-flung people, powerful corporate \ @@ -237,7 +236,6 @@ default_language = "Galactic Common" language = "Skrellian" primitive_form = "Neara" - unarmed_type = /datum/unarmed_attack/punch blurb = "An amphibious species, Skrell come from the star system known as Qerr'Vallis, which translates to 'Star of \ the royals' or 'Light of the Crown'.

Skrell are a highly advanced and logical race who live under the rule \ @@ -546,7 +544,6 @@ icobase = 'icons/mob/human_races/r_slime.dmi' deform = 'icons/mob/human_races/r_slime.dmi' path = /mob/living/carbon/human/slime - unarmed_type = /datum/unarmed_attack/punch remains_type = /obj/effect/decal/remains/slime // More sensitive to the cold @@ -690,7 +687,7 @@ var/limb_select = input(src, "Choose a limb to regrow", "Limb Regrowth") as null|anything in missing_limbs var/chosen_limb = missing_limbs[limb_select] - visible_message("[src] begins to hold still and concentrate on their missing [limb_select]...", "You begin to focus on regrowing your missing [limb_select]... (This will take [round(SLIMEPERSON_REGROWTHDELAY/10)] seconds, and you must hold still.)") + visible_message("[src] begins to hold still and concentrate on [p_their()] missing [limb_select]...", "You begin to focus on regrowing your missing [limb_select]... (This will take [round(SLIMEPERSON_REGROWTHDELAY/10)] seconds, and you must hold still.)") if(do_after(src, SLIMEPERSON_REGROWTHDELAY, needhand=0, target = src)) if(stat || paralysis || stunned) to_chat(src, "You cannot regenerate missing limbs in your current state.") @@ -728,7 +725,7 @@ updatehealth() UpdateDamageIcon() nutrition -= SLIMEPERSON_HUNGERCOST - visible_message("[src] finishes regrowing their missing [new_limb]!", "You finish regrowing your [limb_select]") + visible_message("[src] finishes regrowing [p_their()] missing [new_limb]!", "You finish regrowing your [limb_select]") else to_chat(src, "You need to hold still in order to regrow a limb!") return @@ -749,7 +746,6 @@ deform = 'icons/mob/human_races/r_def_grey.dmi' default_language = "Galactic Common" language = "Psionic Communication" - unarmed_type = /datum/unarmed_attack/punch eyes = "grey_eyes_s" butt_sprite = "grey" @@ -931,7 +927,6 @@ path = /mob/living/carbon/human/machine default_language = "Galactic Common" language = "Trinary" - unarmed_type = /datum/unarmed_attack/punch remains_type = /obj/effect/decal/remains/robot eyes = "blank_eyes" @@ -1015,7 +1010,6 @@ path = /mob/living/carbon/human/drask default_language = "Galactic Common" language = "Orluum" - unarmed_type = /datum/unarmed_attack/punch eyes = "drask_eyes_s" speech_sounds = list('sound/voice/DraskTalk.ogg') diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index f61c5431fab..3023d6538a8 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/Life() +/mob/living/carbon/Life(seconds, times_fired) set invisibility = 0 set background = BACKGROUND_ENABLED @@ -14,7 +14,7 @@ O.on_life() handle_changeling() - handle_wetness() + handle_wetness(times_fired) // Increase germ_level regularly if(germ_level < GERM_LEVEL_AMBIENT && prob(30)) //if you're just standing there, you shouldn't get more germs beyond an ambient level @@ -26,8 +26,8 @@ /////////////// //Start of a breath chain, calls breathe() -/mob/living/carbon/handle_breathing() - if(mob_master.current_cycle % 4 == 2 || failed_last_breath) +/mob/living/carbon/handle_breathing(times_fired) + if(times_fired % 4 == 2 || failed_last_breath) breathe() //Breathe per 4 ticks, unless suffocating else if(istype(loc, /obj/)) @@ -241,11 +241,11 @@ reagents.metabolize(src) -/mob/living/carbon/proc/handle_wetness() - if(mob_master.current_cycle%20==2) //dry off a bit once every 20 ticks or so +/mob/living/carbon/proc/handle_wetness(times_fired) + if(times_fired % 20==2) //dry off a bit once every 20 ticks or so wetlevel = max(wetlevel - 1,0) -/mob/living/carbon/handle_stomach() +/mob/living/carbon/handle_stomach(times_fired) for(var/mob/living/M in stomach_contents) if(M.loc != src) stomach_contents.Remove(M) @@ -255,7 +255,7 @@ stomach_contents.Remove(M) qdel(M) continue - if(mob_master.current_cycle%3==1) + if(times_fired % 3 == 1) M.adjustBruteLoss(5) nutrition += 10 diff --git a/code/modules/mob/living/carbon/slime/life.dm b/code/modules/mob/living/carbon/slime/life.dm index ced452ab652..80ed9fdbffd 100644 --- a/code/modules/mob/living/carbon/slime/life.dm +++ b/code/modules/mob/living/carbon/slime/life.dm @@ -5,7 +5,7 @@ var/Discipline = 0 // if a slime has been hit with a freeze gun, or wrestled/attacked off a human, they become disciplined and don't attack anymore for a while var/SStun = 0 // stun variable -/mob/living/carbon/slime/Life() +/mob/living/carbon/slime/Life(seconds, times_fired) if(..()) handle_nutrition() handle_targets() diff --git a/code/modules/mob/living/carbon/slime/slime.dm b/code/modules/mob/living/carbon/slime/slime.dm index ecb233a2ebf..79bcd54775b 100644 --- a/code/modules/mob/living/carbon/slime/slime.dm +++ b/code/modules/mob/living/carbon/slime/slime.dm @@ -236,6 +236,7 @@ /mob/living/carbon/slime/attack_hand(mob/living/carbon/human/M) if(Victim) + M.do_attack_animation(src, ATTACK_EFFECT_DISARM) if(Victim == M) if(prob(60)) visible_message("[M] attempts to wrestle \the [name] off!") @@ -259,7 +260,6 @@ return else - M.do_attack_animation(src) if(prob(30)) visible_message("[M] attempts to wrestle \the [name] off of [Victim]!") playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) @@ -297,7 +297,7 @@ grabbedby(M) else - M.do_attack_animation(src) + M.do_attack_animation(src, ATTACK_EFFECT_PUNCH) var/damage = rand(1, 9) attacked += 10 if(prob(90)) diff --git a/code/modules/mob/living/carbon/superheroes.dm b/code/modules/mob/living/carbon/superheroes.dm index d850caf658f..d9c7a9f12ef 100644 --- a/code/modules/mob/living/carbon/superheroes.dm +++ b/code/modules/mob/living/carbon/superheroes.dm @@ -188,15 +188,15 @@ switch(progress) if(1) to_chat(user, "You begin by introducing yourself and explaining what you're about.") - user.visible_message("[user] introduces \himself and explains \his plans.") + user.visible_message("[user] introduces [user.p_them()]self and explains [user.p_their()] plans.") if(2) to_chat(user, "You begin the recruitment of [target].") - user.visible_message("[user] leans over towards [target], whispering excitedly as he gives a speech.") + user.visible_message("[user] leans over towards [target], whispering excitedly as [user.p_they()] give[user.p_s()] a speech.") to_chat(target, "You feel yourself agreeing with [user], and a surge of loyalty begins building.") target.Weaken(12) sleep(20) if(ismindshielded(target)) - to_chat(user, "They are enslaved by Nanotrasen. You feel their interest in your cause wane and disappear.") + to_chat(user, "[target.p_they(TRUE)] are enslaved by Nanotrasen. You feel [target.p_their()] interest in your cause wane and disappear.") user.visible_message("[user] stops talking for a moment, then moves back away from [target].") to_chat(target, "Your mindshield implant activates, protecting you from conversion.") return @@ -214,7 +214,7 @@ recruiting = 0 to_chat(user, "You have recruited [target] as your henchman!") to_chat(target, "You have decided to enroll as a henchman for [user]. You are now part of the feared 'Greyshirts'.") - to_chat(target, "You must follow the orders of [user], and help him succeed in \his dastardly schemes.") + to_chat(target, "You must follow the orders of [user], and help [user.p_them()] succeed in [user.p_their()] dastardly schemes.") to_chat(target, "You may not harm other Greyshirt or [user]. However, you do not need to obey other Greyshirts.") ticker.mode.greyshirts += target.mind target.set_species("Human") diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 8c414636349..f02065b3a0a 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -1,4 +1,4 @@ -/mob/living/Life() +/mob/living/Life(seconds, times_fired) set invisibility = 0 set background = BACKGROUND_ENABLED @@ -22,7 +22,7 @@ handle_mutations_and_radiation() //Breathing, if applicable - handle_breathing() + handle_breathing(times_fired) //Random events (vomiting etc) handle_random_events() @@ -38,7 +38,7 @@ handle_fire() //stuff in the stomach - handle_stomach() + handle_stomach(times_fired) update_gravity(mob_has_gravity()) @@ -61,7 +61,7 @@ ..() -/mob/living/proc/handle_breathing() +/mob/living/proc/handle_breathing(times_fired) return /mob/living/proc/handle_mutations_and_radiation() @@ -80,7 +80,7 @@ /mob/living/proc/handle_environment(datum/gas_mixture/environment) return -/mob/living/proc/handle_stomach() +/mob/living/proc/handle_stomach(times_fired) return /mob/living/proc/update_pulling() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 4f3265fc619..2f0d341f697 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -852,81 +852,11 @@ makeNewConstruct(/mob/living/simple_animal/hostile/construct/harvester, src, null, 1) spawn_dust() gib() - return -/atom/movable/proc/do_attack_animation(atom/A, end_pixel_y) - var/pixel_x_diff = 0 - var/pixel_y_diff = 0 - var/final_pixel_y = initial(pixel_y) - if(end_pixel_y) - final_pixel_y = end_pixel_y - - var/direction = get_dir(src, A) - if(direction & NORTH) - pixel_y_diff = 8 - else if(direction & SOUTH) - pixel_y_diff = -8 - - if(direction & EAST) - pixel_x_diff = 8 - else if(direction & WEST) - pixel_x_diff = -8 - - animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, time = 2) - animate(pixel_x = initial(pixel_x), pixel_y = final_pixel_y, time = 2) - - -/mob/living/do_attack_animation(atom/A) - var/final_pixel_y = get_standard_pixel_y_offset(lying) - ..(A, final_pixel_y) - floating = 0 // If we were without gravity, the bouncing animation got stopped, so we make sure we restart the bouncing after the next movement. - - // What icon do we use for the attack? - var/image/I - if(hand && l_hand) // Attacked with item in left hand. - I = image(l_hand.icon, A, l_hand.icon_state, A.layer + 1) - else if(!hand && r_hand) // Attacked with item in right hand. - I = image(r_hand.icon, A, r_hand.icon_state, A.layer + 1) - else // Attacked with a fist? - return - - // Who can see the attack? - var/list/viewing = list() - for(var/mob/M in viewers(A)) - if(M.client && M.client.prefs.show_ghostitem_attack) - viewing |= M.client - flick_overlay(I, viewing, 5) // 5 ticks/half a second - - // Scale the icon. - I.transform *= 0.75 - // The icon should not rotate. - I.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA - - // Set the direction of the icon animation. - var/direction = get_dir(src, A) - if(direction & NORTH) - I.pixel_y = -16 - else if(direction & SOUTH) - I.pixel_y = 16 - - if(direction & EAST) - I.pixel_x = -16 - else if(direction & WEST) - I.pixel_x = 16 - - if(!direction) // Attacked self?! - I.pixel_z = 16 - - // And animate the attack! - animate(I, alpha = 175, pixel_x = 0, pixel_y = 0, pixel_z = 0, time = 3) - -/atom/movable/proc/receiving_damage(atom/A) - var/pixel_x_diff = rand(-3,3) - var/pixel_y_diff = rand(-3,3) - animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, time = 2) - animate(pixel_x = initial(pixel_x), pixel_y = initial(pixel_y), time = 2) - -/mob/living/receiving_damage(atom/A) +/mob/living/do_attack_animation(atom/A, visual_effect_icon, obj/item/used_item, no_effect, end_pixel_y) + end_pixel_y = get_standard_pixel_y_offset(lying) + if(!used_item) + used_item = get_active_hand() ..() floating = 0 // If we were without gravity, the bouncing animation got stopped, so we make sure we restart the bouncing after the next movement. diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 38065ac1f2c..e211cef629e 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -244,7 +244,7 @@ var/obj/item/grab/G = new /obj/item/grab(user, src) if(buckled) - to_chat(user, "You cannot grab [src], \he is buckled in!") + to_chat(user, "You cannot grab [src]; [p_they()] [p_are()] buckled in!") if(!G) //the grab will delete itself in New if src is anchored return 0 user.put_in_active_hand(G) @@ -333,6 +333,9 @@ if(INTENT_GRAB) grabbedby(M) return FALSE - else + if(INTENT_HARM) M.do_attack_animation(src) return TRUE + if(INTENT_DISARM) + M.do_attack_animation(src, ATTACK_EFFECT_DISARM) + return TRUE diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index a6a043a8945..1755674b4f6 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -3,7 +3,7 @@ #define POWER_RESTORATION_SEARCH_APC 2 #define POWER_RESTORATION_APC_FOUND 3 -/mob/living/silicon/ai/Life() +/mob/living/silicon/ai/Life(seconds, times_fired) //doesn't call parent because it's a horrible mess if(stat == DEAD) return diff --git a/code/modules/mob/living/silicon/decoy/life.dm b/code/modules/mob/living/silicon/decoy/life.dm index ade3c535506..353bf4259ff 100644 --- a/code/modules/mob/living/silicon/decoy/life.dm +++ b/code/modules/mob/living/silicon/decoy/life.dm @@ -1,4 +1,4 @@ -/mob/living/silicon/decoy/Life() +/mob/living/silicon/decoy/Life(seconds, times_fired) if(src.stat == 2) return else diff --git a/code/modules/mob/living/silicon/pai/life.dm b/code/modules/mob/living/silicon/pai/life.dm index ec40dff7739..abcfc6bd643 100644 --- a/code/modules/mob/living/silicon/pai/life.dm +++ b/code/modules/mob/living/silicon/pai/life.dm @@ -1,4 +1,4 @@ -/mob/living/silicon/pai/Life() +/mob/living/silicon/pai/Life(seconds, times_fired) . = ..() if(.) //if(secHUD == 1) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 54ebdaf4da2..d24518d4888 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -599,7 +599,7 @@ var/mob/living/carbon/human/H = over_object //changed to human to avoid stupid issues like xenos holding pAIs. if(!istype(H) || !Adjacent(H)) return ..() if(usr == src) - switch(alert(H, "[src] wants you to pick them up. Do it?",,"Yes","No")) + switch(alert(H, "[src] wants you to pick [p_them()] up. Do it?",,"Yes","No")) if("Yes") if(Adjacent(H)) get_scooped(H) diff --git a/code/modules/mob/living/silicon/pai/software_modules.dm b/code/modules/mob/living/silicon/pai/software_modules.dm index 32bef5d7494..bf9e4eeab0d 100644 --- a/code/modules/mob/living/silicon/pai/software_modules.dm +++ b/code/modules/mob/living/silicon/pai/software_modules.dm @@ -71,7 +71,7 @@ if(answer == "Yes") var/turf/T = get_turf_or_move(P.loc) for(var/mob/v in viewers(T)) - v.show_message("[M] presses \his thumb against [P].", 3, "[P] makes a sharp clicking sound as it extracts DNA material from [M].", 2) + v.show_message("[M] presses [M.p_their()] thumb against [P].", 3, "[P] makes a sharp clicking sound as it extracts DNA material from [M].", 2) var/datum/dna/dna = M.dna to_chat(P, "

[M]'s UE string : [dna.unique_enzymes]

") if(dna.unique_enzymes == P.master_dna) @@ -79,7 +79,7 @@ else to_chat(P, "DNA does not match stored Master DNA.") else - to_chat(P, "[M] does not seem like \he is going to provide a DNA sample willingly.") + to_chat(P, "[M] does not seem like [M.p_they()] [M.p_are()] going to provide a DNA sample willingly.") return 1 /datum/pai_software/radio_config diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index bd06f7045ae..aaaeb15b283 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -142,7 +142,7 @@ to_chat(usr, "The reboot system is currently offline. Please wait another [cooldown_time] seconds.") return - user.visible_message("\the [user] swipes \his ID card through \the [src], attempting to reboot it.", "You swipe your ID card through \the [src], attempting to reboot it.") + user.visible_message("\the [user] swipes [user.p_their()] ID card through [src], attempting to reboot it.", "You swipe your ID card through [src], attempting to reboot it.") last_reboot = world.time / 10 var/drones = 0 for(var/mob/living/silicon/robot/drone/D in world) @@ -153,7 +153,7 @@ return else - user.visible_message("\the [user] swipes \his ID card through \the [src], attempting to shut it down.", "You swipe your ID card through \the [src], attempting to shut it down.") + user.visible_message("\the [user] swipes [user.p_their()] ID card through [src], attempting to shut it down.", "You swipe your ID card through \the [src], attempting to shut it down.") if(emagged) return diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm index d0733547cc8..adf6e2f7682 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm @@ -146,7 +146,7 @@ wrapped = A.cell A.cell.add_fingerprint(user) - A.cell.updateicon() + A.cell.update_icon() A.cell.forceMove(src) A.cell = null diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index f42f19b67fa..afa10c1772b 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -1,4 +1,4 @@ -/mob/living/silicon/robot/Life() +/mob/living/silicon/robot/Life(seconds, times_fired) set invisibility = 0 set background = BACKGROUND_ENABLED diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 701909d87ea..5fb42f5f121 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -52,6 +52,9 @@ var/list/robot_verbs_default = list( var/custom_panel = null var/list/custom_panel_names = list("Cricket") var/emagged = 0 + var/is_emaggable = TRUE + var/eye_protection = 0 + var/ear_protection = 0 var/list/force_modules = list() var/allow_rename = TRUE @@ -762,7 +765,9 @@ var/list/robot_verbs_default = list( return var/mob/living/M = user if(!opened)//Cover is closed - if(locked) + if(!is_emaggable) + to_chat(user, "The emag sparks, and flashes red. This mechanism does not appear to be emaggable.") + else if(locked) to_chat(user, "You emag the cover lock.") locked = 0 else @@ -789,7 +794,7 @@ var/list/robot_verbs_default = list( laws = new /datum/ai_laws/syndicate_override var/time = time2text(world.realtime,"hh:mm:ss") lawchanges.Add("[time] : [M.name]([M.key]) emagged [name]([key])") - set_zeroth_law("Only [M.real_name] and people he designates as being such are Syndicate Agents.") + set_zeroth_law("Only [M.real_name] and people [M.p_they()] designate[M.p_s()] as being such are Syndicate Agents.") to_chat(src, "ALERT: Foreign software detected.") sleep(5) to_chat(src, "Initiating diagnostics...") @@ -805,7 +810,7 @@ var/list/robot_verbs_default = list( to_chat(src, "ERRORERRORERROR") to_chat(src, "Obey these laws:") laws.show_laws(src) - to_chat(src, "ALERT: [M.real_name] is your new master. Obey your new laws and his commands.") + to_chat(src, "ALERT: [M.real_name] is your new master. Obey your new laws and [M.p_their()] commands.") SetLockdown(0) if(src.module && istype(src.module, /obj/item/robot_module/miner)) for(var/obj/item/pickaxe/drill/cyborg/D in src.module.modules) @@ -878,9 +883,10 @@ var/list/robot_verbs_default = list( icon_state = "[base_icon]-roll" else icon_state = base_icon - for(var/obj/item/borg/combat/shield/S in module.modules) - if(activated(S)) - overlays += "[base_icon]-shield" + if(module) + for(var/obj/item/borg/combat/shield/S in module.modules) + if(activated(S)) + overlays += "[base_icon]-shield" update_fire() /mob/living/silicon/robot/proc/installed_modules() @@ -1241,16 +1247,19 @@ var/list/robot_verbs_default = list( /mob/living/silicon/robot/deathsquad base_icon = "nano_bloodhound" icon_state = "nano_bloodhound" + designation = "SpecOps" lawupdate = 0 scrambledcodes = 1 - pdahide = 1 - modtype = "Commando" - faction = list("nanotrasen") - designation = "Nanotrasen Combat" req_access = list(access_cent_specops) ionpulse = 1 magpulse = 1 - var/searching_for_ckey = 0 + pdahide = 1 + eye_protection = 2 // Immunity to flashes and the visual part of flashbangs + ear_protection = 1 // Immunity to the audio part of flashbangs + allow_rename = FALSE + modtype = "Commando" + faction = list("nanotrasen") + is_emaggable = FALSE /mob/living/silicon/robot/deathsquad/New(loc) ..() @@ -1267,26 +1276,7 @@ var/list/robot_verbs_default = list( playsound(loc, 'sound/mecha/nominalsyndi.ogg', 75, 0) -/mob/living/silicon/robot/deathsquad/attack_hand(mob/user) - if(isnull(ckey) && !searching_for_ckey) - searching_for_ckey = 1 - to_chat(user, "Now checking for possible borgs.") - var/list/borg_candidates = pollCandidates("Do you want to play as a Nanotrasen Combat borg?") - if(borg_candidates.len > 0 && isnull(ckey)) - searching_for_ckey = 0 - var/mob/M = pick(borg_candidates) - M.mind.transfer_to(src) - M.mind.assigned_role = "MODE" - M.mind.special_role = SPECIAL_ROLE_DEATHSQUAD - ticker.mode.traitors |= M.mind // Adds them to current traitor list. Which is really the extra antagonist list. - key = M.key - else - searching_for_ckey = 0 - to_chat(user, "Unable to connect to Central Command. Please wait and try again later.") - return - else - to_chat(user, "[src] is already checking for possible borgs.") - return + /mob/living/silicon/robot/syndicate base_icon = "syndie_bloodhound" @@ -1392,7 +1382,7 @@ var/list/robot_verbs_default = list( mind = new mind.current = src mind.original = src - mind.assigned_role = "MODE" + mind.assigned_role = SPECIAL_ROLE_ERT mind.special_role = SPECIAL_ROLE_ERT if(cyborg_unlock) crisis = 1 @@ -1447,3 +1437,9 @@ var/list/robot_verbs_default = list( var/static/all_borg_icon_states = icon_states('icons/mob/custom_synthetic/custom-synthetic.dmi') if(spritename in all_borg_icon_states) . = TRUE + +/mob/living/silicon/robot/check_eye_prot() + return eye_protection + +/mob/living/silicon/robot/check_ear_prot() + return ear_protection \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm index 033b244cf8c..e18ca8d6a17 100644 --- a/code/modules/mob/living/silicon/robot/robot_defense.dm +++ b/code/modules/mob/living/silicon/robot/robot_defense.dm @@ -1,7 +1,7 @@ /mob/living/silicon/robot/attack_alien(mob/living/carbon/alien/humanoid/M) if(M.a_intent == INTENT_DISARM) if(!lying) - M.do_attack_animation(src) + M.do_attack_animation(src, ATTACK_EFFECT_DISARM) if(prob(85)) Stun(7) step(src, get_dir(M,src)) @@ -42,7 +42,7 @@ if(opened && !wiresexposed && !issilicon(user)) if(cell) - cell.updateicon() + cell.update_icon() cell.add_fingerprint(user) user.put_in_active_hand(cell) to_chat(user, "You remove \the [cell].") diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index f549c07b66a..e9aadf5086a 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -198,7 +198,7 @@ modules += new /obj/item/multitool/cyborg(src) modules += new /obj/item/t_scanner(src) modules += new /obj/item/analyzer(src) - modules += new /obj/item/taperoll/engineering(src) + modules += new /obj/item/holosign_creator/engineering(src) modules += new /obj/item/gripper(src) modules += new /obj/item/matter_decompiler(src) modules += new /obj/item/floor_painter(src) @@ -222,7 +222,7 @@ modules += new /obj/item/restraints/handcuffs/cable/zipties/cyborg(src) modules += new /obj/item/melee/baton/loaded(src) modules += new /obj/item/gun/energy/disabler/cyborg(src) - modules += new /obj/item/taperoll/police(src) + modules += new /obj/item/holosign_creator/security(src) modules += new /obj/item/clothing/mask/gas/sechailer/cyborg(src) emag = new /obj/item/gun/energy/laser/cyborg(src) diff --git a/code/modules/mob/living/silicon/silicon_defense.dm b/code/modules/mob/living/silicon/silicon_defense.dm index 480c9442bd7..070ed327163 100644 --- a/code/modules/mob/living/silicon/silicon_defense.dm +++ b/code/modules/mob/living/silicon/silicon_defense.dm @@ -49,7 +49,7 @@ if("grab") grabbedby(M) else - M.do_attack_animation(src) + M.do_attack_animation(src, ATTACK_EFFECT_PUNCH) playsound(loc, 'sound/effects/bang.ogg', 10, 1) if(HULK in M.mutations) var/damage = rand(10,15) diff --git a/code/modules/mob/living/simple_animal/animal_defense.dm b/code/modules/mob/living/simple_animal/animal_defense.dm index b122decd322..972759812b4 100644 --- a/code/modules/mob/living/simple_animal/animal_defense.dm +++ b/code/modules/mob/living/simple_animal/animal_defense.dm @@ -11,7 +11,7 @@ grabbedby(M) if(INTENT_HARM, INTENT_DISARM) - M.do_attack_animation(src) + M.do_attack_animation(src, ATTACK_EFFECT_PUNCH) visible_message("[M] [response_harm] [src]!") playsound(loc, "punch", 25, 1, -1) attack_threshold_check(harm_intent_damage) @@ -58,3 +58,11 @@ visible_message("[src] looks unharmed.") else apply_damage(damage, damagetype) + +/mob/living/simple_animal/do_attack_animation(atom/A, visual_effect_icon, used_item, no_effect, end_pixel_y) + if(!no_effect && !visual_effect_icon && melee_damage_upper) + if(melee_damage_upper < 10) + visual_effect_icon = ATTACK_EFFECT_PUNCH + else + visual_effect_icon = ATTACK_EFFECT_SMASH + ..() \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm index 1ced2db841c..9e96a16fb0f 100644 --- a/code/modules/mob/living/simple_animal/bot/construction.dm +++ b/code/modules/mob/living/simple_animal/bot/construction.dm @@ -30,9 +30,10 @@ var/t = stripped_input(user, "Enter new robot name", name, created_name,MAX_NAME_LEN) if(!t) return - if(!in_range(src, usr) && loc != usr) + if(!in_range(src, user) && loc != user) return created_name = t + log_game("[key_name(user)] has renamed a robot to [t]") //Edbot Assembly @@ -53,9 +54,10 @@ var/t = stripped_input(user, "Enter new robot name", name, created_name,MAX_NAME_LEN) if(!t) return - if(!in_range(src, usr) && loc != usr) + if(!in_range(src, user) && loc != user) return created_name = t + log_game("[key_name(user)] has renamed a robot to [t]") return switch(build_step) @@ -253,10 +255,11 @@ var/t = stripped_input(user, "Enter new robot name", name, created_name,MAX_NAME_LEN) if(!t) return - if(!in_range(src, usr) && loc != usr) + if(!in_range(src, user) && loc != user) return created_name = t + log_game("[key_name(user)] has renamed a robot to [t]") /obj/item/toolbox_tiles_sensor/attackby(obj/item/W, mob/user, params) ..() @@ -272,10 +275,11 @@ var/t = stripped_input(user, "Enter new robot name", name, created_name,MAX_NAME_LEN) if(!t) return - if(!in_range(src, usr) && loc != usr) + if(!in_range(src, user) && loc != user) return created_name = t + log_game("[key_name(user)] has renamed a robot to [t]") //Medbot Assembly /obj/item/firstaid_arm_assembly @@ -347,9 +351,10 @@ var/t = stripped_input(user, "Enter new robot name", name, created_name,MAX_NAME_LEN) if(!t) return - if(!in_range(src, usr) && loc != usr) + if(!in_range(src, user) && loc != user) return created_name = t + log_game("[key_name(user)] has renamed a robot to [t]") else switch(build_step) if(0) @@ -457,9 +462,10 @@ var/t = stripped_input(user, "Enter new robot name", name, created_name,MAX_NAME_LEN) if(!t) return - if(!in_range(src, usr) && loc != usr) + if(!in_range(src, user) && loc != user) return created_name = t + log_game("[key_name(user)] has renamed a robot to [t]") else if(istype(I, /obj/item/screwdriver)) if(!build_step) diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm index 576ad200d5c..1d9c13b54fc 100644 --- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm +++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm @@ -94,7 +94,7 @@ /mob/living/simple_animal/bot/ed209/set_custom_texts() text_hack = "You disable [name]'s combat inhibitor." text_dehack = "You restore [name]'s combat inhibitor." - text_dehack_fail = "[name] ignores your attempts to restrict him!" + text_dehack_fail = "[name] ignores your attempts to restrict [p_them()]!" /mob/living/simple_animal/bot/ed209/get_controls(mob/user) var/dat diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm index c531a6ed067..9ad8837520d 100644 --- a/code/modules/mob/living/simple_animal/bot/floorbot.dm +++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm @@ -58,7 +58,7 @@ /mob/living/simple_animal/bot/floorbot/set_custom_texts() text_hack = "You corrupt [name]'s construction protocols." - text_dehack = "You detect errors in [name] and reset his programming." + text_dehack = "You detect errors in [name] and reset [p_their()] programming." text_dehack_fail = "[name] is not responding to reset commands!" /mob/living/simple_animal/bot/floorbot/get_controls(mob/user) @@ -98,7 +98,7 @@ T.use(loaded) amount += loaded if(loaded > 0) - to_chat(user, "You load [loaded] tiles into the floorbot. He now contains [amount] tiles.") + to_chat(user, "You load [loaded] tiles into the floorbot. [p_they(TRUE)] now contains [amount] tiles.") nagged = 0 update_icon() else diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index 1f38c83b502..3243061273f 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -188,7 +188,7 @@ visible_message("[usr] switches [on ? "on" : "off"] [src].") if("cellremove") if(open && cell && !usr.get_active_hand()) - cell.updateicon() + cell.update_icon() usr.put_in_active_hand(cell) cell.add_fingerprint(usr) cell = null diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index c292d33f39a..ef5de1908a8 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -267,7 +267,7 @@ Auto Patrol: []"}, C.visible_message("[src] has [harmbaton ? "beaten" : "stunned"] [C]!",\ "[src] has [harmbaton ? "beaten" : "stunned"] you!") -/mob/living/simple_animal/bot/secbot/Life() +/mob/living/simple_animal/bot/secbot/Life(seconds, times_fired) . = ..() if(flashing_lights) switch(light_color) diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index b942ce4107b..a6fcf4b5a20 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -285,7 +285,7 @@ AIStatus = AI_ON environment_smash = 1 //only token destruction, don't smash the cult wall NO STOP -/mob/living/simple_animal/hostile/construct/behemoth/Life() +/mob/living/simple_animal/hostile/construct/behemoth/Life(seconds, times_fired) weakened = 0 return ..() diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index 7afa9debe25..ea7db302c43 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -46,7 +46,7 @@ Read_Memory() ..() -/mob/living/simple_animal/pet/cat/Runtime/Life() +/mob/living/simple_animal/pet/cat/Runtime/Life(seconds, times_fired) if(!cats_deployed && ticker.current_state >= GAME_STATE_SETTING_UP) Deploy_The_Cats() if(!stat && ticker.current_state == GAME_STATE_FINISHED && !memory_saved) diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index 24772ff473c..2514af0eebd 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -37,7 +37,7 @@ if(gender == NEUTER) gender = pick(MALE, FEMALE) -/mob/living/simple_animal/pet/corgi/Life() +/mob/living/simple_animal/pet/corgi/Life(seconds, times_fired) . = ..() regenerate_icons() @@ -75,10 +75,10 @@ //helmet and armor = 100% protection if( istype(inventory_head,/obj/item/clothing/head/helmet) && istype(inventory_back,/obj/item/clothing/suit/armor) ) if( O.force ) - to_chat(user, "[src] is wearing too much armor! You can't cause \him any damage.") + to_chat(user, "[src] is wearing too much armor! You can't cause [p_them()] any damage.") visible_message(" [user] hits [src] with [O], however [src] is too armored.") else - to_chat(user, "[src] is wearing too much armor! You can't reach \his skin.") + to_chat(user, "[src] is wearing too much armor! You can't reach [p_their()] skin.") visible_message("[user] gently taps [src] with [O].") if(health>0 && prob(15)) custom_emote(1, "looks at [user] with [pick("an amused","an annoyed","a confused","a resentful", "a happy", "an excited")] expression.") @@ -180,7 +180,7 @@ ) if( ! ( item_to_add.type in allowed_types ) ) - to_chat(usr, "You set [item_to_add] on [src]'s back, but \he shakes it off!") + to_chat(usr, "You set [item_to_add] on [src]'s back, but [p_they()] shake[p_s()] it off!") if(!usr.drop_item()) to_chat(usr, "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s back!") return @@ -379,10 +379,10 @@ to_chat(user, "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!") return 0 if(health <= 0) - to_chat(user, "There is merely a dull, lifeless look in [real_name]'s eyes as you put the [item_to_add] on \him.") + to_chat(user, "There is merely a dull, lifeless look in [real_name]'s eyes as you put the [item_to_add] on [p_them()].") else if(user) user.visible_message("[user] puts [item_to_add] on [real_name]'s head. [src] looks at [user] and barks once.", - "You put [item_to_add] on [real_name]'s head. [src] gives you a peculiar look, then wags \his tail once and barks.", + "You put [item_to_add] on [real_name]'s head. [src] gives you a peculiar look, then wags [p_their()] tail once and barks.", "You hear a friendly-sounding bark.") item_to_add.loc = src src.inventory_head = item_to_add @@ -392,7 +392,7 @@ if(user && !user.drop_item()) to_chat(user, "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!") return 0 - to_chat(user, "You set [item_to_add] on [src]'s head, but \he shakes it off!") + to_chat(user, "You set [item_to_add] on [src]'s head, but [p_they()] shake[p_s()] it off!") item_to_add.loc = loc if(prob(25)) step_rand(item_to_add) @@ -612,7 +612,7 @@ A.fire() return -/mob/living/simple_animal/pet/corgi/Ian/borgi/Life() +/mob/living/simple_animal/pet/corgi/Ian/borgi/Life(seconds, times_fired) ..() if(emagged && prob(25)) var/mob/living/carbon/target = locate() in view(10,src) diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm index 99db2236612..665afa16cb2 100644 --- a/code/modules/mob/living/simple_animal/friendly/crab.dm +++ b/code/modules/mob/living/simple_animal/friendly/crab.dm @@ -34,7 +34,7 @@ Move(get_step(src, east_vs_west), east_vs_west) turns_since_move = 0 -/mob/living/simple_animal/crab/Life() +/mob/living/simple_animal/crab/Life(seconds, times_fired) . = ..() regenerate_icons() diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index ab1a94cbcc6..a8784a6d150 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -52,7 +52,7 @@ if(SV) SV.eat(src) -/mob/living/simple_animal/hostile/retaliate/goat/Life() +/mob/living/simple_animal/hostile/retaliate/goat/Life(seconds, times_fired) . = ..() if(stat == CONSCIOUS && prob(5)) milk_content = min(50, milk_content+rand(5, 10)) @@ -132,7 +132,7 @@ else ..() -/mob/living/simple_animal/cow/Life() +/mob/living/simple_animal/cow/Life(seconds, times_fired) . = ..() if(stat == CONSCIOUS && prob(5)) milk_content = min(50, milk_content+rand(5, 10)) @@ -188,7 +188,7 @@ pixel_x = rand(-6, 6) pixel_y = rand(0, 10) -/mob/living/simple_animal/chick/Life() +/mob/living/simple_animal/chick/Life(seconds, times_fired) . =..() if(.) amount_grown += rand(1,2) @@ -267,7 +267,7 @@ var/global/chicken_count = 0 else ..() -/mob/living/simple_animal/chicken/Life() +/mob/living/simple_animal/chicken/Life(seconds, times_fired) . = ..() if((. && prob(3) && eggsleft > 0) && egg_type) visible_message("[src] [pick(layMessage)]") diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index 5972d0f6e4b..a7a62c74c0b 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -39,7 +39,7 @@ for(var/mob/M in view()) M << 'sound/effects/mousesqueek.ogg' -/mob/living/simple_animal/mouse/Life() +/mob/living/simple_animal/mouse/Life(seconds, times_fired) . = ..() if(stat == UNCONSCIOUS) if(ckey || prob(1)) diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm index 70a64d2dbcb..b98d4181475 100644 --- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm +++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm @@ -35,7 +35,7 @@ var/emagged = 0 //is it getting ready to explode? var/obj/item/mmi/mmi = null - var/emagged_master = null //for administrative purposes, to see who emagged the spiderbot; also for a holder for if someone emags an empty frame first then inserts an MMI. + var/mob/emagged_master = null //for administrative purposes, to see who emagged the spiderbot; also for a holder for if someone emags an empty frame first then inserts an MMI. /mob/living/simple_animal/spiderbot/Destroy() if(emagged) @@ -135,8 +135,8 @@ else emagged = 1 to_chat(user, "You short out the security protocols and rewrite [src]'s internal memory.") - to_chat(src, "You have been emagged; you are now completely loyal to [user] and their every order!") - emagged_master = user.name + to_chat(src, "You have been emagged; you are now completely loyal to [user] and [user.p_their()] every order!") + emagged_master = user add_attack_logs(user, src, "Emagged") maxHealth = 60 health = 60 @@ -150,7 +150,7 @@ ckey = M.brainmob.ckey name = "Spider-bot ([M.brainmob.name])" if(emagged) - to_chat(src, "You have been emagged; you are now completely loyal to [emagged_master] and their every order!") + to_chat(src, "You have been emagged; you are now completely loyal to [emagged_master] and [emagged_master.p_their()] every order!") /mob/living/simple_animal/spiderbot/proc/update_icon() if(mmi) diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index a06ea9bd80d..283936acb44 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -57,7 +57,7 @@ target = null return ..() -/mob/living/simple_animal/hostile/Life() +/mob/living/simple_animal/hostile/Life(seconds, times_fired) . = ..() if(!.) walk(src, 0) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm index 50c24f0ac0b..3c72042efce 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm @@ -75,7 +75,7 @@ Difficulty: Hard /obj/effect/decal/cleanable/blood/gibs/bubblegum/can_bloodcrawl_in() return TRUE -/mob/living/simple_animal/hostile/megafauna/bubblegum/Life() +/mob/living/simple_animal/hostile/megafauna/bubblegum/Life(seconds, times_fired) ..() move_to_delay = Clamp((health/maxHealth) * 10, 5, 10) @@ -117,7 +117,7 @@ Difficulty: Hard bloodspell.phased = 1 internal_gps = new/obj/item/gps/internal/bubblegum(src) -/mob/living/simple_animal/hostile/megafauna/bubblegum/do_attack_animation(atom/A, visual_effect_icon) +/mob/living/simple_animal/hostile/megafauna/bubblegum/do_attack_animation(atom/A, visual_effect_icon, used_item, no_effect, end_pixel_y) if(!charging) ..() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm index 5c25e9820e1..6027070dfc9 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm @@ -229,7 +229,7 @@ Difficulty: Medium playsound(src.loc, 'sound/effects/meteorimpact.ogg', 200, 1) for(var/mob/living/L in orange(1, src)) if(L.stat) - visible_message("[src] slams down on [L], crushing them!") + visible_message("[src] slams down on [L], crushing [L.p_them()]!") L.gib() else L.adjustBruteLoss(75) 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 8d249c7f9e2..fe80846935d 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -76,7 +76,7 @@ Difficulty: Hard internal_gps = new/obj/item/gps/internal/hierophant(src) spawned_rune = new(loc) -/mob/living/simple_animal/hostile/megafauna/hierophant/Life() +/mob/living/simple_animal/hostile/megafauna/hierophant/Life(seconds, times_fired) . = ..() if(. && spawned_rune && !client) if(target || loc == spawned_rune.loc) diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index 9dab58daa4a..5832f7bdd60 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -51,7 +51,7 @@ var/attempt_open = 0 // Pickup loot -/mob/living/simple_animal/hostile/mimic/crate/initialize() +/mob/living/simple_animal/hostile/mimic/crate/Initialize() ..() for(var/obj/item/I in loc) I.loc = src diff --git a/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm index a026d33ed8d..3063c5a8ce1 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm @@ -269,7 +269,7 @@ stat_attack = 1 robust_searching = 1 -/mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/Life() +/mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/Life(seconds, times_fired) if(isturf(loc)) for(var/mob/living/carbon/human/H in view(src,1)) //Only for corpse right next to/on same tile if(H.stat == UNCONSCIOUS) diff --git a/code/modules/mob/living/simple_animal/hostile/mushroom.dm b/code/modules/mob/living/simple_animal/hostile/mushroom.dm index 7346473de94..2c775074253 100644 --- a/code/modules/mob/living/simple_animal/hostile/mushroom.dm +++ b/code/modules/mob/living/simple_animal/hostile/mushroom.dm @@ -42,7 +42,7 @@ else to_chat(user, "It looks like it's been roughed up.") -/mob/living/simple_animal/hostile/mushroom/Life() +/mob/living/simple_animal/hostile/mushroom/Life(seconds, times_fired) ..() if(!stat)//Mushrooms slowly regenerate if conscious, for people who want to save them from being eaten adjustBruteLoss(-2) diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm index 0e1d5eddd71..90586bb43c6 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm @@ -62,7 +62,7 @@ return ..() //self repair systems have a chance to bring the drone back to life -/mob/living/simple_animal/hostile/retaliate/malf_drone/Life() +/mob/living/simple_animal/hostile/retaliate/malf_drone/Life(seconds, times_fired) //emps and lots of damage can temporarily shut us down if(disabled > 0) diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm index 14b1af87b0a..f9516739e6f 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm @@ -56,7 +56,7 @@ if(.) custom_emote(1, "wails at [.]") -/mob/living/simple_animal/hostile/retaliate/ghost/Life() +/mob/living/simple_animal/hostile/retaliate/ghost/Life(seconds, times_fired) if(target) invisibility = pick(0,0,60,invisibility) else diff --git a/code/modules/mob/living/simple_animal/hostile/spaceworms.dm b/code/modules/mob/living/simple_animal/hostile/spaceworms.dm index 27bd2f3ee1c..cdbc64eea1e 100644 --- a/code/modules/mob/living/simple_animal/hostile/spaceworms.dm +++ b/code/modules/mob/living/simple_animal/hostile/spaceworms.dm @@ -190,7 +190,7 @@ SW.death() -/mob/living/simple_animal/hostile/spaceWorm/Life() +/mob/living/simple_animal/hostile/spaceWorm/Life(seconds, times_fired) if(nextWorm && !(Adjacent(nextWorm))) Detach(0) @@ -328,7 +328,7 @@ //Jiggle the whole worm forwards towards the next segment -/mob/living/simple_animal/hostile/spaceWorm/do_attack_animation(atom/A) +/mob/living/simple_animal/hostile/spaceWorm/do_attack_animation(atom/A, visual_effect_icon, used_item, no_effect, end_pixel_y) ..() if(previousWorm) previousWorm.do_attack_animation(src) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/black.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/black.dm index 982a0eaae90..377b8ff335a 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/black.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/black.dm @@ -36,7 +36,7 @@ L.reagents.add_reagent("terror_black_toxin", 30) // inject our special poison visible_message("[src] buries its long fangs deep into the [inject_target] of [target]!") else - visible_message("[src] bites [target], but cannot inject venom into their [inject_target]!") + visible_message("[src] bites [target], but cannot inject venom into [target.p_their()] [inject_target]!") L.attack_animal(src) if(!ckey && (!(target in enemies) || L.reagents.has_reagent("terror_black_toxin", 60))) step_away(src, L) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/gray.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/gray.dm index 06b28c6400e..43c0e7b0be5 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/gray.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/gray.dm @@ -33,7 +33,7 @@ if(W) melee_damage_lower = initial(melee_damage_lower) * 2 melee_damage_upper = initial(melee_damage_upper) * 2 - visible_message("[src] savagely mauls [target] while they are stuck in the web!") + visible_message("[src] savagely mauls [target] while [L.p_theyre()] stuck in the web!") else melee_damage_lower = initial(melee_damage_lower) melee_damage_upper = initial(melee_damage_upper) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/green.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/green.dm index 9d6f977a1ae..64ef285ded8 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/green.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/green.dm @@ -93,5 +93,5 @@ // instead of having a venom that only lasts seconds, we just add the eyeblur directly. visible_message("[src] buries its fangs deep into the [inject_target] of [target]!") else - visible_message("[src] bites [target], but cannot inject venom into their [inject_target]!") + visible_message("[src] bites [target], but cannot inject venom into [target.p_their()] [inject_target]!") L.attack_animal(src) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/prince.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/prince.dm index 21b1276425c..66e88af1e1b 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/prince.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/prince.dm @@ -43,7 +43,7 @@ /mob/living/simple_animal/hostile/poison/terror_spider/prince/spider_specialattack(mob/living/carbon/human/L) if(prob(15)) - visible_message("[src] rams into [L], knocking them to the floor!") + visible_message("[src] rams into [L], knocking [L.p_them()] to the floor!") L.Weaken(5) L.Stun(5) else diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/purple.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/purple.dm index c9309715443..5c483b4e3e9 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/purple.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/purple.dm @@ -48,7 +48,7 @@ visible_message("[src] chitters in the direction of [Q]!") . = ..() -/mob/living/simple_animal/hostile/poison/terror_spider/purple/Life() +/mob/living/simple_animal/hostile/poison/terror_spider/purple/Life(seconds, times_fired) . = ..() if(.) // if mob is NOT dead if(!degenerate && spider_myqueen) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/queen.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/queen.dm index 5edcbe919c2..9133b8cc14c 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/queen.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/queen.dm @@ -61,7 +61,7 @@ spider_growinstantly = 1 spider_spawnfrequency = 150 -/mob/living/simple_animal/hostile/poison/terror_spider/queen/Life() +/mob/living/simple_animal/hostile/poison/terror_spider/queen/Life(seconds, times_fired) . = ..() if(.) // if mob is NOT dead if(ckey && canlay < 12 && hasnested) // max 12 eggs worth stored at any one time, realistically that's tons. diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm index cd01006546c..ef456ddcb0e 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm @@ -292,7 +292,7 @@ var/global/list/ts_spiderling_list = list() handle_dying() return ..() -/mob/living/simple_animal/hostile/poison/terror_spider/Life() +/mob/living/simple_animal/hostile/poison/terror_spider/Life(seconds, times_fired) . = ..() if(!.) // if mob is dead if(prob(2)) diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index c206f1499d9..dba62b4744c 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -276,7 +276,7 @@ /* * AI - Not really intelligent, but I'm calling it AI anyway. */ -/mob/living/simple_animal/parrot/Life() +/mob/living/simple_animal/parrot/Life(seconds, times_fired) ..() //Sprite and AI update for when a parrot gets pulled diff --git a/code/modules/mob/living/simple_animal/pony.dm b/code/modules/mob/living/simple_animal/pony.dm index 437c9b0ac4d..960f8fc0998 100644 --- a/code/modules/mob/living/simple_animal/pony.dm +++ b/code/modules/mob/living/simple_animal/pony.dm @@ -27,7 +27,7 @@ ..() if(stat == 2) new /obj/item/reagent_containers/food/snacks/ectoplasm(src.loc) - src.visible_message("\The [src] lets out a contented sigh as their form unwinds.") + src.visible_message("[src] lets out a contented sigh as [p_their()] form unwinds.") src.ghostize() qdel(src) return diff --git a/code/modules/mob/living/simple_animal/posessed_object.dm b/code/modules/mob/living/simple_animal/posessed_object.dm index 2e9d1b94bf2..22901f4d29a 100644 --- a/code/modules/mob/living/simple_animal/posessed_object.dm +++ b/code/modules/mob/living/simple_animal/posessed_object.dm @@ -26,7 +26,7 @@ to_chat(usr, "[src] appears to be having trouble staying afloat!") -/mob/living/simple_animal/possessed_object/do_attack_animation(atom/A) +/mob/living/simple_animal/possessed_object/do_attack_animation(atom/A, visual_effect_icon, used_item, no_effect, end_pixel_y) ..() animate_ghostly_presence(src, -1, 20, 1) // Restart the floating animation after the attack animation, as it will be cancelled. @@ -60,7 +60,7 @@ qdel(src) -/mob/living/simple_animal/possessed_object/Life() +/mob/living/simple_animal/possessed_object/Life(seconds, times_fired) ..() if(!possessed_item) // If we're a donut and someone's eaten us, for instance. diff --git a/code/modules/mob/living/simple_animal/tribbles.dm b/code/modules/mob/living/simple_animal/tribbles.dm index 5a38929b88d..3e7f1722a41 100644 --- a/code/modules/mob/living/simple_animal/tribbles.dm +++ b/code/modules/mob/living/simple_animal/tribbles.dm @@ -68,7 +68,7 @@ var/global/totaltribbles = 0 //global variable so it updates for all tribbles, gestation = 0 -/mob/living/simple_animal/tribble/Life() +/mob/living/simple_animal/tribble/Life(seconds, times_fired) ..() if(src.health > 0) //no mostly dead procreation if(gestation != null) //neuter check diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index bb590e730f5..bbe6caed8a3 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -169,7 +169,17 @@ /mob/proc/movement_delay() return 0 -/mob/proc/Life() +/mob/proc/Life(seconds, times_fired) + if(forced_look) + if(!isnum(forced_look)) + var/atom/A = locateUID(forced_look) + if(istype(A)) + var/view = client ? client.view : world.view + if(get_dist(src, A) > view || !(src in viewers(view, A))) + forced_look = null + to_chat(src, "Your direction target has left your view, you are no longer facing anything.") + return + setDir() // handle_typing_indicator() return @@ -533,6 +543,17 @@ var/list/slot_equipment_priority = list( \ client.screen = list() hud_used.show_hud(hud_used.hud_version) +/mob/setDir(new_dir) + if(forced_look) + if(isnum(forced_look)) + dir = forced_look + else + var/atom/A = locateUID(forced_look) + if(istype(A)) + dir = get_cardinal_dir(src, A) + return + . = ..() + /mob/proc/show_inv(mob/user) user.set_machine(src) var/dat = {" @@ -1158,7 +1179,7 @@ var/list/slot_equipment_priority = list( \ new /obj/effect/decal/cleanable/vomit/green(location) else if(!no_text) - visible_message("[src] pukes all over \himself!","You puke all over yourself!") + visible_message("[src] pukes all over [p_them()]self!","You puke all over yourself!") location.add_vomit_floor(src, 1) playsound(location, 'sound/effects/splat.ogg', 50, 1) @@ -1308,4 +1329,4 @@ var/list/slot_equipment_priority = list( \ if(WEST) D = NORTH setDir(D) - spintime -= speed \ No newline at end of file + spintime -= speed diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 9154591c2fe..57b5aeb4996 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -198,3 +198,5 @@ var/list/progressbars = null //for stacking do_after bars var/list/tkgrabbed_objects = list() // Assoc list of items to TK grabs + + var/forced_look = null // This can either be a numerical direction or a soft object reference (UID). It makes the mob always face towards the selected thing. \ No newline at end of file diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index 1c4b0f38fbe..593d077a562 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -269,7 +269,7 @@ to_chat(assailant, "You squeeze [affecting], but nothing interesting happens.") return - assailant.visible_message("[assailant] has reinforced \his grip on [affecting] (now neck)!") + assailant.visible_message("[assailant] has reinforced [assailant.p_their()] grip on [affecting] (now neck)!") state = GRAB_NECK icon_state = "grabbed+1" assailant.setDir(get_dir(assailant, affecting)) @@ -282,11 +282,11 @@ hud.name = "kill" affecting.Stun(10) //10 ticks of ensured grab else if(state < GRAB_UPGRADING) - assailant.visible_message("[assailant] starts to tighten \his grip on [affecting]'s neck!") + assailant.visible_message("[assailant] starts to tighten [assailant.p_their()] grip on [affecting]'s neck!") hud.icon_state = "kill1" state = GRAB_KILL - assailant.visible_message("[assailant] has tightened \his grip on [affecting]'s neck!") + assailant.visible_message("[assailant] has tightened [assailant.p_their()] grip on [affecting]'s neck!") add_attack_logs(assailant, affecting, "Strangled") assailant.next_move = world.time + 10 @@ -332,7 +332,7 @@ if(last_hit_zone == "head") //This checks the hitzone the user has selected. In this specific case, they have the head selected. if(affecting.lying) return - assailant.visible_message("[assailant] thrusts \his head into [affecting]'s skull!") //A visible message for what is going on. + assailant.visible_message("[assailant] thrusts [assailant.p_their()] head into [affecting]'s skull!") //A visible message for what is going on. var/damage = 5 var/obj/item/clothing/hat = attacker.head if(istype(hat)) @@ -354,7 +354,7 @@ if(!affected.internal_bodyparts_by_name["eyes"]) to_chat(assailant, "You cannot locate any eyes on [affecting]!") return - assailant.visible_message("[assailant] presses \his fingers into [affecting]'s eyes!") + assailant.visible_message("[assailant] presses [assailant.p_their()] fingers into [affecting]'s eyes!") to_chat(affecting, "You feel immense pain as digits are being pressed into your eyes!") add_attack_logs(assailant, affecting, "Eye-fucked with their fingers") var/obj/item/organ/internal/eyes/eyes = affected.get_int_organ(/obj/item/organ/internal/eyes) diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index a92e548d42b..f26961eace9 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -268,6 +268,8 @@ else . = ..() + mob.setDir(direct) + for(var/obj/item/grab/G in mob) if(G.state == GRAB_NECK) mob.setDir(reverse_dir[direct]) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index bf6526c856e..6d1f856fbd3 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -4,6 +4,7 @@ var/spawning = 0 //Referenced when you want to delete the new_player later on in the code. var/totalPlayers = 0 //Player counts for the Lobby tab var/totalPlayersReady = 0 + var/tos_consent = FALSE universal_speak = 1 invisibility = 101 @@ -19,7 +20,39 @@ /mob/new_player/verb/new_player_panel() set src = usr - new_player_panel_proc() + + if(handle_tos_consent()) + new_player_panel_proc() + +/mob/new_player/proc/handle_tos_consent() + if(!GLOB.join_tos) + return TRUE + + establish_db_connection() + if(!dbcon.IsConnected()) + tos_consent = TRUE + return TRUE + + var/DBQuery/query = dbcon.NewQuery("SELECT * FROM [format_table_name("privacy")] WHERE ckey='[src.ckey]' AND consent=1") + query.Execute() + while(query.NextRow()) + tos_consent = TRUE + return TRUE + + privacy_consent() + return FALSE + +/mob/new_player/proc/privacy_consent() + src << browse(null, "window=playersetup") + var/output = GLOB.join_tos + output += "

I consent" + output += "

I DO NOT consent" + src << browse(output,"window=privacy_consent;size=500x300") + var/datum/browser/popup = new(src, "privacy_consent", "

Privacy Consent
", 500, 400) + popup.set_window_options("can_close=0") + popup.set_content(output) + popup.open(0) + return /mob/new_player/proc/new_player_panel_proc() @@ -43,6 +76,9 @@ output += "

Observe

" + if(GLOB.join_tos) + output += "

Terms of Service

" + if(!IsGuestKey(src.key)) establish_db_connection() @@ -109,11 +145,28 @@ /mob/new_player/Topic(href, href_list[]) if(!client) return 0 + if(href_list["consent_signed"]) + var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") + var/DBQuery/query = dbcon.NewQuery("REPLACE INTO [format_table_name("privacy")] (ckey, datetime, consent) VALUES ('[ckey]', '[sqltime]', 1)") + query.Execute() + src << browse(null, "window=privacy_consent") + tos_consent = 1 + new_player_panel_proc() + if(href_list["consent_rejected"]) + tos_consent = 0 + to_chat(usr, "You must consent to the terms of service before you can join!") + var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") + var/DBQuery/query = dbcon.NewQuery("REPLACE INTO [format_table_name("privacy")] (ckey, datetime, consent) VALUES ('[ckey]', '[sqltime]', 0)") + query.Execute() + if(href_list["show_preferences"]) client.prefs.ShowChoices(src) return 1 if(href_list["ready"]) + if(!tos_consent) + to_chat(usr, "You must consent to the terms of service before you can join!") + return 0 ready = !ready new_player_panel_proc() @@ -126,6 +179,9 @@ new_player_panel_proc() if(href_list["observe"]) + if(!tos_consent) + to_chat(usr, "You must consent to the terms of service before you can join!") + return 0 if(alert(src,"Are you sure you wish to observe? You cannot normally join the round after doing this!","Player Setup","Yes","No") == "Yes") if(!client) return 1 @@ -155,8 +211,14 @@ respawnable_list += observer qdel(src) return 1 + if(href_list["tos"]) + privacy_consent() + return 0 if(href_list["late_join"]) + if(!tos_consent) + to_chat(usr, "You must consent to the terms of service before you can join!") + return 0 if(!ticker || ticker.current_state != GAME_STATE_PLAYING) to_chat(usr, "The round is either not ready, or has already finished...") return @@ -326,7 +388,7 @@ if(ailist.len) var/mob/living/silicon/ai/announcer = pick(ailist) if(character.mind) - if((character.mind.assigned_role != "Cyborg") && (character.mind.special_role != "MODE")) + if((character.mind.assigned_role != "Cyborg") && (character.mind.assigned_role != character.mind.special_role)) if(character.mind.role_alt_title) rank = character.mind.role_alt_title var/arrivalmessage = announcer.arrivalmsg @@ -338,7 +400,7 @@ announcer.say(";[arrivalmessage]") else if(character.mind) - if((character.mind.assigned_role != "Cyborg") && (character.mind.special_role != "MODE")) + if((character.mind.assigned_role != "Cyborg") && (character.mind.assigned_role != character.mind.special_role)) if(character.mind.role_alt_title) rank = character.mind.role_alt_title global_announcer.autosay("[character.real_name],[rank ? " [rank]," : " visitor," ] [join_message ? join_message : "has arrived on the station"].", "Arrivals Announcement Computer") @@ -351,12 +413,12 @@ if(ailist.len) var/mob/living/silicon/ai/announcer = pick(ailist) if(character.mind) - if((character.mind.special_role != "MODE")) + if(character.mind.assigned_role != character.mind.special_role) var/arrivalmessage = "A new[rank ? " [rank]" : " visitor" ] [join_message ? join_message : "has arrived on the station"]." announcer.say(";[arrivalmessage]") else if(character.mind) - if((character.mind.special_role != "MODE")) + if(character.mind.assigned_role != character.mind.special_role) // can't use their name here, since cyborg namepicking is done post-spawn, so we'll just say "A new Cyborg has arrived"/"A new Android has arrived"/etc. global_announcer.autosay("A new[rank ? " [rank]" : " visitor" ] [join_message ? join_message : "has arrived on the station"].", "Arrivals Announcement Computer") diff --git a/code/modules/modular_computers/file_system/programs/command/card.dm b/code/modules/modular_computers/file_system/programs/command/card.dm index 6ebf9228848..b570687569a 100644 --- a/code/modules/modular_computers/file_system/programs/command/card.dm +++ b/code/modules/modular_computers/file_system/programs/command/card.dm @@ -238,7 +238,7 @@ jobdatum = J break if(!jobdatum) - to_chat(usr, "\red No log exists for this job: [t1]") + to_chat(usr, "No log exists for this job: [t1]") return access = jobdatum.get_access() diff --git a/code/modules/ninja/martial_art.dm b/code/modules/ninja/martial_art.dm index b6562d8377d..c97a3e505c3 100644 --- a/code/modules/ninja/martial_art.dm +++ b/code/modules/ninja/martial_art.dm @@ -20,7 +20,7 @@ /obj/item/creeping_widow_injector/attack_self(mob/living/carbon/human/user as mob) if(!used) user.visible_message("You stick the [src]'s needle into your arm and press the button.", \ - "[user] sticks the [src]'s needle \his arm and presses the button.") + "[user] sticks the [src]'s needle [user.p_their()] arm and presses the button.") to_chat(user, "The nanomachines in the [src] flow through your bloodstream.") var/datum/martial_art/ninja_martial_art/N = new/datum/martial_art/ninja_martial_art(null) @@ -98,8 +98,8 @@ D.silent += 1 D.adjustOxyLoss(1) else - D.visible_message("[A] loses \his grip on [D]'s neck!", \ - "[A] loses \his grip on your neck!") + D.visible_message("[A] loses [A.p_their()] grip on [D]'s neck!", \ + "[A] loses [A.p_their()] grip on your neck!") has_choke_hold = 0 return 0 I++ diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index e3c625593c5..30841f94c69 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -30,7 +30,8 @@ icon_state = "tallcabinet" -/obj/structure/filingcabinet/initialize() +/obj/structure/filingcabinet/Initialize() + ..() for(var/obj/item/I in loc) if(istype(I, /obj/item/paper) || istype(I, /obj/item/folder) || istype(I, /obj/item/photo)) I.loc = src diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index db3f7cddce7..d37506b3d82 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -379,7 +379,7 @@ if(is_hot(P)) if((CLUMSY in user.mutations) && prob(10)) - user.visible_message("[user] accidentally ignites themselves!", \ + user.visible_message("[user] accidentally ignites [user.p_them()]self!", \ "You miss the paper and accidentally light yourself on fire!") user.unEquip(P) user.adjust_fire_stacks(1) diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm index 6656eefcdf1..08cb7b6555e 100644 --- a/code/modules/paperwork/paper_bundle.dm +++ b/code/modules/paperwork/paper_bundle.dm @@ -79,8 +79,8 @@ if(istype(P, /obj/item/lighter/zippo)) class = "" - user.visible_message("[class][user] holds \the [P] up to \the [src], it looks like \he's trying to burn it!", \ - "[class]You hold \the [P] up to \the [src], burning it slowly.") + user.visible_message("[class][user] holds [P] up to [src], it looks like [user.p_theyre()] trying to burn it!", \ + "[class]You hold [P] up to [src], burning it slowly.") spawn(20) if(get_dist(src, user) < 2 && user.get_active_hand() == P && P.lit) diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm index 1c4c0b357cc..fbbfacb0b8f 100644 --- a/code/modules/paperwork/paperplane.dm +++ b/code/modules/paperwork/paperplane.dm @@ -33,7 +33,7 @@ /obj/item/paperplane/suicide_act(mob/living/user) user.Stun(10) - user.visible_message("[user] jams [name] in \his nose. It looks like \he's trying to commit suicide!") + user.visible_message("[user] jams [name] in [user.p_their()] nose. It looks like [user.p_theyre()] trying to commit suicide!") user.EyeBlurry(6) var/obj/item/organ/internal/eyes/E = user.get_int_organ(/obj/item/organ/internal/eyes) if(E) @@ -73,7 +73,7 @@ else if(is_hot(P)) if(user.disabilities & CLUMSY && prob(10)) - user.visible_message("[user] accidentally ignites themselves!", \ + user.visible_message("[user] accidentally ignites [user.p_them()]self!", \ "You miss [src] and accidentally light yourself on fire!") user.unEquip(P) user.adjust_fire_stacks(1) diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index b4446f67e0e..4e3aaefd1eb 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -25,7 +25,7 @@ pressure_resistance = 2 /obj/item/pen/suicide_act(mob/user) - to_chat(viewers(user), "[user] starts scribbling numbers over \himself with the [src.name]! It looks like \he's trying to commit sudoku.") + to_chat(viewers(user), "[user] starts scribbling numbers over [user.p_them()]self with the [name]! It looks like [user.p_theyre()] trying to commit sudoku.") return (BRUTELOSS) /obj/item/pen/blue diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 0d176753ad4..41799958c4f 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -316,11 +316,11 @@ return src.add_fingerprint(user) if(target == user && !user.incapacitated()) - visible_message("[usr] jumps onto the photocopier!") + visible_message("[usr] jumps onto [src]!") else if(target != user && !user.restrained() && !user.stat && !user.weakened && !user.stunned && !user.paralysis) if(target.anchored) return if(!ishuman(user)) return - visible_message("[usr] drags [target.name] onto the photocopier!") + visible_message("[usr] drags [target.name] onto [src]!") target.forceMove(get_turf(src)) ass = target if(copyitem) @@ -344,9 +344,9 @@ /obj/machinery/photocopier/emag_act(user as mob) if(!emagged) emagged = 1 - to_chat(user, "You overload the photocopier's laser printing mechanism.") + to_chat(user, "You overload [src]'s laser printing mechanism.") else - to_chat(user, "The photocopier's laser printing mechanism is already overloaded!") + to_chat(user, "[src]'s laser printing mechanism is already overloaded!") /obj/item/toner name = "toner cartridge" diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index 0ab4db844e9..40759ab792c 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -56,8 +56,8 @@ if(istype(P, /obj/item/lighter/zippo)) class = "" - user.visible_message("[class][user] holds \the [P] up to \the [src], it looks like \he's trying to burn it!", \ - "[class]You hold \the [P] up to \the [src], burning it slowly.") + user.visible_message("[class][user] holds \the [P] up to \the [src], it looks like [user.p_theyre()] trying to burn it!", \ + "[class]You hold [P] up to [src], burning it slowly.") spawn(20) if(get_dist(src, user) < 2 && user.get_active_hand() == P && P.lit) diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm index ad67a53cd5b..5a101629c94 100644 --- a/code/modules/paperwork/stamps.dm +++ b/code/modules/paperwork/stamps.dm @@ -14,7 +14,7 @@ attack_verb = list("stamped") /obj/item/stamp/suicide_act(mob/user) - user.visible_message("[user] stamps 'VOID' on \his forehead, then promptly falls over, dead.") + user.visible_message("[user] stamps 'VOID' on [user.p_their()] forehead, then promptly falls over, dead.") return (OXYLOSS) /obj/item/stamp/qm diff --git a/code/modules/pda/cart.dm b/code/modules/pda/cart.dm index c50ae0758f4..53c61f4e27f 100644 --- a/code/modules/pda/cart.dm +++ b/code/modules/pda/cart.dm @@ -14,15 +14,6 @@ var/list/programs = list() var/list/messenger_plugins = list() -/obj/item/cartridge/New() - if(ticker && ticker.current_state >= GAME_STATE_SETTING_UP) - initialize() - -/obj/item/cartridge/initialize() - if(radio) - radio.initialize() - ..() - /obj/item/cartridge/Destroy() QDEL_NULL(radio) QDEL_LIST(programs) @@ -68,7 +59,7 @@ new/datum/data/pda/app/crew_records/security, new/datum/data/pda/app/secbot_control) -/obj/item/cartridge/security/initialize() +/obj/item/cartridge/security/Initialize() radio = new /obj/item/integrated_radio/beepsky(src) ..() @@ -118,7 +109,7 @@ desc = "A data cartridge with an integrated radio signaler module." programs = list(new/datum/data/pda/app/signaller) -/obj/item/cartridge/signal/initialize() +/obj/item/cartridge/signal/Initialize() radio = new /obj/item/integrated_radio/signal(src) ..() @@ -141,7 +132,7 @@ new/datum/data/pda/app/supply, new/datum/data/pda/app/mule_control) -/obj/item/cartridge/quartermaster/initialize() +/obj/item/cartridge/quartermaster/Initialize() radio = new /obj/item/integrated_radio/mule(src) ..() @@ -163,7 +154,7 @@ new/datum/data/pda/app/status_display) -/obj/item/cartridge/hop/initialize() +/obj/item/cartridge/hop/Initialize() radio = new /obj/item/integrated_radio/mule(src) ..() @@ -176,7 +167,7 @@ new/datum/data/pda/app/status_display) -/obj/item/cartridge/hos/initialize() +/obj/item/cartridge/hos/Initialize() radio = new /obj/item/integrated_radio/beepsky(src) ..() @@ -214,7 +205,7 @@ new/datum/data/pda/app/status_display) -/obj/item/cartridge/rd/initialize() +/obj/item/cartridge/rd/Initialize() radio = new /obj/item/integrated_radio/signal(src) ..() @@ -242,7 +233,7 @@ new/datum/data/pda/app/status_display) -/obj/item/cartridge/captain/initialize() +/obj/item/cartridge/captain/Initialize() radio = new /obj/item/integrated_radio/beepsky(src) ..() @@ -279,7 +270,7 @@ new/datum/data/pda/app/status_display) -/obj/item/cartridge/centcom/initialize() +/obj/item/cartridge/centcom/Initialize() radio = new /obj/item/integrated_radio/beepsky(src) ..() diff --git a/code/modules/pda/radio.dm b/code/modules/pda/radio.dm index 3c89c291300..b9dfe8ff7e4 100644 --- a/code/modules/pda/radio.dm +++ b/code/modules/pda/radio.dm @@ -173,7 +173,7 @@ radio_connection = null return ..() -/obj/item/integrated_radio/signal/initialize() +/obj/item/integrated_radio/signal/Initialize() if(!radio_controller) return if(src.frequency < PUBLIC_LOW_FREQ || src.frequency > PUBLIC_HIGH_FREQ) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 9c3d64ef4fc..3ba1a4b5210 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -682,7 +682,7 @@ else user.put_in_hands(cell) cell.add_fingerprint(user) - cell.updateicon() + cell.update_icon() src.cell = null user.visible_message("[user.name] removes the power cell from [src.name]!", "You remove the power cell.") diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index c5b014576fc..25a47f19e04 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -72,19 +72,13 @@ By design, d1 is the smallest direction and d2 is the highest var/turf/T = src.loc // hide if turf is not intact if(level==1) hide(T.intact) - cable_list += src //add it to the global cable list - - // Catches the interim-zone of worldstart and roundstart - // I want both the ticker to exist (so mapped-in cables don't trip this) - // but also not have started yet (since the zlevel system would handle this on its own otherwise) - if((ticker && ticker.current_state < GAME_STATE_PLAYING)) - attempt_init() + LAZYADD(GLOB.cable_list, src) //add it to the global cable list /obj/structure/cable/Destroy() // called when a cable is deleted if(powernet) cut_cable_from_powernet() // update the powernets - cable_list -= src //remove it from global cable list + LAZYREMOVE(GLOB.cable_list, src) //remove it from global cable list return ..() // then go ahead and delete the cable /////////////////////////////////// @@ -462,7 +456,7 @@ obj/structure/cable/proc/cable_color(var/colorC) powernet.remove_cable(src) //remove the cut cable from its powernet // queue it to rebuild - deferred_powernet_rebuilds += O + SSmachines.deferred_powernet_rebuilds += O // Disconnect machines connected to nodes if(d1 == 0) // if we cut a node (O-X) cable @@ -507,9 +501,9 @@ var/global/list/datum/stack_recipe/cable_coil_recipes = list( /obj/item/stack/cable_coil/suicide_act(mob/user) if(locate(/obj/structure/stool) in user.loc) - user.visible_message("[user] is making a noose with the [name]! It looks like \he's trying to commit suicide.") + user.visible_message("[user] is making a noose with the [name]! It looks like [user.p_theyre()] trying to commit suicide.") else - user.visible_message("[user] is strangling \himself with the [name]! It looks like \he's trying to commit suicide.") + user.visible_message("[user] is strangling [user.p_them()]self with the [name]! It looks like [user.p_theyre()] trying to commit suicide.") return(OXYLOSS) /obj/item/stack/cable_coil/New(loc, length = MAXCOIL, var/paramcolor = null) diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index f08e008089b..3bc2b5bc39b 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -1,8 +1,64 @@ -// the power cell -// charge from 0 to 100% -// fits in APC to provide backup power +/obj/item/stock_parts/cell + name = "power cell" + desc = "A rechargeable electrochemical power cell." + icon = 'icons/obj/power.dmi' + icon_state = "cell" + item_state = "cell" + origin_tech = "powerstorage=1" + force = 5 + throwforce = 5 + throw_speed = 2 + throw_range = 5 + w_class = WEIGHT_CLASS_SMALL + var/charge = 0 // note %age conveted to actual charge in New + var/maxcharge = 1000 + materials = list(MAT_METAL = 700, MAT_GLASS = 50) + var/rigged = FALSE // true if rigged to explode + var/chargerate = 100 //how much power is given every tick in a recharger + var/self_recharge = 0 //does it self recharge, over time, or not? + var/ratingdesc = TRUE + var/grown_battery = FALSE // If it's a grown that acts as a battery, add a wire overlay to it. + +/obj/item/stock_parts/cell/New() + ..() + processing_objects.Add(src) + charge = maxcharge + if(ratingdesc) + desc += " This one has a power rating of [DisplayPower(maxcharge)], and you should not swallow it." + update_icon() + +/obj/item/stock_parts/cell/Destroy() + processing_objects.Remove(src) + return ..() + +/obj/item/stock_parts/cell/vv_edit_var(var_name, var_value) + switch(var_name) + if("self_recharge") + if(var_value) + processing_objects.Add(src) + else + processing_objects.Remove(src) + . = ..() + +/obj/item/stock_parts/cell/process() + if(self_recharge) + give(chargerate * 0.25) + else + return PROCESS_KILL + +/obj/item/stock_parts/cell/update_icon() + overlays.Cut() + if(grown_battery) + overlays += image('icons/obj/power.dmi', "grown_wires") + if(charge < 0.01) + return + else if(charge/maxcharge >=0.995) + overlays += "cell-o2" + else + overlays += "cell-o1" + /obj/item/stock_parts/cell/proc/percent() // return % charge of cell - return 100.0*charge/maxcharge + return 100 * charge / maxcharge // use power from a cell /obj/item/stock_parts/cell/proc/use(amount) @@ -20,24 +76,23 @@ explode() return 0 if(maxcharge < amount) - return 0 - var/power_used = min(maxcharge-charge,amount) + amount = maxcharge + var/power_used = min(maxcharge - charge, amount) charge += power_used return power_used /obj/item/stock_parts/cell/examine(mob/user) - if(..(user, 1)) - if(maxcharge <= 2500) - to_chat(user, "[desc]\nThe manufacturer's label states this cell has a power rating of [maxcharge], and that you should not swallow it.\nThe charge meter reads [round(src.percent() )]%.") - else - to_chat(user, "This power cell has an exciting chrome finish, as it is an uber-capacity cell type! It has a power rating of [maxcharge]!\nThe charge meter reads [round(src.percent() )]%.") + ..() + if(rigged) + to_chat(user, "This power cell seems to be faulty!") + else + to_chat(user, "The charge meter reads [round(percent() )]%.") -/obj/item/stock_parts/cell/attack_self(mob/user as mob) - src.add_fingerprint(user) - return +/obj/item/stock_parts/cell/suicide_act(mob/user) + to_chat(viewers(user), "[user] is licking the electrodes of the [src]! It looks like [user.p_theyre()] trying to commit suicide.") + return (FIRELOSS) /obj/item/stock_parts/cell/attackby(obj/item/W, mob/user, params) - ..() if(istype(W, /obj/item/reagent_containers/syringe)) var/obj/item/reagent_containers/syringe/S = W @@ -45,34 +100,29 @@ if(S.reagents.has_reagent("plasma", 5) || S.reagents.has_reagent("plasma_dust", 5)) - rigged = 1 + rigged = TRUE log_admin("LOG: [key_name(user)] injected a power cell with plasma, rigging it to explode.") message_admins("LOG: [key_name_admin(user)] injected a power cell with plasma, rigging it to explode.") S.reagents.clear_reagents() + else + return ..() /obj/item/stock_parts/cell/proc/explode() - var/turf/T = get_turf(src.loc) -/* - * 1000-cell explosion(T, -1, 0, 1, 1) - * 2500-cell explosion(T, -1, 0, 1, 1) - * 10000-cell explosion(T, -1, 1, 3, 3) - * 15000-cell explosion(T, -1, 2, 4, 4) - * */ - if(charge==0) + var/turf/T = get_turf(loc) + if(charge == 0) return var/devastation_range = -1 //round(charge/11000) - var/heavy_impact_range = round(sqrt(charge)/60) - var/light_impact_range = round(sqrt(charge)/30) + var/heavy_impact_range = round(sqrt(charge) / 60) + var/light_impact_range = round(sqrt(charge) / 30) var/flash_range = light_impact_range - if(light_impact_range==0) - rigged = 0 + if(light_impact_range == 0) + rigged = FALSE corrupt() return //explosion(T, 0, 1, 2, 2) - log_admin("LOG: Rigged power cell explosion, last touched by [fingerprintslast]") message_admins("LOG: Rigged power cell explosion, last touched by [fingerprintslast]") @@ -81,70 +131,242 @@ /obj/item/stock_parts/cell/proc/corrupt() charge /= 2 - maxcharge /= 2 + maxcharge = max(maxcharge / 2, chargerate) if(prob(10)) - rigged = 1 //broken batterys are dangerous + rigged = TRUE //broken batterys are dangerous /obj/item/stock_parts/cell/emp_act(severity) charge -= 1000 / severity if(charge < 0) charge = 0 - if(reliability != 100 && prob(50/severity)) - reliability -= 10 / severity ..() /obj/item/stock_parts/cell/ex_act(severity) - switch(severity) - if(1.0) + if(EXPLODE_DEVASTATE) qdel(src) - return - if(2.0) + if(EXPLODE_HEAVY) if(prob(50)) qdel(src) return if(prob(50)) corrupt() - if(3.0) + if(EXPLODE_LIGHT) if(prob(25)) qdel(src) return if(prob(25)) corrupt() - return /obj/item/stock_parts/cell/blob_act() - ex_act(1) + ex_act(EXPLODE_DEVASTATE) /obj/item/stock_parts/cell/proc/get_electrocute_damage() switch(charge) -/* if(9000 to INFINITY) - return min(rand(90,150),rand(90,150)) - if(2500 to 9000-1) - return min(rand(70,145),rand(70,145)) - if(1750 to 2500-1) - return min(rand(35,110),rand(35,110)) - if(1500 to 1750-1) - return min(rand(30,100),rand(30,100)) - if(750 to 1500-1) - return min(rand(25,90),rand(25,90)) - if(250 to 750-1) - return min(rand(20,80),rand(20,80)) - if(100 to 250-1) - return min(rand(20,65),rand(20,65))*/ if(5000000 to INFINITY) - return min(rand(200,300),rand(200,300)) - if(4000000 to 5000000-1) - return min(rand(80,180),rand(80,180)) - if(1000000 to 4000000-1) - return min(rand(50,160),rand(50,160)) - if(200000 to 1000000-1) - return min(rand(25,80),rand(25,80)) - if(100000 to 200000-1)//Ave powernet - return min(rand(20,60),rand(20,60)) - if(50000 to 100000-1) - return min(rand(15,40),rand(15,40)) - if(1000 to 50000-1) - return min(rand(10,20),rand(10,20)) + return min(rand(200, 300),rand(200, 300)) + if(4000000 to 5000000 - 1) + return min(rand(80, 180),rand(80, 180)) + if(1000000 to 4000000 - 1) + return min(rand(50, 160),rand(50, 160)) + if(200000 to 1000000 - 1) + return min(rand(25, 80),rand(25, 80)) + if(100000 to 200000 - 1)//Ave powernet + return min(rand(20, 60),rand(20, 60)) + if(50000 to 100000 - 1) + return min(rand(15, 40),rand(15, 40)) + if(1000 to 50000 - 1) + return min(rand(10, 20),rand(10, 20)) else return 0 + +// Cell variants +/obj/item/stock_parts/cell/empty/New() + ..() + charge = 0 + +/obj/item/stock_parts/cell/crap + name = "\improper Nanotrasen brand rechargeable AA battery" + desc = "You can't top the plasma top." //TOTALLY TRADEMARK INFRINGEMENT + maxcharge = 500 + materials = list(MAT_GLASS = 40) + rating = 2 + +/obj/item/stock_parts/cell/crap/empty/New() + ..() + charge = 0 + update_icon() + +/obj/item/stock_parts/cell/upgraded + name = "upgraded power cell" + desc = "A power cell with a slightly higher capacity than normal!" + maxcharge = 2500 + materials = list(MAT_GLASS = 50) + rating = 2 + chargerate = 1000 + +/obj/item/stock_parts/cell/upgraded/plus + name = "upgraded power cell+" + desc = "A power cell with an even higher capacity than the base model!" + maxcharge = 5000 + +/obj/item/stock_parts/cell/secborg + name = "security borg rechargeable D battery" + origin_tech = null + maxcharge = 600 //600 max charge / 100 charge per shot = six shots + materials = list(MAT_GLASS = 40) + rating = 2.5 + +/obj/item/stock_parts/cell/secborg/empty/New() + ..() + charge = 0 + update_icon() + +/obj/item/stock_parts/cell/pulse //200 pulse shots + name = "pulse rifle power cell" + maxcharge = 40000 + rating = 3 + chargerate = 1500 + +/obj/item/stock_parts/cell/pulse/carbine //25 pulse shots + name = "pulse carbine power cell" + maxcharge = 5000 + +/obj/item/stock_parts/cell/pulse/pistol //10 pulse shots + name = "pulse pistol power cell" + maxcharge = 2000 + +/obj/item/stock_parts/cell/high + name = "high-capacity power cell" + origin_tech = "powerstorage=2" + icon_state = "hcell" + maxcharge = 10000 + materials = list(MAT_GLASS = 60) + rating = 3 + chargerate = 1500 + +/obj/item/stock_parts/cell/high/plus + name = "high-capacity power cell+" + desc = "Where did these come from?" + icon_state = "h+cell" + maxcharge = 15000 + chargerate = 2250 + +/obj/item/stock_parts/cell/high/empty/New() + ..() + charge = 0 + update_icon() + +/obj/item/stock_parts/cell/super + name = "super-capacity power cell" + origin_tech = "powerstorage=3;materials=3" + icon_state = "scell" + maxcharge = 20000 + materials = list(MAT_GLASS = 300) + rating = 4 + chargerate = 2000 + +/obj/item/stock_parts/cell/super/empty/New() + ..() + charge = 0 + update_icon() + +/obj/item/stock_parts/cell/hyper + name = "hyper-capacity power cell" + origin_tech = "powerstorage=4;engineering=4;materials=4" + icon_state = "hpcell" + maxcharge = 30000 + materials = list(MAT_GLASS = 400) + rating = 5 + chargerate = 3000 + +/obj/item/stock_parts/cell/hyper/empty/New() + ..() + charge = 0 + update_icon() + +/obj/item/stock_parts/cell/bluespace + name = "bluespace power cell" + desc = "A rechargeable transdimensional power cell." + origin_tech = "powerstorage=5;bluespace=4;materials=4;engineering=4" + icon_state = "bscell" + maxcharge = 40000 + materials = list(MAT_GLASS = 600) + rating = 6 + chargerate = 4000 + +/obj/item/stock_parts/cell/bluespace/empty/New() + ..() + charge = 0 + update_icon() + +/obj/item/stock_parts/cell/infinite + name = "infinite-capacity power cell!" + icon_state = "icell" + origin_tech = "powerstorage=7" + maxcharge = 30000 + materials = list(MAT_GLASS=1000) + rating = 6 + chargerate = 30000 + +/obj/item/stock_parts/cell/infinite/use() + return 1 + +/obj/item/stock_parts/cell/infinite/abductor + name = "void core" + desc = "An alien power cell that produces energy seemingly out of nowhere." + icon = 'icons/obj/abductor.dmi' + icon_state = "cell" + maxcharge = 50000 + rating = 12 + ratingdesc = FALSE + +/obj/item/stock_parts/cell/infinite/abductor/update_icon() + return + + +/obj/item/stock_parts/cell/potato + name = "potato battery" + desc = "A rechargeable starch based power cell." + icon = 'icons/obj/hydroponics/harvest.dmi' + icon_state = "potato" + origin_tech = "powerstorage=1;biotech=1" + charge = 100 + maxcharge = 300 + materials = list() + rating = 1 + grown_battery = TRUE //it has the overlays for wires + +/obj/item/stock_parts/cell/high/slime + name = "charged slime core" + desc = "A yellow slime core infused with plasma, it crackles with power." + origin_tech = "powerstorage=5;biotech=4" + icon = 'icons/mob/slimes.dmi' + icon_state = "yellow slime extract" + materials = list() + rating = 5 //self-recharge makes these desirable + self_recharge = 1 // Infused slime cores self-recharge, over time + chargerate = 500 + +/obj/item/stock_parts/cell/emproof + name = "\improper EMP-proof cell" + desc = "An EMP-proof cell." + maxcharge = 500 + rating = 3 + +/obj/item/stock_parts/cell/emproof/empty/New() + ..() + charge = 0 + update_icon() + +/obj/item/stock_parts/cell/emproof/emp_act(severity) + return + +/obj/item/stock_parts/cell/emproof/corrupt() + return + +/obj/item/stock_parts/cell/ninja + name = "spider-clan power cell" + desc = "A standard ninja-suit power cell." + maxcharge = 10000 + materials = list(MAT_GLASS = 60) \ No newline at end of file diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index 4def1c3b067..8c9ee3eda0d 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -35,7 +35,7 @@ if(powernet) disconnect_from_network() -/obj/machinery/power/generator/initialize() +/obj/machinery/power/generator/Initialize() ..() connect() diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index ad73a6ff0ad..42f7cbde657 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -85,20 +85,12 @@ var/const/GRAV_NEEDS_WRENCH = 3 // Generator which spawns with the station. // -/obj/machinery/gravity_generator/main/station/initialize() +/obj/machinery/gravity_generator/main/station/Initialize() ..() setup_parts() middle.overlays += "activated" update_list() -// -// Generator an admin can spawn -// - -/obj/machinery/gravity_generator/main/station/admin/New() - ..() - initialize() - // // Main Generator with the main code // diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 3eac3486791..df12267015f 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -726,7 +726,7 @@ update() /obj/item/light/suicide_act(mob/living/carbon/human/user) - user.visible_message("[user] touches \the [src], burning their hands off!", "You touch \the [src], burning your hands off!") + user.visible_message("[user] touches [src], burning [user.p_their()] hands off!", "You touch [src], burning your hands off!") for(var/oname in list("l_hand", "r_hand")) var/obj/item/organ/external/limb = user.get_organ(oname) diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 72e30b9d29a..2892d0245b2 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -112,7 +112,7 @@ var/temperature = 0 //The current temperature var/overheating = 0 //if this gets high enough the generator explodes -/obj/machinery/power/port_gen/pacman/initialize() +/obj/machinery/power/port_gen/pacman/Initialize() ..() if(anchored) connect_to_network() diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index fd5946b7dc4..15b47a47635 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -232,26 +232,6 @@ . += C return . -/hook/startup/proc/buildPowernets() - return makepowernets() - -// rebuild all power networks from scratch - only called at world creation or by the admin verb -/proc/makepowernets() - for(var/datum/powernet/PN in powernets) - qdel(PN) - powernets.Cut() - - for(var/obj/structure/cable/PC in cable_list) - makepowernet_for(PC) - - return 1 - -/proc/makepowernet_for(var/obj/structure/cable/PC) - if(!PC.powernet) - var/datum/powernet/NewPN = new() - NewPN.add_cable(PC) - propagate_network(PC,PC.powernet) - //remove the old powernet and replace it with a new one throughout the network. /proc/propagate_network(var/obj/O, var/datum/powernet/PN) //log_world("propagating new network") diff --git a/code/modules/power/powernet.dm b/code/modules/power/powernet.dm index 416de55f6c3..a07d854380d 100644 --- a/code/modules/power/powernet.dm +++ b/code/modules/power/powernet.dm @@ -16,7 +16,7 @@ /datum/powernet/New() - powernets += src + SSmachines.powernets += src ..() /datum/powernet/Destroy() @@ -28,7 +28,7 @@ nodes -= M M.powernet = null - powernets -= src + SSmachines.powernets -= src return ..() //Returns the amount of excess power (before refunding to SMESs) from last tick. diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 58cecbc8ecc..70cd75bf85d 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -76,12 +76,13 @@ return rotate() -/obj/machinery/power/emitter/initialize() +/obj/machinery/power/emitter/Initialize() ..() if(state == 2 && anchored) connect_to_network() if(frequency) set_frequency(frequency) + /obj/machinery/power/emitter/multitool_menu(var/mob/user,var/obj/item/multitool/P) return {"
    diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index c55a206ebfa..a2025376e9d 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -300,7 +300,7 @@ track = 2 // Auto tracking mode autostart = 1 // Automatically start -/obj/machinery/power/solar_control/initialize() +/obj/machinery/power/solar_control/Initialize() ..() if(!powernet) return diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index be17b3f65db..43d418aadf7 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -244,7 +244,7 @@ ui_interact(user) /obj/machinery/power/supermatter_shard/attack_hand(mob/user as mob) - user.visible_message("\The [user] reaches out and touches \the [src], inducing a resonance... \his body starts to glow and bursts into flames before flashing into ash.",\ + user.visible_message("\The [user] reaches out and touches \the [src], inducing a resonance... [user.p_their(TRUE)] body starts to glow and bursts into flames before flashing into ash.",\ "You reach out and touch \the [src]. Everything starts burning and all you can hear is ringing. Your last thought is \"That was not a wise decision.\"",\ "You hear an uneartly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat.") @@ -309,7 +309,7 @@ /obj/machinery/power/supermatter_shard/Bumped(atom/AM as mob|obj) if(istype(AM, /mob/living)) - AM.visible_message("\The [AM] slams into \the [src] inducing a resonance... \his body starts to glow and catch flame before flashing into ash.",\ + AM.visible_message("\The [AM] slams into \the [src] inducing a resonance... [AM.p_their(TRUE)] body starts to glow and catch flame before flashing into ash.",\ "You slam into \the [src] as your ears are filled with unearthly ringing. Your last thought is \"Oh, fuck.\"",\ "You hear an unearthly noise as a wave of heat washes over you.") else if(isobj(AM) && !istype(AM, /obj/effect)) diff --git a/code/modules/power/treadmill.dm b/code/modules/power/treadmill.dm index 5f8f8c1b8e4..762d442a2a9 100644 --- a/code/modules/power/treadmill.dm +++ b/code/modules/power/treadmill.dm @@ -18,7 +18,7 @@ var/list/mobs_running[0] var/id = null // for linking to monitor -/obj/machinery/power/treadmill/initialize() +/obj/machinery/power/treadmill/Initialize() ..() if(anchored) connect_to_network() @@ -137,7 +137,7 @@ var/frame = 0 // on 0, show labels, on 1 show numbers var/redeem_immediately = 0 // redeem immediately for holding cell -/obj/machinery/treadmill_monitor/initialize() +/obj/machinery/treadmill_monitor/Initialize() ..() if(id) for(var/obj/machinery/power/treadmill/T in machines) diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm index a385f51863e..641682490d4 100644 --- a/code/modules/power/turbine.dm +++ b/code/modules/power/turbine.dm @@ -82,7 +82,7 @@ inturf = get_step(src, dir) -/obj/machinery/power/compressor/initialize() +/obj/machinery/power/compressor/Initialize() ..() locate_machinery() if(!turbine) @@ -202,7 +202,7 @@ outturf = get_step(src, dir) -/obj/machinery/power/turbine/initialize() +/obj/machinery/power/turbine/Initialize() ..() locate_machinery() if(!compressor) @@ -341,7 +341,7 @@ -/obj/machinery/computer/turbine_computer/initialize() +/obj/machinery/computer/turbine_computer/Initialize() ..() spawn(10) locate_machinery() diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index 63f533d91ec..130fda822fd 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -29,7 +29,7 @@ /obj/item/ammo_casing/update_icon() ..() icon_state = "[initial(icon_state)][BB ? "-live" : ""]" - desc = "[initial(desc)][BB ? "" : " This one is spent"]" + desc = "[initial(desc)][BB ? "" : " This one is spent."]" /obj/item/ammo_casing/proc/newshot(params) //For energy weapons, shotgun shells and wands (!). if(!BB) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index b54d5bff21f..51bf515ca1e 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -347,7 +347,7 @@ obj/item/gun/proc/newshot() return if(user == target) - target.visible_message("[user] sticks [src] in their mouth, ready to pull the trigger...", \ + target.visible_message("[user] sticks [src] in [user.p_their()] mouth, ready to pull the trigger...", \ "You stick [src] in your mouth, ready to pull the trigger...") else target.visible_message("[user] points [src] at [target]'s head, ready to pull the trigger...", \ diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index fd6c14c4e6b..795b5942845 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -146,10 +146,10 @@ /obj/item/gun/energy/suicide_act(mob/user) if(can_shoot()) - user.visible_message("[user] is putting the barrel of the [name] in \his mouth. It looks like \he's trying to commit suicide.") + user.visible_message("[user] is putting the barrel of the [name] in [user.p_their()] mouth. It looks like [user.p_theyre()] trying to commit suicide.") sleep(25) if(user.l_hand == src || user.r_hand == src) - user.visible_message("[user] melts \his face off with the [name]!") + user.visible_message("[user] melts [user.p_their()] face off with the [name]!") playsound(loc, fire_sound, 50, 1, -1) var/obj/item/ammo_casing/energy/shot = ammo_type[select] power_supply.use(shot.e_cost) @@ -159,7 +159,7 @@ user.visible_message("[user] panics and starts choking to death!") return(OXYLOSS) else - user.visible_message("[user] is pretending to blow \his brains out with the [name]! It looks like \he's trying to commit suicide!") + user.visible_message("[user] is pretending to blow [user.p_their()] brains out with the [name]! It looks like [user.p_theyre()] trying to commit suicide!") playsound(loc, 'sound/weapons/empty.ogg', 50, 1, -1) return (OXYLOSS) diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 8965432aac0..7559fc1a591 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -128,7 +128,7 @@ /obj/item/gun/energy/kinetic_accelerator/suicide_act(mob/user) if(!suppressed) playsound(loc, 'sound/weapons/kenetic_reload.ogg', 60, 1) - user.visible_message("[user] cocks the [name] and pretends to blow \his brains out! It looks like \he's trying to commit suicide!") + user.visible_message("[user] cocks the [name] and pretends to blow [user.p_their()] brains out! It looks like [user.p_theyre()] trying to commit suicide!") shoot_live_shot() return (OXYLOSS) @@ -342,9 +342,9 @@ user << browse("Temperature Gun Configuration
    [dat]", "window=tempgun;size=510x120") onclose(user, "tempgun") -/obj/item/gun/energy/temperature/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/card/emag) && !emagged) - emagged = 1 +/obj/item/gun/energy/temperature/emag_act(mob/user) + if(!emagged) + emagged = TRUE to_chat(user, "You double the gun's temperature cap! Targets hit by searing beams will burst into flames!") desc = "A gun that changes the body temperature of its targets. Its temperature cap has been hacked." diff --git a/code/modules/projectiles/guns/magic.dm b/code/modules/projectiles/guns/magic.dm index a1840663350..94f397b45bf 100644 --- a/code/modules/projectiles/guns/magic.dm +++ b/code/modules/projectiles/guns/magic.dm @@ -76,6 +76,6 @@ return /obj/item/gun/magic/suicide_act(mob/user) - user.visible_message("[user] is twisting the [name] above \his head, releasing a magical blast! It looks like \he's trying to commit suicide.") + user.visible_message("[user] is twisting the [name] above [user.p_their()] head, releasing a magical blast! It looks like [user.p_theyre()] trying to commit suicide.") playsound(loc, fire_sound, 50, 1, -1) return FIRELOSS diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm index 1a8e5e45946..cae9d11cbb6 100644 --- a/code/modules/projectiles/guns/magic/wand.dm +++ b/code/modules/projectiles/guns/magic/wand.dm @@ -48,9 +48,9 @@ update_icon() /obj/item/gun/magic/wand/proc/zap_self(mob/living/user) - user.visible_message("[user] zaps \himself with [src].") + user.visible_message("[user] zaps [user.p_them()]self with [src].") playsound(user, fire_sound, 50, 1) - user.create_attack_log("[key_name(user)] zapped \himself with a [src]") + user.create_attack_log("[key_name(user)] zapped [user.p_them()]self with a [src]") ///////////////////////////////////// //WAND OF DEATH diff --git a/code/modules/projectiles/guns/misc/blastcannon.dm b/code/modules/projectiles/guns/misc/blastcannon.dm index f6881208a32..89cceab6cd3 100644 --- a/code/modules/projectiles/guns/misc/blastcannon.dm +++ b/code/modules/projectiles/guns/misc/blastcannon.dm @@ -76,7 +76,7 @@ var/heavy = power * 0.2 var/medium = power * 0.5 var/light = power - user.visible_message("[user] opens [bomb] on \his [name] and fires a blast wave at [target]!","You open [bomb] on your [name] and fire a blast wave at [target]!") + user.visible_message("[user] opens [bomb] on [user.p_their()] [name] and fires a blast wave at [target]!","You open [bomb] on your [name] and fire a blast wave at [target]!") playsound(user, "explosion", 100, 1) var/turf/starting = get_turf(user) var/turf/targturf = get_turf(target) diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index 2b8ff6a59f8..0ff5e57e7c5 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -137,17 +137,17 @@ /obj/item/gun/projectile/suicide_act(mob/user) if(chambered && chambered.BB && !chambered.BB.nodamage) - user.visible_message("[user] is putting the barrel of the [name] in \his mouth. It looks like \he's trying to commit suicide.") + user.visible_message("[user] is putting the barrel of the [name] in [user.p_their()] mouth. It looks like [user.p_theyre()] trying to commit suicide.") sleep(25) if(user.l_hand == src || user.r_hand == src) process_fire(user, user, 0, zone_override = "head") - user.visible_message("[user] blows \his brains out with the [name]!") + user.visible_message("[user] blows [user.p_their()] brains out with the [name]!") return(BRUTELOSS) else user.visible_message("[user] panics and starts choking to death!") return(OXYLOSS) else - user.visible_message("[user] is pretending to blow \his brains out with the [name]! It looks like \he's trying to commit suicide!") + user.visible_message("[user] is pretending to blow [user.p_their()] brains out with the [name]! It looks like [user.p_theyre()] trying to commit suicide!") playsound(loc, 'sound/weapons/empty.ogg', 50, 1, -1) return (OXYLOSS) diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index 502c69bed9c..c4c6f76a963 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -244,7 +244,7 @@ if(zone == "head" || zone == "eyes" || zone == "mouth") shoot_self(user, zone) else - user.visible_message("[user.name] cowardly fires [src] at \his [zone]!", "You cowardly fire [src] at your [zone]!", "You hear a gunshot!") + user.visible_message("[user.name] cowardly fires [src] at [user.p_their()] [zone]!", "You cowardly fire [src] at your [zone]!", "You hear a gunshot!") return user.visible_message("*click*") @@ -252,7 +252,7 @@ /obj/item/gun/projectile/revolver/russian/proc/shoot_self(mob/living/carbon/human/user, affecting = "head") user.apply_damage(300, BRUTE, affecting) - user.visible_message("[user.name] fires [src] at \his head!", "You fire [src] at your head!", "You hear a gunshot!") + user.visible_message("[user.name] fires [src] at [user.p_their()] head!", "You fire [src] at your head!", "You hear a gunshot!") /obj/item/gun/projectile/revolver/capgun name = "cap gun" diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index becada9f19e..761fb50179c 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -77,7 +77,7 @@ /obj/item/projectile/beam/lasertag name = "laser tag beam" icon_state = "omnilaser" - hitsound = null + hitsound = 'sound/weapons/tap.ogg' damage = 0 damage_type = STAMINA flag = "laser" diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index 4521dc8d7ba..3fe2277ed3b 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -32,7 +32,7 @@ else G.death() - visible_message("[G] topples backwards as the death bolt impacts them!") + visible_message("[G] topples backwards as the death bolt impacts [G.p_them()]!") /obj/item/projectile/magic/fireball/Range() var/turf/T1 = get_step(src,turn(dir, -45)) diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index 16cedc0244d..2c774b7f3dd 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -8,14 +8,14 @@ /obj/item/projectile/ion/on_hit(var/atom/target, var/blocked = 0) ..() - empulse(target, 1, 1) + empulse(target, 1, 1, 1) return 1 /obj/item/projectile/ion/weak /obj/item/projectile/ion/weak/on_hit(atom/target, blocked = 0) ..() - empulse(target, 0, 0) + empulse(target, 0, 0, 1) return 1 /obj/item/projectile/bullet/gyro @@ -52,7 +52,7 @@ pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE /obj/item/projectile/temp/New(loc, shot_temp) - ..(loc) + ..() if(!isnull(shot_temp)) temperature = shot_temp switch(temperature) @@ -86,7 +86,6 @@ else name = "temperature beam"//failsafe icon_state = "temp_4" - ..() /obj/item/projectile/temp/on_hit(var/atom/target, var/blocked = 0)//These two could likely check temp protection on the mob @@ -138,7 +137,7 @@ if(prob(15)) M.apply_effect((rand(30,80)),IRRADIATE) M.Weaken(5) - M.visible_message("[M] writhes in pain as \his vacuoles boil.", "You writhe in pain as your vacuoles boil!", "You hear the crunching of leaves.") + M.visible_message("[M] writhes in pain as [M.p_their()] vacuoles boil.", "You writhe in pain as your vacuoles boil!", "You hear the crunching of leaves.") if(prob(35)) if(prob(80)) randmutb(M) diff --git a/code/modules/reagents/chemistry/reagents/drugs.dm b/code/modules/reagents/chemistry/reagents/drugs.dm index 6a4ede5fe50..a2bd35ae75a 100644 --- a/code/modules/reagents/chemistry/reagents/drugs.dm +++ b/code/modules/reagents/chemistry/reagents/drugs.dm @@ -208,7 +208,7 @@ M.reagents.add_reagent("jagged_crystals", 5) else if(effect <= 7) M.emote("scream") - M.visible_message("[M] nervously scratches at their skin!") + M.visible_message("[M] nervously scratches at [M.p_their()] skin!") M.Jitter(10) M.adjustBruteLoss(5) M.emote("twitch_s") @@ -315,7 +315,7 @@ var/effect = ..() if(severity == 1) if(effect <= 2) - M.visible_message("[M] can't seem to control their legs!") + M.visible_message("[M] can't seem to control [M.p_their()] legs!") M.AdjustConfused(20) M.Weaken(4) else if(effect <= 4) @@ -356,7 +356,7 @@ head_organ.f_style = "Very Long Beard" H.update_hair() H.update_fhair() - H.visible_message("[H] has a wild look in their eyes!") + H.visible_message("[H] has a wild look in [H.p_their()] eyes!") if(check < 60) M.SetParalysis(0) M.SetStunned(0) @@ -368,7 +368,7 @@ M.AdjustConfused(10) if(check < 8) M.reagents.add_reagent(pick("methamphetamine", "crank", "neurotoxin"), rand(1,5)) - M.visible_message("[M] scratches at something under their skin!") + M.visible_message("[M] scratches at something under [M.p_their()] skin!") M.adjustBruteLoss(5) else if(check < 16) M.AdjustHallucinate(30) @@ -427,7 +427,7 @@ M.reagents.add_reagent("jagged_crystals", 5) else if(effect <= 7) M.emote("scream") - M.visible_message("[M] tears at their own skin!") + M.visible_message("[M] tears at [M.p_their()] own skin!") M.adjustBruteLoss(5) M.reagents.add_reagent("jagged_crystals", 5) M.emote("twitch") @@ -541,7 +541,7 @@ var/effect = ..() if(severity == 1) if(effect <= 2) - M.visible_message("[M] can't seem to control their legs!") + M.visible_message("[M] can't seem to control [M.p_their()] legs!") M.AdjustConfused(33) M.Weaken(2) else if(effect <= 4) diff --git a/code/modules/reagents/chemistry/reagents/medicine.dm b/code/modules/reagents/chemistry/reagents/medicine.dm index ada22d5b139..a979d350c2a 100644 --- a/code/modules/reagents/chemistry/reagents/medicine.dm +++ b/code/modules/reagents/chemistry/reagents/medicine.dm @@ -73,7 +73,7 @@ M.visible_message("[M] suddenly and violently vomits!") M.fakevomit(no_text = 1) else if(effect <= 5) - M.visible_message("[M] staggers and drools, their eyes bloodshot!") + M.visible_message("[M] staggers and drools, [M.p_their()] eyes bloodshot!") M.Dizzy(8) M.Weaken(4) if(effect <= 15) @@ -277,7 +277,7 @@ if(severity == 1) //lesser M.stuttering += 1 if(effect <= 1) - M.visible_message("[M] suddenly cluches their gut!") + M.visible_message("[M] suddenly cluches [M.p_their()] gut!") M.emote("scream") M.Stun(4) M.Weaken(4) @@ -293,7 +293,7 @@ M.Jitter(30) else if(severity == 2) // greater if(effect <= 2) - M.visible_message("[M] suddenly cluches their gut!") + M.visible_message("[M] suddenly cluches [M.p_their()] gut!") M.emote("scream") M.Stun(7) M.Weaken(7) @@ -446,7 +446,7 @@ M.visible_message("[M] suddenly and violently vomits!") M.fakevomit(no_text = 1) else if(effect <= 5) - M.visible_message("[M.name] staggers and drools, their eyes bloodshot!") + M.visible_message("[M.name] staggers and drools, [M.p_their()] eyes bloodshot!") M.Dizzy(2) M.Weaken(3) if(effect <= 15) @@ -597,7 +597,7 @@ M.visible_message("[M] suddenly and violently vomits!") M.fakevomit(no_text = 1) else if(effect <= 5) - M.visible_message("[M] staggers and drools, their eyes bloodshot!") + M.visible_message("[M] staggers and drools, [M.p_their()] eyes bloodshot!") M.Dizzy(2) M.Weaken(3) if(effect <= 15) diff --git a/code/modules/reagents/chemistry/reagents/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm index 8cad5400c02..0dbd2224e92 100644 --- a/code/modules/reagents/chemistry/reagents/toxins.dm +++ b/code/modules/reagents/chemistry/reagents/toxins.dm @@ -557,7 +557,7 @@ M.adjustBruteLoss(5) M.Weaken(5) M.AdjustJitter(6) - M.visible_message("[M] falls to the floor, scratching themselves violently!") + M.visible_message("[M] falls to the floor, scratching [M.p_them()]self violently!") M.emote("scream") ..() @@ -1016,7 +1016,7 @@ M.Drowsy(10) if(11) M.Paralyse(10) - M.visible_message("[M] seizes up and falls limp, their eyes dead and lifeless...") //so you can't trigger deathgasp emote on people. Edge case, but necessary. + M.visible_message("[M] seizes up and falls limp, [M.p_their()] eyes dead and lifeless...") //so you can't trigger deathgasp emote on people. Edge case, but necessary. if(12 to 60) M.Paralyse(10) if(61 to INFINITY) diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index aa5e16adc04..4df7a525b88 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -334,7 +334,7 @@ /datum/chemical_reaction/slimeoverload/on_reaction(datum/reagents/holder, created_volume) feedback_add_details("slime_cores_used","[type]") - empulse(get_turf(holder.my_atom), 3, 7) + empulse(get_turf(holder.my_atom), 3, 7, 1) /datum/chemical_reaction/slimecell diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index e405dbe169c..02d71db8719 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -49,14 +49,14 @@ user.newtonian_move(get_dir(A, user)) if(reagents.has_reagent("sacid")) - msg_admin_attack("[key_name_admin(user)] fired sulphuric acid from \a [src].") - log_game("[key_name(user)] fired sulphuric acid from \a [src].") + msg_admin_attack("[key_name_admin(user)] fired sulphuric acid from \a [src] at [COORD(src)].") + log_game("[key_name(user)] fired sulphuric acid from \a [src] at [COORD(src)].") if(reagents.has_reagent("facid")) - msg_admin_attack("[key_name_admin(user)] fired fluorosulfuric acid from \a [src].") - log_game("[key_name(user)] fired fluorosulfuric Acid from \a [src].") + msg_admin_attack("[key_name_admin(user)] fired fluorosulfuric acid from \a [src] at [COORD(src)].") + log_game("[key_name(user)] fired fluorosulfuric Acid from \a [src] at [COORD(src)].") if(reagents.has_reagent("lube")) - msg_admin_attack("[key_name_admin(user)] fired space lube from \a [src].") - log_game("[key_name(user)] fired space lube from \a [src].") + msg_admin_attack("[key_name_admin(user)] fired space lube from \a [src] at [COORD(src)].") + log_game("[key_name(user)] fired space lube from \a [src] at [COORD(src)].") return diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index a80c4142d87..322f392950d 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -9,6 +9,7 @@ var/tank_volume = 1000 //In units, how much the dispenser can hold var/reagent_id = "water" //The ID of the reagent that the dispenser uses + var/lastrigger = "" // The last person to rig this fuel tank - Stored with the object. Only the last person matter for investigation /obj/structure/reagent_dispensers/attackby(obj/item/W, mob/user, params) return @@ -77,11 +78,16 @@ ..() if(!QDELETED(src)) //wasn't deleted by the projectile's effects. if(!P.nodamage && ((P.damage_type == BURN) || (P.damage_type == BRUTE))) - message_admins("[key_name_admin(P.firer)] triggered a fueltank explosion.") - log_game("[key_name(P.firer)] triggered a fueltank explosion.") + message_admins("[key_name_admin(P.firer)] triggered a fueltank explosion with [P.name] at [COORD(loc)] ") + log_game("[key_name(P.firer)] triggered a fueltank explosion with [P.name] at [COORD(loc)]") + investigate_log("[key_name(P.firer)] triggered a fueltank explosion with [P.name] at [COORD(loc)]", INVESTIGATE_BOMB) boom() -/obj/structure/reagent_dispensers/fueltank/boom() +/obj/structure/reagent_dispensers/fueltank/boom(var/rigtrigger = FALSE) // Prevent case where someone who rigged the tank is blamed for the explosion when the rig isn't what triggered the explosion + if(rigtrigger == TRUE) // If the explosion is triggered by an assembly holder + message_admins("A fueltank, last rigged by [lastrigger], exploded at [COORD(loc)]") // Then admin is informed of the last person who rigged the fuel tank + log_game("A fueltank, last rigged by [lastrigger], exploded at [COORD(loc)]") + investigate_log("A fueltank, last rigged by [lastrigger], exploded at [COORD(loc)]", INVESTIGATE_BOMB) explosion(loc, 0, 1, 5, 7, 10, flame_range = 5) qdel(src) @@ -111,6 +117,7 @@ usr.visible_message("[usr] detaches [rig] from [src].", "You detach [rig] from [src].") rig.forceMove(get_turf(usr)) rig = null + lastrigger = null overlays.Cut() /obj/structure/reagent_dispensers/fueltank/attackby(obj/item/I, mob/user, params) @@ -124,9 +131,11 @@ var/obj/item/assembly_holder/H = I if(istype(H.a_left, /obj/item/assembly/igniter) || istype(H.a_right, /obj/item/assembly/igniter)) - msg_admin_attack("[key_name_admin(user)] rigged a fueltank for explosion (JMP)") - log_game("[key_name(user)] rigged fueltank a fueltank for explosion at [loc.x], [loc.y], [loc.z]") + msg_admin_attack("[key_name_admin(user)] rigged [src.name] with [I.name] for explosion (JMP)") + log_game("[key_name(user)] rigged [src.name] with [I.name] for explosion at [COORD(loc)]") + investigate_log("[key_name(user)] rigged [src.name] with [I.name] for explosion at [COORD(loc)]", INVESTIGATE_BOMB) + lastrigger = "[key_name(user)]" rig = H user.drop_item() H.forceMove(src) @@ -146,13 +155,14 @@ to_chat(user, "Your [W] is already full!") return reagents.trans_to(W, W.max_fuel) - user.visible_message("[user] refills \his [W].", "You refill [W].") + user.visible_message("[user] refills [user.p_their()] [W].", "You refill [W].") playsound(src, 'sound/effects/refill.ogg', 50, 1) W.update_icon() else - user.visible_message("[user] catastrophically fails at refilling \his [W]!", "That was stupid of you.") - message_admins("[key_name_admin(user)] triggered a fueltank explosion.") - log_game("[key_name(user)] triggered a fueltank explosion.") + user.visible_message("[user] catastrophically fails at refilling [user.p_their()] [W]!", "That was stupid of you.") + message_admins("[key_name_admin(user)] triggered a fueltank explosion at [COORD(loc)]") + log_game("[key_name(user)] triggered a fueltank explosion at [COORD(loc)]") + investigate_log("[key_name(user)] triggered a fueltank explosion at [COORD(loc)]", INVESTIGATE_BOMB) boom() else ..() diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm index ba193744467..3658846a696 100644 --- a/code/modules/recycling/disposal-construction.dm +++ b/code/modules/recycling/disposal-construction.dm @@ -250,8 +250,6 @@ var/obj/structure/disposaloutlet/P = new /obj/structure/disposaloutlet(src.loc) src.transfer_fingerprints_to(P) P.dir = dir - var/obj/structure/disposalpipe/trunk/Trunk = CP - Trunk.linked = P else if(ptype==8) // Disposal outlet diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 56bb7478327..aaf35238d80 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -36,22 +36,22 @@ update() /obj/machinery/disposal/proc/trunk_check() - trunk = locate() in src.loc - if(!trunk) + var/obj/structure/disposalpipe/trunk/T = locate() in loc + if(!T) mode = 0 flush = 0 else mode = initial(mode) flush = initial(flush) - trunk.linked = src // link the pipe trunk to self + T.nicely_link_to_other_stuff(src) /obj/machinery/disposal/Destroy() eject() if(trunk) - trunk.linked = null + trunk.remove_trunk_links() return ..() -/obj/machinery/disposal/initialize() +/obj/machinery/disposal/Initialize() // this will get a copy of the air turf and take a SEND PRESSURE amount of air from it ..() var/atom/L = loc @@ -1149,24 +1149,39 @@ if(D.trunk == src) D.go_out() D.trunk = null - - linked = null + remove_trunk_links() return ..() /obj/structure/disposalpipe/trunk/proc/getlinked() - linked = null var/obj/machinery/disposal/D = locate() in src.loc if(D) - linked = D - if(!D.trunk) - D.trunk = src - + nicely_link_to_other_stuff(D) + return var/obj/structure/disposaloutlet/O = locate() in src.loc if(O) - linked = O + nicely_link_to_other_stuff(O) - update() - return +/obj/structure/disposalpipe/trunk/proc/remove_trunk_links() //disposals is well-coded + if(!linked) + return + else if(istype(linked, /obj/machinery/disposal)) //jk lol + var/obj/machinery/disposal/D = linked + D.trunk = null + else if(istype(linked, /obj/structure/disposaloutlet)) //God fucking damn it + var/obj/structure/disposaloutlet/D = linked + D.linkedtrunk = null + linked = null + +/obj/structure/disposalpipe/trunk/proc/nicely_link_to_other_stuff(obj/O) + remove_trunk_links() //Breaks the connections between this trunk and the linked machinery so we don't get sent to nullspace or some shit like that + if(istype(O, /obj/machinery/disposal)) + var/obj/machinery/disposal/D = O + linked = D + D.trunk = src + else if(istype(O, /obj/structure/disposaloutlet)) + var/obj/structure/disposaloutlet/D = O + linked = D + D.linkedtrunk = src // Override attackby so we disallow trunkremoval when somethings ontop /obj/structure/disposalpipe/trunk/attackby(var/obj/item/I, var/mob/user, params) @@ -1271,77 +1286,72 @@ var/obj/structure/disposalpipe/trunk/linkedtrunk var/mode = 0 - New() - ..() - - spawn(1) - target = get_ranged_target_turf(src, dir, 10) - - - linkedtrunk = locate() in src.loc - if(linkedtrunk) - linkedtrunk.linked = src +/obj/structure/disposaloutlet/New() + ..() + spawn(1) + target = get_ranged_target_turf(src, dir, 10) + var/obj/structure/disposalpipe/trunk/T = locate() in loc + if(T) + T.nicely_link_to_other_stuff(src) // expel the contents of the holder object, then delete it // called when the holder exits the outlet - proc/expel(var/obj/structure/disposalholder/H, animation = 1) - - if(animation) - flick("outlet-open", src) - playsound(src, 'sound/machines/warning-buzzer.ogg', 50, 0, 0) - sleep(20) //wait until correct animation frame - playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) - - if(H) - for(var/atom/movable/AM in H) - AM.forceMove(loc) - AM.pipe_eject(dir) - if(!istype(AM,/mob/living/silicon/robot/drone)) //Drones keep smashing windows from being fired out of chutes. Bad for the station. ~Z - spawn(5) - if(AM) - AM.throw_at(target, 3, 1) - H.vent_gas(src.loc) - qdel(H) +/obj/structure/disposaloutlet/proc/expel(var/obj/structure/disposalholder/H, animation = 1) + if(animation) + flick("outlet-open", src) + playsound(src, 'sound/machines/warning-buzzer.ogg', 50, 0, 0) + sleep(20) //wait until correct animation frame + playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) + if(H) + for(var/atom/movable/AM in H) + AM.forceMove(loc) + AM.pipe_eject(dir) + if(!istype(AM,/mob/living/silicon/robot/drone)) //Drones keep smashing windows from being fired out of chutes. Bad for the station. ~Z + spawn(5) + if(AM) + AM.throw_at(target, 3, 1) + H.vent_gas(src.loc) + qdel(H) - attackby(var/obj/item/I, var/mob/user, params) - if(!I || !user) +/obj/structure/disposaloutlet/attackby(var/obj/item/I, var/mob/user, params) + if(!I || !user) + return + src.add_fingerprint(user) + if(istype(I, /obj/item/screwdriver)) + if(mode==0) + mode=1 + playsound(src.loc, I.usesound, 50, 1) + to_chat(user, "You remove the screws around the power connection.") + return + else if(mode==1) + mode=0 + playsound(src.loc, I.usesound, 50, 1) + to_chat(user, "You attach the screws around the power connection.") + return + else if(istype(I,/obj/item/weldingtool) && mode==1) + var/obj/item/weldingtool/W = I + if(W.remove_fuel(0,user)) + playsound(src.loc, W.usesound, 100, 1) + to_chat(user, "You start slicing the floorweld off the disposal outlet.") + if(do_after(user, 20 * W.toolspeed, target = src)) + if(!src || !W.isOn()) return + to_chat(user, "You sliced the floorweld off the disposal outlet.") + var/obj/structure/disposalconstruct/C = new (src.loc) + src.transfer_fingerprints_to(C) + C.ptype = 7 // 7 = outlet + C.update() + C.anchored = 1 + C.density = 1 + qdel(src) + return + else + to_chat(user, "You need more welding fuel to complete this task.") return - src.add_fingerprint(user) - if(istype(I, /obj/item/screwdriver)) - if(mode==0) - mode=1 - playsound(src.loc, I.usesound, 50, 1) - to_chat(user, "You remove the screws around the power connection.") - return - else if(mode==1) - mode=0 - playsound(src.loc, I.usesound, 50, 1) - to_chat(user, "You attach the screws around the power connection.") - return - else if(istype(I,/obj/item/weldingtool) && mode==1) - var/obj/item/weldingtool/W = I - if(W.remove_fuel(0,user)) - playsound(src.loc, W.usesound, 100, 1) - to_chat(user, "You start slicing the floorweld off the disposal outlet.") - if(do_after(user, 20 * W.toolspeed, target = src)) - if(!src || !W.isOn()) return - to_chat(user, "You sliced the floorweld off the disposal outlet.") - var/obj/structure/disposalconstruct/C = new (src.loc) - src.transfer_fingerprints_to(C) - C.ptype = 7 // 7 = outlet - C.update() - C.anchored = 1 - C.density = 1 - qdel(src) - return - else - to_chat(user, "You need more welding fuel to complete this task.") - return /obj/structure/disposaloutlet/Destroy() if(linkedtrunk) - linkedtrunk.linked = null + linkedtrunk.remove_trunk_links() return ..() // called when movable is expelled from a disposal pipe or outlet diff --git a/code/modules/research/designs/power_designs.dm b/code/modules/research/designs/power_designs.dm index 0b41a26256c..ec26ae39644 100644 --- a/code/modules/research/designs/power_designs.dm +++ b/code/modules/research/designs/power_designs.dm @@ -4,7 +4,7 @@ /datum/design/basic_cell name = "Basic Power Cell" - desc = "A basic power cell that holds 1000 units of energy" + desc = "A basic power cell that holds 1 kW of power." id = "basic_cell" req_tech = list("powerstorage" = 1) build_type = PROTOLATHE | AUTOLATHE | MECHFAB | PODFAB @@ -15,7 +15,7 @@ /datum/design/high_cell name = "High-Capacity Power Cell" - desc = "A power cell that holds 10000 units of energy" + desc = "A power cell that holds 10 kW of power." id = "high_cell" req_tech = list("powerstorage" = 2) build_type = PROTOLATHE | AUTOLATHE | MECHFAB | PODFAB @@ -26,7 +26,7 @@ /datum/design/hyper_cell name = "Hyper-Capacity Power Cell" - desc = "A power cell that holds 30000 units of energy" + desc = "A power cell that holds 30 kW of power." id = "hyper_cell" req_tech = list("powerstorage" = 5, "materials" = 5, "engineering" = 5) build_type = PROTOLATHE | MECHFAB | PODFAB @@ -37,7 +37,7 @@ /datum/design/super_cell name = "Super-Capacity Power Cell" - desc = "A power cell that holds 20000 units of energy" + desc = "A power cell that holds 20 kW of power." id = "super_cell" req_tech = list("powerstorage" = 3, "materials" = 3) build_type = PROTOLATHE | MECHFAB | PODFAB @@ -48,7 +48,7 @@ /datum/design/bluespace_cell name = "Bluespace Power Cell" - desc = "A power cell that holds 40000 units of energy." + desc = "A power cell that holds 40 kW of power." id = "bluespace_cell" req_tech = list("powerstorage" = 6, "materials" = 5, "engineering" = 5, "bluespace" = 5) build_type = PROTOLATHE | MECHFAB diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 50c8e1a4cf8..8d18df1ee07 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -149,10 +149,10 @@ won't update every console in existence) but it's more of a hassle to do. Also, matching_designs = list() if(!id) for(var/obj/machinery/r_n_d/server/centcom/S in world) - S.initialize() + S.initialize_serv() break -/obj/machinery/computer/rdconsole/initialize() +/obj/machinery/computer/rdconsole/Initialize() ..() SyncRDevices() diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index 014b2f80e6b..a2f9f185853 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -23,7 +23,7 @@ component_parts += new /obj/item/stack/cable_coil(null,1) component_parts += new /obj/item/stack/cable_coil(null,1) RefreshParts() - initialize(); //Agouri + initialize_serv(); //Agouri // fuck you agouri /obj/machinery/r_n_d/server/upgraded/New() ..() @@ -44,8 +44,7 @@ tot_rating += SP.rating heat_gen /= max(1, tot_rating) -/obj/machinery/r_n_d/server/initialize() - ..() +/obj/machinery/r_n_d/server/proc/initialize_serv() if(!files) files = new /datum/research(src) var/list/temp_list if(!id_with_upload.len) @@ -162,7 +161,7 @@ name = "CentComm. Central R&D Database" server_id = -1 -/obj/machinery/r_n_d/server/centcom/initialize() +/obj/machinery/r_n_d/server/centcom/Initialize() ..() var/list/no_id_servers = list() var/list/server_ids = list() diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm index ee884bc20a4..f7976645bc4 100644 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ b/code/modules/research/xenobiology/xenobio_camera.dm @@ -190,7 +190,7 @@ if(cameranet.checkTurfVis(remote_eye.loc)) for(var/mob/living/carbon/human/M in remote_eye.loc) if(issmall(M) && M.stat) - M.visible_message("[M] vanishes as they are reclaimed for recycling!") + M.visible_message("[M] vanishes as [M.p_theyre()] reclaimed for recycling!") X.monkeys = round(X.monkeys + 0.2,0.1) qdel(M) else diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index d8058efbb53..35bdb18caae 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -205,7 +205,7 @@ SM.master_commander = user SM.sentience_act() to_chat(SM, "All at once it makes sense: you know what you are and who you are! Self awareness is yours!") - to_chat(SM, "You are grateful to be self aware and owe [user] a great debt. Serve [user], and assist them in completing their goals at any cost.") + to_chat(SM, "You are grateful to be self aware and owe [user] a great debt. Serve [user], and assist [user.p_them()] in completing [user.p_their()] goals at any cost.") if(SM.flags_2 & HOLOGRAM_2) //Check to see if it's a holodeck creature to_chat(SM, "You also become depressingly aware that you are not a real creature, but instead a holoform. Your existence is limited to the parameters of the holodeck.") to_chat(user, "[M] accepts the potion and suddenly becomes attentive and aware. It worked!") @@ -426,7 +426,7 @@ G.loc = src.loc G.key = ghost.key add_attack_logs(user, G, "Summoned as a golem") - to_chat(G, "You are an adamantine golem. You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools. Serve [user], and assist them in completing their goals at any cost.") + to_chat(G, "You are an adamantine golem. You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools. Serve [user], and assist [user.p_them()] in completing [user.p_their()] goals at any cost.") qdel(src) /obj/effect/golemrune/Topic(href,href_list) diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index cea1f502d91..09978047027 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -351,7 +351,7 @@ height = 4 var/target_area = /area/mine/dangerous/unexplored -/obj/docking_port/stationary/random/initialize() +/obj/docking_port/stationary/random/Initialize() ..() var/list/turfs = get_area_turfs(target_area) var/turf/T = pick(turfs) diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 6e712e74914..c8f36cfa37e 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -229,7 +229,7 @@ -/obj/docking_port/mobile/initialize() +/obj/docking_port/mobile/Initialize() if(!timid) register() ..() diff --git a/code/modules/space_management/space_level.dm b/code/modules/space_management/space_level.dm index dc598ccab42..38ec849179a 100644 --- a/code/modules/space_management/space_level.dm +++ b/code/modules/space_management/space_level.dm @@ -152,7 +152,7 @@ if(istype(AM, /obj/effect/landmark/map_loader)) late_maps.Add(AM) continue - AM.initialize() + AM.Initialize(TRUE) if(istype(AM, /obj/machinery/atmospherics)) pipes.Add(AM) else if(istype(AM, /obj/structure/cable)) @@ -179,10 +179,7 @@ /datum/space_level/proc/do_cables(list/cables) var/watch = start_watch() log_debug("Building powernets on z-level '[zpos]'!") - for(var/schmoo in cables) - var/obj/structure/cable/C = schmoo - if(C) - makepowernet_for(C) + SSmachines.setup_template_powernets(cables) cables.Cut() log_debug("Took [stop_watch(watch)]s") @@ -193,7 +190,7 @@ for(var/schmoo in late_maps) var/obj/effect/landmark/map_loader/ML = schmoo if(ML) - ML.initialize() + ML.Initialize() late_maps.Cut() space_manager.remove_dirt(zpos) log_debug("Took [stop_watch(watch)]s") diff --git a/code/modules/station_goals/bsa.dm b/code/modules/station_goals/bsa.dm index 0c0ab2b1259..57142365cc4 100644 --- a/code/modules/station_goals/bsa.dm +++ b/code/modules/station_goals/bsa.dm @@ -273,7 +273,7 @@ area_aim = TRUE target_all_areas = TRUE -/obj/machinery/computer/bsa_control/admin/initialize() +/obj/machinery/computer/bsa_control/admin/Initialize() ..() if(!cannon) cannon = deploy() diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index d98e40700df..9f2d24fd50a 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -66,7 +66,7 @@ if(!holder || (holder in src)) return - owner.visible_message("[owner] retracts [holder] back into \his [parent_organ == "r_arm" ? "right" : "left"] arm.", + owner.visible_message("[owner] retracts [holder] back into [owner.p_their()] [parent_organ == "r_arm" ? "right" : "left"] arm.", "[holder] snaps back into your [parent_organ == "r_arm" ? "right" : "left"] arm.", "You hear a short mechanical noise.") @@ -114,7 +114,7 @@ if(parent_organ == "r_arm" ? owner.hand : !owner.hand) owner.swap_hand() - owner.visible_message("[owner] extends [holder] from \his [parent_organ == "r_arm" ? "right" : "left"] arm.", + owner.visible_message("[owner] extends [holder] from [owner.p_their()] [parent_organ == "r_arm" ? "right" : "left"] arm.", "You extend [holder] from your [parent_organ == "r_arm" ? "right" : "left"] arm.", "You hear a short mechanical noise.") playsound(get_turf(owner), 'sound/mecha/mechmove03.ogg', 50, 1) diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm index 0af7781eee4..8a29c148253 100644 --- a/code/modules/surgery/organs/organ.dm +++ b/code/modules/surgery/organs/organ.dm @@ -289,7 +289,7 @@ return if(owner && robotic == 2) Stop() // In the name of looooove~! - owner.visible_message("[owner] clutches their chest and gasps!","You clutch your chest in pain!") + owner.visible_message("[owner] clutches [owner.p_their()] chest and gasps!","You clutch your chest in pain!") else if(owner && robotic == 1) receive_damage(11,1) diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm index 0ebf08c225c..794c19e2655 100644 --- a/code/modules/surgery/organs/organ_external.dm +++ b/code/modules/surgery/organs/organ_external.dm @@ -172,7 +172,7 @@ owner.emote("scream") //getting hit on broken hand hurts if(status & ORGAN_SPLINTED && prob((brute + burn)*4)) //taking damage to splinted limbs removes the splints status &= ~ORGAN_SPLINTED - owner.visible_message("The splint on [owner]'s left arm unravels from their [name]!","The splint on your [name] unravels!") + owner.visible_message("The splint on [owner]'s left arm unravels from [owner.p_their()] [name]!","The splint on your [name] unravels!") owner.handle_splints() if(used_weapon) add_autopsy_data("[used_weapon]", brute + burn) @@ -442,7 +442,7 @@ Note that amputating the affected organ does in fact remove the infection from t return if(owner.step_count >= splinted_count + SPLINT_LIFE) status &= ~ORGAN_SPLINTED //oh no, we actually need surgery now! - owner.visible_message("[owner] screams in pain as their splint pops off their [name]!","You scream in pain as your splint pops off your [name]!") + owner.visible_message("[owner] screams in pain as [owner.p_their()] splint pops off their [name]!","You scream in pain as your splint pops off your [name]!") owner.emote("scream") owner.Stun(2) owner.handle_splints() diff --git a/code/modules/surgery/organs/parasites.dm b/code/modules/surgery/organs/parasites.dm index 0adca48bfd0..900e60d9806 100644 --- a/code/modules/surgery/organs/parasites.dm +++ b/code/modules/surgery/organs/parasites.dm @@ -82,7 +82,7 @@ // Actually, let's make it slightly worse... just to discourage people from bringing back infections. alternate_ending = 1 to_chat(owner,"The shapes extend tendrils out of your wound... no... those are legs! SPIDER LEGS! You have spiderlings growing inside you! You scratch at the wound, but it just aggrivates them - they swarm out of the wound, biting you all over!") - owner.visible_message("[owner] flails around on the floor as spiderlings erupt from their skin and swarm all over them! ") + owner.visible_message("[owner] flails around on the floor as spiderlings erupt from [owner.p_their()] skin and swarm all over them! ") owner.Stun(20) owner.Weaken(20) // yes, this is a long stun - that's intentional. Gotta give the spiderlings time to escape. diff --git a/code/modules/surgery/slime.dm b/code/modules/surgery/slime.dm index ced21be08b4..77614d41430 100644 --- a/code/modules/surgery/slime.dm +++ b/code/modules/surgery/slime.dm @@ -98,6 +98,6 @@ return 1 /datum/surgery_step/slime/saw_core/fail_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) - user.visible_message(" [user]'s hand slips, causing \him to miss the core!", \ + user.visible_message(" [user]'s hand slips, causing [user.p_them()] to miss the core!", \ " Your hand slips, causing you to miss the core!") - return 0 \ No newline at end of file + return 0 diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index 85880048f9b..a0d5cf335a9 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -48,8 +48,8 @@ attack_verb = list("drilled") suicide_act(mob/user) - to_chat(viewers(user), pick("[user] is pressing [src] to \his temple and activating it! It looks like \he's trying to commit suicide.", - "[user] is pressing [src] to \his chest and activating it! It looks like \he's trying to commit suicide.")) + to_chat(viewers(user), pick("[user] is pressing [src] to [user.p_their()] temple and activating it! It looks like [user.p_theyre()] trying to commit suicide.", + "[user] is pressing [src] to [user.p_their()] chest and activating it! It looks like [user.p_theyre()] trying to commit suicide.")) return (BRUTELOSS) @@ -72,9 +72,9 @@ hitsound = 'sound/weapons/bladeslice.ogg' suicide_act(mob/user) - to_chat(viewers(user), pick("[user] is slitting \his wrists with [src]! It looks like \he's trying to commit suicide.", - "[user] is slitting \his throat with [src]! It looks like \he's trying to commit suicide.", - "[user] is slitting \his stomach open with [src]! It looks like \he's trying to commit seppuku.")) + to_chat(viewers(user), pick("[user] is slitting [user.p_their()] wrists with [src]! It looks like [user.p_theyre()] trying to commit suicide.", + "[user] is slitting [user.p_their()] throat with [src]! It looks like [user.p_theyre()] trying to commit suicide.", + "[user] is slitting [user.p_their()] stomach open with [src]! It looks like [user.p_theyre()] trying to commit seppuku.")) return (BRUTELOSS) diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm index 9336de72515..b7cf78e5ed2 100644 --- a/code/modules/telesci/telesci_computer.dm +++ b/code/modules/telesci/telesci_computer.dm @@ -46,7 +46,7 @@ ..(user) to_chat(user, "There are [crystals.len ? crystals.len : "no"] bluespace crystal\s in the crystal slots.") -/obj/machinery/computer/telescience/initialize() +/obj/machinery/computer/telescience/Initialize() ..() for(var/i = 1; i <= starting_crystals; i++) crystals += new /obj/item/ore/bluespace_crystal/artificial(null) // starting crystals diff --git a/config/example/tos.txt b/config/example/tos.txt new file mode 100644 index 00000000000..eb43c50a083 --- /dev/null +++ b/config/example/tos.txt @@ -0,0 +1,3 @@ +

    Welcome to Space Station 13!

    + +Terms of service goes here. \ No newline at end of file diff --git a/html/changelog.html b/html/changelog.html index 0938ed45f8e..464012c5cb9 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,100 @@ -->
    +

    26 May 2018

    +

    Birdtalon updated:

    +
      +
    • Holoparasite guide updated to include newer models. Small tooltip added for charger models.
    • +
    • laser tag gun projectiles now play appropriate sound when striking.
    • +
    +

    Citinited updated:

    +
      +
    • Hopefully fixes all issues with disposals sending you to disposals.
    • +
    +

    Fox McCloud updated:

    +
      +
    • Fixes not being able to propel yourself through space by farting if you possessed both superfart and toxic farts
    • +
    +

    Kyep and Bxil updated:

    +
      +
    • Prevents everyone and their mother from seeing through closed poddoors.
    • +
    +

    Tayyyyyyy updated:

    +
      +
    • Most things will now use the correct pronouns.
    • +
    • Newscasters properly check for feed channel creation and wanted issue creation
    • +
    • ERT should deploy properly without admins now.
    • +
    + +

    19 May 2018

    +

    Aurorablade updated:

    +
      +
    • Vet Coat Fluff item.
    • +
    • Spacepod mod kit now uses kit blueprints and not KITE blueprints (spelling error).
    • +
    +

    Fox McCloud updated:

    +
      +
    • Adds gloves of the North Star; get them on the uplink for 8 TC
    • +
    • Unarmed attacks now have their own icons, as does disarming.
    • +
    • Various mobs have their own custom icon attacks
    • +
    • Monkies now bite!
    • +
    + +

    18 May 2018

    +

    Fox McCloud updated:

    +
      +
    • Removes engineering and police tape
    • +
    • Adds security, atmospheric, and engineering holoprojectors
    • +
    +

    tigercat2000 updated:

    +
      +
    • You can now lock a facing direction with shift+middle mouse button, or lock your direction towards an object by clicking on it with shift + ctrl + middle mouse button.
    • +
    + +

    15 May 2018

    +

    Tayyyyyyy updated:

    +
      +
    • Pun pun is back!
    • +
    + +

    11 May 2018

    +

    Kyep updated:

    +
      +
    • It is no longer possible to create an infinite number of monkeys from the same monkey cube.
    • +
    + +

    09 May 2018

    +

    RyanSmake updated:

    +
      +
    • You can now jump on fax machines without the UI lying to you.
    • +
    + +

    07 May 2018

    +

    qwertyquerty updated:

    +
      +
    • The window title is custom now!
    • +
    + +

    06 May 2018

    +

    Kyep updated:

    +
      +
    • DeathSquad is now better equipped, and prompts eligible ghosts with a "Do you want to play as DeathSquad?" when called.
    • +
    • DeathSquad members (except team leaders) can now choose to spawn as either an organic DS member, or a DS borg.
    • +
    + +

    05 May 2018

    +

    Tayyyyyyy updated:

    +
      +
    • ERT members will have their proper name and appearance when cloned
    • +
    + +

    04 May 2018

    +

    RyanSmake updated:

    +
      +
    • You will now log in to the proper account you input to the ATM instead of the one associated with you.
    • +
    • Now ATMs will reconnect after a power outage.
    • +
    +

    02 May 2018

    CrazyLemon and Fox McCloud updated:

      diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index a99a2c4b64c..04b66ec89a7 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -6375,3 +6375,65 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. 2018-05-02: CrazyLemon and Fox McCloud: - bugfix: Fixes reagent smoke +2018-05-04: + RyanSmake: + - bugfix: You will now log in to the proper account you input to the ATM instead + of the one associated with you. + - bugfix: Now ATMs will reconnect after a power outage. +2018-05-05: + Tayyyyyyy: + - bugfix: ERT members will have their proper name and appearance when cloned +2018-05-06: + Kyep: + - tweak: DeathSquad is now better equipped, and prompts eligible ghosts with a "Do + you want to play as DeathSquad?" when called. + - rscadd: DeathSquad members (except team leaders) can now choose to spawn as either + an organic DS member, or a DS borg. +2018-05-07: + qwertyquerty: + - rscadd: The window title is custom now! +2018-05-09: + RyanSmake: + - bugfix: You can now jump on fax machines without the UI lying to you. +2018-05-11: + Kyep: + - bugfix: It is no longer possible to create an infinite number of monkeys from + the same monkey cube. +2018-05-15: + Tayyyyyyy: + - bugfix: Pun pun is back! +2018-05-18: + Fox McCloud: + - rscdel: Removes engineering and police tape + - rscadd: Adds security, atmospheric, and engineering holoprojectors + tigercat2000: + - rscadd: You can now lock a facing direction with shift+middle mouse button, or + lock your direction towards an object by clicking on it with shift + ctrl + + middle mouse button. +2018-05-19: + Aurorablade: + - rscadd: Vet Coat Fluff item. + - tweak: Spacepod mod kit now uses kit blueprints and not KITE blueprints (spelling + error). + Fox McCloud: + - rscadd: Adds gloves of the North Star; get them on the uplink for 8 TC + - rscadd: Unarmed attacks now have their own icons, as does disarming. + - rscadd: Various mobs have their own custom icon attacks + - tweak: Monkies now bite! +2018-05-26: + Birdtalon: + - tweak: Holoparasite guide updated to include newer models. Small tooltip added + for charger models. + - bugfix: laser tag gun projectiles now play appropriate sound when striking. + Citinited: + - bugfix: Hopefully fixes all issues with disposals sending you to disposals. + Fox McCloud: + - bugfix: Fixes not being able to propel yourself through space by farting if you + possessed both superfart and toxic farts + Kyep and Bxil: + - bugfix: Prevents everyone and their mother from seeing through closed poddoors. + Tayyyyyyy: + - rscadd: Most things will now use the correct pronouns. + - bugfix: Newscasters properly check for feed channel creation and wanted issue + creation + - bugfix: ERT should deploy properly without admins now. diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index ee05d5f450e..fa6f26fefe6 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index 16eeff1107f..49679ae2256 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/inhands/fluff_lefthand.dmi b/icons/mob/inhands/fluff_lefthand.dmi index 645c04a9ac9..a5721f518ce 100644 Binary files a/icons/mob/inhands/fluff_lefthand.dmi and b/icons/mob/inhands/fluff_lefthand.dmi differ diff --git a/icons/mob/inhands/fluff_righthand.dmi b/icons/mob/inhands/fluff_righthand.dmi index f0656ef8e22..50435f90e0d 100644 Binary files a/icons/mob/inhands/fluff_righthand.dmi and b/icons/mob/inhands/fluff_righthand.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index 781bc710af3..209e052895a 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/obj/custom_items.dmi b/icons/obj/custom_items.dmi index 8c3b77c337d..940f2ba25da 100644 Binary files a/icons/obj/custom_items.dmi and b/icons/obj/custom_items.dmi differ diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index f1c8b87aaa4..042c10b2aed 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ diff --git a/icons/obj/engicart.dmi b/icons/obj/engicart.dmi index 36d45cdf04b..0e665bff8df 100644 Binary files a/icons/obj/engicart.dmi and b/icons/obj/engicart.dmi differ diff --git a/icons/obj/janitor.dmi b/icons/obj/janitor.dmi index 119f3df0e37..83cb94a5ca3 100644 Binary files a/icons/obj/janitor.dmi and b/icons/obj/janitor.dmi differ diff --git a/icons/policetape.dmi b/icons/policetape.dmi deleted file mode 100644 index 74a758335a9..00000000000 Binary files a/icons/policetape.dmi and /dev/null differ diff --git a/interface/skin.dmf b/interface/skin.dmf index 54ed0c40d6a..813abc66b98 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -1499,7 +1499,7 @@ window "mainwindow" size = 640x440 is-default = true is-maximized = true - title = "Space Station 13" + title = "Paradise Station 13" icon = 'icons\\ss13_64.png' menu = "menu" macro = "macro" diff --git a/paradise.dme b/paradise.dme index fd478a69e07..62908577586 100644 --- a/paradise.dme +++ b/paradise.dme @@ -18,6 +18,7 @@ #include "code\__DEFINES\_globals.dm" #include "code\__DEFINES\_readme.dm" #include "code\__DEFINES\admin.dm" +#include "code\__DEFINES\antagonists.dm" #include "code\__DEFINES\atmospherics.dm" #include "code\__DEFINES\bots.dm" #include "code\__DEFINES\callbacks.dm" @@ -76,6 +77,7 @@ #include "code\__HELPERS\matrices.dm" #include "code\__HELPERS\mobs.dm" #include "code\__HELPERS\names.dm" +#include "code\__HELPERS\pronouns.dm" #include "code\__HELPERS\qdel.dm" #include "code\__HELPERS\sanitize_values.dm" #include "code\__HELPERS\text.dm" @@ -88,8 +90,6 @@ #include "code\__HELPERS\sorts\MergeSort.dm" #include "code\__HELPERS\sorts\TimSort.dm" #include "code\_DATASTRUCTURES\heap.dm" -#include "code\_DATASTRUCTURES\linked_lists.dm" -#include "code\_DATASTRUCTURES\priority_queue.dm" #include "code\_DATASTRUCTURES\stacks.dm" #include "code\_globalvars\configuration.dm" #include "code\_globalvars\database.dm" @@ -192,8 +192,6 @@ #include "code\controllers\Processes\event.dm" #include "code\controllers\Processes\fast_process.dm" #include "code\controllers\Processes\lighting.dm" -#include "code\controllers\Processes\machinery.dm" -#include "code\controllers\Processes\mob.dm" #include "code\controllers\Processes\nano_mob_hunter.dm" #include "code\controllers\Processes\npcai.dm" #include "code\controllers\Processes\npcpool.dm" @@ -204,21 +202,24 @@ #include "code\controllers\ProcessScheduler\core\process.dm" #include "code\controllers\ProcessScheduler\core\processScheduler.dm" #include "code\controllers\subsystem\air.dm" +#include "code\controllers\subsystem\atoms.dm" #include "code\controllers\subsystem\fires.dm" #include "code\controllers\subsystem\garbage.dm" +#include "code\controllers\subsystem\machinery.dm" +#include "code\controllers\subsystem\mobs.dm" #include "code\controllers\subsystem\nanoui.dm" #include "code\controllers\subsystem\nightshift.dm" #include "code\controllers\subsystem\spacedrift.dm" #include "code\controllers\subsystem\sun.dm" #include "code\controllers\subsystem\throwing.dm" #include "code\controllers\subsystem\timer.dm" +#include "code\controllers\subsystem\processing\processing.dm" #include "code\datums\action.dm" #include "code\datums\ai_law_sets.dm" #include "code\datums\ai_laws.dm" #include "code\datums\beam.dm" #include "code\datums\browser.dm" #include "code\datums\callback.dm" -#include "code\datums\computerfiles.dm" #include "code\datums\datacore.dm" #include "code\datums\datum.dm" #include "code\datums\datumvars.dm" @@ -226,7 +227,6 @@ #include "code\datums\hud.dm" #include "code\datums\mind.dm" #include "code\datums\mixed.dm" -#include "code\datums\modules.dm" #include "code\datums\mutable_appearance.dm" #include "code\datums\periodic_news.dm" #include "code\datums\progressbar.dm" @@ -240,6 +240,11 @@ #include "code\datums\uplink_item.dm" #include "code\datums\vision_override.dm" #include "code\datums\vr.dm" +#include "code\datums\antagonists\antag_datum.dm" +#include "code\datums\antagonists\antag_helpers.dm" +#include "code\datums\antagonists\antag_hud.dm" +#include "code\datums\antagonists\antag_spawner.dm" +#include "code\datums\antagonists\antag_team.dm" #include "code\datums\cache\air_alarm.dm" #include "code\datums\cache\apc.dm" #include "code\datums\cache\cache.dm" @@ -383,7 +388,6 @@ #include "code\game\data_huds.dm" #include "code\game\response_team.dm" #include "code\game\shuttle_engines.dm" -#include "code\game\skincmd.dm" #include "code\game\sound.dm" #include "code\game\world.dm" #include "code\game\area\ai_monitored.dm" @@ -402,8 +406,6 @@ #include "code\game\dna\genes\powers.dm" #include "code\game\dna\genes\vg_disabilities.dm" #include "code\game\dna\genes\vg_powers.dm" -#include "code\game\gamemodes\antag_hud.dm" -#include "code\game\gamemodes\antag_spawner.dm" #include "code\game\gamemodes\factions.dm" #include "code\game\gamemodes\game_mode.dm" #include "code\game\gamemodes\gameticker.dm" @@ -768,7 +770,6 @@ #include "code\game\objects\items\flag.dm" #include "code\game\objects\items\latexballoon.dm" #include "code\game\objects\items\misc.dm" -#include "code\game\objects\items\policetape.dm" #include "code\game\objects\items\random_items.dm" #include "code\game\objects\items\shooting_range.dm" #include "code\game\objects\items\toys.dm" @@ -865,7 +866,6 @@ #include "code\game\objects\items\weapons\paint.dm" #include "code\game\objects\items\weapons\paiwire.dm" #include "code\game\objects\items\weapons\pneumaticCannon.dm" -#include "code\game\objects\items\weapons\power_cells.dm" #include "code\game\objects\items\weapons\powerfist.dm" #include "code\game\objects\items\weapons\RCD.dm" #include "code\game\objects\items\weapons\RCL.dm" @@ -964,6 +964,7 @@ #include "code\game\objects\structures\girders.dm" #include "code\game\objects\structures\grille.dm" #include "code\game\objects\structures\guillotine.dm" +#include "code\game\objects\structures\holosign.dm" #include "code\game\objects\structures\inflatable.dm" #include "code\game\objects\structures\janicart.dm" #include "code\game\objects\structures\kitchen_spike.dm" diff --git a/tgstation.dme b/tgstation.dme deleted file mode 120000 index abc8cf17220..00000000000 --- a/tgstation.dme +++ /dev/null @@ -1 +0,0 @@ -paradise.dme \ No newline at end of file