Merge branch 'master' into upstream-merge-27773

This commit is contained in:
LetterJay
2017-06-06 09:05:26 -05:00
committed by GitHub
359 changed files with 404750 additions and 231336 deletions
+4
View File
@@ -0,0 +1,4 @@
[submodule "tools/tgstation-server"]
path = tools/tgstation-server
url = https://github.com/tgstation/tgstation-server
branch = master
+20
View File
@@ -1,3 +1,23 @@
20 May 2017, by Jordie0608
Created table `round` to replace tracking of the datapoints 'round_start', 'round_end', 'server_ip', 'game_mode', 'round_end_results', 'end_error', 'end_proper', 'emergency_shuttle', 'map_name' and 'station_renames' in the `feedback` table.
Once created this table is populated with rows from the `feedback` table.
START TRANSACTION;
CREATE TABLE `feedback`.`round` (`id` INT(11) NOT NULL AUTO_INCREMENT, `start_datetime` DATETIME NOT NULL, `end_datetime` DATETIME NULL, `server_ip` INT(10) UNSIGNED NOT NULL, `server_port` SMALLINT(5) UNSIGNED NOT NULL, `commit_hash` CHAR(40) NULL, `game_mode` VARCHAR(32) NULL, `game_mode_result` VARCHAR(64) NULL, `end_state` VARCHAR(64) NULL, `shuttle_name` VARCHAR(64) NULL, `map_name` VARCHAR(32) NULL, `station_name` VARCHAR(80) NULL, PRIMARY KEY (`id`));
INSERT INTO `feedback`.`round`
(`id`, `start_datetime`, `end_datetime`, `server_ip`, `server_port`, `commit_hash`, `game_mode`, `game_mode_result`, `end_state`, `shuttle_name`, `map_name`, `station_name`)
SELECT DISTINCT ri.round_id, IFNULL(STR_TO_DATE(st.details,'%a %b %e %H:%i:%s %Y'), TIMESTAMP(0)), STR_TO_DATE(et.details,'%a %b %e %H:%i:%s %Y'), IFNULL(INET_ATON(SUBSTRING_INDEX(IF(si.details = '', '0', IF(SUBSTRING_INDEX(si.details, ':', 1) LIKE '%_._%', si.details, '0')), ':', 1)), INET_ATON(0)), IFNULL(IF(si.details LIKE '%:_%', CAST(SUBSTRING_INDEX(si.details, ':', -1) AS UNSIGNED), '0'), '0'), ch.details, gm.details, mr.details, IFNULL(es.details, ep.details), ss.details, mn.details, sn.details
FROM `feedback`.`feedback`AS ri
LEFT JOIN `feedback`.`feedback` AS st ON ri.round_id = st.round_id AND st.var_name = "round_start" LEFT JOIN `feedback`.`feedback` AS et ON ri.round_id = et.round_id AND et.var_name = "round_end" LEFT JOIN `feedback`.`feedback` AS si ON ri.round_id = si.round_id AND si.var_name = "server_ip" LEFT JOIN `feedback`.`feedback` AS ch ON ri.round_id = ch.round_id AND ch.var_name = "revision" LEFT JOIN `feedback`.`feedback` AS gm ON ri.round_id = gm.round_id AND gm.var_name = "game_mode" LEFT JOIN `feedback`.`feedback` AS mr ON ri.round_id = mr.round_id AND mr.var_name = "round_end_result" LEFT JOIN `feedback`.`feedback` AS es ON ri.round_id = es.round_id AND es.var_name = "end_state" LEFT JOIN `feedback`.`feedback` AS ep ON ri.round_id = ep.round_id AND ep.var_name = "end_proper" LEFT JOIN `feedback`.`feedback` AS ss ON ri.round_id = ss.round_id AND ss.var_name = "emergency_shuttle" LEFT JOIN `feedback`.`feedback` AS mn ON ri.round_id = mn.round_id AND mn.var_name = "map_name" LEFT JOIN `feedback`.`feedback` AS sn ON ri.round_id = sn.round_id AND sn.var_name = "station_renames";
COMMIT;
It's not necessary to delete the rows from the `feedback` table but henceforth these datapoints will be in the `round` table.
Remember to add a prefix to the table names if you use them
----------------------------------------------------
21 April 2017, by Jordie0608
Modified table 'player', adding the column 'accountjoindate', removing the column 'id' and making the column 'ckey' the primary key.
+23
View File
@@ -362,6 +362,29 @@ CREATE TABLE `poll_vote` (
KEY `idx_pvote_optionid_ckey` (`optionid`,`ckey`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `round`
--
DROP TABLE IF EXISTS `round`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `round` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`start_datetime` DATETIME NOT NULL,
`end_datetime` DATETIME NULL,
`server_ip` INT(10) UNSIGNED NOT NULL,
`server_port` SMALLINT(5) UNSIGNED NOT NULL,
`commit_hash` CHAR(40) NULL,
`game_mode` VARCHAR(32) NULL,
`game_mode_result` VARCHAR(64) NULL,
`end_state` VARCHAR(64) NULL,
`shuttle_name` VARCHAR(64) NULL,
`map_name` VARCHAR(32) NULL,
`station_name` VARCHAR(80) NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
+23
View File
@@ -362,6 +362,29 @@ CREATE TABLE `SS13_poll_vote` (
KEY `idx_pvote_optionid_ckey` (`optionid`,`ckey`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `SS13_round`
--
DROP TABLE IF EXISTS `SS13_round`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `SS13_round` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`start_datetime` DATETIME NOT NULL,
`end_datetime` DATETIME NULL,
`server_ip` INT(10) UNSIGNED NOT NULL,
`server_port` SMALLINT(5) UNSIGNED NOT NULL,
`commit_hash` CHAR(40) NULL,
`game_mode` VARCHAR(32) NULL,
`game_mode_result` VARCHAR(64) NULL,
`end_state` VARCHAR(64) NULL,
`shuttle_name` VARCHAR(64) NULL,
`map_name` VARCHAR(32) NULL,
`station_name` VARCHAR(80) NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
@@ -13,7 +13,7 @@
"ad" = (
/obj/structure/flora/ausbushes/leafybush,
/turf/open/floor/plating/beach/sand,
/area/ruin/powered)
/area/ruin/powered/beach)
"ae" = (
/obj/structure/table,
/obj/item/weapon/storage/toolbox/mechanical,
@@ -21,44 +21,47 @@
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/beach)
"af" = (
/obj/structure/table,
/obj/item/clothing/mask/gas,
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/beach)
"ag" = (
/obj/structure/reagent_dispensers/fueltank,
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/beach)
"ah" = (
/obj/machinery/power/smes,
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/beach)
"ai" = (
/obj/machinery/portable_atmospherics/canister/oxygen,
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/beach)
"aj" = (
/turf/closed/wall/mineral/sandstone{
baseturf = /turf/open/floor/plating/beach/sand
},
/area/ruin/powered)
/area/ruin/powered/beach)
"ak" = (
/obj/structure/toilet,
/obj/effect/decal/sandeffect,
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/beach)
"al" = (
/obj/structure/urinal{
pixel_y = 32
@@ -66,7 +69,7 @@
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/beach)
"am" = (
/obj/structure/urinal{
pixel_y = 32
@@ -75,13 +78,16 @@
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/beach)
"an" = (
/obj/item/device/flashlight/lantern,
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/beach)
"ao" = (
/obj/structure/sink{
dir = 4;
@@ -96,213 +102,219 @@
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/beach)
"ap" = (
/obj/structure/flora/ausbushes/sparsegrass,
/turf/open/floor/plating/beach/sand,
/area/ruin/powered)
/area/ruin/powered/beach)
"aq" = (
/obj/structure/flora/ausbushes/sunnybush,
/turf/open/floor/plating/beach/sand,
/area/ruin/powered)
/area/ruin/powered/beach)
"ar" = (
/turf/open/floor/plating/beach/sand,
/area/ruin/powered)
/area/ruin/powered/beach)
"as" = (
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/beach)
"at" = (
/obj/item/weapon/tank/internals/oxygen,
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/beach)
"au" = (
/obj/effect/decal/sandeffect,
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/beach)
"av" = (
/obj/machinery/door/airlock/hatch,
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/beach)
"aw" = (
/obj/machinery/door/airlock/sandstone,
/turf/open/floor/wood,
/area/ruin/powered)
/area/ruin/powered/beach)
"ax" = (
/obj/structure/extinguisher_cabinet,
/turf/closed/wall/mineral/sandstone{
baseturf = /turf/open/floor/plating/beach/sand
},
/area/ruin/powered)
/area/ruin/powered/beach)
"ay" = (
/obj/machinery/door/airlock/hatch,
/obj/effect/decal/sandeffect,
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/beach)
"az" = (
/obj/item/clothing/neck/necklace/dope,
/obj/item/weapon/reagent_containers/spray/spraytan,
/turf/open/floor/plating/beach/sand,
/area/ruin/powered)
/area/ruin/powered/beach)
"aA" = (
/obj/effect/decal/sandeffect,
/turf/open/floor/plating/beach/sand,
/area/ruin/powered)
/area/ruin/powered/beach)
"aB" = (
/obj/effect/turf_decal/stripes/asteroid/line{
dir = 1
},
/turf/open/floor/plasteel/asteroid{
baseturf = /turf/open/floor/plating/beach/sand;
tag = "icon-asteroidwarning (NORTH)"
},
/obj/effect/turf_decal/stripes/asteroid/line{
dir = 1
},
/area/ruin/powered)
/area/ruin/powered/beach)
"aC" = (
/turf/open/floor/wood,
/area/ruin/powered)
/area/ruin/powered/beach)
"aD" = (
/obj/structure/table,
/obj/item/weapon/storage/box/drinkingglasses,
/obj/item/weapon/storage/box/drinkingglasses,
/obj/item/weapon/reagent_containers/food/drinks/shaker,
/obj/item/weapon/storage/box/beakers,
/obj/machinery/light{
dir = 1
},
/turf/open/floor/wood,
/area/ruin/powered)
/area/ruin/powered/beach)
"aE" = (
/obj/structure/table,
/obj/machinery/reagentgrinder,
/turf/open/floor/wood,
/area/ruin/powered)
/area/ruin/powered/beach)
"aF" = (
/obj/machinery/vending/boozeomat{
emagged = 1;
req_access_txt = "0"
},
/turf/open/floor/wood,
/area/ruin/powered)
/area/ruin/powered/beach)
"aG" = (
/obj/structure/table,
/obj/item/weapon/book/manual/barman_recipes,
/obj/item/weapon/reagent_containers/glass/rag,
/turf/open/floor/wood,
/area/ruin/powered)
/area/ruin/powered/beach)
"aH" = (
/obj/structure/table,
/obj/item/weapon/storage/box/donkpockets,
/obj/machinery/light{
dir = 1
},
/turf/open/floor/wood,
/area/ruin/powered)
/area/ruin/powered/beach)
"aI" = (
/obj/structure/table,
/obj/machinery/microwave,
/turf/open/floor/wood,
/area/ruin/powered)
/area/ruin/powered/beach)
"aJ" = (
/obj/structure/closet/crate/bin,
/obj/item/weapon/tank/internals/emergency_oxygen,
/obj/item/trash/candy,
/obj/item/toy/talking/owl,
/obj/effect/turf_decal/stripes/asteroid/line{
dir = 1
},
/turf/open/floor/plasteel/asteroid{
baseturf = /turf/open/floor/plating/beach/sand;
tag = "icon-asteroidwarning (NORTH)"
},
/obj/effect/turf_decal/stripes/asteroid/line{
dir = 1
},
/area/ruin/powered)
/area/ruin/powered/beach)
"aK" = (
/turf/open/floor/plasteel/asteroid{
baseturf = /turf/open/floor/plating/beach/sand
},
/area/ruin/powered)
/area/ruin/powered/beach)
"aL" = (
/obj/effect/mob_spawn/human/bartender/alive{
name = "beach bum sleeper"
},
/turf/open/floor/wood,
/area/ruin/powered)
/area/ruin/powered/beach)
"aM" = (
/obj/structure/reagent_dispensers/beerkeg,
/turf/open/floor/wood,
/area/ruin/powered)
/area/ruin/powered/beach)
"aN" = (
/obj/machinery/vending/cigarette,
/turf/open/floor/plasteel/asteroid{
baseturf = /turf/open/floor/plating/beach/sand
},
/area/ruin/powered)
/area/ruin/powered/beach)
"aO" = (
/obj/structure/stacklifter,
/turf/open/floor/plating/beach/sand,
/area/ruin/powered)
/area/ruin/powered/beach)
"aP" = (
/obj/structure/table/wood,
/turf/open/floor/wood,
/area/ruin/powered)
/area/ruin/powered/beach)
"aQ" = (
/obj/structure/table/wood,
/obj/item/device/flashlight/lamp,
/turf/open/floor/wood,
/area/ruin/powered)
/area/ruin/powered/beach)
"aR" = (
/obj/structure/table/wood,
/obj/item/weapon/reagent_containers/food/drinks/bottle/tequila,
/turf/open/floor/wood,
/area/ruin/powered)
/area/ruin/powered/beach)
"aS" = (
/obj/machinery/processor,
/turf/open/floor/wood,
/area/ruin/powered)
/area/ruin/powered/beach)
"aT" = (
/obj/machinery/vending/cola,
/turf/open/floor/plasteel/asteroid{
baseturf = /turf/open/floor/plating/beach/sand
},
/area/ruin/powered)
/area/ruin/powered/beach)
"aU" = (
/obj/effect/overlay/palmtree_l,
/turf/open/floor/plating/beach/sand,
/area/ruin/powered)
/area/ruin/powered/beach)
"aV" = (
/obj/effect/mob_spawn/human/beach/alive{
flavour_text = "You're, like, totally a dudebro, bruh. Ch'yea. You came here, like, on spring break, hopin' to pick up some bangin' hot chicks, y'knaw?";
pocket2 = /obj/item/weapon/reagent_containers/food/snacks/pizzaslice/dank;
l_pocket = /obj/item/weapon/reagent_containers/food/snacks/pizzaslice/dank;
uniform = /obj/item/clothing/under/pants/youngfolksjeans
},
/turf/open/floor/plating/beach/sand,
/area/ruin/powered)
/area/ruin/powered/beach)
"aW" = (
/obj/structure/chair/stool,
/obj/effect/turf_decal/stripes/asteroid/line{
dir = 1
},
/turf/open/floor/plasteel/asteroid{
baseturf = /turf/open/floor/plating/beach/sand;
tag = "icon-asteroidwarning (NORTH)"
},
/obj/effect/turf_decal/stripes/asteroid/line{
dir = 1
},
/area/ruin/powered)
/area/ruin/powered/beach)
"aX" = (
/obj/structure/closet/secure_closet/freezer/meat,
/turf/open/floor/wood,
/area/ruin/powered)
/area/ruin/powered/beach)
"aY" = (
/obj/machinery/vending/snack,
/turf/open/floor/plasteel/asteroid{
baseturf = /turf/open/floor/plating/beach/sand
},
/area/ruin/powered)
/area/ruin/powered/beach)
"aZ" = (
/obj/effect/overlay/coconut,
/turf/open/floor/plating/beach/sand,
/area/ruin/powered)
/area/ruin/powered/beach)
"ba" = (
/obj/machinery/light{
dir = 4;
@@ -316,24 +328,24 @@
"bb" = (
/obj/structure/weightlifter,
/turf/open/floor/plating/beach/sand,
/area/ruin/powered)
/area/ruin/powered/beach)
"bc" = (
/obj/machinery/door/airlock/sandstone,
/obj/effect/decal/sandeffect,
/turf/open/floor/wood,
/area/ruin/powered)
/area/ruin/powered/beach)
"bd" = (
/obj/structure/closet/secure_closet/freezer/kitchen{
req_access = null
},
/turf/open/floor/wood,
/area/ruin/powered)
/area/ruin/powered/beach)
"be" = (
/obj/vehicle/scooter/skateboard{
dir = 4
},
/turf/open/floor/plating/beach/sand,
/area/ruin/powered)
/area/ruin/powered/beach)
"bf" = (
/obj/machinery/light{
icon_state = "tube1";
@@ -347,10 +359,10 @@
"bg" = (
/obj/structure/sign/barsign,
/turf/closed/wall/mineral/sandstone,
/area/ruin/powered)
/area/ruin/powered/beach)
"bh" = (
/turf/closed/wall/mineral/sandstone,
/area/ruin/powered)
/area/ruin/powered/beach)
"bi" = (
/turf/open/floor/plating/beach/sand{
density = 1;
@@ -365,14 +377,14 @@
/turf/open/floor/plasteel/asteroid{
baseturf = /turf/open/floor/plating/beach/sand
},
/area/ruin/powered)
/area/ruin/powered/beach)
"bk" = (
/obj/structure/table/wood,
/obj/item/weapon/reagent_containers/food/snacks/pastatomato,
/turf/open/floor/plasteel/asteroid{
baseturf = /turf/open/floor/plating/beach/sand
},
/area/ruin/powered)
/area/ruin/powered/beach)
"bl" = (
/obj/structure/chair/wood/normal{
icon_state = "wooden_chair";
@@ -381,7 +393,7 @@
/turf/open/floor/plasteel/asteroid{
baseturf = /turf/open/floor/plating/beach/sand
},
/area/ruin/powered)
/area/ruin/powered/beach)
"bm" = (
/mob/living/simple_animal/crab,
/turf/open/floor/plating/beach/sand{
@@ -456,7 +468,7 @@
"bx" = (
/obj/structure/flora/rock,
/turf/open/floor/plating/beach/sand,
/area/ruin/powered)
/area/ruin/powered/beach)
"by" = (
/obj/machinery/door/airlock/sandstone,
/obj/effect/decal/sandeffect,
@@ -467,7 +479,7 @@
"bz" = (
/mob/living/simple_animal/crab,
/turf/open/floor/plating/beach/sand,
/area/ruin/powered)
/area/ruin/powered/beach)
"bA" = (
/obj/structure/window/reinforced{
dir = 1
@@ -480,7 +492,7 @@
/obj/item/weapon/storage/firstaid,
/obj/item/weapon/storage/firstaid/brute,
/turf/open/floor/wood,
/area/ruin/powered)
/area/ruin/powered/beach)
"bB" = (
/obj/structure/window/reinforced{
dir = 4;
@@ -492,7 +504,7 @@
},
/obj/structure/chair/stool,
/turf/open/floor/wood,
/area/ruin/powered)
/area/ruin/powered/beach)
"bC" = (
/obj/structure/table/wood,
/obj/item/weapon/tank/internals/oxygen,
@@ -512,11 +524,11 @@
"bE" = (
/obj/item/weapon/reagent_containers/spray/spraytan,
/turf/open/floor/plating/beach/sand,
/area/ruin/powered)
/area/ruin/powered/beach)
"bF" = (
/obj/item/toy/beach_ball,
/turf/open/floor/plating/beach/sand,
/area/ruin/powered)
/area/ruin/powered/beach)
"bG" = (
/obj/structure/window/reinforced{
dir = 8
@@ -524,7 +536,7 @@
/obj/structure/window/reinforced,
/obj/item/device/megaphone,
/turf/open/floor/wood,
/area/ruin/powered)
/area/ruin/powered/beach)
"bH" = (
/obj/structure/window/reinforced{
dir = 4;
@@ -532,13 +544,13 @@
},
/obj/effect/mob_spawn/human/beach/alive{
flavour_text = "You're a spunky lifeguard! It's up to you to make sure nobody drowns or gets eaten by sharks and stuff.";
has_id = 1;
id = /obj/item/weapon/card/id;
id_access = "Medical Doctor";
id_job = "Lifeguard";
mob_gender = "female"
},
/turf/open/floor/wood,
/area/ruin/powered)
/area/ruin/powered/beach)
"bI" = (
/obj/structure/dresser,
/turf/open/floor/pod/dark{
@@ -548,11 +560,11 @@
"bJ" = (
/obj/structure/chair,
/turf/open/floor/plating/beach/sand,
/area/ruin/powered)
/area/ruin/powered/beach)
"bK" = (
/obj/item/weapon/storage/backpack/dufflebag,
/turf/open/floor/plating/beach/sand,
/area/ruin/powered)
/area/ruin/powered/beach)
"bL" = (
/obj/effect/decal/sandeffect{
density = 1
@@ -562,43 +574,227 @@
baseturf = /turf/open/floor/plating/lava/smooth;
density = 1
},
/area/ruin/powered)
/area/ruin/powered/beach)
"bM" = (
/turf/open/floor/plasteel/stairs/old,
/area/ruin/powered)
/area/ruin/powered/beach)
"bN" = (
/obj/structure/flora/ausbushes/reedbush,
/turf/open/floor/plating/beach/sand,
/area/ruin/powered)
/area/ruin/powered/beach)
"bO" = (
/obj/item/device/camera,
/turf/open/floor/plating/beach/sand,
/area/ruin/powered)
/area/ruin/powered/beach)
"bP" = (
/obj/item/weapon/reagent_containers/food/drinks/beer,
/turf/open/floor/plating/beach/sand,
/area/ruin/powered)
/area/ruin/powered/beach)
"bQ" = (
/obj/structure/flora/ausbushes/reedbush,
/turf/open/floor/plating/beach/coastline_t,
/area/ruin/powered)
/area/ruin/powered/beach)
"bR" = (
/turf/open/floor/plating/beach/coastline_t,
/area/ruin/powered)
/area/ruin/powered/beach)
"bS" = (
/obj/structure/flora/ausbushes/sparsegrass,
/turf/open/floor/plating/beach/coastline_t,
/area/ruin/powered)
/area/ruin/powered/beach)
"bT" = (
/turf/open/floor/plating/beach/coastline_b,
/area/ruin/powered)
/area/ruin/powered/beach)
"bU" = (
/turf/open/floor/plating/beach/water,
/area/ruin/powered)
/area/ruin/powered/beach)
"bV" = (
/obj/structure/flora/ausbushes/stalkybush,
/turf/open/floor/plating/beach/water,
/area/ruin/powered/beach)
"bW" = (
/turf/closed/wall/r_wall{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/beach)
"bX" = (
/turf/closed/wall/r_wall{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/beach)
"bY" = (
/turf/closed/wall/r_wall{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/beach)
"bZ" = (
/turf/closed/wall/r_wall{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/beach)
"ca" = (
/turf/closed/wall/r_wall{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/beach)
"cb" = (
/turf/closed/wall/r_wall{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/beach)
"cc" = (
/turf/closed/wall/r_wall{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/beach)
"cd" = (
/obj/machinery/light/small{
dir = 1
},
/turf/closed/wall/mineral/sandstone{
baseturf = /turf/open/floor/plating/beach/sand
},
/area/ruin/powered/beach)
"ce" = (
/obj/effect/decal/sandeffect,
/obj/machinery/light{
dir = 1
},
/turf/open/floor/plating/beach/sand,
/area/ruin/powered/beach)
"cf" = (
/obj/effect/decal/sandeffect,
/obj/machinery/light{
dir = 1
},
/turf/open/floor/plating/beach/sand,
/area/ruin/powered/beach)
"cg" = (
/obj/machinery/light{
dir = 8
},
/turf/open/floor/plating/beach/sand,
/area/ruin/powered/beach)
"ch" = (
/obj/machinery/light{
dir = 4
},
/turf/open/floor/plating/beach/sand,
/area/ruin/powered/beach)
"ci" = (
/obj/machinery/light{
dir = 8
},
/turf/open/floor/plating/beach/sand,
/area/ruin/powered/beach)
"cj" = (
/obj/effect/turf_decal/stripes/asteroid/line{
dir = 1
},
/obj/machinery/light{
dir = 1
},
/turf/open/floor/plasteel/asteroid{
baseturf = /turf/open/floor/plating/beach/sand;
tag = "icon-asteroidwarning (NORTH)"
},
/area/ruin/powered/beach)
"ck" = (
/obj/effect/turf_decal/stripes/asteroid/line{
dir = 1
},
/obj/machinery/light{
dir = 1
},
/turf/open/floor/plasteel/asteroid{
baseturf = /turf/open/floor/plating/beach/sand;
tag = "icon-asteroidwarning (NORTH)"
},
/area/ruin/powered/beach)
"cl" = (
/obj/machinery/light{
dir = 4
},
/turf/open/floor/plating/beach/sand,
/area/ruin/powered/beach)
"cm" = (
/obj/machinery/light/small{
brightness = 3;
dir = 8
},
/turf/open/floor/pod/dark{
baseturf = /turf/open/floor/plating/asteroid/basalt
},
/area/ruin/powered)
"cn" = (
/obj/effect/decal/sandeffect,
/obj/machinery/light/small{
dir = 4
},
/turf/open/floor/pod/dark{
baseturf = /turf/open/floor/plating/asteroid/basalt
},
/area/ruin/powered)
"co" = (
/obj/effect/decal/sandeffect,
/obj/machinery/light/small{
brightness = 3;
dir = 8
},
/turf/open/floor/pod/dark{
baseturf = /turf/open/floor/plating/asteroid/basalt
},
/area/ruin/powered)
"cp" = (
/obj/machinery/light/small{
dir = 4
},
/turf/open/floor/pod/dark{
baseturf = /turf/open/floor/plating/asteroid/basalt
},
/area/ruin/powered)
"cq" = (
/obj/machinery/light{
dir = 4
},
/turf/open/floor/plating/beach/sand,
/area/ruin/powered/beach)
"cr" = (
/obj/machinery/light{
dir = 8
},
/turf/open/floor/plating/beach/sand,
/area/ruin/powered/beach)
"cs" = (
/obj/effect/overlay/palmtree_l,
/obj/machinery/light{
dir = 4
},
/turf/open/floor/plating/beach/sand,
/area/ruin/powered/beach)
"ct" = (
/obj/machinery/light,
/turf/open/floor/plating/beach/water,
/area/ruin/powered/beach)
"cu" = (
/obj/machinery/light,
/turf/open/floor/plating/beach/water,
/area/ruin/powered/beach)
"cv" = (
/obj/machinery/light,
/turf/open/floor/plating/beach/water,
/area/ruin/powered/beach)
"cw" = (
/obj/machinery/light,
/turf/open/floor/plating/beach/water,
/area/ruin/powered/beach)
"cx" = (
/obj/machinery/light,
/turf/open/floor/plating/beach/water,
/area/ruin/powered/beach)
"cy" = (
/obj/machinery/light,
/turf/open/floor/plating/beach/water,
/area/ruin/powered/beach)
(1,1,1) = {"
aa
@@ -646,11 +842,11 @@ ab
ab
ab
bn
br
cm
bu
bv
bu
bs
co
bC
ab
ab
@@ -673,7 +869,7 @@ ab
ab
ab
ap
ar
cg
ar
ar
ab
@@ -721,7 +917,7 @@ ap
bR
bT
bU
bU
ct
ab
ab
aa
@@ -740,7 +936,7 @@ aO
ar
bb
ar
ar
ci
ar
ar
aA
@@ -748,7 +944,7 @@ aA
aA
ar
ar
ar
cr
bN
bR
bT
@@ -819,7 +1015,7 @@ bT
bU
bU
bU
bU
cv
ab
ab
aa
@@ -859,10 +1055,10 @@ aa
(9,1,1) = {"
aa
ab
ab
ab
ab
aA
bW
bW
bW
ce
aA
aA
aA
@@ -893,7 +1089,7 @@ aa
ac
ae
as
ab
bW
aB
aK
aK
@@ -980,7 +1176,7 @@ bU
bU
bU
bU
bU
cx
ab
aa
"}
@@ -1051,7 +1247,7 @@ aa
(15,1,1) = {"
aa
ac
aj
cd
aj
aj
aF
@@ -1092,7 +1288,7 @@ aj
aj
bc
aj
aB
cj
aK
aA
ar
@@ -1172,7 +1368,7 @@ bU
bU
bU
bU
bU
cy
ab
aa
"}
@@ -1188,14 +1384,14 @@ aj
aj
aj
aj
aB
ck
aK
aA
ar
ar
ar
ar
ar
cq
ar
ar
bR
@@ -1275,10 +1471,10 @@ aa
(22,1,1) = {"
aa
ab
ab
ab
ab
aA
bW
bW
bW
cf
aA
aA
aA
@@ -1363,7 +1559,7 @@ bT
bU
bU
bU
bU
cw
ab
ab
aa
@@ -1412,7 +1608,7 @@ aq
ar
be
ar
ar
cl
ar
ar
aA
@@ -1420,7 +1616,7 @@ aA
aA
ar
ar
aU
cs
ar
bR
bT
@@ -1457,7 +1653,7 @@ ap
bR
bT
bU
bU
cu
ab
ab
aa
@@ -1473,7 +1669,7 @@ ab
ab
ab
ap
ar
ch
ap
ar
ab
@@ -1510,11 +1706,11 @@ ab
ab
ab
bo
bs
cn
bu
bu
bv
br
cp
bC
ab
ab
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -6,7 +6,7 @@
/turf/closed/wall/r_wall{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/snow_biodome)
/area/ruin/powered)
"ac" = (
/obj/item/stack/medical/ointment,
/obj/structure/table,
@@ -19,6 +19,9 @@
/obj/structure/table,
/obj/item/stack/medical/gauze,
/obj/item/stack/medical/gauze,
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/lava/smooth
},
@@ -36,6 +39,9 @@
/area/ruin/powered/snow_biodome)
"ag" = (
/obj/structure/reagent_dispensers/beerkeg,
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/lava/smooth
},
@@ -54,6 +60,9 @@
/area/ruin/powered/snow_biodome)
"aj" = (
/obj/structure/sink,
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/lava/smooth
},
@@ -290,89 +299,92 @@
/obj/item/clothing/shoes/winterboots,
/obj/item/clothing/gloves/fingerless,
/turf/open/floor/pod/dark,
/area/ruin/powered/snow_biodome)
/area/ruin/powered)
"aT" = (
/obj/structure/grille,
/obj/structure/window/fulltile,
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/snow_biodome)
/area/ruin/powered)
"aU" = (
/obj/machinery/vending/coffee,
/turf/open/floor/pod/dark,
/area/ruin/powered/snow_biodome)
/area/ruin/powered)
"aV" = (
/obj/structure/closet/secure_closet/freezer/fridge,
/turf/open/floor/pod/dark,
/area/ruin/powered/snow_biodome)
/area/ruin/powered)
"aW" = (
/turf/open/floor/pod/dark,
/area/ruin/powered/snow_biodome)
/area/ruin/powered)
"aX" = (
/turf/open/floor/pod/light,
/area/ruin/powered/snow_biodome)
/area/ruin/powered)
"aY" = (
/obj/structure/chair/stool,
/turf/open/floor/pod/dark,
/area/ruin/powered/snow_biodome)
/area/ruin/powered)
"aZ" = (
/obj/machinery/door/airlock/hatch,
/obj/structure/fans/tiny,
/turf/open/floor/pod/dark,
/area/ruin/powered/snow_biodome)
/area/ruin/powered)
"ba" = (
/obj/machinery/door/airlock/silver,
/obj/structure/fans/tiny,
/turf/open/floor/pod/dark,
/area/ruin/powered/snow_biodome)
/area/ruin/powered)
"bb" = (
/obj/machinery/door/airlock/silver,
/obj/structure/fans/tiny,
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/snow_biodome)
/area/ruin/powered)
"bc" = (
/obj/structure/table,
/turf/open/floor/pod/dark,
/area/ruin/powered/snow_biodome)
/area/ruin/powered)
"bd" = (
/obj/structure/table,
/obj/item/weapon/pen,
/obj/item/weapon/paper_bin,
/turf/open/floor/pod/dark,
/area/ruin/powered/snow_biodome)
/area/ruin/powered)
"be" = (
/obj/structure/table,
/obj/machinery/microwave,
/turf/open/floor/pod/dark,
/area/ruin/powered/snow_biodome)
/area/ruin/powered)
"bf" = (
/obj/effect/decal/cleanable/oil,
/turf/open/floor/pod/dark,
/area/ruin/powered/snow_biodome)
/area/ruin/powered)
"bg" = (
/obj/item/weapon/twohanded/required/chainsaw,
/obj/structure/closet,
/obj/machinery/light/small{
dir = 4
},
/turf/open/floor/pod/dark,
/area/ruin/powered/snow_biodome)
/area/ruin/powered)
"bh" = (
/obj/structure/filingcabinet,
/turf/open/floor/pod/dark,
/area/ruin/powered/snow_biodome)
/area/ruin/powered)
"bi" = (
/obj/machinery/computer/monitor,
/turf/open/floor/pod/dark,
/area/ruin/powered/snow_biodome)
/area/ruin/powered)
"bj" = (
/obj/item/weapon/storage/toolbox/mechanical,
/turf/open/floor/pod/dark,
/area/ruin/powered/snow_biodome)
/area/ruin/powered)
"bk" = (
/obj/structure/reagent_dispensers/fueltank,
/turf/open/floor/pod/dark,
/area/ruin/powered/snow_biodome)
/area/ruin/powered)
"bl" = (
/turf/open/floor/wood{
baseturf = /turf/open/floor/plating/lava/smooth;
@@ -382,22 +394,22 @@
/area/ruin/powered/snow_biodome)
"bm" = (
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/powered/snow_biodome)
/area/ruin/powered)
"bn" = (
/obj/item/clothing/mask/balaclava,
/turf/open/floor/pod/dark,
/area/ruin/powered/snow_biodome)
/area/ruin/powered)
"bo" = (
/obj/structure/table,
/obj/item/weapon/storage/fancy/cigarettes/cigpack_carp,
/turf/open/floor/pod/dark,
/area/ruin/powered/snow_biodome)
/area/ruin/powered)
"bp" = (
/obj/structure/table,
/obj/item/weapon/pen,
/obj/item/weapon/paper,
/turf/open/floor/pod/dark,
/area/ruin/powered/snow_biodome)
/area/ruin/powered)
"bq" = (
/obj/machinery/light/built{
dir = 1
@@ -406,12 +418,202 @@
baseturf = /turf/open/floor/plating/asteroid/basalt;
initial_gas_mix = "o2=14;n2=23;TEMP=300"
},
/area/ruin/powered/snow_biodome)
/area/ruin/powered)
"br" = (
/obj/structure/fans/tiny,
/obj/machinery/door/airlock/glass_large,
/turf/open/floor/pod/dark,
/area/ruin/powered)
"bs" = (
/obj/machinery/door/airlock/glass_large,
/obj/structure/fans/tiny,
/turf/open/floor/pod/dark,
/area/ruin/powered)
"bt" = (
/obj/structure/fans/tiny,
/turf/open/floor/pod/dark,
/area/ruin/powered)
"bu" = (
/obj/structure/fans/tiny,
/turf/open/floor/pod/dark,
/area/ruin/powered)
"bv" = (
/obj/machinery/light{
dir = 1
},
/turf/open/floor/plating/ice{
initial_gas_mix = "o2=22;n2=82;TEMP=180"
},
/area/ruin/powered/snow_biodome)
"bw" = (
/obj/machinery/light/small{
brightness = 3;
dir = 8
},
/turf/open/floor/wood{
baseturf = /turf/open/floor/plating/lava/smooth;
name = "floor"
},
/area/ruin/powered/snow_biodome)
"bx" = (
/obj/machinery/light{
dir = 4
},
/turf/open/floor/wood{
baseturf = /turf/open/floor/plating/lava/smooth;
name = "floor"
},
/area/ruin/powered/snow_biodome)
"by" = (
/obj/machinery/light{
dir = 8
},
/turf/open/floor/plating/asteroid/snow{
baseturf = /turf/open/floor/plating/lava/smooth;
initial_gas_mix = "o2=22;n2=82;TEMP=180"
},
/area/ruin/powered/snow_biodome)
"bz" = (
/obj/machinery/light,
/turf/open/floor/wood{
baseturf = /turf/open/floor/plating/lava/smooth;
name = "floor"
},
/area/ruin/powered/snow_biodome)
"bA" = (
/obj/machinery/light,
/turf/open/floor/wood{
baseturf = /turf/open/floor/plating/lava/smooth;
name = "floor"
},
/area/ruin/powered/snow_biodome)
"bB" = (
/obj/machinery/light{
dir = 4
},
/turf/open/floor/plating/asteroid/snow{
baseturf = /turf/open/floor/plating/lava/smooth;
initial_gas_mix = "o2=22;n2=82;TEMP=180"
},
/area/ruin/powered/snow_biodome)
"bC" = (
/obj/machinery/light{
dir = 8
},
/turf/open/floor/plating/asteroid/snow{
baseturf = /turf/open/floor/plating/lava/smooth;
initial_gas_mix = "o2=22;n2=82;TEMP=180"
},
/area/ruin/powered/snow_biodome)
"bD" = (
/obj/machinery/light{
dir = 1
},
/turf/open/floor/plating/asteroid/snow{
baseturf = /turf/open/floor/plating/lava/smooth;
initial_gas_mix = "o2=22;n2=82;TEMP=180"
},
/area/ruin/powered/snow_biodome)
"bE" = (
/obj/machinery/light{
dir = 1
},
/turf/open/floor/plating/asteroid/snow{
baseturf = /turf/open/floor/plating/lava/smooth;
initial_gas_mix = "o2=22;n2=82;TEMP=180"
},
/area/ruin/powered/snow_biodome)
"bF" = (
/obj/machinery/light{
dir = 4
},
/turf/open/floor/plating/asteroid/snow{
baseturf = /turf/open/floor/plating/lava/smooth;
initial_gas_mix = "o2=22;n2=82;TEMP=180"
},
/area/ruin/powered/snow_biodome)
"bG" = (
/obj/machinery/light/small{
brightness = 3;
dir = 8
},
/turf/open/floor/pod/dark,
/area/ruin/powered)
"bH" = (
/obj/machinery/light/small{
dir = 4
},
/turf/open/floor/pod/dark,
/area/ruin/powered)
"bI" = (
/obj/machinery/light/small{
brightness = 3;
dir = 8
},
/turf/open/floor/pod/dark,
/area/ruin/powered)
"bJ" = (
/obj/machinery/light{
dir = 8
},
/turf/open/floor/plating/asteroid/snow{
baseturf = /turf/open/floor/plating/lava/smooth;
initial_gas_mix = "o2=22;n2=82;TEMP=180"
},
/area/ruin/powered/snow_biodome)
"bK" = (
/obj/machinery/light{
dir = 4
},
/turf/open/floor/plating/asteroid/snow{
baseturf = /turf/open/floor/plating/lava/smooth;
initial_gas_mix = "o2=22;n2=82;TEMP=180"
},
/area/ruin/powered/snow_biodome)
"bL" = (
/obj/machinery/light{
dir = 4
},
/turf/open/floor/plating/asteroid/snow{
baseturf = /turf/open/floor/plating/lava/smooth;
initial_gas_mix = "o2=22;n2=82;TEMP=180"
},
/area/ruin/powered/snow_biodome)
"bM" = (
/obj/machinery/light,
/turf/open/floor/plating/asteroid/snow{
baseturf = /turf/open/floor/plating/lava/smooth;
initial_gas_mix = "o2=22;n2=82;TEMP=180"
},
/area/ruin/powered/snow_biodome)
"bN" = (
/obj/machinery/light,
/turf/open/floor/plating/ice{
initial_gas_mix = "o2=22;n2=82;TEMP=180"
},
/area/ruin/powered/snow_biodome)
"bO" = (
/obj/machinery/light,
/turf/open/floor/plating/asteroid/snow{
baseturf = /turf/open/floor/plating/lava/smooth;
initial_gas_mix = "o2=22;n2=82;TEMP=180"
},
/area/ruin/powered/snow_biodome)
"bP" = (
/obj/machinery/light,
/turf/open/floor/plating/asteroid/snow{
baseturf = /turf/open/floor/plating/lava/smooth;
initial_gas_mix = "o2=22;n2=82;TEMP=180"
},
/area/ruin/powered/snow_biodome)
"bQ" = (
/obj/machinery/light/small,
/turf/open/floor/pod/dark,
/area/ruin/powered)
"bR" = (
/obj/machinery/light/small,
/turf/open/floor/pod/dark,
/area/ruin/powered)
(1,1,1) = {"
aa
@@ -458,10 +660,10 @@ ab
ab
ab
aS
aW
bG
aW
aX
aW
bI
aW
bh
ab
@@ -486,7 +688,7 @@ ab
ab
ab
ak
ak
by
ak
ab
aS
@@ -552,7 +754,7 @@ ak
aI
ak
ak
ak
bC
az
ak
aB
@@ -560,7 +762,7 @@ ak
ak
ak
aI
ak
bJ
ak
ak
ak
@@ -577,7 +779,7 @@ aa
aa
aa
ab
ao
bv
ao
ao
ao
@@ -631,7 +833,7 @@ ak
ak
ak
ak
ak
bO
ab
ab
bm
@@ -744,7 +946,7 @@ aq
aq
aK
aq
ak
bD
ao
ao
ao
@@ -770,7 +972,7 @@ ab
ad
af
ar
at
bw
at
aD
at
@@ -790,7 +992,7 @@ ak
ak
ak
az
ak
bM
ab
aS
aS
@@ -806,7 +1008,7 @@ au
au
aq
at
at
bz
aq
ak
ak
@@ -825,7 +1027,7 @@ ak
aI
ab
bn
aW
bQ
ab
bm
"}
@@ -887,7 +1089,7 @@ ao
ak
ak
ak
aO
bs
aX
aX
br
@@ -919,10 +1121,10 @@ ao
ao
ak
ak
aP
bt
aX
aX
aP
bt
bm
"}
(17,1,1) = {"
@@ -966,7 +1168,7 @@ av
at
aG
at
at
bA
aq
aR
ak
@@ -985,7 +1187,7 @@ ao
ao
ab
aW
aW
bR
ab
bm
"}
@@ -995,7 +1197,7 @@ ai
af
aq
av
at
bx
aH
at
aN
@@ -1014,7 +1216,7 @@ ak
ak
ak
ao
ao
bN
ab
bo
bp
@@ -1032,7 +1234,7 @@ aq
aq
aq
aq
ak
bE
ak
ak
ak
@@ -1175,7 +1377,7 @@ ak
aI
aI
ak
ak
bP
ab
ab
bm
@@ -1224,7 +1426,7 @@ az
ak
ak
ak
ak
bF
ak
ak
ak
@@ -1232,7 +1434,7 @@ ak
ak
az
ak
ak
bK
ak
ak
az
@@ -1286,7 +1488,7 @@ ab
ab
ab
ak
ak
bB
ak
ab
aU
@@ -1298,7 +1500,7 @@ bf
bj
ab
ak
ak
bL
ak
ab
ab
@@ -1322,7 +1524,7 @@ ab
ab
ab
aV
aW
bH
aY
bc
be
@@ -15,36 +15,36 @@
/area/ruin/powered)
"e" = (
/turf/open/floor/plating/lava/smooth,
/area/ruin/powered)
/area/ruin/powered/gluttony)
"f" = (
/obj/item/weapon/reagent_containers/syringe/gluttony,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/gluttony)
"g" = (
/obj/effect/gluttony,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/gluttony)
"h" = (
/obj/item/weapon/veilrender/vealrender,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/gluttony)
"i" = (
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/gluttony)
"j" = (
/obj/item/trash/plate,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/gluttony)
"k" = (
/obj/machinery/door/airlock/uranium,
/obj/structure/fans/tiny/invisible,
@@ -57,37 +57,113 @@
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/gluttony)
"m" = (
/obj/item/trash/raisins,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/gluttony)
"n" = (
/obj/item/trash/pistachios,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/gluttony)
"o" = (
/obj/item/trash/popcorn,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/gluttony)
"p" = (
/obj/item/trash/semki,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/gluttony)
"q" = (
/obj/item/trash/syndi_cakes,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/gluttony)
"r" = (
/obj/effect/gluttony,
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/gluttony)
"s" = (
/obj/effect/gluttony,
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/gluttony)
"t" = (
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/gluttony)
"u" = (
/obj/effect/gluttony,
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/gluttony)
"v" = (
/obj/machinery/light/small,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/gluttony)
"w" = (
/obj/machinery/light/small,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/gluttony)
"x" = (
/obj/machinery/light/small,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/gluttony)
"y" = (
/obj/machinery/light/small,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/gluttony)
"z" = (
/obj/item/trash/plate,
/obj/machinery/light/small{
dir = 8
},
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/gluttony)
"A" = (
/obj/machinery/light/small{
dir = 4
},
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/gluttony)
(1,1,1) = {"
a
@@ -211,7 +287,7 @@ c
d
i
i
i
v
d
c
b
@@ -253,7 +329,7 @@ c
c
c
d
i
t
i
m
d
@@ -277,7 +353,7 @@ d
d
g
m
i
w
d
d
d
@@ -294,7 +370,7 @@ c
d
e
d
g
r
g
g
g
@@ -302,7 +378,7 @@ g
i
p
i
j
z
l
i
d
@@ -338,7 +414,7 @@ c
d
e
d
g
s
g
g
g
@@ -346,7 +422,7 @@ i
g
i
l
i
A
i
q
d
@@ -365,7 +441,7 @@ d
d
g
i
i
x
d
d
d
@@ -385,7 +461,7 @@ c
c
c
d
g
u
i
i
d
@@ -431,7 +507,7 @@ c
d
j
i
i
y
d
c
b
@@ -122,6 +122,9 @@
name = "shrine of the liberator";
pixel_x = 0
},
/obj/machinery/light{
dir = 8
},
/turf/open/floor/mineral/titanium/purple{
baseturf = /turf/open/floor/plating/lava/smooth
},
@@ -215,6 +218,7 @@
/obj/item/weapon/storage/firstaid/fire,
/obj/structure/table/wood,
/obj/item/weapon/storage/firstaid/fire,
/obj/machinery/light,
/turf/open/floor/mineral/titanium/purple{
baseturf = /turf/open/floor/plating/lava/smooth
},
@@ -262,6 +266,122 @@
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/golem_ship)
"I" = (
/obj/machinery/light/small,
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/golem_ship)
"J" = (
/obj/machinery/light/small,
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/golem_ship)
"K" = (
/obj/machinery/light/small,
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/golem_ship)
"L" = (
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/mineral/titanium/purple{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/golem_ship)
"M" = (
/obj/effect/mob_spawn/human/golem/adamantine,
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/mineral/titanium/purple{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/golem_ship)
"N" = (
/obj/machinery/light{
dir = 1
},
/turf/open/floor/mineral/titanium/purple{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/golem_ship)
"O" = (
/obj/machinery/light{
dir = 8
},
/turf/open/floor/mineral/titanium/purple{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/golem_ship)
"P" = (
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/mineral/titanium/purple{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/golem_ship)
"Q" = (
/obj/machinery/light/small,
/turf/open/floor/mineral/titanium/purple{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/golem_ship)
"R" = (
/obj/machinery/light/small,
/turf/open/floor/mineral/titanium/purple{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/golem_ship)
"S" = (
/obj/machinery/light{
dir = 8
},
/turf/open/floor/mineral/titanium/purple{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/golem_ship)
"T" = (
/obj/machinery/light/small,
/turf/open/floor/mineral/titanium/purple{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/golem_ship)
"U" = (
/obj/effect/mob_spawn/human/golem/adamantine,
/obj/machinery/light/small,
/turf/open/floor/mineral/titanium/purple{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/golem_ship)
"V" = (
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/golem_ship)
"W" = (
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/golem_ship)
"X" = (
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/golem_ship)
(1,1,1) = {"
a
@@ -358,7 +478,7 @@ a
a
a
b
l
L
l
j
l
@@ -384,10 +504,10 @@ l
l
b
l
l
Q
G
l
l
T
b
b
b
@@ -427,7 +547,7 @@ j
l
l
b
l
P
l
G
l
@@ -444,18 +564,18 @@ a
a
b
c
f
I
b
m
M
o
b
l
l
G
o
m
U
b
f
V
F
b
a
@@ -510,18 +630,18 @@ a
a
b
c
f
J
b
l
l
O
l
l
l
l
S
l
z
b
f
W
F
b
a
@@ -598,9 +718,9 @@ a
a
b
e
f
K
b
l
N
l
l
l
@@ -609,7 +729,7 @@ v
l
B
b
f
X
f
b
a
@@ -670,7 +790,7 @@ h
h
b
t
l
R
b
h
h
@@ -16,26 +16,32 @@
"e" = (
/obj/structure/table/wood/poker,
/obj/item/weapon/gun/ballistic/revolver/russian/soul,
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/carpet{
baseturf = /turf/open/floor/plating/lava/smooth;
icon_state = "carpetsymbol"
},
/area/ruin/powered)
/area/ruin/powered/greed)
"f" = (
/obj/structure/cursed_slot_machine,
/turf/open/floor/carpet{
baseturf = /turf/open/floor/plating/lava/smooth;
icon_state = "carpetsymbol"
},
/area/ruin/powered)
/area/ruin/powered/greed)
"g" = (
/obj/structure/table/wood/poker,
/obj/item/weapon/coin/mythril,
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/carpet{
baseturf = /turf/open/floor/plating/lava/smooth;
icon_state = "carpetsymbol"
},
/area/ruin/powered)
/area/ruin/powered/greed)
"h" = (
/obj/structure/table/wood/poker,
/obj/item/weapon/coin/diamond,
@@ -43,13 +49,13 @@
baseturf = /turf/open/floor/plating/lava/smooth;
icon_state = "carpetsymbol"
},
/area/ruin/powered)
/area/ruin/powered/greed)
"i" = (
/turf/open/floor/carpet{
baseturf = /turf/open/floor/plating/lava/smooth;
icon_state = "carpetsymbol"
},
/area/ruin/powered)
/area/ruin/powered/greed)
"j" = (
/obj/structure/table/wood/poker,
/obj/item/weapon/coin/adamantine,
@@ -57,7 +63,7 @@
baseturf = /turf/open/floor/plating/lava/smooth;
icon_state = "carpetsymbol"
},
/area/ruin/powered)
/area/ruin/powered/greed)
"k" = (
/obj/machinery/computer/arcade/battle{
emagged = 1
@@ -65,46 +71,50 @@
/turf/open/floor/engine/cult{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/greed)
"l" = (
/obj/item/weapon/coin/gold,
/turf/open/floor/engine/cult{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/greed)
"m" = (
/turf/open/floor/engine/cult{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/greed)
"n" = (
/obj/structure/table/wood/poker,
/obj/item/stack/spacecash/c1000,
/turf/open/floor/engine/cult{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/greed)
"o" = (
/obj/item/weapon/storage/bag/money,
/turf/open/floor/engine/cult{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/greed)
"p" = (
/obj/structure/table/wood/poker,
/obj/item/weapon/ore/gold,
/turf/open/floor/engine/cult{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/greed)
"q" = (
/obj/structure/table/wood/poker,
/obj/item/stack/spacecash/c20,
/obj/item/stack/spacecash/c50,
/obj/machinery/light/small{
brightness = 3;
dir = 8
},
/turf/open/floor/engine/cult{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/greed)
"r" = (
/obj/structure/table/wood/poker,
/obj/item/stack/spacecash/c500,
@@ -113,21 +123,47 @@
/turf/open/floor/engine/cult{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/greed)
"s" = (
/obj/structure/table/wood/poker,
/obj/item/stack/spacecash/c200,
/turf/open/floor/engine/cult{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/greed)
"t" = (
/obj/machinery/door/airlock/gold,
/obj/structure/fans/tiny/invisible,
/turf/open/floor/engine/cult{
baseturf = /turf/open/floor/plating/lava/smooth
},
/obj/structure/fans/tiny/invisible,
/area/ruin/powered)
"u" = (
/obj/structure/table/wood/poker,
/obj/item/stack/spacecash/c500,
/obj/item/stack/spacecash/c100,
/obj/item/stack/spacecash/c1000,
/obj/machinery/light/small{
dir = 4
},
/turf/open/floor/engine/cult{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/greed)
"v" = (
/obj/item/weapon/coin/gold,
/obj/machinery/light/small,
/turf/open/floor/engine/cult{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/greed)
"w" = (
/obj/item/weapon/storage/bag/money,
/obj/machinery/light/small,
/turf/open/floor/engine/cult{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/greed)
(1,1,1) = {"
a
@@ -320,7 +356,7 @@ m
m
l
m
l
v
d
d
a
@@ -364,7 +400,7 @@ m
l
m
l
o
w
d
d
a
@@ -404,7 +440,7 @@ c
d
d
p
r
u
r
d
c
@@ -20,7 +20,7 @@
/turf/open/floor/mineral/silver{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/pride)
"f" = (
/obj/structure/mirror{
pixel_x = 32
@@ -28,12 +28,12 @@
/turf/open/floor/mineral/silver{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/pride)
"g" = (
/turf/open/floor/mineral/silver{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/pride)
"h" = (
/obj/structure/mirror/magic/pride,
/turf/closed/wall/mineral/diamond{
@@ -47,6 +47,109 @@
blocks_air = 1
},
/area/ruin/powered)
"j" = (
/obj/structure/mirror{
pixel_x = -32
},
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/mineral/silver{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/pride)
"k" = (
/obj/structure/mirror{
pixel_x = 32
},
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/mineral/silver{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/pride)
"l" = (
/obj/structure/mirror{
pixel_x = -32
},
/obj/machinery/light/small{
brightness = 3;
dir = 8
},
/turf/open/floor/mineral/silver{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/pride)
"m" = (
/obj/structure/mirror{
pixel_x = 32
},
/obj/machinery/light/small{
dir = 4
},
/turf/open/floor/mineral/silver{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/pride)
"n" = (
/obj/structure/mirror{
pixel_x = -32
},
/obj/machinery/light/small{
brightness = 3;
dir = 8
},
/turf/open/floor/mineral/silver{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/pride)
"o" = (
/obj/structure/mirror{
pixel_x = 32
},
/obj/machinery/light/small{
dir = 4
},
/turf/open/floor/mineral/silver{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/pride)
"p" = (
/obj/structure/mirror{
pixel_x = -32
},
/obj/machinery/light/small{
brightness = 3;
dir = 8
},
/turf/open/floor/mineral/silver{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/pride)
"q" = (
/obj/structure/mirror{
pixel_x = 32
},
/obj/machinery/light/small{
dir = 4
},
/turf/open/floor/mineral/silver{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/pride)
"r" = (
/obj/machinery/light/small,
/turf/open/floor/mineral/silver{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/pride)
"s" = (
/obj/machinery/light/small,
/turf/open/floor/mineral/silver{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/pride)
(1,1,1) = {"
a
@@ -120,16 +223,16 @@ c
d
d
d
j
e
e
l
e
e
n
e
e
e
e
e
e
p
e
e
d
@@ -153,7 +256,7 @@ g
g
g
g
g
r
d
a
a
@@ -197,7 +300,7 @@ g
g
g
g
g
s
d
c
a
@@ -208,16 +311,16 @@ c
d
d
d
k
f
f
m
f
f
o
f
f
f
f
f
f
q
f
f
d
@@ -19,31 +19,31 @@
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/seedvault)
"e" = (
/obj/structure/table/wood,
/obj/item/weapon/storage/box/disks_plantgene,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/seedvault)
"f" = (
/obj/machinery/plantgenes/seedvault,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/seedvault)
"g" = (
/obj/structure/table/wood,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/seedvault)
"h" = (
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/seedvault)
"i" = (
/obj/structure/closet/crate/hydroponics,
/obj/structure/beebox,
@@ -57,7 +57,7 @@
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/seedvault)
"j" = (
/obj/structure/shuttle/engine/propulsion{
icon_state = "propulsion";
@@ -71,13 +71,13 @@
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/seedvault)
"l" = (
/obj/machinery/door/airlock,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/seedvault)
"m" = (
/obj/structure/shuttle/engine/propulsion{
icon_state = "propulsion";
@@ -90,7 +90,7 @@
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/seedvault)
"o" = (
/obj/structure/closet/crate/hydroponics,
/obj/item/weapon/cultivator,
@@ -108,13 +108,13 @@
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/seedvault)
"p" = (
/obj/machinery/hydroponics/constructable,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/seedvault)
"q" = (
/obj/item/weapon/hatchet,
/obj/item/weapon/storage/bag/plants,
@@ -123,7 +123,7 @@
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/seedvault)
"r" = (
/obj/structure/table/wood,
/obj/item/weapon/storage/bag/plants,
@@ -133,7 +133,7 @@
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/seedvault)
"s" = (
/obj/structure/table/wood,
/obj/item/weapon/gun/energy/floragun,
@@ -144,13 +144,13 @@
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/seedvault)
"t" = (
/obj/effect/mob_spawn/human/seed_vault,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/seedvault)
"u" = (
/obj/structure/sink{
icon_state = "sink";
@@ -161,19 +161,19 @@
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/seedvault)
"v" = (
/obj/machinery/vending/hydronutrients,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/seedvault)
"w" = (
/obj/machinery/vending/hydroseeds,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/seedvault)
"x" = (
/obj/machinery/reagentgrinder{
pixel_y = 5
@@ -186,7 +186,7 @@
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/seedvault)
"y" = (
/obj/structure/sink{
dir = 4;
@@ -197,13 +197,13 @@
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/seedvault)
"z" = (
/obj/machinery/door/airlock/external,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/seedvault)
"A" = (
/obj/machinery/door/airlock/external,
/obj/structure/fans/tiny,
@@ -217,31 +217,31 @@
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/seedvault)
"C" = (
/obj/machinery/seed_extractor,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/seedvault)
"D" = (
/obj/machinery/biogenerator,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/seedvault)
"E" = (
/obj/machinery/chem_dispenser/mutagensaltpeter,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/seedvault)
"F" = (
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/seedvault)
"G" = (
/obj/structure/closet/crate/hydroponics,
/obj/item/clothing/under/rank/hydroponics,
@@ -251,13 +251,13 @@
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/seedvault)
"H" = (
/obj/machinery/chem_master/condimaster,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/seedvault)
"I" = (
/obj/structure/table/wood,
/obj/item/weapon/reagent_containers/glass/bucket,
@@ -267,14 +267,14 @@
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/seedvault)
"J" = (
/obj/item/weapon/storage/toolbox/syndicate,
/obj/structure/table/wood,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
/area/ruin/powered/seedvault)
"K" = (
/obj/structure/disposalpipe/segment,
/turf/closed/wall/r_wall,
@@ -292,6 +292,102 @@
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"N" = (
/obj/structure/table/wood,
/obj/item/weapon/storage/box/disks_plantgene,
/obj/machinery/light{
dir = 1
},
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/seedvault)
"O" = (
/obj/machinery/light{
dir = 1
},
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/seedvault)
"P" = (
/obj/machinery/hydroponics/constructable,
/obj/machinery/light{
dir = 1
},
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/seedvault)
"Q" = (
/obj/machinery/hydroponics/constructable,
/obj/machinery/light{
dir = 1
},
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/seedvault)
"R" = (
/obj/machinery/light{
dir = 8
},
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/seedvault)
"S" = (
/obj/machinery/light{
dir = 4
},
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/seedvault)
"T" = (
/obj/machinery/light{
dir = 1
},
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/seedvault)
"U" = (
/obj/machinery/light,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/seedvault)
"V" = (
/obj/machinery/light{
dir = 8
},
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/seedvault)
"W" = (
/obj/machinery/light{
dir = 4
},
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/seedvault)
"X" = (
/obj/machinery/hydroponics/constructable,
/obj/machinery/light,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/seedvault)
"Y" = (
/obj/machinery/hydroponics/constructable,
/obj/machinery/light,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered/seedvault)
(1,1,1) = {"
a
@@ -346,10 +442,10 @@ a
a
c
c
T
h
h
h
h
U
c
c
a
@@ -389,12 +485,12 @@ c
k
c
n
h
R
u
h
h
u
h
V
u
c
a
@@ -429,17 +525,17 @@ a
a
a
c
e
N
h
c
p
P
h
p
h
h
p
h
p
X
c
a
a
@@ -539,17 +635,17 @@ a
b
a
c
h
O
h
c
p
Q
h
h
h
h
h
h
p
Y
c
a
a
@@ -587,12 +683,12 @@ c
i
c
s
h
S
y
h
h
y
h
W
J
c
a
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -475,7 +475,7 @@
/area/ruin/derelictoutpost)
"bq" = (
/obj/effect/mob_spawn/human/corpse/nanotrasensoldier{
helmet = null;
head = null;
id_job = "Tradepost Officer";
name = "Tradeport Officer";
random = 1
File diff suppressed because it is too large Load Diff
+42 -6
View File
@@ -37,6 +37,9 @@
/area/ruin/powered/aesthetic)
"j" = (
/obj/structure/chair/stool,
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/plasteel/vaporwave,
/area/ruin/powered/aesthetic)
"k" = (
@@ -153,10 +156,10 @@
},
/area/ruin/unpowered/no_grav)
"G" = (
/obj/effect/turf_decal/stripes/asteroid/line,
/turf/open/floor/plating/astplate{
initial_gas_mix = "TEMP=2.7"
},
/obj/effect/turf_decal/stripes/asteroid/line,
/area/ruin/unpowered/no_grav)
"H" = (
/obj/effect/overlay/palmtree_l,
@@ -196,6 +199,39 @@
/obj/effect/decal/sandeffect,
/turf/open/floor/plasteel/airless/asteroid,
/area/ruin/unpowered/no_grav)
"O" = (
/obj/structure/chair/comfy/black{
dir = 8
},
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/plasteel/vaporwave,
/area/ruin/powered/aesthetic)
"P" = (
/obj/machinery/light/small,
/turf/open/floor/plasteel/vaporwave,
/area/ruin/powered/aesthetic)
"Q" = (
/obj/machinery/light/small,
/turf/open/floor/plasteel/vaporwave,
/area/ruin/powered/aesthetic)
"R" = (
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/plating/astplate{
initial_gas_mix = "TEMP=2.7"
},
/area/ruin/unpowered/no_grav)
"S" = (
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/plating/astplate{
initial_gas_mix = "TEMP=2.7"
},
/area/ruin/unpowered/no_grav)
(1,1,1) = {"
a
@@ -294,7 +330,7 @@ h
u
y
f
B
R
d
d
a
@@ -326,7 +362,7 @@ j
k
k
v
k
P
f
C
I
@@ -390,11 +426,11 @@ a
d
c
g
n
O
n
k
w
k
Q
g
F
I
@@ -430,7 +466,7 @@ p
u
y
g
B
S
d
d
a
+1 -1
View File
@@ -163,7 +163,7 @@
/area/awaymission/beach)
"aC" = (
/obj/effect/mob_spawn/human/cook{
helmet = null;
head = null;
id_access = "Bartender";
id_job = "Bartender";
suit = /obj/item/clothing/suit/armor/vest;
+3 -3
View File
@@ -187,7 +187,7 @@
/turf/closed/mineral,
/area/awaymission/wwmines)
"aO" = (
/obj/effect/mob_spawn/human/syndicatecommando,
/obj/effect/mob_spawn/human/corpse/syndicatecommando,
/turf/open/floor/plasteel/cult{
name = "engraved floor";
tag = "icon-cult"
@@ -929,7 +929,7 @@
},
/area/awaymission/wwgov)
"dh" = (
/obj/effect/mob_spawn/human/syndicatecommando{
/obj/effect/mob_spawn/human/corpse/syndicatecommando{
mob_name = "Syndicate Commando"
},
/turf/open/floor/carpet,
@@ -2017,7 +2017,7 @@
},
/area/awaymission/wwmines)
"gy" = (
/obj/effect/mob_spawn/human/syndicatecommando{
/obj/effect/mob_spawn/human/corpse/syndicatecommando{
mob_name = "Syndicate Commando"
},
/turf/open/floor/grass,
-31
View File
@@ -1,31 +0,0 @@
/*
The /tg/ codebase currently requires you to have 11 z-levels of the same size dimensions.
z-level order is important, the order you put them in inside the map config.dm will determine what z level number they are assigned ingame.
Names of z-level do not matter, but order does greatly, for instances such as checking alive status of revheads on z1
current as of 2016/6/2
z1 = station
z2 = centcomm
z5 = mining
Everything else = randomized space
Last space-z level = empty
*/
#define CROSSLINKED 2
#define SELFLOOPING 1
#define UNAFFECTED 0
#define MAIN_STATION "Main Station"
#define CENTCOMM "CentComm"
#define EMPTY_AREA_1 "Empty Area 1"
#define EMPTY_AREA_2 "Empty Area 2"
#define MINING "Mining Asteroid"
#define EMPTY_AREA_3 "Empty Area 3"
#define EMPTY_AREA_4 "Empty Area 4"
#define EMPTY_AREA_5 "Empty Area 5"
#define EMPTY_AREA_6 "Empty Area 6"
#define EMPTY_AREA_7 "Empty Area 7"
#define EMPTY_AREA_8 "Empty Area 8"
#define AWAY_MISSION "Away Mission"
#define AWAY_MISSION_LIST list(AWAY_MISSION = SELFLOOPING)
#define DEFAULT_MAP_TRANSITION_CONFIG list(MAIN_STATION = CROSSLINKED, CENTCOMM = SELFLOOPING, EMPTY_AREA_1 = CROSSLINKED, EMPTY_AREA_2 = CROSSLINKED, MINING = SELFLOOPING, EMPTY_AREA_3 = CROSSLINKED, EMPTY_AREA_4 = CROSSLINKED, EMPTY_AREA_5 = CROSSLINKED, EMPTY_AREA_6 = CROSSLINKED, EMPTY_AREA_7 = CROSSLINKED, EMPTY_AREA_8 = CROSSLINKED)
+2 -2
View File
@@ -1,10 +1,10 @@
#ifndef ALL_MAPS
#include "map_files\generic\SpaceStation.dmm"
#include "map_files\generic\Centcomm.dmm"
#include "map_files\generic\SpaceStation.dmm"
#include "map_files\generic\Space.dmm"
#include "map_files\generic\SpaceDock.dmm"
#include "map_files\Mining\lavaland.dmm"
#include "map_files\Mining\Lavaland.dmm"
#else
-21
View File
@@ -1,21 +0,0 @@
#ifdef ALL_MAPS
#include "map_files\debug\runtimestation.dmm"
#include "map_files\Deltastation\DeltaStation2.dmm"
#include "map_files\MetaStation\MetaStation.dmm"
#include "map_files\OmegaStation\OmegaStation.dmm"
#include "map_files\PubbyStation\PubbyStation.dmm"
#include "map_files\TgStation\tgstation.2.1.3.dmm"
#include "map_files\Cerestation\cerestation.dmm"
#include "map_files\CitadelStation\CitadelStation-1.2.1.dmm"
#include "map_files\generic\Centcomm.dmm"
#include "map_files\generic\SpaceStation.dmm"
#include "map_files\generic\Space.dmm"
#include "map_files\generic\SpaceDock.dmm"
#include "map_files\Mining\Lavaland.dmm"
#ifdef TRAVISBUILDING
#include "templates.dm"
#endif
#endif
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+50 -29
View File
@@ -2648,7 +2648,7 @@
/turf/open/floor/circuit,
/area/ctf)
"hq" = (
/turf/open/floor/plating/asteroid/snow/atmosphere,
/turf/open/floor/plating/asteroid/snow/airless,
/area/syndicate_mothership)
"hr" = (
/obj/effect/turf_decal/stripes/line,
@@ -3700,7 +3700,7 @@
turf_type = /turf/open/floor/plating/asteroid/snow;
width = 50
},
/turf/open/floor/plating/asteroid/snow/atmosphere,
/turf/open/floor/plating/asteroid/snow/airless,
/area/syndicate_mothership)
"jY" = (
/turf/open/floor/plasteel/brown{
@@ -4260,7 +4260,7 @@
/area/centcom/control)
"ln" = (
/obj/structure/flora/grass/both,
/turf/open/floor/plating/asteroid/snow/atmosphere,
/turf/open/floor/plating/asteroid/snow/airless,
/area/syndicate_mothership)
"lo" = (
/obj/structure/table/reinforced,
@@ -4415,11 +4415,11 @@
/area/centcom/control)
"lF" = (
/obj/structure/flora/grass/brown,
/turf/open/floor/plating/asteroid/snow/atmosphere,
/turf/open/floor/plating/asteroid/snow/airless,
/area/syndicate_mothership)
"lG" = (
/obj/structure/flora/tree/pine,
/turf/open/floor/plating/asteroid/snow/atmosphere,
/turf/open/floor/plating/asteroid/snow/airless,
/area/syndicate_mothership)
"lH" = (
/turf/closed/indestructible/fakeglass{
@@ -4433,7 +4433,7 @@
set_cap = 1;
set_luminosity = 4
},
/turf/open/floor/plating/asteroid/snow/atmosphere,
/turf/open/floor/plating/asteroid/snow/airless,
/area/syndicate_mothership)
"lJ" = (
/turf/closed/indestructible/riveted,
@@ -4636,7 +4636,7 @@
/area/syndicate_mothership/control)
"mh" = (
/obj/item/toy/figure/syndie,
/turf/open/floor/plating/asteroid/snow/atmosphere,
/turf/open/floor/plating/asteroid/snow/airless,
/area/syndicate_mothership)
"mi" = (
/obj/machinery/newscaster/security_unit,
@@ -4769,7 +4769,7 @@
/area/centcom/control)
"mz" = (
/obj/structure/flora/bush,
/turf/open/floor/plating/asteroid/snow/atmosphere,
/turf/open/floor/plating/asteroid/snow/airless,
/area/syndicate_mothership)
"mA" = (
/turf/closed/indestructible/fakeglass,
@@ -5976,7 +5976,7 @@
},
/area/wizard_station)
"pk" = (
/turf/open/floor/plating/asteroid/snow/atmosphere,
/turf/open/floor/plating/asteroid/snow/airless,
/area/space)
"pl" = (
/obj/machinery/computer/shuttle/syndicate/recall,
@@ -6941,7 +6941,7 @@
/turf/open/floor/plating/airless,
/area/syndicate_mothership/control)
"rl" = (
/turf/open/floor/plating/asteroid/snow/atmosphere,
/turf/open/floor/plating/asteroid/snow/airless,
/obj/machinery/porta_turret/syndicate/pod,
/turf/closed/wall/mineral/plastitanium{
dir = 8;
@@ -6960,7 +6960,7 @@
/turf/open/floor/plating,
/area/shuttle/assault_pod)
"ro" = (
/turf/open/floor/plating/asteroid/snow/atmosphere,
/turf/open/floor/plating/asteroid/snow/airless,
/obj/machinery/porta_turret/syndicate/pod,
/turf/closed/wall/mineral/plastitanium{
dir = 1;
@@ -7776,7 +7776,7 @@
turf_type = /turf/open/floor/plating/asteroid/snow;
width = 18
},
/turf/open/floor/plating/asteroid/snow/atmosphere,
/turf/open/floor/plating/asteroid/snow/airless,
/area/space)
"th" = (
/obj/item/weapon/storage/box/drinkingglasses,
@@ -8097,7 +8097,7 @@
name = "\improper FOURTH WALL";
pixel_x = -32
},
/turf/open/floor/plating/asteroid/snow/atmosphere,
/turf/open/floor/plating/asteroid/snow/airless,
/area/syndicate_mothership)
"tS" = (
/turf/open/floor/wood,
@@ -8332,14 +8332,14 @@
},
/area/syndicate_mothership/control)
"ux" = (
/turf/open/floor/plating/asteroid/snow/atmosphere,
/turf/open/floor/plating/asteroid/snow/airless,
/obj/machinery/porta_turret/syndicate/pod,
/turf/closed/wall/mineral/plastitanium{
icon_state = "diagonalWall3"
},
/area/shuttle/assault_pod)
"uy" = (
/turf/open/floor/plating/asteroid/snow/atmosphere,
/turf/open/floor/plating/asteroid/snow/airless,
/obj/machinery/porta_turret/syndicate/pod,
/turf/closed/wall/mineral/plastitanium{
dir = 4;
@@ -9745,7 +9745,7 @@
/area/centcom/evac)
"yc" = (
/obj/structure/statue/uranium/nuke,
/turf/open/floor/plating/asteroid/snow/atmosphere,
/turf/open/floor/plating/asteroid/snow/airless,
/area/syndicate_mothership)
"yd" = (
/obj/structure/table/wood,
@@ -12212,7 +12212,7 @@
name = "Thunderdome Blast Door"
},
/turf/open/floor/plasteel/loadingarea{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
baseturf = /turf/open/space;
dir = 8
},
/area/tdome/arena)
@@ -12243,7 +12243,7 @@
name = "General Supply"
},
/turf/open/floor/plasteel/loadingarea{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
baseturf = /turf/open/space;
dir = 8
},
/area/tdome/arena)
@@ -12394,7 +12394,7 @@
/area/tdome/arena)
"Ey" = (
/turf/open/floor/plasteel/loadingarea{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
baseturf = /turf/open/space;
dir = 8
},
/area/tdome/arena)
@@ -13716,7 +13716,7 @@
/area/tdome/arena_source)
"IS" = (
/turf/open/floor/plasteel/loadingarea{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
baseturf = /turf/open/space;
dir = 8
},
/area/tdome/arena_source)
@@ -13765,7 +13765,7 @@
/area/tdome/arena_source)
"Jd" = (
/turf/open/floor/plasteel/loadingarea{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
baseturf = /turf/open/space;
dir = 8
},
/area/tdome/arena_source)
@@ -14078,7 +14078,7 @@
set_cap = 1;
set_luminosity = 4
},
/turf/open/floor/plating/asteroid/snow/atmosphere,
/turf/open/floor/plating/asteroid/snow/airless,
/area/syndicate_mothership)
"Kh" = (
/obj/machinery/light{
@@ -14104,7 +14104,7 @@
set_cap = 1;
set_luminosity = 4
},
/turf/open/floor/plating/asteroid/snow/atmosphere,
/turf/open/floor/plating/asteroid/snow/airless,
/area/syndicate_mothership)
"Kk" = (
/obj/structure/chair{
@@ -14123,7 +14123,7 @@
set_cap = 1;
set_luminosity = 4
},
/turf/open/floor/plating/asteroid/snow/atmosphere,
/turf/open/floor/plating/asteroid/snow/airless,
/area/syndicate_mothership)
"Km" = (
/obj/effect/turf_decal/stripes/line,
@@ -14141,7 +14141,7 @@
set_cap = 1;
set_luminosity = 4
},
/turf/open/floor/plating/asteroid/snow/atmosphere,
/turf/open/floor/plating/asteroid/snow/airless,
/area/syndicate_mothership)
"Kp" = (
/obj/structure/flora/ausbushes/lavendergrass,
@@ -14657,7 +14657,7 @@
set_cap = 1;
set_luminosity = 4
},
/turf/open/floor/plating/asteroid/snow/atmosphere,
/turf/open/floor/plating/asteroid/snow/airless,
/area/syndicate_mothership)
"Lx" = (
/obj/structure/flora/grass/brown,
@@ -14665,7 +14665,7 @@
set_cap = 1;
set_luminosity = 4
},
/turf/open/floor/plating/asteroid/snow/atmosphere,
/turf/open/floor/plating/asteroid/snow/airless,
/area/syndicate_mothership)
"Ly" = (
/obj/structure/flora/grass/brown,
@@ -14897,6 +14897,27 @@
},
/turf/open/floor/mineral/titanium,
/area/shuttle/escape)
"Mg" = (
/obj/item/cardboard_cutout{
desc = "They seem to be ignoring you... Typical.";
dir = 1;
icon_state = "cutout_ntsec";
name = "Private Security Officer"
},
/turf/open/floor/plasteel/darkred/side{
dir = 1
},
/area/centcom/evac)
"Mh" = (
/obj/item/cardboard_cutout{
desc = "They seem to be ignoring you... Typical.";
icon_state = "cutout_ntsec";
name = "Private Security Officer"
},
/turf/open/floor/plasteel/vault{
dir = 5
},
/area/centcom/evac)
(1,1,1) = {"
aa
@@ -65195,7 +65216,7 @@ sv
wW
xt
xQ
xZ
Mg
yC
yC
yU
@@ -65454,7 +65475,7 @@ xp
xR
xZ
yC
yC
Mh
yV
qk
aa
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+1
View File
@@ -23,6 +23,7 @@
#define WACKY "Wacky"
#define MUT_MUTE "Mute"
#define SMILE "Smile"
#define STONER "Stoner"
#define UNINTELLIGABLE "Unintelligable"
#define SWEDISH "Swedish"
#define CHAV "Chav"
+3 -1
View File
@@ -95,11 +95,13 @@
//tablecrafting defines
#define CAT_NONE ""
#define CAT_WEAPON "Weaponry"
#define CAT_WEAPONRY "Weaponry"
#define CAT_WEAPON "Weapons"
#define CAT_AMMO "Ammunition"
#define CAT_ROBOT "Robots"
#define CAT_MISC "Misc"
#define CAT_PRIMAL "Tribal"
#define CAT_FOOD "Foods"
#define CAT_BREAD "Breads"
#define CAT_BURGER "Burgers"
#define CAT_CAKE "Cakes"
+2
View File
@@ -51,8 +51,10 @@
#define LIGHT_COLOR_GREEN "#64C864" //Bright but quickly dissipating neon green. rgb(100, 200, 100)
#define LIGHT_COLOR_BLUE "#6496FA" //Cold, diluted blue. rgb(100, 150, 250)
#define LIGHT_COLOR_BLUEGREEN "#7DE1AF" //Light blueish green. rgb(125, 225, 175)
#define LIGHT_COLOR_CYAN "#7DE1E1" //Diluted cyan. rgb(125, 225, 225)
#define LIGHT_COLOR_LIGHT_CYAN "#40CEFF" //More-saturated cyan. rgb(64, 206, 255)
#define LIGHT_COLOR_DARK_BLUE "#6496FA" //Saturated blue. rgb(51, 117, 248)
#define LIGHT_COLOR_PINK "#E17DE1" //Diluted, mid-warmth pink. rgb(225, 125, 225)
#define LIGHT_COLOR_YELLOW "#E1E17D" //Dimmed yellow, leaning kaki. rgb(225, 225, 125)
#define LIGHT_COLOR_BROWN "#966432" //Clear brown, mostly dim. rgb(150, 100, 50)
+2 -2
View File
@@ -34,8 +34,8 @@ Last space-z level = empty
#define MAP_REMOVE_JOB(jobpath) /datum/job/##jobpath/map_check() { return (SSmapping.config.map_name != JOB_MODIFICATION_MAP_NAME) && ..() }
//zlevel defines, can be overridden for different maps in the appropriate _maps file.
#define ZLEVEL_STATION 1
#define ZLEVEL_CENTCOM 2
#define ZLEVEL_CENTCOM 1
#define ZLEVEL_STATION 2
#define ZLEVEL_MINING 5
#define ZLEVEL_LAVALAND 5
#define ZLEVEL_EMPTY_SPACE 11
+13
View File
@@ -4,6 +4,19 @@
// #define EAST 4
// #define WEST 8
//These get to go at the top, because they're special
//You can use these defines to get the typepath of the currently running proc/verb (yes procs + verbs are objects)
/* eg:
/mob/living/carbon/human/death()
world << THIS_PROC_TYPE_STR //You can only output the string versions
Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a string with () (eg: the _WITH_ARGS defines) to make it look nicer)
*/
#define THIS_PROC_TYPE .....
#define THIS_PROC_TYPE_STR "[THIS_PROC_TYPE]" //Because you can only obtain a string of THIS_PROC_TYPE using "[]", and it's nice to just +/+= strings
#define THIS_PROC_TYPE_STR_WITH_ARGS "[THIS_PROC_TYPE]([args.Join(",")])"
#define THIS_PROC_TYPE_WEIRD ...... //This one is WEIRD, in some cases (When used in certain defines? (eg: ASSERT)) THIS_PROC_TYPE will fail to work, but THIS_PROC_TYPE_WEIRD will work instead
#define THIS_PROC_TYPE_WEIRD_STR "[THIS_PROC_TYPE_WEIRD]" //Included for completeness
#define THIS_PROC_TYPE_WEIRD_STR_WITH_ARGS "[THIS_PROC_TYPE_WEIRD]([args.Join(",")])" //Ditto
#define MIDNIGHT_ROLLOVER 864000 //number of deciseconds in a day
+27
View File
@@ -0,0 +1,27 @@
#define REBOOT_MODE_NORMAL 0
#define REBOOT_MODE_HARD 1
#define REBOOT_MODE_SHUTDOWN 2
#define IRC_STATUS_THROTTLE 50
//keep these in sync with TGS3
#define SERVICE_WORLD_PARAM "server_service"
#define SERVICE_PR_TEST_JSON "..\\..\\prtestjob.json"
#define SERVICE_CMD_HARD_REBOOT "hard_reboot"
#define SERVICE_CMD_GRACEFUL_SHUTDOWN "graceful_shutdown"
#define SERVICE_CMD_WORLD_ANNOUNCE "world_announce"
#define SERVICE_CMD_IRC_STATUS "irc_status"
#define SERVICE_CMD_ADMIN_MSG "adminmsg"
#define SERVICE_CMD_NAME_CHECK "namecheck"
#define SERVICE_CMD_ADMIN_WHO "adminwho"
//#define SERVICE_CMD_PARAM_KEY //defined in __compile_options.dm
#define SERVICE_CMD_PARAM_COMMAND "command"
#define SERVICE_CMD_PARAM_MESSAGE "message"
#define SERVICE_CMD_PARAM_TARGET "target"
#define SERVICE_CMD_PARAM_SENDER "sender"
#define SERVICE_REQUEST_KILL_PROCESS "killme"
#define SERVICE_REQUEST_IRC_BROADCAST "irc"
#define SERVICE_REQUEST_IRC_ADMIN_CHANNEL_MESSAGE "send2irc"
+9 -1
View File
@@ -30,7 +30,6 @@
// DEBUFFS //
/////////////
#define STATUS_EFFECT_SIGILMARK /datum/status_effect/sigil_mark
#define STATUS_EFFECT_BELLIGERENT /datum/status_effect/belligerent //forces the affected to walk, doing damage if they try to run
#define STATUS_EFFECT_MANIAMOTOR /datum/status_effect/maniamotor //disrupts, damages, and confuses the affected as long as they're in range of the motor
@@ -41,3 +40,12 @@
#define STATUS_EFFECT_SUMMONEDGHOST /datum/status_effect/cultghost //is a cult ghost and can't use manifest runes
#define STATUS_EFFECT_CRUSHERMARK /datum/status_effect/crusher_mark //if struck with a proto-kinetic crusher, takes a ton of damage
/////////////
// NEUTRAL //
/////////////
#define STATUS_EFFECT_SIGILMARK /datum/status_effect/sigil_mark
#define STATUS_EFFECT_CRUSHERDAMAGETRACKING /datum/status_effect/crusher_damage //tracks total kinetic crusher damage on a target
+1
View File
@@ -42,6 +42,7 @@
// Subsystems shutdown in the reverse of the order they initialize in
// The numbers just define the ordering, they are meaningless otherwise.
#define INIT_ORDER_DBCORE 17
#define INIT_ORDER_SERVER_MAINT 16
#define INIT_ORDER_JOBS 15
#define INIT_ORDER_EVENTS 14
+2 -2
View File
@@ -3,8 +3,8 @@
#define WIRE_AI "AI Connection"
#define WIRE_ALARM "Alarm"
#define WIRE_AVOIDANCE "Avoidance"
#define WIRE_BACKUP1 "Auxillary Power 1"
#define WIRE_BACKUP2 "Auxillary Power 2"
#define WIRE_BACKUP1 "Auxiliary Power 1"
#define WIRE_BACKUP2 "Auxiliary Power 2"
#define WIRE_BEACON "Beacon"
#define WIRE_BOLTS "Bolts"
#define WIRE_BOOM "Boom"
+4 -1
View File
@@ -131,9 +131,12 @@
return
//Removes any null entries from the list
//Returns TRUE if the list had nulls, FALSE otherwise
/proc/listclearnulls(list/L)
var/list/N = new(L.len)
var/start_len = L.len
var/list/N = new(start_len)
L -= N
return L.len < start_len
/*
* Returns list containing all the entries from first list that are not present in second.
+8 -4
View File
@@ -3,7 +3,7 @@
for(var/file in args)
src << browse_rsc(file)
/client/proc/browse_files(root="data/logs/", max_iterations=10, list/valid_extensions=list(".txt",".log",".htm"))
/client/proc/browse_files(root="data/logs/", max_iterations=10, list/valid_extensions=list("txt","log","htm", "html"))
var/path = root
for(var/i=0, i<max_iterations, i++)
@@ -22,9 +22,13 @@
if(copytext(path,-1,0) != "/") //didn't choose a directory, no need to iterate again
break
var/extension = copytext(path,-4,0)
if( !fexists(path) || !(extension in valid_extensions) )
var/extensions
for(var/i in valid_extensions)
if(extensions)
extensions += "|"
extensions += "[i]"
var/regex/valid_ext = new("\\.([extensions])$", "i")
if( !fexists(path) || !(valid_ext.Find(path)) )
to_chat(src, "<font color='red'>Error: browse_files(): File not found/Invalid file([path]).</font>")
return
+2 -1
View File
@@ -507,7 +507,8 @@
return
//First we spawn a dude.
var/mob/living/carbon/human/new_character = new(pick(GLOB.latejoin))//The mob being spawned.
var/mob/living/carbon/human/new_character = new//The mob being spawned.
SSjob.SendToLateJoin(new_character)
G_found.client.prefs.copy_to(new_character)
new_character.dna.update_dna_identity()
+9 -8
View File
@@ -1079,18 +1079,17 @@ B --><-- A
return L
//similar function to RANGE_TURFS(), but will search spiralling outwards from the center (like the above, but only turfs)
/proc/spiral_range_turfs(dist=0, center=usr, orange=0)
/proc/spiral_range_turfs(dist=0, center=usr, orange=0, list/outlist = list(), tick_checked)
outlist.Cut()
if(!dist)
if(!orange)
return list(center)
else
return list()
outlist += center
return outlist
var/turf/t_center = get_turf(center)
if(!t_center)
return list()
return outlist
var/list/L = list()
var/list/L = outlist
var/turf/T
var/y
var/x
@@ -1128,6 +1127,8 @@ B --><-- A
if(T)
L += T
c_dist++
if(tick_checked)
CHECK_TICK
return L
@@ -1343,7 +1344,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
//kevinz000 if you touch this I will hunt you down
GLOBAL_VAR_INIT(valid_HTTPSGet, FALSE)
GLOBAL_PROTECT(valid_HTTPSGet)
/proc/HTTPSGet(url)
/proc/HTTPSGet(url) //tgs2 support
if(findtext(url, "\""))
GLOB.valid_HTTPSGet = FALSE
+4 -6
View File
@@ -35,7 +35,7 @@
//MINOR TWEAKS/MISC
#define AGE_MIN 17 //youngest a character can be
#define AGE_MAX 85 //oldest a character can be
#define WIZARD_AGE_MIN 30 //youngest a wizard can be
#define WIZARD_AGE_MIN 30 //youngest a wizard can be
#define SHOES_SLOWDOWN 0 //How much shoes slow you down by default. Negative values speed you up
#define POCKET_STRIP_DELAY 40 //time taken (in deciseconds) to search somebody's pockets
#define DOOR_CRUSH_DAMAGE 15 //the amount of damage that airlocks deal when they crush you
@@ -62,14 +62,12 @@
#endif
//Update this whenever you need to take advantage of more recent byond features
#define MIN_COMPILER_VERSION 511
#define MIN_COMPILER_VERSION 511
#if DM_VERSION < MIN_COMPILER_VERSION
//Don't forget to update this part
#error Your version of BYOND is too out-of-date to compile this project. Go to byond.com/download and update.
#error You need version 511 or higher
#error You need version 511 or higher
#endif
#ifndef SERVERTOOLS
#define SERVERTOOLS 0
#endif
#define SERVICE_CMD_PARAM_KEY "serviceCommsKey"
+9 -9
View File
@@ -22,12 +22,12 @@ GLOBAL_VAR_INIT(tinted_weldhelh, TRUE)
// Debug2 is used in conjunction with a lot of admin verbs and therefore is actually legit.
GLOBAL_VAR_INIT(Debug, FALSE) // global debug switch
GLOBAL_VAR_INIT(Debug2, FALSE)
//This was a define, but I changed it to a variable so it can be changed in-game.(kept the all-caps definition because... code...) -Errorage
GLOBAL_VAR_INIT(MAX_EX_DEVESTATION_RANGE, 3)
GLOBAL_VAR_INIT(MAX_EX_HEAVY_RANGE, 7)
GLOBAL_VAR_INIT(MAX_EX_LIGHT_RANGE, 14)
GLOBAL_VAR_INIT(MAX_EX_FLASH_RANGE, 14)
GLOBAL_VAR_INIT(MAX_EX_FLAME_RANGE, 14)
GLOBAL_VAR_INIT(DYN_EX_SCALE, 0.5)
//This was a define, but I changed it to a variable so it can be changed in-game.(kept the all-caps definition because... code...) -Errorage
GLOBAL_VAR_INIT(MAX_EX_DEVESTATION_RANGE, 3)
GLOBAL_VAR_INIT(MAX_EX_HEAVY_RANGE, 7)
GLOBAL_VAR_INIT(MAX_EX_LIGHT_RANGE, 14)
GLOBAL_VAR_INIT(MAX_EX_FLASH_RANGE, 14)
GLOBAL_VAR_INIT(MAX_EX_FLAME_RANGE, 14)
GLOBAL_VAR_INIT(DYN_EX_SCALE, 0.5)
-1
View File
@@ -32,7 +32,6 @@ GLOBAL_LIST_EMPTY(generic_event_spawns) //list of all spawns for events
GLOBAL_LIST_EMPTY(wizardstart)
GLOBAL_LIST_EMPTY(newplayer_start)
GLOBAL_LIST_EMPTY(latejoin)
GLOBAL_LIST_EMPTY(prisonwarp) //prisoners go to these
GLOBAL_LIST_EMPTY(holdingfacility) //captured people go here
GLOBAL_LIST_EMPTY(xeno_spawn)//Aliens spawn at these.
+3 -1
View File
@@ -32,4 +32,6 @@ GLOBAL_LIST_EMPTY(ladders)
GLOBAL_LIST_EMPTY(trophy_cases)
GLOBAL_LIST_EMPTY(wire_color_directory)
GLOBAL_LIST_EMPTY(wire_name_directory)
GLOBAL_LIST_EMPTY(wire_name_directory)
GLOBAL_LIST_EMPTY(ai_status_displays)
+2
View File
@@ -31,4 +31,6 @@ GLOBAL_PROTECT(OOClog)
GLOBAL_LIST_EMPTY(adminlog)
GLOBAL_PROTECT(adminlog)
GLOBAL_LIST_EMPTY(individual_log_list) // Logs each mob individual logs, a global so it doesn't get lost on cloning/changing mobs
GLOBAL_LIST_EMPTY(active_turfs_startlist)
+11 -1
View File
@@ -208,6 +208,8 @@
var/generate_minimaps = 0
var/grey_assistants = 0
var/id_console_jobslot_delay = 30
var/lavaland_budget = 60
var/space_budget = 16
@@ -261,6 +263,8 @@
var/mice_roundstart = 10 // how many wire chewing rodents spawn at roundstart.
var/irc_announce_new_game = FALSE
/datum/configuration/New()
gamemode_cache = typecacheof(/datum/game_mode,TRUE)
for(var/T in gamemode_cache)
@@ -409,6 +413,8 @@
usewhitelist = TRUE
if("allow_metadata")
allow_Metadata = 1
if("id_console_jobslot_delay")
id_console_jobslot_delay = text2num(value)
if("inactivity_period")
inactivity_period = text2num(value) * 10 //documented as seconds in config.txt
if("afk_period")
@@ -423,7 +429,7 @@
popup_admin_pm = 1
if("allow_holidays")
allow_holidays = 1
if("useircbot")
if("useircbot") //tgs2 support
useircbot = 1
if("ticklag")
var/ticklag = text2num(value)
@@ -536,6 +542,8 @@
error_silence_time = text2num(value)
if("error_msg_delay")
error_msg_delay = text2num(value)
if("irc_announce_new_game")
irc_announce_new_game = TRUE
else
GLOB.config_error_log << "Unknown setting in configuration: '[name]'"
@@ -827,6 +835,8 @@
if ("endmap")
maplist[currentmap.map_name] = currentmap
currentmap = null
if ("disabled")
currentmap = null
else
GLOB.config_error_log << "Unknown command in map vote config: '[command]'"
+2 -1
View File
@@ -177,7 +177,8 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
to_chat(world, "<span class='boldannounce'>[msg]</span>")
log_world(msg)
SetRunLevel(1)
if (!current_runlevel)
SetRunLevel(1)
// Sort subsystems by display setting for easy access.
sortTim(subsystems, /proc/cmp_subsystem_display)
+2 -4
View File
@@ -27,7 +27,7 @@ SUBSYSTEM_DEF(blackbox)
if(M.client)
playercount += 1
var/admincount = GLOB.admins.len
var/datum/DBQuery/query_record_playercount = SSdbcore.NewQuery("INSERT INTO [format_table_name("legacy_population")] (playercount, admincount, time, server_ip, server_port) VALUES ([playercount], [admincount], '[SQLtime()]', INET_ATON('[world.internet_address]'), '[world.port]')")
var/datum/DBQuery/query_record_playercount = SSdbcore.NewQuery("INSERT INTO [format_table_name("legacy_population")] (playercount, admincount, time, server_ip, server_port) VALUES ([playercount], [admincount], '[SQLtime()]', INET_ATON(IF('[world.internet_address]' LIKE '', '0', '[world.internet_address]')), '[world.port]')")
query_record_playercount.Execute()
/datum/controller/subsystem/blackbox/Recover()
@@ -82,8 +82,6 @@ SUBSYSTEM_DEF(blackbox)
add_details("radio_usage","PDA-[pda_msg_amt]")
add_details("radio_usage","RC-[rc_msg_amt]")
set_details("round_end","[time2text(world.realtime)]") //This one MUST be the last one that gets set.
if (!SSdbcore.Connect())
return
@@ -178,7 +176,7 @@ SUBSYSTEM_DEF(blackbox)
var/sqlstamina = sanitizeSQL(L.getStaminaLoss())
var/coord = sanitizeSQL("[L.x], [L.y], [L.z]")
var/map = sanitizeSQL(SSmapping.config.map_name)
var/datum/DBQuery/query_report_death = SSdbcore.NewQuery("INSERT INTO [format_table_name("death")] (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss, toxloss, cloneloss, staminaloss, coord, mapname, server_ip, server_port) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[SQLtime()]', '[laname]', '[lakey]', '[sqlgender]', [sqlbrute], [sqlfire], [sqlbrain], [sqloxy], [sqltox], [sqlclone], [sqlstamina], '[coord]', '[map]', INET_ATON('[world.internet_address]'), '[world.port]')")
var/datum/DBQuery/query_report_death = SSdbcore.NewQuery("INSERT INTO [format_table_name("death")] (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss, toxloss, cloneloss, staminaloss, coord, mapname, server_ip, server_port) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[SQLtime()]', '[laname]', '[lakey]', '[sqlgender]', [sqlbrute], [sqlfire], [sqlbrain], [sqloxy], [sqltox], [sqlclone], [sqlstamina], '[coord]', '[map]', INET_ATON(IF('[world.internet_address]' LIKE '', '0', '[world.internet_address]')), '[world.port]')")
query_report_death.Execute()
+17 -12
View File
@@ -1,7 +1,7 @@
SUBSYSTEM_DEF(dbcore)
name = "Database"
flags = SS_NO_INIT|SS_NO_FIRE
init_order = INIT_ORDER_DBCORE
var/const/FAILED_DB_CONNECTION_CUTOFF = 5
var/const/Default_Cursor = 0
@@ -30,6 +30,11 @@ SUBSYSTEM_DEF(dbcore)
_db_con = SSdbcore._db_con
/datum/controller/subsystem/dbcore/Shutdown()
//This is as close as we can get to the true round end before Disconnect() without changing where it's called, defeating the reason this is a subsystem
if(SSdbcore.Connect())
var/sql_station_name = sanitizeSQL(station_name())
var/datum/DBQuery/query_round_end = SSdbcore.NewQuery("INSERT INTO [format_table_name("round")] (end_datetime, game_mode_result, end_state, station_name) VALUES (Now(), '[SSticker.mode_result]', '[SSticker.end_state]', '[sql_station_name]') WHERE id = [GLOB.round_id]")
query_round_end.Execute()
if(IsConnected())
Disconnect()
@@ -48,7 +53,7 @@ SUBSYSTEM_DEF(dbcore)
if(failed_connections > FAILED_DB_CONNECTION_CUTOFF) //If it failed to establish a connection more than 5 times in a row, don't bother attempting to connect anymore.
return FALSE
if(!config.sql_enabled)
return FALSE
@@ -171,16 +176,16 @@ Delayed insert mode was removed in mysql 7 and only works with MyISAM type table
var/_db_query
/datum/DBQuery/New(sql_query, datum/controller/subsystem/dbcore/connection_handler, cursor_handler)
if(sql_query)
if(sql_query)
sql = sql_query
if(connection_handler)
if(connection_handler)
db_connection = connection_handler
if(cursor_handler)
if(cursor_handler)
default_cursor = cursor_handler
item = list()
_db_query = _dm_db_new_query()
/datum/DBQuery/proc/Connect(datum/controller/subsystem/dbcore/connection_handler)
/datum/DBQuery/proc/Connect(datum/controller/subsystem/dbcore/connection_handler)
db_connection = connection_handler
/datum/DBQuery/proc/warn_execute()
@@ -194,16 +199,16 @@ Delayed insert mode was removed in mysql 7 and only works with MyISAM type table
if(!. && log_error)
log_sql("[ErrorMsg()] | Query used: [sql]")
/datum/DBQuery/proc/NextRow()
/datum/DBQuery/proc/NextRow()
return _dm_db_next_row(_db_query,item,conversions)
/datum/DBQuery/proc/RowsAffected()
return _dm_db_rows_affected(_db_query)
/datum/DBQuery/proc/RowCount()
/datum/DBQuery/proc/RowCount()
return _dm_db_row_count(_db_query)
/datum/DBQuery/proc/ErrorMsg()
/datum/DBQuery/proc/ErrorMsg()
return _dm_db_error_msg(_db_query)
/datum/DBQuery/proc/Columns()
@@ -232,11 +237,11 @@ Delayed insert mode was removed in mysql 7 and only works with MyISAM type table
return db_connection.Quote(str)
/datum/DBQuery/proc/SetConversion(column,conversion)
if(istext(column))
if(istext(column))
column = columns.Find(column)
if(!conversions)
if(!conversions)
conversions = list(column)
else if(conversions.len < column)
else if(conversions.len < column)
conversions.len = column
conversions[column] = conversion
+1 -1
View File
@@ -105,7 +105,7 @@ SUBSYSTEM_DEF(events)
//These are needed because /area/engine has to be removed from the list, but we still want these areas to get fucked up.
var/list/danger_areas = list(
/area/engine/break_room,
/area/engine/chiefs_office)
/area/crew_quarters/heads/chief)
//Need to locate() as it's just a list of paths.
return locate(pick((GLOB.the_station_areas - safe_areas) + danger_areas))
+510
View File
@@ -0,0 +1,510 @@
SUBSYSTEM_DEF(explosion)
priority = 99
wait = 1
flags = SS_TICKER|SS_NO_INIT
var/list/explosions
var/rebuild_tick_split_count = FALSE
var/tick_portions_required = 0
var/list/logs
var/list/zlevels_that_ignore_bombcap
var/list/doppler_arrays
//legacy caps, set by config
var/devastation_cap = 3
var/heavy_cap = 7
var/light_cap = 14
var/flash_cap = 14
var/flame_cap = 14
var/dyn_ex_scale = 0.5
var/id_counter = 0
/datum/controller/subsystem/explosion/PreInit()
doppler_arrays = list()
logs = list()
explosions = list()
zlevels_that_ignore_bombcap = list("[ZLEVEL_MINING]")
/datum/controller/subsystem/explosion/Shutdown()
QDEL_LIST(explosions)
QDEL_LIST(logs)
zlevels_that_ignore_bombcap.Cut()
/datum/controller/subsystem/explosion/Recover()
explosions = SSexplosion.explosions
logs = SSexplosion.logs
id_counter = SSexplosion.id_counter
rebuild_tick_split_count = TRUE
zlevels_that_ignore_bombcap = SSexplosion.zlevels_that_ignore_bombcap
doppler_arrays = SSexplosion.doppler_arrays
devastation_cap = SSexplosion.devastation_cap
heavy_cap = SSexplosion.heavy_cap
light_cap = SSexplosion.light_cap
flash_cap = SSexplosion.flash_cap
flame_cap = SSexplosion.flame_cap
dyn_ex_scale = SSexplosion.dyn_ex_scale
/datum/controller/subsystem/explosion/fire()
var/list/cached_explosions = explosions
var/num_explosions = cached_explosions.len
if(!num_explosions)
return
//figure exactly how many tick splits are required
var/num_splits
if(rebuild_tick_split_count)
var/reactionary = config.reactionary_explosions
num_splits = num_explosions
for(var/I in cached_explosions)
var/datum/explosion/E = I
if(!E.turfs_processed)
++num_splits
if(reactionary && !E.densities_processed)
++num_splits
tick_portions_required = num_splits
else
num_splits = tick_portions_required
MC_SPLIT_TICK_INIT(num_splits)
for(var/I in cached_explosions)
var/datum/explosion/E = I
var/etp = E.turfs_processed
if(!etp)
if(GatherTurfs(E))
--tick_portions_required
etp = TRUE
MC_SPLIT_TICK
var/edp = E.densities_processed
if(!edp)
if(DensityCalculate(E, etp))
--tick_portions_required
edp = TRUE
MC_SPLIT_TICK
if(ProcessExplosion(E, edp)) //splits the tick
--tick_portions_required
explosions -= E
logs += E
NotifyDopplers(E)
MC_SPLIT_TICK
/datum/controller/subsystem/explosion/proc/NotifyDopplers(datum/explosion/E)
for(var/array in doppler_arrays)
var/obj/machinery/doppler_array/A = array
A.sense_explosion(E.epicenter, E.devastation, E.heavy, E.light, E.finished_at - E.started_at, E.orig_dev_range, E.orig_heavy_range, E.orig_light_range)
/datum/controller/subsystem/explosion/proc/Create(atom/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = TRUE, ignorecap = FALSE, flame_range = 0 , silent = FALSE, smoke = FALSE)
epicenter = get_turf(epicenter)
if(!epicenter)
return
if(adminlog)
message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in area: [get_area(epicenter)] [ADMIN_COORDJMP(epicenter)]")
log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z])")
var/datum/explosion/E = new(++id_counter, epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, flame_range, silent, smoke, ignorecap)
if(heavy_impact_range > 1)
var/datum/effect_system/explosion/Eff
if(smoke)
Eff = new /datum/effect_system/explosion/smoke
else
Eff = new
Eff.set_up(epicenter)
Eff.start()
//flash mobs
if(flash_range)
for(var/mob/living/L in viewers(flash_range, epicenter))
L.flash_act()
if(!silent)
ExplosionSound(epicenter, devastation_range, heavy_impact_range, E.extent)
//add to SS
if(E.extent)
tick_portions_required += 2 + (config.reactionary_explosions ? 1 : 0)
explosions += E
else
logs += E //Already done processing
/datum/controller/subsystem/explosion/proc/CreateDynamic(atom/epicenter, power, flash_range, adminlog = TRUE, ignorecap = TRUE, flame_range = 0 , silent = FALSE, smoke = TRUE)
if(!power)
return
var/range = round((2 * power) ** dyn_ex_scale)
Create(epicenter, round(range * 0.25), round(range * 0.5), round(range), flash_range*range, adminlog, ignorecap, flame_range*range, silent, smoke)
// Using default dyn_ex scale:
// 100 explosion power is a (5, 10, 20) explosion.
// 75 explosion power is a (4, 8, 17) explosion.
// 50 explosion power is a (3, 7, 14) explosion.
// 25 explosion power is a (2, 5, 10) explosion.
// 10 explosion power is a (1, 3, 6) explosion.
// 5 explosion power is a (0, 1, 3) explosion.
// 1 explosion power is a (0, 0, 1) explosion.
/datum/explosion
var/explosion_id
var/turf/epicenter
var/started_at
var/finished_at
var/tick_started
var/tick_finished
var/turfs_processed = FALSE
var/densities_processed = FALSE
var/orig_dev_range
var/orig_heavy_range
var/orig_light_range
var/orig_flash_range
var/orig_flame_range
var/devastation
var/heavy
var/light
var/extent
var/flash
var/flame
var/gather_dist = 0
var/list/gathered_turfs
var/list/calculated_turfs
var/list/unsafe_turfs
/datum/explosion/New(id, turf/epi, devastation_range, heavy_impact_range, light_impact_range, flash_range, flame_range, silent, smoke, ignorecap)
explosion_id = id
epicenter = epi
densities_processed = !config.reactionary_explosions
orig_dev_range = devastation_range
orig_heavy_range = heavy_impact_range
orig_light_range = light_impact_range
orig_flash_range = flash_range
orig_flame_range = flame_range
if(!ignorecap && !("[epicenter.z]" in SSexplosion.zlevels_that_ignore_bombcap))
//Clamp all values
devastation_range = min(SSexplosion.devastation_cap, devastation_range)
heavy_impact_range = min(SSexplosion.heavy_cap, heavy_impact_range)
light_impact_range = min(SSexplosion.light_cap, light_impact_range)
flash_range = min(SSexplosion.flash_cap, flash_range)
flame_range = min(SSexplosion.flame_cap, flame_range)
//store this
devastation = devastation_range
heavy = heavy_impact_range
light = light_impact_range
extent = max(devastation_range, heavy_impact_range, light_impact_range, flame_range)
flash = flash_range
flame = flame_range
started_at = REALTIMEOFDAY
tick_started = world.time
gathered_turfs = list()
calculated_turfs = list()
unsafe_turfs = list()
// Play sounds; we want sounds to be different depending on distance so we will manually do it ourselves.
// Stereo users will also hear the direction of the explosion!
// Calculate far explosion sound range. Only allow the sound effect for heavy/devastating explosions.
// 3/7/14 will calculate to 80 + 35
/proc/ExplosionSound(turf/epicenter, devastation_range, heavy_impact_range, extent)
var/far_dist = 0
far_dist += heavy_impact_range * 5
far_dist += devastation_range * 20
var/z0 = epicenter.z
var/frequency = get_rand_frequency()
var/ex_sound = get_sfx("explosion")
for(var/mob/M in GLOB.player_list)
// Double check for client
var/turf/M_turf = get_turf(M)
if(M_turf && M_turf.z == z0)
var/dist = get_dist(M_turf, epicenter)
// If inside the blast radius + world.view - 2
if(dist <= round(extent + world.view - 2, 1))
M.playsound_local(epicenter, ex_sound, 100, 1, frequency, falloff = 5)
// You hear a far explosion if you're outside the blast radius. Small bombs shouldn't be heard all over the station.
else if(dist <= far_dist)
var/far_volume = Clamp(far_dist, 30, 50) // Volume is based on explosion size and dist
far_volume += (dist <= far_dist * 0.5 ? 50 : 0) // add 50 volume if the mob is pretty close to the explosion
M.playsound_local(epicenter, 'sound/effects/explosionfar.ogg', far_volume, 1, frequency, falloff = 5)
/datum/explosion/Destroy()
SSexplosion.explosions -= src
SSexplosion.logs -= src
LAZYCLEARLIST(gathered_turfs)
LAZYCLEARLIST(calculated_turfs)
LAZYCLEARLIST(unsafe_turfs)
return ..()
/datum/controller/subsystem/explosion/proc/GatherTurfs(datum/explosion/E)
var/turf/epicenter = E.epicenter
var/x0 = epicenter.x
var/y0 = epicenter.y
var/z0 = epicenter.z
var/c_dist = E.gather_dist
var/dist = E.extent
var/list/L = E.gathered_turfs
if(!c_dist)
L += epicenter
++c_dist
while( c_dist <= dist )
var/y = y0 + c_dist
var/x = x0 - c_dist + 1
for(x in x to x0 + c_dist)
var/turf/T = locate(x, y, z0)
if(T)
L += T
y = y0 + c_dist - 1
x = x0 + c_dist
for(y in y0 - c_dist to y)
var/turf/T = locate(x, y, z0)
if(T)
L += T
y = y0 - c_dist
x = x0 + c_dist - 1
for(x in x0 - c_dist to x)
var/turf/T = locate(x, y, z0)
if(T)
L += T
y = y0 - c_dist + 1
x = x0 - c_dist
for(y in y to y0 + c_dist)
var/turf/T = locate(x, y, z0)
if(T)
L += T
++c_dist
if(MC_TICK_CHECK)
break
if(c_dist > dist)
E.turfs_processed = TRUE
return TRUE
else
E.gather_dist = c_dist
return FALSE
/datum/controller/subsystem/explosion/proc/DensityCalculate(datum/explosion/E, done_gathering_turfs)
var/list/L = E.calculated_turfs
var/cut_to = 1
for(var/I in E.gathered_turfs) // we cache the explosion block rating of every turf in the explosion area
var/turf/T = I
++cut_to
var/current_exp_block = T.density ? T.explosion_block : 0
for(var/obj/machinery/door/D in T)
if(D.density)
current_exp_block += D.explosion_block
for(var/obj/structure/window/W in T)
if(W.reinf && W.fulltile)
current_exp_block += W.explosion_block
for(var/obj/structure/blob/B in T)
current_exp_block += B.explosion_block
L[T] = current_exp_block
if(MC_TICK_CHECK)
E.gathered_turfs.Cut(1, cut_to)
return FALSE
E.gathered_turfs.Cut()
return done_gathering_turfs
/datum/controller/subsystem/explosion/proc/ProcessExplosion(datum/explosion/E, done_calculating_turfs)
//cache shit for speed
var/id = E.explosion_id
var/list/cached_unsafe = E.unsafe_turfs
var/list/cached_exp_block = E.calculated_turfs
var/list/affected_turfs = cached_exp_block ? cached_exp_block : E.gathered_turfs
var/devastation_range = E.devastation
var/heavy_impact_range = E.heavy
var/light_impact_range = E.light
var/flame_range = E.flame
var/throw_range_max = E.extent
var/turf/epi = E.epicenter
var/x0 = epi.x
var/y0 = epi.y
var/cut_to = 1
for(var/TI in affected_turfs)
var/turf/T = TI
++cut_to
var/init_dist = cheap_hypotenuse(T.x, T.y, x0, y0)
var/dist = init_dist
if(cached_exp_block)
var/turf/Trajectory = T
while(Trajectory != epi)
Trajectory = get_step_towards(Trajectory, epi)
dist += cached_exp_block[Trajectory]
var/flame_dist = dist < flame_range
var/throw_dist = dist
if(dist < devastation_range)
dist = 1
else if(dist < heavy_impact_range)
dist = 2
else if(dist < light_impact_range)
dist = 3
else
dist = 0
//------- EX_ACT AND TURF FIRES -------
if(flame_dist && prob(40) && !isspaceturf(T) && !T.density)
new /obj/effect/hotspot(T) //Mostly for ambience!
if(dist > 0)
T.explosion_level = max(T.explosion_level, dist) //let the bigger one have it
T.explosion_id = id
T.ex_act(dist)
cached_unsafe += T
//--- THROW ITEMS AROUND ---
var/throw_dir = get_dir(epi, T)
for(var/obj/item/I in T)
if(!I.anchored)
var/throw_range = rand(throw_dist, throw_range_max)
var/turf/throw_at = get_ranged_target_turf(I, throw_dir, throw_range)
I.throw_speed = 4 //Temporarily change their throw_speed for embedding purposes (Resets when it finishes throwing, regardless of hitting anything)
I.throw_at(throw_at, throw_range, 4)
if(MC_TICK_CHECK)
var/circumference = (PI * (init_dist + 4) * 2) //+4 to radius to prevent shit gaps
if(cached_unsafe.len > circumference) //only do this every revolution
for(var/Unexplode in cached_unsafe)
var/turf/UnexplodeT = Unexplode
UnexplodeT.explosion_level = 0
cached_unsafe.Cut()
done_calculating_turfs = FALSE
break
affected_turfs.Cut(1, cut_to)
if(!done_calculating_turfs)
return FALSE
//unfuck the shit
for(var/Unexplode in cached_unsafe)
var/turf/UnexplodeT = Unexplode
UnexplodeT.explosion_level = 0
cached_unsafe.Cut()
E.finished_at = REALTIMEOFDAY
E.tick_finished = world.time
return TRUE
/client/proc/check_bomb_impacts()
set name = "Check Bomb Impact"
set category = "Debug"
var/newmode = alert("Use reactionary explosions?","Check Bomb Impact", "Yes", "No")
var/turf/epicenter = get_turf(mob)
if(!epicenter)
return
var/x0 = epicenter.x
var/y0 = epicenter.y
var/dev = 0
var/heavy = 0
var/light = 0
var/list/choices = list("Small Bomb","Medium Bomb","Big Bomb","Custom Bomb")
var/choice = input("Bomb Size?") in choices
switch(choice)
if(null)
return 0
if("Small Bomb")
dev = 1
heavy = 2
light = 3
if("Medium Bomb")
dev = 2
heavy = 3
light = 4
if("Big Bomb")
dev = 3
heavy = 5
light = 7
if("Custom Bomb")
dev = input("Devestation range (Tiles):") as num
heavy = input("Heavy impact range (Tiles):") as num
light = input("Light impact range (Tiles):") as num
else
return
var/datum/explosion/E = new(null, epicenter, dev, heavy, light, ignorecap = TRUE)
while(!SSexplosion.GatherTurfs(E))
stoplag()
var/list/turfs
if(newmode)
while(!SSexplosion.DensityCalculate(E, TRUE))
stoplag()
turfs = E.calculated_turfs.Copy()
else
turfs = E.gathered_turfs.Copy()
qdel(E)
for(var/I in turfs)
var/turf/T = I
var/dist = cheap_hypotenuse(T.x, T.y, x0, y0) + turfs[T]
if(dist < dev)
T.color = "red"
T.maptext = "Dev"
else if (dist < heavy)
T.color = "yellow"
T.maptext = "Heavy"
else if (dist < light)
T.color = "blue"
T.maptext = "Light"
CHECK_TICK
sleep(100)
for(var/I in turfs)
var/turf/T = I
T.color = null
T.maptext = null
+46 -15
View File
@@ -11,6 +11,7 @@ SUBSYSTEM_DEF(job)
var/initial_players_to_assign = 0 //used for checking against population caps
var/list/prioritized_jobs = list()
var/list/latejoin_trackers = list() //Don't read this list, use GetLateJoinTurfs() instead
/datum/controller/subsystem/job/Initialize(timeofday)
if(!occupations.len)
@@ -378,23 +379,11 @@ SUBSYSTEM_DEF(job)
continue
S = sloc
break
if(S)
SendToAtom(H, S, buckle = FALSE)
if(!S) //if there isn't a spawnpoint send them to latejoin, if there's no latejoin go yell at your mapper
log_world("Couldn't find a round start spawn point for [rank]")
S = get_turf(pick(GLOB.latejoin))
if(!S) //final attempt, lets find some area in the arrivals shuttle to spawn them in to.
log_world("Couldn't find a round start latejoin spawn point.")
for(var/turf/T in get_area_turfs(/area/shuttle/arrival))
if(!T.density)
var/clear = 1
for(var/obj/O in T)
if(O.density)
clear = 0
break
if(clear)
S = T
continue
if(istype(S, /obj/effect/landmark) && isturf(S.loc))
H.loc = S.loc
SendToLateJoin(H)
if(H.mind)
H.mind.assigned_role = rank
@@ -516,3 +505,45 @@ SUBSYSTEM_DEF(job)
newjob.total_positions = J.total_positions
newjob.spawn_positions = J.spawn_positions
newjob.current_positions = J.current_positions
/datum/controller/subsystem/job/proc/SendToAtom(mob/M, atom/A, buckle)
if(buckle && isliving(M) && istype(A, /obj/structure/chair))
var/obj/structure/chair/C = A
if(C.buckle_mob(M, FALSE, FALSE))
return
M.forceMove(get_turf(A))
/datum/controller/subsystem/job/proc/SendToLateJoin(mob/M, buckle = TRUE)
if(latejoin_trackers.len)
SendToAtom(M, pick(latejoin_trackers), buckle)
else
//bad mojo
var/area/shuttle/arrival/A = locate() in GLOB.sortedAreas
if(A)
//first check if we can find a chair
var/obj/structure/chair/C = locate() in A
if(C)
SendToAtom(M, C, buckle)
return
else //last hurrah
var/list/avail = list()
for(var/turf/T in A)
if(!is_blocked_turf(T, TRUE))
avail += T
if(avail.len)
SendToAtom(M, pick(avail), FALSE)
return
//pick an open spot on arrivals and dump em
var/list/arrivals_turfs = shuffle(get_area_turfs(/area/shuttle/arrival))
if(arrivals_turfs.len)
for(var/turf/T in arrivals_turfs)
if(!is_blocked_turf(T, TRUE))
SendToAtom(M, T, FALSE)
return
//last chance, pick ANY spot on arrivals and dump em
SendToAtom(M, arrivals_turfs[1], FALSE)
else
var/msg = "Unable to send mob [M] to late join!"
message_admins(msg)
CRASH(msg)
+3 -3
View File
@@ -37,11 +37,11 @@ SUBSYSTEM_DEF(machines)
var/seconds = wait * 0.1
while(currentrun.len)
var/datum/thing = currentrun[currentrun.len]
var/obj/machinery/thing = currentrun[currentrun.len]
currentrun.len--
if(thing && thing.process(seconds) != PROCESS_KILL)
if(thing:use_power)
thing:auto_use_power() //add back the power state
if(thing.use_power)
thing.auto_use_power() //add back the power state
else
processing -= thing
if (thing)
+3 -1
View File
@@ -119,7 +119,9 @@ SUBSYSTEM_DEF(mapping)
INIT_ANNOUNCE("Loading [config.map_name]...")
TryLoadZ(config.GetFullMapPath(), FailedZs, ZLEVEL_STATION)
INIT_ANNOUNCE("Loaded station in [(REALTIMEOFDAY - start_time)/10]s!")
SSblackbox.add_details("map_name", config.map_name)
if(SSdbcore.Connect())
var/datum/DBQuery/query_round_map_name = SSdbcore.NewQuery("UPDATE [format_table_name("round")] SET map_name = '[config.map_name]' WHERE id = [GLOB.round_id]")
query_round_map_name.Execute()
if(config.minetype != "lavaland")
INIT_ANNOUNCE("WARNING: A map without lavaland set as it's minetype was loaded! This is being ignored! Update the maploader code!")
+2 -1
View File
@@ -25,6 +25,7 @@ SUBSYSTEM_DEF(shuttle)
var/area/emergencyLastCallLoc
var/emergencyCallAmount = 0 //how many times the escape shuttle was called
var/emergencyNoEscape
var/emergencyNoRecall = FALSE
var/list/hostileEnvironments = list()
//supply shuttle stuff
@@ -222,7 +223,7 @@ SUBSYSTEM_DEF(shuttle)
/datum/controller/subsystem/shuttle/proc/centcom_recall(old_timer, admiral_message)
if(emergency.mode != SHUTTLE_CALL || emergency.timer != old_timer)
return
emergency.cancel(/area/centcom)
emergency.cancel()
if(!admiral_message)
admiral_message = pick(GLOB.admiral_messages)
+24 -10
View File
@@ -60,6 +60,8 @@ SUBSYSTEM_DEF(ticker)
var/round_start_time = 0
var/list/round_start_events
var/mode_result = "undefined"
var/end_state = "undefined"
var/modevoted = FALSE //Have we sent a vote for the gamemode?
@@ -639,9 +641,9 @@ SUBSYSTEM_DEF(ticker)
sleep(50)
if(mode.station_was_nuked)
Reboot("Station destroyed by Nuclear Device.", "end_proper", "nuke")
Reboot("Station destroyed by Nuclear Device.", "nuke")
else
Reboot("Round ended.", "end_proper", "proper completion")
Reboot("Round ended.", "proper completion")
/datum/controller/subsystem/ticker/proc/send_tip_of_the_round()
var/m
@@ -744,6 +746,15 @@ SUBSYSTEM_DEF(ticker)
cinematic = SSticker.cinematic
maprotatechecked = SSticker.maprotatechecked
switch (current_state)
if(GAME_STATE_SETTING_UP)
Master.SetRunLevel(RUNLEVEL_SETUP)
if(GAME_STATE_PLAYING)
Master.SetRunLevel(RUNLEVEL_GAME)
if(GAME_STATE_FINISHED)
Master.SetRunLevel(RUNLEVEL_POSTGAME)
modevoted = SSticker.modevoted
/datum/controller/subsystem/ticker/proc/send_news_report()
@@ -833,7 +844,7 @@ SUBSYSTEM_DEF(ticker)
C.Export("##action=load_rsc", round_end_sound)
round_end_sound_sent = TRUE
/datum/controller/subsystem/ticker/proc/Reboot(reason, feedback_c, feedback_r, delay)
/datum/controller/subsystem/ticker/proc/Reboot(reason, end_string, delay)
set waitfor = FALSE
if(usr && !check_rights(R_SERVER, TRUE))
return
@@ -841,21 +852,24 @@ SUBSYSTEM_DEF(ticker)
if(!delay)
delay = config.round_end_countdown * 10
if(delay_end)
var/skip_delay = check_rights()
if(delay_end && !skip_delay)
to_chat(world, "<span class='boldannounce'>An admin has delayed the round end.</span>")
return
to_chat(world, "<span class='boldannounce'>Rebooting World in [delay/10] [(delay >= 10 && delay < 20) ? "second" : "seconds"]. [reason]</span>")
var/start_wait = world.time
UNTIL(round_end_sound_sent && (world.time - start_wait) > (delay * 2)) //don't wait forever
UNTIL(round_end_sound_sent || (world.time - start_wait) > (delay * 2)) //don't wait forever
sleep(delay - (world.time - start_wait))
if(delay_end)
if(delay_end && !skip_delay)
to_chat(world, "<span class='boldannounce'>Reboot was cancelled by an admin.</span>")
return
SSblackbox.set_details("[feedback_c]","[feedback_r]")
if(end_string)
end_state = end_string
log_game("<span class='boldannounce'>Rebooting World. [reason]</span>")
@@ -873,4 +887,4 @@ SUBSYSTEM_DEF(ticker)
'sound/roundend/disappointed.ogg'\
)
world << sound(round_end_sound)
world << sound(round_end_sound)
+1 -1
View File
@@ -137,7 +137,7 @@ SUBSYSTEM_DEF(vote)
active_admins = 1
break
if(!active_admins)
SSticker.Reboot("Restart vote successful.", "end_error", "restart vote")
SSticker.Reboot("Restart vote successful.", "restart vote")
else
to_chat(world, "<span style='boldannounce'>Notice:Restart vote will not restart the server automatically because there are active admins on.</span>")
message_admins("A restart vote has passed, but there are active admins on with +server, so it has been canceled. If you wish, you may restart the server.")
+2 -2
View File
@@ -32,7 +32,7 @@
var/list/symptoms = list() // The symptoms of the disease.
var/id = ""
var/processing = 0
// The order goes from easy to cure to hard to cure.
var/static/list/advance_cures = list(
"sodiumchloride", "sugar", "orangejuice",
@@ -399,7 +399,7 @@
AD.Refresh()
for(var/mob/living/carbon/human/H in shuffle(GLOB.living_mob_list))
if(H.z != 1)
if(H.z != ZLEVEL_STATION)
continue
if(!H.HasDisease(D))
H.ForceContractDisease(D)
+11
View File
@@ -38,6 +38,8 @@
if(findtext(msg, "%s"))
msg = replacetext(msg, "%s", user.p_s())
msg = replace_pronoun(user, msg)
var/mob/living/L = user
for(var/obj/item/weapon/implant/I in L.implants)
I.trigger(key, L)
@@ -61,6 +63,15 @@
user.visible_message(msg)
log_emote("[key_name(user)] : [msg]")
/datum/emote/proc/replace_pronoun(mob/user, message)
if(findtext(message, "their"))
message = replacetext(message, "their", user.p_their())
if(findtext(message, "them"))
message = replacetext(message, "them", user.p_them())
if(findtext(message, "%s"))
message = replacetext(message, "%s", user.p_s())
return message
/datum/emote/proc/select_message_type(mob/user)
. = message
if(!muzzle_ignore && user.is_muzzled() && emote_type == EMOTE_AUDIBLE)
@@ -1,10 +1,48 @@
/proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, ignorecap = 0, flame_range, silent = 0, smoke = 1)
set waitfor = 0
src = null //so we don't abort once src is deleted
#define EXPLOSION_THROW_SPEED 4
GLOBAL_LIST_EMPTY(explosions)
//Against my better judgement, I will return the explosion datum
//If I see any GC errors for it I will find you
//and I will gib you
/proc/explosion(atom/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = TRUE, ignorecap = FALSE, flame_range = 0 , silent = FALSE, smoke = FALSE)
return new /datum/explosion(epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog, ignorecap, flame_range, silent, smoke)
//This datum creates 3 async tasks
//1 GatherSpiralTurfsProc runs spiral_range_turfs(tick_checked = TRUE) to populate the affected_turfs list
//2 CaculateExplosionBlock adds the blockings to the cached_exp_block list
//3 The main thread explodes the prepared turfs
/datum/explosion
var/explosion_id
var/started_at
var/running = TRUE
var/stopped = 0 //This is the number of threads stopped !DOESN'T COUNT THREAD 2!
var/static/id_counter = 0
#define EX_PREPROCESS_EXIT_CHECK \
if(!running) {\
stopped = 2;\
qdel(src);\
return;\
}
#define EX_PREPROCESS_CHECK_TICK \
if(TICK_CHECK) {\
stoplag();\
EX_PREPROCESS_EXIT_CHECK\
}
/datum/explosion/New(atom/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog, ignorecap, flame_range, silent, smoke)
set waitfor = FALSE
var/id = ++id_counter
explosion_id = id
epicenter = get_turf(epicenter)
if(!epicenter)
return
GLOB.explosions += src
if(isnull(flame_range))
flame_range = light_impact_range
if(isnull(flash_range))
@@ -30,14 +68,13 @@
//I would make this not ex_act the thing that triggered the explosion,
//but everything that explodes gives us their loc or a get_turf()
//and somethings expect us to ex_act them so they can qdel()
sleep(1) //tldr, let the calling proc call qdel(src) before we explode
stoplag() //tldr, let the calling proc call qdel(src) before we explode
var/static/explosionid = 1
var/id = explosionid++
var/start = world.timeofday
EX_PREPROCESS_EXIT_CHECK
started_at = REALTIMEOFDAY
var/max_range = max(devastation_range, heavy_impact_range, light_impact_range, flame_range)
var/list/cached_exp_block = list()
if(adminlog)
message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in area: [get_area(epicenter)] [ADMIN_COORDJMP(epicenter)]")
@@ -53,23 +90,27 @@
far_dist += heavy_impact_range * 5
far_dist += devastation_range * 20
var/x0 = epicenter.x
var/y0 = epicenter.y
var/z0 = epicenter.z
if(!silent)
var/frequency = get_rand_frequency()
var/ex_sound = get_sfx("explosion")
for(var/mob/M in GLOB.player_list)
// Double check for client
if(M && M.client)
var/turf/M_turf = get_turf(M)
if(M_turf && M_turf.z == epicenter.z)
var/dist = get_dist(M_turf, epicenter)
// If inside the blast radius + world.view - 2
if(dist <= round(max_range + world.view - 2, 1))
M.playsound_local(epicenter, ex_sound, 100, 1, frequency, falloff = 5)
// You hear a far explosion if you're outside the blast radius. Small bombs shouldn't be heard all over the station.
else if(dist <= far_dist)
var/far_volume = Clamp(far_dist, 30, 50) // Volume is based on explosion size and dist
far_volume += (dist <= far_dist * 0.5 ? 50 : 0) // add 50 volume if the mob is pretty close to the explosion
M.playsound_local(epicenter, 'sound/effects/explosionfar.ogg', far_volume, 1, frequency, falloff = 5)
var/turf/M_turf = get_turf(M)
if(M_turf && M_turf.z == z0)
var/dist = get_dist(M_turf, epicenter)
// If inside the blast radius + world.view - 2
if(dist <= round(max_range + world.view - 2, 1))
M.playsound_local(epicenter, ex_sound, 100, 1, frequency, falloff = 5)
// You hear a far explosion if you're outside the blast radius. Small bombs shouldn't be heard all over the station.
else if(dist <= far_dist)
var/far_volume = Clamp(far_dist, 30, 50) // Volume is based on explosion size and dist
far_volume += (dist <= far_dist * 0.5 ? 50 : 0) // add 50 volume if the mob is pretty close to the explosion
M.playsound_local(epicenter, 'sound/effects/explosionfar.ogg', far_volume, 1, frequency, falloff = 5)
EX_PREPROCESS_CHECK_TICK
//postpone processing for a bit
var/postponeCycles = max(round(devastation_range/8),1)
@@ -77,66 +118,52 @@
SSmachines.postpone(postponeCycles)
if(heavy_impact_range > 1)
var/datum/effect_system/explosion/E
if(smoke)
var/datum/effect_system/explosion/smoke/E = new/datum/effect_system/explosion/smoke()
E.set_up(epicenter)
E.start()
E = new /datum/effect_system/explosion/smoke
else
var/datum/effect_system/explosion/E = new/datum/effect_system/explosion()
E.set_up(epicenter)
E.start()
E = new
E.set_up(epicenter)
E.start()
var/x0 = epicenter.x
var/y0 = epicenter.y
var/z0 = epicenter.z
var/list/affected_turfs = spiral_range_turfs(max_range, epicenter)
if(config.reactionary_explosions)
for(var/turf/T in affected_turfs) // we cache the explosion block rating of every turf in the explosion area
cached_exp_block[T] = 0
if(T.density && T.explosion_block)
cached_exp_block[T] += T.explosion_block
for(var/obj/machinery/door/D in T)
if(D.density && D.explosion_block)
cached_exp_block[T] += D.explosion_block
for(var/obj/structure/window/W in T)
if(W.reinf && W.fulltile)
cached_exp_block[T] += W.explosion_block
for(var/obj/structure/blob/B in T)
cached_exp_block[T] += B.explosion_block
CHECK_TICK
EX_PREPROCESS_CHECK_TICK
//flash mobs
if(flash_range)
for(var/mob/living/L in viewers(flash_range, epicenter))
L.flash_act()
CHECK_TICK
EX_PREPROCESS_CHECK_TICK
var/list/exploded_this_tick = list() //open turfs that need to be blocked off while we sleep
for(var/turf/T in affected_turfs)
var/list/affected_turfs = GatherSpiralTurfs(max_range, epicenter)
if (!T)
continue
var/reactionary = config.reactionary_explosions
var/list/cached_exp_block
if(reactionary)
cached_exp_block = CaculateExplosionBlock(affected_turfs)
//lists are guaranteed to contain at least 1 turf at this point
var/iteration = 0
var/affTurfLen = affected_turfs.len
var/expBlockLen = cached_exp_block.len
for(var/TI in affected_turfs)
var/turf/T = TI
++iteration
var/init_dist = cheap_hypotenuse(T.x, T.y, x0, y0)
var/dist = init_dist
if(config.reactionary_explosions)
if(reactionary)
var/turf/Trajectory = T
while(Trajectory != epicenter)
Trajectory = get_step_towards(Trajectory, epicenter)
dist += cached_exp_block[Trajectory]
var/flame_dist = 0
var/flame_dist = dist < flame_range
var/throw_dist = dist
if(dist < flame_range)
flame_dist = 1
if(dist < devastation_range)
dist = 1
else if(dist < heavy_impact_range)
@@ -148,27 +175,61 @@
//------- EX_ACT AND TURF FIRES -------
if(T)
if(flame_dist && prob(40) && !isspaceturf(T) && !T.density)
new /obj/effect/hotspot(T) //Mostly for ambience!
if(dist > 0)
T.explosion_level = max(T.explosion_level, dist) //let the bigger one have it
T.explosion_id = id
T.ex_act(dist)
exploded_this_tick += T
if(flame_dist && prob(40) && !isspaceturf(T) && !T.density)
new /obj/effect/hotspot(T) //Mostly for ambience!
if(dist > 0)
T.explosion_level = max(T.explosion_level, dist) //let the bigger one have it
T.explosion_id = id
T.ex_act(dist)
exploded_this_tick += T
//--- THROW ITEMS AROUND ---
var/throw_dir = get_dir(epicenter,T)
for(var/obj/item/I in T)
if(I && !I.anchored)
if(!I.anchored)
var/throw_range = rand(throw_dist, max_range)
var/turf/throw_at = get_ranged_target_turf(I, throw_dir, throw_range)
I.throw_speed = 4 //Temporarily change their throw_speed for embedding purposes (Reset when it finishes throwing, regardless of hitting anything)
I.throw_at(throw_at, throw_range, I.throw_speed)
I.throw_speed = EXPLOSION_THROW_SPEED //Temporarily change their throw_speed for embedding purposes (Reset when it finishes throwing, regardless of hitting anything)
I.throw_at(throw_at, throw_range, EXPLOSION_THROW_SPEED)
if(TICK_CHECK)
//wait for the lists to repop
var/break_condition
if(reactionary)
//If we've caught up to the density checker thread and there are no more turfs to process
break_condition = iteration == expBlockLen && iteration < affTurfLen
else
//If we've caught up to the turf gathering thread and it's still running
break_condition = iteration == affTurfLen && !stopped
if(break_condition || TICK_CHECK)
stoplag()
if(!running)
break
//update the trackers
affTurfLen = affected_turfs.len
expBlockLen = cached_exp_block.len
if(break_condition)
if(reactionary)
//until there are more block checked turfs than what we are currently at
//or the explosion has stopped
UNTIL(iteration < affTurfLen || !running)
else
//until there are more gathered turfs than what we are currently at
//or there are no more turfs to gather/the explosion has stopped
UNTIL(iteration < expBlockLen || stopped)
if(!running)
break
//update the trackers
affTurfLen = affected_turfs.len
expBlockLen = cached_exp_block.len
var/circumference = (PI * (init_dist + 4) * 2) //+4 to radius to prevent shit gaps
if(exploded_this_tick.len > circumference) //only do this every revolution
for(var/Unexplode in exploded_this_tick)
@@ -182,24 +243,67 @@
UnexplodeT.explosion_level = 0
exploded_this_tick.Cut()
var/took = (world.timeofday-start)/10
//You need to press the DebugGame verb to see these now....they were getting annoying and we've collected a fair bit of data. Just -test- changes to explosion code using this please so we can compare
var/took = (REALTIMEOFDAY - started_at) / 10
//You need to press the DebugGame verb to see these now....they were getting annoying and we've collected a fair bit of data. Just -test- changes to explosion code using this please so we can compare
if(GLOB.Debug2)
log_world("## DEBUG: Explosion([x0],[y0],[z0])(d[devastation_range],h[heavy_impact_range],l[light_impact_range]): Took [took] seconds.")
//Machines which report explosions.
for(var/array in GLOB.doppler_arrays)
var/obj/machinery/doppler_array/A = array
A.sense_explosion(epicenter,devastation_range,heavy_impact_range,light_impact_range,took,orig_dev_range,orig_heavy_range,orig_light_range)
if(running) //if we aren't in a hurry
//Machines which report explosions.
for(var/array in GLOB.doppler_arrays)
var/obj/machinery/doppler_array/A = array
A.sense_explosion(epicenter, devastation_range, heavy_impact_range, light_impact_range, took,orig_dev_range, orig_heavy_range, orig_light_range)
return 1
++stopped
qdel(src)
#undef EX_PREPROCESS_EXIT_CHECK
#undef EX_PREPROCESS_CHECK_TICK
//asyncly populate the affected_turfs list
/datum/explosion/proc/GatherSpiralTurfs(range, turf/epicenter)
set waitfor = FALSE
. = list()
spiral_range_turfs(range, epicenter, outlist = ., tick_checked = TRUE)
++stopped
/proc/secondaryexplosion(turf/epicenter, range)
for(var/turf/tile in spiral_range_turfs(range, epicenter))
tile.ex_act(2)
/datum/explosion/proc/CaculateExplosionBlock(list/affected_turfs)
set waitfor = FALSE
. = list()
var/processed = 0
while(!stopped && running)
var/I
for(I in (processed + 1) to affected_turfs.len) // we cache the explosion block rating of every turf in the explosion area
var/turf/T = affected_turfs[I]
var/current_exp_block = T.density ? T.explosion_block : 0
for(var/obj/machinery/door/D in T)
if(D.density)
current_exp_block += D.explosion_block
for(var/obj/structure/window/W in T)
if(W.reinf && W.fulltile)
current_exp_block += W.explosion_block
for(var/obj/structure/blob/B in T)
current_exp_block += B.explosion_block
.[T] = current_exp_block
if(TICK_CHECK)
break
processed = I
stoplag()
/datum/explosion/Destroy()
running = FALSE
if(stopped < 2) //wait for main thread and spiral_range thread
return QDEL_HINT_IWILLGC
GLOB.explosions -= src
return ..()
/client/proc/check_bomb_impacts()
set name = "Check Bomb Impact"
+38 -28
View File
@@ -1,37 +1,44 @@
/datum/getrev
var/originmastercommit
var/originmastercommit
var/commit
var/list/testmerge = list()
var/has_pr_details = FALSE //example data in a testmerge entry when this is true: https://api.github.com/repositories/3234987/pulls/22586
var/has_pr_details = FALSE //tgs2 support
var/date
/datum/getrev/New()
if(SERVERTOOLS && fexists("..\\prtestjob.lk"))
if(fexists(SERVICE_PR_TEST_JSON))
testmerge = json_decode(file2text(SERVICE_PR_TEST_JSON))
else if(!world.RunningService() && fexists("../prtestjob.lk")) //tgs2 support
var/list/tmp = world.file2list("..\\prtestjob.lk")
for(var/I in tmp)
if(I)
testmerge |= I
log_world("Running /tg/ revision:")
var/list/logs = world.file2list(".git/logs/HEAD")
if(logs)
logs = splittext(logs[logs.len - 1], " ")
date = unix2date(text2num(logs[5]))
commit = logs[2]
log_world("[date]")
logs = world.file2list(".git/logs/refs/remotes/origin/master")
if(logs)
originmastercommit = splittext(logs[logs.len - 1], " ")[2]
var/list/logs = world.file2list(".git/logs/HEAD")
if(logs)
logs = splittext(logs[logs.len - 1], " ")
date = unix2date(text2num(logs[5]))
commit = logs[2]
log_world("[date]")
logs = world.file2list(".git/logs/refs/remotes/origin/master")
if(logs)
originmastercommit = splittext(logs[logs.len - 1], " ")[2]
if(testmerge.len)
log_world(commit)
for(var/line in testmerge)
if(line)
log_world("Test merge active of PR #[line]")
SSblackbox.add_details("testmerged_prs","[line]")
log_world("Based off origin/master commit [originmastercommit]")
if(world.RunningService())
var/tmcommit = testmerge[line]["commit"]
log_world("Test merge active of PR #[line] commit [tmcommit]")
SSblackbox.add_details("testmerged_prs","[line]|[tmcommit]")
else //tgs2 support
log_world("Test merge active of PR #[line]")
SSblackbox.add_details("testmerged_prs","[line]")
log_world("Based off origin/master commit [originmastercommit]")
else
log_world(originmastercommit)
log_world(originmastercommit)
/datum/getrev/proc/DownloadPRDetails()
if(!config.githubrepoid)
@@ -66,8 +73,11 @@
return ""
. = header ? "The following pull requests are currently test merged:<br>" : ""
for(var/line in testmerge)
var/details = ""
if(has_pr_details)
var/cm = testmerge[line]["commit"]
var/details
if(world.RunningService())
details = ": '" + html_encode(testmerge[line]["title"]) + "' by " + html_encode(testmerge[line]["author"]) + " at commit " + html_encode(copytext(cm, 1, min(length(cm), 7)))
else if(has_pr_details) //tgs2 support
details = ": '" + html_encode(testmerge[line]["title"]) + "' by " + html_encode(testmerge[line]["user"]["login"])
. += "<a href='[config.githuburl]/pull/[line]'>#[line][details]</a><br>"
@@ -76,14 +86,14 @@
set name = "Show Server Revision"
set desc = "Check the current server code revision"
if(GLOB.revdata.originmastercommit)
if(GLOB.revdata.originmastercommit)
to_chat(src, "<b>Server revision compiled on:</b> [GLOB.revdata.date]")
var/prefix = ""
var/prefix = ""
if(GLOB.revdata.testmerge.len)
to_chat(src, GLOB.revdata.GetTestMergeInfo())
prefix = "Based off origin/master commit: "
var/pc = GLOB.revdata.originmastercommit
to_chat(src, "[prefix]<a href='[config.githuburl]/commit/[pc]'>[copytext(pc, 1, min(length(pc), 7))]</a>")
prefix = "Based off origin/master commit: "
var/pc = GLOB.revdata.originmastercommit
to_chat(src, "[prefix]<a href='[config.githuburl]/commit/[pc]'>[copytext(pc, 1, min(length(pc), 7))]</a>")
else
to_chat(src, "Revision unknown")
to_chat(src, "<b>Current Infomational Settings:</b>")
@@ -94,7 +104,7 @@
to_chat(src, "Enforce Continuous Rounds: [config.continuous.len] of [config.modes.len] roundtypes")
to_chat(src, "Allow Midround Antagonists: [config.midround_antag.len] of [config.modes.len] roundtypes")
if(config.show_game_type_odds)
if(SSticker.IsRoundInProgress())
if(SSticker.IsRoundInProgress())
var/prob_sum = 0
var/current_odds_differ = FALSE
var/list/probs = list()
@@ -110,13 +120,13 @@
probs[ctag] = 1
prob_sum += config.probabilities[ctag]
if(current_odds_differ)
to_chat(src, "<b>Game Mode Odds for current round:</b>")
to_chat(src, "<b>Game Mode Odds for current round:</b>")
for(var/ctag in probs)
if(config.probabilities[ctag] > 0)
var/percentage = round(config.probabilities[ctag] / prob_sum * 100, 0.1)
to_chat(src, "[ctag] [percentage]%")
to_chat(src, "<b>All Game Mode Odds:</b>")
to_chat(src, "<b>All Game Mode Odds:</b>")
var/sum = 0
for(var/ctag in config.probabilities)
sum += config.probabilities[ctag]
+12 -13
View File
@@ -43,18 +43,18 @@
//cleans up ALL references :)
/datum/holocall/Destroy()
user.reset_perspective()
if(user.client)
for(var/datum/camerachunk/chunk in eye.visibleCameraChunks)
chunk.remove(eye)
user.remote_control = null
if(!QDELETED(user))
user.reset_perspective()
if(user.client)
for(var/datum/camerachunk/chunk in eye.visibleCameraChunks)
chunk.remove(eye)
user.remote_control = null
user = null
QDEL_NULL(eye)
user = null
if(hologram)
hologram.HC = null
hologram = null
calling_holopad.outgoing_call = null
hologram = null
for(var/I in dialed_holopads)
var/obj/machinery/holopad/H = I
@@ -62,6 +62,7 @@
dialed_holopads.Cut()
if(calling_holopad)
calling_holopad.outgoing_call = null
calling_holopad.SetLightsAndPower()
calling_holopad = null
if(connected_holopad)
@@ -86,7 +87,7 @@
/datum/holocall/proc/ConnectionFailure(obj/machinery/holopad/H, graceful = FALSE)
testing("Holocall connection failure: graceful [graceful]")
if(H == connected_holopad || H == calling_holopad)
if(!graceful)
if(!graceful && H != calling_holopad)
calling_holopad.say("Connection failure.")
qdel(src)
return
@@ -152,9 +153,7 @@
. = !QDELETED(user) && !user.incapacitated() && !QDELETED(calling_holopad) && calling_holopad.is_operational() && user.loc == calling_holopad.loc
if(.)
if(connected_holopad)
. = !QDELETED(connected_holopad) && connected_holopad.is_operational()
else
if(!connected_holopad)
. = world.time < (call_start_time + HOLOPAD_MAX_DIAL_TIME)
if(!.)
calling_holopad.say("No answer recieved.")
+2 -2
View File
@@ -11,8 +11,8 @@
var/minetype = "lavaland"
var/list/transition_config = list(MAIN_STATION = CROSSLINKED,
CENTCOMM = SELFLOOPING,
var/list/transition_config = list(CENTCOMM = SELFLOOPING,
MAIN_STATION = CROSSLINKED,
EMPTY_AREA_1 = CROSSLINKED,
EMPTY_AREA_2 = CROSSLINKED,
MINING = SELFLOOPING,
+2 -2
View File
@@ -68,6 +68,7 @@
/datum/mind/New(var/key)
src.key = key
soulOwner = src
martial_art = default_martial_art
/datum/mind/Destroy()
SSticker.minds -= src
@@ -1288,7 +1289,6 @@
else if (istype(M) && length(M.viruses))
for(var/datum/disease/D in M.viruses)
D.cure(0)
sleep(0) //because deleting of virus is done through spawn(0)
if("infected")
if (check_rights(R_ADMIN, 0))
var/mob/living/carbon/human/H = current
@@ -1447,7 +1447,7 @@
special_role = "Wizard"
assigned_role = "Wizard"
if(!GLOB.wizardstart.len)
current.loc = pick(GLOB.latejoin)
SSjob.SendToLateJoin(current)
to_chat(current, "HOT INSERTION, GO GO GO")
else
current.loc = pick(GLOB.wizardstart)
+17
View File
@@ -608,6 +608,23 @@ GLOBAL_LIST_EMPTY(mutations_list)
message = replacetext(message," muh valids "," getting my kicks ")
return trim(message)
/datum/mutation/human/stoner
name = "Stoner"
quality = NEGATIVE
dna_block = NON_SCANNABLE
text_gain_indication = "<span class='notice'>You feel...totally chill, man!</span>"
text_lose_indication = "<span class='notice'>You feel like you have a better sense of time.</span>"
/datum/mutation/human/stoner/on_acquiring(mob/living/carbon/human/owner)
..()
owner.grant_language(/datum/language/beachbum)
owner.remove_language(/datum/language/common)
/datum/mutation/human/stoner/on_losing(mob/living/carbon/human/owner)
..()
owner.grant_language(/datum/language/common)
owner.remove_language(/datum/language/beachbum)
/datum/mutation/human/laser_eyes
name = "Laser Eyes"
quality = POSITIVE
+13 -6
View File
@@ -20,7 +20,10 @@
var/r_hand = null
var/l_hand = null
var/internals_slot = null //ID of slot containing a gas tank
var/list/backpack_contents = list() // In the list(path=count,otherpath=count) format
var/list/backpack_contents = null // In the list(path=count,otherpath=count) format
var/list/implants = null
var/can_be_admin_equipped = TRUE // Set to FALSE if your outfit requires runtime parameters
/datum/outfit/proc/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
//to be overriden for customization depending on client prefs,species etc
@@ -71,11 +74,11 @@
H.equip_to_slot_or_del(new l_pocket(H),slot_l_store)
if(r_pocket)
H.equip_to_slot_or_del(new r_pocket(H),slot_r_store)
for(var/path in backpack_contents)
var/number = backpack_contents[path]
for(var/i=0,i<number,i++)
H.equip_to_slot_or_del(new path(H),slot_in_backpack)
if(backpack_contents)
for(var/path in backpack_contents)
var/number = backpack_contents[path]
for(var/i=0,i<number,i++)
H.equip_to_slot_or_del(new path(H),slot_in_backpack)
if(!H.head && toggle_helmet && istype(H.wear_suit, /obj/item/clothing/suit/space/hardsuit))
var/obj/item/clothing/suit/space/hardsuit/HS = H.wear_suit
@@ -88,6 +91,10 @@
if(internals_slot)
H.internal = H.get_item_by_slot(internals_slot)
H.update_action_buttons_icon()
if(implants)
for(var/implant_type in implants)
var/obj/item/weapon/implant/I = new implant_type(H)
I.implant(H, null, silent=TRUE)
H.update_body()
return 1
+2 -2
View File
@@ -45,7 +45,7 @@
if(offsetdir == ridden_dir)
var/list/diroffsets = offsets[offsetdir]
buckled_mob.pixel_x = diroffsets[1]
if(diroffsets.len == 2)
if(diroffsets.len >= 2)
buckled_mob.pixel_y = diroffsets[2]
if(diroffsets.len == 3)
buckled_mob.layer = diroffsets[3]
@@ -164,7 +164,7 @@
/datum/riding/janicart/get_offsets(pass_index) // list(dir = x, y, layer)
return list("[NORTH]" = list(0, 4), "[SOUTH]" = list(-12, 7), "[EAST]" = list(0, 7), "[WEST]" = list( 12, 7))
return list("[NORTH]" = list(0, 4), "[SOUTH]" = list(0, 7), "[EAST]" = list(-12, 7), "[WEST]" = list( 12, 7))
//scooter
/datum/riding/scooter/handle_vehicle_layer()
+1 -7
View File
@@ -241,10 +241,4 @@
id = "miracle"
suffix = "miracle.dmm"
name = "Ordinary Space Tile"
description = "Absolutely nothing strange going on here please move along, plenty more space to see right this way!"
/datum/map_template/ruin/space/dragoon
id = "dragoon"
suffix = "dragoontomb.dmm"
name = "Sky Bulge Tomb"
description = "A tomb of a dice-loving dragoon in space. Turns out he got too good and jumped too high. Contains the Sky Bulge, which when thrown, warps the thrower."
description = "Absolutely nothing strange going on here please move along, plenty more space to see right this way!"
-10
View File
@@ -1,15 +1,5 @@
//Largely negative status effects go here, even if they have small benificial effects
/datum/status_effect/sigil_mark //allows the affected target to always trigger sigils while mindless
id = "sigil_mark"
duration = -1
alert_type = null
var/stat_allowed = DEAD //if owner's stat is below this, will remove itself
/datum/status_effect/sigil_mark/tick()
if(owner.stat < stat_allowed)
qdel(src)
/datum/status_effect/his_wrath //does minor damage over time unless holding His Grace
id = "his_wrath"
duration = -1
+18
View File
@@ -0,0 +1,18 @@
//entirely neutral or internal status effects go here
/datum/status_effect/sigil_mark //allows the affected target to always trigger sigils while mindless
id = "sigil_mark"
duration = -1
alert_type = null
var/stat_allowed = DEAD //if owner's stat is below this, will remove itself
/datum/status_effect/sigil_mark/tick()
if(owner.stat < stat_allowed)
qdel(src)
/datum/status_effect/crusher_damage //tracks the damage dealt to this mob by kinetic crushers
id = "crusher_damage"
duration = -1
status_type = STATUS_EFFECT_UNIQUE
alert_type = null
var/total_damage = 0
+1 -1
View File
@@ -134,7 +134,7 @@
area_type = /area
protected_areas = list(/area/maintenance, /area/ai_monitored/turret_protected/ai_upload, /area/ai_monitored/turret_protected/ai_upload_foyer,
/area/ai_monitored/turret_protected/ai, /area/storage/emergency, /area/storage/emergency2, /area/shuttle)
/area/ai_monitored/turret_protected/ai, /area/storage/emergency/starboard, /area/storage/emergency/port, /area/shuttle)
target_z = ZLEVEL_STATION
immunity_type = "rad"
+6 -3
View File
@@ -50,9 +50,9 @@
R.show_laws()
if(WIRE_LOCKDOWN)
R.SetLockdown(!R.lockcharge) // Toggle
if(WIRE_RESET_MODULE)
if(R.has_module())
R.ResetModule()
if(WIRE_RESET_MODULE)
if(R.has_module())
R.visible_message("[R]'s module servos twitch.", "Your module display flickers.")
/datum/wires/robot/on_cut(wire, mend)
var/mob/living/silicon/robot/R = holder
@@ -74,3 +74,6 @@
R.visible_message("[R]'s camera lense focuses loudly.", "Your camera lense focuses loudly.")
if(WIRE_LOCKDOWN) // Simple lockdown.
R.SetLockdown(!mend)
if(WIRE_RESET_MODULE)
if(R.has_module() && !mend)
R.ResetModule()
File diff suppressed because it is too large Load Diff
+4
View File
@@ -37,6 +37,7 @@
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
requires_power = 0
has_gravity = 1
flags = NONE
/area/tdome/arena
name = "Thunderdome Arena"
@@ -75,6 +76,7 @@
requires_power = 0
has_gravity = 1
noteleport = 1
flags = NONE
//Abductors
/area/abductor_ship
@@ -83,6 +85,7 @@
requires_power = 0
noteleport = 1
has_gravity = 1
flags = NONE
//Syndicates
/area/syndicate_mothership
@@ -92,6 +95,7 @@
has_gravity = 1
noteleport = 1
blob_allowed = 0 //Not... entirely sure this will ever come up... but if the bus makes blobs AND ops, it shouldn't aim for the ops to win.
flags = NONE
/area/syndicate_mothership/control
name = "Syndicate Control Room"
+3 -3
View File
@@ -57,13 +57,13 @@
name = "Mining Station Communications"
/area/mine/cafeteria
name = "Mining station Cafeteria"
name = "Mining Station Cafeteria"
/area/mine/hydroponics
name = "Mining station Hydroponics"
name = "Mining Station Hydroponics"
/area/mine/sleeper
name = "Mining station Emergency Sleeper"
name = "Mining Station Emergency Sleeper"
/area/mine/north_outpost
name = "North Mining Outpost"
+14 -3
View File
@@ -115,15 +115,26 @@
/area/prison/solitary
name = "Solitary Confinement"
icon_state = "brig"
/area/prison/execution_room
name = "Prisoner Education Chamber"
icon_state = "armory"
/area/prison/cell_block/A
/area/prison/execution_room
name = "Prisoner Education Chamber"
icon_state = "armory"
/area/prison/cell_block/a
// /area/prison/cell_block/A
name = "Prison Cell Block A"
icon_state = "brig"
/area/prison/cell_block/B
/area/prison/cell_block/b
// /area/prison/cell_block/B
name = "Prison Cell Block B"
icon_state = "brig"
/area/prison/cell_block/C
/area/prison/cell_block/c
// /area/prison/cell_block/C
name = "Prison Cell Block C"
icon_state = "brig"
+35 -7
View File
@@ -21,20 +21,48 @@
//Areas
/area/ruin/powered/beach
icon_state = "dk_yellow"
/area/ruin/powered/clownplanet
icon_state = "dk_yellow"
/area/ruin/powered/animal_hospital
icon_state = "dk_yellow"
/area/ruin/powered/snow_biodome
icon_state = "dk_yellow"
/area/ruin/powered/gluttony
icon_state = "dk_yellow"
/area/ruin/powered/golem_ship
name = "Free Golem Ship"
icon_state = "dk_yellow"
/area/ruin/powered/greed
icon_state = "dk_yellow"
/area/ruin/unpowered/hierophant
name = "Hierophant's Arena"
icon_state = "dk_yellow"
/area/ruin/powered/pride
icon_state = "dk_yellow"
/area/ruin/powered/seedvault
icon_state = "dk_yellow"
/area/ruin/powered/syndicate_lava_base
name = "Secret Base"
icon_state = "dk_yellow"
/area/ruin/unpowered/no_grav/way_home
name = "\improper Salvation"
icon_state = "away"
/area/ruin/powered/snow_biodome
/area/ruin/powered/golem_ship
name = "Free Golem Ship"
/area/ruin/powered/syndicate_lava_base
name = "Secret Base"
// Ruins of "onehalf" ship
+36 -36
View File
@@ -28,8 +28,8 @@
var/list/our_overlays //our local copy of (non-priority) overlays without byond magic. Use procs in SSoverlays to manipulate
var/list/priority_overlays //overlays that should remain on top and not normally removed when using cut_overlay functions, like c4.
var/datum/proximity_monitor/proximity_monitor
var/datum/proximity_monitor/proximity_monitor
/atom/New(loc, ...)
//atom creation method that preloads variables at creation
if(GLOB.use_preloader && (src.type == GLOB._preloader.target_path))//in case the instanciated atom is creating other atoms in New()
@@ -39,21 +39,21 @@
var/do_initialize = SSatoms.initialized
if(do_initialize > INITIALIZATION_INSSATOMS)
args[1] = do_initialize == INITIALIZATION_INNEW_MAPLOAD
if(SSatoms.InitAtom(src, args))
//we were deleted
return
var/list/created = SSatoms.created_atoms
if(created)
created += src
args[1] = do_initialize == INITIALIZATION_INNEW_MAPLOAD
if(SSatoms.InitAtom(src, args))
//we were deleted
return
var/list/created = SSatoms.created_atoms
if(created)
created += src
//Called after New if the map is being loaded. mapload = TRUE
//Called from base of New if the map is being loaded. mapload = FALSE
//This base must be called or derivatives must set initialized to TRUE
//must not sleep
//This base must be called or derivatives must set initialized to TRUE
//must not sleep
//Other parameters are passed from New (excluding loc), this does not happen if mapload is TRUE
//Must return an Initialize hint. Defined in __DEFINES/subsystems.dm
//Must return an Initialize hint. Defined in __DEFINES/subsystems.dm
//Note: the following functions don't call the base for optimization and must copypasta:
// /turf/Initialize
@@ -76,23 +76,23 @@
if (opacity && isturf(loc))
var/turf/T = loc
T.has_opaque_atom = TRUE // No need to recalculate it in this case, it's guaranteed to be on afterwards anyways.
return INITIALIZE_HINT_NORMAL
return INITIALIZE_HINT_NORMAL
//called if Initialize returns INITIALIZE_HINT_LATELOAD
//This version shouldn't be called
/atom/proc/LateInitialize()
var/static/list/warned_types = list()
if(!warned_types[type])
WARNING("Old style LateInitialize behaviour detected in [type]!")
warned_types[type] = TRUE
Initialize(FALSE)
//called if Initialize returns INITIALIZE_HINT_LATELOAD
//This version shouldn't be called
/atom/proc/LateInitialize()
var/static/list/warned_types = list()
if(!warned_types[type])
WARNING("Old style LateInitialize behaviour detected in [type]!")
warned_types[type] = TRUE
Initialize(FALSE)
/atom/Destroy()
if(alternate_appearances)
for(var/K in alternate_appearances)
var/datum/atom_hud/alternate_appearance/AA = alternate_appearances[K]
AA.remove_from_hud(src)
for(var/K in alternate_appearances)
var/datum/atom_hud/alternate_appearance/AA = alternate_appearances[K]
AA.remove_from_hud(src)
if(reagents)
qdel(reagents)
@@ -100,13 +100,13 @@
LAZYCLEARLIST(priority_overlays)
//SSoverlays.processing -= src //we COULD do this, but it's better to just let it fall out of the processing queue
QDEL_NULL(light)
QDEL_NULL(light)
return ..()
/atom/proc/handle_ricochet(obj/item/projectile/P)
return
/atom/proc/handle_ricochet(obj/item/projectile/P)
return
/atom/proc/CanPass(atom/movable/mover, turf/target, height=1.5)
return (!density || !height)
@@ -277,7 +277,7 @@
return
/atom/proc/ex_act(severity, target)
set waitfor = FALSE
set waitfor = FALSE
contents_explosion(severity, target)
/atom/proc/blob_act(obj/structure/blob/B)
@@ -509,10 +509,10 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons)
/atom/proc/mech_melee_attack(obj/mecha/M)
return
//If a mob logouts/logins in side of an object you can use this proc
/atom/proc/on_log(login)
if(loc)
loc.on_log(login)
//If a mob logouts/logins in side of an object you can use this proc
/atom/proc/on_log(login)
if(loc)
loc.on_log(login)
/*
+1 -1
View File
@@ -236,7 +236,7 @@
/obj/item/weapon/antag_spawner/slaughter_demon/attack_self(mob/user)
if(user.z != 1)
if(user.z != ZLEVEL_STATION)
to_chat(user, "<span class='notice'>You should probably wait until you reach the station.</span>")
return
if(used)
+3 -3
View File
@@ -20,7 +20,7 @@
if(round_converted) //So badmin blobs later don't step on the dead natural blobs metaphorical toes
..()
if(blobwincount <= GLOB.blobs_legit.len)
SSblackbox.set_details("round_end_result","win - blob took over")
SSticker.mode_result = "win - blob took over"
to_chat(world, "<FONT size = 3><B>The blob has taken over the station!</B></FONT>")
to_chat(world, "<B>The entire station was eaten by the Blob!</B>")
log_game("Blob mode completed with a blob victory.")
@@ -28,7 +28,7 @@
SSticker.news_report = BLOB_WIN
else if(station_was_nuked)
SSblackbox.set_details("round_end_result","halfwin - nuke")
SSticker.mode_result = "halfwin - nuke"
to_chat(world, "<FONT size = 3><B>Partial Win: The station has been destroyed!</B></FONT>")
to_chat(world, "<B>Directive 7-12 has been successfully carried out, preventing the Blob from spreading.</B>")
log_game("Blob mode completed with a tie (station destroyed).")
@@ -36,7 +36,7 @@
SSticker.news_report = BLOB_NUKE
else if(!GLOB.blob_cores.len)
SSblackbox.set_details("round_end_result","loss - blob eliminated")
SSticker.mode_result = "loss - blob eliminated"
to_chat(world, "<FONT size = 3><B>The staff has won!</B></FONT>")
to_chat(world, "<B>The alien organism has been eradicated from the station!</B>")
log_game("Blob mode completed with a crew victory.")
+3 -3
View File
@@ -191,7 +191,7 @@ Credit where due:
var/datum/game_mode/clockwork_cult/C = SSticker.mode
if(C.check_clockwork_victory())
text += "<span class='large_brass'><b>Ratvar's servants have succeeded in fulfilling His goals!</b></span>"
SSblackbox.set_details("round_end_result", "win - servants completed their objective (summon ratvar)")
SSticker.mode_result = "win - servants completed their objective (summon ratvar)"
else
var/half_victory = FALSE
var/obj/structure/destructible/clockwork/massive/celestial_gateway/G = locate() in GLOB.all_clockwork_objects
@@ -200,10 +200,10 @@ Credit where due:
if(half_victory)
text += "<span class='large_brass'><b>The crew escaped before Ratvar could rise, but the gateway \
was successfully constructed!</b></span>"
SSblackbox.set_details("round_end_result", "halfwin - servants constructed the gateway but their objective was not completed (summon ratvar)")
SSticker.mode_result = "halfwin - servants constructed the gateway but their objective was not completed (summon ratvar)"
else
text += "<span class='userdanger'>Ratvar's servants have failed!</span>"
SSblackbox.set_details("round_end_result", "loss - servants failed their objective (summon ratvar)")
SSticker.mode_result = "loss - servants failed their objective (summon ratvar)"
text += "<br><b>The servants' objective was:</b> <br>[CLOCKCULT_OBJECTIVE]"
text += "<br>Ratvar's servants had <b>[GLOB.clockwork_caches]</b> Tinkerer's Caches."
text += "<br><b>Construction Value(CV)</b> was: <b>[GLOB.clockwork_construction_value]</b>"
+4 -13
View File
@@ -208,12 +208,10 @@
/datum/game_mode/cult/declare_completion()
if(!check_cult_victory())
SSblackbox.set_details("round_end_result","win - cult win")
SSblackbox.set_val("round_end_result",acolytes_survived)
SSticker.mode_result = "win - cult win"
to_chat(world, "<span class='greentext'>The cult has succeeded! Nar-sie has snuffed out another torch in the void!</span>")
else
SSblackbox.set_details("round_end_result","loss - staff stopped the cult")
SSblackbox.set_val("round_end_result",acolytes_survived)
SSticker.mode_result = "loss - staff stopped the cult"
to_chat(world, "<span class='redtext'>The staff managed to stop the cult! Dark words and heresy are no match for Nanotrasen's finest!</span>")
var/text = ""
@@ -257,22 +255,15 @@
/datum/game_mode/proc/datum_cult_completion()
var/text = ""
var/acolytes_survived = 0
for(var/datum/mind/cult_mind in cult)
if (cult_mind.current && cult_mind.current.stat != DEAD)
if(cult_mind.current.onCentcom() || cult_mind.current.onSyndieBase())
acolytes_survived++
var/cult_fail = 0
cult_fail += eldergod
if(!GLOB.sac_complete)
cult_fail++
if(!cult_fail)
SSblackbox.set_details("round_end_result","win - cult win")
SSblackbox.set_val("round_end_result",acolytes_survived)
SSticker.mode_result = "win - cult win"
to_chat(world, "<span class='greentext'>The cult has succeeded! Nar-sie has snuffed out another torch in the void!</span>")
else
SSblackbox.set_details("round_end_result","loss - staff stopped the cult")
SSblackbox.set_val("round_end_result",acolytes_survived)
SSticker.mode_result = "loss - staff stopped the cult"
to_chat(world, "<span class='redtext'>The staff managed to stop the cult! Dark words and heresy are no match for Nanotrasen's finest!</span>")
if(cult_objectives.len)
text += "<br><b>The cultists' objectives were:</b>"
+4 -1
View File
@@ -225,7 +225,10 @@ This file contains the arcane tome files.
"<span class='cult'>You [user.blood_volume ? "slice open your arm and ":""]begin drawing a sigil of the Geometer.</span>")
if(user.blood_volume)
user.apply_damage(initial(rune_to_scribe.scribe_damage), BRUTE, pick("l_arm", "r_arm"))
if(!do_after(user, initial(rune_to_scribe.scribe_delay), target = get_turf(user)))
var/scribe_mod = initial(rune_to_scribe.scribe_delay)
if(istype(get_turf(user), /turf/open/floor/engine/cult))
scribe_mod *= 0.5
if(!do_after(user, scribe_mod, target = get_turf(user)))
for(var/V in shields)
var/obj/structure/emergency_shield/sanguine/S = V
if(S && !QDELETED(S))
@@ -46,7 +46,10 @@
if(damage_interrupt && isliving(owner))
var/mob/living/L = owner
health = list("health" = L.health)
if(do_after(owner, scribe_time, target = owner, extra_checks = CALLBACK(owner, /mob.proc/break_do_after_checks, health, action_interrupt)))
var/scribe_mod = scribe_time
if(istype(get_turf(owner), /turf/open/floor/engine/cult))
scribe_mod *= 0.5
if(do_after(owner, scribe_mod, target = owner, extra_checks = CALLBACK(owner, /mob.proc/break_do_after_checks, health, action_interrupt)))
var/obj/effect/rune/new_rune = new rune_type(owner.loc)
new_rune.keyword = chosen_keyword
else
File diff suppressed because it is too large Load Diff
+22 -7
View File
@@ -33,13 +33,14 @@
/obj/machinery/dominator/tesla_act()
qdel(src)
/obj/machinery/dominator/New()
..()
/obj/machinery/dominator/Initialize()
. = ..()
set_light(2)
GLOB.poi_list |= src
spark_system = new
spark_system.set_up(5, TRUE, src)
countdown = new(src)
update_icon()
/obj/machinery/dominator/examine(mob/user)
..()
@@ -103,8 +104,23 @@
spark_system.start()
else if(!(stat & BROKEN))
spark_system.start()
cut_overlays()
update_icon()
/obj/machinery/dominator/update_icon()
cut_overlays()
if(!(stat & BROKEN))
icon_state = "dominator-active"
if(operating)
var/mutable_appearance/dominator_overlay = mutable_appearance('icons/obj/machines/dominator.dmi', "dominator-overlay")
if(gang)
dominator_overlay.color = gang.color_hex
add_overlay(dominator_overlay)
else
icon_state = "dominator"
if(obj_integrity/max_integrity < 0.66)
add_overlay("damage")
else
icon_state = "dominator-broken"
/obj/machinery/dominator/obj_break(damage_flag)
if(!(stat & BROKEN) && !(flags & NODECONSTRUCT))
@@ -142,10 +158,9 @@
gang.message_gangtools("Hostile takeover cancelled: Dominator is no longer operational.[gang.dom_attempts ? " You have [gang.dom_attempts] attempt remaining." : " The station network will have likely blocked any more attempts by us."]",1,1)
set_light(0)
icon_state = "dominator-broken"
cut_overlays()
operating = 0
stat |= BROKEN
update_icon()
STOP_PROCESSING(SSmachines, src)
/obj/machinery/dominator/Destroy()
@@ -196,9 +211,9 @@
priority_announce("Network breach detected in [locname]. The [gang.name] Gang is attempting to seize control of the station!","Network Alert")
gang.domination()
SSshuttle.registerHostileEnvironment(src)
src.name = "[gang.name] Gang [src.name]"
name = "[gang.name] Gang [name]"
operating = 1
icon_state = "dominator-[gang.color]"
update_icon()
countdown.color = gang.color_hex
countdown.start()
+16 -2
View File
@@ -261,6 +261,20 @@ GLOBAL_LIST_INIT(gang_outfit_pool, list(/obj/item/clothing/suit/jacket/leather,/
gang_bosses += G.bosses
return gang_bosses
/datum/game_mode/proc/shuttle_check()
if(SSshuttle.emergencyNoRecall)
return
var/alive = 0
for(var/mob/living/L in GLOB.player_list)
if(L.stat != DEAD)
alive++
if((alive < (GLOB.joined_player_list.len * 0.4)) && ((SSshuttle.emergency.timeLeft(1) > (SSshuttle.emergencyCallTime * 0.4))))
SSshuttle.emergencyNoRecall = TRUE
SSshuttle.emergency.request(null, set_coefficient = 0.4)
priority_announce("Catastrophic casualties detected: crisis shuttle protocols activated - jamming recall signals across all frequencies.")
/proc/determine_domination_time(var/datum/gang/G)
return max(180,480 - (round((G.territory.len/GLOB.start_state.num_territories)*100, 1) * 9))
@@ -274,12 +288,12 @@ GLOBAL_LIST_INIT(gang_outfit_pool, list(/obj/item/clothing/suit/jacket/leather,/
return
if(!winner)
to_chat(world, "<span class='redtext'>The station was [station_was_nuked ? "destroyed!" : "evacuated before a gang could claim it! The station wins!"]</span><br>")
SSblackbox.set_details("round_end_result","loss - gangs failed takeover")
SSticker.mode_result = "loss - gangs failed takeover"
SSticker.news_report = GANG_LOSS
else
to_chat(world, "<span class='redtext'>The [winner.name] Gang successfully performed a hostile takeover of the station!</span><br>")
SSblackbox.set_details("round_end_result","win - gang domination complete")
SSticker.mode_result = "win - gang domination complete"
SSticker.news_report = GANG_TAKEOVER
+4 -2
View File
@@ -75,7 +75,7 @@
/datum/gang_item/clothing/hands,
/datum/gang_item/clothing/belt,
/datum/gang_item/weapon/shuriken,
/datum/gang_item/weapon/shuriken,
/datum/gang_item/weapon/switchblade,
/datum/gang_item/weapon/improvised,
/datum/gang_item/weapon/ammo/improvised_ammo,
@@ -202,7 +202,9 @@
return
var/added_names = ""
var/lost_names = ""
SSticker.mode.shuttle_check() // See if its time to start wrapping things up
//Re-add territories that were reclaimed, so if they got tagged over, they can still earn income if they tag it back before the next status report
var/list/reclaimed_territories = territory_new & territory_lost
territory |= reclaimed_territories
+19 -11
View File
@@ -111,7 +111,7 @@
/datum/gang_item/clothing/hat
name = "Pimp Hat"
id = "hat"
cost = 18
cost = 16
item_path = /obj/item/clothing/head/collectable/petehat/gang
/obj/item/clothing/head/collectable/petehat/gang
@@ -121,7 +121,7 @@
/datum/gang_item/clothing/mask
name = "Golden Death Mask"
id = "mask"
cost = 20
cost = 18
item_path = /obj/item/clothing/mask/gskull
/obj/item/clothing/mask/gskull
@@ -133,7 +133,7 @@
/datum/gang_item/clothing/shoes
name = "Bling Boots"
id = "boots"
cost = 25
cost = 22
item_path = /obj/item/clothing/shoes/gang
/obj/item/clothing/shoes/gang
@@ -144,14 +144,14 @@
/datum/gang_item/clothing/neck
name = "Gold Necklace"
id = "necklace"
cost = 10
cost = 9
item_path = /obj/item/clothing/neck/necklace/dope
/datum/gang_item/clothing/hands
name = "Decorative Brass Knuckles"
id = "hand"
cost = 12
cost = 11
item_path = /obj/item/clothing/gloves/gang
/obj/item/clothing/gloves/gang
@@ -163,7 +163,7 @@
/datum/gang_item/clothing/belt
name = "Badass Belt"
id = "belt"
cost = 15
cost = 13
item_path = /obj/item/weapon/storage/belt/military/gang
/obj/item/weapon/storage/belt/military/gang
@@ -215,7 +215,6 @@
name = "Sawn-Off Improvised Shotgun"
id = "sawn"
cost = 6
item_path = /obj/item/weapon/gun/ballistic/revolver/doublebarrel/improvised/sawn
/datum/gang_item/weapon/ammo/improvised_ammo
name = "Box of Buckshot"
@@ -236,16 +235,24 @@
item_path = /obj/item/ammo_box/magazine/m10mm
/datum/gang_item/weapon/sniper
name = ".50cal Sniper Rifle"
name = "Black Market .50cal Sniper Rifle"
id = "sniper"
cost = 40
item_path = /obj/item/weapon/gun/ballistic/automatic/sniper_rifle
/datum/gang_item/weapon/ammo/sniper_ammo
name = "Standard .50cal Sniper Rounds"
name = "Smuggled .50cal Sniper Rounds"
id = "sniper_ammo"
cost = 15
item_path = /obj/item/ammo_box/magazine/sniper_rounds
item_path = /obj/item/ammo_box/magazine/sniper_rounds/gang
/datum/gang_item/weapon/ammo/sleeper_ammo
name = "Illicit Tranquilizer Cartridges"
id = "sniper_ammo"
cost = 15
item_path = /obj/item/ammo_box/magazine/sniper_rounds/gang/sleeper
/datum/gang_item/weapon/machinegun
name = "Mounted Machine Gun"
@@ -326,6 +333,7 @@
if(spawn_msg)
to_chat(user, spawn_msg)
/datum/gang_item/equipment/wetwork_boots
name = "Wetwork boots"
id = "wetwork"
@@ -412,7 +420,7 @@
/datum/gang_item/equipment/dominator/purchase(mob/living/carbon/user, datum/gang/gang, obj/item/device/gangtool/gangtool)
var/area/usrarea = get_area(user.loc)
var/usrturf = get_turf(user.loc)
if(initial(usrarea.name) == "Space" || isspaceturf(usrturf) || usr.z != 1)
if(initial(usrarea.name) == "Space" || isspaceturf(usrturf) || usr.z != ZLEVEL_STATION)
to_chat(user, "<span class='warning'>You can only use this on the station!</span>")
return FALSE
+5 -2
View File
@@ -167,6 +167,9 @@
if(!can_use(user))
return 0
if(SSshuttle.emergencyNoRecall)
return 0
if(recalling)
to_chat(usr, "<span class='warning'>Error: Recall already in progress.</span>")
return 0
@@ -194,7 +197,7 @@
return 0
var/turf/userturf = get_turf(user)
if(userturf.z != 1) //Shuttle can only be recalled while on station
if(userturf.z != ZLEVEL_STATION) //Shuttle can only be recalled while on station
to_chat(user, "<span class='warning'>\icon[src]Error: Device out of range of station communication arrays.</span>")
recalling = 0
return 0
@@ -212,7 +215,7 @@
log_game("[key_name(user)] has tried to recall the shuttle with a gangtool.")
message_admins("[key_name_admin(user)] has tried to recall the shuttle with a gangtool.", 1)
userturf = get_turf(user)
if(userturf.z == 1) //Check one more time that they are on station.
if(userturf.z == ZLEVEL_STATION) //Check one more time that they are on station.
if(SSshuttle.cancelEvac(user))
gang.recalls -= 1
return 1
@@ -194,7 +194,7 @@
set desc = "Detonate all RCDs on the station, while sparing onboard cyborg RCDs."
set waitfor = FALSE
if(!canUseTopic() || malf_cooldown)
if(!canUseTopic() || malf_cooldown > world.time)
return
for(var/I in GLOB.rcd_list)
@@ -203,9 +203,7 @@
RCD.detonate_pulse()
to_chat(src, "<span class='warning'>RCD detonation pulse emitted.</span>")
malf_cooldown = TRUE
sleep(100)
malf_cooldown = FALSE
malf_cooldown = world.time + 100
/datum/AI_Module/large/mecha_domination
module_name = "Viral Mech Domination"
@@ -446,7 +444,7 @@
set name = "Reactivate Cameranet"
set category = "Malfunction"
if(!canUseTopic() || malf_cooldown)
if(!canUseTopic() || malf_cooldown > world.time)
return
var/fixedcams = 0 //Tells the AI how many cams it fixed. Stats are fun.
@@ -469,9 +467,7 @@
break
to_chat(src, "<span class='notice'>Diagnostic complete! Operations completed: [fixedcams].</span>")
malf_cooldown = 1
spawn(30) //Lag protection
malf_cooldown = 0
malf_cooldown = world.time + 30
/datum/AI_Module/large/upgrade_cameras
module_name = "Upgrade Camera Network"

Some files were not shown because too many files have changed in this diff Show More