mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-26 06:29:23 +01:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
name: Compile changelogs
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 0 * * *"
|
||||
|
||||
jobs:
|
||||
compile:
|
||||
name: "Compile changelogs"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: "Setup python"
|
||||
uses: actions/setup-python@v1
|
||||
with:
|
||||
python-version: '3.x'
|
||||
- name: "Install deps"
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
python -m pip install pyyaml
|
||||
- name: "Checkout"
|
||||
uses: actions/checkout@v1
|
||||
with:
|
||||
fetch-depth: 25
|
||||
- name: "Compile"
|
||||
run: |
|
||||
python tools/ss13_genchangelog.py html/changelog.html html/changelogs
|
||||
- name: Commit
|
||||
run: |
|
||||
git config --local user.email "action@github.com"
|
||||
git config --local user.name "Changelogs"
|
||||
git pull origin master
|
||||
git commit -m "Automatic changelog compile [ci skip]" -a || true
|
||||
- name: "Push"
|
||||
uses: ad-m/github-push-action@master
|
||||
with:
|
||||
github_token: ${{ secrets.GITHUB_MASTER_KEY }}
|
||||
@@ -1,13 +1,32 @@
|
||||
Any time you make a change to the schema files, remember to increment the database schema version. Generally increment the minor number, major should be reserved for significant changes to the schema. Both values go up to 255.
|
||||
|
||||
The latest database version is 5.6; The query to update the schema revision table is:
|
||||
The latest database version is 5.7; The query to update the schema revision table is:
|
||||
|
||||
INSERT INTO `schema_revision` (`major`, `minor`) VALUES (5, 6);
|
||||
INSERT INTO `schema_revision` (`major`, `minor`) VALUES (5, 7);
|
||||
or
|
||||
INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (5, 6);
|
||||
INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (5, 7);
|
||||
|
||||
In any query remember to add a prefix to the table names if you use one.
|
||||
|
||||
-----------------------------------------------------
|
||||
|
||||
Version 5.7, 10 January 2020 by Atlanta-Ned
|
||||
Added ticket table for tracking ahelp tickets in the database.
|
||||
|
||||
DROP TABLE IF EXISTS `ticket`;
|
||||
CREATE TABLE `ticket` (
|
||||
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`server_ip` int(10) unsigned NOT NULL,
|
||||
`server_port` smallint(5) unsigned NOT NULL,
|
||||
`round_id` int(11) unsigned NOT NULL,
|
||||
`ticket` smallint(11) unsigned NOT NULL,
|
||||
`action` varchar(20) NOT NULL DEFAULT 'Message',
|
||||
`message` text NOT NULL,
|
||||
`timestamp` datetime NOT NULL,
|
||||
`recipient` varchar(32) DEFAULT NULL,
|
||||
`sender` varchar(32) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
-----------------------------------------------------
|
||||
|
||||
|
||||
@@ -537,6 +537,24 @@ CREATE TABLE `achievement_metadata` (
|
||||
PRIMARY KEY (`achievement_key`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
--
|
||||
-- Table structure for table `ticket`
|
||||
--
|
||||
DROP TABLE IF EXISTS `ticket`;
|
||||
CREATE TABLE `ticket` (
|
||||
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`server_ip` int(10) unsigned NOT NULL,
|
||||
`server_port` smallint(5) unsigned NOT NULL,
|
||||
`round_id` int(11) unsigned NOT NULL,
|
||||
`ticket` smallint(11) unsigned NOT NULL,
|
||||
`action` varchar(20) NOT NULL DEFAULT 'Message',
|
||||
`message` text NOT NULL,
|
||||
`timestamp` datetime NOT NULL,
|
||||
`recipient` varchar(32) DEFAULT NULL,
|
||||
`sender` varchar(32) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
||||
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
|
||||
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
|
||||
|
||||
@@ -537,6 +537,24 @@ CREATE TABLE `SS13_achievement_metadata` (
|
||||
PRIMARY KEY (`achievement_key`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
--
|
||||
-- Table structure for table `SS13_ticket`
|
||||
--
|
||||
DROP TABLE IF EXISTS `SS13_ticket`;
|
||||
CREATE TABLE `SS13_ticket` (
|
||||
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`server_ip` int(10) unsigned NOT NULL,
|
||||
`server_port` smallint(5) unsigned NOT NULL,
|
||||
`round_id` int(11) unsigned NOT NULL,
|
||||
`ticket` smallint(11) unsigned NOT NULL,
|
||||
`action` varchar(20) NOT NULL DEFAULT 'Message',
|
||||
`message` text NOT NULL,
|
||||
`timestamp` datetime NOT NULL,
|
||||
`recipient` varchar(32) DEFAULT NULL,
|
||||
`sender` varchar(32) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
||||
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
|
||||
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
|
||||
|
||||
@@ -3,11 +3,7 @@
|
||||
/turf/template_noop,
|
||||
/area/template_noop)
|
||||
"ab" = (
|
||||
/obj/machinery/power/shieldwallgen{
|
||||
active = 2;
|
||||
anchored = 1;
|
||||
power = 1
|
||||
},
|
||||
/obj/machinery/power/shieldwallgen/anchored,
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/ruin/space/has_grav/abandonedzoo)
|
||||
@@ -153,11 +149,7 @@
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/ruin/space/has_grav/abandonedzoo)
|
||||
"aE" = (
|
||||
/obj/machinery/power/shieldwallgen{
|
||||
active = 2;
|
||||
anchored = 1;
|
||||
power = 1
|
||||
},
|
||||
/obj/machinery/power/shieldwallgen/anchored,
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/plating,
|
||||
/area/ruin/space/has_grav/abandonedzoo)
|
||||
@@ -248,7 +240,6 @@
|
||||
/obj/machinery/power/apc/unlocked{
|
||||
dir = 8;
|
||||
environ = 0;
|
||||
equipment = 0;
|
||||
lighting = 0;
|
||||
name = "Worn-out APC";
|
||||
pixel_x = -25
|
||||
@@ -367,11 +358,8 @@
|
||||
/turf/open/floor/plasteel/dark/side,
|
||||
/area/ruin/space/has_grav/abandonedzoo)
|
||||
"bf" = (
|
||||
/obj/machinery/power/smes/magical{
|
||||
desc = "A high-capacity superconducting magnetic energy storage (SMES) unit.";
|
||||
name = "power storage unit"
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/power/smes/engineering,
|
||||
/turf/open/floor/plasteel/dark/side,
|
||||
/area/ruin/space/has_grav/abandonedzoo)
|
||||
"bg" = (
|
||||
@@ -435,13 +423,13 @@
|
||||
/turf/open/floor/plasteel/dark/side,
|
||||
/area/ruin/space/has_grav/abandonedzoo)
|
||||
"bs" = (
|
||||
/obj/machinery/power/shieldwallgen,
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/power/shieldwallgen/anchored,
|
||||
/turf/open/floor/plating,
|
||||
/area/ruin/space/has_grav/abandonedzoo)
|
||||
"bt" = (
|
||||
/obj/machinery/power/shieldwallgen,
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/power/shieldwallgen/anchored,
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/ruin/space/has_grav/abandonedzoo)
|
||||
"bu" = (
|
||||
@@ -496,6 +484,7 @@
|
||||
/area/ruin/space/has_grav/abandonedzoo)
|
||||
"bD" = (
|
||||
/obj/item/clothing/mask/facehugger/dead,
|
||||
/obj/structure/alien/weeds,
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/ruin/space/has_grav/abandonedzoo)
|
||||
"bE" = (
|
||||
@@ -654,7 +643,7 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/turf/open/floor/plating,
|
||||
/area/ruin/space/has_grav/abandonedzoo)
|
||||
"wF" = (
|
||||
/obj/machinery/door/airlock/hatch{
|
||||
@@ -690,6 +679,11 @@
|
||||
"KN" = (
|
||||
/turf/template_noop,
|
||||
/area/space/nearstation)
|
||||
"Ng" = (
|
||||
/obj/structure/alien/weeds,
|
||||
/obj/structure/alien/weeds/node,
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/ruin/space/has_grav/abandonedzoo)
|
||||
|
||||
(1,1,1) = {"
|
||||
ab
|
||||
@@ -979,7 +973,7 @@ bl
|
||||
at
|
||||
ac
|
||||
bB
|
||||
bB
|
||||
Ng
|
||||
bD
|
||||
bH
|
||||
ac
|
||||
@@ -1002,7 +996,7 @@ ac
|
||||
bC
|
||||
bH
|
||||
bH
|
||||
bX
|
||||
bB
|
||||
bT
|
||||
aa
|
||||
"}
|
||||
@@ -1022,7 +1016,7 @@ aL
|
||||
aD
|
||||
bD
|
||||
bB
|
||||
bX
|
||||
Ng
|
||||
bO
|
||||
bU
|
||||
bW
|
||||
@@ -1043,7 +1037,7 @@ aQ
|
||||
ac
|
||||
bB
|
||||
bB
|
||||
bX
|
||||
bB
|
||||
bX
|
||||
bP
|
||||
aa
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -970,9 +970,7 @@
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/nitrous_output{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/engine/n2o{
|
||||
initial_gas_mix = "n2o=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/n2o,
|
||||
/area/engine/atmos)
|
||||
"acw" = (
|
||||
/turf/open/floor/engine,
|
||||
@@ -1042,7 +1040,8 @@
|
||||
/turf/open/floor/engine/vacuum,
|
||||
/area/science/mixing)
|
||||
"acF" = (
|
||||
/turf/open/floor/engine/airless,
|
||||
/obj/machinery/portable_atmospherics/canister/air,
|
||||
/turf/open/floor/engine/air,
|
||||
/area/engine/atmos)
|
||||
"acG" = (
|
||||
/obj/structure/disposalpipe/segment{
|
||||
@@ -1182,9 +1181,7 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/science/storage)
|
||||
"acT" = (
|
||||
/turf/open/floor/engine/n2o{
|
||||
initial_gas_mix = "n2o=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/n2o,
|
||||
/area/engine/atmos)
|
||||
"acU" = (
|
||||
/obj/structure/bookcase,
|
||||
@@ -1979,9 +1976,7 @@
|
||||
/area/medical/virology)
|
||||
"aeV" = (
|
||||
/obj/machinery/air_sensor/atmos/nitrous_tank,
|
||||
/turf/open/floor/engine/n2o{
|
||||
initial_gas_mix = "n2o=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/n2o,
|
||||
/area/engine/atmos)
|
||||
"aeW" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
@@ -4602,8 +4597,7 @@
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/camera{
|
||||
c_tag = "Cargo - Docking Bay North";
|
||||
dir = 2
|
||||
c_tag = "Cargo - Docking Bay North"
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/quartermaster/storage)
|
||||
@@ -5135,12 +5129,8 @@
|
||||
},
|
||||
/area/crew_quarters/kitchen)
|
||||
"anM" = (
|
||||
/obj/machinery/atmospherics/miner/n2o{
|
||||
max_ext_kpa = 2500
|
||||
},
|
||||
/turf/open/floor/engine/n2o{
|
||||
initial_gas_mix = "n2o=1000;TEMP=293.15"
|
||||
},
|
||||
/obj/machinery/portable_atmospherics/canister/nitrous_oxide,
|
||||
/turf/open/floor/engine/n2o,
|
||||
/area/engine/atmos)
|
||||
"anQ" = (
|
||||
/obj/structure/sign/warning/docking{
|
||||
@@ -8437,9 +8427,7 @@
|
||||
/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/nitrous_input{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/engine/n2o{
|
||||
initial_gas_mix = "n2o=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/n2o,
|
||||
/area/engine/atmos)
|
||||
"axm" = (
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -8450,7 +8438,7 @@
|
||||
/area/hallway/primary/central)
|
||||
"axn" = (
|
||||
/obj/effect/landmark/xeno_spawn,
|
||||
/turf/open/floor/engine/airless,
|
||||
/turf/open/floor/engine/air,
|
||||
/area/engine/atmos)
|
||||
"axo" = (
|
||||
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
|
||||
@@ -8587,9 +8575,7 @@
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/toxin_output{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/engine/plasma{
|
||||
initial_gas_mix = "plasma=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/plasma,
|
||||
/area/engine/atmos)
|
||||
"axE" = (
|
||||
/obj/effect/turf_decal/tile/purple{
|
||||
@@ -8645,9 +8631,7 @@
|
||||
},
|
||||
/area/science/research)
|
||||
"axJ" = (
|
||||
/turf/open/floor/engine/plasma{
|
||||
initial_gas_mix = "plasma=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/plasma,
|
||||
/area/engine/atmos)
|
||||
"axK" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
|
||||
@@ -8785,9 +8769,7 @@
|
||||
/area/engine/atmos)
|
||||
"aya" = (
|
||||
/obj/effect/landmark/xeno_spawn,
|
||||
/turf/open/floor/engine/plasma{
|
||||
initial_gas_mix = "plasma=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/plasma,
|
||||
/area/engine/atmos)
|
||||
"ayb" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
|
||||
@@ -8799,9 +8781,7 @@
|
||||
/area/science/mixing)
|
||||
"ayc" = (
|
||||
/obj/machinery/air_sensor/atmos/toxin_tank,
|
||||
/turf/open/floor/engine/plasma{
|
||||
initial_gas_mix = "plasma=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/plasma,
|
||||
/area/engine/atmos)
|
||||
"ayd" = (
|
||||
/obj/machinery/suit_storage_unit/atmos,
|
||||
@@ -8833,12 +8813,8 @@
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/engine/atmos)
|
||||
"ayh" = (
|
||||
/obj/machinery/atmospherics/miner/toxins{
|
||||
max_ext_kpa = 2500
|
||||
},
|
||||
/turf/open/floor/engine/plasma{
|
||||
initial_gas_mix = "plasma=1000;TEMP=293.15"
|
||||
},
|
||||
/obj/machinery/portable_atmospherics/canister/toxins,
|
||||
/turf/open/floor/engine/plasma,
|
||||
/area/engine/atmos)
|
||||
"ayi" = (
|
||||
/obj/machinery/light/small{
|
||||
@@ -8849,17 +8825,13 @@
|
||||
dir = 8;
|
||||
network = list("ss13","Atmospherics")
|
||||
},
|
||||
/turf/open/floor/engine/plasma{
|
||||
initial_gas_mix = "plasma=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/plasma,
|
||||
/area/engine/atmos)
|
||||
"ayj" = (
|
||||
/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/toxin_input{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/engine/plasma{
|
||||
initial_gas_mix = "plasma=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/plasma,
|
||||
/area/engine/atmos)
|
||||
"ayk" = (
|
||||
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
|
||||
@@ -8891,9 +8863,7 @@
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/carbon_output{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/engine/co2{
|
||||
initial_gas_mix = "co2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/co2,
|
||||
/area/engine/atmos)
|
||||
"ayo" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
|
||||
@@ -9035,15 +9005,11 @@
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/engine/atmos)
|
||||
"ayD" = (
|
||||
/turf/open/floor/engine/co2{
|
||||
initial_gas_mix = "co2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/co2,
|
||||
/area/engine/atmos)
|
||||
"ayF" = (
|
||||
/obj/machinery/air_sensor/atmos/carbon_tank,
|
||||
/turf/open/floor/engine/co2{
|
||||
initial_gas_mix = "co2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/co2,
|
||||
/area/engine/atmos)
|
||||
"ayG" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/general/visible{
|
||||
@@ -9136,12 +9102,8 @@
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/engine/atmos)
|
||||
"ayS" = (
|
||||
/obj/machinery/atmospherics/miner/carbon_dioxide{
|
||||
max_ext_kpa = 2500
|
||||
},
|
||||
/turf/open/floor/engine/co2{
|
||||
initial_gas_mix = "co2=1000;TEMP=293.15"
|
||||
},
|
||||
/obj/machinery/portable_atmospherics/canister/carbon_dioxide,
|
||||
/turf/open/floor/engine/co2,
|
||||
/area/engine/atmos)
|
||||
"ayT" = (
|
||||
/obj/machinery/light/small{
|
||||
@@ -9152,9 +9114,7 @@
|
||||
dir = 8;
|
||||
network = list("ss13","Atmospherics")
|
||||
},
|
||||
/turf/open/floor/engine/co2{
|
||||
initial_gas_mix = "co2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/co2,
|
||||
/area/engine/atmos)
|
||||
"ayU" = (
|
||||
/obj/structure/closet/l3closet/scientist,
|
||||
@@ -9302,17 +9262,13 @@
|
||||
/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/carbon_input{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/engine/co2{
|
||||
initial_gas_mix = "co2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/co2,
|
||||
/area/engine/atmos)
|
||||
"azj" = (
|
||||
/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/nitrogen_input{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/engine/n2{
|
||||
initial_gas_mix = "n2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/n2,
|
||||
/area/engine/atmos)
|
||||
"azk" = (
|
||||
/obj/machinery/atmospherics/components/binary/pump{
|
||||
@@ -10845,55 +10801,45 @@
|
||||
/area/engine/atmos)
|
||||
"aDD" = (
|
||||
/obj/machinery/air_sensor/atmos/nitrogen_tank,
|
||||
/turf/open/floor/engine/n2{
|
||||
initial_gas_mix = "n2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/n2,
|
||||
/area/engine/atmos)
|
||||
"aDE" = (
|
||||
/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/air_input{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/engine/airless,
|
||||
/turf/open/floor/engine/air,
|
||||
/area/engine/atmos)
|
||||
"aDF" = (
|
||||
/obj/machinery/air_sensor/atmos/air_tank,
|
||||
/turf/open/floor/engine/airless,
|
||||
/turf/open/floor/engine/air,
|
||||
/area/engine/atmos)
|
||||
"aDG" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/atmos/air_output{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/engine/airless,
|
||||
/turf/open/floor/engine/air,
|
||||
/area/engine/atmos)
|
||||
"aDH" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/nitrogen_output{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/engine/n2{
|
||||
initial_gas_mix = "n2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/n2,
|
||||
/area/engine/atmos)
|
||||
"aDI" = (
|
||||
/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/oxygen_input{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/engine/o2{
|
||||
initial_gas_mix = "o2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/o2,
|
||||
/area/engine/atmos)
|
||||
"aDJ" = (
|
||||
/obj/machinery/air_sensor/atmos/oxygen_tank,
|
||||
/turf/open/floor/engine/o2{
|
||||
initial_gas_mix = "o2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/o2,
|
||||
/area/engine/atmos)
|
||||
"aDK" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/oxygen_output{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/engine/o2{
|
||||
initial_gas_mix = "o2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/o2,
|
||||
/area/engine/atmos)
|
||||
"aDL" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
|
||||
@@ -10911,7 +10857,7 @@
|
||||
dir = 1;
|
||||
network = list("ss13","Atmospherics")
|
||||
},
|
||||
/turf/open/floor/engine/airless,
|
||||
/turf/open/floor/engine/air,
|
||||
/area/engine/atmos)
|
||||
"aDO" = (
|
||||
/obj/machinery/door/airlock/research{
|
||||
@@ -31862,9 +31808,7 @@
|
||||
c_tag = "Atmospherics - Nitrous Oxide Tank";
|
||||
network = list("ss13","Atmospherics")
|
||||
},
|
||||
/turf/open/floor/engine/n2o{
|
||||
initial_gas_mix = "n2o=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/n2o,
|
||||
/area/engine/atmos)
|
||||
"bFr" = (
|
||||
/obj/structure/disposalpipe/segment{
|
||||
@@ -36573,9 +36517,7 @@
|
||||
/area/maintenance/fore)
|
||||
"bSf" = (
|
||||
/obj/machinery/light/small,
|
||||
/turf/open/floor/engine/n2o{
|
||||
initial_gas_mix = "n2o=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/n2o,
|
||||
/area/engine/atmos)
|
||||
"bSh" = (
|
||||
/obj/machinery/atmospherics/components/binary/pump,
|
||||
@@ -40213,22 +40155,14 @@
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/tcommsat/server)
|
||||
"cdL" = (
|
||||
/turf/open/floor/engine/n2{
|
||||
initial_gas_mix = "n2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/n2,
|
||||
/area/engine/atmos)
|
||||
"cdM" = (
|
||||
/obj/machinery/atmospherics/miner/nitrogen{
|
||||
max_ext_kpa = 2500
|
||||
},
|
||||
/turf/open/floor/engine/n2{
|
||||
initial_gas_mix = "n2=1000;TEMP=293.15"
|
||||
},
|
||||
/obj/machinery/portable_atmospherics/canister/nitrogen,
|
||||
/turf/open/floor/engine/n2,
|
||||
/area/engine/atmos)
|
||||
"cdN" = (
|
||||
/turf/open/floor/engine/o2{
|
||||
initial_gas_mix = "o2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/o2,
|
||||
/area/engine/atmos)
|
||||
"cdP" = (
|
||||
/obj/effect/turf_decal/tile/yellow{
|
||||
@@ -40637,12 +40571,8 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/central)
|
||||
"ceK" = (
|
||||
/obj/machinery/atmospherics/miner/oxygen{
|
||||
max_ext_kpa = 2500
|
||||
},
|
||||
/turf/open/floor/engine/o2{
|
||||
initial_gas_mix = "o2=1000;TEMP=293.15"
|
||||
},
|
||||
/obj/machinery/portable_atmospherics/canister/oxygen,
|
||||
/turf/open/floor/engine/o2,
|
||||
/area/engine/atmos)
|
||||
"ceL" = (
|
||||
/obj/machinery/light/small,
|
||||
@@ -40651,9 +40581,7 @@
|
||||
dir = 1;
|
||||
network = list("ss13","Atmospherics")
|
||||
},
|
||||
/turf/open/floor/engine/n2{
|
||||
initial_gas_mix = "n2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/n2,
|
||||
/area/engine/atmos)
|
||||
"ceM" = (
|
||||
/obj/machinery/light/small,
|
||||
@@ -40662,9 +40590,7 @@
|
||||
dir = 1;
|
||||
network = list("ss13","Atmospherics")
|
||||
},
|
||||
/turf/open/floor/engine/o2{
|
||||
initial_gas_mix = "o2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/o2,
|
||||
/area/engine/atmos)
|
||||
"ceS" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
@@ -40935,6 +40861,9 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/engineering)
|
||||
"cFG" = (
|
||||
/turf/open/floor/engine/air,
|
||||
/area/engine/atmos)
|
||||
"cGH" = (
|
||||
/obj/structure/girder,
|
||||
/obj/structure/grille/broken,
|
||||
@@ -89255,7 +89184,7 @@ aDw
|
||||
avb
|
||||
aDF
|
||||
acF
|
||||
acF
|
||||
cFG
|
||||
bPb
|
||||
pjJ
|
||||
bPb
|
||||
@@ -89511,8 +89440,8 @@ azD
|
||||
aDx
|
||||
aDC
|
||||
aDG
|
||||
acF
|
||||
acF
|
||||
cFG
|
||||
cFG
|
||||
acj
|
||||
aal
|
||||
bPb
|
||||
|
||||
@@ -1513,7 +1513,7 @@
|
||||
/obj/machinery/light{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/obj/structure/cable/layer3,
|
||||
/turf/open/floor/plating{
|
||||
icon_state = "panelscorched"
|
||||
},
|
||||
@@ -1747,7 +1747,6 @@
|
||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer1{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/engine,
|
||||
/area/ai_monitored/turret_protected/aisat_interior)
|
||||
"acW" = (
|
||||
@@ -1947,7 +1946,6 @@
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/ai_monitored/turret_protected/aisat_interior)
|
||||
"adn" = (
|
||||
@@ -2209,7 +2207,6 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/engine,
|
||||
/area/ai_monitored/turret_protected/aisat/foyer)
|
||||
"adF" = (
|
||||
@@ -2370,7 +2367,6 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/engine,
|
||||
/area/ai_monitored/turret_protected/aisat/atmos)
|
||||
"adS" = (
|
||||
@@ -2517,7 +2513,6 @@
|
||||
pixel_x = -22
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/plating,
|
||||
/area/ai_monitored/turret_protected/aisat/atmos)
|
||||
"aed" = (
|
||||
@@ -2536,7 +2531,6 @@
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/ai_monitored/turret_protected/aisat/atmos)
|
||||
"aef" = (
|
||||
@@ -2623,11 +2617,6 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/bridge)
|
||||
"aen" = (
|
||||
/obj/structure/lattice/catwalk,
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/space/nearstation)
|
||||
"aeo" = (
|
||||
/obj/structure/lattice,
|
||||
/obj/structure/grille,
|
||||
@@ -2913,7 +2902,6 @@
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/space/nearstation)
|
||||
"aeT" = (
|
||||
@@ -4840,7 +4828,6 @@
|
||||
name = "Abandoned External Airlock"
|
||||
},
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/maintenance/fore)
|
||||
"ahZ" = (
|
||||
@@ -5183,7 +5170,6 @@
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on,
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/plating{
|
||||
icon_state = "platingdmg3"
|
||||
},
|
||||
@@ -6593,7 +6579,6 @@
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/maintenance/fore)
|
||||
"akP" = (
|
||||
@@ -9451,7 +9436,6 @@
|
||||
network = list("minisat")
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line,
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/engine,
|
||||
/area/ai_monitored/turret_protected/aisat_interior)
|
||||
"api" = (
|
||||
@@ -12576,6 +12560,7 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
|
||||
dir = 6
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/engine,
|
||||
/area/ai_monitored/turret_protected/aisat/atmos)
|
||||
"atY" = (
|
||||
@@ -12670,6 +12655,7 @@
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/engine,
|
||||
/area/ai_monitored/turret_protected/aisat/atmos)
|
||||
"aug" = (
|
||||
@@ -18760,30 +18746,18 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/atmos)
|
||||
"aDz" = (
|
||||
/turf/open/floor/engine/n2{
|
||||
initial_gas_mix = "n2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/n2,
|
||||
/area/engine/atmos)
|
||||
"aDA" = (
|
||||
/obj/machinery/atmospherics/miner/nitrogen{
|
||||
max_ext_kpa = 2500
|
||||
},
|
||||
/turf/open/floor/engine/n2{
|
||||
initial_gas_mix = "n2=1000;TEMP=293.15"
|
||||
},
|
||||
/obj/machinery/portable_atmospherics/canister/nitrogen,
|
||||
/turf/open/floor/engine/n2,
|
||||
/area/engine/atmos)
|
||||
"aDC" = (
|
||||
/turf/open/floor/engine/o2{
|
||||
initial_gas_mix = "o2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/o2,
|
||||
/area/engine/atmos)
|
||||
"aDD" = (
|
||||
/obj/machinery/atmospherics/miner/oxygen{
|
||||
max_ext_kpa = 2500
|
||||
},
|
||||
/turf/open/floor/engine/o2{
|
||||
initial_gas_mix = "o2=1000;TEMP=293.15"
|
||||
},
|
||||
/obj/machinery/portable_atmospherics/canister/oxygen,
|
||||
/turf/open/floor/engine/o2,
|
||||
/area/engine/atmos)
|
||||
"aDE" = (
|
||||
/obj/machinery/camera{
|
||||
@@ -19603,19 +19577,13 @@
|
||||
/turf/open/floor/grass,
|
||||
/area/medical/genetics/cloning)
|
||||
"aFc" = (
|
||||
/turf/open/floor/engine/co2{
|
||||
initial_gas_mix = "co2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/co2,
|
||||
/area/engine/atmos)
|
||||
"aFd" = (
|
||||
/turf/open/floor/engine/plasma{
|
||||
initial_gas_mix = "plasma=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/plasma,
|
||||
/area/engine/atmos)
|
||||
"aFe" = (
|
||||
/turf/open/floor/engine/n2o{
|
||||
initial_gas_mix = "n2o=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/n2o,
|
||||
/area/engine/atmos)
|
||||
"aFf" = (
|
||||
/turf/open/floor/engine/vacuum,
|
||||
@@ -19704,28 +19672,16 @@
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/medical/cryo)
|
||||
"aFm" = (
|
||||
/obj/machinery/atmospherics/miner/carbon_dioxide{
|
||||
max_ext_kpa = 2500
|
||||
},
|
||||
/turf/open/floor/engine/co2{
|
||||
initial_gas_mix = "co2=1000;TEMP=293.15"
|
||||
},
|
||||
/obj/machinery/portable_atmospherics/canister/carbon_dioxide,
|
||||
/turf/open/floor/engine/co2,
|
||||
/area/engine/atmos)
|
||||
"aFn" = (
|
||||
/obj/machinery/atmospherics/miner/toxins{
|
||||
max_ext_kpa = 2500
|
||||
},
|
||||
/turf/open/floor/engine/plasma{
|
||||
initial_gas_mix = "plasma=1000;TEMP=293.15"
|
||||
},
|
||||
/obj/machinery/portable_atmospherics/canister/toxins,
|
||||
/turf/open/floor/engine/plasma,
|
||||
/area/engine/atmos)
|
||||
"aFo" = (
|
||||
/obj/machinery/atmospherics/miner/n2o{
|
||||
max_ext_kpa = 2500
|
||||
},
|
||||
/turf/open/floor/engine/n2o{
|
||||
initial_gas_mix = "n2o=1000;TEMP=293.15"
|
||||
},
|
||||
/obj/machinery/portable_atmospherics/canister/nitrous_oxide,
|
||||
/turf/open/floor/engine/n2o,
|
||||
/area/engine/atmos)
|
||||
"aFp" = (
|
||||
/obj/machinery/computer/med_data,
|
||||
@@ -20322,9 +20278,7 @@
|
||||
name = "atmospherics camera";
|
||||
network = list("ss13","engine")
|
||||
},
|
||||
/turf/open/floor/engine/n2{
|
||||
initial_gas_mix = "n2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/n2,
|
||||
/area/engine/atmos)
|
||||
"aGl" = (
|
||||
/obj/structure/table,
|
||||
@@ -20802,45 +20756,33 @@
|
||||
/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/nitrogen_input{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/engine/n2{
|
||||
initial_gas_mix = "n2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/n2,
|
||||
/area/engine/atmos)
|
||||
"aGV" = (
|
||||
/obj/machinery/air_sensor/atmos/nitrogen_tank,
|
||||
/turf/open/floor/engine/n2{
|
||||
initial_gas_mix = "n2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/n2,
|
||||
/area/engine/atmos)
|
||||
"aGW" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/nitrogen_output{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/engine/n2{
|
||||
initial_gas_mix = "n2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/n2,
|
||||
/area/engine/atmos)
|
||||
"aGX" = (
|
||||
/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/oxygen_input{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/engine/o2{
|
||||
initial_gas_mix = "o2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/o2,
|
||||
/area/engine/atmos)
|
||||
"aGY" = (
|
||||
/obj/machinery/air_sensor/atmos/oxygen_tank,
|
||||
/turf/open/floor/engine/o2{
|
||||
initial_gas_mix = "o2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/o2,
|
||||
/area/engine/atmos)
|
||||
"aGZ" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/oxygen_output{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/engine/o2{
|
||||
initial_gas_mix = "o2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/o2,
|
||||
/area/engine/atmos)
|
||||
"aHa" = (
|
||||
/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/air_input{
|
||||
@@ -20862,67 +20804,49 @@
|
||||
/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/carbon_input{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/engine/co2{
|
||||
initial_gas_mix = "co2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/co2,
|
||||
/area/engine/atmos)
|
||||
"aHe" = (
|
||||
/obj/machinery/air_sensor/atmos/carbon_tank,
|
||||
/turf/open/floor/engine/co2{
|
||||
initial_gas_mix = "co2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/co2,
|
||||
/area/engine/atmos)
|
||||
"aHf" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/carbon_output{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/engine/co2{
|
||||
initial_gas_mix = "co2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/co2,
|
||||
/area/engine/atmos)
|
||||
"aHg" = (
|
||||
/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/toxin_input{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/engine/plasma{
|
||||
initial_gas_mix = "plasma=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/plasma,
|
||||
/area/engine/atmos)
|
||||
"aHh" = (
|
||||
/obj/machinery/air_sensor/atmos/toxin_tank,
|
||||
/turf/open/floor/engine/plasma{
|
||||
initial_gas_mix = "plasma=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/plasma,
|
||||
/area/engine/atmos)
|
||||
"aHi" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/toxin_output{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/engine/plasma{
|
||||
initial_gas_mix = "plasma=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/plasma,
|
||||
/area/engine/atmos)
|
||||
"aHj" = (
|
||||
/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/nitrous_input{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/engine/n2o{
|
||||
initial_gas_mix = "n2o=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/n2o,
|
||||
/area/engine/atmos)
|
||||
"aHk" = (
|
||||
/obj/machinery/air_sensor/atmos/nitrous_tank,
|
||||
/turf/open/floor/engine/n2o{
|
||||
initial_gas_mix = "n2o=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/n2o,
|
||||
/area/engine/atmos)
|
||||
"aHl" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/nitrous_output{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/engine/n2o{
|
||||
initial_gas_mix = "n2o=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/n2o,
|
||||
/area/engine/atmos)
|
||||
"aHm" = (
|
||||
/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/mix_input{
|
||||
@@ -24612,9 +24536,7 @@
|
||||
/area/security/main)
|
||||
"aML" = (
|
||||
/obj/machinery/light/floor,
|
||||
/turf/open/floor/engine/n2{
|
||||
initial_gas_mix = "n2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/n2,
|
||||
/area/engine/atmos)
|
||||
"aMM" = (
|
||||
/obj/machinery/door/airlock/maintenance{
|
||||
@@ -24658,9 +24580,7 @@
|
||||
/area/science/mixing/chamber)
|
||||
"aMO" = (
|
||||
/obj/machinery/light/floor,
|
||||
/turf/open/floor/engine/o2{
|
||||
initial_gas_mix = "o2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/o2,
|
||||
/area/engine/atmos)
|
||||
"aMP" = (
|
||||
/obj/structure/chair{
|
||||
@@ -24787,9 +24707,7 @@
|
||||
name = "atmospherics camera";
|
||||
network = list("ss13","engine")
|
||||
},
|
||||
/turf/open/floor/engine/co2{
|
||||
initial_gas_mix = "co2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/co2,
|
||||
/area/engine/atmos)
|
||||
"aNa" = (
|
||||
/obj/machinery/camera{
|
||||
@@ -24798,9 +24716,7 @@
|
||||
name = "atmospherics camera";
|
||||
network = list("ss13","engine")
|
||||
},
|
||||
/turf/open/floor/engine/plasma{
|
||||
initial_gas_mix = "plasma=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/plasma,
|
||||
/area/engine/atmos)
|
||||
"aNb" = (
|
||||
/obj/machinery/camera{
|
||||
@@ -24809,9 +24725,7 @@
|
||||
name = "atmospherics camera";
|
||||
network = list("ss13","engine")
|
||||
},
|
||||
/turf/open/floor/engine/n2o{
|
||||
initial_gas_mix = "n2o=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/n2o,
|
||||
/area/engine/atmos)
|
||||
"aNc" = (
|
||||
/obj/machinery/camera{
|
||||
@@ -30925,15 +30839,11 @@
|
||||
/area/medical/virology)
|
||||
"aVF" = (
|
||||
/obj/effect/landmark/xeno_spawn,
|
||||
/turf/open/floor/engine/o2{
|
||||
initial_gas_mix = "o2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/o2,
|
||||
/area/engine/atmos)
|
||||
"aVG" = (
|
||||
/obj/effect/landmark/xeno_spawn,
|
||||
/turf/open/floor/engine/n2o{
|
||||
initial_gas_mix = "n2o=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/n2o,
|
||||
/area/engine/atmos)
|
||||
"aVH" = (
|
||||
/obj/machinery/status_display/evac,
|
||||
@@ -33358,6 +33268,7 @@
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
|
||||
/mob/living/simple_animal/bot/secbot/pingsky,
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/engine,
|
||||
/area/ai_monitored/turret_protected/aisat_interior)
|
||||
"aZi" = (
|
||||
@@ -54496,9 +54407,7 @@
|
||||
/area/maintenance/port)
|
||||
"bDR" = (
|
||||
/obj/machinery/light/floor,
|
||||
/turf/open/floor/engine/co2{
|
||||
initial_gas_mix = "co2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/co2,
|
||||
/area/engine/atmos)
|
||||
"bDS" = (
|
||||
/obj/structure/table,
|
||||
@@ -55678,9 +55587,7 @@
|
||||
/area/maintenance/port)
|
||||
"bFG" = (
|
||||
/obj/machinery/light/floor,
|
||||
/turf/open/floor/engine/plasma{
|
||||
initial_gas_mix = "plasma=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/plasma,
|
||||
/area/engine/atmos)
|
||||
"bFH" = (
|
||||
/obj/effect/turf_decal/stripes/corner{
|
||||
@@ -57232,9 +57139,7 @@
|
||||
/area/hallway/primary/port)
|
||||
"bId" = (
|
||||
/obj/machinery/light/floor,
|
||||
/turf/open/floor/engine/n2o{
|
||||
initial_gas_mix = "n2o=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/n2o,
|
||||
/area/engine/atmos)
|
||||
"bIe" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/purple/visible,
|
||||
@@ -57803,9 +57708,7 @@
|
||||
name = "atmospherics camera";
|
||||
network = list("ss13","engine")
|
||||
},
|
||||
/turf/open/floor/engine/o2{
|
||||
initial_gas_mix = "o2=1000;TEMP=293.15"
|
||||
},
|
||||
/turf/open/floor/engine/o2,
|
||||
/area/engine/atmos)
|
||||
"bIV" = (
|
||||
/turf/closed/wall,
|
||||
@@ -72801,6 +72704,7 @@
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/ai_monitored/turret_protected/aisat_interior)
|
||||
"cfv" = (
|
||||
@@ -73357,6 +73261,7 @@
|
||||
/obj/effect/turf_decal/stripes/corner{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/engine,
|
||||
/area/ai_monitored/turret_protected/aisat_interior)
|
||||
"cgq" = (
|
||||
@@ -73626,6 +73531,7 @@
|
||||
/obj/effect/turf_decal/stripes/corner{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/engine,
|
||||
/area/ai_monitored/turret_protected/aisat_interior)
|
||||
"cgK" = (
|
||||
@@ -74027,6 +73933,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/holopad/secure,
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/engine,
|
||||
/area/ai_monitored/turret_protected/aisat_interior)
|
||||
"chq" = (
|
||||
@@ -74411,6 +74318,8 @@
|
||||
dir = 5
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/obj/structure/cable_bridge,
|
||||
/obj/structure/cable/layer3,
|
||||
/turf/open/floor/engine,
|
||||
/area/ai_monitored/storage/satellite)
|
||||
"cic" = (
|
||||
@@ -93840,6 +93749,10 @@
|
||||
"dvN" = (
|
||||
/turf/open/floor/plating/asteroid/lowpressure,
|
||||
/area/space/nearstation)
|
||||
"dSr" = (
|
||||
/obj/machinery/portable_atmospherics/canister/air,
|
||||
/turf/open/floor/engine/air,
|
||||
/area/engine/atmos)
|
||||
"fhz" = (
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/holopad/secure,
|
||||
@@ -119807,8 +119720,8 @@ aDD
|
||||
aMO
|
||||
aFM
|
||||
aMY
|
||||
dSr
|
||||
bUQ
|
||||
aMY
|
||||
bFP
|
||||
cCX
|
||||
bUZ
|
||||
@@ -121255,19 +121168,19 @@ adR
|
||||
adZ
|
||||
aec
|
||||
aee
|
||||
aen
|
||||
cHu
|
||||
cHu
|
||||
aeS
|
||||
aeS
|
||||
aen
|
||||
cHu
|
||||
aeS
|
||||
aeS
|
||||
aen
|
||||
cHu
|
||||
aeS
|
||||
aeS
|
||||
aen
|
||||
aen
|
||||
aen
|
||||
cHu
|
||||
cHu
|
||||
cHu
|
||||
ahY
|
||||
aiD
|
||||
akO
|
||||
|
||||
@@ -45218,14 +45218,8 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard/secondary)
|
||||
"bYc" = (
|
||||
/obj/structure/window/spawner/east,
|
||||
/obj/structure/window/spawner/north,
|
||||
/obj/structure/window/spawner,
|
||||
/obj/structure/flora/ausbushes/fullgrass,
|
||||
/obj/structure/flora/ausbushes/lavendergrass,
|
||||
/obj/structure/flora/ausbushes/leafybush,
|
||||
/obj/structure/flora/ausbushes/palebush,
|
||||
/turf/open/floor/grass,
|
||||
/obj/effect/spawner/structure/window,
|
||||
/turf/open/floor/plating,
|
||||
/area/hallway/primary/central)
|
||||
"bYd" = (
|
||||
/obj/machinery/door/firedoor,
|
||||
@@ -45692,7 +45686,8 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/airalarm{
|
||||
pixel_y = 24
|
||||
dir = 4;
|
||||
pixel_x = -22
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/security/checkpoint/medical)
|
||||
@@ -46178,14 +46173,6 @@
|
||||
/obj/structure/table,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"caj" = (
|
||||
/obj/machinery/requests_console{
|
||||
department = "Medbay";
|
||||
departmentType = 1;
|
||||
name = "Medbay RC"
|
||||
},
|
||||
/turf/closed/wall,
|
||||
/area/security/checkpoint/medical)
|
||||
"cak" = (
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
@@ -47076,24 +47063,24 @@
|
||||
dir = 4;
|
||||
network = list("ss13","medbay")
|
||||
},
|
||||
/obj/structure/chair/greyscale,
|
||||
/obj/item/radio/intercom{
|
||||
pixel_x = -28
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/chair,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"cbS" = (
|
||||
/obj/effect/spawner/structure/window/reinforced,
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/plating,
|
||||
/area/security/checkpoint/medical)
|
||||
"cbT" = (
|
||||
@@ -47809,55 +47796,26 @@
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/storage)
|
||||
"cdw" = (
|
||||
/obj/machinery/computer/security/telescreen{
|
||||
desc = "Used for monitoring medbay to ensure patient safety.";
|
||||
dir = 1;
|
||||
name = "Medbay Monitor";
|
||||
network = list("medbay");
|
||||
pixel_x = -29
|
||||
},
|
||||
/obj/machinery/computer/med_data{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/security/checkpoint/medical)
|
||||
"cdx" = (
|
||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
|
||||
dir = 1
|
||||
/obj/machinery/computer/security/telescreen{
|
||||
desc = "Used for monitoring medbay to ensure patient safety.";
|
||||
dir = 4;
|
||||
name = "Medbay Monitor";
|
||||
network = list("medbay");
|
||||
pixel_x = -32
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
/turf/open/floor/plasteel,
|
||||
/area/security/checkpoint/medical)
|
||||
"cdy" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/obj/effect/landmark/start/medical_doctor,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"cdz" = (
|
||||
@@ -48251,6 +48209,10 @@
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/light{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/security/checkpoint/medical)
|
||||
"ceB" = (
|
||||
@@ -48849,44 +48811,13 @@
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/storage)
|
||||
"cfP" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/medical_kiosk,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"cfQ" = (
|
||||
/obj/structure/cable,
|
||||
/obj/structure/window/reinforced/spawner/north,
|
||||
/obj/structure/window/reinforced/spawner,
|
||||
/obj/structure/flora/ausbushes/fullgrass,
|
||||
/obj/structure/flora/ausbushes/lavendergrass,
|
||||
/obj/structure/flora/ausbushes/reedbush,
|
||||
/obj/structure/flora/ausbushes/sunnybush,
|
||||
/obj/structure/window/reinforced/spawner/west,
|
||||
/turf/open/floor/grass,
|
||||
/area/security/checkpoint/medical)
|
||||
"cfR" = (
|
||||
/obj/structure/cable,
|
||||
/obj/structure/window/reinforced/spawner/east,
|
||||
/obj/structure/window/reinforced/spawner/north,
|
||||
/obj/structure/window/reinforced/spawner,
|
||||
/obj/structure/flora/ausbushes/fullgrass,
|
||||
/obj/structure/flora/ausbushes/lavendergrass,
|
||||
/obj/structure/flora/ausbushes/reedbush,
|
||||
/obj/structure/flora/ausbushes/sunnybush,
|
||||
/turf/open/floor/grass,
|
||||
/area/security/checkpoint/medical)
|
||||
"cfT" = (
|
||||
/obj/machinery/door/firedoor,
|
||||
/obj/machinery/door/airlock/medical/glass{
|
||||
@@ -49386,32 +49317,13 @@
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/storage)
|
||||
"cgX" = (
|
||||
/obj/structure/chair/greyscale,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"cgY" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on,
|
||||
/obj/structure/chair/greyscale,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/chair,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"cgZ" = (
|
||||
@@ -49420,17 +49332,15 @@
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"cha" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/obj/structure/sink{
|
||||
dir = 8;
|
||||
pixel_x = 12
|
||||
@@ -49438,12 +49348,12 @@
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
/obj/effect/turf_decal/tile/yellow,
|
||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
@@ -50063,10 +49973,6 @@
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
@@ -50082,50 +49988,13 @@
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"cir" = (
|
||||
/obj/machinery/atmospherics/pipe/manifold/supply,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"cit" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 9
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"ciu" = (
|
||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
/obj/effect/turf_decal/tile/yellow{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
/obj/effect/turf_decal/tile/yellow,
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 5
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
@@ -50713,29 +50582,16 @@
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"cjR" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 9
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
/obj/effect/turf_decal/tile/yellow{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"cjS" = (
|
||||
@@ -51348,34 +51204,21 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/medical/medbay/central)
|
||||
"clo" = (
|
||||
/obj/structure/chair/greyscale{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue,
|
||||
/obj/structure/chair{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"clp" = (
|
||||
/obj/structure/table,
|
||||
/obj/machinery/light,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/obj/item/storage/firstaid/regular{
|
||||
pixel_x = 4;
|
||||
pixel_y = 4
|
||||
@@ -51385,6 +51228,10 @@
|
||||
pixel_x = -4;
|
||||
pixel_y = -4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"clq" = (
|
||||
@@ -51393,28 +51240,19 @@
|
||||
pixel_y = -24
|
||||
},
|
||||
/obj/item/twohanded/required/kirbyplants,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"clr" = (
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
@@ -70951,15 +70789,11 @@
|
||||
/obj/structure/sign/warning/nosmoking{
|
||||
pixel_y = 28
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
@@ -71849,15 +71683,6 @@
|
||||
/obj/structure/grille/broken,
|
||||
/turf/open/space/basic,
|
||||
/area/space/nearstation)
|
||||
"dVQ" = (
|
||||
/obj/structure/window/spawner/west,
|
||||
/obj/structure/window/spawner/north,
|
||||
/obj/structure/window/spawner,
|
||||
/obj/structure/flora/ausbushes/fullgrass,
|
||||
/obj/structure/flora/ausbushes/lavendergrass,
|
||||
/obj/structure/flora/ausbushes/fernybush,
|
||||
/turf/open/floor/grass,
|
||||
/area/hallway/primary/central)
|
||||
"dVT" = (
|
||||
/obj/effect/turf_decal/tile/yellow{
|
||||
dir = 8
|
||||
@@ -72007,17 +71832,6 @@
|
||||
/obj/structure/lattice,
|
||||
/turf/open/space/basic,
|
||||
/area/space/nearstation)
|
||||
"eza" = (
|
||||
/obj/structure/window/spawner/west,
|
||||
/obj/structure/window/spawner/east,
|
||||
/obj/structure/window/spawner/north,
|
||||
/obj/structure/window/spawner,
|
||||
/obj/structure/flora/ausbushes/fullgrass,
|
||||
/obj/structure/flora/ausbushes/lavendergrass,
|
||||
/obj/structure/flora/ausbushes/brflowers,
|
||||
/obj/structure/flora/ausbushes/stalkybush,
|
||||
/turf/open/floor/grass,
|
||||
/area/hallway/primary/central)
|
||||
"eAa" = (
|
||||
/obj/effect/turf_decal/tile/yellow{
|
||||
dir = 4
|
||||
@@ -72576,6 +72390,16 @@
|
||||
},
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/maintenance/disposal/incinerator)
|
||||
"hcZ" = (
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue,
|
||||
/obj/structure/chair{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"hdb" = (
|
||||
/obj/structure/bed,
|
||||
/obj/item/clothing/suit/straight_jacket,
|
||||
@@ -74363,6 +74187,14 @@
|
||||
},
|
||||
/turf/open/floor/plasteel/dark/corner,
|
||||
/area/engine/storage_shared)
|
||||
"oEO" = (
|
||||
/obj/machinery/requests_console{
|
||||
department = "Medbay";
|
||||
departmentType = 1;
|
||||
name = "Medbay RC"
|
||||
},
|
||||
/turf/closed/wall,
|
||||
/area/medical/storage)
|
||||
"oFI" = (
|
||||
/obj/machinery/door/window/eastright{
|
||||
dir = 8;
|
||||
@@ -74579,6 +74411,14 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/break_room)
|
||||
"ppb" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"ppz" = (
|
||||
/obj/machinery/vending/boozeomat/all_access,
|
||||
/obj/effect/decal/cleanable/cobweb,
|
||||
@@ -75191,6 +75031,13 @@
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/chemistry)
|
||||
"rMv" = (
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"rOP" = (
|
||||
/obj/structure/sign/poster/official/random,
|
||||
/turf/closed/wall,
|
||||
@@ -75525,6 +75372,12 @@
|
||||
/obj/machinery/meter,
|
||||
/turf/open/floor/engine,
|
||||
/area/engine/engineering)
|
||||
"sWn" = (
|
||||
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"tay" = (
|
||||
/turf/closed/wall,
|
||||
/area/medical/medbay/central)
|
||||
@@ -75632,6 +75485,13 @@
|
||||
/obj/machinery/pinpointer_dispenser,
|
||||
/turf/open/floor/plating,
|
||||
/area/quartermaster/sorting)
|
||||
"tut" = (
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"twp" = (
|
||||
/obj/effect/turf_decal/tile/yellow,
|
||||
/obj/effect/turf_decal/tile/yellow{
|
||||
@@ -76445,6 +76305,16 @@
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/maintenance/department/science)
|
||||
"wSP" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"wYq" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/turf/open/floor/wood,
|
||||
@@ -100272,7 +100142,7 @@ cad
|
||||
cbP
|
||||
cdv
|
||||
cez
|
||||
bXK
|
||||
oEO
|
||||
tay
|
||||
cio
|
||||
cjO
|
||||
@@ -100526,7 +100396,7 @@ bWj
|
||||
bXL
|
||||
bXL
|
||||
cae
|
||||
caj
|
||||
bXL
|
||||
bXL
|
||||
bXL
|
||||
bXL
|
||||
@@ -100786,11 +100656,11 @@ rVd
|
||||
cbQ
|
||||
cdw
|
||||
ceA
|
||||
cfQ
|
||||
cbS
|
||||
cgX
|
||||
cip
|
||||
cjQ
|
||||
clo
|
||||
sWn
|
||||
wSP
|
||||
hcZ
|
||||
cmv
|
||||
cnE
|
||||
coQ
|
||||
@@ -101043,10 +100913,10 @@ cag
|
||||
caf
|
||||
caf
|
||||
ceB
|
||||
cfR
|
||||
cgY
|
||||
cir
|
||||
cdx
|
||||
cbS
|
||||
cgX
|
||||
cbY
|
||||
tut
|
||||
cfP
|
||||
cmv
|
||||
cnF
|
||||
@@ -101302,7 +101172,7 @@ cbS
|
||||
cbS
|
||||
bXL
|
||||
dwy
|
||||
cip
|
||||
cbY
|
||||
cdy
|
||||
clp
|
||||
cmu
|
||||
@@ -101559,8 +101429,8 @@ cal
|
||||
ceD
|
||||
cfT
|
||||
cgZ
|
||||
cit
|
||||
cjQ
|
||||
rMv
|
||||
ppb
|
||||
clq
|
||||
cmu
|
||||
cmu
|
||||
@@ -108747,7 +108617,7 @@ sKL
|
||||
bUb
|
||||
bVb
|
||||
bWG
|
||||
dVQ
|
||||
bSS
|
||||
bSS
|
||||
bSS
|
||||
bSS
|
||||
@@ -109518,7 +109388,7 @@ jZS
|
||||
bUd
|
||||
bVq
|
||||
bWJ
|
||||
eza
|
||||
bYc
|
||||
bZs
|
||||
aWf
|
||||
ccr
|
||||
|
||||
@@ -19,6 +19,11 @@
|
||||
#define MEDAL_SELFOUCH "Hands???"
|
||||
#define MEDAL_SANDMAN "Mister Sandman"
|
||||
#define MEDAL_CLEANBOSS "Cleanboss"
|
||||
#define MEDAL_RULE8 "Rule 8"
|
||||
#define MEDAL_LONGSHIFT "longshift"
|
||||
|
||||
//Skill medal hub IDs
|
||||
#define MEDAL_LEGENDARY_MINER "Legendary Miner"
|
||||
|
||||
|
||||
//Boss medals
|
||||
|
||||
@@ -131,12 +131,14 @@
|
||||
#define BODYTEMP_COOLING_MAX -100
|
||||
/// The maximum number of degrees that your body can heat up in 1 tick, due to the environment, when in a hot area.
|
||||
#define BODYTEMP_HEATING_MAX 30
|
||||
|
||||
/// The limit the human body can take before it starts taking damage from heat.
|
||||
#define BODYTEMP_HEAT_DAMAGE_LIMIT (BODYTEMP_NORMAL + 50)
|
||||
/// The limit the human body can take before it starts taking damage from coldness.
|
||||
#define BODYTEMP_COLD_DAMAGE_LIMIT (BODYTEMP_NORMAL - 50)
|
||||
|
||||
/// The body temperature limit the human body can take before it starts taking damage from heat.
|
||||
/// This also affects how fast the body normalises it's temperature when hot.
|
||||
/// 340k is about 66c, and rather high for a human.
|
||||
#define BODYTEMP_HEAT_DAMAGE_LIMIT (BODYTEMP_NORMAL + 30)
|
||||
/// The body temperature limit the human body can take before it starts taking damage from cold.
|
||||
/// This also affects how fast the body normalises it's temperature when cold.
|
||||
/// 270k is about -3c, that is below freezing and would hurt over time.
|
||||
#define BODYTEMP_COLD_DAMAGE_LIMIT (BODYTEMP_NORMAL - 40)
|
||||
|
||||
/// what min_cold_protection_temperature is set to for space-helmet quality headwear. MUST NOT BE 0.
|
||||
#define SPACE_HELM_MIN_TEMP_PROTECT 2.0
|
||||
|
||||
@@ -11,3 +11,4 @@
|
||||
#define CINEMATIC_NUKE_FAR 11
|
||||
#define CINEMATIC_NUKE_CLOWNOP 12
|
||||
#define CINEMATIC_CULT_NUKE 13
|
||||
#define CINEMATIC_CULT_FAIL 14
|
||||
|
||||
@@ -204,7 +204,7 @@
|
||||
|
||||
// /mob signals
|
||||
#define COMSIG_MOB_DEATH "mob_death" //from base of mob/death(): (gibbed)
|
||||
|
||||
#define COMSIG_MOB_STATCHANGE "mob_statchange" //from base of mob/set_stat(): (new_stat)
|
||||
#define COMSIG_MOB_CLICKON "mob_clickon" //from base of mob/clickon(): (atom/A, params)
|
||||
#define COMSIG_MOB_MIDDLECLICKON "mob_middleclickon" //from base of mob/MiddleClickOn(): (atom/A)
|
||||
#define COMSIG_MOB_ALTCLICKON "mob_altclickon" //from base of mob/AltClickOn(): (atom/A)
|
||||
|
||||
@@ -51,3 +51,4 @@
|
||||
#define ORGAN_FAILING (1<<2) //Failing organs perform damaging effects until replaced or fixed
|
||||
#define ORGAN_EXTERNAL (1<<3) //Was this organ implanted/inserted/etc, if true will not be removed during species change.
|
||||
#define ORGAN_VITAL (1<<4) //Currently only the brain
|
||||
#define ORGAN_SYNTHETIC_EMP (1<<5) //Synthetic organ affected by an EMP. Deteriorates over time.
|
||||
|
||||
@@ -33,7 +33,6 @@
|
||||
#define NOBLIUM_RESEARCH_AMOUNT 1000
|
||||
#define BZ_RESEARCH_SCALE 4
|
||||
#define BZ_RESEARCH_MAX_AMOUNT 400
|
||||
#define MIASMA_RESEARCH_AMOUNT 40
|
||||
#define STIMULUM_RESEARCH_AMOUNT 50
|
||||
//Plasma fusion properties
|
||||
#define FUSION_ENERGY_THRESHOLD 3e9 //Amount of energy it takes to start a fusion reaction
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
|
||||
#define MODE_INTERCOM "intercom"
|
||||
#define MODE_KEY_INTERCOM "i"
|
||||
#define MODE_TOKEN_INTERCOM ":i"
|
||||
|
||||
#define MODE_BINARY "binary"
|
||||
#define MODE_KEY_BINARY "b"
|
||||
@@ -63,6 +64,9 @@
|
||||
//Eavesdropping
|
||||
#define EAVESDROP_EXTRA_RANGE 1 //how much past the specified message_range does the message get starred, whispering only
|
||||
|
||||
/// How close intercoms can be for radio code use
|
||||
#define MODE_RANGE_INTERCOM 1
|
||||
|
||||
// A link given to ghost alice to follow bob
|
||||
#define FOLLOW_LINK(alice, bob) "<a href=?src=[REF(alice)];follow=[REF(bob)]>(F)</a>"
|
||||
#define TURF_LINK(alice, turfy) "<a href=?src=[REF(alice)];x=[turfy.x];y=[turfy.y];z=[turfy.z]>(T)</a>"
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
*
|
||||
* make sure you add an update to the schema_version stable in the db changelog
|
||||
*/
|
||||
#define DB_MINOR_VERSION 6
|
||||
#define DB_MINOR_VERSION 7
|
||||
|
||||
|
||||
//! ## Timing subsystem
|
||||
|
||||
@@ -145,6 +145,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
|
||||
#define TRAIT_BOOZE_SLIDER "booze-slider"
|
||||
#define TRAIT_QUICK_CARRY "quick-carry"
|
||||
#define TRAIT_QUICKER_CARRY "quicker-carry"
|
||||
#define TRAIT_QUICK_BUILD "quick-build"
|
||||
#define TRAIT_UNINTELLIGIBLE_SPEECH "unintelligible-speech"
|
||||
#define TRAIT_UNSTABLE "unstable"
|
||||
#define TRAIT_OIL_FRIED "oil_fried"
|
||||
@@ -159,8 +160,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
|
||||
#define TRAIT_PARALYSIS "paralysis" //Used for limb-based paralysis, where replacing the limb will fix it
|
||||
|
||||
// item traits
|
||||
#define TRAIT_NODROP "nodrop"
|
||||
#define TRAIT_T_RAY_VISIBLE "t-ray-visible" // Visible on t-ray scanners if the atom/var/level == 1
|
||||
#define TRAIT_NODROP "nodrop"
|
||||
#define TRAIT_NO_STORAGE_INSERT "no_storage_insert" //cannot be inserted in a storage.
|
||||
#define TRAIT_T_RAY_VISIBLE "t-ray-visible" // Visible on t-ray scanners if the atom/var/level == 1
|
||||
#define TRAIT_NO_TELEPORT "no-teleport" //you just can't
|
||||
|
||||
//quirk traits
|
||||
@@ -190,6 +192,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
|
||||
|
||||
// common trait sources
|
||||
#define TRAIT_GENERIC "generic"
|
||||
#define GENERIC_ITEM_TRAIT "generic_item"
|
||||
#define UNCONSCIOUS_BLIND "unconscious_blind"
|
||||
#define EYE_DAMAGE "eye_damage"
|
||||
#define GENETIC_MUTATION "genetic"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#define TYPEID_NULL "0"
|
||||
#define TYPEID_NORMAL_LIST "f"
|
||||
//helper macros
|
||||
#define GET_TYPEID(ref) ( ( (length(ref) <= 10) ? "TYPEID_NULL" : copytext(ref, 4, length(ref)-6) ) )
|
||||
#define GET_TYPEID(ref) ( ( (length(ref) <= 10) ? "TYPEID_NULL" : copytext(ref, 4, -7) ) )
|
||||
#define IS_NORMAL_LIST(L) (GET_TYPEID("\ref[L]") == TYPEID_NORMAL_LIST)
|
||||
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
continue
|
||||
path += choice
|
||||
|
||||
if(copytext(path,-1,0) != "/") //didn't choose a directory, no need to iterate again
|
||||
if(copytext_char(path, -1) != "/") //didn't choose a directory, no need to iterate again
|
||||
break
|
||||
var/extensions
|
||||
for(var/i in valid_extensions)
|
||||
|
||||
+1
-43
@@ -196,48 +196,6 @@
|
||||
|
||||
return
|
||||
|
||||
// Better recursive loop, technically sort of not actually recursive cause that shit is retarded, enjoy.
|
||||
//No need for a recursive limit either
|
||||
/proc/recursive_mob_check(atom/O,client_check=1,sight_check=1,include_radio=1)
|
||||
|
||||
var/list/processing_list = list(O)
|
||||
var/list/processed_list = list()
|
||||
var/list/found_mobs = list()
|
||||
|
||||
while(processing_list.len)
|
||||
|
||||
var/atom/A = processing_list[1]
|
||||
var/passed = 0
|
||||
|
||||
if(ismob(A))
|
||||
var/mob/A_tmp = A
|
||||
passed=1
|
||||
|
||||
if(client_check && !A_tmp.client)
|
||||
passed=0
|
||||
|
||||
if(sight_check && !isInSight(A_tmp, O))
|
||||
passed=0
|
||||
|
||||
else if(include_radio && istype(A, /obj/item/radio))
|
||||
passed=1
|
||||
|
||||
if(sight_check && !isInSight(A, O))
|
||||
passed=0
|
||||
|
||||
if(passed)
|
||||
found_mobs |= A
|
||||
|
||||
for(var/atom/B in A)
|
||||
if(!processed_list[B])
|
||||
processing_list |= B
|
||||
|
||||
processing_list.Cut(1, 2)
|
||||
processed_list[A] = A
|
||||
|
||||
return found_mobs
|
||||
|
||||
|
||||
/proc/get_hearers_in_view(R, atom/source)
|
||||
// Returns a list of hearers in view(R) from source (ignoring luminosity). Used in saycode.
|
||||
var/turf/T = get_turf(source)
|
||||
@@ -453,7 +411,7 @@
|
||||
var/list/result = list()
|
||||
for(var/m in group)
|
||||
var/mob/M = m
|
||||
if(!M.key || !M.client || (ignore_category && GLOB.poll_ignore[ignore_category] && M.ckey in GLOB.poll_ignore[ignore_category]))
|
||||
if(!M.key || !M.client || (ignore_category && GLOB.poll_ignore[ignore_category] && (M.ckey in GLOB.poll_ignore[ignore_category])))
|
||||
continue
|
||||
if(be_special_flag)
|
||||
if(!(M.client.prefs) || !(be_special_flag in M.client.prefs.be_special))
|
||||
|
||||
@@ -981,7 +981,7 @@ world
|
||||
var/icon/atom_icon = new(A.icon, A.icon_state)
|
||||
|
||||
if(!letter)
|
||||
letter = copytext(A.name, 1, 2)
|
||||
letter = A.name[1]
|
||||
if(uppercase == 1)
|
||||
letter = uppertext(letter)
|
||||
else if(uppercase == -1)
|
||||
@@ -1109,7 +1109,7 @@ GLOBAL_LIST_INIT(freon_color_matrix, list("#2E5E69", "#60A2A8", "#A1AFB1", rgb(0
|
||||
WRITE_FILE(GLOB.iconCache[iconKey], icon)
|
||||
var/iconData = GLOB.iconCache.ExportText(iconKey)
|
||||
var/list/partial = splittext(iconData, "{")
|
||||
return replacetext(copytext(partial[2], 3, -5), "\n", "")
|
||||
return replacetext(copytext_char(partial[2], 3, -5), "\n", "")
|
||||
|
||||
/proc/icon2html(thing, target, icon_state, dir, frame = 1, moving = FALSE)
|
||||
if (!thing)
|
||||
|
||||
@@ -431,7 +431,7 @@ GLOBAL_LIST_EMPTY(species_list)
|
||||
continue
|
||||
if(M.stat != DEAD && !override)
|
||||
continue
|
||||
if(speaker_key && speaker_key in ignoring)
|
||||
if(speaker_key && (speaker_key in ignoring))
|
||||
continue
|
||||
|
||||
switch(message_type)
|
||||
|
||||
@@ -28,10 +28,10 @@
|
||||
. = "does"
|
||||
|
||||
/datum/proc/p_theyve(capitalized, temp_gender)
|
||||
. = p_they(capitalized, temp_gender) + "'" + copytext(p_have(temp_gender), 3)
|
||||
. = p_they(capitalized, temp_gender) + "'" + copytext_char(p_have(temp_gender), 3)
|
||||
|
||||
/datum/proc/p_theyre(capitalized, temp_gender)
|
||||
. = p_they(capitalized, temp_gender) + "'" + copytext(p_are(temp_gender), 2)
|
||||
. = p_they(capitalized, temp_gender) + "'" + copytext_char(p_are(temp_gender), 2)
|
||||
|
||||
/datum/proc/p_s(temp_gender) //is this a descriptive proc name, or what?
|
||||
. = "s"
|
||||
|
||||
@@ -188,10 +188,16 @@
|
||||
cb.InvokeAsync()
|
||||
LAZYCLEARLIST(round_end_events)
|
||||
|
||||
var/speed_round = FALSE
|
||||
if(world.time - SSticker.round_start_time <= 300 SECONDS)
|
||||
speed_round = TRUE
|
||||
|
||||
for(var/client/C in GLOB.clients)
|
||||
if(!C.credits)
|
||||
C.RollCredits()
|
||||
C.playtitlemusic(40)
|
||||
if(speed_round)
|
||||
C.give_award(/datum/award/achievement/misc/speed_round, C.mob)
|
||||
|
||||
var/popcount = gather_roundend_feedback()
|
||||
display_report(popcount)
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
return value
|
||||
if(default)
|
||||
return default
|
||||
|
||||
|
||||
/proc/sanitize_inlist(value, list/List, default)
|
||||
if(value in List)
|
||||
return value
|
||||
@@ -52,9 +52,12 @@
|
||||
var/start = 1 + (text2ascii(color, 1) == 35)
|
||||
var/len = length(color)
|
||||
var/char = ""
|
||||
// RRGGBB -> RGB but awful
|
||||
var/convert_to_shorthand = desired_format == 3 && length_char(color) > 3
|
||||
|
||||
. = ""
|
||||
for(var/i = start, i <= len, i += length(char))
|
||||
var/i = start
|
||||
while(i <= len)
|
||||
char = color[i]
|
||||
switch(text2ascii(char))
|
||||
if(48 to 57) //numbers 0 to 9
|
||||
@@ -65,6 +68,9 @@
|
||||
. += lowertext(char)
|
||||
else
|
||||
break
|
||||
i += length(char)
|
||||
if(convert_to_shorthand && i <= len) //skip next one
|
||||
i += length(color[i])
|
||||
|
||||
if(length_char(.) != desired_format)
|
||||
if(default)
|
||||
@@ -74,7 +80,9 @@
|
||||
return crunch + .
|
||||
|
||||
/proc/sanitize_ooccolor(color)
|
||||
var/list/HSL = rgb2hsl(hex2num(copytext(color,2,4)),hex2num(copytext(color,4,6)),hex2num(copytext(color,6,8)))
|
||||
if(length(color) != length_char(color))
|
||||
CRASH("Invalid characters in color '[color]'")
|
||||
var/list/HSL = rgb2hsl(hex2num(copytext(color, 2, 4)), hex2num(copytext(color, 4, 6)), hex2num(copytext(color, 6, 8)))
|
||||
HSL[3] = min(HSL[3],0.4)
|
||||
var/list/RGB = hsl2rgb(arglist(HSL))
|
||||
return "#[num2hex(RGB[1],2)][num2hex(RGB[2],2)][num2hex(RGB[3],2)]"
|
||||
|
||||
@@ -55,6 +55,6 @@
|
||||
if(bad_chars)
|
||||
bad_match = url_encode(bad_chars_regex.match)
|
||||
scrubbed_url += bad_match
|
||||
last_good = bad_chars + length(bad_match)
|
||||
last_good = bad_chars + length(bad_chars_regex.match)
|
||||
while(bad_chars)
|
||||
. = scrubbed_url
|
||||
|
||||
@@ -485,17 +485,17 @@
|
||||
|
||||
//assumes format #RRGGBB #rrggbb
|
||||
/proc/color_hex2num(A)
|
||||
if(!A)
|
||||
if(!A || length(A) != length_char(A))
|
||||
return 0
|
||||
var/R = hex2num(copytext(A,2,4))
|
||||
var/G = hex2num(copytext(A,4,6))
|
||||
var/B = hex2num(copytext(A,6,0))
|
||||
var/R = hex2num(copytext(A, 2, 4))
|
||||
var/G = hex2num(copytext(A, 4, 6))
|
||||
var/B = hex2num(copytext(A, 6, 8))
|
||||
return R+G+B
|
||||
|
||||
//word of warning: using a matrix like this as a color value will simplify it back to a string after being set
|
||||
/proc/color_hex2color_matrix(string)
|
||||
var/length = length(string)
|
||||
if(length != 7 && length != 9)
|
||||
if((length != 7 && length != 9) || length != length_char(string))
|
||||
return color_matrix_identity()
|
||||
var/r = hex2num(copytext(string, 2, 4))/255
|
||||
var/g = hex2num(copytext(string, 4, 6))/255
|
||||
|
||||
@@ -31,8 +31,8 @@
|
||||
/mob = "M"
|
||||
)
|
||||
for (var/tn in TYPES_SHORTCUTS)
|
||||
if (copytext(typename,1, length("[tn]/")+1)=="[tn]/" /*findtextEx(typename,"[tn]/",1,2)*/ )
|
||||
typename = TYPES_SHORTCUTS[tn]+copytext(typename,length("[tn]/"))
|
||||
if(copytext(typename, 1, length("[tn]/") + 1) == "[tn]/" /*findtextEx(typename,"[tn]/",1,2)*/ )
|
||||
typename = TYPES_SHORTCUTS[tn] + copytext(typename, length("[tn]/"))
|
||||
break
|
||||
.[typename] = type
|
||||
|
||||
|
||||
@@ -6,22 +6,16 @@
|
||||
|
||||
//Inverts the colour of an HTML string
|
||||
/proc/invertHTML(HTMLstring)
|
||||
|
||||
if (!( istext(HTMLstring) ))
|
||||
if(!istext(HTMLstring))
|
||||
CRASH("Given non-text argument!")
|
||||
else
|
||||
if (length(HTMLstring) != 7)
|
||||
CRASH("Given non-HTML argument!")
|
||||
else if(length(HTMLstring) != 7)
|
||||
CRASH("Given non-HTML argument!")
|
||||
else if(length_char(HTMLstring) != 7)
|
||||
CRASH("Given non-hex symbols in argument!")
|
||||
var/textr = copytext(HTMLstring, 2, 4)
|
||||
var/textg = copytext(HTMLstring, 4, 6)
|
||||
var/textb = copytext(HTMLstring, 6, 8)
|
||||
var/r = hex2num(textr)
|
||||
var/g = hex2num(textg)
|
||||
var/b = hex2num(textb)
|
||||
textr = num2hex(255 - r, 2)
|
||||
textg = num2hex(255 - g, 2)
|
||||
textb = num2hex(255 - b, 2)
|
||||
return text("#[][][]", textr, textg, textb)
|
||||
return rgb(255 - hex2num(textr), 255 - hex2num(textg), 255 - hex2num(textb))
|
||||
|
||||
/proc/Get_Angle(atom/movable/start,atom/movable/end)//For beams.
|
||||
if(!start || !end)
|
||||
@@ -1400,7 +1394,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
|
||||
/proc/GUID()
|
||||
var/const/GUID_VERSION = "b"
|
||||
var/const/GUID_VARIANT = "d"
|
||||
var/node_id = copytext(md5("[rand()*rand(1,9999999)][world.name][world.hub][world.hub_password][world.internet_address][world.address][world.contents.len][world.status][world.port][rand()*rand(1,9999999)]"), 1, 13)
|
||||
var/node_id = copytext_char(md5("[rand()*rand(1,9999999)][world.name][world.hub][world.hub_password][world.internet_address][world.address][world.contents.len][world.status][world.port][rand()*rand(1,9999999)]"), 1, 13)
|
||||
|
||||
var/time_high = "[num2hex(text2num(time2text(world.realtime,"YYYY")), 2)][num2hex(world.realtime, 6)]"
|
||||
|
||||
|
||||
+26
-16
@@ -42,7 +42,7 @@
|
||||
thealert.override_alerts = override
|
||||
if(override)
|
||||
thealert.timeout = null
|
||||
thealert.mob_viewer = src
|
||||
thealert.owner = src
|
||||
|
||||
if(new_master)
|
||||
var/old_layer = new_master.layer
|
||||
@@ -97,7 +97,7 @@
|
||||
var/severity = 0
|
||||
var/alerttooltipstyle = ""
|
||||
var/override_alerts = FALSE //If it is overriding other alerts of the same type
|
||||
var/mob/mob_viewer //the mob viewing this alert
|
||||
var/mob/owner //Alert owner
|
||||
|
||||
|
||||
/obj/screen/alert/MouseEntered(location,control,params)
|
||||
@@ -227,6 +227,8 @@ or something covering your eyes."
|
||||
|
||||
/obj/screen/alert/mind_control/Click()
|
||||
var/mob/living/L = usr
|
||||
if(L != owner)
|
||||
return
|
||||
to_chat(L, "<span class='mind_control'>[command]</span>")
|
||||
|
||||
/obj/screen/alert/drunk //Not implemented
|
||||
@@ -241,7 +243,7 @@ If you're feeling frisky, examine yourself and click the underlined item to pull
|
||||
icon_state = "embeddedobject"
|
||||
|
||||
/obj/screen/alert/embeddedobject/Click()
|
||||
if(isliving(usr))
|
||||
if(isliving(usr) && usr == owner)
|
||||
var/mob/living/carbon/human/M = usr
|
||||
return M.help_shake_act(M)
|
||||
|
||||
@@ -270,7 +272,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
|
||||
|
||||
/obj/screen/alert/fire/Click()
|
||||
var/mob/living/L = usr
|
||||
if(!istype(L) || !L.can_resist())
|
||||
if(!istype(L) || !L.can_resist() || L != owner)
|
||||
return
|
||||
L.changeNext_move(CLICK_CD_RESIST)
|
||||
if(L.mobility_flags & MOBILITY_MOVE)
|
||||
@@ -330,10 +332,10 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
|
||||
/obj/screen/alert/bloodsense/process()
|
||||
var/atom/blood_target
|
||||
|
||||
if(!mob_viewer.mind)
|
||||
if(!owner.mind)
|
||||
return
|
||||
|
||||
var/datum/antagonist/cult/antag = mob_viewer.mind.has_antag_datum(/datum/antagonist/cult,TRUE)
|
||||
var/datum/antagonist/cult/antag = owner.mind.has_antag_datum(/datum/antagonist/cult,TRUE)
|
||||
if(!antag)
|
||||
return
|
||||
var/datum/objective/sacrifice/sac_objective = locate() in antag.cult_team.objectives
|
||||
@@ -370,7 +372,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
|
||||
add_overlay(narnar)
|
||||
return
|
||||
var/turf/P = get_turf(blood_target)
|
||||
var/turf/Q = get_turf(mob_viewer)
|
||||
var/turf/Q = get_turf(owner)
|
||||
if(!P || !Q || (P.z != Q.z)) //The target is on a different Z level, we cannot sense that far.
|
||||
icon_state = "runed_sense2"
|
||||
desc = "You can no longer sense your target's presence."
|
||||
@@ -494,7 +496,7 @@ so as to remain in compliance with the most up-to-date laws."
|
||||
var/atom/target = null
|
||||
|
||||
/obj/screen/alert/hackingapc/Click()
|
||||
if(!usr || !usr.client)
|
||||
if(!usr || !usr.client || usr != owner)
|
||||
return
|
||||
if(!target)
|
||||
return
|
||||
@@ -520,7 +522,7 @@ so as to remain in compliance with the most up-to-date laws."
|
||||
timeout = 300
|
||||
|
||||
/obj/screen/alert/notify_cloning/Click()
|
||||
if(!usr || !usr.client)
|
||||
if(!usr || !usr.client || usr != owner)
|
||||
return
|
||||
var/mob/dead/observer/G = usr
|
||||
G.reenter_corpse()
|
||||
@@ -534,7 +536,7 @@ so as to remain in compliance with the most up-to-date laws."
|
||||
var/action = NOTIFY_JUMP
|
||||
|
||||
/obj/screen/alert/notify_action/Click()
|
||||
if(!usr || !usr.client)
|
||||
if(!usr || !usr.client || usr != owner)
|
||||
return
|
||||
if(!target)
|
||||
return
|
||||
@@ -568,7 +570,7 @@ so as to remain in compliance with the most up-to-date laws."
|
||||
|
||||
/obj/screen/alert/restrained/Click()
|
||||
var/mob/living/L = usr
|
||||
if(!istype(L) || !L.can_resist())
|
||||
if(!istype(L) || !L.can_resist() || L != owner)
|
||||
return
|
||||
L.changeNext_move(CLICK_CD_RESIST)
|
||||
if((L.mobility_flags & MOBILITY_MOVE) && (L.last_special <= world.time))
|
||||
@@ -576,7 +578,7 @@ so as to remain in compliance with the most up-to-date laws."
|
||||
|
||||
/obj/screen/alert/restrained/buckled/Click()
|
||||
var/mob/living/L = usr
|
||||
if(!istype(L) || !L.can_resist())
|
||||
if(!istype(L) || !L.can_resist() || L != owner)
|
||||
return
|
||||
L.changeNext_move(CLICK_CD_RESIST)
|
||||
if(L.last_special <= world.time)
|
||||
@@ -585,11 +587,14 @@ so as to remain in compliance with the most up-to-date laws."
|
||||
// PRIVATE = only edit, use, or override these if you're editing the system as a whole
|
||||
|
||||
// Re-render all alerts - also called in /datum/hud/show_hud() because it's needed there
|
||||
/datum/hud/proc/reorganize_alerts()
|
||||
/datum/hud/proc/reorganize_alerts(mob/viewmob)
|
||||
var/mob/screenmob = viewmob || mymob
|
||||
if(!screenmob.client)
|
||||
return
|
||||
var/list/alerts = mymob.alerts
|
||||
if(!hud_shown)
|
||||
for(var/i = 1, i <= alerts.len, i++)
|
||||
mymob.client.screen -= alerts[alerts[i]]
|
||||
screenmob.client.screen -= alerts[alerts[i]]
|
||||
return 1
|
||||
for(var/i = 1, i <= alerts.len, i++)
|
||||
var/obj/screen/alert/alert = alerts[alerts[i]]
|
||||
@@ -609,7 +614,10 @@ so as to remain in compliance with the most up-to-date laws."
|
||||
else
|
||||
. = ""
|
||||
alert.screen_loc = .
|
||||
mymob.client.screen |= alert
|
||||
screenmob.client.screen |= alert
|
||||
if(!viewmob)
|
||||
for(var/M in mymob.observers)
|
||||
reorganize_alerts(M)
|
||||
return 1
|
||||
|
||||
/obj/screen/alert/Click(location, control, params)
|
||||
@@ -619,6 +627,8 @@ so as to remain in compliance with the most up-to-date laws."
|
||||
if(paramslist["shift"]) // screen objects don't do the normal Click() stuff so we'll cheat
|
||||
to_chat(usr, "<span class='boldnotice'>[name]</span> - <span class='info'>[desc]</span>")
|
||||
return
|
||||
if(usr != owner)
|
||||
return
|
||||
if(master)
|
||||
return usr.client.Click(master, location, control, params)
|
||||
|
||||
@@ -626,5 +636,5 @@ so as to remain in compliance with the most up-to-date laws."
|
||||
. = ..()
|
||||
severity = 0
|
||||
master = null
|
||||
mob_viewer = null
|
||||
owner = null
|
||||
screen_loc = ""
|
||||
|
||||
@@ -93,3 +93,11 @@
|
||||
screenmob.client.screen -= static_inventory
|
||||
else
|
||||
screenmob.client.screen += static_inventory
|
||||
|
||||
//We should only see observed mob alerts.
|
||||
/datum/hud/ghost/reorganize_alerts(mob/viewmob)
|
||||
var/mob/dead/observer/O = mymob
|
||||
if (istype(O) && O.observetarget)
|
||||
return
|
||||
. = ..()
|
||||
|
||||
|
||||
@@ -189,7 +189,7 @@ GLOBAL_LIST_INIT(available_ui_styles, list(
|
||||
hud_version = display_hud_version
|
||||
persistent_inventory_update(screenmob)
|
||||
screenmob.update_action_buttons(1)
|
||||
reorganize_alerts()
|
||||
reorganize_alerts(screenmob)
|
||||
screenmob.reload_fullscreen()
|
||||
update_parallax_pref(screenmob)
|
||||
|
||||
|
||||
@@ -163,7 +163,8 @@
|
||||
|
||||
if(key_pos || value_mode == VALUE_MODE_FLAG)
|
||||
key_name = lowertext(copytext(str_val, 1, key_pos))
|
||||
key_value = copytext(str_val, key_pos + 1)
|
||||
if(key_pos)
|
||||
key_value = copytext(str_val, key_pos + length(str_val[key_pos]))
|
||||
var/new_key
|
||||
var/new_value
|
||||
var/continue_check_value
|
||||
|
||||
@@ -111,13 +111,13 @@
|
||||
if(!L)
|
||||
continue
|
||||
|
||||
var/firstchar = copytext(L, 1, 2)
|
||||
var/firstchar = L[1]
|
||||
if(firstchar == "#")
|
||||
continue
|
||||
|
||||
var/lockthis = firstchar == "@"
|
||||
if(lockthis)
|
||||
L = copytext(L, 2)
|
||||
L = copytext(L, length(firstchar) + 1)
|
||||
|
||||
var/pos = findtext(L, " ")
|
||||
var/entry = null
|
||||
@@ -125,7 +125,7 @@
|
||||
|
||||
if(pos)
|
||||
entry = lowertext(copytext(L, 1, pos))
|
||||
value = copytext(L, pos + 1)
|
||||
value = copytext(L, pos + length(L[pos]))
|
||||
else
|
||||
entry = lowertext(L)
|
||||
|
||||
@@ -291,7 +291,7 @@ Example config:
|
||||
t = trim(t)
|
||||
if(length(t) == 0)
|
||||
continue
|
||||
else if(copytext(t, 1, 2) == "#")
|
||||
else if(t[1] == "#")
|
||||
continue
|
||||
|
||||
var/pos = findtext(t, " ")
|
||||
@@ -300,7 +300,7 @@ Example config:
|
||||
|
||||
if(pos)
|
||||
command = lowertext(copytext(t, 1, pos))
|
||||
data = copytext(t, pos + 1)
|
||||
data = copytext(t, pos + length(t[pos]))
|
||||
else
|
||||
command = lowertext(t)
|
||||
|
||||
|
||||
@@ -270,6 +270,25 @@ Versioning
|
||||
key = new_key
|
||||
key_type = new_key_type
|
||||
|
||||
/datum/controller/subsystem/blackbox/proc/LogAhelp(ticket, action, message, recipient, sender)
|
||||
|
||||
if(!SSdbcore.Connect())
|
||||
return
|
||||
|
||||
ticket = sanitizeSQL(ticket)
|
||||
action = sanitizeSQL(action)
|
||||
message = sanitizeSQL(message)
|
||||
recipient = recipient ? "'[sanitizeSQL(recipient)]'" : "NULL"
|
||||
sender = sender ? "'[sanitizeSQL(sender)]'" : "NULL"
|
||||
var/server_ip = sanitizeSQL(world.internet_address)
|
||||
var/server_port = sanitizeSQL(world.port)
|
||||
var/round_id = sanitizeSQL(GLOB.round_id)
|
||||
|
||||
var/datum/DBQuery/query_log_ahelp = SSdbcore.NewQuery("INSERT INTO [format_table_name("ticket")] (ticket, action, message, recipient, sender, server_ip, server_port, round_id, timestamp) VALUES ('[ticket]', '[action]', '[message]', [recipient], [sender], INET_ATON(IF('[server_ip]' LIKE '', '0', '[server_ip]')), '[server_port]','[round_id]', '[SQLtime()]')")
|
||||
query_log_ahelp.Execute()
|
||||
qdel(query_log_ahelp)
|
||||
|
||||
|
||||
/datum/controller/subsystem/blackbox/proc/ReportDeath(mob/living/L)
|
||||
set waitfor = FALSE
|
||||
if(sealed)
|
||||
|
||||
@@ -113,7 +113,7 @@ SUBSYSTEM_DEF(economy)
|
||||
D.adjust_money(medical_cash)
|
||||
if(ishostile(m))
|
||||
var/mob/living/simple_animal/hostile/H = m
|
||||
if(H.stat == DEAD && H.z in SSmapping.levels_by_trait(ZTRAIT_STATION))
|
||||
if(H.stat == DEAD && (H.z in SSmapping.levels_by_trait(ZTRAIT_STATION)))
|
||||
dead_monsters++
|
||||
CHECK_TICK
|
||||
var/living_ratio = alive_crew / crew
|
||||
|
||||
@@ -115,7 +115,7 @@ SUBSYSTEM_DEF(job)
|
||||
if(flag && (!(flag in player.client.prefs.be_special)))
|
||||
JobDebug("FOC flag failed, Player: [player], Flag: [flag], ")
|
||||
continue
|
||||
if(player.mind && job.title in player.mind.restricted_roles)
|
||||
if(player.mind && (job.title in player.mind.restricted_roles))
|
||||
JobDebug("FOC incompatible with antagonist role, Player: [player]")
|
||||
continue
|
||||
if(player.client.prefs.job_preferences[job.title] == level)
|
||||
@@ -151,7 +151,7 @@ SUBSYSTEM_DEF(job)
|
||||
JobDebug("GRJ player not enough xp, Player: [player]")
|
||||
continue
|
||||
|
||||
if(player.mind && job.title in player.mind.restricted_roles)
|
||||
if(player.mind && (job.title in player.mind.restricted_roles))
|
||||
JobDebug("GRJ incompatible with antagonist role, Player: [player], Job: [job.title]")
|
||||
continue
|
||||
|
||||
@@ -331,7 +331,7 @@ SUBSYSTEM_DEF(job)
|
||||
JobDebug("DO player not enough xp, Player: [player], Job:[job.title]")
|
||||
continue
|
||||
|
||||
if(player.mind && job.title in player.mind.restricted_roles)
|
||||
if(player.mind && (job.title in player.mind.restricted_roles))
|
||||
JobDebug("DO incompatible with antagonist role, Player: [player], Job:[job.title]")
|
||||
continue
|
||||
|
||||
|
||||
@@ -37,34 +37,34 @@ SUBSYSTEM_DEF(pai)
|
||||
|
||||
switch(option)
|
||||
if("name")
|
||||
t = input("Enter a name for your pAI", "pAI Name", candidate.name) as text|null
|
||||
t = sanitize_name(stripped_input(usr, "Enter a name for your pAI", "pAI Name", candidate.name, MAX_NAME_LEN))
|
||||
if(t)
|
||||
candidate.name = copytext(sanitize_name(t),1,MAX_NAME_LEN)
|
||||
candidate.name = t
|
||||
if("desc")
|
||||
t = input("Enter a description for your pAI", "pAI Description", candidate.description) as message|null
|
||||
t = stripped_multiline_input(usr, "Enter a description for your pAI", "pAI Description", candidate.description, MAX_MESSAGE_LEN)
|
||||
if(t)
|
||||
candidate.description = copytext(sanitize(t),1,MAX_MESSAGE_LEN)
|
||||
candidate.description = t
|
||||
if("role")
|
||||
t = input("Enter a role for your pAI", "pAI Role", candidate.role) as text|null
|
||||
t = stripped_input(usr, "Enter a role for your pAI", "pAI Role", candidate.role, MAX_MESSAGE_LEN)
|
||||
if(t)
|
||||
candidate.role = copytext(sanitize(t),1,MAX_MESSAGE_LEN)
|
||||
candidate.role = t
|
||||
if("ooc")
|
||||
t = input("Enter any OOC comments", "pAI OOC Comments", candidate.comments) as message|null
|
||||
t = stripped_multiline_input(usr, "Enter any OOC comments", "pAI OOC Comments", candidate.comments, MAX_MESSAGE_LEN)
|
||||
if(t)
|
||||
candidate.comments = copytext(sanitize(t),1,MAX_MESSAGE_LEN)
|
||||
candidate.comments = t
|
||||
if("save")
|
||||
candidate.savefile_save(usr)
|
||||
if("load")
|
||||
candidate.savefile_load(usr)
|
||||
//In case people have saved unsanitized stuff.
|
||||
if(candidate.name)
|
||||
candidate.name = copytext(sanitize(candidate.name),1,MAX_NAME_LEN)
|
||||
candidate.name = copytext_char(sanitize(candidate.name),1,MAX_NAME_LEN)
|
||||
if(candidate.description)
|
||||
candidate.description = copytext(sanitize(candidate.description),1,MAX_MESSAGE_LEN)
|
||||
candidate.description = copytext_char(sanitize(candidate.description),1,MAX_MESSAGE_LEN)
|
||||
if(candidate.role)
|
||||
candidate.role = copytext(sanitize(candidate.role),1,MAX_MESSAGE_LEN)
|
||||
candidate.role = copytext_char(sanitize(candidate.role),1,MAX_MESSAGE_LEN)
|
||||
if(candidate.comments)
|
||||
candidate.comments = copytext(sanitize(candidate.comments),1,MAX_MESSAGE_LEN)
|
||||
candidate.comments = copytext_char(sanitize(candidate.comments),1,MAX_MESSAGE_LEN)
|
||||
|
||||
if("submit")
|
||||
if(candidate)
|
||||
|
||||
@@ -46,6 +46,6 @@ PROCESSING_SUBSYSTEM_DEF(networks)
|
||||
var/hex = md5(string)
|
||||
if(!hex)
|
||||
return //errored
|
||||
. = "[copytext(hex, 1, 9)]" //16 ^ 8 possibilities I think.
|
||||
. = "[copytext_char(hex, 1, 9)]" //16 ^ 8 possibilities I think.
|
||||
if(interfaces_by_id[.])
|
||||
return resolve_collisions? make_address("[num2text(rand(HID_RESTRICTED_END, 999999999), 12)]"):null
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#define EXP_ASSIGN_WAYFINDER 1200
|
||||
//Used to process and handle roundstart quirks
|
||||
// - Quirk strings are used for faster checking in code
|
||||
// - Quirk datums are stored and hold different effects, as well as being a vector for applying trait string
|
||||
@@ -43,5 +44,5 @@ PROCESSING_SUBSYSTEM_DEF(quirks)
|
||||
cli.prefs.save_character()
|
||||
|
||||
// Assign wayfinding pinpointer granting quirk if they're new
|
||||
if(cli.get_exp_living(TRUE) < 1200 && !user.has_quirk(/datum/quirk/needswayfinder))
|
||||
if(cli.get_exp_living(TRUE) < EXP_ASSIGN_WAYFINDER && !user.has_quirk(/datum/quirk/needswayfinder))
|
||||
user.add_quirk(/datum/quirk/needswayfinder, TRUE)
|
||||
|
||||
@@ -4,7 +4,15 @@ SUBSYSTEM_DEF(profiler)
|
||||
name = "Profiler"
|
||||
init_order = INIT_ORDER_PROFILER
|
||||
runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY
|
||||
wait = 600
|
||||
wait = 3000
|
||||
flags = SS_NO_TICK_CHECK
|
||||
var/fetch_cost = 0
|
||||
var/write_cost = 0
|
||||
|
||||
/datum/controller/subsystem/profiler/stat_entry(msg)
|
||||
msg += "F:[round(fetch_cost,1)]ms"
|
||||
msg += "|W:[round(write_cost,1)]ms"
|
||||
..(msg)
|
||||
|
||||
/datum/controller/subsystem/profiler/Initialize()
|
||||
if(CONFIG_GET(flag/auto_profile))
|
||||
@@ -40,11 +48,16 @@ SUBSYSTEM_DEF(profiler)
|
||||
stack_trace("Auto profiling unsupported on this byond version")
|
||||
CONFIG_SET(flag/auto_profile, FALSE)
|
||||
#else
|
||||
var/timer = TICK_USAGE_REAL
|
||||
var/current_profile_data = world.Profile(PROFILE_REFRESH,format="json")
|
||||
fetch_cost = MC_AVERAGE(fetch_cost, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer))
|
||||
CHECK_TICK
|
||||
if(!length(current_profile_data)) //Would be nice to have explicit proc to check this
|
||||
stack_trace("Warning, profiling stopped manually before dump.")
|
||||
var/json_file = file("[GLOB.log_directory]/[PROFILER_FILENAME]")
|
||||
if(fexists(json_file))
|
||||
fdel(json_file)
|
||||
timer = TICK_USAGE_REAL
|
||||
WRITE_FILE(json_file, current_profile_data)
|
||||
write_cost = MC_AVERAGE(write_cost, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer))
|
||||
#endif
|
||||
|
||||
@@ -1,75 +1,90 @@
|
||||
/datum/award/achievement/boss
|
||||
category = "Bosses"
|
||||
icon = "baseboss"
|
||||
|
||||
/datum/award/achievement/boss/tendril_exterminator
|
||||
name = "Tendril Exterminator"
|
||||
desc = "Watch your step"
|
||||
database_id = BOSS_MEDAL_TENDRIL
|
||||
icon = "tendril"
|
||||
|
||||
/datum/award/achievement/boss/boss_killer
|
||||
name = "Boss Killer"
|
||||
desc = "You've come a long ways from asking how to switch hands."
|
||||
database_id = "Boss Killer"
|
||||
icon = "firstboss"
|
||||
|
||||
/datum/award/achievement/boss/blood_miner_kill
|
||||
name = "Blood-drunk Miner Killer"
|
||||
desc = "I guess he couldn't handle his drink that well."
|
||||
database_id = BOSS_MEDAL_MINER
|
||||
icon = "miner"
|
||||
|
||||
/datum/award/achievement/boss/bubblegum_kill
|
||||
name = "Bubblegum Killer"
|
||||
desc = "I guess he wasn't made of candy after all"
|
||||
database_id = BOSS_MEDAL_BUBBLEGUM
|
||||
icon = "bbgum"
|
||||
|
||||
/datum/award/achievement/boss/colussus_kill
|
||||
name = "Colussus Killer"
|
||||
/datum/award/achievement/boss/colossus_kill
|
||||
name = "Colossus Killer"
|
||||
desc = "The bigger they are... the better the loot"
|
||||
database_id = BOSS_MEDAL_COLOSSUS
|
||||
icon = "colossus"
|
||||
|
||||
/datum/award/achievement/boss/drake_kill
|
||||
name = "Drake Killer"
|
||||
desc = "Now I can wear Rune Platebodies!"
|
||||
database_id = BOSS_MEDAL_DRAKE
|
||||
icon = "drake"
|
||||
|
||||
/datum/award/achievement/boss/hierophant_kill
|
||||
name = "Hierophant Killer"
|
||||
desc = "Hierophant, but not triumphant."
|
||||
database_id = BOSS_MEDAL_HIEROPHANT
|
||||
icon = "hierophant"
|
||||
|
||||
/datum/award/achievement/boss/legion_kill
|
||||
name = "Legion Killer"
|
||||
desc = "We were many..now we are none."
|
||||
database_id = BOSS_MEDAL_LEGION
|
||||
icon = "legion"
|
||||
|
||||
/datum/award/achievement/boss/swarmer_beacon_kill
|
||||
name = "Swarm Beacon Killer"
|
||||
desc = "GET THEM OFF OF ME!"
|
||||
database_id = BOSS_MEDAL_SWARMERS
|
||||
icon = "swarmer"
|
||||
|
||||
/datum/award/achievement/boss/blood_miner_crusher
|
||||
name = "Blood-drunk Miner Crusher"
|
||||
desc = "I guess he couldn't handle his drink that well."
|
||||
database_id = BOSS_MEDAL_MINER_CRUSHER
|
||||
icon = "miner"
|
||||
|
||||
/datum/award/achievement/boss/bubblegum_crusher
|
||||
name = "Bubblegum Crusher"
|
||||
desc = "I guess he wasn't made of candy after all"
|
||||
database_id = BOSS_MEDAL_BUBBLEGUM_CRUSHER
|
||||
icon = "bbgum"
|
||||
|
||||
/datum/award/achievement/boss/colussus_crusher
|
||||
name = "Colussus Crusher"
|
||||
/datum/award/achievement/boss/colossus_crusher
|
||||
name = "Colossus Crusher"
|
||||
desc = "The bigger they are... the better the loot"
|
||||
database_id = BOSS_MEDAL_COLOSSUS_CRUSHER
|
||||
icon = "colossus"
|
||||
|
||||
/datum/award/achievement/boss/drake_crusher
|
||||
name = "Drake Crusher"
|
||||
desc = "Now I can wear Rune Platebodies!"
|
||||
database_id = BOSS_MEDAL_DRAKE_CRUSHER
|
||||
icon = "drake"
|
||||
|
||||
/datum/award/achievement/boss/hierophant_crusher
|
||||
name = "Hierophant Crusher"
|
||||
desc = "Hierophant, but not triumphant."
|
||||
database_id = BOSS_MEDAL_HIEROPHANT_CRUSHER
|
||||
icon = "hierophant"
|
||||
|
||||
/datum/award/achievement/boss/legion_crusher
|
||||
name = "Legion Crusher"
|
||||
|
||||
@@ -1,41 +1,49 @@
|
||||
/datum/award/achievement/misc
|
||||
category = "Misc"
|
||||
icon = "basemisc"
|
||||
|
||||
/datum/award/achievement/misc/meteor_examine
|
||||
name = "Your Life Before Your Eyes"
|
||||
desc = "Take a close look at hurtling space debris"
|
||||
database_id = MEDAL_METEOR
|
||||
icon = "meteors"
|
||||
|
||||
/datum/award/achievement/misc/pulse
|
||||
name = "Jackpot"
|
||||
desc = "Win a pulse rifle from an arcade machine"
|
||||
database_id = MEDAL_PULSE
|
||||
icon = "jackpot"
|
||||
|
||||
/datum/award/achievement/misc/time_waste
|
||||
name = "Time waster"
|
||||
desc = "Speak no evil, hear no evil, see just errors"
|
||||
database_id = MEDAL_TIMEWASTE
|
||||
icon = "timewaste"
|
||||
|
||||
/datum/award/achievement/misc/feat_of_strength
|
||||
name = "Feat of Strength"
|
||||
desc = "If the rod is immovable, is it passing you or are you passing it?"
|
||||
database_id = MEDAL_RODSUPLEX
|
||||
icon = "featofstrength"
|
||||
|
||||
/datum/award/achievement/misc/round_and_full
|
||||
name = "Round and Full"
|
||||
desc = "Well at least you aren't down the river, I hear they eat people there."
|
||||
database_id = MEDAL_CLOWNCARKING
|
||||
icon = "clownking"
|
||||
|
||||
/datum/award/achievement/misc/the_best_driver
|
||||
name = "The Best Driver"
|
||||
desc = "100 honks later"
|
||||
database_id = MEDAL_THANKSALOT
|
||||
icon = "clownthanks"
|
||||
|
||||
/datum/award/achievement/misc/helbitaljanken
|
||||
name = "Helbitaljanken"
|
||||
desc = "You janked hard"
|
||||
database_id = MEDAL_HELBITALJANKEN
|
||||
|
||||
icon = "helbital"
|
||||
|
||||
/datum/award/achievement/misc/getting_an_upgrade
|
||||
name = "Getting an upgrade"
|
||||
desc = "Make your first unique material item!"
|
||||
@@ -75,3 +83,15 @@
|
||||
name = "One Lean, Mean, Cleaning Machine"
|
||||
desc = "How does it feel to know that your workplace values a mop bucket on wheels more than you?" // i can do better than this give me time
|
||||
database_id = MEDAL_CLEANBOSS
|
||||
|
||||
/datum/award/achievement/misc/rule8
|
||||
name = "Rule 8"
|
||||
desc = "Call an admin this is ILLEGAL!!"
|
||||
database_id = MEDAL_RULE8
|
||||
icon = "rule8"
|
||||
|
||||
/datum/award/achievement/misc/speed_round
|
||||
name = "Long shift"
|
||||
desc = "Well, that didn't take long."
|
||||
database_id = MEDAL_LONGSHIFT
|
||||
icon = "longshift"
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
/datum/award/achievement/skill
|
||||
category = "Skills"
|
||||
icon = "baseskill"
|
||||
|
||||
/datum/award/achievement/skill/legendary_miner
|
||||
name = "Legendary miner"
|
||||
desc = "No mere rock can stop me!"
|
||||
database_id = MEDAL_LEGENDARY_MINER
|
||||
icon = "mining"
|
||||
|
||||
@@ -152,7 +152,7 @@
|
||||
to_chat(src, compose_message(speaker, message_language, raw_message, radio_freq, spans, message_mode))
|
||||
|
||||
/mob/camera/imaginary_friend/proc/friend_talk(message)
|
||||
message = capitalize(trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN)))
|
||||
message = capitalize(trim(copytext_char(sanitize(message), 1, MAX_MESSAGE_LEN)))
|
||||
|
||||
if(!message)
|
||||
return
|
||||
|
||||
@@ -203,6 +203,20 @@
|
||||
special()
|
||||
screen.icon_state = "summary_cult"
|
||||
|
||||
/datum/cinematic/cult_fail
|
||||
id = CINEMATIC_CULT_FAIL
|
||||
|
||||
/datum/cinematic/cult_fail/content()
|
||||
screen.icon_state = "station_intact"
|
||||
sleep(20)
|
||||
cinematic_sound(sound('sound/creatures/narsie_rises.ogg'))
|
||||
sleep(60)
|
||||
cinematic_sound(sound('sound/effects/explosion_distant.ogg'))
|
||||
sleep(10)
|
||||
cinematic_sound(sound('sound/magic/demon_dies.ogg'))
|
||||
sleep(30)
|
||||
special()
|
||||
|
||||
/datum/cinematic/nuke_annihilation
|
||||
id = CINEMATIC_ANNIHILATION
|
||||
|
||||
|
||||
@@ -133,12 +133,11 @@ GLOBAL_LIST_EMPTY(GPS_list)
|
||||
switch(action)
|
||||
if("rename")
|
||||
var/atom/parentasatom = parent
|
||||
var/a = input("Please enter desired tag.", parentasatom.name, gpstag) as text|null
|
||||
var/a = stripped_input(usr, "Please enter desired tag.", parentasatom.name, gpstag, 20)
|
||||
|
||||
if (!a)
|
||||
return
|
||||
|
||||
a = copytext(sanitize(a), 1, 20)
|
||||
gpstag = a
|
||||
. = TRUE
|
||||
parentasatom.name = "global positioning system ([gpstag])"
|
||||
|
||||
@@ -606,7 +606,7 @@
|
||||
if(!stop_messages)
|
||||
to_chat(M, "<span class='warning'>[host] cannot hold [I]!</span>")
|
||||
return FALSE
|
||||
if(is_type_in_typecache(I, cant_hold)) //Check for specific items which this container can't hold.
|
||||
if(is_type_in_typecache(I, cant_hold) || HAS_TRAIT(I, TRAIT_NO_STORAGE_INSERT)) //Items which this container can't hold.
|
||||
if(!stop_messages)
|
||||
to_chat(M, "<span class='warning'>[host] cannot hold [I]!</span>")
|
||||
return FALSE
|
||||
|
||||
+5
-5
@@ -156,8 +156,8 @@
|
||||
if(active)
|
||||
return sequence
|
||||
while(difficulty)
|
||||
var/randnum = rand(1, length(sequence))
|
||||
sequence = copytext(sequence, 1, randnum) + "X" + copytext(sequence, randnum+1, length(sequence)+1)
|
||||
var/randnum = rand(1, length_char(sequence))
|
||||
sequence = copytext_char(sequence, 1, randnum) + "X" + copytext_char(sequence, randnum + 1)
|
||||
difficulty--
|
||||
return sequence
|
||||
|
||||
@@ -461,14 +461,14 @@
|
||||
|
||||
/proc/getleftblocks(input,blocknumber,blocksize)
|
||||
if(blocknumber > 1)
|
||||
return copytext(input,1,((blocksize*blocknumber)-(blocksize-1)))
|
||||
return copytext_char(input,1,((blocksize*blocknumber)-(blocksize-1)))
|
||||
|
||||
/proc/getrightblocks(input,blocknumber,blocksize)
|
||||
if(blocknumber < (length(input)/blocksize))
|
||||
return copytext(input,blocksize*blocknumber+1,length(input)+1)
|
||||
return copytext_char(input,blocksize*blocknumber+1,length(input)+1)
|
||||
|
||||
/proc/getblock(input, blocknumber, blocksize=DNA_BLOCK_SIZE)
|
||||
return copytext(input, blocksize*(blocknumber-1)+1, (blocksize*blocknumber)+1)
|
||||
return copytext_char(input, blocksize*(blocknumber-1)+1, (blocksize*blocknumber)+1)
|
||||
|
||||
/proc/setblock(istring, blocknumber, replacement, blocksize=DNA_BLOCK_SIZE)
|
||||
if(!istring || !blocknumber || !replacement || !blocksize)
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
var/capacity
|
||||
///Add a duct to our network
|
||||
/datum/ductnet/proc/add_duct(obj/machinery/duct/D)
|
||||
if(!D || D in ducts)
|
||||
if(!D || (D in ducts))
|
||||
return
|
||||
ducts += D
|
||||
D.duct = src
|
||||
@@ -52,7 +52,7 @@
|
||||
for(var/A in D.ducts)
|
||||
var/obj/machinery/duct/M = A
|
||||
M.duct = src //forget your old master
|
||||
|
||||
|
||||
destroy_network()
|
||||
///destroy the network and tell all our ducts and plumbers we are gone
|
||||
/datum/ductnet/proc/destroy_network(delete=TRUE)
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
/datum/element/digitalcamo/Attach(datum/target)
|
||||
. = ..()
|
||||
if(!isliving(target) || target in attached_mobs)
|
||||
if(!isliving(target) || (target in attached_mobs))
|
||||
return ELEMENT_INCOMPATIBLE
|
||||
RegisterSignal(target, COMSIG_PARENT_EXAMINE, .proc/on_examine)
|
||||
RegisterSignal(target, COMSIG_LIVING_CAN_TRACK, .proc/can_track)
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
for(var/line in testmerge)
|
||||
var/datum/tgs_revision_information/test_merge/tm = line
|
||||
var/cm = tm.pull_request_commit
|
||||
var/details = ": '" + html_encode(tm.title) + "' by " + html_encode(tm.author) + " at commit " + html_encode(copytext(cm, 1, min(length(cm), 11)))
|
||||
var/details = ": '" + html_encode(tm.title) + "' by " + html_encode(tm.author) + " at commit " + html_encode(copytext_char(cm, 1, 11))
|
||||
if(details && findtext(details, "\[s\]") && (!usr || !usr.client.holder))
|
||||
continue
|
||||
. += "<a href=\"[CONFIG_GET(string/githuburl)]/pull/[tm.number]\">#[tm.number][details]</a><br>"
|
||||
|
||||
@@ -268,8 +268,8 @@
|
||||
var/splitpoint = findtext(prepared_line," ")
|
||||
if(!splitpoint)
|
||||
continue
|
||||
var/command = copytext(prepared_line,1,splitpoint)
|
||||
var/value = copytext(prepared_line,splitpoint+1)
|
||||
var/command = copytext(prepared_line, 1, splitpoint)
|
||||
var/value = copytext(prepared_line, splitpoint + length(prepared_line[splitpoint]))
|
||||
switch(command)
|
||||
if("DELAY")
|
||||
var/delay_value = text2num(value)
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
reset_streak(D)
|
||||
streak = streak+element
|
||||
if(length(streak) > max_streak_length)
|
||||
streak = copytext(streak,2)
|
||||
streak = copytext(streak, 1 + length(streak[1]))
|
||||
|
||||
/datum/martial_art/proc/reset_streak(mob/living/carbon/human/new_target)
|
||||
current_target = new_target
|
||||
|
||||
+3
-3
@@ -183,9 +183,9 @@
|
||||
last_death = world.time
|
||||
|
||||
/datum/mind/proc/store_memory(new_text)
|
||||
var/newlength = length(memory) + length(new_text)
|
||||
var/newlength = length_char(memory) + length_char(new_text)
|
||||
if (newlength > MAX_MESSAGE_LEN * 100)
|
||||
memory = copytext(memory, -newlength-MAX_MESSAGE_LEN * 100)
|
||||
memory = copytext_char(memory, -newlength-MAX_MESSAGE_LEN * 100)
|
||||
memory += "[new_text]<BR>"
|
||||
|
||||
/datum/mind/proc/wipe_memory()
|
||||
@@ -447,7 +447,7 @@
|
||||
assigned_role = new_role
|
||||
|
||||
else if (href_list["memory_edit"])
|
||||
var/new_memo = copytext(sanitize(input("Write new memory", "Memory", memory) as null|message),1,MAX_MESSAGE_LEN)
|
||||
var/new_memo = stripped_multiline_input(usr, "Write new memory", "Memory", memory, MAX_MESSAGE_LEN)
|
||||
if (isnull(new_memo))
|
||||
return
|
||||
memory = new_memo
|
||||
|
||||
@@ -176,7 +176,7 @@
|
||||
/datum/mood_event/notcreepingsevere/add_effects(name)
|
||||
var/list/unstable = list(name)
|
||||
for(var/i in 1 to rand(3,5))
|
||||
unstable += copytext(name, -1)
|
||||
unstable += copytext_char(name, -1)
|
||||
var/unhinged = uppertext(unstable.Join(""))//example Tinea Luxor > TINEA LUXORRRR (with randomness in how long that slur is)
|
||||
description = "<span class='boldwarning'>THEY NEEEEEEED [unhinged]!!</span>\n"
|
||||
|
||||
|
||||
@@ -160,11 +160,13 @@
|
||||
|
||||
/obj/screen/alert/status_effect/strandling/Click(location, control, params)
|
||||
. = ..()
|
||||
to_chat(mob_viewer, "<span class='notice'>You attempt to remove the durathread strand from around your neck.</span>")
|
||||
if(do_after(mob_viewer, 35, null, mob_viewer))
|
||||
if(isliving(mob_viewer))
|
||||
var/mob/living/L = mob_viewer
|
||||
to_chat(mob_viewer, "<span class='notice'>You succesfuly remove the durathread strand.</span>")
|
||||
if(usr != owner)
|
||||
return
|
||||
to_chat(owner, "<span class='notice'>You attempt to remove the durathread strand from around your neck.</span>")
|
||||
if(do_after(owner, 35, null, owner))
|
||||
if(isliving(owner))
|
||||
var/mob/living/L = owner
|
||||
to_chat(owner, "<span class='notice'>You succesfuly remove the durathread strand.</span>")
|
||||
L.remove_status_effect(STATUS_EFFECT_CHOKINGSTRAND)
|
||||
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
..()
|
||||
if(!quirk_mob || (human_only && !ishuman(quirk_mob)) || quirk_mob.has_quirk(type))
|
||||
qdel(src)
|
||||
return
|
||||
quirk_holder = quirk_mob
|
||||
SSquirks.quirk_objects += src
|
||||
to_chat(quirk_holder, gain_text)
|
||||
|
||||
@@ -150,6 +150,9 @@
|
||||
var/mob/living/carbon/human/H = quirk_holder
|
||||
|
||||
wayfinder = new /obj/item/pinpointer/wayfinding
|
||||
wayfinder.owner = H.real_name
|
||||
wayfinder.roundstart = TRUE
|
||||
|
||||
var/list/slots = list(
|
||||
"in your left pocket" = ITEM_SLOT_LPOCKET,
|
||||
"in your right pocket" = ITEM_SLOT_RPOCKET,
|
||||
|
||||
@@ -88,8 +88,8 @@
|
||||
var/list/entry = list()
|
||||
entry["parent"] = "[type]"
|
||||
entry["name"] = verbpath.desc
|
||||
if (copytext(verbpath.name,1,2) == "@")
|
||||
entry["command"] = copytext(verbpath.name,2)
|
||||
if (verbpath.name[1] == "@")
|
||||
entry["command"] = copytext(verbpath.name, length(verbpath.name[1]) + 1)
|
||||
else
|
||||
entry["command"] = replacetext(verbpath.name, " ", "-")
|
||||
|
||||
|
||||
@@ -479,7 +479,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
/area/engine/atmos
|
||||
name = "Atmospherics"
|
||||
icon_state = "atmos"
|
||||
flags_1 = NONE
|
||||
flags_1 = CULT_PERMITTED_1
|
||||
|
||||
/area/engine/atmospherics_engine
|
||||
name = "Atmospherics Engine"
|
||||
@@ -666,7 +666,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
/area/medical/virology
|
||||
name = "Virology"
|
||||
icon_state = "virology"
|
||||
flags_1 = NONE
|
||||
flags_1 = CULT_PERMITTED_1
|
||||
|
||||
/area/medical/morgue
|
||||
name = "Morgue"
|
||||
@@ -850,7 +850,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
/area/janitor
|
||||
name = "Custodial Closet"
|
||||
icon_state = "janitor"
|
||||
flags_1 = NONE
|
||||
flags_1 = CULT_PERMITTED_1
|
||||
|
||||
/area/hydroponics
|
||||
name = "Hydroponics"
|
||||
|
||||
@@ -186,11 +186,6 @@
|
||||
if(HAS_TRAIT(src, TRAIT_XENO_HOST))
|
||||
holder.icon_state = "hudxeno"
|
||||
else if(stat == DEAD || (HAS_TRAIT(src, TRAIT_FAKEDEATH)))
|
||||
if(tod)
|
||||
var/tdelta = round(world.time - timeofdeath)
|
||||
if(tdelta < (DEFIB_TIME_LIMIT * 10))
|
||||
holder.icon_state = "huddefib"
|
||||
return
|
||||
holder.icon_state = "huddead"
|
||||
else
|
||||
switch(virus_threat)
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
trimmed_list.Remove(M)
|
||||
continue
|
||||
if (M.mind)
|
||||
if (restrict_ghost_roles && M.mind.assigned_role in GLOB.exp_specialmap[EXP_TYPE_SPECIAL]) // Are they playing a ghost role?
|
||||
if (restrict_ghost_roles && (M.mind.assigned_role in GLOB.exp_specialmap[EXP_TYPE_SPECIAL])) // Are they playing a ghost role?
|
||||
trimmed_list.Remove(M)
|
||||
continue
|
||||
if (M.mind.assigned_role in restricted_roles) // Does their job allow it?
|
||||
|
||||
@@ -162,6 +162,11 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list(
|
||||
name_part1 = pick_list(ARCADE_FILE, "rpg_adjective_xmas")
|
||||
name_part2 = pick_list(ARCADE_FILE, "rpg_enemy_xmas")
|
||||
weapons = strings(ARCADE_FILE, "rpg_weapon_xmas")
|
||||
else if(SSevents.holidays && SSevents.holidays[VALENTINES])
|
||||
name_action = pick_list(ARCADE_FILE, "rpg_action_valentines")
|
||||
name_part1 = pick_list(ARCADE_FILE, "rpg_adjective_valentines")
|
||||
name_part2 = pick_list(ARCADE_FILE, "rpg_enemy_valentines")
|
||||
weapons = strings(ARCADE_FILE, "rpg_weapon_valentines")
|
||||
else
|
||||
name_action = pick_list(ARCADE_FILE, "rpg_action")
|
||||
name_part1 = pick_list(ARCADE_FILE, "rpg_adjective")
|
||||
|
||||
@@ -578,7 +578,7 @@
|
||||
R.fields["mrace"] = rando_race.type
|
||||
|
||||
R.fields["name"] = mob_occupant.real_name
|
||||
R.fields["id"] = copytext(md5(mob_occupant.real_name), 2, 6)
|
||||
R.fields["id"] = copytext_char(md5(mob_occupant.real_name), 2, 6)
|
||||
R.fields["UE"] = dna.unique_enzymes
|
||||
R.fields["UI"] = dna.uni_identity
|
||||
R.fields["SE"] = dna.mutation_index
|
||||
|
||||
@@ -127,15 +127,20 @@
|
||||
|
||||
if("crossserver")
|
||||
if(authenticated==2)
|
||||
var/dest = href_list["cross_dest"]
|
||||
if(!checkCCcooldown())
|
||||
to_chat(usr, "<span class='warning'>Arrays recycling. Please stand by.</span>")
|
||||
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, FALSE)
|
||||
return
|
||||
var/input = stripped_multiline_input(usr, "Please choose a message to transmit to allied stations. Please be aware that this process is very expensive, and abuse will lead to... termination.", "Send a message to an allied station.", "")
|
||||
var/warning = dest == "all" ? "Please choose a message to transmit to allied stations." : "Please choose a message to transmit to [dest] sector station."
|
||||
var/input = stripped_multiline_input(usr, "[warning] Please be aware that this process is very expensive, and abuse will lead to... termination.", "Send a message to an allied station.", "")
|
||||
if(!input || !(usr in view(1,src)) || !checkCCcooldown())
|
||||
return
|
||||
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE)
|
||||
send2otherserver("[station_name()]", input,"Comms_Console")
|
||||
if(dest == "all")
|
||||
send2otherserver("[station_name()]", input,"Comms_Console")
|
||||
else
|
||||
send2otherserver("[station_name()]", input,"Comms_Console", list(dest))
|
||||
minor_announce(input, title = "Outgoing message to allied station")
|
||||
usr.log_talk(input, LOG_SAY, tag="message to the other server")
|
||||
message_admins("[ADMIN_LOOKUPFLW(usr)] has sent a message to the other server.")
|
||||
@@ -470,9 +475,15 @@
|
||||
if (authenticated==2)
|
||||
dat += "<BR><BR><B>Captain Functions</B>"
|
||||
dat += "<BR>\[ <A HREF='?src=[REF(src)];operation=announce'>Make a Captain's Announcement</A> \]"
|
||||
var/cross_servers_count = length(CONFIG_GET(keyed_list/cross_server))
|
||||
if(cross_servers_count)
|
||||
dat += "<BR>\[ <A HREF='?src=[REF(src)];operation=crossserver'>Send a message to [cross_servers_count == 1 ? "an " : ""]allied station[cross_servers_count > 1 ? "s" : ""]</A> \]"
|
||||
var/list/cross_servers = CONFIG_GET(keyed_list/cross_server)
|
||||
var/our_id = CONFIG_GET(string/cross_comms_name)
|
||||
if(cross_servers.len)
|
||||
for(var/server in cross_servers)
|
||||
if(server == our_id)
|
||||
continue
|
||||
dat += "<BR>\[ <A HREF='?src=[REF(src)];operation=crossserver=all;cross_dest=[server]'>Send a message to station in [server] sector.</A> \]"
|
||||
if(cross_servers.len > 2)
|
||||
dat += "<BR>\[ <A HREF='?src=[REF(src)];operation=crossserver;cross_dest=all'>Send a message to all allied stations</A> \]"
|
||||
if(SSmapping.config.allow_custom_shuttles)
|
||||
dat += "<BR>\[ <A HREF='?src=[REF(src)];operation=purchase_menu'>Purchase Shuttle</A> \]"
|
||||
dat += "<BR>\[ <A HREF='?src=[REF(src)];operation=changeseclevel'>Change Alert Level</A> \]"
|
||||
|
||||
@@ -248,13 +248,18 @@
|
||||
var/max_line_len = 7*DNA_BLOCK_SIZE
|
||||
if(viable_occupant)
|
||||
temp_html += "<div class='dnaBlockNumber'>1</div>"
|
||||
var/len = length(viable_occupant.dna.uni_identity)
|
||||
for(var/i=1, i<=len, i++)
|
||||
temp_html += "<a class='dnaBlock' href='?src=[REF(src)];task=pulseui;num=[i];'>[copytext(viable_occupant.dna.uni_identity,i,i+1)]</a>"
|
||||
if ((i % max_line_len) == 0)
|
||||
var/char = ""
|
||||
var/ui_text = viable_occupant.dna.uni_identity
|
||||
var/len_byte = length(ui_text)
|
||||
var/char_it = 0
|
||||
for(var/byte_it = 1, byte_it <= len_byte, byte_it += length(char))
|
||||
char_it++
|
||||
char = ui_text[byte_it]
|
||||
temp_html += "<a class='dnaBlock' href='?src=[REF(src)];task=pulseui;num=[char_it];'>[char]</a>"
|
||||
if((char_it % max_line_len) == 0)
|
||||
temp_html += "</div><div class='clearBoth'>"
|
||||
if((i % DNA_BLOCK_SIZE) == 0 && i < len)
|
||||
temp_html += "<div class='dnaBlockNumber'>[(i / DNA_BLOCK_SIZE) + 1]</div>"
|
||||
if((char_it % DNA_BLOCK_SIZE) == 0 && byte_it < len_byte)
|
||||
temp_html += "<div class='dnaBlockNumber'>[(char_it / DNA_BLOCK_SIZE) + 1]</div>"
|
||||
else
|
||||
temp_html += "---------"
|
||||
temp_html += "</div></div><br><h1>Buffer Menu</h1>"
|
||||
@@ -516,7 +521,7 @@
|
||||
if(!scrambled)
|
||||
for(var/block in 1 to A.blocks)
|
||||
var/whole_sequence = get_valid_gene_string(mutation)
|
||||
var/sequence = copytext(whole_sequence, 1+(block-1)*(DNA_SEQUENCE_LENGTH*2),(DNA_SEQUENCE_LENGTH*2*block+1))
|
||||
var/sequence = copytext_char(whole_sequence, 1+(block-1)*(DNA_SEQUENCE_LENGTH*2),(DNA_SEQUENCE_LENGTH*2*block+1))
|
||||
temp_html += "<div class='statusLine'><table class='statusDisplay'><tr>"
|
||||
for(var/i in 1 to DNA_SEQUENCE_LENGTH)
|
||||
var/num = 1+(i-1)*2
|
||||
@@ -698,7 +703,7 @@
|
||||
viable_occupant.radiation += (RADIATION_IRRADIATION_MULTIPLIER*radduration*radstrength)/(connected.damage_coeff ** 2) //Read comment in "transferbuffer" section above for explanation
|
||||
switch(href_list["task"]) //Same thing as there but values are even lower, on best part they are about 0.0*, effectively no damage
|
||||
if("pulseui")
|
||||
var/len = length(viable_occupant.dna.uni_identity)
|
||||
var/len = length_char(viable_occupant.dna.uni_identity)
|
||||
num = WRAP(num, 1, len+1)
|
||||
num = randomize_radiation_accuracy(num, radduration + (connected.precision_coeff ** 2), len) //Each manipulator level above 1 makes randomization as accurate as selected time + manipulator lvl^2
|
||||
//Value is this high for the same reason as with laser - not worth the hassle of upgrading if the bonus is low
|
||||
@@ -706,12 +711,12 @@
|
||||
var/subblock = num - block*DNA_BLOCK_SIZE
|
||||
last_change = "UI #[block]-[subblock]; "
|
||||
|
||||
var/hex = copytext(viable_occupant.dna.uni_identity, num, num+1)
|
||||
var/hex = copytext_char(viable_occupant.dna.uni_identity, num, num+1)
|
||||
last_change += "[hex]"
|
||||
hex = scramble(hex, radstrength, radduration)
|
||||
last_change += "->[hex]"
|
||||
|
||||
viable_occupant.dna.uni_identity = copytext(viable_occupant.dna.uni_identity, 1, num) + hex + copytext(viable_occupant.dna.uni_identity, num+1, 0)
|
||||
viable_occupant.dna.uni_identity = copytext_char(viable_occupant.dna.uni_identity, 1, num) + hex + copytext_char(viable_occupant.dna.uni_identity, num + 1)
|
||||
viable_occupant.updateappearance(mutations_overlay_update=1)
|
||||
else
|
||||
current_screen = "mainmenu"
|
||||
@@ -823,7 +828,7 @@
|
||||
var/true_genes = GET_SEQUENCE(current_mutation)
|
||||
new_gene = true_genes[num]
|
||||
jokerready = world.time + JOKER_TIMEOUT - (JOKER_UPGRADE * (connected.precision_coeff-1))
|
||||
sequence = copytext(sequence, 1, num) + new_gene + copytext(sequence, num+1, length(sequence)+1)
|
||||
sequence = copytext_char(sequence, 1, num) + new_gene + copytext_char(sequence, num + 1)
|
||||
viable_occupant.dna.mutation_index[path] = sequence
|
||||
viable_occupant.radiation += RADIATION_STRENGTH_MULTIPLIER/connected.damage_coeff
|
||||
viable_occupant.domutcheck()
|
||||
|
||||
@@ -124,7 +124,7 @@
|
||||
to_chat(usr, "<span class='danger'>Unauthorized access.</span>")
|
||||
|
||||
else if(href_list["warn"])
|
||||
var/warning = copytext(sanitize(input(usr,"Message:","Enter your message here!","")),1,MAX_MESSAGE_LEN)
|
||||
var/warning = stripped_input(usr, "Message:", "Enter your message here!", "", MAX_MESSAGE_LEN)
|
||||
if(!warning)
|
||||
return
|
||||
var/obj/item/implant/I = locate(href_list["warn"]) in GLOB.tracked_implants
|
||||
|
||||
@@ -608,7 +608,7 @@ What a mess.*/
|
||||
switch(href_list["field"])
|
||||
if("name")
|
||||
if(istype(active1, /datum/data/record) || istype(active2, /datum/data/record))
|
||||
var/t1 = copytext(sanitize(input("Please input name:", "Secure. records", active1.fields["name"], null) as text),1,MAX_MESSAGE_LEN)
|
||||
var/t1 = stripped_input(usr, "Please input name:", "Secure. records", active1.fields["name"], MAX_MESSAGE_LEN)
|
||||
if(!canUseSecurityRecordsConsole(usr, t1, a1))
|
||||
return
|
||||
if(istype(active1, /datum/data/record))
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
icon_keyboard = "teleport_key"
|
||||
light_color = LIGHT_COLOR_BLUE
|
||||
circuit = /obj/item/circuitboard/computer/teleporter
|
||||
ui_x = 475
|
||||
ui_y = 130
|
||||
var/regime_set = "Teleporter"
|
||||
var/id
|
||||
var/obj/machinery/teleport/station/power_station
|
||||
@@ -31,34 +33,29 @@
|
||||
break
|
||||
return power_station
|
||||
|
||||
/obj/machinery/computer/teleporter/ui_interact(mob/user)
|
||||
. = ..()
|
||||
var/data = "<h3>Teleporter Status</h3>"
|
||||
if(!power_station)
|
||||
data += "<div class='statusDisplay'>No power station linked.</div>"
|
||||
else if(!power_station.teleporter_hub)
|
||||
data += "<div class='statusDisplay'>No hub linked.</div>"
|
||||
/obj/machinery/computer/teleporter/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "teleporter", name, ui_x, ui_y, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/computer/teleporter/ui_data(mob/user)
|
||||
var/list/data = list()
|
||||
data["power_station"] = power_station ? TRUE : FALSE
|
||||
data["teleporter_hub"] = power_station?.teleporter_hub ? TRUE : FALSE
|
||||
data["regime_set"] = regime_set
|
||||
data["target"] = !target ? "None" : "[get_area(target)] [(regime_set != "Gate") ? "" : "Teleporter"]"
|
||||
data["calibrating"] = calibrating
|
||||
|
||||
if(power_station?.teleporter_hub?.calibrated || power_station?.teleporter_hub?.accuracy >= 3)
|
||||
data["calibrated"] = TRUE
|
||||
else
|
||||
data += "<div class='statusDisplay'>Current regime: [regime_set]<BR>"
|
||||
data += "Current target: [(!target) ? "None" : "[get_area(target)] [(regime_set != "Gate") ? "" : "Teleporter"]"]<BR>"
|
||||
if(calibrating)
|
||||
data += "Calibration: <font color='yellow'>In Progress</font>"
|
||||
else if(power_station.teleporter_hub.calibrated || power_station.teleporter_hub.accuracy >= 3)
|
||||
data += "Calibration: <font color='green'>Optimal</font>"
|
||||
else
|
||||
data += "Calibration: <font color='red'>Sub-Optimal</font>"
|
||||
data += "</div><BR>"
|
||||
data["calibrated"] = FALSE
|
||||
|
||||
data += "<A href='?src=[REF(src)];regimeset=1'>Change regime</A><BR>"
|
||||
data += "<A href='?src=[REF(src)];settarget=1'>Set target</A><BR>"
|
||||
return data
|
||||
|
||||
data += "<BR><A href='?src=[REF(src)];calibrate=1'>Calibrate Hub</A>"
|
||||
|
||||
var/datum/browser/popup = new(user, "teleporter", name, 400, 400)
|
||||
popup.set_content(data)
|
||||
popup.open()
|
||||
|
||||
/obj/machinery/computer/teleporter/Topic(href, href_list)
|
||||
/obj/machinery/computer/teleporter/ui_act(action, params)
|
||||
if(..())
|
||||
return
|
||||
|
||||
@@ -69,38 +66,39 @@
|
||||
say("Error: Calibration in progress. Stand by.")
|
||||
return
|
||||
|
||||
if(href_list["regimeset"])
|
||||
power_station.engaged = 0
|
||||
power_station.teleporter_hub.update_icon()
|
||||
power_station.teleporter_hub.calibrated = 0
|
||||
reset_regime()
|
||||
if(href_list["settarget"])
|
||||
power_station.engaged = 0
|
||||
power_station.teleporter_hub.update_icon()
|
||||
power_station.teleporter_hub.calibrated = 0
|
||||
set_target(usr)
|
||||
if(href_list["calibrate"])
|
||||
if(!target)
|
||||
say("Error: No target set to calibrate to.")
|
||||
return
|
||||
if(power_station.teleporter_hub.calibrated || power_station.teleporter_hub.accuracy >= 3)
|
||||
say("Hub is already calibrated!")
|
||||
return
|
||||
say("Processing hub calibration to target...")
|
||||
switch(action)
|
||||
if("regimeset")
|
||||
power_station.engaged = FALSE
|
||||
power_station.teleporter_hub.update_icon()
|
||||
power_station.teleporter_hub.calibrated = FALSE
|
||||
reset_regime()
|
||||
. = TRUE
|
||||
if("settarget")
|
||||
power_station.engaged = FALSE
|
||||
power_station.teleporter_hub.update_icon()
|
||||
power_station.teleporter_hub.calibrated = FALSE
|
||||
set_target(usr)
|
||||
. = TRUE
|
||||
if("calibrate")
|
||||
if(!target)
|
||||
say("Error: No target set to calibrate to.")
|
||||
return
|
||||
if(power_station.teleporter_hub.calibrated || power_station.teleporter_hub.accuracy >= 3)
|
||||
say("Hub is already calibrated!")
|
||||
return
|
||||
|
||||
calibrating = 1
|
||||
power_station.update_icon()
|
||||
spawn(50 * (3 - power_station.teleporter_hub.accuracy)) //Better parts mean faster calibration
|
||||
calibrating = 0
|
||||
if(check_hub_connection())
|
||||
power_station.teleporter_hub.calibrated = 1
|
||||
say("Calibration complete.")
|
||||
else
|
||||
say("Error: Unable to detect hub.")
|
||||
say("Processing hub calibration to target...")
|
||||
calibrating = TRUE
|
||||
power_station.update_icon()
|
||||
updateDialog()
|
||||
|
||||
updateDialog()
|
||||
spawn(50 * (3 - power_station.teleporter_hub.accuracy)) //Better parts mean faster calibration
|
||||
calibrating = FALSE
|
||||
if(check_hub_connection())
|
||||
power_station.teleporter_hub.calibrated = TRUE
|
||||
say("Calibration complete.")
|
||||
else
|
||||
say("Error: Unable to detect hub.")
|
||||
power_station.update_icon()
|
||||
. = TRUE
|
||||
|
||||
/obj/machinery/computer/teleporter/proc/check_hub_connection()
|
||||
if(!power_station)
|
||||
|
||||
@@ -305,7 +305,7 @@
|
||||
if(speed <= 0)
|
||||
speed = 1
|
||||
if("setpath")
|
||||
var/newpath = copytext(sanitize(input(usr, "Please define a new path!",,path) as text|null),1,MAX_MESSAGE_LEN)
|
||||
var/newpath = stripped_input(usr, "Please define a new path!", "New Path", path, MAX_MESSAGE_LEN)
|
||||
if(newpath && newpath != "")
|
||||
moving = 0 // stop moving
|
||||
path = newpath
|
||||
@@ -366,13 +366,19 @@
|
||||
// Generates the rpath variable using the path string, think of this as "string2list"
|
||||
// Doesn't use params2list() because of the akward way it stacks entities
|
||||
rpath = list() // clear rpath
|
||||
var/maximum_character = min( 50, length(path) ) // chooses the maximum length of the iterator. 50 max length
|
||||
var/maximum_characters = 50
|
||||
var/lentext = length(path)
|
||||
var/nextchar = ""
|
||||
var/charcount = 0
|
||||
|
||||
for(var/i=1, i<=maximum_character, i++) // iterates through all characters in path
|
||||
for(var/i = 1, i <= lentext, i += length(nextchar)) // iterates through all characters in path
|
||||
nextchar = path[i] // find next character
|
||||
|
||||
var/nextchar = copytext(path, i, i+1) // find next character
|
||||
|
||||
if(!(nextchar in list(";", "&", "*", " "))) // if char is a separator, ignore
|
||||
rpath += copytext(path, i, i+1) // else, add to list
|
||||
if(nextchar in list(";", "&", "*", " ")) // if char is a separator, ignore
|
||||
continue
|
||||
|
||||
rpath += nextchar // else, add to list
|
||||
// there doesn't HAVE to be separators but it makes paths syntatically visible
|
||||
charcount++
|
||||
if(charcount >= maximum_characters)
|
||||
break
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
var/index = findtext(e, "=") // format is "key=value"
|
||||
if(index)
|
||||
var/key = copytext(e, 1, index)
|
||||
var/val = copytext(e, index+1)
|
||||
var/val = copytext(e, index + length(e[index]))
|
||||
codes[key] = val
|
||||
else
|
||||
codes[e] = "1"
|
||||
@@ -189,7 +189,7 @@ Transponder Codes:<UL>"}
|
||||
usr.set_machine(src)
|
||||
|
||||
if(href_list["locedit"])
|
||||
var/newloc = copytext(sanitize(input("Enter New Location", "Navigation Beacon", location) as text|null),1,MAX_MESSAGE_LEN)
|
||||
var/newloc = stripped_input(usr, "Enter New Location", "Navigation Beacon", location, MAX_MESSAGE_LEN)
|
||||
if(newloc)
|
||||
location = newloc
|
||||
glob_lists_register()
|
||||
|
||||
@@ -162,7 +162,7 @@ GLOBAL_LIST_EMPTY(allCasters)
|
||||
NEWSCASTER.update_icon()
|
||||
|
||||
/datum/newscaster/feed_network/proc/save_photo(icon/photo)
|
||||
var/photo_file = copytext(md5("\icon[photo]"), 1, 6)
|
||||
var/photo_file = copytext_char(md5("\icon[photo]"), 1, 6)
|
||||
if(!fexists("[GLOB.log_directory]/photos/[photo_file].png"))
|
||||
//Clean up repeated frames
|
||||
var/icon/clean = new /icon()
|
||||
@@ -506,8 +506,6 @@ GLOBAL_LIST_EMPTY(allCasters)
|
||||
scan_user(usr)
|
||||
if(href_list["set_channel_name"])
|
||||
channel_name = stripped_input(usr, "Provide a Feed Channel Name", "Network Channel Handler", "", MAX_NAME_LEN)
|
||||
while (findtext(channel_name," ") == 1)
|
||||
channel_name = copytext(channel_name,2,length(channel_name)+1)
|
||||
updateUsrDialog()
|
||||
else if(href_list["set_channel_lock"])
|
||||
c_locked = !c_locked
|
||||
@@ -682,7 +680,7 @@ GLOBAL_LIST_EMPTY(allCasters)
|
||||
updateUsrDialog()
|
||||
else if(href_list["new_comment"])
|
||||
var/datum/newscaster/feed_message/FM = locate(href_list["new_comment"]) in viewing_channel.messages
|
||||
var/cominput = copytext(stripped_input(usr, "Write your message:", "New comment", null),1,141)
|
||||
var/cominput = stripped_input(usr, "Write your message:", "New comment", null, 140)
|
||||
if(cominput)
|
||||
scan_user(usr)
|
||||
var/datum/newscaster/feed_comment/FC = new/datum/newscaster/feed_comment
|
||||
|
||||
@@ -237,10 +237,10 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments)
|
||||
usr.set_machine(src)
|
||||
add_fingerprint(usr)
|
||||
|
||||
if(reject_bad_text(href_list["write"]))
|
||||
to_department = ckey(href_list["write"]) //write contains the string of the receiving department's name
|
||||
if(href_list["write"])
|
||||
to_department = ckey(reject_bad_text(href_list["write"])) //write contains the string of the receiving department's name
|
||||
|
||||
var/new_message = (to_department in GLOB.req_console_ckey_departments) && copytext(reject_bad_text(input(usr, "Write your message:", "Awaiting Input", "")),1,MAX_MESSAGE_LEN)
|
||||
var/new_message = (to_department in GLOB.req_console_ckey_departments) && stripped_input(usr, "Write your message:", "Awaiting Input", "", MAX_MESSAGE_LEN)
|
||||
if(new_message)
|
||||
to_department = GLOB.req_console_ckey_departments[to_department]
|
||||
message = new_message
|
||||
@@ -248,7 +248,7 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments)
|
||||
priority = CLAMP(text2num(href_list["priority"]), REQ_NORMAL_MESSAGE_PRIORITY, REQ_EXTREME_MESSAGE_PRIORITY)
|
||||
|
||||
if(href_list["writeAnnouncement"])
|
||||
var/new_message = copytext(reject_bad_text(input(usr, "Write your message:", "Awaiting Input", "")),1,MAX_MESSAGE_LEN)
|
||||
var/new_message = reject_bad_text(stripped_input(usr, "Write your message:", "Awaiting Input", "", MAX_MESSAGE_LEN))
|
||||
if(new_message)
|
||||
message = new_message
|
||||
priority = CLAMP(text2num(href_list["priority"]) || REQ_NORMAL_MESSAGE_PRIORITY, REQ_NORMAL_MESSAGE_PRIORITY, REQ_EXTREME_MESSAGE_PRIORITY)
|
||||
@@ -344,9 +344,8 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments)
|
||||
updateUsrDialog()
|
||||
|
||||
/obj/machinery/requests_console/say_mod(input, message_mode)
|
||||
var/ending = copytext(input, length(input) - 2)
|
||||
if (ending == "!!!")
|
||||
. = "blares"
|
||||
if(spantext_char(input, "!", -3))
|
||||
return "blares"
|
||||
else
|
||||
. = ..()
|
||||
|
||||
|
||||
@@ -229,7 +229,7 @@
|
||||
"Starving",
|
||||
"Obese"
|
||||
)
|
||||
if(new_nutrition && new_nutrition in nutrition_list)
|
||||
if(new_nutrition && (new_nutrition in nutrition_list))
|
||||
switch(new_nutrition)
|
||||
if("Starving")
|
||||
detect_nutrition = NUTRITION_LEVEL_STARVING
|
||||
|
||||
@@ -225,8 +225,6 @@
|
||||
active_power_usage = 50
|
||||
max_integrity = 300
|
||||
var/active = FALSE
|
||||
var/power = 0
|
||||
var/maximum_stored_power = 500
|
||||
var/locked = TRUE
|
||||
var/shield_range = 8
|
||||
var/obj/structure/cable/attached // the attached cable
|
||||
@@ -236,6 +234,9 @@
|
||||
desc = "A shield generator meant for use in xenobiology."
|
||||
req_access = list(ACCESS_XENOBIOLOGY)
|
||||
|
||||
/obj/machinery/power/shieldwallgen/anchored
|
||||
anchored = TRUE
|
||||
|
||||
/obj/machinery/power/shieldwallgen/Initialize()
|
||||
. = ..()
|
||||
if(anchored)
|
||||
|
||||
@@ -58,14 +58,14 @@
|
||||
/// Call with no arguments to disable.
|
||||
/obj/machinery/status_display/proc/set_message(m1, m2)
|
||||
if(m1)
|
||||
index1 = (length(m1) > CHARS_PER_LINE)
|
||||
index1 = (length_char(m1) > CHARS_PER_LINE)
|
||||
message1 = m1
|
||||
else
|
||||
message1 = ""
|
||||
index1 = 0
|
||||
|
||||
if(m2)
|
||||
index2 = (length(m2) > CHARS_PER_LINE)
|
||||
index2 = (length_char(m2) > CHARS_PER_LINE)
|
||||
message2 = m2
|
||||
else
|
||||
message2 = ""
|
||||
@@ -80,19 +80,19 @@
|
||||
|
||||
var/line1 = message1
|
||||
if(index1)
|
||||
line1 = copytext("[message1]|[message1]", index1, index1+CHARS_PER_LINE)
|
||||
var/message1_len = length(message1)
|
||||
line1 = copytext_char("[message1]|[message1]", index1, index1 + CHARS_PER_LINE)
|
||||
var/message1_len = length_char(message1)
|
||||
index1 += SCROLL_SPEED
|
||||
if(index1 > message1_len)
|
||||
index1 -= message1_len
|
||||
if(index1 > message1_len + 1)
|
||||
index1 -= (message1_len + 1)
|
||||
|
||||
var/line2 = message2
|
||||
if(index2)
|
||||
line2 = copytext("[message2]|[message2]", index2, index2+CHARS_PER_LINE)
|
||||
var/message2_len = length(message2)
|
||||
line2 = copytext_char("[message2]|[message2]", index2, index2 + CHARS_PER_LINE)
|
||||
var/message2_len = length_char(message2)
|
||||
index2 += SCROLL_SPEED
|
||||
if(index2 > message2_len)
|
||||
index2 -= message2_len
|
||||
if(index2 > message2_len + 1)
|
||||
index2 -= (message2_len + 1)
|
||||
|
||||
update_display(line1, line2)
|
||||
if (!index1 && !index2)
|
||||
@@ -133,7 +133,7 @@
|
||||
var/line1 = "-[shuttle.getModeStr()]-"
|
||||
var/line2 = shuttle.getTimerStr()
|
||||
|
||||
if(length(line2) > CHARS_PER_LINE)
|
||||
if(length_char(line2) > CHARS_PER_LINE)
|
||||
line2 = "error"
|
||||
update_display(line1, line2)
|
||||
else
|
||||
@@ -245,7 +245,7 @@
|
||||
else
|
||||
line1 = "CARGO"
|
||||
line2 = SSshuttle.supply.getTimerStr()
|
||||
if(length(line2) > CHARS_PER_LINE)
|
||||
if(length_char(line2) > CHARS_PER_LINE)
|
||||
line2 = "Error"
|
||||
update_display(line1, line2)
|
||||
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
set waitfor = FALSE
|
||||
|
||||
// Perform final composition steps on the message.
|
||||
var/message = copytext(data["message"], 1, MAX_BROADCAST_LEN)
|
||||
var/message = copytext_char(data["message"], 1, MAX_BROADCAST_LEN)
|
||||
if(!message)
|
||||
return
|
||||
var/compression = data["compression"]
|
||||
|
||||
@@ -179,7 +179,7 @@
|
||||
|
||||
|
||||
if("id")
|
||||
var/newid = copytext(reject_bad_text(input(usr, "Specify the new ID for this machine", src, id) as null|text),1,MAX_MESSAGE_LEN)
|
||||
var/newid = reject_bad_text(stripped_input(usr, "Specify the new ID for this machine", src, id, MAX_MESSAGE_LEN))
|
||||
if(newid && canAccess(usr))
|
||||
id = newid
|
||||
temp = "<font color = #666633>-% New ID assigned: \"[id]\" %-</font>"
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
|
||||
for(var/obj/machinery/telecomms/hub/H in links)
|
||||
for(var/obj/machinery/telecomms/relay/R in H.links)
|
||||
if(R.can_receive(signal) && R.z in signal.levels)
|
||||
if(R.can_receive(signal) && (R.z in signal.levels))
|
||||
return TRUE
|
||||
|
||||
return FALSE
|
||||
|
||||
@@ -926,7 +926,7 @@
|
||||
return
|
||||
|
||||
/obj/mecha/proc/moved_inside(mob/living/carbon/human/H)
|
||||
if(H && H.client && H in range(1))
|
||||
if(H && H.client && (H in range(1)))
|
||||
occupant = H
|
||||
H.forceMove(src)
|
||||
H.update_mouse_pointer()
|
||||
|
||||
@@ -345,12 +345,10 @@
|
||||
|
||||
//Changes the exosuit name.
|
||||
if(href_list["change_name"])
|
||||
var/userinput = input(usr, "Choose a new exosuit name.", "Rename exosuit", "") as null|text
|
||||
if(usr != occupant || usr.incapacitated())
|
||||
var/userinput = stripped_input(usr, "Choose a new exosuit name.", "Rename exosuit", "", MAX_NAME_LEN)
|
||||
if(!userinput || usr != occupant || usr.incapacitated())
|
||||
return
|
||||
if(!isnull(userinput))
|
||||
var/newname = copytext(sanitize_name(userinput),1,MAX_NAME_LEN)
|
||||
name = newname ? newname : initial(name)
|
||||
name = userinput
|
||||
return
|
||||
|
||||
//Toggles ID upload.
|
||||
|
||||
@@ -130,7 +130,7 @@
|
||||
if (smooth & SMOOTH_DIAGONAL)
|
||||
for (var/O in overlays)
|
||||
var/image/I = O
|
||||
if (copytext(I.icon_state, 1, 3) == "d-")
|
||||
if(copytext(I.icon_state, 1, 3) == "d-") //3 == length("d-") + 1
|
||||
return
|
||||
|
||||
var/stuff_on_wall = 0
|
||||
|
||||
@@ -178,6 +178,8 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list(
|
||||
desc = "A device used to rapidly pipe things."
|
||||
icon = 'icons/obj/tools.dmi'
|
||||
icon_state = "rpd"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
|
||||
flags_1 = CONDUCT_1
|
||||
force = 10
|
||||
throwforce = 10
|
||||
|
||||
@@ -7,7 +7,7 @@ RSF
|
||||
name = "\improper Rapid-Service-Fabricator"
|
||||
desc = "A device used to rapidly deploy service items."
|
||||
icon = 'icons/obj/tools.dmi'
|
||||
icon_state = "rcd"
|
||||
icon_state = "rsf"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
|
||||
opacity = 0
|
||||
@@ -35,6 +35,7 @@ RSF
|
||||
matter += 10
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 10, TRUE)
|
||||
to_chat(user, "<span class='notice'>The RSF now holds [matter]/30 fabrication-units.</span>")
|
||||
icon_state = "rsf"
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -69,9 +70,11 @@ RSF
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(!R.cell || R.cell.charge < 200)
|
||||
to_chat(user, "<span class='warning'>You do not have enough power to use [src].</span>")
|
||||
icon_state = "rsf_empty"
|
||||
return
|
||||
else if (matter < 1)
|
||||
to_chat(user, "<span class='warning'>\The [src] doesn't have enough matter left.</span>")
|
||||
icon_state = "rsf_empty"
|
||||
return
|
||||
|
||||
var/turf/T = get_turf(A)
|
||||
|
||||
@@ -398,30 +398,18 @@ update_label()
|
||||
if(user.incapacitated())
|
||||
return
|
||||
if(popup_input == "Forge/Reset" && !forged)
|
||||
var/input_text = input(user, "What name would you like to put on this card? Leave blank to randomise.", "Agent card name", registered_name ? registered_name : (ishuman(user) ? user.real_name : user.name))as text | null
|
||||
|
||||
if (isnull(input_text))
|
||||
return
|
||||
|
||||
var/target_name = copytext(sanitize(input_text), 1, 26)
|
||||
if(!target_name || target_name == "Unknown" || target_name == "floor" || target_name == "wall" || target_name == "r-wall") //Same as mob/dead/new_player/preferences.dm
|
||||
if (ishuman(user))
|
||||
var/mob/living/carbon/human/human_agent = user
|
||||
|
||||
// Invalid/blank names give a randomly generated one.
|
||||
if (human_agent.gender == "male")
|
||||
registered_name = "[pick(GLOB.first_names_male)] [pick(GLOB.last_names)]"
|
||||
else if (human_agent.gender == "female")
|
||||
registered_name = "[pick(GLOB.first_names_female)] [pick(GLOB.last_names)]"
|
||||
else
|
||||
registered_name = "[pick(GLOB.first_names)] [pick(GLOB.last_names)]"
|
||||
var/input_name = stripped_input(user, "What name would you like to put on this card? Leave blank to randomise.", "Agent card name", registered_name ? registered_name : (ishuman(user) ? user.real_name : user.name), MAX_NAME_LEN)
|
||||
input_name = reject_bad_name(input_name)
|
||||
if(!input_name)
|
||||
// Invalid/blank names give a randomly generated one.
|
||||
if(user.gender == MALE)
|
||||
input_name = "[pick(GLOB.first_names_male)] [pick(GLOB.last_names)]"
|
||||
else if(user.gender == FEMALE)
|
||||
input_name = "[pick(GLOB.first_names_female)] [pick(GLOB.last_names)]"
|
||||
else
|
||||
alert ("Invalid name.")
|
||||
return
|
||||
else
|
||||
registered_name = target_name
|
||||
input_name = "[pick(GLOB.first_names)] [pick(GLOB.last_names)]"
|
||||
|
||||
var/target_occupation = copytext(sanitize(input(user, "What occupation would you like to put on this card?\nNote: This will not grant any access levels other than Maintenance.", "Agent card job assignment", assignment ? assignment : "Assistant") as text | null),1,MAX_MESSAGE_LEN)
|
||||
var/target_occupation = stripped_input(user, "What occupation would you like to put on this card?\nNote: This will not grant any access levels other than Maintenance.", "Agent card job assignment", assignment ? assignment : "Assistant", MAX_MESSAGE_LEN)
|
||||
if(!target_occupation)
|
||||
registered_name = ""
|
||||
return
|
||||
|
||||
@@ -217,7 +217,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
/obj/item/clothing/mask/cigarette/extinguish()
|
||||
if(!lit)
|
||||
return
|
||||
name = copytext(name,5,length(name)+1)
|
||||
name = copytext_char(name, 5) //5 == length_char("lit ") + 1
|
||||
attack_verb = null
|
||||
hitsound = null
|
||||
damtype = BRUTE
|
||||
|
||||
@@ -390,7 +390,7 @@
|
||||
to_chat(user, "<span class='notice'>You spray a [temp] on \the [target.name]</span>")
|
||||
|
||||
if(length(text_buffer) > 1)
|
||||
text_buffer = copytext(text_buffer,2)
|
||||
text_buffer = copytext(text_buffer, length(text_buffer[1]) + 1)
|
||||
SStgui.update_uis(src)
|
||||
|
||||
if(post_noise)
|
||||
|
||||
@@ -306,7 +306,6 @@
|
||||
var/req_defib = TRUE
|
||||
var/combat = FALSE //If it penetrates armor and gives additional functionality
|
||||
var/grab_ghost = FALSE
|
||||
var/tlimit = DEFIB_TIME_LIMIT * 10
|
||||
var/base_icon_state = "defibpaddles"
|
||||
|
||||
/obj/item/twohanded/shockpaddles/ComponentInitialize()
|
||||
@@ -356,13 +355,16 @@
|
||||
cooldown = FALSE
|
||||
update_icon()
|
||||
|
||||
/obj/item/twohanded/shockpaddles/New(mainunit)
|
||||
..()
|
||||
if(check_defib_exists(mainunit, src) && req_defib)
|
||||
defib = mainunit
|
||||
forceMove(defib)
|
||||
busy = FALSE
|
||||
update_icon()
|
||||
/obj/item/twohanded/shockpaddles/Initialize()
|
||||
. = ..()
|
||||
ADD_TRAIT(src, TRAIT_NO_STORAGE_INSERT, GENERIC_ITEM_TRAIT) //stops shockpaddles from being inserted in BoH
|
||||
if(!req_defib)
|
||||
return //If it doesn't need a defib, just say it exists
|
||||
if (!loc || !istype(loc, /obj/item/defibrillator)) //To avoid weird issues from admin spawns
|
||||
return INITIALIZE_HINT_QDEL
|
||||
defib = loc
|
||||
busy = FALSE
|
||||
update_icon()
|
||||
|
||||
/obj/item/twohanded/shockpaddles/update_icon_state()
|
||||
icon_state = "[base_icon_state][wielded]"
|
||||
@@ -397,15 +399,6 @@
|
||||
forceMove(defib)
|
||||
defib.update_power()
|
||||
|
||||
/obj/item/twohanded/shockpaddles/proc/check_defib_exists(mainunit, mob/living/carbon/M, obj/O)
|
||||
if(!req_defib)
|
||||
return TRUE //If it doesn't need a defib, just say it exists
|
||||
if (!mainunit || !istype(mainunit, /obj/item/defibrillator)) //To avoid weird issues from admin spawns
|
||||
qdel(O)
|
||||
return FALSE
|
||||
else
|
||||
return TRUE
|
||||
|
||||
/obj/item/twohanded/shockpaddles/attack(mob/M, mob/user)
|
||||
|
||||
if(busy)
|
||||
@@ -460,8 +453,6 @@
|
||||
var/obj/item/organ/heart = H.getorgan(/obj/item/organ/heart)
|
||||
if(H.suiciding || H.hellbound || HAS_TRAIT(H, TRAIT_HUSK))
|
||||
return
|
||||
if((world.time - H.timeofdeath) > tlimit)
|
||||
return
|
||||
if((H.getBruteLoss() >= MAX_REVIVE_BRUTE_DAMAGE) || (H.getFireLoss() >= MAX_REVIVE_FIRE_DAMAGE))
|
||||
return
|
||||
if(!heart || (heart.organ_flags & ORGAN_FAILING))
|
||||
@@ -568,7 +559,6 @@
|
||||
playsound(src, 'sound/machines/defib_charge.ogg', 75, FALSE)
|
||||
var/total_burn = 0
|
||||
var/total_brute = 0
|
||||
var/tplus = world.time - H.timeofdeath //length of time spent dead
|
||||
var/obj/item/organ/heart = H.getorgan(/obj/item/organ/heart)
|
||||
if(do_after(user, 20, target = H)) //placed on chest and short delay to shock for dramatic effect, revive time is 5sec total
|
||||
for(var/obj/item/carried_item in H.contents)
|
||||
@@ -592,8 +582,6 @@
|
||||
failed = "<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Recovery of patient impossible. Further attempts futile.</span>"
|
||||
else if (H.hellbound)
|
||||
failed = "<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Patient's soul appears to be on another plane of existence. Further attempts futile.</span>"
|
||||
else if (tplus > tlimit)
|
||||
failed = "<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Body has decayed for too long. Further attempts futile.</span>"
|
||||
else if (!heart)
|
||||
failed = "<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Patient's heart is missing.</span>"
|
||||
else if (heart.organ_flags & ORGAN_FAILING)
|
||||
|
||||
@@ -533,13 +533,13 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
if("Clear")//Clears messages
|
||||
tnote = null
|
||||
if("Ringtone")
|
||||
var/t = input(U, "Please enter new ringtone", name, ttone) as text|null
|
||||
var/t = stripped_input(U, "Please enter new ringtone", name, ttone, 20)
|
||||
if(in_range(src, U) && loc == U && t)
|
||||
if(SEND_SIGNAL(src, COMSIG_PDA_CHANGE_RINGTONE, U, t) & COMPONENT_STOP_RINGTONE_CHANGE)
|
||||
U << browse(null, "window=pda")
|
||||
return
|
||||
else
|
||||
ttone = copytext(sanitize(t), 1, 20)
|
||||
ttone = t
|
||||
else
|
||||
U << browse(null, "window=pda")
|
||||
return
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
|
||||
/obj/item/flashlight/attack(mob/living/carbon/M, mob/living/carbon/human/user)
|
||||
add_fingerprint(user)
|
||||
if(istype(M) && on && user.zone_selected in list(BODY_ZONE_PRECISE_EYES, BODY_ZONE_PRECISE_MOUTH))
|
||||
if(istype(M) && on && (user.zone_selected in list(BODY_ZONE_PRECISE_EYES, BODY_ZONE_PRECISE_MOUTH)))
|
||||
|
||||
if((HAS_TRAIT(user, TRAIT_CLUMSY) || HAS_TRAIT(user, TRAIT_DUMB)) && prob(50)) //too dumb to use flashlight properly
|
||||
return ..() //just hit them in the head
|
||||
@@ -388,7 +388,7 @@
|
||||
return TRUE
|
||||
|
||||
/obj/item/flashlight/emp/attack(mob/living/M, mob/living/user)
|
||||
if(on && user.zone_selected in list(BODY_ZONE_PRECISE_EYES, BODY_ZONE_PRECISE_MOUTH)) // call original attack when examining organs
|
||||
if(on && (user.zone_selected in list(BODY_ZONE_PRECISE_EYES, BODY_ZONE_PRECISE_MOUTH))) // call original attack when examining organs
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
to_chat(usr,"<span class='warning'>You [transmit_holder ? "enable" : "disable"] your pAI's [transmitting ? "outgoing" : "incoming"] radio transmissions!</span>")
|
||||
to_chat(pai,"<span class='warning'>Your owner has [transmit_holder ? "enabled" : "disabled"] your [transmitting ? "outgoing" : "incoming"] radio transmissions!</span>")
|
||||
if(href_list["setlaws"])
|
||||
var/newlaws = copytext(sanitize(input("Enter any additional directives you would like your pAI personality to follow. Note that these directives will not override the personality's allegiance to its imprinted master. Conflicting directives will be ignored.", "pAI Directive Configuration", pai.laws.supplied[1]) as message|null),1,MAX_MESSAGE_LEN)
|
||||
var/newlaws = stripped_multiline_input("Enter any additional directives you would like your pAI personality to follow. Note that these directives will not override the personality's allegiance to its imprinted master. Conflicting directives will be ignored.", "pAI Directive Configuration", pai.laws.supplied[1], MAX_MESSAGE_LEN)
|
||||
if(newlaws && pai)
|
||||
pai.add_supplied_law(0,newlaws)
|
||||
if(href_list["toggle_holo"])
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
|
||||
/obj/item/radio/intercom/examine(mob/user)
|
||||
. = ..()
|
||||
. += "<span class='notice'>Use [MODE_TOKEN_INTERCOM] when nearby to speak into it.</span>"
|
||||
if(!unfastened)
|
||||
. += "<span class='notice'>It's <b>screwed</b> and secured to the wall.</span>"
|
||||
else
|
||||
|
||||
@@ -37,7 +37,7 @@ GENE SCANNER
|
||||
|
||||
/obj/item/t_scanner/proc/toggle_on()
|
||||
on = !on
|
||||
icon_state = copytext(icon_state, 1, length(icon_state))+"[on]"
|
||||
icon_state = copytext_char(icon_state, 1, -1) + "[on]"
|
||||
if(on)
|
||||
START_PROCESSING(SSobj, src)
|
||||
else
|
||||
@@ -320,8 +320,7 @@ GENE SCANNER
|
||||
if(M.tod && (M.stat == DEAD || ((HAS_TRAIT(M, TRAIT_FAKEDEATH)) && !advanced)))
|
||||
render_list += "<span class='info ml-1'>Time of Death: [M.tod]</span>\n"
|
||||
var/tdelta = round(world.time - M.timeofdeath)
|
||||
if(tdelta < (DEFIB_TIME_LIMIT * 10))
|
||||
render_list += "<span class='alert ml-1'><b>Subject died [DisplayTimeText(tdelta)] ago, defibrillation may be possible!</b></span>\n"
|
||||
render_list += "<span class='alert ml-1'><b>Subject died [DisplayTimeText(tdelta)] ago.</b></span>\n"
|
||||
|
||||
for(var/thing in M.diseases)
|
||||
var/datum/disease/D = thing
|
||||
@@ -734,10 +733,10 @@ GENE SCANNER
|
||||
|
||||
if(sequence)
|
||||
var/display
|
||||
for(var/i in 0 to length(sequence) / DNA_MUTATION_BLOCKS-1)
|
||||
for(var/i in 0 to length_char(sequence) / DNA_MUTATION_BLOCKS-1)
|
||||
if(i)
|
||||
display += "-"
|
||||
display += copytext(sequence, 1 + i*DNA_MUTATION_BLOCKS, DNA_MUTATION_BLOCKS*(1+i) + 1)
|
||||
display += copytext_char(sequence, 1 + i*DNA_MUTATION_BLOCKS, DNA_MUTATION_BLOCKS*(1+i) + 1)
|
||||
|
||||
to_chat(user, "<span class='boldnotice'>[display]</span><br>")
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
custom_price = 1750
|
||||
custom_premium_price = 1750
|
||||
|
||||
/obj/item/sensor_device/attack_self(mob/user)
|
||||
GLOB.crewmonitor.show(user,src) //Proc already exists, just had to call it
|
||||
|
||||
@@ -120,8 +120,8 @@
|
||||
/obj/item/organ/cyberimp/arm/toolset,
|
||||
/obj/item/organ/cyberimp/arm/surgery,
|
||||
/obj/item/organ/cyberimp/chest/thrusters,
|
||||
/obj/item/organ/lungs/cybernetic/upgraded,
|
||||
/obj/item/organ/liver/cybernetic/upgraded) //cyberimplants range from a nice bonus to fucking broken bullshit so no subtypesof
|
||||
/obj/item/organ/lungs/cybernetic/tier3,
|
||||
/obj/item/organ/liver/cybernetic/tier3) //cyberimplants range from a nice bonus to fucking broken bullshit so no subtypesof
|
||||
for(var/V in templist)
|
||||
var/atom/A = V
|
||||
augment_list[initial(A.name)] = A
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
var/active = FALSE
|
||||
var/atom/movable/target //The thing we're searching for
|
||||
var/minimum_range = 0 //at what range the pinpointer declares you to be at your destination
|
||||
var/ignore_suit_sensor_level = FALSE // Do we find people even if their suit sensors are turned off
|
||||
var/alert = FALSE // TRUE to display things more seriously
|
||||
var/process_scan = TRUE // some pinpointers change target every time they scan, which means we can't have it change very process but instead when it turns on.
|
||||
var/icon_suffix = "" // for special pinpointer icons
|
||||
@@ -70,25 +69,31 @@
|
||||
if(here.z != there.z)
|
||||
. += "pinon[alert ? "alert" : ""]null[icon_suffix]"
|
||||
return
|
||||
. += get_direction_icon(here, there)
|
||||
|
||||
///Called by update_icon after sanity. There is a target
|
||||
/obj/item/pinpointer/proc/get_direction_icon(here, there)
|
||||
if(get_dist_euclidian(here,there) <= minimum_range)
|
||||
. += "pinon[alert ? "alert" : ""]direct[icon_suffix]"
|
||||
return "pinon[alert ? "alert" : ""]direct[icon_suffix]"
|
||||
else
|
||||
setDir(get_dir(here, there))
|
||||
switch(get_dist(here, there))
|
||||
if(1 to 8)
|
||||
. += "pinon[alert ? "alert" : "close"][icon_suffix]"
|
||||
return "pinon[alert ? "alert" : "close"][icon_suffix]"
|
||||
if(9 to 16)
|
||||
. += "pinon[alert ? "alert" : "medium"][icon_suffix]"
|
||||
return "pinon[alert ? "alert" : "medium"][icon_suffix]"
|
||||
if(16 to INFINITY)
|
||||
. += "pinon[alert ? "alert" : "far"][icon_suffix]"
|
||||
return "pinon[alert ? "alert" : "far"][icon_suffix]"
|
||||
|
||||
/obj/item/pinpointer/crew // A replacement for the old crew monitoring consoles
|
||||
name = "crew pinpointer"
|
||||
desc = "A handheld tracking device that points to crew suit sensors."
|
||||
icon_state = "pinpointer_crew"
|
||||
custom_price = 1000
|
||||
custom_price = 900
|
||||
custom_premium_price = 900
|
||||
var/has_owner = FALSE
|
||||
var/pinpointer_owner = null
|
||||
var/ignore_suit_sensor_level = FALSE /// Do we find people even if their suit sensors are turned off
|
||||
|
||||
/obj/item/pinpointer/crew/proc/trackable(mob/living/carbon/human/H)
|
||||
var/turf/here = get_turf(src)
|
||||
@@ -158,6 +163,26 @@
|
||||
if(!target) //target can be set to null from above code, or elsewhere
|
||||
active = FALSE
|
||||
|
||||
/obj/item/pinpointer/crew/prox //Weaker version of crew monitor primarily for EMT
|
||||
name = "proximity crew pinpointer"
|
||||
desc = "A handheld tracking device that displays its proximity to crew suit sensors."
|
||||
icon_state = "pinpointer_crewprox"
|
||||
custom_price = 300
|
||||
|
||||
/obj/item/pinpointer/crew/prox/get_direction_icon(here, there)
|
||||
var/size = ""
|
||||
if(here == there)
|
||||
size = "small"
|
||||
else
|
||||
switch(get_dist(here, there))
|
||||
if(1 to 4)
|
||||
size = "xtrlarge"
|
||||
if(5 to 16)
|
||||
size = "large"
|
||||
//17 through 28 use the normal pinion, "pinondirect"
|
||||
if(29 to INFINITY)
|
||||
size = "small"
|
||||
return "pinondirect[size]"
|
||||
|
||||
/obj/item/pinpointer/pair
|
||||
name = "pair pinpointer"
|
||||
|
||||
@@ -216,6 +216,7 @@
|
||||
else if(Kisser.partner == src && !plush_child) //the one advancing does not take ownership of the child and we have a one child policy in the toyshop
|
||||
user.visible_message("<span class='notice'>[user] is going to break [Kisser] and [src] by bashing them like that.</span>",
|
||||
"<span class='notice'>[Kisser] passionately embraces [src] in your hands. Look away you perv!</span>")
|
||||
user.client.give_award(/datum/award/achievement/misc/rule8, user)
|
||||
if(plop(Kisser))
|
||||
user.visible_message("<span class='notice'>Something drops at the feet of [user].</span>",
|
||||
"<span class='notice'>The miracle of oh god did that just come out of [src]?!</span>")
|
||||
|
||||
@@ -44,9 +44,9 @@
|
||||
if(H.stat == DEAD || H == user)
|
||||
continue
|
||||
if(H.mind && (has_job_loyalties || has_role_loyalties))
|
||||
if(has_job_loyalties && H.mind.assigned_role in job_loyalties)
|
||||
if(has_job_loyalties && (H.mind.assigned_role in job_loyalties))
|
||||
inspired += H
|
||||
else if(has_role_loyalties && H.mind.special_role in role_loyalties)
|
||||
else if(has_role_loyalties && (H.mind.special_role in role_loyalties))
|
||||
inspired += H
|
||||
else if(check_inspiration(H))
|
||||
inspired += H
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user