Browse Source

Merge branch 'master' of https://github.com/tgstation/tgstation into tgstation-master

master
TheSwain 2 months ago
parent
commit
b343909ec0
100 changed files with 273892 additions and 3991 deletions
  1. +1
    -1
      .github/CONTRIBUTING.md
  2. +10
    -0
      .gitignore
  3. +3
    -3
      .travis.yml
  4. +9
    -2
      .vscode/settings.json
  5. +44
    -3
      SQL/database_changelog.txt
  6. +33
    -15
      SQL/tgstation_schema.sql
  7. +33
    -15
      SQL/tgstation_schema_prefixed.sql
  8. +0
    -0
      _maps/RandomRuins/AnywhereRuins/fountain_hall.dmm
  9. +2
    -6
      _maps/RandomRuins/AnywhereRuins/golem_ship.dmm
  10. +1779
    -0
      _maps/RandomRuins/IceRuins/icemoon_surface_asteroid.dmm
  11. +2109
    -0
      _maps/RandomRuins/IceRuins/icemoon_surface_engioutpost.dmm
  12. +160
    -0
      _maps/RandomRuins/IceRuins/icemoon_surface_hotsprings.dmm
  13. +171
    -0
      _maps/RandomRuins/IceRuins/icemoon_surface_lust.dmm
  14. +882
    -0
      _maps/RandomRuins/IceRuins/icemoon_surface_mining_site.dmm
  15. +1409
    -0
      _maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm
  16. +208
    -0
      _maps/RandomRuins/IceRuins/icemoon_underground_bathhouse.dmm
  17. +1746
    -0
      _maps/RandomRuins/IceRuins/icemoon_underground_lavaland.dmm
  18. +996
    -0
      _maps/RandomRuins/IceRuins/icemoon_underground_library.dmm
  19. +818
    -0
      _maps/RandomRuins/IceRuins/icemoon_underground_mining_site.dmm
  20. +47
    -0
      _maps/RandomRuins/IceRuins/icemoon_underground_puzzle.dmm
  21. +1207
    -0
      _maps/RandomRuins/IceRuins/icemoon_underground_wendigo_cave.dmm
  22. +279
    -0
      _maps/RandomRuins/IceRuins/icemoon_underground_wrath.dmm
  23. +1
    -1
      _maps/RandomRuins/SpaceRuins/bigderelict1.dmm
  24. +1
    -1
      _maps/RandomRuins/SpaceRuins/kinggoatarena.dmm
  25. +48
    -0
      _maps/icebox.json
  26. +1946
    -3316
      _maps/map_files/BoxStation/BoxStation.dmm
  27. +2
    -2
      _maps/map_files/Deltastation/DeltaStation2.dmm
  28. +121227
    -0
      _maps/map_files/IceBoxStation/IceBoxStation.dmm
  29. +69660
    -0
      _maps/map_files/IceBoxStation/IcemoonUnderground_Above.dmm
  30. +65741
    -0
      _maps/map_files/IceBoxStation/IcemoonUnderground_Below.dmm
  31. +7
    -0
      _maps/map_files/IceBoxStation/job_changes.dm
  32. +17
    -20
      _maps/map_files/MetaStation/MetaStation.dmm
  33. +18
    -9
      _maps/map_files/PubbyStation/PubbyStation.dmm
  34. +4
    -4
      _maps/map_files/generic/CentCom.dmm
  35. +15
    -15
      _maps/shuttles/aux_base_default.dmm
  36. +15
    -15
      _maps/shuttles/aux_base_small.dmm
  37. +2040
    -0
      _maps/shuttles/emergency_nature.dmm
  38. +1
    -1
      _maps/shuttles/emergency_zeta.dmm
  39. +25
    -22
      _maps/shuttles/hunter_bounty.dmm
  40. +1
    -1
      code/__DEFINES/DNA.dm
  41. +1
    -1
      code/__DEFINES/MC.dm
  42. +1
    -1
      code/__DEFINES/_globals.dm
  43. +9
    -0
      code/__DEFINES/_helpers.dm
  44. +9
    -0
      code/__DEFINES/achievements.dm
  45. +1
    -0
      code/__DEFINES/admin.dm
  46. +1
    -0
      code/__DEFINES/atmospherics.dm
  47. +0
    -1
      code/__DEFINES/atom_hud.dm
  48. +2
    -2
      code/__DEFINES/cargo.dm
  49. +580
    -301
      code/__DEFINES/dcs/signals.dm
  50. +5
    -0
      code/__DEFINES/flags.dm
  51. +24
    -0
      code/__DEFINES/lighting.dm
  52. +17
    -7
      code/__DEFINES/machines.dm
  53. +8
    -0
      code/__DEFINES/maps.dm
  54. +7
    -0
      code/__DEFINES/misc.dm
  55. +11
    -10
      code/__DEFINES/mobs.dm
  56. +5
    -4
      code/__DEFINES/obj_flags.dm
  57. +11
    -0
      code/__DEFINES/preferences.dm
  58. +13
    -15
      code/__DEFINES/skills.dm
  59. +3
    -2
      code/__DEFINES/sound.dm
  60. +2
    -5
      code/__DEFINES/subsystems.dm
  61. +1
    -1
      code/__DEFINES/tgs.dm
  62. +2
    -0
      code/__HELPERS/files.dm
  63. +1
    -10
      code/__HELPERS/game.dm
  64. +0
    -6
      code/__HELPERS/global_lists.dm
  65. +81
    -0
      code/__HELPERS/hearted.dm
  66. +18
    -2
      code/__HELPERS/mobs.dm
  67. +48
    -1
      code/__HELPERS/roundend.dm
  68. +5
    -4
      code/__HELPERS/text.dm
  69. +2
    -60
      code/__HELPERS/type2type.dm
  70. +7
    -1
      code/__HELPERS/type_processing.dm
  71. +34
    -24
      code/__HELPERS/unsorted.dm
  72. +1
    -1
      code/__HELPERS/view.dm
  73. +2
    -2
      code/_compile_options.dm
  74. +2
    -0
      code/_globalvars/lists/mobs.dm
  75. +0
    -1
      code/_globalvars/lists/objects.dm
  76. +8
    -0
      code/_globalvars/misc.dm
  77. +1
    -1
      code/_globalvars/religion.dm
  78. +33
    -0
      code/_onclick/hud/alert.dm
  79. +1
    -1
      code/_onclick/hud/parallax.dm
  80. +6
    -6
      code/_onclick/hud/plane_master.dm
  81. +1
    -1
      code/_onclick/telekinesis.dm
  82. +8
    -0
      code/controllers/configuration/entries/game_options.dm
  83. +1
    -1
      code/controllers/subsystem/acid.dm
  84. +42
    -10
      code/controllers/subsystem/discord.dm
  85. +6
    -0
      code/controllers/subsystem/explosions.dm
  86. +28
    -6
      code/controllers/subsystem/mapping.dm
  87. +8
    -28
      code/controllers/subsystem/overlays.dm
  88. +13
    -1
      code/controllers/subsystem/processing/quirks.dm
  89. +3
    -4
      code/controllers/subsystem/skills.dm
  90. +5
    -0
      code/controllers/subsystem/tgui.dm
  91. +23
    -2
      code/controllers/subsystem/ticker.dm
  92. +2
    -2
      code/controllers/subsystem/vote.dm
  93. +3
    -3
      code/datums/achievements/_achievement_data.dm
  94. +1
    -1
      code/datums/achievements/_awards.dm
  95. +22
    -2
      code/datums/achievements/boss_achievements.dm
  96. +14
    -4
      code/datums/achievements/boss_scores.dm
  97. +4
    -0
      code/datums/achievements/hardcore_random.dm
  98. +26
    -0
      code/datums/atmosphere/planetary.dm
  99. +1
    -1
      code/datums/components/_component.dm
  100. +3
    -3
      code/datums/components/crafting/crafting.dm

+ 1
- 1
.github/CONTRIBUTING.md View File

@@ -270,7 +270,7 @@ This is good:

* Variable Editing (Var-edits)
* While var-editing an item within the editor is perfectly fine, it is preferred that when you are changing the base behavior of an item (how it functions) that you make a new subtype of that item within the code, especially if you plan to use the item in multiple locations on the same map, or across multiple maps. This makes it easier to make corrections as needed to all instances of the item at one time as opposed to having to find each instance of it and change them all individually.
* Subtypes only intended to be used on away mission or ruin maps should be contained within an .dm file with a name corresponding to that map within `code\modules\awaymissions` or `code\modules\ruins` respectively. This is so in the event that the map is removed, that subtype will be removed at the same time as well to minimize leftover/unused data within the repo.
* Subtypes only intended to be used on away mission or ruin maps should be contained within a .dm file with a name corresponding to that map within `code\modules\awaymissions` or `code\modules\ruins` respectively. This is so in the event that the map is removed, that subtype will be removed at the same time as well to minimize leftover/unused data within the repo.
* Please attempt to clean out any dirty variables that may be contained within items you alter through var-editing. For example, due to how DM functions, changing the `pixel_x` variable from 23 to 0 will leave a dirty record in the map's code of `pixel_x = 0`. Likewise this can happen when changing an item's icon to something else and then back. This can lead to some issues where an item's icon has changed within the code, but becomes broken on the map due to it still attempting to use the old entry.
* Areas should not be var-edited on a map to change it's name or attributes. All areas of a single type and it's altered instances are considered the same area within the code, and editing their variables on a map can lead to issues with powernets and event subsystems which are difficult to debug.



+ 10
- 0
.gitignore View File

@@ -212,6 +212,7 @@ tools/MapAtmosFixer/MapAtmosFixer/bin/*

#dmdoc default folder
/dmdoc

# Ignore custom music and title screens (amend as appropriate)
/config/jukebox_music/sounds/*
!/config/jukebox_music/sounds/exclude
@@ -220,3 +221,12 @@ tools/MapAtmosFixer/MapAtmosFixer/bin/*
/config/title_screens/images/*
!/config/title_screens/images/exclude
config/in_character_filter.txt

#Linux docker
tools/LinuxOneShot/SetupProgram/obj/*
tools/LinuxOneShot/SetupProgram/bin/*
tools/LinuxOneShot/SetupProgram/.vs
tools/LinuxOneShot/Database
tools/LinuxOneShot/TGS_Config
tools/LinuxOneShot/TGS_Instances
tools/LinuxOneShot/TGS_Logs

+ 3
- 3
.travis.yml View File

@@ -1,13 +1,13 @@
language: generic
os: linux
dist: xenial
sudo: false

branches:
except:
- ___TGS3TempBranch
- ___TGSTempBranch

matrix:
jobs:
include:
- name: "Run Linters"
addons:
@@ -97,5 +97,5 @@ matrix:
provider: pages
skip_cleanup: true
local_dir: dmdoc
github_token: $DMDOC_GITHUB_TOKEN
token: $DMDOC_GITHUB_TOKEN
fqdn: codedocs.tgstation13.org

+ 9
- 2
.vscode/settings.json View File

@@ -1,5 +1,12 @@
{
"eslint.workingDirectories": [
"./tgui"
]
"./tgui"
],

"workbench.editorAssociations": [
{
"filenamePattern": "*.dmi",
"viewType": "imagePreview.previewEditor"
}
]
}

+ 44
- 3
SQL/database_changelog.txt View File

@@ -1,15 +1,56 @@
Any time you make a change to the schema files, remember to increment the database schema version. Generally increment the minor number, major should be reserved for significant changes to the schema. Both values go up to 255.

The latest database version is 5.8; The query to update the schema revision table is:
The latest database version is 5.9; The query to update the schema revision table is:

INSERT INTO `schema_revision` (`major`, `minor`) VALUES (5, 8);
INSERT INTO `schema_revision` (`major`, `minor`) VALUES (5, 9);
or
INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (5, 8);
INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (5, 9);

In any query remember to add a prefix to the table names if you use one.

-----------------------------------------------------

Version 5.9, 19 April 2020, by Jordie0608
Updates and improvements to poll handling.
Added the `deleted` column to tables 'poll_option', 'poll_textreply' and 'poll_vote' and the columns `created_datetime`, `subtitle`, `allow_revoting` and `deleted` to 'poll_question'.
Changes table 'poll_question' column `createdby_ckey` to be NOT NULL and index `idx_pquest_time_admin` to be `idx_pquest_time_deleted_id` and 'poll_textreply' column `adminrank` to have no default.
Added procedure `set_poll_deleted` that's called when deleting a poll to set deleted to true on each poll table where rows matching a poll_id argument.

ALTER TABLE `poll_option`
ADD COLUMN `deleted` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' AFTER `default_percentage_calc`;

ALTER TABLE `poll_question`
CHANGE COLUMN `createdby_ckey` `createdby_ckey` VARCHAR(32) NOT NULL AFTER `multiplechoiceoptions`,
ADD COLUMN `created_datetime` datetime NOT NULL AFTER `polltype`,
ADD COLUMN `subtitle` VARCHAR(255) NULL DEFAULT NULL AFTER `question`,
ADD COLUMN `allow_revoting` TINYINT(1) UNSIGNED NOT NULL AFTER `dontshow`,
ADD COLUMN `deleted` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' AFTER `allow_revoting`,
DROP INDEX `idx_pquest_time_admin`,
ADD INDEX `idx_pquest_time_deleted_id` (`starttime`, `endtime`, `deleted`, `id`);

ALTER TABLE `poll_textreply`
CHANGE COLUMN `adminrank` `adminrank` varchar(32) NOT NULL AFTER `replytext`,
ADD COLUMN `deleted` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' AFTER `adminrank`;

ALTER TABLE `poll_vote`
ADD COLUMN `deleted` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' AFTER `rating`;

DELIMITER $$
CREATE PROCEDURE `set_poll_deleted`(
IN `poll_id` INT
)
SQL SECURITY INVOKER
BEGIN
UPDATE `poll_question` SET deleted = 1 WHERE id = poll_id;
UPDATE `poll_option` SET deleted = 1 WHERE pollid = poll_id;
UPDATE `poll_vote` SET deleted = 1 WHERE pollid = poll_id;
UPDATE `poll_textreply` SET deleted = 1 WHERE pollid = poll_id;
END
$$
DELIMITER ;

-----------------------------------------------------

Version 5.8, 7 April 2020, by Jordie0608
Modified table `messages`, adding column `deleted_ckey` to record who deleted a message.



+ 33
- 15
SQL/tgstation_schema.sql View File

@@ -346,6 +346,7 @@ CREATE TABLE `poll_option` (
`descmid` varchar(32) DEFAULT NULL,
`descmax` varchar(32) DEFAULT NULL,
`default_percentage_calc` tinyint(1) unsigned NOT NULL DEFAULT '1',
`deleted` tinyint(1) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `idx_pop_pollid` (`pollid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
@@ -361,17 +362,21 @@ DROP TABLE IF EXISTS `poll_question`;
CREATE TABLE `poll_question` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`polltype` enum('OPTION','TEXT','NUMVAL','MULTICHOICE','IRV') NOT NULL,
`created_datetime` datetime NOT NULL,
`starttime` datetime NOT NULL,
`endtime` datetime NOT NULL,
`question` varchar(255) NOT NULL,
`subtitle` varchar(255) DEFAULT NULL,
`adminonly` tinyint(1) unsigned NOT NULL,
`multiplechoiceoptions` int(2) DEFAULT NULL,
`createdby_ckey` varchar(32) DEFAULT NULL,
`createdby_ckey` varchar(32) NOT NULL,
`createdby_ip` int(10) unsigned NOT NULL,
`dontshow` tinyint(1) unsigned NOT NULL,
`allow_revoting` tinyint(1) unsigned NOT NULL,
`deleted` tinyint(1) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `idx_pquest_question_time_ckey` (`question`,`starttime`,`endtime`,`createdby_ckey`,`createdby_ip`),
KEY `idx_pquest_time_admin` (`starttime`,`endtime`,`adminonly`),
KEY `idx_pquest_time_deleted_id` (`starttime`,`endtime`, `deleted`, `id`),
KEY `idx_pquest_id_time_type_admin` (`id`,`starttime`,`endtime`,`polltype`,`adminonly`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -390,7 +395,8 @@ CREATE TABLE `poll_textreply` (
`ckey` varchar(32) NOT NULL,
`ip` int(10) unsigned NOT NULL,
`replytext` varchar(2048) NOT NULL,
`adminrank` varchar(32) NOT NULL DEFAULT 'Player',
`adminrank` varchar(32) NOT NULL,
`deleted` tinyint(1) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `idx_ptext_pollid_ckey` (`pollid`,`ckey`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
@@ -412,6 +418,7 @@ CREATE TABLE `poll_vote` (
`ip` int(10) unsigned NOT NULL,
`adminrank` varchar(32) NOT NULL,
`rating` int(2) DEFAULT NULL,
`deleted` tinyint(1) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `idx_pvote_pollid_ckey` (`pollid`,`ckey`),
KEY `idx_pvote_optionid_ckey` (`optionid`,`ckey`)
@@ -455,18 +462,6 @@ CREATE TABLE `schema_revision` (
PRIMARY KEY (`major`, `minor`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
DELIMITER $$
CREATE TRIGGER `role_timeTlogupdate` AFTER UPDATE ON `role_time` FOR EACH ROW BEGIN INSERT into role_time_log (ckey, job, delta) VALUES (NEW.CKEY, NEW.job, NEW.minutes-OLD.minutes);
END
$$
CREATE TRIGGER `role_timeTloginsert` AFTER INSERT ON `role_time` FOR EACH ROW BEGIN INSERT into role_time_log (ckey, job, delta) VALUES (NEW.ckey, NEW.job, NEW.minutes);
END
$$
CREATE TRIGGER `role_timeTlogdelete` AFTER DELETE ON `role_time` FOR EACH ROW BEGIN INSERT into role_time_log (ckey, job, delta) VALUES (OLD.ckey, OLD.job, 0-OLD.minutes);
END
$$
DELIMITER ;
--
-- Table structure for table `stickyban`
--
@@ -556,6 +551,29 @@ CREATE TABLE `ticket` (
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
DELIMITER $$
CREATE PROCEDURE `set_poll_deleted`(
IN `poll_id` INT
)
SQL SECURITY INVOKER
BEGIN
UPDATE `poll_question` SET deleted = 1 WHERE id = poll_id;
UPDATE `poll_option` SET deleted = 1 WHERE pollid = poll_id;
UPDATE `poll_vote` SET deleted = 1 WHERE pollid = poll_id;
UPDATE `poll_textreply` SET deleted = 1 WHERE pollid = poll_id;
END
$$
CREATE TRIGGER `role_timeTlogupdate` AFTER UPDATE ON `role_time` FOR EACH ROW BEGIN INSERT into role_time_log (ckey, job, delta) VALUES (NEW.CKEY, NEW.job, NEW.minutes-OLD.minutes);
END
$$
CREATE TRIGGER `role_timeTloginsert` AFTER INSERT ON `role_time` FOR EACH ROW BEGIN INSERT into role_time_log (ckey, job, delta) VALUES (NEW.ckey, NEW.job, NEW.minutes);
END
$$
CREATE TRIGGER `role_timeTlogdelete` AFTER DELETE ON `role_time` FOR EACH ROW BEGIN INSERT into role_time_log (ckey, job, delta) VALUES (OLD.ckey, OLD.job, 0-OLD.minutes);
END
$$
DELIMITER ;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;


+ 33
- 15
SQL/tgstation_schema_prefixed.sql View File

@@ -346,6 +346,7 @@ CREATE TABLE `SS13_poll_option` (
`descmid` varchar(32) DEFAULT NULL,
`descmax` varchar(32) DEFAULT NULL,
`default_percentage_calc` tinyint(1) unsigned NOT NULL DEFAULT '1',
`deleted` tinyint(1) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `idx_pop_pollid` (`pollid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
@@ -361,17 +362,21 @@ DROP TABLE IF EXISTS `SS13_poll_question`;
CREATE TABLE `SS13_poll_question` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`polltype` enum('OPTION','TEXT','NUMVAL','MULTICHOICE','IRV') NOT NULL,
`created_datetime` datetime NOT NULL,
`starttime` datetime NOT NULL,
`endtime` datetime NOT NULL,
`question` varchar(255) NOT NULL,
`subtitle` varchar(255) DEFAULT NULL,
`adminonly` tinyint(1) unsigned NOT NULL,
`multiplechoiceoptions` int(2) DEFAULT NULL,
`createdby_ckey` varchar(32) DEFAULT NULL,
`createdby_ckey` varchar(32) NOT NULL,
`createdby_ip` int(10) unsigned NOT NULL,
`dontshow` tinyint(1) unsigned NOT NULL,
`allow_revoting` tinyint(1) unsigned NOT NULL,
`deleted` tinyint(1) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `idx_pquest_question_time_ckey` (`question`,`starttime`,`endtime`,`createdby_ckey`,`createdby_ip`),
KEY `idx_pquest_time_admin` (`starttime`,`endtime`,`adminonly`),
KEY `idx_pquest_time_deleted_id` (`starttime`,`endtime`, `deleted`, `id`),
KEY `idx_pquest_id_time_type_admin` (`id`,`starttime`,`endtime`,`polltype`,`adminonly`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -390,7 +395,8 @@ CREATE TABLE `SS13_poll_textreply` (
`ckey` varchar(32) NOT NULL,
`ip` int(10) unsigned NOT NULL,
`replytext` varchar(2048) NOT NULL,
`adminrank` varchar(32) NOT NULL DEFAULT 'Player',
`adminrank` varchar(32) NOT NULL,
`deleted` tinyint(1) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `idx_ptext_pollid_ckey` (`pollid`,`ckey`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
@@ -412,6 +418,7 @@ CREATE TABLE `SS13_poll_vote` (
`ip` int(10) unsigned NOT NULL,
`adminrank` varchar(32) NOT NULL,
`rating` int(2) DEFAULT NULL,
`deleted` tinyint(1) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `idx_pvote_pollid_ckey` (`pollid`,`ckey`),
KEY `idx_pvote_optionid_ckey` (`optionid`,`ckey`)
@@ -455,18 +462,6 @@ CREATE TABLE `SS13_schema_revision` (
PRIMARY KEY (`major`,`minor`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

DELIMITER $$
CREATE TRIGGER `SS13_role_timeTlogupdate` AFTER UPDATE ON `SS13_role_time` FOR EACH ROW BEGIN INSERT into SS13_role_time_log (ckey, job, delta) VALUES (NEW.CKEY, NEW.job, NEW.minutes-OLD.minutes);
END
$$
CREATE TRIGGER `SS13_role_timeTloginsert` AFTER INSERT ON `SS13_role_time` FOR EACH ROW BEGIN INSERT into SS13_role_time_log (ckey, job, delta) VALUES (NEW.ckey, NEW.job, NEW.minutes);
END
$$
CREATE TRIGGER `SS13_role_timeTlogdelete` AFTER DELETE ON `SS13_role_time` FOR EACH ROW BEGIN INSERT into SS13_role_time_log (ckey, job, delta) VALUES (OLD.ckey, OLD.job, 0-OLD.minutes);
END
$$
DELIMITER ;

--
-- Table structure for table `SS13_stickyban`
--
@@ -556,6 +551,29 @@ CREATE TABLE `SS13_ticket` (
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

DELIMITER $$
CREATE PROCEDURE `set_poll_deleted`(
IN `poll_id` INT
)
SQL SECURITY INVOKER
BEGIN
UPDATE `SS13_poll_question` SET deleted = 1 WHERE id = poll_id;
UPDATE `SS13_poll_option` SET deleted = 1 WHERE pollid = poll_id;
UPDATE `SS13_poll_vote` SET deleted = 1 WHERE pollid = poll_id;
UPDATE `SS13_poll_textreply` SET deleted = 1 WHERE pollid = poll_id;
END
$$
CREATE TRIGGER `SS13_role_timeTlogupdate` AFTER UPDATE ON `SS13_role_time` FOR EACH ROW BEGIN INSERT into SS13_role_time_log (ckey, job, delta) VALUES (NEW.CKEY, NEW.job, NEW.minutes-OLD.minutes);
END
$$
CREATE TRIGGER `SS13_role_timeTloginsert` AFTER INSERT ON `SS13_role_time` FOR EACH ROW BEGIN INSERT into SS13_role_time_log (ckey, job, delta) VALUES (NEW.ckey, NEW.job, NEW.minutes);
END
$$
CREATE TRIGGER `SS13_role_timeTlogdelete` AFTER DELETE ON `SS13_role_time` FOR EACH ROW BEGIN INSERT into SS13_role_time_log (ckey, job, delta) VALUES (OLD.ckey, OLD.job, 0-OLD.minutes);
END
$$
DELIMITER ;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;


_maps/RandomRuins/LavaRuins/lavaland_surface_fountain_hall.dmm → _maps/RandomRuins/AnywhereRuins/fountain_hall.dmm View File


_maps/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm → _maps/RandomRuins/AnywhereRuins/golem_ship.dmm View File

@@ -51,17 +51,13 @@
/obj/structure/window/reinforced{
dir = 8
},
/turf/open/floor/plating{
initial_gas_mix = "LAVALAND_ATMOS"
},
/turf/template_noop,
/area/ruin/powered/golem_ship)
"i" = (
/obj/structure/shuttle/engine/propulsion{
dir = 8
},
/turf/open/floor/plating{
initial_gas_mix = "LAVALAND_ATMOS"
},
/turf/template_noop,
/area/ruin/powered/golem_ship)
"j" = (
/obj/machinery/door/airlock/titanium,

+ 1779
- 0
_maps/RandomRuins/IceRuins/icemoon_surface_asteroid.dmm
File diff suppressed because it is too large
View File


+ 2109
- 0
_maps/RandomRuins/IceRuins/icemoon_surface_engioutpost.dmm
File diff suppressed because it is too large
View File


+ 160
- 0
_maps/RandomRuins/IceRuins/icemoon_surface_hotsprings.dmm View File

@@ -0,0 +1,160 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/open/floor/plating/asteroid/snow/icemoon,
/area/icemoon/surface/outdoors)
"b" = (
/turf/closed/mineral/random/snow/more_caves,
/area/icemoon/surface/outdoors/unexplored)
"c" = (
/turf/open/water/cursed_spring,
/area/icemoon/surface/outdoors)
"d" = (
/obj/item/paper/crumpled{
info = "When one falls into this hot spring, they shall forever be turned into..."
},
/turf/open/floor/plating/asteroid/snow/icemoon,
/area/icemoon/surface/outdoors)

(1,1,1) = {"
b
b
b
b
b
b
b
b
b
b
b
"}
(2,1,1) = {"
b
b
b
a
a
a
a
a
b
b
b
"}
(3,1,1) = {"
b
b
a
a
a
a
a
a
a
b
b
"}
(4,1,1) = {"
b
a
a
a
c
c
c
a
a
a
b
"}
(5,1,1) = {"
b
a
a
c
c
c
c
c
a
a
b
"}
(6,1,1) = {"
b
a
a
c
c
c
c
c
a
a
b
"}
(7,1,1) = {"
b
a
a
c
c
c
c
c
a
a
b
"}
(8,1,1) = {"
b
a
a
a
c
c
c
a
a
a
b
"}
(9,1,1) = {"
b
b
a
a
a
d
a
a
a
b
b
"}
(10,1,1) = {"
b
b
b
a
a
a
a
a
b
b
b
"}
(11,1,1) = {"
b
b
b
b
b
b
b
b
b
b
b
"}

+ 171
- 0
_maps/RandomRuins/IceRuins/icemoon_surface_lust.dmm View File

@@ -0,0 +1,171 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/closed/mineral/random/snow/more_caves,
/area/icemoon/surface/outdoors/unexplored)
"b" = (
/obj/structure/sign/poster/contraband/lusty_xenomorph,
/turf/closed/indestructible/syndicate,
/area/icemoon/surface/outdoors)
"c" = (
/turf/open/floor/mineral/diamond,
/area/icemoon/surface/outdoors)
"d" = (
/obj/item/reagent_containers/food/drinks/trophy/gold_cup,
/turf/open/floor/mineral/diamond,
/area/icemoon/surface/outdoors)
"e" = (
/obj/item/greentext{
light_color = "#64C864";
light_range = 1
},
/turf/open/floor/mineral/diamond,
/area/icemoon/surface/outdoors)
"f" = (
/obj/structure/falsewall/plastitanium,
/obj/structure/sign/poster/contraband/lusty_xenomorph,
/turf/open/floor/mineral/diamond,
/area/icemoon/surface/outdoors)

(1,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
"}
(2,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
"}
(3,1,1) = {"
a
a
a
a
b
b
b
a
a
a
a
"}
(4,1,1) = {"
a
a
a
b
c
c
c
b
a
a
a
"}
(5,1,1) = {"
a
a
b
c
c
d
c
c
b
a
a
"}
(6,1,1) = {"
a
a
b
c
d
e
d
c
f
a
a
"}
(7,1,1) = {"
a
a
b
c
c
d
c
c
b
a
a
"}
(8,1,1) = {"
a
a
a
b
c
c
c
b
a
a
a
"}
(9,1,1) = {"
a
a
a
a
b
b
b
a
a
a
a
"}
(10,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
"}
(11,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
"}

+ 882
- 0
_maps/RandomRuins/IceRuins/icemoon_surface_mining_site.dmm View File

@@ -0,0 +1,882 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/closed/mineral/random/snow/no_caves,
/area/icemoon/surface/outdoors)
"b" = (
/turf/closed/wall/mineral/wood/nonmetal,
/area/ruin/unpowered)
"c" = (
/obj/structure/closet/toolcloset,
/obj/item/wrench,
/obj/item/screwdriver,
/obj/item/crowbar,
/obj/item/weldingtool/largetank,
/obj/item/wirecutters,
/obj/item/radio/off,
/turf/open/floor/wood,
/area/ruin/unpowered)
"d" = (
/turf/open/transparent/openspace/icemoon,
/area/icemoon/surface/outdoors)
"e" = (
/obj/item/clothing/suit/hooded/explorer,
/obj/item/clothing/mask/gas/explorer,
/obj/item/clothing/gloves/color/black,
/obj/item/storage/backpack/explorer,
/obj/item/flashlight/lantern,
/obj/item/storage/bag/ore,
/obj/structure/closet,
/obj/item/clothing/shoes/winterboots/ice_boots,
/turf/open/floor/wood,
/area/ruin/unpowered)
"f" = (
/turf/open/floor/wood,
/area/ruin/unpowered)
"g" = (
/obj/structure/fireplace,
/turf/open/floor/wood,
/area/ruin/unpowered)
"h" = (
/obj/structure/flora/rock/icy,
/turf/closed/mineral/random/snow/no_caves,
/area/icemoon/surface/outdoors)
"i" = (
/turf/template_noop,
/area/icemoon/surface/outdoors/unexplored)
"j" = (
/obj/structure/sink/kitchen,
/turf/open/floor/wood,
/area/ruin/unpowered)
"k" = (
/obj/structure/closet/crate/freezer,
/turf/open/floor/wood,
/area/ruin/unpowered)
"l" = (
/obj/machinery/vending/dinnerware,
/turf/open/floor/wood,
/area/ruin/unpowered)
"n" = (
/obj/structure/mineral_door/wood,
/turf/open/floor/wood,
/area/ruin/unpowered)
"o" = (
/obj/item/reagent_containers/food/drinks/beer,
/turf/open/floor/wood,
/area/ruin/unpowered)
"p" = (
/obj/machinery/light/broken{
dir = 4
},
/turf/open/floor/wood,
/area/ruin/unpowered)
"q" = (
/obj/structure/table/wood,
/obj/item/pen,
/obj/machinery/light/broken{
dir = 8
},
/obj/item/paper/crumpled/bloody{
info = "help...";
text = ""
},
/turf/open/floor/wood,
/area/ruin/unpowered)
"r" = (
/obj/item/chair/wood,
/obj/effect/decal/cleanable/blood/splatter,
/obj/effect/mob_spawn/human/miner/explorer,
/obj/effect/decal/cleanable/blood/drip,
/turf/open/floor/wood,
/area/ruin/unpowered)
"s" = (
/obj/effect/decal/cleanable/trail_holder,
/turf/open/floor/wood,
/area/ruin/unpowered)
"u" = (
/obj/structure/ladder,
/turf/open/floor/wood,
/area/ruin/unpowered)

(1,1,1) = {"
i
i
i
i
i
i
i
i
i
i
i
i
i
i
i
i
i
i
i
i
i
i
i
i
i
"}
(2,1,1) = {"
i
i
i
i
i
i
i
i
d
d
d
d
d
d
d
d
i
i
i
i
i
i
i
i
i
"}
(3,1,1) = {"
i
i
i
i
i
d
d
d
d
d
d
d
d
d
d
d
d
d
d
i
i
i
i
i
i
"}
(4,1,1) = {"
i
i
i
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
i
i
i
i
i
"}
(5,1,1) = {"
i
i
i
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
i
i
i
i
"}
(6,1,1) = {"
i
i
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
i
i
i
"}
(7,1,1) = {"
i
i
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
i
i
i
"}
(8,1,1) = {"
i
i
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
i
i
i
"}
(9,1,1) = {"
i
d
d
d
d
d
d
d
d
b
b
b
b
b
b
b
d
d
d
d
d
d
d
i
i
"}
(10,1,1) = {"
i
d
d
d
d
d
d
d
b
b
b
b
b
b
b
b
b
d
d
d
d
d
d
i
i
"}
(11,1,1) = {"
i
d
d
d
d
d
d
d
b
b
c
f
f
o
q
b
b
d
d
d
d
d
d
d
i
"}
(12,1,1) = {"
i
d
d
d
d
d
d
d
b
b
e
f
f
f
r
b
b
d
d
d
d
d
d
d
i
"}
(13,1,1) = {"
i
d
d
d
d
d
d
d
b
b
f
f
f
f
s
b
b
d
d
d
d
d
d
d
i
"}
(14,1,1) = {"
i
d
d
d
d
d
d
d
b
b
g
f
f
f
s
b
b
d
d
d
d
d
d
d
i
"}
(15,1,1) = {"
i
d
d
d
d
d
d
d
b
b
f
f
f
f
s
b
b
d
d
d
d
d
d
d
i
"}
(16,1,1) = {"
i
d
d
d
d
d
d
d
b
b
j
f
f
f
s
b
b
d
d
d
d
d
d
d
i
"}
(17,1,1) = {"
i
d
d
d
d
d
d
d
b
b
k
f
f
f
s
b
b
d
d
d
d
d
d
d
i
"}
(18,1,1) = {"
i
d
d
d
d
d
d
d
b
b
l
f
f
f
u
b
b
d
d
d
d
d
d
d
i
"}
(19,1,1) = {"
i
d
d
d
d
d
d
d
b
b
b
f
f
p
b
b
b
d
d
d
d
d
d
d
i
"}
(20,1,1) = {"
i
i
d
d
d
d
d
d
d
b
b
b
f
b
b
b
d
d
d
d
d
d
d
d
i
"}
(21,1,1) = {"
i
i
d
d
d
d
d
d
d
d
d
b
f
b
d
d
d
d
d
d
d
d
d
d
i
"}
(22,1,1) = {"
i
i
d
d
d
d
d
d
d
d
d
b
f
b
d
d
d
d
d
d
d
d
d
d
i
"}
(23,1,1) = {"
i
i
d
d
d
d
d
d
d
d
d
b
f
b
d
d
d
d
d
d
d
d
d
i
i
"}
(24,1,1) = {"
i
i
d
d
d
d
d
d
d
d
d
b
n
b
d
d
d
d
d
d
d
d
d
i
i
"}
(25,1,1) = {"
i
i
i
d
d
d
d
d
d
d
a
h
h
h
a
d
d
d
d
d
d
d
i
i
i
"}
(26,1,1) = {"
i
i
i
d
d
d
d
d
d
a
a
a
h
a
a
a
d
d
d
d
d
d
i
i
i
"}
(27,1,1) = {"
i
i
i
i
d
d
d
d
a
a
a
a
a
a
a
a
a
d
d
d
d
i
i
i
i
"}
(28,1,1) = {"
i
i
i
i
i
d
d
a
a
a
a
a
a
a
a
a
a
a
d
d
i
i
i
i
i
"}
(29,1,1) = {"
i
i
i
i
i
i
i
a
a
a
a
a
a
a
a
a
a
a
i
i
i
i
i
i
i
"}

+ 1409
- 0
_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm
File diff suppressed because it is too large
View File


+ 208
- 0
_maps/RandomRuins/IceRuins/icemoon_underground_bathhouse.dmm View File

@@ -0,0 +1,208 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/template_noop,
/area/template_noop)
"b" = (
/turf/closed/wall{
icon = 'icons/turf/shuttleold.dmi';
icon_state = "block"
},
/area/ruin/powered/bathhouse)
"c" = (
/obj/structure/table/greyscale,
/obj/item/stack/medical/aloe{
desc = "A healing paste you can apply on wounds. It smells amazing."
},
/obj/item/clothing/shoes/sneakers/white{
name = "white slippers"
},
/obj/item/clothing/under/misc/pj/blue,
/turf/open/floor/plasteel/white,
/area/ruin/powered/bathhouse)
"d" = (
/turf/closed/mineral/random/snow/no_caves,
/area/icemoon/underground/unexplored)
"e" = (
/obj/structure/mirror{
pixel_y = 28
},
/obj/structure/sink{
pixel_y = 20
},
/turf/open/floor/plasteel/white,
/area/ruin/powered/bathhouse)
"f" = (
/obj/machinery/shower{
pixel_y = 16;
reagent_id = /datum/reagent/water/holywater
},
/obj/structure/curtain,
/turf/open/floor/plasteel/white,
/area/ruin/powered/bathhouse)
"g" = (
/turf/open/floor/plasteel/white,
/area/ruin/powered/bathhouse)
"h" = (
/obj/structure/table/wood,
/obj/machinery/light/small{
icon_state = "bulb";
dir = 1
},
/obj/item/reagent_containers/food/snacks/spaghetti/pastatomato{
desc = "Just how mom used to make it.";
list_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/tomatojuice = 10, /datum/reagent/consumable/nutriment/vitamin = 4, /datum/reagent/pax = 5, /datum/reagent/medicine/psicodine = 10, /datum/reagent/medicine/morphine = 5);
name = "soul food";
tastes = list("nostalgia" = 1, "happiness" = 1)
},
/turf/open/floor/wood,
/area/ruin/powered/bathhouse)
"i" = (
/obj/machinery/door/airlock/freezer{
name = "bath house airlock"
},
/turf/open/floor/plasteel/white,
/area/ruin/powered/bathhouse)
"j" = (
/turf/closed/wall/mineral/wood,
/area/ruin/powered/bathhouse)
"k" = (
/turf/open/floor/wood,
/area/ruin/powered/bathhouse)
"l" = (
/obj/item/bikehorn/rubberducky,
/obj/item/soap,
/turf/open/floor/plasteel/white,
/area/ruin/powered/bathhouse)
"m" = (
/obj/structure/bookcase/random,
/turf/open/floor/wood,
/area/ruin/powered/bathhouse)
"n" = (
/turf/open/floor/plating/asteroid/snow/icemoon,
/area/icemoon/underground/explored)
"o" = (
/obj/structure/bed,
/obj/item/bedsheet,
/turf/open/floor/wood,
/area/ruin/powered/bathhouse)
"p" = (
/obj/machinery/light/dim,
/turf/open/floor/plasteel/white,
/area/ruin/powered/bathhouse)
"q" = (
/obj/item/bikehorn/rubberducky{
desc = "An old but clean looking rubber ducky. Something about it is very familiar..."
},
/turf/open/floor/plasteel/white,
/area/ruin/powered/bathhouse)

(1,1,1) = {"
b
b
b
b
b
d
a
a
"}
(2,1,1) = {"
b
f
g
g
b
j
j
j
"}
(3,1,1) = {"
b
b
l
g
i
k
k
j
"}
(4,1,1) = {"
b
f
g
g
b
h
k
j
"}
(5,1,1) = {"
b
b
g
g
b
m
o
j
"}
(6,1,1) = {"
b
f
g
p
b
j
j
j
"}
(7,1,1) = {"
b
b
g
q
b
n
n
d
"}
(8,1,1) = {"
b
e
g
g
b
n
n
d
"}
(9,1,1) = {"
b
e
g
g
i
n
n
d
"}
(10,1,1) = {"
b
c
g
g
b
n
d
a
"}
(11,1,1) = {"
b
b
b
b
b
d
a
a
"}

+ 1746
- 0
_maps/RandomRuins/IceRuins/icemoon_underground_lavaland.dmm
File diff suppressed because it is too large
View File


+ 996
- 0
_maps/RandomRuins/IceRuins/icemoon_underground_library.dmm View File

<
@@ -0,0 +1,996 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"aa" = (
/turf/template_noop,
/area/template_noop)
"ab" = (
/obj/structure/table/wood/fancy/black,
/obj/item/documents/syndicate/mining,
/obj/effect/decal/cleanable/cobweb,
/turf/open/floor/plasteel/cult,
/area/ruin/unpowered/buried_library)
"ac" = (
/turf/closed/wall/mineral/wood,
/area/ruin/unpowered/buried_library)
"ad" = (
/turf/closed/mineral/random/snow/no_caves,
/area/icemoon/underground/unexplored)
"ae" = (
/turf/open/floor/wood{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/ruin/unpowered/buried_library)
"af" = (
/obj/item/stack/sheet/mineral/wood,
/turf/open/floor/wood{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/ruin/unpowered/buried_library)
"ag" = (
/obj/item/feather,
/turf/open/floor/wood{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/ruin/unpowered/buried_library)
"ah" = (
/obj/structure/bookcase/random,
/turf/open/floor/wood{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/ruin/unpowered/buried_library)
"ai" = (
/obj/structure/table/wood/fancy/black,
/obj/item/paper/crumpled/fluff/stations/lavaland/library/diary2,
/obj/effect/decal/cleanable/cobweb/cobweb2,
/turf/open/floor/plasteel/cult,
/area/ruin/unpowered/buried_library)
"aj" = (
/obj/item/paper/fluff/ruins/oldstation/protosing,
/turf/open/floor/plating/asteroid/snow/icemoon,
/area/ruin/unpowered/buried_library)
"ak" = (
/turf/closed/mineral/random/snow/no_caves,
/area/ruin/unpowered/buried_library)
"al" = (
/turf/closed/wall/mineral/iron,
/area/ruin/unpowered/buried_library)
"am" = (
/obj/structure/table/wood/fancy/black,
/obj/item/book_of_babel,
/turf/open/floor/plasteel/cult,
/area/ruin/unpowered/buried_library)
"an" = (
/turf/open/floor/plating/asteroid/snow/icemoon,
/area/ruin/unpowered/buried_library)
"ao" = (
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/wood{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/ruin/unpowered/buried_library)
"ap" = (
/obj/item/stack/sheet/mineral/wood,
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/wood{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/ruin/unpowered/buried_library)
"aq" = (
/obj/structure/fluff/paper/stack,
/turf/open/floor/wood{
icon_state = "wood-broken";
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/ruin/unpowered/buried_library)
"ar" = (
/turf/open/floor/plasteel/cult,
/area/ruin/unpowered/buried_library)
"at" = (
/obj/structure/fluff/paper,
/turf/open/floor/wood{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/ruin/unpowered/buried_library)
"au" = (
/obj/structure/fluff/paper/stack,
/turf/open/floor/plating/asteroid/snow/icemoon,
/area/ruin/unpowered/buried_library)
"av" = (
/obj/structure/bookcase/random,
/turf/closed/mineral/random/snow/no_caves,
/area/ruin/unpowered/buried_library)
"aw" = (
/turf/open/floor/plating/icemoon,
/area/ruin/unpowered/buried_library)
"ay" = (
/obj/machinery/door/keycard/library,
/turf/open/floor/plasteel/cult,
/area/ruin/unpowered/buried_library)
"az" = (
/obj/item/paper/crumpled/fluff/stations/lavaland/library/diary,
/turf/open/floor/wood{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/ruin/unpowered/buried_library)
"aA" = (
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plating/icemoon,
/area/ruin/unpowered/buried_library)
"aB" = (
/turf/open/floor/wood{
icon_state = "wood-broken6";
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/ruin/unpowered/buried_library)
"aC" = (
/obj/item/feather,
/turf/open/floor/plating/asteroid/snow/icemoon,
/area/ruin/unpowered/buried_library)
"aD" = (
/turf/open/floor/carpet/black{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/ruin/unpowered/buried_library)
"aE" = (
/obj/item/stack/sheet/mineral/wood,
/obj/item/book/manual/random,
/turf/open/floor/wood{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/ruin/unpowered/buried_library)
"aG" = (
/obj/structure/table/bronze,
/obj/item/stack/ore/slag,
/turf/open/floor/carpet/black{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/ruin/unpowered/buried_library)
"aH" = (
/obj/structure/table/bronze,
/obj/item/statuebust/hippocratic,
/turf/open/floor/carpet/black{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/ruin/unpowered/buried_library)
"aI" = (
/obj/effect/mob_spawn/human/skeleton,
/obj/item/clothing/head/rice_hat,
/turf/open/floor/plasteel/cult,
/area/ruin/unpowered/buried_library)
"aJ" = (
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plasteel/cult,
/area/ruin/unpowered/buried_library)
"aK" = (
/obj/item/feather,
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plasteel/cult,
/area/ruin/unpowered/buried_library)
"aL" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/structure/fluff/paper/stack,
/turf/open/floor/wood{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/ruin/unpowered/buried_library)
"aM" = (
/obj/item/stack/sheet/mineral/wood,
/obj/item/book/manual/random,
/turf/open/floor/plating/asteroid/snow/icemoon,
/area/ruin/unpowered/buried_library)
"aN" = (
/obj/structure/statue/sandstone/venus,
/turf/open/floor/carpet/black{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/ruin/unpowered/buried_library)
"aO" = (
/mob/living/simple_animal/pet/fox,
/turf/open/floor/wood{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/ruin/unpowered/buried_library)
"aP" = (
/obj/item/keycard/library,
/turf/closed/mineral/random/snow/no_caves,
/area/ruin/unpowered/buried_library)
"aQ" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/item/paper/fluff/awaymissions/moonoutpost19/research/larva_autopsy,
/turf/open/floor/wood{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/ruin/unpowered/buried_library)
"aR" = (
/obj/structure/fluff/paper/stack,
/turf/open/floor/wood{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/ruin/unpowered/buried_library)
"aS" = (
/obj/structure/table/wood/fancy/black,
/obj/effect/decal/cleanable/dirt/dust,
/obj/item/paper/secretrecipe,
/obj/item/flashlight/lantern/jade{
on = 1
},
/turf/open/floor/plasteel/cult,
/area/ruin/unpowered/buried_library)
"aT" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/structure/fluff/paper,
/turf/open/floor/wood{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/ruin/unpowered/buried_library)
"aU" = (
/obj/item/stack/sheet/mineral/wood,
/turf/open/floor/plating/asteroid/snow/icemoon,
/area/ruin/unpowered/buried_library)
"aV" = (
/obj/item/stack/sheet/mineral/wood,
/obj/structure/fluff/paper/stack,
/turf/open/floor/wood{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/ruin/unpowered/buried_library)
"aW" = (
/obj/structure/fluff/paper/stack,
/turf/open/floor/plasteel/cult,
/area/ruin/unpowered/buried_library)
"aX" = (
/obj/structure/table/bronze,
/obj/item/statuebust,
/turf/open/floor/plating/icemoon,
/area/ruin/unpowered/buried_library)
"aY" = (
/obj/structure/table_frame/wood,
/turf/open/floor/plating/icemoon,
/area/ruin/unpowered/buried_library)
"aZ" = (
/obj/structure/fluff/paper/stack,
/obj/structure/fluff/paper,
/turf/open/floor/wood{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/ruin/unpowered/buried_library)
"ba" = (
/obj/structure/barricade/wooden/snowed,
/turf/open/floor/plating/asteroid/snow/icemoon,
/area/ruin/unpowered/buried_library)
"bb" = (
/obj/item/book/manual/random,
/turf/open/floor/plating/asteroid/snow/icemoon,
/area/ruin/unpowered/buried_library)
"bc" = (
/obj/item/feather,
/obj/structure/fluff/paper,
/obj/structure/fluff/paper{
icon_state = "paper";
dir = 1
},
/turf/open/floor/wood{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/ruin/unpowered/buried_library)
"bd" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/structure/fluff/paper{
icon_state = "paper";
dir = 1
},
/turf/open/floor/wood{
icon_state = "wood-broken7";
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/ruin/unpowered/buried_library)
"be" = (
/obj/structure/fluff/paper{
icon_state = "paper";
dir = 5
},
/turf/open/floor/wood{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/ruin/unpowered/buried_library)
"bf" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/structure/fluff/paper{
icon_state = "paper";
dir = 4
},
/turf/open/floor/wood{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/ruin/unpowered/buried_library)
"bg" = (
/obj/item/paper/fluff/ruins/oldstation/protogun,
/turf/open/floor/plating/asteroid/snow/icemoon,
/area/ruin/unpowered/buried_library)
"bh" = (