From 3b75eaaba3bfd75a2797747eb6aa049390e79abf Mon Sep 17 00:00:00 2001 From: AffectedArc07 Date: Sat, 26 Jan 2019 21:23:10 +0000 Subject: [PATCH 001/103] Adds a round notify system --- SQL/paradise_schema.sql | 14 +++++++++ SQL/paradise_schema_prefixed.sql | 14 +++++++++ SQL/updates/4-5.sql | 9 ++++++ code/__DEFINES/misc.dm | 2 +- code/modules/discord/accountlink.dm | 49 +++++++++++++++++++++++++++++ code/modules/discord/notify.dm | 48 ++++++++++++++++++++++++++++ code/modules/ext_scripts/irc.dm | 15 ++++++++- config/example/dbconfig.txt | 2 +- paradise.dme | 2 ++ 9 files changed, 152 insertions(+), 3 deletions(-) create mode 100644 SQL/updates/4-5.sql create mode 100644 code/modules/discord/accountlink.dm create mode 100644 code/modules/discord/notify.dm diff --git a/SQL/paradise_schema.sql b/SQL/paradise_schema.sql index ac212377724..0379517190f 100644 --- a/SQL/paradise_schema.sql +++ b/SQL/paradise_schema.sql @@ -521,3 +521,17 @@ CREATE TABLE `memo` ( PRIMARY KEY (`ckey`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `discord` +-- +DROP TABLE IF EXISTS `discord`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE IF NOT EXISTS `discord` ( + `ckey` varchar(32) NOT NULL, + `discord_id` bigint(20) NOT NULL, + `notify` int(11) NOT NULL, + PRIMARY KEY (`ckey`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; diff --git a/SQL/paradise_schema_prefixed.sql b/SQL/paradise_schema_prefixed.sql index 4946add50f2..e9a622cf037 100644 --- a/SQL/paradise_schema_prefixed.sql +++ b/SQL/paradise_schema_prefixed.sql @@ -520,3 +520,17 @@ CREATE TABLE `SS13_memo` ( PRIMARY KEY (`ckey`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `SS13_discord` +-- +DROP TABLE IF EXISTS `SS13_discord`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE IF NOT EXISTS `SS13_discord` ( + `ckey` varchar(32) NOT NULL, + `discord_id` bigint(20) NOT NULL, + `notify` int(11) NOT NULL, + PRIMARY KEY (`ckey`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; diff --git a/SQL/updates/4-5.sql b/SQL/updates/4-5.sql new file mode 100644 index 00000000000..f8f6193239b --- /dev/null +++ b/SQL/updates/4-5.sql @@ -0,0 +1,9 @@ +#Updating the SQL from version 4 to version 5. -AffectedArc07 +#Creating a table to track discord IDs for round notifying +DROP TABLE IF EXISTS `discord`; +CREATE TABLE IF NOT EXISTS `discord` ( + `ckey` varchar(32) NOT NULL, + `discord_id` bigint(20) NOT NULL, + `notify` int(11) NOT NULL, + PRIMARY KEY (`ckey`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 4dd72c012ce..78daa14e202 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -366,7 +366,7 @@ #define INVESTIGATE_BOMB "bombs" // The SQL version required by this version of the code -#define SQL_VERSION 4 +#define SQL_VERSION 5 // Vending machine stuff #define CAT_NORMAL 1 diff --git a/code/modules/discord/accountlink.dm b/code/modules/discord/accountlink.dm new file mode 100644 index 00000000000..b03e8af2142 --- /dev/null +++ b/code/modules/discord/accountlink.dm @@ -0,0 +1,49 @@ +// DONT TOUCH ANYTHING IN HERE UNLESS YOU KNOW WHAT YOU ARE DOING -affected +/client/verb/linkdiscord() + set category = "OOC" + set name = "Link Discord Account" + set desc = "Link your discord account to your BYOND account." + ckey = sanitizeSQL(usr.ckey) // Probably not neccassary but better safe than sorry + if(!config.sql_enabled) + to_chat(src, "This is feature requires the SQL backend") + return + var/DBQuery/db_discord_id = dbcon.NewQuery("SELECT discord_id FROM [format_table_name("discord")] WHERE ckey = '[ckey]'") + if(!db_discord_id.Execute()) + var/err = db_discord_id.ErrorMsg() + log_game("SQL ERROR while selecting discord account. Error : \[[err]\]\n") + to_chat(src, "Error checking Discord account. Please inform an administrator") + return + var/stored_id + while(db_discord_id.NextRow()) + stored_id = db_discord_id.item[1] + if(!stored_id) // Not linked + var/entered_id = input("Please enter your Discord ID. Instructions can be found at https://bit.ly/2AfUu40", "Enter Discord ID", null, null) as text|null + var/sql_id = sanitizeSQL(entered_id) + var/DBQuery/store_discord_id = dbcon.NewQuery("INSERT INTO [format_table_name("discord")] (ckey, discord_id, notify) VALUES ('[ckey]', [sql_id], 0)") + if(!store_discord_id.Execute()) + var/err = db_discord_id.ErrorMsg() + log_game("SQL ERROR while linking discord account. Error : \[[err]\]\n") + to_chat(src, "Error linking Discord account. Please inform an administrator") + return + to_chat(src, "Successfully linked discord account [entered_id] to [ckey]") + else // Linked + var/choice = alert("You already have the Discord Account [stored_id] linked to [ckey]. Would you like to unlink or replace","Already Linked","Unlink","Replace") + switch(choice) + if("Unlink") + var/DBQuery/unlink_discord_id = dbcon.NewQuery("DELETE FROM [format_table_name("discord")] WHERE ckey = '[ckey]'") + if(!unlink_discord_id.Execute()) + var/err = unlink_discord_id.ErrorMsg() + log_game("SQL ERROR while unlinking discord account. Error : \[[err]\]\n") + to_chat(src, "Error unlinking Discord account. Please inform an administrator") + return + to_chat(src, "Successfully unlinked discord account") + if("Replace") + var/entered_id = input("Please enter your Discord ID. Instructions can be found at https://bit.ly/2AfUu40", "Enter Discord ID", null, null) as text|null + var/sql_id = sanitizeSQL(entered_id) + var/DBQuery/store_discord_id = dbcon.NewQuery("UPDATE [format_table_name("discord")] SET discord_id = '[sql_id]' WHERE ckey='[ckey]'") + if(!store_discord_id.Execute()) + var/err = db_discord_id.ErrorMsg() + to_chat(src, "Error replacing Discord account. Please inform an administrator") + log_game("SQL ERROR while linking discord account. Error : \[[err]\]\n") + return + to_chat(src, "Successfully linked discord account [entered_id] to [ckey]") diff --git a/code/modules/discord/notify.dm b/code/modules/discord/notify.dm new file mode 100644 index 00000000000..bca1b38f954 --- /dev/null +++ b/code/modules/discord/notify.dm @@ -0,0 +1,48 @@ +// DONT TOUCH ANYTHING IN HERE UNLESS YOU KNOW WHAT YOU ARE DOING -affected +/client/verb/notify_restart() + set category = "OOC" + set name = "Notify Restart" + set desc = "Notifies you on Discord when the server restarts." + if(!config.sql_enabled) + to_chat(src, "This is feature requires the SQL backend") + return + var/DBQuery/db_discord_id = dbcon.NewQuery("SELECT discord_id FROM [format_table_name("discord")] WHERE ckey = '[ckey]'") + if(!db_discord_id.Execute()) + var/err = db_discord_id.ErrorMsg() + log_game("SQL ERROR while selecting discord account. Error : \[[err]\]\n") + to_chat(src, "Error checking Discord account. Please inform an administrator") + return + var/stored_id + while(db_discord_id.NextRow()) + stored_id = db_discord_id.item[1] + if(!stored_id) // Not linked + to_chat(src, "This requires you to link your Discord account with the \"Link Discord Account\" verb.") + return + else // Linked + var/DBQuery/toggle_status = dbcon.NewQuery("SELECT notify FROM [format_table_name("discord")] WHERE ckey = '[ckey]'") + if(!toggle_status.Execute()) + var/err = toggle_status.ErrorMsg() + log_game("SQL ERROR while getting discord account. Error : \[[err]\]\n") + var/notify_status + while(toggle_status.NextRow()) + notify_status = toggle_status.item[1] + if(notify_status) // Data is there + switch(notify_status) + if("0") + var/DBQuery/update_notify = dbcon.NewQuery("UPDATE [format_table_name("discord")] SET notify = 1 WHERE ckey='[ckey]'") + if(!update_notify.Execute()) + var/err = db_discord_id.ErrorMsg() + to_chat(src, "Error updating notify status. Please inform an administrator") + log_game("SQL ERROR while updating notify status. Error : \[[err]\]\n") + return + to_chat(src, "You will now be notified on discord when the next round is starting") + if("1") + var/DBQuery/update_notify = dbcon.NewQuery("UPDATE [format_table_name("discord")] SET notify = 0 WHERE ckey='[ckey]'") + if(!update_notify.Execute()) + var/err = db_discord_id.ErrorMsg() + to_chat(src, "Error updating notify status. Please inform an administrator") + log_game("SQL ERROR while updating notify status. Error : \[[err]\]\n") + return + to_chat(src, "You will no longer be notified on discord when the next round is starting") + else // Oh fuck what the hell happened + to_chat(src, "Something has gone VERY wrong, or affected cant code.") diff --git a/code/modules/ext_scripts/irc.dm b/code/modules/ext_scripts/irc.dm index 3cc29ff39fb..11b799aa203 100644 --- a/code/modules/ext_scripts/irc.dm +++ b/code/modules/ext_scripts/irc.dm @@ -17,5 +17,18 @@ return /hook/startup/proc/ircNotify() - send2mainirc("Server starting up on [station_name()]. Connect to: [config.server? "[config.server]" : "[world.address]:[world.port]"]") + var/people_to_ping = "" + var/DBQuery/pull_notify = dbcon.NewQuery("SELECT discord_id FROM [format_table_name("discord")] WHERE notify = 1") + if(!pull_notify.Execute()) + var/err = pull_notify.ErrorMsg() + log_game("SQL ERROR while pulling notify people. Error : \[[err]\]\n") + else + while(pull_notify.NextRow()) + people_to_ping += "<@" + pull_notify.item[1] + "> " + send2mainirc("Server starting up on [station_name()]. Connect to: "+people_to_ping) + // Set notify to 0 so people arent pinged round after round + var/DBQuery/reset_notify = dbcon.NewQuery("UPDATE [format_table_name("discord")] SET notify = 0 WHERE notify = 1") + if(!reset_notify.Execute()) + var/err = reset_notify.ErrorMsg() + log_game("SQL ERROR while resetting notify status. Error : \[[err]\]\n") return 1 diff --git a/config/example/dbconfig.txt b/config/example/dbconfig.txt index 563768b69bc..6ca1f0201e8 100644 --- a/config/example/dbconfig.txt +++ b/config/example/dbconfig.txt @@ -9,7 +9,7 @@ ## This value must be set to the version of the paradise schema in use. ## If this value does not match, the SQL database will not be loaded and an error will be generated. ## Roundstart will be delayed. -DB_VERSION 4 +DB_VERSION 5 ## Server the MySQL database can be found at. # Examples: localhost, 200.135.5.43, www.mysqldb.com, etc. diff --git a/paradise.dme b/paradise.dme index d2b7d637877..207021ff39d 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1343,6 +1343,8 @@ #include "code\modules\detective_work\evidence.dm" #include "code\modules\detective_work\footprints_and_rag.dm" #include "code\modules\detective_work\scanner.dm" +#include "code\modules\discord\accountlink.dm" +#include "code\modules\discord\notify.dm" #include "code\modules\economy\Accounts.dm" #include "code\modules\economy\Accounts_DB.dm" #include "code\modules\economy\ATM.dm" From 050d520aa7f4b786ff18a59498ff5fee7a1ff3a9 Mon Sep 17 00:00:00 2001 From: MINIMAN10000 Date: Wed, 30 Jan 2019 01:51:48 -0800 Subject: [PATCH 002/103] Added configuration for disabling subsystems by name --- code/controllers/configuration.dm | 3 +++ code/controllers/master.dm | 6 ++++++ config/example/config.txt | 7 ++++++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 86ecd93dba2..90e29ccc438 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -209,6 +209,7 @@ // Developer var/developer_express_start = 0 + var/developer_disable_subsystem[] /datum/configuration/New() for(var/T in subtypesof(/datum/game_mode)) @@ -636,6 +637,8 @@ config.disable_high_pop_mc_mode_amount = text2num(value) if("developer_express_start") config.developer_express_start = 1 + if("developer_disable_subsystem") + config.developer_disable_subsystem = splittext(value, ",") else log_config("Unknown setting in configuration: '[name]'") diff --git a/code/controllers/master.dm b/code/controllers/master.dm index a9c7e0dbb7b..11417f3b5a0 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -176,6 +176,12 @@ GLOBAL_REAL(Master, /datum/controller/master) = new to_chat(world, "Initializing subsystems...") + // Config disable subsystem + for(var/select=1, select <= subsystems.len, select++) + for(var/disable=1, disable <= config.developer_disable_subsystem.len, disable++) + if(subsystems[select].name == config.developer_disable_subsystem[disable]) + subsystems -= subsystems[select] + // Sort subsystems by init_order, so they initialize in the correct order. sortTim(subsystems, /proc/cmp_subsystem_init) diff --git a/config/example/config.txt b/config/example/config.txt index a439f0f3ad6..aeb65dd02b9 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -387,4 +387,9 @@ HIGH_POP_MC_MODE_AMOUNT 65 DISABLE_HIGH_POP_MC_MODE_AMOUNT 60 ##Uncomment to enable developer start. Auto starts the server after initialization -##DEVELOPER_EXPRESS_START \ No newline at end of file +##DEVELOPER_EXPRESS_START + +##Disable subsystems by name comma delimited. Last verified 1-30-2019 list of subsystems +## Garbage, Atoms, Machines, Timer, Fires, Mobs, Nanoui, NPC AI, NPC Pool, Space Drift, Sun, Throwing, Weather, +## Atmospherics, Icon Smoothing, Overlay, Tickets, Shuttle, Night Shift, Nano-Mob Hunter GO Server +DEVELOPER_DISABLE_SUBSYSTEM \ No newline at end of file From f98da3edf8e616039c7bf4ad58787d424b6a6fbb Mon Sep 17 00:00:00 2001 From: datlo Date: Sat, 2 Feb 2019 17:51:25 +0000 Subject: [PATCH 003/103] Progress... --- .../RandomRuins/SpaceRuins/freegolems.dmm | 55 + code/__DEFINES/gamemode.dm | 1 + code/_globalvars/lists/names.dm | 1 + code/game/machinery/constructable_frame.dm | 4 + .../objects/structures/ghost_role_spawners.dm | 251 +++++ .../mission_code/ruins/freegolems.dm | 66 ++ .../mission_code/ruins/oldstation.dm | 114 +- code/modules/mining/equipment_locker.dm | 17 + code/modules/mob/language.dm | 7 + .../mob/living/carbon/human/species/golem.dm | 992 +++++++++++++++++- config/names/golem.txt | 157 +++ .../{r_golem.dmi => golems/oldgolem.dmi} | Bin icons/mob/human_races/golems/r_golem.dmi | Bin 0 -> 6410 bytes paradise.dme | 2 + 14 files changed, 1542 insertions(+), 125 deletions(-) create mode 100644 _maps/map_files/RandomRuins/SpaceRuins/freegolems.dmm create mode 100644 code/game/objects/structures/ghost_role_spawners.dm create mode 100644 code/modules/awaymissions/mission_code/ruins/freegolems.dm create mode 100644 config/names/golem.txt rename icons/mob/human_races/{r_golem.dmi => golems/oldgolem.dmi} (100%) create mode 100644 icons/mob/human_races/golems/r_golem.dmi diff --git a/_maps/map_files/RandomRuins/SpaceRuins/freegolems.dmm b/_maps/map_files/RandomRuins/SpaceRuins/freegolems.dmm new file mode 100644 index 00000000000..e40a050fdca --- /dev/null +++ b/_maps/map_files/RandomRuins/SpaceRuins/freegolems.dmm @@ -0,0 +1,55 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/turf/simulated/shuttle/wall,/area/shuttle/freegolem) +"c" = (/turf/simulated/shuttle/plating,/area/shuttle/freegolem) +"d" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/shuttle/freegolem) +"e" = (/obj/structure/shuttle/engine/propulsion{dir = 8; icon_state = "burst_l"},/turf/space,/area/shuttle/freegolem) +"f" = (/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"g" = (/obj/machinery/door/airlock/shuttle,/obj/structure/fans/tiny,/turf/simulated/shuttle/plating,/area/shuttle/freegolem) +"h" = (/obj/item/storage/toolbox/mechanical,/turf/simulated/shuttle/plating,/area/shuttle/freegolem) +"i" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/shuttle/plating,/area/shuttle/freegolem) +"j" = (/obj/machinery/light/small,/turf/simulated/shuttle/plating,/area/shuttle/freegolem) +"k" = (/obj/machinery/door/airlock/shuttle,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"l" = (/obj/machinery/computer/arcade/battle,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"m" = (/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"n" = (/obj/machinery/light{dir = 1; on = 1},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"o" = (/obj/structure/fans/tiny,/obj/machinery/door/airlock/shuttle,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"p" = (/obj/item/resonator,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"q" = (/obj/machinery/light{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"r" = (/obj/machinery/mineral/ore_redemption,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"s" = (/obj/structure/statue/gold/rd{name = "statue of the Liberator"},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"t" = (/obj/structure/computerframe,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"u" = (/obj/structure/extinguisher_cabinet{pixel_y = 30},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"v" = (/obj/machinery/door/airlock/shuttle,/obj/structure/fans/tiny,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"w" = (/obj/item/book/manual/research_and_development{name = "Sacred Text of the Liberator"; pixel_x = -4; pixel_y = 3},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/table/wood,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"x" = (/obj/machinery/light/small,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"y" = (/obj/item/resonator/upgraded,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"z" = (/obj/machinery/autolathe,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"A" = (/obj/structure/table/wood,/obj/machinery/reagentgrinder,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"B" = (/obj/machinery/computer/arcade/orion_trail,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"C" = (/obj/structure/extinguisher_cabinet{pixel_y = -30},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"D" = (/obj/structure/table/wood,/obj/item/storage/firstaid/brute,/obj/item/storage/firstaid/brute,/obj/item/storage/firstaid/brute,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"E" = (/obj/structure/table/wood,/obj/structure/table/wood,/obj/item/storage/firstaid/fire,/obj/item/storage/firstaid/fire,/obj/item/storage/firstaid/fire,/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"F" = (/obj/structure/table/wood,/obj/item/storage/firstaid/adv,/obj/item/storage/firstaid/adv,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"G" = (/obj/structure/table/wood,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"H" = (/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/plating,/area/shuttle/freegolem) +"I" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/shuttle/plating,/area/shuttle/freegolem) +"J" = (/obj/structure/ore_box,/turf/simulated/shuttle/plating,/area/shuttle/freegolem) + +(1,1,1) = {" +aaaaabbbbbbbbbbggbbb +aaaaabcccccccchccide +aaaaabccjccjcccjcide +aabbbbkkbbbbkkbbbbbb +aablfmffmfbffffnffde +aaofffffppkfffffffde +bbbkkbbbbbbqffffrbbb +bstffffmffkffffffkuv +bwfffxffffkffffffkxv +bbbkkbbbbbbqfffyzbbb +aaofffffppkffffffAde +aabBfxffxfbCffDEFGde +aabbbbkkbbbbkkbbbbbb +aaaaabccHccHcccHcIde +aaaaabJJJJJJJJhccIde +aaaaabbbbbbbbbbggbbb +"} diff --git a/code/__DEFINES/gamemode.dm b/code/__DEFINES/gamemode.dm index 42835d43813..328904d3884 100644 --- a/code/__DEFINES/gamemode.dm +++ b/code/__DEFINES/gamemode.dm @@ -24,6 +24,7 @@ #define SPECIAL_ROLE_CULTIST "Cultist" #define SPECIAL_ROLE_DEATHSQUAD "Death Commando" #define SPECIAL_ROLE_ERT "Response Team" +#define SPECIAL_ROLE_FREE_GOLEM "Free Golem" #define SPECIAL_ROLE_GOLEM "Golem" #define SPECIAL_ROLE_HEAD_REV "Head Revolutionary" #define SPECIAL_ROLE_HONKSQUAD "Honksquad" diff --git a/code/_globalvars/lists/names.dm b/code/_globalvars/lists/names.dm index e88c2dfbb28..be5f4867c56 100644 --- a/code/_globalvars/lists/names.dm +++ b/code/_globalvars/lists/names.dm @@ -9,6 +9,7 @@ GLOBAL_LIST_INIT(first_names_female, file2list("config/names/first_female.txt")) GLOBAL_LIST_INIT(last_names, file2list("config/names/last.txt")) GLOBAL_LIST_INIT(clown_names, file2list("config/names/clown.txt")) GLOBAL_LIST_INIT(mime_names, file2list("config/names/mime.txt")) +GLOBAL_LIST_INIT(golem_names, file2list("config/names/golem.txt")) GLOBAL_LIST_INIT(verbs, file2list("config/names/verbs.txt")) GLOBAL_LIST_INIT(adjectives, file2list("config/names/adjectives.txt")) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 114835b21c3..796d57f2a72 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -953,6 +953,10 @@ to destroy them and players will be able to make replacements. /obj/item/stock_parts/console_screen = 1, /obj/item/stock_parts/matter_bin = 3) +/obj/item/circuitboard/machine/mining_equipment_vendor/golem + name = "Golem Ship Equipment Vendor (Machine Board)" + build_path = /obj/machinery/mineral/equipment_vendor/golem + /obj/item/circuitboard/clawgame name = "circuit board (Claw Game)" build_path = /obj/machinery/arcade/claw diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm new file mode 100644 index 00000000000..7bb0e94e2a4 --- /dev/null +++ b/code/game/objects/structures/ghost_role_spawners.dm @@ -0,0 +1,251 @@ +//Ancient cryogenic sleepers. Players become NT crewmen from a hundred year old space station, now on the verge of collapse. + +/obj/effect/mob_spawn/human/oldsec + name = "old cryogenics pod" + desc = "A humming cryo pod. You can barely recognise a security uniform underneath the built up ice. The machine is attempting to wake up its occupant." + mob_name = "a security officer" + icon = 'icons/obj/cryogenic2.dmi' + icon_state = "sleeper" + roundstart = FALSE + death = FALSE + random = TRUE + mob_species = /datum/species/human + flavour_text = "You are a security officer working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \ + cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \ + your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \ + Work as a team with your fellow survivors and do not abandon them." + uniform = /obj/item/clothing/under/retro/security + shoes = /obj/item/clothing/shoes/jackboots + id = /obj/item/card/id/away/old/sec + r_pocket = /obj/item/restraints/handcuffs + l_pocket = /obj/item/flash + assignedrole = "Ancient Crew" + +/obj/effect/mob_spawn/human/oldsec/Destroy() + new /obj/structure/showcase/machinery/oldpod/used(drop_location()) + return ..() + +/obj/effect/mob_spawn/human/oldmed + name = "old cryogenics pod" + desc = "A humming cryo pod. You can barely recognise a medical uniform underneath the built up ice. The machine is attempting to wake up its occupant." + mob_name = "a medical doctor" + icon = 'icons/obj/cryogenic2.dmi' + icon_state = "sleeper" + roundstart = FALSE + death = FALSE + random = TRUE + mob_species = /datum/species/human + flavour_text = "You are a medical working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \ + cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \ + your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \ + Work as a team with your fellow survivors and do not abandon them." + uniform = /obj/item/clothing/under/retro/medical + shoes = /obj/item/clothing/shoes/black + id = /obj/item/card/id/away/old/med + l_pocket = /obj/item/stack/medical/ointment + r_pocket = /obj/item/stack/medical/ointment + assignedrole = "Ancient Crew" + +/obj/effect/mob_spawn/human/oldmed/Destroy() + new /obj/structure/showcase/machinery/oldpod/used(drop_location()) + return ..() + +/obj/effect/mob_spawn/human/oldeng + name = "old cryogenics pod" + desc = "A humming cryo pod. You can barely recognise an engineering uniform underneath the built up ice. The machine is attempting to wake up its occupant." + mob_name = "an engineer" + icon = 'icons/obj/cryogenic2.dmi' + icon_state = "sleeper" + roundstart = FALSE + death = FALSE + random = TRUE + mob_species = /datum/species/human + flavour_text = "You are an engineer working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \ + cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \ + your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \ + Work as a team with your fellow survivors and do not abandon them." + uniform = /obj/item/clothing/under/retro/engineering + shoes = /obj/item/clothing/shoes/workboots + id = /obj/item/card/id/away/old/eng + gloves = /obj/item/clothing/gloves/color/fyellow/old + l_pocket = /obj/item/tank/emergency_oxygen + assignedrole = "Ancient Crew" + +/obj/effect/mob_spawn/human/oldeng/Destroy() + new /obj/structure/showcase/machinery/oldpod/used(drop_location()) + return ..() + +/obj/effect/mob_spawn/human/oldsci + name = "old cryogenics pod" + desc = "A humming cryo pod. You can barely recognise a science uniform underneath the built up ice. The machine is attempting to wake up its occupant." + mob_name = "a scientist" + icon = 'icons/obj/cryogenic2.dmi' + icon_state = "sleeper" + roundstart = FALSE + death = FALSE + random = TRUE + mob_species = /datum/species/human + flavour_text = "You are a scientist working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \ + cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \ + your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \ + Work as a team with your fellow survivors and do not abandon them." + uniform = /obj/item/clothing/under/retro/science + shoes = /obj/item/clothing/shoes/laceup + id = /obj/item/card/id/away/old/sci + l_pocket = /obj/item/stack/medical/bruise_pack + assignedrole = "Ancient Crew" + +/obj/effect/mob_spawn/human/oldsci/Destroy() + new /obj/structure/showcase/machinery/oldpod/used(drop_location()) + return ..() + +/obj/structure/showcase/machinery/oldpod + name = "damaged cryogenic pod" + desc = "A damaged cryogenic pod long since lost to time, including its former occupant..." + icon = 'icons/obj/cryogenic2.dmi' + icon_state = "sleeper-open" + +/obj/structure/showcase/machinery/oldpod/used + name = "opened cryogenic pod" + desc = "A cryogenic pod that has recently discharged its occupant. The pod appears non-functional." + +//Golem shells: Spawns in Free Golem ships in lavaland. Ghosts become mineral golems and are advised to spread personal freedom. + +/obj/item/golem_shell + name = "incomplete free golem shell" + icon = 'icons/obj/wizard.dmi' + icon_state = "construct" + desc = "The incomplete body of a golem. Add ten sheets of any mineral to finish." + var/shell_type = /obj/effect/mob_spawn/human/golem + var/has_owner = FALSE //if the resulting golem obeys someone + w_class = WEIGHT_CLASS_BULKY + +/obj/item/golem_shell/attackby(obj/item/I, mob/user, params) + ..() + var/static/list/golem_shell_species_types = list( + /obj/item/stack/sheet/metal = /datum/species/golem, + /obj/item/stack/sheet/glass = /datum/species/golem/glass, + /obj/item/stack/sheet/plasteel = /datum/species/golem/plasteel, + /obj/item/stack/sheet/mineral/sandstone = /datum/species/golem/sand, + /obj/item/stack/sheet/mineral/plasma = /datum/species/golem/plasma, + /obj/item/stack/sheet/mineral/diamond = /datum/species/golem/diamond, + /obj/item/stack/sheet/mineral/gold = /datum/species/golem/gold, + /obj/item/stack/sheet/mineral/silver = /datum/species/golem/silver, + /obj/item/stack/sheet/mineral/uranium = /datum/species/golem/uranium, + /obj/item/stack/sheet/mineral/bananium = /datum/species/golem/bananium, + /obj/item/stack/sheet/mineral/tranquillite = /datum/species/golem/tranquillite, + /obj/item/stack/sheet/mineral/titanium = /datum/species/golem/titanium, + /obj/item/stack/sheet/mineral/plastitanium = /datum/species/golem/plastitanium, + /obj/item/stack/sheet/mineral/abductor = /datum/species/golem/alloy, + /obj/item/stack/sheet/mineral/wood = /datum/species/golem/wood, + /obj/item/stack/sheet/bluespace_crystal = /datum/species/golem/bluespace, + /obj/item/stack/sheet/runed_metal = /datum/species/golem/runic, + /obj/item/stack/medical/gauze = /datum/species/golem/cloth, + /obj/item/stack/sheet/cloth = /datum/species/golem/cloth, + /obj/item/stack/sheet/plastic = /datum/species/golem/plastic, + /obj/item/stack/tile/brass = /datum/species/golem/clockwork, + /obj/item/stack/sheet/cardboard = /datum/species/golem/cardboard, + /obj/item/stack/sheet/leather = /datum/species/golem/leather, + /obj/item/stack/sheet/bone = /datum/species/golem/bone) + + if(istype(I, /obj/item/stack)) + var/obj/item/stack/O = I + var/species = golem_shell_species_types[O.merge_type] + if(species) + if(O.use(10)) + to_chat(user, "You finish up the golem shell with ten sheets of [O].") + new shell_type(get_turf(src), species, user) + qdel(src) + else + to_chat(user, "You need at least ten sheets to finish a golem.") + else + to_chat(user, "You can't build a golem out of this kind of material.") + +/obj/effect/mob_spawn/human/golem + name = "inert free golem shell" + desc = "A humanoid shape, empty, lifeless, and full of potential." + mob_name = "a free golem" + icon = 'icons/obj/wizard.dmi' + icon_state = "construct" + mob_species = /datum/species/golem + roundstart = FALSE + death = FALSE + anchored = FALSE + move_resist = MOVE_FORCE_NORMAL + density = FALSE + var/has_owner = FALSE + var/can_transfer = TRUE //if golems can switch bodies to this new shell + var/mob/living/owner = null //golem's owner if it has one + flavour_text = "You are a Free Golem. Your family worships The Liberator. In his infinite and divine wisdom, he set your clan free to \ + travel the stars with a single declaration: \"Yeah go do whatever.\" Though you are bound to the one who created you, it is customary in your society to repeat those same words to newborn \ + golems, so that no golem may ever be forced to serve again." + +/obj/effect/mob_spawn/human/golem/Initialize(mapload, datum/species/golem/species = null, mob/creator = null) + if(species) //spawners list uses object name to register so this goes before ..() + name += " ([initial(species.prefix)])" + mob_species = species + . = ..() + var/area/A = get_area(src) + if(!mapload && A) + notify_ghosts("\A [initial(species.prefix)] golem shell has been completed in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE, ignore_key = POLL_IGNORE_GOLEM) + if(has_owner && creator) + flavour_text = "You are a Golem. You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools. \ + Serve [creator], and assist [creator.p_them()] in completing [creator.p_their()] goals at any cost." + owner = creator + +/obj/effect/mob_spawn/human/golem/special(mob/living/new_spawn, name) + var/datum/species/golem/X = mob_species + to_chat(new_spawn, "[initial(X.info_text)]") + if(!owner) + to_chat(new_spawn, "Build golem shells in the autolathe, and feed refined mineral sheets to the shells to bring them to life! You are generally a peaceful group unless provoked.") + else + new_spawn.mind.store_memory("Serve [owner.real_name], your creator.") + new_spawn.mind.enslave_mind_to_creator(owner) + log_game("[key_name(new_spawn)] possessed a golem shell enslaved to [key_name(owner)].") + log_admin("[key_name(new_spawn)] possessed a golem shell enslaved to [key_name(owner)].") + if(ishuman(new_spawn)) + var/mob/living/carbon/human/H = new_spawn + if(has_owner) + var/datum/species/golem/G = H.dna.species + G.owner = owner + H.set_cloned_appearance() + if(!name) + if(has_owner) + H.fully_replace_character_name(null, "[initial(X.prefix)] Golem ([rand(1,999)])") + else + H.fully_replace_character_name(null, H.dna.species.random_name()) + else + H.fully_replace_character_name(null, name) + if(has_owner) + new_spawn.mind.assigned_role = "Servant Golem" + else + new_spawn.mind.assigned_role = "Free Golem" + +/obj/effect/mob_spawn/human/golem/attack_hand(mob/user) + . = ..() + if(.) + return + if(isgolem(user) && can_transfer) + var/transfer_choice = alert("Transfer your soul to [src]? (Warning, your old body will die!)",,"Yes","No") + if(transfer_choice != "Yes") + return + if(QDELETED(src) || uses <= 0) + return + log_game("[key_name(user)] golem-swapped into [src]") + user.visible_message("A faint light leaves [user], moving to [src] and animating it!","You leave your old body behind, and transfer into [src]!") + show_flavour = FALSE + create(ckey = user.ckey,name = user.real_name) + user.death() + return + +/obj/effect/mob_spawn/human/golem/servant + has_owner = TRUE + name = "inert servant golem shell" + mob_name = "a servant golem" + +/obj/effect/mob_spawn/human/golem/adamantine + name = "dust-caked free golem shell" + desc = "A humanoid shape, empty, lifeless, and full of potential." + mob_name = "a free golem" + can_transfer = FALSE + mob_species = /datum/species/golem/adamantine diff --git a/code/modules/awaymissions/mission_code/ruins/freegolems.dm b/code/modules/awaymissions/mission_code/ruins/freegolems.dm new file mode 100644 index 00000000000..f67ccd91f03 --- /dev/null +++ b/code/modules/awaymissions/mission_code/ruins/freegolems.dm @@ -0,0 +1,66 @@ +//Items + +/obj/item/bedsheet/rd/royal_cape + name = "Royal Cape of the Liberator" + desc = "Majestic." + dream_messages = list("mining", "stone", "a golem", "freedom", "doing whatever") + +/obj/item/storage/box/rndboards + name = "the Liberator's legacy" + desc = "A box containing a gift for worthy golems." + +/obj/item/storage/box/rndboards/New() + ..() + contents = list() + new /obj/item/circuitboard/machine/protolathe(src) + new /obj/item/circuitboard/machine/destructive_analyzer(src) + new /obj/item/circuitboard/machine/circuit_imprinter(src) + new /obj/item/circuitboard/computer/rdconsole(src) + +/obj/item/areaeditor/golem + name = "golem land claim" + desc = "Used to define new areas in space or on an asteroid." + fluffnotice = "Praise the Liberator!" + +/obj/item/areaeditor/golem/attack_self(mob/user) + . = ..() + var/area/A = get_area() + if(get_area_type() == AREA_STATION) + . += "

According to the [src], you are now in \"[sanitize(A.name)]\".

" + var/datum/browser/popup = new(user, "blueprints", "[src]", 700, 500) + popup.set_content(.) + popup.open() + onclose(usr, "blueprints") + +/obj/item/disk/design_disk/golem_shell + name = "golem creation disk" + desc = "A gift from the Liberator." + icon_state = "datadisk1" + max_blueprints = 1 + +/obj/item/disk/design_disk/golem_shell/Initialize() + . = ..() + var/datum/design/golem_shell/G = new + blueprints[1] = G + +/datum/design/golem_shell + name = "Golem Shell Construction" + desc = "Allows for the construction of a Golem Shell." + id = "golem" + build_type = AUTOLATHE + materials = list(MAT_METAL = 40000) + build_path = /obj/item/golem_shell + category = list("Imported") + + +//Structures + +//Areas + +/area/shuttle/freegolem + name = "Free Golem Ship" + icon_state = "purple" + +/area/mine/dangerous/explored/golem + name = "Small Asteroid" + diff --git a/code/modules/awaymissions/mission_code/ruins/oldstation.dm b/code/modules/awaymissions/mission_code/ruins/oldstation.dm index 1a68a990705..1886aba02ab 100644 --- a/code/modules/awaymissions/mission_code/ruins/oldstation.dm +++ b/code/modules/awaymissions/mission_code/ruins/oldstation.dm @@ -360,116 +360,4 @@ /area/ruin/space/ancientstation/hivebot name = "Hivebot Mothership" - icon_state = "teleporter" - -// Mob Spawners -//Ancient cryogenic sleepers. Players become NT crewmen from a hundred year old space station, now on the verge of collapse. - -/obj/effect/mob_spawn/human/oldsec - name = "old cryogenics pod" - desc = "A humming cryo pod. You can barely recognise a security uniform underneath the built up ice. The machine is attempting to wake up its occupant." - mob_name = "a security officer" - icon = 'icons/obj/cryogenic2.dmi' - icon_state = "sleeper" - roundstart = FALSE - death = FALSE - random = TRUE - mob_species = /datum/species/human - flavour_text = "You are a security officer working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \ - cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \ - your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \ - Work as a team with your fellow survivors and do not abandon them." - uniform = /obj/item/clothing/under/retro/security - shoes = /obj/item/clothing/shoes/jackboots - id = /obj/item/card/id/away/old/sec - r_pocket = /obj/item/restraints/handcuffs - l_pocket = /obj/item/flash - assignedrole = "Ancient Crew" - -/obj/effect/mob_spawn/human/oldsec/Destroy() - new /obj/structure/showcase/machinery/oldpod/used(drop_location()) - return ..() - -/obj/effect/mob_spawn/human/oldmed - name = "old cryogenics pod" - desc = "A humming cryo pod. You can barely recognise a medical uniform underneath the built up ice. The machine is attempting to wake up its occupant." - mob_name = "a medical doctor" - icon = 'icons/obj/cryogenic2.dmi' - icon_state = "sleeper" - roundstart = FALSE - death = FALSE - random = TRUE - mob_species = /datum/species/human - flavour_text = "You are a medical working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \ - cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \ - your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \ - Work as a team with your fellow survivors and do not abandon them." - uniform = /obj/item/clothing/under/retro/medical - shoes = /obj/item/clothing/shoes/black - id = /obj/item/card/id/away/old/med - l_pocket = /obj/item/stack/medical/ointment - r_pocket = /obj/item/stack/medical/ointment - assignedrole = "Ancient Crew" - -/obj/effect/mob_spawn/human/oldmed/Destroy() - new /obj/structure/showcase/machinery/oldpod/used(drop_location()) - return ..() - -/obj/effect/mob_spawn/human/oldeng - name = "old cryogenics pod" - desc = "A humming cryo pod. You can barely recognise an engineering uniform underneath the built up ice. The machine is attempting to wake up its occupant." - mob_name = "an engineer" - icon = 'icons/obj/cryogenic2.dmi' - icon_state = "sleeper" - roundstart = FALSE - death = FALSE - random = TRUE - mob_species = /datum/species/human - flavour_text = "You are an engineer working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \ - cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \ - your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \ - Work as a team with your fellow survivors and do not abandon them." - uniform = /obj/item/clothing/under/retro/engineering - shoes = /obj/item/clothing/shoes/workboots - id = /obj/item/card/id/away/old/eng - gloves = /obj/item/clothing/gloves/color/fyellow/old - l_pocket = /obj/item/tank/emergency_oxygen - assignedrole = "Ancient Crew" - -/obj/effect/mob_spawn/human/oldeng/Destroy() - new /obj/structure/showcase/machinery/oldpod/used(drop_location()) - return ..() - -/obj/effect/mob_spawn/human/oldsci - name = "old cryogenics pod" - desc = "A humming cryo pod. You can barely recognise a science uniform underneath the built up ice. The machine is attempting to wake up its occupant." - mob_name = "a scientist" - icon = 'icons/obj/cryogenic2.dmi' - icon_state = "sleeper" - roundstart = FALSE - death = FALSE - random = TRUE - mob_species = /datum/species/human - flavour_text = "You are a scientist working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \ - cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \ - your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \ - Work as a team with your fellow survivors and do not abandon them." - uniform = /obj/item/clothing/under/retro/science - shoes = /obj/item/clothing/shoes/laceup - id = /obj/item/card/id/away/old/sci - l_pocket = /obj/item/stack/medical/bruise_pack - assignedrole = "Ancient Crew" - -/obj/effect/mob_spawn/human/oldsci/Destroy() - new /obj/structure/showcase/machinery/oldpod/used(drop_location()) - return ..() - -/obj/structure/showcase/machinery/oldpod - name = "damaged cryogenic pod" - desc = "A damaged cryogenic pod long since lost to time, including its former occupant..." - icon = 'icons/obj/cryogenic2.dmi' - icon_state = "sleeper-open" - -/obj/structure/showcase/machinery/oldpod/used - name = "opened cryogenic pod" - desc = "A cryogenic pod that has recently discharged its occupant. The pod appears non-functional." + icon_state = "teleporter" \ No newline at end of file diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 42b616990c6..8fe17f24053 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -426,6 +426,23 @@ new /datum/data/mining_equipment("Point Transfer Card", /obj/item/card/mining_point_card, 500), ) +/obj/machinery/mineral/equipment_vendor/golem + name = "golem ship equipment vendor" + circuit = /obj/item/circuitboard/machine/mining_equipment_vendor/golem + +/obj/machinery/mineral/equipment_vendor/golem/Initialize() + . = ..() + desc += "\nIt seems a few selections have been added." + prize_list += list( + new /datum/data/mining_equipment("Extra Id", /obj/item/card/id/mining, 250), + new /datum/data/mining_equipment("Science Goggles", /obj/item/clothing/glasses/science, 250), + new /datum/data/mining_equipment("Monkey Cube", /obj/item/reagent_containers/food/snacks/monkeycube, 300), + new /datum/data/mining_equipment("Toolbelt", /obj/item/storage/belt/utility, 350), + new /datum/data/mining_equipment("Royal Cape of the Liberator", /obj/item/bedsheet/rd/royal_cape, 500), + new /datum/data/mining_equipment("Grey Slime Extract", /obj/item/slime_extract/grey, 1000), + new /datum/data/mining_equipment("KA Trigger Modification Kit", /obj/item/borg/upgrade/modkit/trigger_guard, 1700), + new /datum/data/mining_equipment("The Liberator's Legacy", /obj/item/storage/box/rndboards, 2000) + ) /datum/data/mining_equipment/ var/equipment_name = "generic" diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm index 2d4b555448b..cadff45a439 100644 --- a/code/modules/mob/language.dm +++ b/code/modules/mob/language.dm @@ -529,6 +529,13 @@ return TRUE return FALSE +/datum/language/abductor/golem + name = "Golem Mindlink" + desc = "Communicate with other alien alloy golems through a psychic link." + +/datum/language/abductor/golem/check_special_condition(mob/living/carbon/human/other, mob/living/carbon/human/speaker) + return TRUE + /datum/language/corticalborer name = "Cortical Link" desc = "Cortical borers possess a strange link between their tiny minds." diff --git a/code/modules/mob/living/carbon/human/species/golem.dm b/code/modules/mob/living/carbon/human/species/golem.dm index c3fa38611b5..28d8ff7d477 100644 --- a/code/modules/mob/living/carbon/human/species/golem.dm +++ b/code/modules/mob/living/carbon/human/species/golem.dm @@ -2,11 +2,14 @@ name = "Golem" name_plural = "Golems" - icobase = 'icons/mob/human_races/r_golem.dmi' - deform = 'icons/mob/human_races/r_golem.dmi' + icobase = 'icons/mob/human_races/golems/golem.dmi' + deform = 'icons/mob/human_races/golems/golem.dmi' species_traits = list(NO_BREATHE, NO_BLOOD, RADIMMUNE, VIRUSIMMUNE, NOGUNS) - + bodyflags = HAS_SKIN_COLOR + brute_mod = 0.45 //55% damage reduction + burn_mod = 0.45 + tox_mod = 0.45 oxy_mod = 0 dietflags = DIET_OMNI //golems can eat anything because they are magic or something @@ -34,6 +37,9 @@ slowdown = 3 siemens_coeff = 0 + blacklisted = TRUE // To prevent golem subtypes from overwhelming the odds when random species changes, only the Random Golem type can be chosen + dangerous_existence = TRUE + has_organ = list( "brain" = /obj/item/organ/internal/brain/golem ) //Has standard darksight of 2. @@ -42,12 +48,35 @@ "is crumbling into dust!", "is smashing their body apart!") + var/golem_color = "#434B4D" + var/info_text = "As an Iron Golem, you don't have any special traits." + var/random_eligible = TRUE //If false, the golem subtype can't be made through golem mutation toxin + var/prefix = "Iron" + var/list/special_names = list("Tarkus") + var/human_surname_chance = 3 + var/special_name_chance = 5 + var/owner //dobby is a free golem + +/datum/species/golem/random_name() + var/golem_surname = pick(GLOB.golem_names) + // 3% chance that our golem has a human surname, because cultural contamination + if(prob(human_surname_chance)) + golem_surname = pick(GLOB.last_names) + else if(special_names && special_names.len && prob(special_name_chance)) + golem_surname = pick(special_names) + + var/golem_name = "[prefix] [golem_surname]" + return golem_name + /datum/species/golem/on_species_gain(mob/living/carbon/human/H) ..() if(H.mind) H.mind.assigned_role = "Golem" - H.mind.special_role = SPECIAL_ROLE_GOLEM - H.real_name = "adamantine golem ([rand(1, 1000)])" + if(owner) + H.mind.special_role = SPECIAL_ROLE_GOLEM + else + H.mind.special_role = SPECIAL_ROLE_FREE_GOLEM + H.real_name = "[prefix] golem ([rand(1, 1000)])" H.name = H.real_name H.equip_to_slot_or_del(new /obj/item/clothing/under/golem(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/suit/golem(H), slot_wear_suit) @@ -56,10 +85,948 @@ H.equip_to_slot_or_del(new /obj/item/clothing/gloves/golem(H), slot_gloves) -////////Adamantine Golem stuff I dunno where else to put it +//Random Golem + +/datum/species/golem/random + name = "Random Golem" + blacklisted = FALSE + dangerous_existence = FALSE + var/static/list/random_golem_types + +/datum/species/golem/random/on_species_gain(mob/living/carbon/C, datum/species/old_species) + ..() + if(!random_golem_types) + random_golem_types = subtypesof(/datum/species/golem) - type + for(var/V in random_golem_types) + var/datum/species/golem/G = V + if(!initial(G.random_eligible)) + random_golem_types -= G + var/datum/species/golem/golem_type = pick(random_golem_types) + var/mob/living/carbon/human/H = C + H.set_species(golem_type) + to_chat(H, "[initial(golem_type.info_text)]") + + +//Golem subtypes + +//The suicide bombers of golemkind +/datum/species/golem/plasma + name = "Plasma Golem" + skinned_type = /obj/item/stack/ore/plasma + //Can burn and takes damage from heat + heat_level_1 = 360 + heat_level_2 = 400 + heat_level_3 = 460 + info_text = "As a Plasma Golem, you burn easily. Be careful, if you get hot enough while burning, you'll blow up!" + heatmod = 0 //fine until they blow up + prefix = "Plasma" + special_names = list("Flood","Fire","Bar","Man") + var/boom_warning = FALSE + var/datum/action/innate/ignite/ignite + +/datum/species/golem/plasma/handle_life(mob/living/carbon/human/H) + if(H.bodytemperature > 750) + if(!boom_warning && H.on_fire) + to_chat(H, "You feel like you could blow up at any moment!") + boom_warning = TRUE + else + if(boom_warning) + to_chat(H, "You feel more stable.") + boom_warning = FALSE + + if(H.bodytemperature > 850 && H.on_fire && prob(25)) + explosion(get_turf(H), 1, 2, 4, flame_range = 5) + if(H) + H.gib() + if(H.fire_stacks < 2) //flammable + H.adjust_fire_stacks(1) + ..() + +/datum/species/golem/plasma/on_species_gain(mob/living/carbon/C, datum/species/old_species) + ..() + if(ishuman(C)) + ignite = new + ignite.Grant(C) + +/datum/species/golem/plasma/on_species_loss(mob/living/carbon/C) + if(ignite) + ignite.Remove(C) + ..() + +/datum/action/innate/ignite + name = "Ignite" + desc = "Set yourself aflame, bringing yourself closer to exploding!" + check_flags = AB_CHECK_CONSCIOUS + button_icon_state = "sacredflame" + +/datum/action/innate/ignite/Activate() + if(ishuman(owner)) + var/mob/living/carbon/human/H = owner + if(H.fire_stacks) + to_chat(owner, "You ignite yourself!") + else + to_chat(owner, "You try to ignite yourself, but fail!") + H.IgniteMob() //firestacks are already there passively + +//Harder to hurt +/datum/species/golem/diamond + name = "Diamond Golem" + brute_mod = 0.3 //70% damage reduction up from 55% + burn_mod = 0.3 + tox_mod = 0.3 + skinned_type = /obj/item/stack/ore/diamond + info_text = "As a Diamond Golem, you are more resistant than the average golem." + prefix = "Diamond" + special_names = list("Back") + +//Faster but softer and less armoured +/datum/species/golem/gold + name = "Gold Golem" + slowdown = 2 + brute_mod = 0.75 //25% damage reduction down from 55% + burn_mod = 0.75 + tox_mod = 0.75 + skinned_type = /obj/item/stack/ore/gold + info_text = "As a Gold Golem, you are faster but less resistant than the average golem." + prefix = "Golden" + special_names = list("Boy") + +//Heavier, thus higher chance of stunning when punching +/datum/species/golem/silver + name = "Silver Golem" + punchstunthreshold = 9 //60% chance, from 40% + skinned_type = /obj/item/stack/ore/silver + info_text = "As a Silver Golem, your attacks have a higher chance of stunning. Being made of silver, your body is immune to most types of magic." + prefix = "Silver" + special_names = list("Surfer", "Chariot", "Lining") + +//Harder to stun, deals more damage, but it's even slower +/datum/species/golem/plasteel + name = "Plasteel Golem" + stunmod = 0.4 + punchdamagelow = 12 + punchdamagehigh = 21 + punchstunthreshold = 18 //still 40% stun chance + slowdown = 5 //pretty fucking slow + skinned_type = /obj/item/stack/ore/iron + info_text = "As a Plasteel Golem, you are slower, but harder to stun, and hit very hard when punching." + attack_verb = "smash" + attack_sound = 'sound/effects/meteorimpact.ogg' //hits pretty hard + prefix = "Plasteel" + special_names = null + +//More resistant to burn damage +//Add ashstorm resistance if we ever port lavaland +/datum/species/golem/titanium + name = "Titanium Golem" + skinned_type = /obj/item/stack/ore/titanium + info_text = "As a Titanium Golem, you are resistant to burn damage." + burnmod = 0.3 + prefix = "Titanium" + special_names = list("Dioxide") + +//Even more resistant to burn damage +//Add ashstorm and lava resistance if we ever port lavaland +/datum/species/golem/plastitanium + name = "Plastitanium Golem" + skinned_type = /obj/item/stack/ore/titanium + info_text = "As a Plastitanium Golem, you are very resistant to burn damage." + burnmod = 0.15 + prefix = "Plastitanium" + special_names = null + +//Fast and regenerates... but can only speak like an abductor +/datum/species/golem/alloy + name = "Alien Alloy Golem" + skinned_type = /obj/item/stack/sheet/mineral/abductor + language = "Golem Mindlink" + default_language = "Golem Mindlink" + slowdown = 2 //faster + info_text = "As an Alloy Golem, you are made of advanced alien materials: you are faster and regenerate over time. You are, however, only able to speak telepathically to other alloy golems." + prefix = "Alien" + special_names = list("Outsider", "Technology", "Watcher", "Stranger") //ominous and unknown + +//Regenerates because self-repairing super-advanced alien tech +/datum/species/golem/alloy/handle_life(mob/living/carbon/human/H) + if(H.stat == DEAD) + return + H.heal_overall_damage(2, 2, 0, BODYPART_ORGANIC) + H.adjustToxLoss(-2) + H.adjustOxyLoss(-2) + +/datum/species/golem/alloy/can_understand(mob/other) //Can understand everyone, but they can only speak over their mindlink + return TRUE + +/datum/species/golem/alloy/on_species_gain(mob/living/carbon/human/H) + ..() + H.languages.Cut() + H.add_language("Golem Mindlink") + +//Regenerates like dionas, less resistant +/datum/species/golem/wood + name = "Wood Golem" + skinned_type = /obj/item/stack/sheet/mineral/wood + //Can burn and take damage from heat + brute_mod = 0.7 //30% damage reduction down from 55% + burn_mod = 1 + heatmod = 1.5 + + heat_level_1 = 300 + heat_level_2 = 340 + heat_level_3 = 400 + + dietflags = 0 //Regenerate nutrition in light, no diet necessary + taste_sensitivity = TASTE_SENSITIVITY_NO_TASTE + + info_text = "As a Wooden Golem, you have plant-like traits: you take damage from extreme temperatures, can be set on fire, and have lower armor than a normal golem. You regenerate when in the light and wither in the darkness." + prefix = "Wooden" + special_names = list("Bark", "Willow", "Catalpa", "Woody", "Oak", "Sap", "Twig", "Branch", "Maple", "Birch", "Elm", "Basswood", "Cottonwood", "Larch", "Aspen", "Ash", "Beech", "Buckeye", "Cedar", "Chestnut", "Cypress", "Fir", "Hawthorn", "Hazel", "Hickory", "Ironwood", "Juniper", "Leaf", "Mangrove", "Palm", "Pawpaw", "Pine", "Poplar", "Redwood", "Redbud", "Sassafras", "Spruce", "Sumac", "Trunk", "Walnut", "Yew") + human_surname_chance = 0 + special_name_chance = 100 + +/datum/species/golem/wood/handle_life(mob/living/carbon/human/H) + var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing + if(isturf(H.loc)) //else, there's considered to be no light + var/turf/T = H.loc + light_amount = min(T.get_lumcount() * 10, 5) //hardcapped so it's not abused by having a ton of flashlights + H.nutrition = min(H.nutrition+light_amount, NUTRITION_LEVEL_WELL_FED+10) + + if(light_amount > 0) + H.clear_alert("nolight") + else + H.throw_alert("nolight", /obj/screen/alert/nolight) + + if((light_amount >= 5) && !H.suiciding) //if there's enough light, heal + + H.adjustBruteLoss(-(light_amount/2)) + H.adjustFireLoss(-(light_amount/4)) + if(H.nutrition < NUTRITION_LEVEL_STARVING+50) + H.take_overall_damage(10,0) + ..() + +//Radioactive +/datum/species/golem/uranium + name = "Uranium Golem" + skinned_type = /obj/item/stack/ore/uranium + info_text = "As an Uranium Golem, you emit radiation pulses every once in a while. It won't harm fellow golems, but organic lifeforms will be affected." + + var/last_event = 0 + var/active = null + prefix = "Uranium" + special_names = list("Oxide", "Rod", "Meltdown") + +/datum/species/golem/uranium/handle_life(mob/living/carbon/human/H) + if(!active) + if(world.time > last_event+30) + active = 1 + radiation_pulse(H, 50) + last_event = world.time + active = null + ..() + +//Immune to physical bullets and resistant to brute, but very vulnerable to burn damage. Dusts on death. +/datum/species/golem/sand + name = "Sand Golem" + skinned_type = /obj/item/stack/ore/glass //this is sand + brute_mod = 0.25 + burn_mod = 3 + info_text = "As a Sand Golem, you are immune to physical bullets and take very little brute damage, but are extremely vulnerable to burn damage and energy weapons. You will also turn to sand when dying, preventing any form of recovery." + attack_sound = 'sound/effects/shovel_dig.ogg' + prefix = "Sand" + special_names = list("Castle", "Bag", "Dune", "Worm", "Storm") + +/datum/species/golem/sand/handle_death(gibbed, mob/living/carbon/human/H) + H.visible_message("[H] turns into a pile of sand!") + for(var/obj/item/W in H) + H.dropItemToGround(W) + for(var/i=1, i <= rand(3, 5), i++) + new /obj/item/stack/ore/glass(get_turf(H)) + qdel(H) + +/datum/species/golem/sand/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H) + if(!(P.original == H && P.firer == H)) + if(P.flag == "bullet" || P.flag == "bomb") + playsound(H, 'sound/effects/shovel_dig.ogg', 70, 1) + H.visible_message("The [P.name] sinks harmlessly in [H]'s sandy body!", \ + "The [P.name] sinks harmlessly in [H]'s sandy body!") + return BULLET_ACT_BLOCK + return BULLET_ACT_HIT + +//Reflects lasers and resistant to burn damage, but very vulnerable to brute damage. Shatters on death. +/datum/species/golem/glass + name = "Glass Golem" + skinned_type = /obj/item/shard + brutemod = 3 //very fragile + burnmod = 0.25 + info_text = "As a Glass Golem, you reflect lasers and energy weapons, and are very resistant to burn damage. However, you are extremely vulnerable to brute damage. On death, you'll shatter beyond any hope of recovery." + attack_sound = 'sound/effects/glassbr2.ogg' + prefix = "Glass" + special_names = list("Lens", "Prism", "Fiber", "Bead") + +/datum/species/golem/glass/spec_death(gibbed, mob/living/carbon/human/H) + playsound(H, "shatter", 70, 1) + H.visible_message("[H] shatters!") + for(var/obj/item/W in H) + H.dropItemToGround(W) + for(var/i=1, i <= rand(3, 5), i++) + new /obj/item/shard(get_turf(H)) + qdel(H) + +/datum/species/golem/glass/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H) + if(!(P.original == H && P.firer == H)) //self-shots don't reflect + if(P.flag == "laser" || P.flag == "energy") + H.visible_message("The [P.name] gets reflected by [H]'s glass skin!", \ + "The [P.name] gets reflected by [H]'s glass skin!") + if(P.starting) + var/new_x = P.starting.x + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) + var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) + var/turf/target = get_turf(P.starting) + // redirect the projectile + P.preparePixelProjectile(locate(CLAMP(target.x + new_x, 1, world.maxx), CLAMP(target.y + new_y, 1, world.maxy), H.z), H) + return BULLET_ACT_FORCE_PIERCE + return BULLET_ACT_HIT + +//Teleports when hit or when it wants to +/datum/species/golem/bluespace + name = "Bluespace Golem" + skinned_type = /obj/item/stack/ore/bluespace_crystal + info_text = "As a Bluespace Golem, you are spatially unstable: You will teleport when hit, and you can teleport manually at a long distance." + attack_verb = "bluespace punch" + attack_sound = 'sound/effects/phasein.ogg' + prefix = "Bluespace" + special_names = list("Crystal", "Polycrystal") + + var/datum/action/innate/unstable_teleport/unstable_teleport + var/teleport_cooldown = 100 + var/last_teleport = 0 + var/tele_range = 6 + +/datum/species/golem/bluespace/proc/reactive_teleport(mob/living/carbon/human/H) + H.visible_message("[H] teleports!", "You destabilize and teleport!") + var/list/turfs = new/list() + for(var/turf/T in orange(tele_range, H)) + if(istype(T, /turf/space)) + continue + if(T.density) + continue + if(T.x>world.maxx-tele_range || T.xworld.maxy-tele_range || T.y last_teleport + teleport_cooldown && M != H && M.a_intent != INTENT_HELP) + reactive_teleport(H) + +/datum/species/golem/bluespace/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H) + ..() + if(world.time > last_teleport + teleport_cooldown && user != H) + reactive_teleport(H) + +/datum/species/golem/bluespace/on_hit(obj/item/projectile/P, mob/living/carbon/human/H) + ..() + if(world.time > last_teleport + teleport_cooldown) + reactive_teleport(H) + +/datum/species/golem/bluespace/on_species_gain(mob/living/carbon/C, datum/species/old_species) + ..() + if(ishuman(C)) + unstable_teleport = new + unstable_teleport.Grant(C) + last_teleport = world.time + +/datum/species/golem/bluespace/on_species_loss(mob/living/carbon/C) + if(unstable_teleport) + unstable_teleport.Remove(C) + ..() + +/datum/action/innate/unstable_teleport + name = "Unstable Teleport" + check_flags = AB_CHECK_CONSCIOUS + button_icon_state = "jaunt" + icon_icon = 'icons/mob/actions/actions_spells.dmi' + var/cooldown = 150 + var/last_teleport = 0 + var/tele_range = 6 + +/datum/action/innate/unstable_teleport/IsAvailable() + if(..()) + if(world.time > last_teleport + cooldown) + return 1 + return 0 + +/datum/action/innate/unstable_teleport/Activate() + var/mob/living/carbon/human/H = owner + H.visible_message("[H] starts vibrating!", "You start charging your bluespace core...") + playsound(get_turf(H), 'sound/weapons/flash.ogg', 25, 1) + addtimer(CALLBACK(src, .proc/teleport, H), 15) + +/datum/action/innate/unstable_teleport/proc/teleport(mob/living/carbon/human/H) + H.visible_message("[H] teleports!", "You teleport!") + var/list/turfs = new/list() + for(var/turf/T in orange(tele_range, H)) + if(istype(T, /turf/space)) + continue + if(T.density) + continue + if(T.x>world.maxx-tele_range || T.xworld.maxy-tele_range || T.y last_banana + banana_cooldown && M != H && M.a_intent != INTENT_HELP) + new/obj/item/grown/bananapeel/specialpeel(get_turf(H)) + last_banana = world.time + +/datum/species/golem/bananium/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H) + ..() + if(world.time > last_banana + banana_cooldown && user != H) + new/obj/item/grown/bananapeel/specialpeel(get_turf(H)) + last_banana = world.time + +/datum/species/golem/bananium/on_hit(obj/item/projectile/P, mob/living/carbon/human/H) + ..() + if(world.time > last_banana + banana_cooldown) + new/obj/item/grown/bananapeel/specialpeel(get_turf(H)) + last_banana = world.time + +/datum/species/golem/bananium/spec_hitby(atom/movable/AM, mob/living/carbon/human/H) + ..() + var/obj/item/I + if(istype(AM, /obj/item)) + I = AM + if(I.thrownby == H) //No throwing stuff at yourself to make bananas + return 0 + else + new/obj/item/grown/bananapeel/specialpeel(get_turf(H)) + last_banana = world.time + +/datum/species/golem/bananium/handle_life(mob/living/carbon/human/H) + if(!active) + if(world.time > last_honk + honkooldown) + active = 1 + playsound(get_turf(H), 'sound/items/bikehorn.ogg', 50, 1) + last_honk = world.time + honkooldown = rand(20, 80) + active = null + ..() + +/datum/species/golem/bananium/spec_death(gibbed, mob/living/carbon/human/H) + playsound(get_turf(H), 'sound/misc/sadtrombone.ogg', 70, 0) + +/datum/species/golem/bananium/get_spans() + return list(SPAN_CLOWN) + + +/datum/species/golem/runic + name = "Runic Golem" + id = "runic golem" + limbs_id = "cultgolem" + sexes = FALSE + info_text = "As a Runic Golem, you possess eldritch powers granted by the Elder Goddess Nar'Sie." + species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYES) //no mutcolors + prefix = "Runic" + special_names = null + + var/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/golem/phase_shift + var/obj/effect/proc_holder/spell/targeted/abyssal_gaze/abyssal_gaze + var/obj/effect/proc_holder/spell/targeted/dominate/dominate + +/datum/species/golem/runic/random_name(gender,unique,lastname) + var/edgy_first_name = pick("Razor","Blood","Dark","Evil","Cold","Pale","Black","Silent","Chaos","Deadly","Coldsteel") + var/edgy_last_name = pick("Edge","Night","Death","Razor","Blade","Steel","Calamity","Twilight","Shadow","Nightmare") //dammit Razor Razor + var/golem_name = "[edgy_first_name] [edgy_last_name]" + return golem_name + +/datum/species/golem/runic/on_species_gain(mob/living/carbon/C, datum/species/old_species) + . = ..() + C.faction |= "cult" + phase_shift = new + phase_shift.charge_counter = 0 + C.AddSpell(phase_shift) + abyssal_gaze = new + abyssal_gaze.charge_counter = 0 + C.AddSpell(abyssal_gaze) + dominate = new + dominate.charge_counter = 0 + C.AddSpell(dominate) + +/datum/species/golem/runic/on_species_loss(mob/living/carbon/C) + . = ..() + C.faction -= "cult" + if(phase_shift) + C.RemoveSpell(phase_shift) + if(abyssal_gaze) + C.RemoveSpell(abyssal_gaze) + if(dominate) + C.RemoveSpell(dominate) + +/datum/species/golem/runic/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) + if(chem.id == "holywater") + H.adjustFireLoss(4) + H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM) + + if(chem.id == "unholywater") + H.adjustBruteLoss(-4) + H.adjustFireLoss(-4) + H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM) + + +/datum/species/golem/clockwork + name = "Clockwork Golem" + id = "clockwork golem" + say_mod = "clicks" + limbs_id = "clockgolem" + info_text = "As a Clockwork Golem, you are faster than other types of golems. On death, you will break down into scrap." + species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYES) + inherent_biotypes = list(MOB_ROBOTIC, MOB_HUMANOID) + armor = 20 //Reinforced, but much less so to allow for fast movement + attack_verb = "smash" + attack_sound = 'sound/magic/clockwork/anima_fragment_attack.ogg' + sexes = FALSE + speedmod = 0 + damage_overlay_type = "synth" + prefix = "Clockwork" + special_names = list("Remnant", "Relic", "Scrap", "Vestige") //RIP Ratvar + var/has_corpse + +/datum/species/golem/clockwork/on_species_gain(mob/living/carbon/human/H) + . = ..() + H.faction |= "ratvar" + +/datum/species/golem/clockwork/on_species_loss(mob/living/carbon/human/H) + if(!is_servant_of_ratvar(H)) + H.faction -= "ratvar" + . = ..() + +/datum/species/golem/clockwork/get_spans() + return SPAN_ROBOT //beep + +/datum/species/golem/clockwork/spec_death(gibbed, mob/living/carbon/human/H) + gibbed = !has_corpse ? FALSE : gibbed + . = ..() + if(!has_corpse) + var/turf/T = get_turf(H) + H.visible_message("[H]'s exoskeleton shatters, collapsing into a heap of scrap!") + playsound(H, 'sound/magic/clockwork/anima_fragment_death.ogg', 62, TRUE) + for(var/i in 1 to rand(3, 5)) + new/obj/item/clockwork/alloy_shards/small(T) + new/obj/item/clockwork/alloy_shards/clockgolem_remains(T) + qdel(H) + +/datum/species/golem/clockwork/no_scrap //These golems are created through the herald's beacon and leave normal corpses on death. + id = "clockwork golem servant" + armor = 15 //Balance reasons make this armor weak + no_equip = list() + nojumpsuit = FALSE + has_corpse = TRUE + blacklisted = TRUE + dangerous_existence = TRUE + random_eligible = FALSE + info_text = "As a Clockwork Golem Servant, you are faster than other types of golems." //warcult golems leave a corpse + +/datum/species/golem/cloth + name = "Cloth Golem" + id = "cloth golem" + limbs_id = "clothgolem" + sexes = FALSE + info_text = "As a Cloth Golem, you are able to reform yourself after death, provided your remains aren't burned or destroyed. You are, of course, very flammable. \ + Being made of cloth, your body is magic resistant and faster than that of other golems, but weaker and less resilient." + species_traits = list(NOBLOOD,NO_UNDERWEAR) //no mutcolors, and can burn + inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_NOBREATH,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOGUNS) + inherent_biotypes = list(MOB_UNDEAD, MOB_HUMANOID) + armor = 15 //feels no pain, but not too resistant + burnmod = 2 // don't get burned + speedmod = 1 // not as heavy as stone + punchdamagelow = 4 + punchstunthreshold = 7 + punchdamagehigh = 8 // not as heavy as stone + prefix = "Cloth" + special_names = null + +/datum/species/golem/cloth/on_species_gain(mob/living/carbon/C, datum/species/old_species) + ..() + C.add_trait(TRAIT_HOLY, SPECIES_TRAIT) + +/datum/species/golem/cloth/on_species_loss(mob/living/carbon/C) + C.remove_trait(TRAIT_HOLY, SPECIES_TRAIT) + ..() + +/datum/species/golem/cloth/check_roundstart_eligible() + if(SSevents.holidays && SSevents.holidays[HALLOWEEN]) + return TRUE + return ..() + +/datum/species/golem/cloth/random_name(gender,unique,lastname) + var/pharaoh_name = pick("Neferkare", "Hudjefa", "Khufu", "Mentuhotep", "Ahmose", "Amenhotep", "Thutmose", "Hatshepsut", "Tutankhamun", "Ramses", "Seti", \ + "Merenptah", "Djer", "Semerkhet", "Nynetjer", "Khafre", "Pepi", "Intef", "Ay") //yes, Ay was an actual pharaoh + var/golem_name = "[pharaoh_name] \Roman[rand(1,99)]" + return golem_name + +/datum/species/golem/cloth/handle_life(mob/living/carbon/human/H) + if(H.fire_stacks < 1) + H.adjust_fire_stacks(1) //always prone to burning + ..() + +/datum/species/golem/cloth/spec_death(gibbed, mob/living/carbon/human/H) + if(gibbed) + return + if(H.on_fire) + H.visible_message("[H] burns into ash!") + H.dust(just_ash = TRUE) + return + + H.visible_message("[H] falls apart into a pile of bandages!") + new /obj/structure/cloth_pile(get_turf(H), H) + ..() + +/obj/structure/cloth_pile + name = "pile of bandages" + desc = "It emits a strange aura, as if there was still life within it..." + max_integrity = 50 + armor = list("melee" = 90, "bullet" = 90, "laser" = 25, "energy" = 80, "bomb" = 50, "bio" = 100, "fire" = -50, "acid" = -50) + icon = 'icons/obj/items_and_weapons.dmi' + icon_state = "pile_bandages" + resistance_flags = FLAMMABLE + + var/revive_time = 900 + var/mob/living/carbon/human/cloth_golem + +/obj/structure/cloth_pile/Initialize(mapload, mob/living/carbon/human/H) + . = ..() + if(!QDELETED(H) && is_species(H, /datum/species/golem/cloth)) + H.unequip_everything() + H.forceMove(src) + cloth_golem = H + to_chat(cloth_golem, "You start gathering your life energy, preparing to rise again...") + addtimer(CALLBACK(src, .proc/revive), revive_time) + else + return INITIALIZE_HINT_QDEL + +/obj/structure/cloth_pile/Destroy() + if(cloth_golem) + QDEL_NULL(cloth_golem) + return ..() + +/obj/structure/cloth_pile/burn() + visible_message("[src] burns into ash!") + new /obj/effect/decal/cleanable/ash(get_turf(src)) + ..() + +/obj/structure/cloth_pile/proc/revive() + if(QDELETED(src) || QDELETED(cloth_golem)) //QDELETED also checks for null, so if no cloth golem is set this won't runtime + return + if(cloth_golem.suiciding || cloth_golem.hellbound) + QDEL_NULL(cloth_golem) + return + + invisibility = INVISIBILITY_MAXIMUM //disappear before the animation + new /obj/effect/temp_visual/mummy_animation(get_turf(src)) + if(cloth_golem.revive(full_heal = TRUE, admin_revive = TRUE)) + cloth_golem.grab_ghost() //won't pull if it's a suicide + sleep(20) + cloth_golem.forceMove(get_turf(src)) + cloth_golem.visible_message("[src] rises and reforms into [cloth_golem]!","You reform into yourself!") + cloth_golem = null + qdel(src) + +/obj/structure/cloth_pile/attackby(obj/item/P, mob/living/carbon/human/user, params) + . = ..() + + if(resistance_flags & ON_FIRE) + return + + if(P.is_hot()) + visible_message("[src] bursts into flames!") + fire_act() + +/datum/species/golem/plastic + name = "Plastic Golem" + id = "plastic golem" + prefix = "Plastic" + special_names = null + fixed_mut_color = "fff" + info_text = "As a Plastic Golem, you are capable of ventcrawling and passing through plastic flaps as long as you are naked." + +/datum/species/golem/plastic/on_species_gain(mob/living/carbon/C, datum/species/old_species) + . = ..() + C.ventcrawler = VENTCRAWLER_NUDE + +/datum/species/golem/plastic/on_species_loss(mob/living/carbon/C) + . = ..() + C.ventcrawler = initial(C.ventcrawler) + +/datum/species/golem/bronze + name = "Bronze Golem" + id = "bronze golem" + prefix = "Bronze" + special_names = list("Bell") + fixed_mut_color = "cd7f32" + info_text = "As a Bronze Golem, you are very resistant to loud noises, and make loud noises if something hard hits you, however this ability does hurt your hearing." + special_step_sounds = list('sound/machines/clockcult/integration_cog_install.ogg', 'sound/magic/clockwork/fellowship_armory.ogg' ) + mutantears = /obj/item/organ/ears/bronze + var/last_gong_time = 0 + var/gong_cooldown = 150 + +/datum/species/golem/bronze/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H) + if(!(world.time > last_gong_time + gong_cooldown)) + return BULLET_ACT_HIT + if(P.flag == "bullet" || P.flag == "bomb") + gong(H) + return BULLET_ACT_HIT + +/datum/species/golem/bronze/spec_hitby(atom/movable/AM, mob/living/carbon/human/H) + ..() + if(world.time > last_gong_time + gong_cooldown) + gong(H) + +/datum/species/golem/bronze/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style) + ..() + if(world.time > last_gong_time + gong_cooldown && M.a_intent != INTENT_HELP) + gong(H) + +/datum/species/golem/bronze/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H) + ..() + if(world.time > last_gong_time + gong_cooldown) + gong(H) + +/datum/species/golem/bronze/on_hit(obj/item/projectile/P, mob/living/carbon/human/H) + ..() + if(world.time > last_gong_time + gong_cooldown) + gong(H) + +/datum/species/golem/bronze/proc/gong(mob/living/carbon/human/H) + last_gong_time = world.time + for(var/mob/living/M in get_hearers_in_view(7,H)) + if(M.stat == DEAD) //F + return + if(M == H) + H.show_message("You cringe with pain as your body rings around you!", 2) + H.playsound_local(H, 'sound/effects/gong.ogg', 100, TRUE) + H.soundbang_act(2, 0, 100, 1) + H.jitteriness += 7 + var/distance = max(0,get_dist(get_turf(H),get_turf(M))) + switch(distance) + if(0 to 1) + M.show_message("GONG!", 2) + M.playsound_local(H, 'sound/effects/gong.ogg', 100, TRUE) + M.soundbang_act(1, 0, 30, 3) + M.confused += 10 + M.jitteriness += 4 + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "gonged", /datum/mood_event/loud_gong) + if(2 to 3) + M.show_message("GONG!", 2) + M.playsound_local(H, 'sound/effects/gong.ogg', 75, TRUE) + M.soundbang_act(1, 0, 15, 2) + M.jitteriness += 3 + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "gonged", /datum/mood_event/loud_gong) + else + M.show_message("GONG!", 2) + M.playsound_local(H, 'sound/effects/gong.ogg', 50, TRUE) + + +/datum/species/golem/cardboard //Faster but weaker, can also make new shells on its own + name = "Cardboard Golem" + id = "cardboard golem" + prefix = "Cardboard" + special_names = list("Box") + info_text = "As a Cardboard Golem, you aren't very strong, but you are a bit quicker and can easily create more brethren by using cardboard on yourself." + species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYES) + inherent_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOGUNS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER) + limbs_id = "c_golem" //special sprites + attack_verb = "whips" + attack_sound = 'sound/weapons/whip.ogg' + miss_sound = 'sound/weapons/etherealmiss.ogg' + fixed_mut_color = null + armor = 25 + burnmod = 1.25 + heatmod = 2 + speedmod = 1.5 + punchdamagelow = 4 + punchstunthreshold = 7 + punchdamagehigh = 8 + var/last_creation + var/brother_creation_cooldown = 300 + +/datum/species/golem/cardboard/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H) + . = ..() + if(user != H || intent != INTENT_HELP) + return FALSE //forced reproduction is rape. + if(istype(I, /obj/item/stack/sheet/cardboard)) + var/obj/item/stack/sheet/cardboard/C = I + if(last_creation + brother_creation_cooldown < world.time) //no cheesing dork + return + to_chat(H, "You attempt to create a new cardboard brother.") + if(do_after(user, 30, target = user)) + if(last_creation + brother_creation_cooldown < world.time) //no cheesing dork + return + if(!C.use(10)) + to_chat(H, "You do not have enough cardboard!") + return FALSE + to_chat(H, "You create a new cardboard golem shell.") + create_brother(H.loc) + +/datum/species/golem/cardboard/proc/create_brother(var/location) + new /obj/effect/mob_spawn/human/golem/servant(location, /datum/species/golem/cardboard, owner) + last_creation = world.time + +/datum/species/golem/leather + name = "Leather Golem" + id = "leather golem" + special_names = list("Face", "Man") + inherent_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOGUNS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER, TRAIT_STRONG_GRABBER) + prefix = "Leather" + fixed_mut_color = "624a2e" + info_text = "As a Leather Golem, you are flammable, but you can grab things with incredible ease, allowing all your grabs to start at a strong level." + grab_sound = 'sound/weapons/whipgrab.ogg' + attack_sound = 'sound/weapons/whip.ogg' + +/datum/species/golem/durathread + name = "Durathread Golem" + id = "durathread golem" + prefix = "Durathread" + limbs_id = "d_golem" + special_names = list("Boll","Weave") + species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYES) + fixed_mut_color = null + inherent_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOGUNS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER) + info_text = "As a Durathread Golem, your strikes will cause those your targets to start choking, but your woven body won't withstand fire as well." + +/datum/species/golem/durathread/spec_unarmedattacked(mob/living/carbon/human/user, mob/living/carbon/human/target) + . = ..() + target.apply_status_effect(STATUS_EFFECT_CHOKINGSTRAND) + +/datum/species/golem/bone + name = "Bone Golem" + id = "bone golem" + say_mod = "rattles" + prefix = "Bone" + limbs_id = "b_golem" + special_names = list("Head", "Broth", "Fracture") + liked_food = GROSS | MEAT | RAW + toxic_food = null + species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYES) + inherent_biotypes = list(MOB_UNDEAD, MOB_HUMANOID) + mutanttongue = /obj/item/organ/tongue/bone + sexes = FALSE + fixed_mut_color = null + inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_NOGUNS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_FAKEDEATH,TRAIT_CALCIUM_HEALER) + info_text = "As a Bone Golem, You have a powerful spell that lets you chill your enemies with fear, and milk heals you! Just make sure to watch our for bone-hurting juice." + var/datum/action/innate/bonechill/bonechill + +/datum/species/golem/bone/on_species_gain(mob/living/carbon/C, datum/species/old_species) + ..() + if(ishuman(C)) + bonechill = new + bonechill.Grant(C) + +/datum/species/golem/bone/on_species_loss(mob/living/carbon/C) + if(bonechill) + bonechill.Remove(C) + ..() + +/datum/action/innate/bonechill + name = "Bone Chill" + desc = "Rattle your bones and strike fear into your enemies!" + check_flags = AB_CHECK_CONSCIOUS + icon_icon = 'icons/mob/actions/actions_spells.dmi' + button_icon_state = "bonechill" + var/cooldown = 600 + var/last_use + var/snas_chance = 3 + +/datum/action/innate/bonechill/Activate() + if(world.time < last_use + cooldown) + to_chat("You aren't ready yet to rattle your bones again") + owner.visible_message("[owner] rattles [owner.p_their()] bones harrowingly.", "You rattle your bones") + last_use = world.time + if(prob(snas_chance)) + playsound(get_turf(owner),'sound/magic/RATTLEMEBONES2.ogg', 100) + if(ishuman(owner)) + var/mob/living/carbon/human/H = owner + var/mutable_appearance/badtime = mutable_appearance('icons/mob/human_parts.dmi', "b_golem_eyes", -FIRE_LAYER-0.5) + badtime.appearance_flags = RESET_COLOR + H.overlays_standing[FIRE_LAYER+0.5] = badtime + H.apply_overlay(FIRE_LAYER+0.5) + addtimer(CALLBACK(H, /mob/living/carbon/.proc/remove_overlay, FIRE_LAYER+0.5), 25) + else + playsound(get_turf(owner),'sound/magic/RATTLEMEBONES.ogg', 100) + for(var/mob/living/L in orange(7, get_turf(owner))) + if((MOB_UNDEAD in L.mob_biotypes) || isgolem(L)) + return //Do not affect our brothers + to_chat(L, "A spine-chilling sound chills you to the bone!") + L.apply_status_effect(/datum/status_effect/bonechill) + SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "spooked", /datum/mood_event/spooked) + +//Golem abstract items /obj/item/clothing/under/golem - name = "adamantine skin" + name = "golem skin" desc = "a golem's skin" icon_state = "golem" item_state = "golem" @@ -69,7 +1036,7 @@ armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) /obj/item/clothing/suit/golem - name = "adamantine shell" + name = "golem shell" desc = "a golem's thick outter shell" icon_state = "golem" item_state = "golem" @@ -77,26 +1044,27 @@ flags_inv = HIDEGLOVES|HIDESHOES flags = ABSTRACT | NODROP | THICKMATERIAL flags_size = ONESIZEFITSALL - armor = list(melee = 55, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) /obj/item/clothing/shoes/golem name = "golem's feet" - desc = "sturdy adamantine feet" + desc = "sturdy golem feet" icon_state = "golem" item_state = "golem" flags = ABSTRACT | NODROP /obj/item/clothing/mask/gas/golem name = "golem's face" - desc = "the imposing face of an adamantine golem" + desc = "the imposing face of a golem" icon_state = "golem" item_state = "golem" unacidable = 1 flags = ABSTRACT | NODROP + flags_inv = HIDEEARS | HIDEEYES /obj/item/clothing/gloves/golem name = "golem's hands" - desc = "strong adamantine hands" + desc = "strong golem hands" icon_state = "golem" item_state = null flags = ABSTRACT | NODROP diff --git a/config/names/golem.txt b/config/names/golem.txt new file mode 100644 index 00000000000..7cfcefa899d --- /dev/null +++ b/config/names/golem.txt @@ -0,0 +1,157 @@ +Ablation +Alabaster +Alunite +Andesite +Anyhdrite +Basalt +Basin +Bauxite +Bedrock +Bismuth +Bismuthinite +Bituminous Coal +Borax +Boulder +Brimstone +Brittle +Calcite +Cassiterite +Cenozoic +Chalk +Chasm +Cheridite +Chert +Chromite +Cinnabar +Claystone +Coast +Cobaltite +Column +Conglomerate +Core +Crevasse +Crust +Cryolite +Crystal +Dacite +Diorite +Dolomite +Dolostone +Dragonforce +Earthflow +Epoch +Eutrophication +Fault +Flint +Foliation +Foreshock +Fossil +Gabbro +Galena +Garnierite +Geode +Geoge +Gneiss +Granite +Graphite +Gravel +Groove +Grotto +Gypsum +Hematite +Hornblende +Humus +Igneous +Ilmenite +Iron +Island +Jasper +Jet +Kaolinite +Kettle +Kimberlite +Komatiite +Landslide +Levee +Lignite +Limestone +Limonite +Luster +Madidite +Magnetite +Magnitude +Malachite +Mantle +Marble +Marcasite +Melange +Meme +Mica +Microcline +Migmatite +Mineral +Mountain +Mudstone +Obsidian +Olivine +Ore +Orpiment +Orthoclase +Outwash +Oxbow Lake +Oynx +Pahoehoe +Pebble +Pegmatite +Periclase +Petrified Wood +Phyllite +Pitchblende +Plate +Pothole +Puddingstone +Pyrite +Pyrolusite +Quake +Quarry +Quartz +Quartzite +Realgar +Reservoir +Rhyolite +Rock +Rock Salt +Rockfall +Rutile +Saltpeter +Sand +Sandstone +Satinspar +Schist +Sediment +Seismic +Selenite +Serpentine +Shale +Shore +Siltstone +Slag +Slate +Sphalerite +Stack +Stalactite +Stalagmite +Stibnite +Stone +Stress +Subduction +Sylvite +Talc +Tetrahedrite +Tidal +Trench +Valley +Volcano +Xenolith +Yardang +Zone diff --git a/icons/mob/human_races/r_golem.dmi b/icons/mob/human_races/golems/oldgolem.dmi similarity index 100% rename from icons/mob/human_races/r_golem.dmi rename to icons/mob/human_races/golems/oldgolem.dmi diff --git a/icons/mob/human_races/golems/r_golem.dmi b/icons/mob/human_races/golems/r_golem.dmi new file mode 100644 index 0000000000000000000000000000000000000000..4ff5ed710008aa61ab66428fc28274c0518c94de GIT binary patch literal 6410 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 Date: Sun, 3 Feb 2019 06:40:50 +0000 Subject: [PATCH 004/103] compilin and mostly workin has runtimes due to body color need to wrap up commented procs --- .../RandomRuins/SpaceRuins/freegolems.dmm | 55 -- _maps/map_files/cyberiad/z2.dmm | 55 +- _maps/map_files/cyberiad/z3.dmm | 104 ++- _maps/map_files/cyberiad/z6.dmm | 3 +- _maps/map_files/generic/z5.dmm | 3 +- code/__DEFINES/gamemode.dm | 1 + code/controllers/configuration.dm | 13 +- code/game/area/Space Station 13 areas.dm | 5 +- .../game/machinery/computer/buildandrepair.dm | 3 + code/game/objects/items/blueprints.dm | 17 + .../objects/items/stacks/sheets/mineral.dm | 19 + code/game/objects/items/weapons/cards_ids.dm | 6 + .../objects/items/weapons/storage/boxes.dm | 12 + code/game/objects/structures/bedsheet_bin.dm | 5 + .../structures/crates_lockers/crates.dm | 13 + .../objects/structures/ghost_role_spawners.dm | 251 ------- .../ghost_role_spawners/golems.dm | 139 ++++ .../ghost_role_spawners/oldstation.dm | 110 +++ .../mission_code/ruins/freegolems.dm | 66 -- code/modules/mining/equipment_locker.dm | 2 +- code/modules/mining/mine_areas.dm | 3 + code/modules/mob/living/carbon/carbon.dm | 2 + .../mob/living/carbon/human/species/golem.dm | 644 ++++-------------- .../chemistry/recipes/slime_extracts.dm | 5 +- .../research/designs/autolathe_designs.dm | 10 + code/modules/research/research.dm | 10 + .../research/xenobiology/xenobiology.dm | 7 +- code/modules/shuttle/shuttle.dm | 8 +- code/modules/surgery/organs/vocal_cords.dm | 29 + config/example/config.txt | 6 + goon/browserassets/css/browserOutput-dark.css | 1 + goon/browserassets/css/browserOutput.css | 1 + icons/obj/items.dmi | Bin 144391 -> 144569 bytes icons/obj/surgery.dmi | Bin 37002 -> 37582 bytes paradise.dme | 4 +- 35 files changed, 675 insertions(+), 937 deletions(-) delete mode 100644 _maps/map_files/RandomRuins/SpaceRuins/freegolems.dmm delete mode 100644 code/game/objects/structures/ghost_role_spawners.dm create mode 100644 code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm create mode 100644 code/modules/awaymissions/mission_code/ghost_role_spawners/oldstation.dm delete mode 100644 code/modules/awaymissions/mission_code/ruins/freegolems.dm diff --git a/_maps/map_files/RandomRuins/SpaceRuins/freegolems.dmm b/_maps/map_files/RandomRuins/SpaceRuins/freegolems.dmm deleted file mode 100644 index e40a050fdca..00000000000 --- a/_maps/map_files/RandomRuins/SpaceRuins/freegolems.dmm +++ /dev/null @@ -1,55 +0,0 @@ -"a" = (/turf/template_noop,/area/template_noop) -"b" = (/turf/simulated/shuttle/wall,/area/shuttle/freegolem) -"c" = (/turf/simulated/shuttle/plating,/area/shuttle/freegolem) -"d" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/shuttle/freegolem) -"e" = (/obj/structure/shuttle/engine/propulsion{dir = 8; icon_state = "burst_l"},/turf/space,/area/shuttle/freegolem) -"f" = (/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) -"g" = (/obj/machinery/door/airlock/shuttle,/obj/structure/fans/tiny,/turf/simulated/shuttle/plating,/area/shuttle/freegolem) -"h" = (/obj/item/storage/toolbox/mechanical,/turf/simulated/shuttle/plating,/area/shuttle/freegolem) -"i" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/shuttle/plating,/area/shuttle/freegolem) -"j" = (/obj/machinery/light/small,/turf/simulated/shuttle/plating,/area/shuttle/freegolem) -"k" = (/obj/machinery/door/airlock/shuttle,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) -"l" = (/obj/machinery/computer/arcade/battle,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) -"m" = (/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) -"n" = (/obj/machinery/light{dir = 1; on = 1},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) -"o" = (/obj/structure/fans/tiny,/obj/machinery/door/airlock/shuttle,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) -"p" = (/obj/item/resonator,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) -"q" = (/obj/machinery/light{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) -"r" = (/obj/machinery/mineral/ore_redemption,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) -"s" = (/obj/structure/statue/gold/rd{name = "statue of the Liberator"},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) -"t" = (/obj/structure/computerframe,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) -"u" = (/obj/structure/extinguisher_cabinet{pixel_y = 30},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) -"v" = (/obj/machinery/door/airlock/shuttle,/obj/structure/fans/tiny,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) -"w" = (/obj/item/book/manual/research_and_development{name = "Sacred Text of the Liberator"; pixel_x = -4; pixel_y = 3},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/table/wood,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) -"x" = (/obj/machinery/light/small,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) -"y" = (/obj/item/resonator/upgraded,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) -"z" = (/obj/machinery/autolathe,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) -"A" = (/obj/structure/table/wood,/obj/machinery/reagentgrinder,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) -"B" = (/obj/machinery/computer/arcade/orion_trail,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) -"C" = (/obj/structure/extinguisher_cabinet{pixel_y = -30},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) -"D" = (/obj/structure/table/wood,/obj/item/storage/firstaid/brute,/obj/item/storage/firstaid/brute,/obj/item/storage/firstaid/brute,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) -"E" = (/obj/structure/table/wood,/obj/structure/table/wood,/obj/item/storage/firstaid/fire,/obj/item/storage/firstaid/fire,/obj/item/storage/firstaid/fire,/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) -"F" = (/obj/structure/table/wood,/obj/item/storage/firstaid/adv,/obj/item/storage/firstaid/adv,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) -"G" = (/obj/structure/table/wood,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) -"H" = (/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/plating,/area/shuttle/freegolem) -"I" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/shuttle/plating,/area/shuttle/freegolem) -"J" = (/obj/structure/ore_box,/turf/simulated/shuttle/plating,/area/shuttle/freegolem) - -(1,1,1) = {" -aaaaabbbbbbbbbbggbbb -aaaaabcccccccchccide -aaaaabccjccjcccjcide -aabbbbkkbbbbkkbbbbbb -aablfmffmfbffffnffde -aaofffffppkfffffffde -bbbkkbbbbbbqffffrbbb -bstffffmffkffffffkuv -bwfffxffffkffffffkxv -bbbkkbbbbbbqfffyzbbb -aaofffffppkffffffAde -aabBfxffxfbCffDEFGde -aabbbbkkbbbbkkbbbbbb -aaaaabccHccHcccHcIde -aaaaabJJJJJJJJhccIde -aaaaabbbbbbbbbbggbbb -"} diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm index 6e739834ab5..ce80bb9d1eb 100644 --- a/_maps/map_files/cyberiad/z2.dmm +++ b/_maps/map_files/cyberiad/z2.dmm @@ -329,6 +329,7 @@ "gq" = (/obj/item/trash/raisins,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) "gr" = (/obj/item/beach_ball,/turf/simulated/floor/beach/sand,/area/holodeck/source_beach) "gs" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows (NORTHEAST)"; icon_state = "fakewindows"; dir = 5},/area/wizard_station) +"gt" = (/obj/docking_port/stationary/transit{dir = 8; dwidth = 8; height = 20; id = "freegolem_transit"; name = "free golem in transit"; width = 16},/turf/space/transit/horizontal{dir = 4},/area/space) "gu" = (/turf/unsimulated/wall/fakeglass{dir = 8; icon_state = "fakewindows3"; tag = "icon-fakewindows (WEST)"},/area/wizard_station) "gv" = (/obj/structure/table/reinforced,/obj/structure/kitchenspike,/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/wizard_station) "gw" = (/obj/structure/showcase,/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/wizard_station) @@ -1743,33 +1744,33 @@ aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbW aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatatatatatxRxSxSxSxSxSxSxSxTatataIatataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuruExMxVxUxXxWyaxYybxNuExMuTuTuTuTuTuTxNuAuAuAuAuAxMuTxNuAuAycuAxIxJxJxJydxJxJxJxKuEaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataJaJaJaKauauauauauauauauaKaKaKauaJataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuSyjyiuTuTykuTuTuTuTuTyluTuTymymymymuTuTuTuTuTuTuTuTuTuTynxJxJxJxJxJxJypyoysxJxJxJyuaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataKauauauauauauauKqauauauauauauauaJataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuXuTyzuTuTuTuTuTuTuTuTyluTuTymymymymuTuTuTuTuTuTuTuTuTuTynxJxJxJxJxJyAyBypypyAxJxJyCaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmrmrmrmrmrmrmrmrmrmrmrmrmraNaNatbhauauauauauaubibibiauauauauauauaJataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNvqyJuTuTuTyKuTuTuTuTuTyluTuTymymymymuTuTuTuTuTuTuTuTuTwUuAuAycuAyLxJxJyAyAyAxJxJyNuEaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmraNaNatbhauauauauauKvbibibiKvauauauauauaKataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquEwmyRyPyUySzayVzbwUuEwmuTuTuTuTuTuTwUuAuAwmuTwUuAuAuAuEvPaNwquAyLxJxJxJxJxJyNuEvPaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmrxQxPatbhauauauauauauKvKvKvauauauauauauauataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquAuAuAuAuAuAuAuAuAuAuAuAwmuTuTwUuAuAuAuAuAzduAuAuAuEuEaNaNaNwquAyLxJxJxJyNuAvPaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmryhyeatauauauauauauauauauauauauauauauauauataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDvuEzezeuEaNuExhzfxhxhxhzfxhuEuEaNaNaNaNwquAxvxuxwuAvPaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmryxywatauauaKaJaJaKauauauauauauauauauauauataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuruAuAuAuAxMuTuTuEaNuEzlxhxhGPxhxhzmuEuEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmraNaNaNaNaNaNaNaNaNaNfwyDyIyFatatbkatatatatatatatatatatatatatbkatataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuSuTuTuTuTuTuTuTuEaNuEzvGPxhxhxhGPzwuEuEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmryOyFatblblataNaNaNaNaNaNaNaNaNaNaNatblblataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNvquTuTuTuTuTuTuTuEaNuEzzxhxhGPxhxhzAuEuEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmryFyFatblblataNaNaNaNaNaNaNaNaNaNaNatblblataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuruAuAusaNwquuuBuBuCwmuTuTuEaNuEzDxhxhxhxhxhzEuEvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjQjPjSjRjTaNaNaNjQjPjSjRjTaNaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmryFmratblblatatatatatatatatatatatatatblblatataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuraNaNuruEzJzIzKusaNaNaNaNaNuSuTuTuEaNwquAnZHbzMHboauAvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjUjWjVjYjXkajZaNjUjWktkvkukajZaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmryFmraNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNzTaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuruAuAuAuAuEzYzUuEuAuAuAuAusaNvquTuTuEaNaNwquAHgHhHiuAvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkwkykxkxkxkAkzaNkwkDkxkxkxkAkzaNaNaNmrmrmrmrmrmrmrmrmrmrmrmrmryFmraNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuruEAcAeAduEAfxhxhAguEAiAhAjAguAxMuTuTuEaNaNaNAkHuHvHwAkaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkEkGkFkIkHkNkMaNkEkGkOkIkPkNkMaNaNaNaNaNaNaNznfZfLyFyFyFyFyFyFyFmraNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNArxhxhxhAsxhxhxhxhAtxhxhxhxhAtuTuTuTuEaNaNwquAuAAuuAuAvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkQkRkxkxkxkAkSaNkQkRkxkxkxkAkSaNaNaNaNaNaNaNznfZyFyFyFyFyFzjyFyFmraNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquEAyAAAzuEzDxhxhzEuEACABADzEuAwmuTuTuEaNaNaNwqaNaNaNvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkUlikVXLXMlmllaNkUlikVlkXMlmllaNaNaNaNaNaNaNzFgcyFyFyFyFzuztyFyFataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquAuAuAuAzKAFAEuEuAuAuAuAvPaNuSuTuTuEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNlylnlAlzlFaNaNaNlylnlAlzlFaNaNaNaNaNaNaNmrmrmrzPmrzSyFzuzyyFyFataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwqaNaNwquEzJAGuEvPaNaNaNaNaNvquTuTuEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmrzZAbAamryFyFyFzCyFyFataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquAuAvPaNuruuuBuBuCxMuTuTuEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjQjPjSjRjTaNaNaNjQjPjSjRjTaNaNaNaNaNaNaNmrAlAlAmmrAnAoAoAoAoAoataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuSuTuTuTuTuTuTuTuEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjUjWlLlNlMkajZaNjUjWlOlQlPkajZaNaNaNaNaNaNmrAlAvmrmraNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNvquTuTuTuTuTuTwUuEvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkwlRkxkxkxkAkzaNkwlSkxkxkxkAkzaNaNaNaNaNaNmrmrmrmrmraNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquAuAvhAIvhuAuAvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkEkGlTkIlUkNkMaNkEkGlVkIlYkNkMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuEAJuTuTuTAKuEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkQkRkxkxkxkAkSaNkQkRkxkxkxkAkSaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuSuTuTuTuTALuSaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkUlikVXLXMlmllaNkUlikVXLXMlmllaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuXAOuTuTuTAPuXaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNlylnlAlzlFaNaNaNlylnlAlzlFaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNvqAQuTuTuTARvqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquAATASAVAUAWuAvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquAuuuBuCuAvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwqaNaNaNvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmrmrmrmrmrmrmrmrmrmrmrmrmraNaNatbhauauauauauaubibibiauauauauauauaJataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNvqyJuTuTuTyKuTuTuTuTuTyluTuTymymymymuTuTuTuTuTuTuTuTuTwUuAuAycuAyLxJxJyAyAyAxJxJyNuEaNaNaNaNaN +aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmraNaNatbhauauauauauKvbibibiKvauauauauauaKataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquEwmyRyPyUySzayVzbwUuEwmuTuTuTuTuTuTwUuAuAwmuTwUuAuAuAuEvPaNwquAyLxJxJxJxJxJyNuEvPaNaNaNaNaN +aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmrxQxPatbhauauauauauauKvKvKvauauauauauauauataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquAuAuAuAuAuAuAuAuAuAuAuAwmuTuTwUuAuAuAuAuAzduAuAuAuEuEaNaNaNwquAyLxJxJxJyNuAvPaNaNaNaNaNaN +aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmryhyeatauauauauauauauauauauauauauauauauauataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDvuEzezeuEaNuExhzfxhxhxhzfxhuEuEaNaNaNaNwquAxvxuxwuAvPaNaNaNaNaNaNaN +aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmryxywatauauaKaJaJaKauauauauauauauauauauauataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuruAuAuAuAxMuTuTuEaNuEzlxhxhGPxhxhzmuEuEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmraNaNaNaNaNaNaNaNaNaNfwyDyIyFatatbkatatatatatatatatatatatatatbkatataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuSuTuTuTuTuTuTuTuEaNuEzvGPxhxhxhGPzwuEuEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmryOyFatblblataNaNaNaNaNaNaNaNaNaNaNatblblataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNvquTuTuTuTuTuTuTuEaNuEzzxhxhGPxhxhzAuEuEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmryFyFatblblataNaNaNaNaNaNaNaNaNaNaNatblblataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuruAuAusaNwquuuBuBuCwmuTuTuEaNuEzDxhxhxhxhxhzEuEvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjQjPjSjRjTaNaNaNjQjPjSjRjTaNaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmryFmratblblatatatatatatatatatatatatatblblatataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuraNaNuruEzJzIzKusaNaNaNaNaNuSuTuTuEaNwquAnZHbzMHboauAvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjUjWjVjYjXkajZaNjUjWktkvkukajZaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmryFmraNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNzTaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuruAuAuAuAuEzYzUuEuAuAuAuAusaNvquTuTuEaNaNwquAHgHhHiuAvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkwkykxkxkxkAkzaNkwkDkxkxkxkAkzaNaNaNmrmrmrmrmrmrmrmrmrmrmrmrmryFmraNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuruEAcAeAduEAfxhxhAguEAiAhAjAguAxMuTuTuEaNaNaNAkHuHvHwAkaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkEkGkFkIkHkNkMaNkEkGkOkIkPkNkMaNaNaNaNaNaNaNznfZfLyFyFyFyFyFyFyFmraNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNArxhxhxhAsxhxhxhxhAtxhxhxhxhAtuTuTuTuEaNaNwquAuAAuuAuAvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqgtaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkQkRkxkxkxkAkSaNkQkRkxkxkxkAkSaNaNaNaNaNaNaNznfZyFyFyFyFyFzjyFyFmraNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquEAyAAAzuEzDxhxhzEuEACABADzEuAwmuTuTuEaNaNaNwqaNaNaNvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkUlikVXLXMlmllaNkUlikVlkXMlmllaNaNaNaNaNaNaNzFgcyFyFyFyFzuztyFyFataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquAuAuAuAzKAFAEuEuAuAuAuAvPaNuSuTuTuEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNlylnlAlzlFaNaNaNlylnlAlzlFaNaNaNaNaNaNaNmrmrmrzPmrzSyFzuzyyFyFataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwqaNaNwquEzJAGuEvPaNaNaNaNaNvquTuTuEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmrzZAbAamryFyFyFzCyFyFataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquAuAvPaNuruuuBuBuCxMuTuTuEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjQjPjSjRjTaNaNaNjQjPjSjRjTaNaNaNaNaNaNaNmrAlAlAmmrAnAoAoAoAoAoataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuSuTuTuTuTuTuTuTuEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjUjWlLlNlMkajZaNjUjWlOlQlPkajZaNaNaNaNaNaNmrAlAvmrmraNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNvquTuTuTuTuTuTwUuEvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkwlRkxkxkxkAkzaNkwlSkxkxkxkAkzaNaNaNaNaNaNmrmrmrmrmraNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquAuAvhAIvhuAuAvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkEkGlTkIlUkNkMaNkEkGlVkIlYkNkMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuEAJuTuTuTAKuEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkQkRkxkxkxkAkSaNkQkRkxkxkxkAkSaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuSuTuTuTuTALuSaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkUlikVXLXMlmllaNkUlikVXLXMlmllaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuXAOuTuTuTAPuXaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNlylnlAlzlFaNaNaNlylnlAlzlFaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNvqAQuTuTuTARvqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquAATASAVAUAWuAvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquAuuuBuCuAvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwqaNaNaNvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatatatatatatatatatatatatatatatatatatatatataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN diff --git a/_maps/map_files/cyberiad/z3.dmm b/_maps/map_files/cyberiad/z3.dmm index eeb59d4ea5d..a25deea1832 100644 --- a/_maps/map_files/cyberiad/z3.dmm +++ b/_maps/map_files/cyberiad/z3.dmm @@ -32,22 +32,72 @@ "aF" = (/obj/effect/decal/warning_stripes/south,/turf/simulated/floor/plasteel,/area/tcommsat/entrance) "aG" = (/obj/machinery/light{dir = 4},/obj/structure/closet/emcloset,/obj/effect/decal/warning_stripes/southeast,/turf/simulated/floor/plasteel,/area/tcommsat/entrance) "aH" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/camera{c_tag = "Telecomms Power Control"; dir = 2; network = list("Telecomms")},/turf/simulated/floor/plating,/area/tcommsat/powercontrol) +"aI" = (/turf/simulated/mineral/random,/area/mine/dangerous/explored/golem) +"aJ" = (/turf/simulated/floor/plating/airless/asteroid,/area/mine/dangerous/explored/golem) +"aK" = (/turf/simulated/mineral/random/high_chance,/area/mine/dangerous/explored/golem) +"aL" = (/turf/simulated/shuttle/wall{icon_state = "swall_s6"; dir = 2},/area/shuttle/freegolem) +"aM" = (/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"; dir = 2},/area/shuttle/freegolem) +"aN" = (/obj/structure/fans/tiny,/obj/machinery/door/airlock/shuttle{id_tag = "s_docking_airlock"; locked = 1},/turf/simulated/shuttle/plating,/area/shuttle/freegolem) +"aO" = (/turf/simulated/shuttle/wall{dir = 2; icon_state = "swall8"; tag = "icon-swall12"},/area/shuttle/freegolem) +"aP" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/shuttle/freegolem) +"aQ" = (/obj/structure/closet/crate/golemgear,/turf/simulated/shuttle/plating,/area/shuttle/freegolem) +"aR" = (/obj/item/storage/toolbox/mechanical,/turf/simulated/shuttle/plating,/area/shuttle/freegolem) +"aS" = (/turf/simulated/shuttle/plating,/area/shuttle/freegolem) "aT" = (/obj/structure/lattice,/turf/space,/area/space) +"aU" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/shuttle/plating,/area/shuttle/freegolem) +"aV" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/shuttle/freegolem) +"aW" = (/obj/structure/shuttle/engine/propulsion{dir = 8; icon_state = "burst_l"},/turf/space,/area/shuttle/freegolem) +"aX" = (/obj/machinery/light/small,/turf/simulated/shuttle/plating,/area/shuttle/freegolem) +"aY" = (/turf/simulated/shuttle/wall{tag = "icon-swall13"; icon_state = "swall13"; dir = 2},/area/shuttle/freegolem) +"aZ" = (/obj/machinery/door/airlock/shuttle,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) "ba" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s6"; icon_state = "swall_s6"; dir = 2},/area/space) "bb" = (/turf/simulated/shuttle/wall{tag = "icon-swall14"; icon_state = "swall14"; dir = 2},/area/space) "bc" = (/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"; dir = 2},/area/space) "bd" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s10"; icon_state = "swall_s10"; dir = 2},/area/space) +"be" = (/turf/simulated/shuttle/wall{tag = "icon-swall14"; icon_state = "swall14"; dir = 2},/area/shuttle/freegolem) +"bf" = (/obj/machinery/computer/arcade/battle,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"bg" = (/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"bh" = (/obj/machinery/light{dir = 1; on = 1},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) "bi" = (/turf/simulated/shuttle/wall{tag = "icon-swall7"; icon_state = "swall7"; dir = 2},/area/space) "bj" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall{tag = "icon-swall_f9"; icon_state = "swall_f9"; dir = 2},/area/space) "bk" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space) "bl" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall{tag = "icon-swall_f5"; icon_state = "swall_f5"; dir = 2},/area/space) "bm" = (/turf/simulated/shuttle/wall{tag = "icon-swall11"; icon_state = "swall11"; dir = 2},/area/space) +"bn" = (/obj/effect/mob_spawn/human/golem/adamantine,/obj/machinery/light{dir = 1; on = 1},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"bo" = (/obj/effect/mob_spawn/human/golem/adamantine,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) "bp" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space) +"bq" = (/obj/machinery/mineral/equipment_vendor/golem,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"br" = (/obj/structure/fans/tiny,/obj/machinery/door/airlock/shuttle{id_tag = "s_docking_airlock"; locked = 1},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) "bs" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall{tag = "icon-swall_f10"; icon_state = "swall_f10"; dir = 2},/area/space) +"bt" = (/obj/item/resonator,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) "bu" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall{tag = "icon-swall_f6"; icon_state = "swall_f6"; dir = 2},/area/space) +"bv" = (/turf/simulated/shuttle/wall{tag = "icon-swall11"; icon_state = "swall11"; dir = 2},/area/shuttle/freegolem) +"bw" = (/obj/machinery/light{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) "bx" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s5"; icon_state = "swall_s5"; dir = 2},/area/space) "by" = (/turf/simulated/shuttle/wall{tag = "icon-swall13"; icon_state = "swall13"; dir = 2},/area/space) "bz" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s9"; icon_state = "swall_s9"; dir = 2},/area/space) +"bA" = (/obj/machinery/mineral/ore_redemption,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"bB" = (/turf/simulated/shuttle/wall{tag = "icon-swall14"; icon_state = "swall4"; dir = 2},/area/shuttle/freegolem) +"bC" = (/turf/simulated/shuttle/wall{dir = 2; icon_state = "swallc1"; tag = "icon-swall12"},/area/shuttle/freegolem) +"bD" = (/obj/structure/window/full/shuttle{icon_state = "16"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/freegolem) +"bE" = (/obj/structure/statue/gold/rd{name = "statue of the Liberator"},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"bF" = (/obj/machinery/computer/shuttle/golem_ship,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"bG" = (/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"bH" = (/obj/structure/extinguisher_cabinet{pixel_y = 30},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"bI" = (/obj/machinery/door/airlock/shuttle{id_tag = "s_docking_airlock"; locked = 1},/obj/structure/fans/tiny,/obj/docking_port/mobile{dir = 8; dwidth = 8; height = 20; id = "freegolem"; name = "Free Golem Ship"; roundstart_move = "freegolem_transit"; width = 16},/obj/docking_port/stationary{dir = 8; dwidth = 8; height = 20; id = "freegolem_z3"; name = "Small Asteroid"; width = 16},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"bJ" = (/obj/structure/window/full/shuttle{icon_state = "15"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/freegolem) +"bK" = (/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/table/wood,/obj/item/bedsheet/rd/royal_cape{layer = 3; pixel_x = 5; pixel_y = 9},/obj/item/book/manual/research_and_development{name = "Sacred Text of the Liberator"; pixel_x = -4; pixel_y = 3},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"bL" = (/obj/machinery/light,/obj/structure/chair/comfy/purp{icon_state = "comfychair"; dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"bM" = (/obj/machinery/light/small,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"bN" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s5"; icon_state = "swall_s5"; dir = 2},/area/shuttle/freegolem) +"bO" = (/obj/item/resonator/upgraded,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"bP" = (/obj/machinery/autolathe,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"bQ" = (/turf/simulated/shuttle/wall{icon_state = "swallc4"},/area/shuttle/freegolem) +"bR" = (/obj/structure/table/wood,/obj/machinery/reagentgrinder,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"bS" = (/obj/machinery/computer/arcade/orion_trail,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"bT" = (/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"bU" = (/obj/effect/mob_spawn/human/golem/adamantine,/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"bV" = (/obj/structure/extinguisher_cabinet{pixel_y = -30},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) "bW" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space) "bX" = (/obj/machinery/power/solar,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/space) "bY" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/space) @@ -121,6 +171,7 @@ "do" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/tcommsat/computer) "dp" = (/obj/structure/chair/office/dark{dir = 4},/turf/simulated/floor/plasteel,/area/tcommsat/computer) "dq" = (/obj/machinery/computer/telecomms/server{network = list("tcommsat")},/turf/simulated/floor/plasteel,/area/tcommsat/computer) +"dr" = (/obj/structure/table/wood,/obj/item/storage/firstaid/brute,/obj/item/storage/firstaid/brute,/obj/item/storage/firstaid/brute,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) "ds" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/turf/simulated/floor/plasteel,/area/tcommsat/computer) "dt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plasteel,/area/tcommsat/computer) "du" = (/obj/structure/chair{dir = 4},/turf/simulated/floor/plasteel,/area/tcommsat/computer) @@ -164,19 +215,24 @@ "eg" = (/obj/machinery/telecomms/relay/preset/station,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "eh" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/tcommsat/chamber) "ei" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/tcommsat/chamber) +"ej" = (/obj/structure/table/wood,/obj/structure/table/wood,/obj/item/storage/firstaid/fire,/obj/item/storage/firstaid/fire,/obj/item/storage/firstaid/fire,/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"ek" = (/obj/structure/table/wood,/obj/item/storage/firstaid/adv,/obj/item/storage/firstaid/adv,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) "el" = (/obj/machinery/door/window/brigdoor{dir = 1; name = "Telecomms Server Access"; req_access_txt = "61"},/obj/machinery/door/window/brigdoor{dir = 2; name = "Telecomms Server Access"; req_access_txt = "61"},/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/tcommsat/chamber) "em" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/tcommsat/chamber) "en" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat) "eo" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) "ep" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat) +"eq" = (/obj/structure/table/wood,/obj/item/areaeditor/golem,/obj/item/disk/design_disk/golem_shell,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) "er" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5; level = 1},/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) "es" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat) "et" = (/obj/item/radio/intercom{pixel_y = 25},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "eu" = (/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "ev" = (/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "ew" = (/obj/machinery/power/apc{cell_type = 5000; dir = 1; name = "Telecoms Sat. Central Compartment APC"; pixel_x = -1; pixel_y = 26},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"ex" = (/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/plating,/area/shuttle/freegolem) "ey" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "ez" = (/obj/machinery/camera{c_tag = "Telecomms Server Room North"; dir = 2; network = list("Telecomms")},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/light{dir = 1},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"eA" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/shuttle/plating,/area/shuttle/freegolem) "eB" = (/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "eC" = (/obj/machinery/light_switch{pixel_y = 28},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "eD" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating/airless,/area/space) @@ -184,6 +240,7 @@ "eF" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/space) "eG" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) "eH" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat) +"eI" = (/obj/structure/ore_box,/turf/simulated/shuttle/plating,/area/shuttle/freegolem) "eJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "eK" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) "eL" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) @@ -584,29 +641,29 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLaMaMaMaMaMaMaMaMaMaNaNaMaMaOaIaIaIaIaIaKaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPaQaQaQaQaQaQaQaQaRaSaSaUaVaWaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPaSaSaXaSaSaXaSaSaSaXaSaUaVaWaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLaMaMaYaZaZaMaMbeaMaZaZaMaMaMaMaMaOaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPbfbgbhbgbgbnboaPbgbgbgbgbhbgbqaVaWaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrbgbgbgbgbgbtbtaZbgbgbgbgbgbgbgaVaWaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLaMaYaZaZaMaMaMaMaMbvbwbgbgbgbgbgbAbBbCaJaJaIaIaIaIaIaIaIaIaIaIaKaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDbEbFbgbgbgbgbGbgbgaZbgbgbgbgbgbgbgbHbIaJaJaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJbKbLbgbgbgbgbgbgbgaZbgbgbgbgbgbgbgbMbraJaJaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNaMbeaZaZaMaMaMaMaMbvbwbgbgbgbgbObPbBbQaJaJaIaIaIaIaIaIaIaIaIaIaIaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrbgbgbgbgbgbtbtaZbgbgbgbgbgbgbRaVaWaIaIaIaIaIaIaIaIaIaIaIaIaIaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPbSbgbTbgbgbUboaPbVbgbgdrejekeqaVaWaIaIaIaIaIaIaKaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNaMaMbeaZaZaMaMaYaMaZaZaMaMaMaMaMaOaIaIaIaIaIaIaIaIaIaIaKaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPaSaSexaSaSexaSaSaSexaSeAaVaWaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPeIeIeIeIeIeIeIeIaRaSaSeAaVaWaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNaMaMaMaMaMaMaMaMaMaNaNaMaMaOaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaIaIaIaIaIaaaaaIaIaIaIaaaaaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaIaIaIaaaaaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -633,4 +690,3 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} - diff --git a/_maps/map_files/cyberiad/z6.dmm b/_maps/map_files/cyberiad/z6.dmm index 31394aca84c..7e23fe093e5 100644 --- a/_maps/map_files/cyberiad/z6.dmm +++ b/_maps/map_files/cyberiad/z6.dmm @@ -1159,6 +1159,7 @@ "wo" = (/turf/space,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless/catwalk,/area/derelict/solar_control) "wp" = (/turf/space,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating/airless/catwalk,/area/derelict/solar_control) "wq" = (/turf/space,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating/airless/catwalk,/area/derelict/solar_control) +"wr" = (/obj/docking_port/stationary{dir = 8; dwidth = 8; height = 20; id = "freegolem_z6"; name = "Near USSP Station"; width = 16},/turf/space,/area/space) "ws" = (/obj/effect/landmark/burnturf,/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/arrival) "wu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light/small{dir = 4; pixel_y = 8},/turf/simulated/floor/plasteel,/area/derelict/eva{name = "Derelict Annex"}) "wv" = (/turf/simulated/floor/plasteel{tag = "icon-dark"; icon_state = "dark"},/area/derelict/crew_quarters) @@ -1401,7 +1402,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasCsCsCsCsCaaoSaaoSaasCsCsCsCsCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoSaaoSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakhkhkhkhkhaaoSaaoSaakhkhkgzlzkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakAvmvmvmvmvmrmwlrJwmrmwowozmzlzlzlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawraaaakAvmvmvmvmvmrmwlrJwmrmwowozmzlzlzlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasCsCznsCsCaaoSaaoSaasCsCzozlzlaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoSaaoSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaakAwlaawmkyaaaaabaaaagUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/generic/z5.dmm b/_maps/map_files/generic/z5.dmm index 6c7fd01c9b8..7f92e592cbf 100644 --- a/_maps/map_files/generic/z5.dmm +++ b/_maps/map_files/generic/z5.dmm @@ -565,6 +565,7 @@ "kS" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/mine/eva) "kT" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plasteel,/area/mine/living_quarters) "kU" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel,/area/mine/production{name = "Mining Station Mech Bay"}) +"kV" = (/obj/docking_port/stationary{dir = 8; dwidth = 8; height = 20; id = "freegolem_z5"; name = "Near Mining Station"; width = 16},/turf/space,/area/space) "kW" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/rack,/obj/item/pickaxe,/turf/simulated/floor/plasteel,/area/mine/living_quarters) "kX" = (/turf/simulated/wall/r_wall,/area/mine/podbay) "kZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/door/airlock/mining/glass{name = "Mining Station Bridge"; req_access_txt = "48"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4; level = 1},/turf/simulated/floor/plasteel,/area/mine/living_quarters) @@ -842,7 +843,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabaeaeaeaeaeaeabaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabaeaeaeababababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaabababababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeakaeaeaeaeabaeaeaeaeabababaeaeaeaeaeaeaeaeaeaeaeadaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeadaeaeaeaeaeaeaeaeababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaeaeababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakVaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaeaeababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaiafaaaaaaaahBabababababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaeababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahamahajaaaahBababababaeaeaeaeaeaeakaeaeaeaeaeaeaeaeaeaeaeaeadaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaeabaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalapanaoajaahBabababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeakaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabaeabaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/code/__DEFINES/gamemode.dm b/code/__DEFINES/gamemode.dm index 328904d3884..b1186ce1e0d 100644 --- a/code/__DEFINES/gamemode.dm +++ b/code/__DEFINES/gamemode.dm @@ -12,6 +12,7 @@ #define GAMEMODE_IS_NATIONS (ticker && istype(ticker.mode, /datum/game_mode/nations)) #define GAMEMODE_IS_NUCLEAR (ticker && istype(ticker.mode, /datum/game_mode/nuclear)) #define GAMEMODE_IS_REVOLUTION (ticker && istype(ticker.mode, /datum/game_mode/revolution)) +#define GAMEMODE_IS_WIZARD (ticker && istype(ticker.mode, /datum/game_mode/wizard)) //special roles // Distinct from the ROLE_X defines because some antags have multiple special roles but only one ban type diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 17f8fcd3865..14cd2bd4edd 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -67,6 +67,9 @@ var/assistantlimit = 0 //enables assistant limiting var/assistantratio = 2 //how many assistants to security members + var/prob_free_golems = 100 //chance for free golems spawners to appear roundstart + var/unrestricted_free_golems = FALSE //if true, free golems can appear on all roundtypes + var/traitor_objectives_amount = 2 var/shadowling_max_age = 0 @@ -277,6 +280,12 @@ if("jobs_have_minimal_access") config.jobs_have_minimal_access = 1 + if("prob_free_golems") + config.prob_free_golems = text2num(value) + + if("unrestricted_free_golems") + config.unrestricted_free_golems = TRUE + if("shadowling_max_age") config.shadowling_max_age = text2num(value) @@ -393,10 +402,10 @@ if("githuburl") config.githuburl = value - + if("discordurl") config.discordurl = value - + if("donationsurl") config.donationsurl = value diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index 872b443c124..2dd4e4d93ad 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -169,7 +169,6 @@ var/list/ghostteleportlocs = list() music = "music/escape.ogg" icon_state = "shuttle2" - /area/shuttle/pod_1 name = "\improper Escape Pod One" music = "music/escape.ogg" @@ -461,6 +460,10 @@ var/list/ghostteleportlocs = list() /area/shuttle/trade/sol name = "Sol Freighter" +/area/shuttle/freegolem + name = "Free Golem Ship" + icon_state = "purple" + /area/airtunnel1/ // referenced in airtunnel.dm:759 /area/dummy/ // Referenced in engine.dm:261 diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index 8e1e16e1fac..9060833d585 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -316,6 +316,9 @@ /obj/item/circuitboard/white_ship name = "circuit Board (White Ship)" build_path = /obj/machinery/computer/shuttle/white_ship +/obj/item/circuitboard/golem_ship + name = "circuit Board (Golem Ship)" + build_path = /obj/machinery/computer/shuttle/golem_ship /obj/item/circuitboard/shuttle/syndicate name = "circuit board (Syndicate Shuttle)" build_path = /obj/machinery/computer/shuttle/syndicate diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm index 315eacb8f95..b6018c65626 100644 --- a/code/game/objects/items/blueprints.dm +++ b/code/game/objects/items/blueprints.dm @@ -68,6 +68,22 @@ ..() qdel(src) +//free golem blueprints, like permit but can claim as much as needed + +/obj/item/areaeditor/golem + name = "Golem Land Claim" + desc = "Used to define new areas in space." + fluffnotice = "Praise the Liberator!" + +/obj/item/areaeditor/golem/attack_self(mob/user) + . = ..() + var/area/A = get_area() + if(get_area_type() == AREA_STATION) + . += "

According to the [src], you are now in \"[sanitize(A.name)]\".

" + var/datum/browser/popup = new(user, "blueprints", "[src]", 700, 500) + popup.set_content(.) + popup.open() + onclose(usr, "blueprints") //Station blueprints!!! /obj/item/areaeditor/blueprints @@ -312,3 +328,4 @@ name = "station schematics" desc = "A digital copy of the station blueprints stored in your memory." fluffnotice = "Intellectual Property of Nanotrasen. For use in engineering cyborgs only. Wipe from memory upon departure from the station." + diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index 5c6038e46c2..615882021b4 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -11,6 +11,8 @@ Mineral Sheets - Tranqillite - Enriched Uranium - Platinum + - Alien Alloy + - Adamantine */ var/global/list/datum/stack_recipe/sandstone_recipes = list ( \ @@ -102,6 +104,10 @@ var/global/list/datum/stack_recipe/abductor_recipes = list ( \ new/datum/stack_recipe("alien floor tile", /obj/item/stack/tile/mineral/abductor, 1, 4, 20), \ ) +var/global/list/datum/stack_recipe/adamantine_recipes = list( + new /datum/stack_recipe("incomplete servant golem shell", /obj/item/golem_shell/servant, req_amount = 1, res_amount = 1), \ + ) + /obj/item/stack/sheet/mineral force = 5 throwforce = 5 @@ -301,3 +307,16 @@ var/global/list/datum/stack_recipe/plastitanium_recipes = list ( /obj/item/stack/sheet/mineral/abductor/New(loc, amount=null) recipes = abductor_recipes ..() + +/obj/item/stack/sheet/mineral/adamantine + name = "adamantine" + desc = "A strange mineral used in the construction of sentient golems." + icon_state = "sheet-adamantine" + singular_name = "adamantine sheet" + origin_tech = "materials=5" + merge_type = /obj/item/stack/sheet/mineral/adamantine + wall_allowed = FALSE + +/obj/item/stack/sheet/mineral/adamantine/New(loc, amount = null) + recipes = adamantine_recipes + ..() diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index 1179c36c5f5..a4ffcb72744 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -685,6 +685,12 @@ icon_state = "cargo" access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mint, access_mining, access_mining_station, access_mineral_storeroom) +/obj/item/card/id/mining + name = "Mining ID" + registered_name = null + icon_state = "cargo" + access = list(access_mining, access_mint, access_mining_station, access_mailsorting, access_maint_tunnels, access_mineral_storeroom) + /obj/item/card/id/engineering name = "Engineering ID" registered_name = "Engineer" diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index acea165b9ae..cfa33544f98 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -1003,6 +1003,18 @@ desc = "A colorful cardboard box for the clown" icon_state = "box_clown" +/obj/item/storage/box/rndboards + name = "the Liberator's legacy" + desc = "A box containing a gift for worthy golems." + +/obj/item/storage/box/rndboards/New() + ..() + contents = list() + new /obj/item/circuitboard/protolathe(src) + new /obj/item/circuitboard/destructive_analyzer(src) + new /obj/item/circuitboard/circuit_imprinter(src) + new /obj/item/circuitboard/rdconsole/public(src) + #undef NODESIGN #undef NANOTRASEN #undef SYNDI diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index 7051b9cf342..61113a4864a 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -119,6 +119,11 @@ LINEN BINS dream_messages = list("authority", "a silvery ID", "a bomb", "a mech", "a facehugger", "maniacal laughter", "the research director") nightmare_messages = list("toxins full of plasma", "UPGRADE THE SLEEPERS", "rogue ai") +/obj/item/bedsheet/rd/royal_cape + name = "Royal Cape of the Liberator" + desc = "Majestic." + dream_messages = list("mining", "stone", "a golem", "freedom", "doing whatever") + /obj/item/bedsheet/medical name = "medical blanket" desc = "It's a sterilized* blanket commonly used in the Medbay. *Sterilization is voided if a virologist is present onboard the station." diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index c98fe24aa57..e32111e3a99 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -642,3 +642,16 @@ if(prob(10)) new /obj/item/bikehorn/rubberducky(src) ..() + +//crates of gear in the free golem ship +/obj/structure/closet/crate/golemgear/New() + ..() + new /obj/item/storage/backpack/industrial(src) + new /obj/item/storage/backpack/satchel_eng(src) + new /obj/item/shovel(src) + new /obj/item/pickaxe(src) + new /obj/item/t_scanner/adv_mining_scanner/lesser(src) + new /obj/item/storage/bag/ore(src) + new /obj/item/clothing/glasses/meson(src) + new /obj/item/card/id/mining(src) + new /obj/item/flashlight/lantern(src) \ No newline at end of file diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm deleted file mode 100644 index 7bb0e94e2a4..00000000000 --- a/code/game/objects/structures/ghost_role_spawners.dm +++ /dev/null @@ -1,251 +0,0 @@ -//Ancient cryogenic sleepers. Players become NT crewmen from a hundred year old space station, now on the verge of collapse. - -/obj/effect/mob_spawn/human/oldsec - name = "old cryogenics pod" - desc = "A humming cryo pod. You can barely recognise a security uniform underneath the built up ice. The machine is attempting to wake up its occupant." - mob_name = "a security officer" - icon = 'icons/obj/cryogenic2.dmi' - icon_state = "sleeper" - roundstart = FALSE - death = FALSE - random = TRUE - mob_species = /datum/species/human - flavour_text = "You are a security officer working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \ - cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \ - your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \ - Work as a team with your fellow survivors and do not abandon them." - uniform = /obj/item/clothing/under/retro/security - shoes = /obj/item/clothing/shoes/jackboots - id = /obj/item/card/id/away/old/sec - r_pocket = /obj/item/restraints/handcuffs - l_pocket = /obj/item/flash - assignedrole = "Ancient Crew" - -/obj/effect/mob_spawn/human/oldsec/Destroy() - new /obj/structure/showcase/machinery/oldpod/used(drop_location()) - return ..() - -/obj/effect/mob_spawn/human/oldmed - name = "old cryogenics pod" - desc = "A humming cryo pod. You can barely recognise a medical uniform underneath the built up ice. The machine is attempting to wake up its occupant." - mob_name = "a medical doctor" - icon = 'icons/obj/cryogenic2.dmi' - icon_state = "sleeper" - roundstart = FALSE - death = FALSE - random = TRUE - mob_species = /datum/species/human - flavour_text = "You are a medical working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \ - cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \ - your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \ - Work as a team with your fellow survivors and do not abandon them." - uniform = /obj/item/clothing/under/retro/medical - shoes = /obj/item/clothing/shoes/black - id = /obj/item/card/id/away/old/med - l_pocket = /obj/item/stack/medical/ointment - r_pocket = /obj/item/stack/medical/ointment - assignedrole = "Ancient Crew" - -/obj/effect/mob_spawn/human/oldmed/Destroy() - new /obj/structure/showcase/machinery/oldpod/used(drop_location()) - return ..() - -/obj/effect/mob_spawn/human/oldeng - name = "old cryogenics pod" - desc = "A humming cryo pod. You can barely recognise an engineering uniform underneath the built up ice. The machine is attempting to wake up its occupant." - mob_name = "an engineer" - icon = 'icons/obj/cryogenic2.dmi' - icon_state = "sleeper" - roundstart = FALSE - death = FALSE - random = TRUE - mob_species = /datum/species/human - flavour_text = "You are an engineer working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \ - cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \ - your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \ - Work as a team with your fellow survivors and do not abandon them." - uniform = /obj/item/clothing/under/retro/engineering - shoes = /obj/item/clothing/shoes/workboots - id = /obj/item/card/id/away/old/eng - gloves = /obj/item/clothing/gloves/color/fyellow/old - l_pocket = /obj/item/tank/emergency_oxygen - assignedrole = "Ancient Crew" - -/obj/effect/mob_spawn/human/oldeng/Destroy() - new /obj/structure/showcase/machinery/oldpod/used(drop_location()) - return ..() - -/obj/effect/mob_spawn/human/oldsci - name = "old cryogenics pod" - desc = "A humming cryo pod. You can barely recognise a science uniform underneath the built up ice. The machine is attempting to wake up its occupant." - mob_name = "a scientist" - icon = 'icons/obj/cryogenic2.dmi' - icon_state = "sleeper" - roundstart = FALSE - death = FALSE - random = TRUE - mob_species = /datum/species/human - flavour_text = "You are a scientist working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \ - cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \ - your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \ - Work as a team with your fellow survivors and do not abandon them." - uniform = /obj/item/clothing/under/retro/science - shoes = /obj/item/clothing/shoes/laceup - id = /obj/item/card/id/away/old/sci - l_pocket = /obj/item/stack/medical/bruise_pack - assignedrole = "Ancient Crew" - -/obj/effect/mob_spawn/human/oldsci/Destroy() - new /obj/structure/showcase/machinery/oldpod/used(drop_location()) - return ..() - -/obj/structure/showcase/machinery/oldpod - name = "damaged cryogenic pod" - desc = "A damaged cryogenic pod long since lost to time, including its former occupant..." - icon = 'icons/obj/cryogenic2.dmi' - icon_state = "sleeper-open" - -/obj/structure/showcase/machinery/oldpod/used - name = "opened cryogenic pod" - desc = "A cryogenic pod that has recently discharged its occupant. The pod appears non-functional." - -//Golem shells: Spawns in Free Golem ships in lavaland. Ghosts become mineral golems and are advised to spread personal freedom. - -/obj/item/golem_shell - name = "incomplete free golem shell" - icon = 'icons/obj/wizard.dmi' - icon_state = "construct" - desc = "The incomplete body of a golem. Add ten sheets of any mineral to finish." - var/shell_type = /obj/effect/mob_spawn/human/golem - var/has_owner = FALSE //if the resulting golem obeys someone - w_class = WEIGHT_CLASS_BULKY - -/obj/item/golem_shell/attackby(obj/item/I, mob/user, params) - ..() - var/static/list/golem_shell_species_types = list( - /obj/item/stack/sheet/metal = /datum/species/golem, - /obj/item/stack/sheet/glass = /datum/species/golem/glass, - /obj/item/stack/sheet/plasteel = /datum/species/golem/plasteel, - /obj/item/stack/sheet/mineral/sandstone = /datum/species/golem/sand, - /obj/item/stack/sheet/mineral/plasma = /datum/species/golem/plasma, - /obj/item/stack/sheet/mineral/diamond = /datum/species/golem/diamond, - /obj/item/stack/sheet/mineral/gold = /datum/species/golem/gold, - /obj/item/stack/sheet/mineral/silver = /datum/species/golem/silver, - /obj/item/stack/sheet/mineral/uranium = /datum/species/golem/uranium, - /obj/item/stack/sheet/mineral/bananium = /datum/species/golem/bananium, - /obj/item/stack/sheet/mineral/tranquillite = /datum/species/golem/tranquillite, - /obj/item/stack/sheet/mineral/titanium = /datum/species/golem/titanium, - /obj/item/stack/sheet/mineral/plastitanium = /datum/species/golem/plastitanium, - /obj/item/stack/sheet/mineral/abductor = /datum/species/golem/alloy, - /obj/item/stack/sheet/mineral/wood = /datum/species/golem/wood, - /obj/item/stack/sheet/bluespace_crystal = /datum/species/golem/bluespace, - /obj/item/stack/sheet/runed_metal = /datum/species/golem/runic, - /obj/item/stack/medical/gauze = /datum/species/golem/cloth, - /obj/item/stack/sheet/cloth = /datum/species/golem/cloth, - /obj/item/stack/sheet/plastic = /datum/species/golem/plastic, - /obj/item/stack/tile/brass = /datum/species/golem/clockwork, - /obj/item/stack/sheet/cardboard = /datum/species/golem/cardboard, - /obj/item/stack/sheet/leather = /datum/species/golem/leather, - /obj/item/stack/sheet/bone = /datum/species/golem/bone) - - if(istype(I, /obj/item/stack)) - var/obj/item/stack/O = I - var/species = golem_shell_species_types[O.merge_type] - if(species) - if(O.use(10)) - to_chat(user, "You finish up the golem shell with ten sheets of [O].") - new shell_type(get_turf(src), species, user) - qdel(src) - else - to_chat(user, "You need at least ten sheets to finish a golem.") - else - to_chat(user, "You can't build a golem out of this kind of material.") - -/obj/effect/mob_spawn/human/golem - name = "inert free golem shell" - desc = "A humanoid shape, empty, lifeless, and full of potential." - mob_name = "a free golem" - icon = 'icons/obj/wizard.dmi' - icon_state = "construct" - mob_species = /datum/species/golem - roundstart = FALSE - death = FALSE - anchored = FALSE - move_resist = MOVE_FORCE_NORMAL - density = FALSE - var/has_owner = FALSE - var/can_transfer = TRUE //if golems can switch bodies to this new shell - var/mob/living/owner = null //golem's owner if it has one - flavour_text = "You are a Free Golem. Your family worships The Liberator. In his infinite and divine wisdom, he set your clan free to \ - travel the stars with a single declaration: \"Yeah go do whatever.\" Though you are bound to the one who created you, it is customary in your society to repeat those same words to newborn \ - golems, so that no golem may ever be forced to serve again." - -/obj/effect/mob_spawn/human/golem/Initialize(mapload, datum/species/golem/species = null, mob/creator = null) - if(species) //spawners list uses object name to register so this goes before ..() - name += " ([initial(species.prefix)])" - mob_species = species - . = ..() - var/area/A = get_area(src) - if(!mapload && A) - notify_ghosts("\A [initial(species.prefix)] golem shell has been completed in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE, ignore_key = POLL_IGNORE_GOLEM) - if(has_owner && creator) - flavour_text = "You are a Golem. You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools. \ - Serve [creator], and assist [creator.p_them()] in completing [creator.p_their()] goals at any cost." - owner = creator - -/obj/effect/mob_spawn/human/golem/special(mob/living/new_spawn, name) - var/datum/species/golem/X = mob_species - to_chat(new_spawn, "[initial(X.info_text)]") - if(!owner) - to_chat(new_spawn, "Build golem shells in the autolathe, and feed refined mineral sheets to the shells to bring them to life! You are generally a peaceful group unless provoked.") - else - new_spawn.mind.store_memory("Serve [owner.real_name], your creator.") - new_spawn.mind.enslave_mind_to_creator(owner) - log_game("[key_name(new_spawn)] possessed a golem shell enslaved to [key_name(owner)].") - log_admin("[key_name(new_spawn)] possessed a golem shell enslaved to [key_name(owner)].") - if(ishuman(new_spawn)) - var/mob/living/carbon/human/H = new_spawn - if(has_owner) - var/datum/species/golem/G = H.dna.species - G.owner = owner - H.set_cloned_appearance() - if(!name) - if(has_owner) - H.fully_replace_character_name(null, "[initial(X.prefix)] Golem ([rand(1,999)])") - else - H.fully_replace_character_name(null, H.dna.species.random_name()) - else - H.fully_replace_character_name(null, name) - if(has_owner) - new_spawn.mind.assigned_role = "Servant Golem" - else - new_spawn.mind.assigned_role = "Free Golem" - -/obj/effect/mob_spawn/human/golem/attack_hand(mob/user) - . = ..() - if(.) - return - if(isgolem(user) && can_transfer) - var/transfer_choice = alert("Transfer your soul to [src]? (Warning, your old body will die!)",,"Yes","No") - if(transfer_choice != "Yes") - return - if(QDELETED(src) || uses <= 0) - return - log_game("[key_name(user)] golem-swapped into [src]") - user.visible_message("A faint light leaves [user], moving to [src] and animating it!","You leave your old body behind, and transfer into [src]!") - show_flavour = FALSE - create(ckey = user.ckey,name = user.real_name) - user.death() - return - -/obj/effect/mob_spawn/human/golem/servant - has_owner = TRUE - name = "inert servant golem shell" - mob_name = "a servant golem" - -/obj/effect/mob_spawn/human/golem/adamantine - name = "dust-caked free golem shell" - desc = "A humanoid shape, empty, lifeless, and full of potential." - mob_name = "a free golem" - can_transfer = FALSE - mob_species = /datum/species/golem/adamantine diff --git a/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm b/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm new file mode 100644 index 00000000000..07fb8ab92c5 --- /dev/null +++ b/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm @@ -0,0 +1,139 @@ +//Golem shells: Spawns in Free Golem ships in lavaland, or through xenobiology adamantine extract. +//Xenobiology golems are slaved to their creator. + +/obj/item/golem_shell + name = "incomplete free golem shell" + icon = 'icons/obj/wizard.dmi' + icon_state = "construct" + desc = "The incomplete body of a golem. Add ten sheets of any mineral to finish." + var/shell_type = /obj/effect/mob_spawn/human/golem + w_class = WEIGHT_CLASS_BULKY + +/obj/item/golem_shell/servant + name = "incomplete servant golem shell" + shell_type = /obj/effect/mob_spawn/human/golem/servant + +/obj/item/golem_shell/attackby(obj/item/I, mob/user, params) + ..() + var/static/list/golem_shell_species_types = list( + /obj/item/stack/sheet/metal = /datum/species/golem, + /obj/item/stack/sheet/glass = /datum/species/golem/glass, + /obj/item/stack/sheet/plasteel = /datum/species/golem/plasteel, + /obj/item/stack/sheet/mineral/sandstone = /datum/species/golem/sand, + /obj/item/stack/sheet/mineral/plasma = /datum/species/golem/plasma, + /obj/item/stack/sheet/mineral/diamond = /datum/species/golem/diamond, + /obj/item/stack/sheet/mineral/gold = /datum/species/golem/gold, + /obj/item/stack/sheet/mineral/silver = /datum/species/golem/silver, + /obj/item/stack/sheet/mineral/uranium = /datum/species/golem/uranium, + /obj/item/stack/sheet/mineral/bananium = /datum/species/golem/bananium, + /obj/item/stack/sheet/mineral/tranquillite = /datum/species/golem/tranquillite, + /obj/item/stack/sheet/mineral/titanium = /datum/species/golem/titanium, + /obj/item/stack/sheet/mineral/plastitanium = /datum/species/golem/plastitanium, + /obj/item/stack/sheet/mineral/abductor = /datum/species/golem/alloy, + /obj/item/stack/sheet/wood = /datum/species/golem/wood, + /obj/item/stack/sheet/bluespace_crystal = /datum/species/golem/bluespace, + /obj/item/stack/sheet/mineral/adamantine = /datum/species/golem/adamantine, + /obj/item/stack/sheet/plastic = /datum/species/golem/plastic) + + if(istype(I, /obj/item/stack)) + var/obj/item/stack/O = I + var/species = golem_shell_species_types[O.merge_type] + if(species) + if(O.use(10)) + to_chat(user, "You finish up the golem shell with ten sheets of [O].") + new shell_type(get_turf(src), species, user) + qdel(src) + else + to_chat(user, "You need at least ten sheets to finish a golem.") + else + to_chat(user, "You can't build a golem out of this kind of material.") + +/obj/effect/mob_spawn/human/golem + name = "inert free golem shell" + desc = "A humanoid shape, empty, lifeless, and full of potential." + mob_name = "a free golem" + icon = 'icons/obj/wizard.dmi' + icon_state = "construct" + mob_species = /datum/species/golem + roundstart = FALSE + death = FALSE + anchored = FALSE + move_resist = MOVE_FORCE_NORMAL + density = FALSE + var/has_owner = FALSE + var/can_transfer = TRUE //if golems can switch bodies to this new shell + var/mob/living/owner = null //golem's owner if it has one + flavour_text = "You are a Free Golem. Your family worships The Liberator. In his infinite and divine wisdom, he set your clan free to \ + travel the stars with a single declaration: \"Yeah go do whatever.\" Though you are bound to the one who created you, it is customary in your society to repeat those same words to newborn \ + golems, so that no golem may ever be forced to serve again." + +/obj/effect/mob_spawn/human/golem/Initialize(mapload, datum/species/golem/species = null, mob/creator = null) + if(species) //spawners list uses object name to register so this goes before ..() + name += " ([initial(species.prefix)])" + mob_species = species + . = ..() + var/area/A = get_area(src) + if(!mapload && A) + notify_ghosts("\A [initial(species.prefix)] golem shell has been completed in [A.name].", source = src) + if(has_owner && creator) + flavour_text = "You are a Golem. You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools. \ + Serve [creator], and assist [creator.p_them()] in completing [creator.p_their()] goals at any cost." + owner = creator + +/obj/effect/mob_spawn/human/golem/special(mob/living/new_spawn, name) + var/datum/species/golem/X = mob_species + to_chat(new_spawn, "[initial(X.info_text)]") + if(!owner) + to_chat(new_spawn, "Build golem shells in the autolathe, and feed refined mineral sheets to the shells to bring them to life! You are generally a peaceful group unless provoked.") + else + new_spawn.mind.store_memory("Serve [owner.real_name], your creator.") + log_game("[key_name(new_spawn)] possessed a golem shell enslaved to [key_name(owner)].") + log_admin("[key_name(new_spawn)] possessed a golem shell enslaved to [key_name(owner)].") + if(ishuman(new_spawn)) + var/mob/living/carbon/human/H = new_spawn + if(has_owner) + var/datum/species/golem/G = H.dna.species + G.owner = owner + if(!name) + H.rename_character(null, H.dna.species.get_random_name()) + else + H.rename_character(null, name) + if(has_owner) + new_spawn.mind.assigned_role = "Servant Golem" + else + new_spawn.mind.assigned_role = "Free Golem" + +/obj/effect/mob_spawn/human/golem/attack_hand(mob/user) + . = ..() + if(.) + return + if(isgolem(user) && can_transfer) + var/transfer_choice = alert("Transfer your soul to [src]? (Warning, your old body will die!)",,"Yes","No") + if(transfer_choice != "Yes") + return + if(QDELETED(src) || uses <= 0) + return + log_game("[key_name(user)] golem-swapped into [src]") + user.visible_message("A faint light leaves [user], moving to [src] and animating it!","You leave your old body behind, and transfer into [src]!") + create(ckey = user.ckey, name = user.real_name) + user.death() + return + +/obj/effect/mob_spawn/human/golem/servant + has_owner = TRUE + name = "inert servant golem shell" + mob_name = "a servant golem" + +/obj/effect/mob_spawn/human/golem/adamantine + name = "dust-caked free golem shell" + desc = "A humanoid shape, empty, lifeless, and full of potential." + mob_name = "a free golem" + can_transfer = FALSE + mob_species = /datum/species/golem/adamantine + +/obj/effect/mob_spawn/human/golem/adamantine/New() //check config to see if we allow free golems to spawn + ..() + if(!config.unrestricted_free_golems && (GAMEMODE_IS_BLOB || GAMEMODE_IS_NUCLEAR || GAMEMODE_IS_WIZARD)) + qdel(src) + else if(!prob(config.prob_free_golems)) + qdel(src) \ No newline at end of file diff --git a/code/modules/awaymissions/mission_code/ghost_role_spawners/oldstation.dm b/code/modules/awaymissions/mission_code/ghost_role_spawners/oldstation.dm new file mode 100644 index 00000000000..8dc3692179e --- /dev/null +++ b/code/modules/awaymissions/mission_code/ghost_role_spawners/oldstation.dm @@ -0,0 +1,110 @@ +//Ancient cryogenic sleepers. Players become NT crewmen from a hundred year old space station, now on the verge of collapse. + +/obj/effect/mob_spawn/human/oldsec + name = "old cryogenics pod" + desc = "A humming cryo pod. You can barely recognise a security uniform underneath the built up ice. The machine is attempting to wake up its occupant." + mob_name = "a security officer" + icon = 'icons/obj/cryogenic2.dmi' + icon_state = "sleeper" + roundstart = FALSE + death = FALSE + random = TRUE + mob_species = /datum/species/human + flavour_text = "You are a security officer working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \ + cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \ + your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \ + Work as a team with your fellow survivors and do not abandon them." + uniform = /obj/item/clothing/under/retro/security + shoes = /obj/item/clothing/shoes/jackboots + id = /obj/item/card/id/away/old/sec + r_pocket = /obj/item/restraints/handcuffs + l_pocket = /obj/item/flash + assignedrole = "Ancient Crew" + +/obj/effect/mob_spawn/human/oldsec/Destroy() + new /obj/structure/showcase/machinery/oldpod/used(drop_location()) + return ..() + +/obj/effect/mob_spawn/human/oldmed + name = "old cryogenics pod" + desc = "A humming cryo pod. You can barely recognise a medical uniform underneath the built up ice. The machine is attempting to wake up its occupant." + mob_name = "a medical doctor" + icon = 'icons/obj/cryogenic2.dmi' + icon_state = "sleeper" + roundstart = FALSE + death = FALSE + random = TRUE + mob_species = /datum/species/human + flavour_text = "You are a medical working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \ + cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \ + your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \ + Work as a team with your fellow survivors and do not abandon them." + uniform = /obj/item/clothing/under/retro/medical + shoes = /obj/item/clothing/shoes/black + id = /obj/item/card/id/away/old/med + l_pocket = /obj/item/stack/medical/ointment + r_pocket = /obj/item/stack/medical/ointment + assignedrole = "Ancient Crew" + +/obj/effect/mob_spawn/human/oldmed/Destroy() + new /obj/structure/showcase/machinery/oldpod/used(drop_location()) + return ..() + +/obj/effect/mob_spawn/human/oldeng + name = "old cryogenics pod" + desc = "A humming cryo pod. You can barely recognise an engineering uniform underneath the built up ice. The machine is attempting to wake up its occupant." + mob_name = "an engineer" + icon = 'icons/obj/cryogenic2.dmi' + icon_state = "sleeper" + roundstart = FALSE + death = FALSE + random = TRUE + mob_species = /datum/species/human + flavour_text = "You are an engineer working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \ + cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \ + your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \ + Work as a team with your fellow survivors and do not abandon them." + uniform = /obj/item/clothing/under/retro/engineering + shoes = /obj/item/clothing/shoes/workboots + id = /obj/item/card/id/away/old/eng + gloves = /obj/item/clothing/gloves/color/fyellow/old + l_pocket = /obj/item/tank/emergency_oxygen + assignedrole = "Ancient Crew" + +/obj/effect/mob_spawn/human/oldeng/Destroy() + new /obj/structure/showcase/machinery/oldpod/used(drop_location()) + return ..() + +/obj/effect/mob_spawn/human/oldsci + name = "old cryogenics pod" + desc = "A humming cryo pod. You can barely recognise a science uniform underneath the built up ice. The machine is attempting to wake up its occupant." + mob_name = "a scientist" + icon = 'icons/obj/cryogenic2.dmi' + icon_state = "sleeper" + roundstart = FALSE + death = FALSE + random = TRUE + mob_species = /datum/species/human + flavour_text = "You are a scientist working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \ + cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \ + your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \ + Work as a team with your fellow survivors and do not abandon them." + uniform = /obj/item/clothing/under/retro/science + shoes = /obj/item/clothing/shoes/laceup + id = /obj/item/card/id/away/old/sci + l_pocket = /obj/item/stack/medical/bruise_pack + assignedrole = "Ancient Crew" + +/obj/effect/mob_spawn/human/oldsci/Destroy() + new /obj/structure/showcase/machinery/oldpod/used(drop_location()) + return ..() + +/obj/structure/showcase/machinery/oldpod + name = "damaged cryogenic pod" + desc = "A damaged cryogenic pod long since lost to time, including its former occupant..." + icon = 'icons/obj/cryogenic2.dmi' + icon_state = "sleeper-open" + +/obj/structure/showcase/machinery/oldpod/used + name = "opened cryogenic pod" + desc = "A cryogenic pod that has recently discharged its occupant. The pod appears non-functional." \ No newline at end of file diff --git a/code/modules/awaymissions/mission_code/ruins/freegolems.dm b/code/modules/awaymissions/mission_code/ruins/freegolems.dm deleted file mode 100644 index f67ccd91f03..00000000000 --- a/code/modules/awaymissions/mission_code/ruins/freegolems.dm +++ /dev/null @@ -1,66 +0,0 @@ -//Items - -/obj/item/bedsheet/rd/royal_cape - name = "Royal Cape of the Liberator" - desc = "Majestic." - dream_messages = list("mining", "stone", "a golem", "freedom", "doing whatever") - -/obj/item/storage/box/rndboards - name = "the Liberator's legacy" - desc = "A box containing a gift for worthy golems." - -/obj/item/storage/box/rndboards/New() - ..() - contents = list() - new /obj/item/circuitboard/machine/protolathe(src) - new /obj/item/circuitboard/machine/destructive_analyzer(src) - new /obj/item/circuitboard/machine/circuit_imprinter(src) - new /obj/item/circuitboard/computer/rdconsole(src) - -/obj/item/areaeditor/golem - name = "golem land claim" - desc = "Used to define new areas in space or on an asteroid." - fluffnotice = "Praise the Liberator!" - -/obj/item/areaeditor/golem/attack_self(mob/user) - . = ..() - var/area/A = get_area() - if(get_area_type() == AREA_STATION) - . += "

According to the [src], you are now in \"[sanitize(A.name)]\".

" - var/datum/browser/popup = new(user, "blueprints", "[src]", 700, 500) - popup.set_content(.) - popup.open() - onclose(usr, "blueprints") - -/obj/item/disk/design_disk/golem_shell - name = "golem creation disk" - desc = "A gift from the Liberator." - icon_state = "datadisk1" - max_blueprints = 1 - -/obj/item/disk/design_disk/golem_shell/Initialize() - . = ..() - var/datum/design/golem_shell/G = new - blueprints[1] = G - -/datum/design/golem_shell - name = "Golem Shell Construction" - desc = "Allows for the construction of a Golem Shell." - id = "golem" - build_type = AUTOLATHE - materials = list(MAT_METAL = 40000) - build_path = /obj/item/golem_shell - category = list("Imported") - - -//Structures - -//Areas - -/area/shuttle/freegolem - name = "Free Golem Ship" - icon_state = "purple" - -/area/mine/dangerous/explored/golem - name = "Small Asteroid" - diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 8fe17f24053..83fd272870b 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -428,13 +428,13 @@ /obj/machinery/mineral/equipment_vendor/golem name = "golem ship equipment vendor" - circuit = /obj/item/circuitboard/machine/mining_equipment_vendor/golem /obj/machinery/mineral/equipment_vendor/golem/Initialize() . = ..() desc += "\nIt seems a few selections have been added." prize_list += list( new /datum/data/mining_equipment("Extra Id", /obj/item/card/id/mining, 250), + new /datum/data/mining_equipment("Extra Golem Creation Disk", /obj/item/disk/design_disk/golem_shell, 250), new /datum/data/mining_equipment("Science Goggles", /obj/item/clothing/glasses/science, 250), new /datum/data/mining_equipment("Monkey Cube", /obj/item/reagent_containers/food/snacks/monkeycube, 300), new /datum/data/mining_equipment("Toolbelt", /obj/item/storage/belt/utility, 350), diff --git a/code/modules/mining/mine_areas.dm b/code/modules/mining/mine_areas.dm index e07d779c9a8..5781bb06bbe 100644 --- a/code/modules/mining/mine_areas.dm +++ b/code/modules/mining/mine_areas.dm @@ -16,6 +16,9 @@ outdoors = 1 ambientsounds = list('sound/ambience/ambimine.ogg') +/area/mine/dangerous/explored/golem + name = "Small Asteroid" + /area/mine/dangerous/unexplored name = "Mine" icon_state = "unexplored" diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 8a6324e0ebd..e5122c70604 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -451,6 +451,8 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, continue if(istype(I, /obj/item/organ)) continue + if(I.flags & ABSTRACT) + continue else failed++ diff --git a/code/modules/mob/living/carbon/human/species/golem.dm b/code/modules/mob/living/carbon/human/species/golem.dm index 28d8ff7d477..f2e0ad753eb 100644 --- a/code/modules/mob/living/carbon/human/species/golem.dm +++ b/code/modules/mob/living/carbon/human/species/golem.dm @@ -2,8 +2,8 @@ name = "Golem" name_plural = "Golems" - icobase = 'icons/mob/human_races/golems/golem.dmi' - deform = 'icons/mob/human_races/golems/golem.dmi' + icobase = 'icons/mob/human_races/golems/r_golem.dmi' + deform = 'icons/mob/human_races/golems/r_golem.dmi' species_traits = list(NO_BREATHE, NO_BLOOD, RADIMMUNE, VIRUSIMMUNE, NOGUNS) bodyflags = HAS_SKIN_COLOR @@ -34,6 +34,7 @@ blood_color = "#515573" flesh_color = "#137E8F" + skinned_type = /obj/item/stack/sheet/metal slowdown = 3 siemens_coeff = 0 @@ -41,14 +42,15 @@ dangerous_existence = TRUE has_organ = list( - "brain" = /obj/item/organ/internal/brain/golem + "brain" = /obj/item/organ/internal/brain/golem, + "adamantine_resonator" = /obj/item/organ/internal/adamantine_resonator ) //Has standard darksight of 2. suicide_messages = list( "is crumbling into dust!", "is smashing their body apart!") - var/golem_color = "#434B4D" + var/golem_colour = "aaa" var/info_text = "As an Iron Golem, you don't have any special traits." var/random_eligible = TRUE //If false, the golem subtype can't be made through golem mutation toxin var/prefix = "Iron" @@ -57,7 +59,7 @@ var/special_name_chance = 5 var/owner //dobby is a free golem -/datum/species/golem/random_name() +/datum/species/golem/get_random_name() var/golem_surname = pick(GLOB.golem_names) // 3% chance that our golem has a human surname, because cultural contamination if(prob(human_surname_chance)) @@ -76,14 +78,16 @@ H.mind.special_role = SPECIAL_ROLE_GOLEM else H.mind.special_role = SPECIAL_ROLE_FREE_GOLEM - H.real_name = "[prefix] golem ([rand(1, 1000)])" + H.real_name = get_random_name() H.name = H.real_name H.equip_to_slot_or_del(new /obj/item/clothing/under/golem(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/suit/golem(H), slot_wear_suit) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/golem(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/golem(H), slot_wear_mask) H.equip_to_slot_or_del(new /obj/item/clothing/gloves/golem(H), slot_gloves) - + H.skin_colour = golem_colour + H.regenerate_icons() + to_chat(H, info_text) //Random Golem @@ -104,15 +108,28 @@ var/datum/species/golem/golem_type = pick(random_golem_types) var/mob/living/carbon/human/H = C H.set_species(golem_type) - to_chat(H, "[initial(golem_type.info_text)]") - //Golem subtypes +//Leader golems, can resonate to communicate with all other golems +/datum/species/golem/adamantine + name = "Adamantine Golem" + skinned_type = /obj/item/stack/sheet/mineral/adamantine + has_organ = list( + "brain" = /obj/item/organ/internal/brain/golem, + "adamantine_resonator" = /obj/item/organ/internal/adamantine_resonator, + "vocal_cords" = /obj/item/organ/internal/vocal_cords/adamantine + ) + golem_colour = "4ed" + info_text = "As an Adamantine Golem, you possess special vocal cords allowing you to \"resonate\" messages to all golems." + prefix = "Adamantine" + special_names = null + //The suicide bombers of golemkind /datum/species/golem/plasma name = "Plasma Golem" skinned_type = /obj/item/stack/ore/plasma + golem_colour = "a3d" //Can burn and takes damage from heat heat_level_1 = 360 heat_level_2 = 400 @@ -171,6 +188,7 @@ //Harder to hurt /datum/species/golem/diamond name = "Diamond Golem" + golem_colour = "0ff" brute_mod = 0.3 //70% damage reduction up from 55% burn_mod = 0.3 tox_mod = 0.3 @@ -182,6 +200,7 @@ //Faster but softer and less armoured /datum/species/golem/gold name = "Gold Golem" + golem_colour = "cc0" slowdown = 2 brute_mod = 0.75 //25% damage reduction down from 55% burn_mod = 0.75 @@ -194,34 +213,40 @@ //Heavier, thus higher chance of stunning when punching /datum/species/golem/silver name = "Silver Golem" + golem_colour = "cc0" punchstunthreshold = 9 //60% chance, from 40% skinned_type = /obj/item/stack/ore/silver - info_text = "As a Silver Golem, your attacks have a higher chance of stunning. Being made of silver, your body is immune to most types of magic." + info_text = "As a Silver Golem, your attacks have a higher chance of stunning." prefix = "Silver" special_names = list("Surfer", "Chariot", "Lining") //Harder to stun, deals more damage, but it's even slower /datum/species/golem/plasteel name = "Plasteel Golem" - stunmod = 0.4 + golem_colour = "bbb" + stun_mod = 0.4 punchdamagelow = 12 punchdamagehigh = 21 punchstunthreshold = 18 //still 40% stun chance - slowdown = 5 //pretty fucking slow + slowdown = 5 //diona speed skinned_type = /obj/item/stack/ore/iron info_text = "As a Plasteel Golem, you are slower, but harder to stun, and hit very hard when punching." - attack_verb = "smash" - attack_sound = 'sound/effects/meteorimpact.ogg' //hits pretty hard prefix = "Plasteel" special_names = null + unarmed_type = /datum/unarmed_attack/golem/plasteel + +/datum/unarmed_attack/golem/plasteel + attack_verb = list("smash") + attack_sound = 'sound/effects/meteorimpact.ogg' //More resistant to burn damage //Add ashstorm resistance if we ever port lavaland /datum/species/golem/titanium name = "Titanium Golem" + golem_colour = "fff" skinned_type = /obj/item/stack/ore/titanium info_text = "As a Titanium Golem, you are resistant to burn damage." - burnmod = 0.3 + burn_mod = 0.3 prefix = "Titanium" special_names = list("Dioxide") @@ -229,15 +254,17 @@ //Add ashstorm and lava resistance if we ever port lavaland /datum/species/golem/plastitanium name = "Plastitanium Golem" + golem_colour = "888" skinned_type = /obj/item/stack/ore/titanium info_text = "As a Plastitanium Golem, you are very resistant to burn damage." - burnmod = 0.15 + burn_mod = 0.15 prefix = "Plastitanium" special_names = null //Fast and regenerates... but can only speak like an abductor /datum/species/golem/alloy name = "Alien Alloy Golem" + golem_colour = "333" skinned_type = /obj/item/stack/sheet/mineral/abductor language = "Golem Mindlink" default_language = "Golem Mindlink" @@ -250,7 +277,8 @@ /datum/species/golem/alloy/handle_life(mob/living/carbon/human/H) if(H.stat == DEAD) return - H.heal_overall_damage(2, 2, 0, BODYPART_ORGANIC) + H.adjustBruteLoss(-2) + H.adjustFireLoss(-2) H.adjustToxLoss(-2) H.adjustOxyLoss(-2) @@ -265,7 +293,8 @@ //Regenerates like dionas, less resistant /datum/species/golem/wood name = "Wood Golem" - skinned_type = /obj/item/stack/sheet/mineral/wood + golem_colour = "9E704B" + skinned_type = /obj/item/stack/sheet/wood //Can burn and take damage from heat brute_mod = 0.7 //30% damage reduction down from 55% burn_mod = 1 @@ -307,42 +336,57 @@ //Radioactive /datum/species/golem/uranium name = "Uranium Golem" + golem_colour = "7f0" skinned_type = /obj/item/stack/ore/uranium - info_text = "As an Uranium Golem, you emit radiation pulses every once in a while. It won't harm fellow golems, but organic lifeforms will be affected." - - var/last_event = 0 - var/active = null + info_text = "As an Uranium Golem, you emit radiation. It won't harm fellow golems, but organic lifeforms will be affected." prefix = "Uranium" special_names = list("Oxide", "Rod", "Meltdown") /datum/species/golem/uranium/handle_life(mob/living/carbon/human/H) - if(!active) - if(world.time > last_event+30) - active = 1 - radiation_pulse(H, 50) - last_event = world.time - active = null + for(var/mob/living/L in range(2, H)) + if(isgolem(H)) + continue + to_chat(L, "You are enveloped by a soft green glow emanating from [H].") + L.apply_effect(10, IRRADIATE) ..() +//Ventcrawler +/datum/species/golem/plastic + name = "Plastic Golem" + prefix = "Plastic" + special_names = null + golem_colour = "fff" + skinned_type = /obj/item/stack/sheet/plastic + info_text = "As a Plastic Golem, you are capable of ventcrawling if you're naked." + +/datum/species/golem/plastic/on_species_gain(mob/living/carbon/C, datum/species/old_species) + . = ..() + C.ventcrawler = 1 + +/datum/species/golem/plastic/on_species_loss(mob/living/carbon/C) + . = ..() + C.ventcrawler = initial(C.ventcrawler) + //Immune to physical bullets and resistant to brute, but very vulnerable to burn damage. Dusts on death. /datum/species/golem/sand name = "Sand Golem" + golem_colour = "ffdc8f" skinned_type = /obj/item/stack/ore/glass //this is sand brute_mod = 0.25 burn_mod = 3 info_text = "As a Sand Golem, you are immune to physical bullets and take very little brute damage, but are extremely vulnerable to burn damage and energy weapons. You will also turn to sand when dying, preventing any form of recovery." - attack_sound = 'sound/effects/shovel_dig.ogg' + unarmed_type = /datum/unarmed_attack/golem/sand prefix = "Sand" special_names = list("Castle", "Bag", "Dune", "Worm", "Storm") -/datum/species/golem/sand/handle_death(gibbed, mob/living/carbon/human/H) +/datum/species/golem/sand/handle_death(mob/living/carbon/human/H) H.visible_message("[H] turns into a pile of sand!") for(var/obj/item/W in H) - H.dropItemToGround(W) + H.unEquip(W) for(var/i=1, i <= rand(3, 5), i++) new /obj/item/stack/ore/glass(get_turf(H)) qdel(H) - +/* /datum/species/golem/sand/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H) if(!(P.original == H && P.firer == H)) if(P.flag == "bullet" || P.flag == "bomb") @@ -351,27 +395,31 @@ "The [P.name] sinks harmlessly in [H]'s sandy body!") return BULLET_ACT_BLOCK return BULLET_ACT_HIT +*/ +/datum/unarmed_attack/golem/sand + attack_sound = 'sound/effects/shovel_dig.ogg' //Reflects lasers and resistant to burn damage, but very vulnerable to brute damage. Shatters on death. /datum/species/golem/glass name = "Glass Golem" + golem_colour = "5a96b4aa" //transparent body skinned_type = /obj/item/shard - brutemod = 3 //very fragile - burnmod = 0.25 + brute_mod = 3 //very fragile + burn_mod = 0.25 info_text = "As a Glass Golem, you reflect lasers and energy weapons, and are very resistant to burn damage. However, you are extremely vulnerable to brute damage. On death, you'll shatter beyond any hope of recovery." - attack_sound = 'sound/effects/glassbr2.ogg' + unarmed_type = /datum/unarmed_attack/golem/glass prefix = "Glass" special_names = list("Lens", "Prism", "Fiber", "Bead") -/datum/species/golem/glass/spec_death(gibbed, mob/living/carbon/human/H) +/datum/species/golem/glass/handle_death(mob/living/carbon/human/H) playsound(H, "shatter", 70, 1) H.visible_message("[H] shatters!") for(var/obj/item/W in H) - H.dropItemToGround(W) + H.unEquip(W) for(var/i=1, i <= rand(3, 5), i++) new /obj/item/shard(get_turf(H)) qdel(H) - +/* /datum/species/golem/glass/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H) if(!(P.original == H && P.firer == H)) //self-shots don't reflect if(P.flag == "laser" || P.flag == "energy") @@ -385,16 +433,19 @@ P.preparePixelProjectile(locate(CLAMP(target.x + new_x, 1, world.maxx), CLAMP(target.y + new_y, 1, world.maxy), H.z), H) return BULLET_ACT_FORCE_PIERCE return BULLET_ACT_HIT +*/ +/datum/unarmed_attack/golem/glass + attack_sound = 'sound/effects/glassbr2.ogg' //Teleports when hit or when it wants to /datum/species/golem/bluespace name = "Bluespace Golem" + golem_colour = "33f" skinned_type = /obj/item/stack/ore/bluespace_crystal info_text = "As a Bluespace Golem, you are spatially unstable: You will teleport when hit, and you can teleport manually at a long distance." - attack_verb = "bluespace punch" - attack_sound = 'sound/effects/phasein.ogg' prefix = "Bluespace" special_names = list("Crystal", "Polycrystal") + unarmed_type = /datum/unarmed_attack/golem/bluespace var/datum/action/innate/unstable_teleport/unstable_teleport var/teleport_cooldown = 100 @@ -405,8 +456,6 @@ H.visible_message("[H] teleports!", "You destabilize and teleport!") var/list/turfs = new/list() for(var/turf/T in orange(tele_range, H)) - if(istype(T, /turf/space)) - continue if(T.density) continue if(T.x>world.maxx-tele_range || T.x last_teleport + teleport_cooldown) reactive_teleport(H) - +*/ /datum/species/golem/bluespace/on_species_gain(mob/living/carbon/C, datum/species/old_species) ..() if(ishuman(C)) @@ -464,8 +514,8 @@ /datum/action/innate/unstable_teleport name = "Unstable Teleport" check_flags = AB_CHECK_CONSCIOUS - button_icon_state = "jaunt" - icon_icon = 'icons/mob/actions/actions_spells.dmi' + button_icon_state = "blink" + icon_icon = 'icons/mob/actions/actions.dmi' var/cooldown = 150 var/last_teleport = 0 var/tele_range = 6 @@ -502,24 +552,29 @@ return if(H.buckled) H.buckled.unbuckle_mob() - H.forceMove(picked) + do_teleport(H, picked) last_teleport = world.time UpdateButtonIcon() //action icon looks unavailable sleep(cooldown + 5) UpdateButtonIcon() //action icon looks available again +/datum/unarmed_attack/golem/bluespace + attack_verb = "bluespace punch" + attack_sound = 'sound/effects/phasein.ogg' + //honk /datum/species/golem/bananium name = "Bananium Golem" + golem_colour = "ff0" + //say_mod = "honks" punchdamagelow = 0 punchdamagehigh = 1 punchstunthreshold = 2 //Harmless and can't stun skinned_type = /obj/item/stack/ore/bananium info_text = "As a Bananium Golem, you are made for pranking. Your body emits natural honks, and you can barely even hurt people when punching them. Your skin also bleeds banana peels when damaged." - attack_verb = "honk" - attack_sound = 'sound/items/airhorn2.ogg' prefix = "Bananium" special_names = null + unarmed_type = /datum/unarmed_attack/golem/bananium var/last_honk = 0 var/honkooldown = 0 @@ -527,16 +582,20 @@ var/banana_cooldown = 100 var/active = null -/datum/species/golem/bananium/on_species_gain(mob/living/carbon/C, datum/species/old_species) +/datum/species/golem/bananium/on_species_gain(mob/living/carbon/human/H) ..() last_banana = world.time last_honk = world.time + H.job = "Clown" + H.mutations.Add(CLUMSY) + H.mutations.Add(COMIC) + H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/drinks/bottle/bottleofbanana(H), slot_r_store) + H.equip_to_slot_or_del(new /obj/item/bikehorn(H), slot_l_store) -/datum/species/golem/bananium/random_name(gender,unique,lastname) - var/clown_name = pick(GLOB.clown_names) - var/golem_name = "[uppertext(clown_name)]" +/datum/species/golem/bananium/get_random_name() + var/golem_name = pick(GLOB.clown_names) return golem_name - +/* /datum/species/golem/bananium/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style) ..() if(world.time > last_banana + banana_cooldown && M != H && M.a_intent != INTENT_HELP) @@ -565,7 +624,7 @@ else new/obj/item/grown/bananapeel/specialpeel(get_turf(H)) last_banana = world.time - +*/ /datum/species/golem/bananium/handle_life(mob/living/carbon/human/H) if(!active) if(world.time > last_honk + honkooldown) @@ -576,452 +635,41 @@ active = null ..() -/datum/species/golem/bananium/spec_death(gibbed, mob/living/carbon/human/H) +/datum/species/golem/bananium/handle_death(mob/living/carbon/human/H) playsound(get_turf(H), 'sound/misc/sadtrombone.ogg', 70, 0) -/datum/species/golem/bananium/get_spans() - return list(SPAN_CLOWN) +/datum/unarmed_attack/golem/bananium + attack_verb = list("honk") + attack_sound = 'sound/items/airhorn2.ogg' - -/datum/species/golem/runic - name = "Runic Golem" - id = "runic golem" - limbs_id = "cultgolem" - sexes = FALSE - info_text = "As a Runic Golem, you possess eldritch powers granted by the Elder Goddess Nar'Sie." - species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYES) //no mutcolors - prefix = "Runic" +//... +/datum/species/golem/tranquillite + name = "Tranquillite Golem" + prefix = "Tranquillite" special_names = null + golem_colour = "fff" + skinned_type = /obj/item/stack/ore/tranquillite + info_text = "As a Tranquillite Golem, you are capable of creating invisible walls, and can regenerate by drinking your bottle of Nothing." + unarmed_type = /datum/unarmed_attack/golem/tranquillite - var/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/golem/phase_shift - var/obj/effect/proc_holder/spell/targeted/abyssal_gaze/abyssal_gaze - var/obj/effect/proc_holder/spell/targeted/dominate/dominate - -/datum/species/golem/runic/random_name(gender,unique,lastname) - var/edgy_first_name = pick("Razor","Blood","Dark","Evil","Cold","Pale","Black","Silent","Chaos","Deadly","Coldsteel") - var/edgy_last_name = pick("Edge","Night","Death","Razor","Blade","Steel","Calamity","Twilight","Shadow","Nightmare") //dammit Razor Razor - var/golem_name = "[edgy_first_name] [edgy_last_name]" +/datum/species/golem/tranquillite/get_random_name() + var/golem_name = pick(GLOB.mime_names) return golem_name -/datum/species/golem/runic/on_species_gain(mob/living/carbon/C, datum/species/old_species) - . = ..() - C.faction |= "cult" - phase_shift = new - phase_shift.charge_counter = 0 - C.AddSpell(phase_shift) - abyssal_gaze = new - abyssal_gaze.charge_counter = 0 - C.AddSpell(abyssal_gaze) - dominate = new - dominate.charge_counter = 0 - C.AddSpell(dominate) - -/datum/species/golem/runic/on_species_loss(mob/living/carbon/C) - . = ..() - C.faction -= "cult" - if(phase_shift) - C.RemoveSpell(phase_shift) - if(abyssal_gaze) - C.RemoveSpell(abyssal_gaze) - if(dominate) - C.RemoveSpell(dominate) - -/datum/species/golem/runic/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) - if(chem.id == "holywater") - H.adjustFireLoss(4) - H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM) - - if(chem.id == "unholywater") - H.adjustBruteLoss(-4) - H.adjustFireLoss(-4) - H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM) - - -/datum/species/golem/clockwork - name = "Clockwork Golem" - id = "clockwork golem" - say_mod = "clicks" - limbs_id = "clockgolem" - info_text = "As a Clockwork Golem, you are faster than other types of golems. On death, you will break down into scrap." - species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYES) - inherent_biotypes = list(MOB_ROBOTIC, MOB_HUMANOID) - armor = 20 //Reinforced, but much less so to allow for fast movement - attack_verb = "smash" - attack_sound = 'sound/magic/clockwork/anima_fragment_attack.ogg' - sexes = FALSE - speedmod = 0 - damage_overlay_type = "synth" - prefix = "Clockwork" - special_names = list("Remnant", "Relic", "Scrap", "Vestige") //RIP Ratvar - var/has_corpse - -/datum/species/golem/clockwork/on_species_gain(mob/living/carbon/human/H) - . = ..() - H.faction |= "ratvar" - -/datum/species/golem/clockwork/on_species_loss(mob/living/carbon/human/H) - if(!is_servant_of_ratvar(H)) - H.faction -= "ratvar" - . = ..() - -/datum/species/golem/clockwork/get_spans() - return SPAN_ROBOT //beep - -/datum/species/golem/clockwork/spec_death(gibbed, mob/living/carbon/human/H) - gibbed = !has_corpse ? FALSE : gibbed - . = ..() - if(!has_corpse) - var/turf/T = get_turf(H) - H.visible_message("[H]'s exoskeleton shatters, collapsing into a heap of scrap!") - playsound(H, 'sound/magic/clockwork/anima_fragment_death.ogg', 62, TRUE) - for(var/i in 1 to rand(3, 5)) - new/obj/item/clockwork/alloy_shards/small(T) - new/obj/item/clockwork/alloy_shards/clockgolem_remains(T) - qdel(H) - -/datum/species/golem/clockwork/no_scrap //These golems are created through the herald's beacon and leave normal corpses on death. - id = "clockwork golem servant" - armor = 15 //Balance reasons make this armor weak - no_equip = list() - nojumpsuit = FALSE - has_corpse = TRUE - blacklisted = TRUE - dangerous_existence = TRUE - random_eligible = FALSE - info_text = "As a Clockwork Golem Servant, you are faster than other types of golems." //warcult golems leave a corpse - -/datum/species/golem/cloth - name = "Cloth Golem" - id = "cloth golem" - limbs_id = "clothgolem" - sexes = FALSE - info_text = "As a Cloth Golem, you are able to reform yourself after death, provided your remains aren't burned or destroyed. You are, of course, very flammable. \ - Being made of cloth, your body is magic resistant and faster than that of other golems, but weaker and less resilient." - species_traits = list(NOBLOOD,NO_UNDERWEAR) //no mutcolors, and can burn - inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_NOBREATH,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOGUNS) - inherent_biotypes = list(MOB_UNDEAD, MOB_HUMANOID) - armor = 15 //feels no pain, but not too resistant - burnmod = 2 // don't get burned - speedmod = 1 // not as heavy as stone - punchdamagelow = 4 - punchstunthreshold = 7 - punchdamagehigh = 8 // not as heavy as stone - prefix = "Cloth" - special_names = null - -/datum/species/golem/cloth/on_species_gain(mob/living/carbon/C, datum/species/old_species) +/datum/species/golem/tranquillite/on_species_gain(mob/living/carbon/human/H) ..() - C.add_trait(TRAIT_HOLY, SPECIES_TRAIT) + H.job = "Mime" + H.equip_to_slot_or_del(new /obj/item/clothing/head/beret(H), slot_head) + H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing(H), slot_r_store) + H.equip_to_slot_or_del(new /obj/item/cane(H), slot_l_hand) + if(H.mind) + H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall(null)) + H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mime/speak(null)) + H.mind.miming = TRUE -/datum/species/golem/cloth/on_species_loss(mob/living/carbon/C) - C.remove_trait(TRAIT_HOLY, SPECIES_TRAIT) - ..() - -/datum/species/golem/cloth/check_roundstart_eligible() - if(SSevents.holidays && SSevents.holidays[HALLOWEEN]) - return TRUE - return ..() - -/datum/species/golem/cloth/random_name(gender,unique,lastname) - var/pharaoh_name = pick("Neferkare", "Hudjefa", "Khufu", "Mentuhotep", "Ahmose", "Amenhotep", "Thutmose", "Hatshepsut", "Tutankhamun", "Ramses", "Seti", \ - "Merenptah", "Djer", "Semerkhet", "Nynetjer", "Khafre", "Pepi", "Intef", "Ay") //yes, Ay was an actual pharaoh - var/golem_name = "[pharaoh_name] \Roman[rand(1,99)]" - return golem_name - -/datum/species/golem/cloth/handle_life(mob/living/carbon/human/H) - if(H.fire_stacks < 1) - H.adjust_fire_stacks(1) //always prone to burning - ..() - -/datum/species/golem/cloth/spec_death(gibbed, mob/living/carbon/human/H) - if(gibbed) - return - if(H.on_fire) - H.visible_message("[H] burns into ash!") - H.dust(just_ash = TRUE) - return - - H.visible_message("[H] falls apart into a pile of bandages!") - new /obj/structure/cloth_pile(get_turf(H), H) - ..() - -/obj/structure/cloth_pile - name = "pile of bandages" - desc = "It emits a strange aura, as if there was still life within it..." - max_integrity = 50 - armor = list("melee" = 90, "bullet" = 90, "laser" = 25, "energy" = 80, "bomb" = 50, "bio" = 100, "fire" = -50, "acid" = -50) - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "pile_bandages" - resistance_flags = FLAMMABLE - - var/revive_time = 900 - var/mob/living/carbon/human/cloth_golem - -/obj/structure/cloth_pile/Initialize(mapload, mob/living/carbon/human/H) - . = ..() - if(!QDELETED(H) && is_species(H, /datum/species/golem/cloth)) - H.unequip_everything() - H.forceMove(src) - cloth_golem = H - to_chat(cloth_golem, "You start gathering your life energy, preparing to rise again...") - addtimer(CALLBACK(src, .proc/revive), revive_time) - else - return INITIALIZE_HINT_QDEL - -/obj/structure/cloth_pile/Destroy() - if(cloth_golem) - QDEL_NULL(cloth_golem) - return ..() - -/obj/structure/cloth_pile/burn() - visible_message("[src] burns into ash!") - new /obj/effect/decal/cleanable/ash(get_turf(src)) - ..() - -/obj/structure/cloth_pile/proc/revive() - if(QDELETED(src) || QDELETED(cloth_golem)) //QDELETED also checks for null, so if no cloth golem is set this won't runtime - return - if(cloth_golem.suiciding || cloth_golem.hellbound) - QDEL_NULL(cloth_golem) - return - - invisibility = INVISIBILITY_MAXIMUM //disappear before the animation - new /obj/effect/temp_visual/mummy_animation(get_turf(src)) - if(cloth_golem.revive(full_heal = TRUE, admin_revive = TRUE)) - cloth_golem.grab_ghost() //won't pull if it's a suicide - sleep(20) - cloth_golem.forceMove(get_turf(src)) - cloth_golem.visible_message("[src] rises and reforms into [cloth_golem]!","You reform into yourself!") - cloth_golem = null - qdel(src) - -/obj/structure/cloth_pile/attackby(obj/item/P, mob/living/carbon/human/user, params) - . = ..() - - if(resistance_flags & ON_FIRE) - return - - if(P.is_hot()) - visible_message("[src] bursts into flames!") - fire_act() - -/datum/species/golem/plastic - name = "Plastic Golem" - id = "plastic golem" - prefix = "Plastic" - special_names = null - fixed_mut_color = "fff" - info_text = "As a Plastic Golem, you are capable of ventcrawling and passing through plastic flaps as long as you are naked." - -/datum/species/golem/plastic/on_species_gain(mob/living/carbon/C, datum/species/old_species) - . = ..() - C.ventcrawler = VENTCRAWLER_NUDE - -/datum/species/golem/plastic/on_species_loss(mob/living/carbon/C) - . = ..() - C.ventcrawler = initial(C.ventcrawler) - -/datum/species/golem/bronze - name = "Bronze Golem" - id = "bronze golem" - prefix = "Bronze" - special_names = list("Bell") - fixed_mut_color = "cd7f32" - info_text = "As a Bronze Golem, you are very resistant to loud noises, and make loud noises if something hard hits you, however this ability does hurt your hearing." - special_step_sounds = list('sound/machines/clockcult/integration_cog_install.ogg', 'sound/magic/clockwork/fellowship_armory.ogg' ) - mutantears = /obj/item/organ/ears/bronze - var/last_gong_time = 0 - var/gong_cooldown = 150 - -/datum/species/golem/bronze/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H) - if(!(world.time > last_gong_time + gong_cooldown)) - return BULLET_ACT_HIT - if(P.flag == "bullet" || P.flag == "bomb") - gong(H) - return BULLET_ACT_HIT - -/datum/species/golem/bronze/spec_hitby(atom/movable/AM, mob/living/carbon/human/H) - ..() - if(world.time > last_gong_time + gong_cooldown) - gong(H) - -/datum/species/golem/bronze/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style) - ..() - if(world.time > last_gong_time + gong_cooldown && M.a_intent != INTENT_HELP) - gong(H) - -/datum/species/golem/bronze/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H) - ..() - if(world.time > last_gong_time + gong_cooldown) - gong(H) - -/datum/species/golem/bronze/on_hit(obj/item/projectile/P, mob/living/carbon/human/H) - ..() - if(world.time > last_gong_time + gong_cooldown) - gong(H) - -/datum/species/golem/bronze/proc/gong(mob/living/carbon/human/H) - last_gong_time = world.time - for(var/mob/living/M in get_hearers_in_view(7,H)) - if(M.stat == DEAD) //F - return - if(M == H) - H.show_message("You cringe with pain as your body rings around you!", 2) - H.playsound_local(H, 'sound/effects/gong.ogg', 100, TRUE) - H.soundbang_act(2, 0, 100, 1) - H.jitteriness += 7 - var/distance = max(0,get_dist(get_turf(H),get_turf(M))) - switch(distance) - if(0 to 1) - M.show_message("GONG!", 2) - M.playsound_local(H, 'sound/effects/gong.ogg', 100, TRUE) - M.soundbang_act(1, 0, 30, 3) - M.confused += 10 - M.jitteriness += 4 - SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "gonged", /datum/mood_event/loud_gong) - if(2 to 3) - M.show_message("GONG!", 2) - M.playsound_local(H, 'sound/effects/gong.ogg', 75, TRUE) - M.soundbang_act(1, 0, 15, 2) - M.jitteriness += 3 - SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "gonged", /datum/mood_event/loud_gong) - else - M.show_message("GONG!", 2) - M.playsound_local(H, 'sound/effects/gong.ogg', 50, TRUE) - - -/datum/species/golem/cardboard //Faster but weaker, can also make new shells on its own - name = "Cardboard Golem" - id = "cardboard golem" - prefix = "Cardboard" - special_names = list("Box") - info_text = "As a Cardboard Golem, you aren't very strong, but you are a bit quicker and can easily create more brethren by using cardboard on yourself." - species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYES) - inherent_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOGUNS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER) - limbs_id = "c_golem" //special sprites - attack_verb = "whips" - attack_sound = 'sound/weapons/whip.ogg' - miss_sound = 'sound/weapons/etherealmiss.ogg' - fixed_mut_color = null - armor = 25 - burnmod = 1.25 - heatmod = 2 - speedmod = 1.5 - punchdamagelow = 4 - punchstunthreshold = 7 - punchdamagehigh = 8 - var/last_creation - var/brother_creation_cooldown = 300 - -/datum/species/golem/cardboard/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H) - . = ..() - if(user != H || intent != INTENT_HELP) - return FALSE //forced reproduction is rape. - if(istype(I, /obj/item/stack/sheet/cardboard)) - var/obj/item/stack/sheet/cardboard/C = I - if(last_creation + brother_creation_cooldown < world.time) //no cheesing dork - return - to_chat(H, "You attempt to create a new cardboard brother.") - if(do_after(user, 30, target = user)) - if(last_creation + brother_creation_cooldown < world.time) //no cheesing dork - return - if(!C.use(10)) - to_chat(H, "You do not have enough cardboard!") - return FALSE - to_chat(H, "You create a new cardboard golem shell.") - create_brother(H.loc) - -/datum/species/golem/cardboard/proc/create_brother(var/location) - new /obj/effect/mob_spawn/human/golem/servant(location, /datum/species/golem/cardboard, owner) - last_creation = world.time - -/datum/species/golem/leather - name = "Leather Golem" - id = "leather golem" - special_names = list("Face", "Man") - inherent_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOGUNS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER, TRAIT_STRONG_GRABBER) - prefix = "Leather" - fixed_mut_color = "624a2e" - info_text = "As a Leather Golem, you are flammable, but you can grab things with incredible ease, allowing all your grabs to start at a strong level." - grab_sound = 'sound/weapons/whipgrab.ogg' - attack_sound = 'sound/weapons/whip.ogg' - -/datum/species/golem/durathread - name = "Durathread Golem" - id = "durathread golem" - prefix = "Durathread" - limbs_id = "d_golem" - special_names = list("Boll","Weave") - species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYES) - fixed_mut_color = null - inherent_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOGUNS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER) - info_text = "As a Durathread Golem, your strikes will cause those your targets to start choking, but your woven body won't withstand fire as well." - -/datum/species/golem/durathread/spec_unarmedattacked(mob/living/carbon/human/user, mob/living/carbon/human/target) - . = ..() - target.apply_status_effect(STATUS_EFFECT_CHOKINGSTRAND) - -/datum/species/golem/bone - name = "Bone Golem" - id = "bone golem" - say_mod = "rattles" - prefix = "Bone" - limbs_id = "b_golem" - special_names = list("Head", "Broth", "Fracture") - liked_food = GROSS | MEAT | RAW - toxic_food = null - species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYES) - inherent_biotypes = list(MOB_UNDEAD, MOB_HUMANOID) - mutanttongue = /obj/item/organ/tongue/bone - sexes = FALSE - fixed_mut_color = null - inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_NOGUNS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_FAKEDEATH,TRAIT_CALCIUM_HEALER) - info_text = "As a Bone Golem, You have a powerful spell that lets you chill your enemies with fear, and milk heals you! Just make sure to watch our for bone-hurting juice." - var/datum/action/innate/bonechill/bonechill - -/datum/species/golem/bone/on_species_gain(mob/living/carbon/C, datum/species/old_species) - ..() - if(ishuman(C)) - bonechill = new - bonechill.Grant(C) - -/datum/species/golem/bone/on_species_loss(mob/living/carbon/C) - if(bonechill) - bonechill.Remove(C) - ..() - -/datum/action/innate/bonechill - name = "Bone Chill" - desc = "Rattle your bones and strike fear into your enemies!" - check_flags = AB_CHECK_CONSCIOUS - icon_icon = 'icons/mob/actions/actions_spells.dmi' - button_icon_state = "bonechill" - var/cooldown = 600 - var/last_use - var/snas_chance = 3 - -/datum/action/innate/bonechill/Activate() - if(world.time < last_use + cooldown) - to_chat("You aren't ready yet to rattle your bones again") - owner.visible_message("[owner] rattles [owner.p_their()] bones harrowingly.", "You rattle your bones") - last_use = world.time - if(prob(snas_chance)) - playsound(get_turf(owner),'sound/magic/RATTLEMEBONES2.ogg', 100) - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - var/mutable_appearance/badtime = mutable_appearance('icons/mob/human_parts.dmi', "b_golem_eyes", -FIRE_LAYER-0.5) - badtime.appearance_flags = RESET_COLOR - H.overlays_standing[FIRE_LAYER+0.5] = badtime - H.apply_overlay(FIRE_LAYER+0.5) - addtimer(CALLBACK(H, /mob/living/carbon/.proc/remove_overlay, FIRE_LAYER+0.5), 25) - else - playsound(get_turf(owner),'sound/magic/RATTLEMEBONES.ogg', 100) - for(var/mob/living/L in orange(7, get_turf(owner))) - if((MOB_UNDEAD in L.mob_biotypes) || isgolem(L)) - return //Do not affect our brothers - to_chat(L, "A spine-chilling sound chills you to the bone!") - L.apply_status_effect(/datum/status_effect/bonechill) - SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "spooked", /datum/mood_event/spooked) +/datum/unarmed_attack/golem/tranquillite + attack_sound = null + miss_sound = null //Golem abstract items @@ -1040,11 +688,15 @@ desc = "a golem's thick outter shell" icon_state = "golem" item_state = "golem" - body_parts_covered = HEAD|UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - flags_inv = HIDEGLOVES|HIDESHOES - flags = ABSTRACT | NODROP | THICKMATERIAL + gas_transfer_coefficient = 0.01 + permeability_coefficient = 0.02 + body_parts_covered = HEAD | UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS + flags_inv = HIDEGLOVES | HIDESHOES + flags = STOPSPRESSUREDMAGE | ABSTRACT | NODROP | THICKMATERIAL flags_size = ONESIZEFITSALL - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) + cold_protection = HEAD | UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS + min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 0) /obj/item/clothing/shoes/golem name = "golem's feet" diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index d565ef624d2..c1d7fb0fbc0 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -530,10 +530,7 @@ required_other = 1 /datum/chemical_reaction/slimegolem/on_reaction(datum/reagents/holder) - feedback_add_details("slime_cores_used","[type]") - var/obj/effect/golemrune/Z = new /obj/effect/golemrune - Z.forceMove(get_turf(holder.my_atom)) - notify_ghosts("Golem rune created in [get_area(Z)].", source = Z) + new /obj/item/stack/sheet/mineral/adamantine(get_turf(holder.my_atom)) //Bluespace /datum/chemical_reaction/slimefloor2 diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index af3088b514b..ca606720c7b 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -889,3 +889,13 @@ materials = list(MAT_METAL = 1000) build_path = /obj/item/safe_internals category = list("initial", "Construction") + +/datum/design/golem_shell + name = "Golem Shell Construction" + desc = "Allows for the construction of a Golem Shell." + id = "golem" + build_type = AUTOLATHE + materials = list(MAT_METAL = 40000) + build_path = /obj/item/golem_shell + category = list("Imported") + diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm index 32f5ab879cd..4d1195e29ce 100644 --- a/code/modules/research/research.dm +++ b/code/modules/research/research.dm @@ -386,3 +386,13 @@ datum/tech/robotics name = default_name desc = default_desc blueprint = null + +/obj/item/disk/design_disk/golem_shell + name = "golem creation disk" + desc = "A gift from the Liberator." + icon_state = "datadisk1" + +/obj/item/disk/design_disk/golem_shell/Initialize() + . = ..() + var/datum/design/golem_shell/G = new + blueprint = G \ No newline at end of file diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 654b1fe374a..f5f0d33c69a 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -390,7 +390,7 @@ qdel(src) ////////Adamantine Golem stuff I dunno where else to put it - +/* /obj/effect/golemrune anchored = 1 desc = "a strange rune used to create golems. It glows when spirits are nearby." @@ -463,10 +463,7 @@ return ghosts.Add(O) to_chat(O, "You are signed up to be a golem.") - - - - +*/ /obj/effect/timestop anchored = 1 name = "chronofield" diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index fe00b6b3611..c5230ea689f 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -826,7 +826,6 @@ shuttleId = "specops" possible_destinations = "specops_home;specops_away" - /obj/machinery/computer/shuttle/white_ship name = "White Ship Console" desc = "Used to control the White Ship." @@ -834,6 +833,13 @@ shuttleId = "whiteship" possible_destinations = "whiteship_away;whiteship_home;whiteship_z4" +/obj/machinery/computer/shuttle/golem_ship + name = "Golem Ship Console" + desc = "Used to control the Golem Ship." + circuit = /obj/item/circuitboard/golem_ship + shuttleId = "freegolem" + possible_destinations = "freegolem_z3;freegolem_z5;freegolem_z1;freegolem_z6" + /obj/machinery/computer/shuttle/vox name = "skipjack control console" req_access = list(access_vox) diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index 1ed5b3cf8e9..94f6be4cc9a 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -51,6 +51,35 @@ var/static/regex/multispin_words = regex("like a record baby") /obj/item/organ/internal/vocal_cords/proc/handle_speech(message) //change the message return message +/obj/item/organ/internal/adamantine_resonator + name = "adamantine resonator" + desc = "Fragments of adamantine exist in all golems, stemming from their origins as purely magical constructs. These are used to \"hear\" messages from their leaders." + parent_organ = "head" + slot = "adamantine_resonator" + icon_state = "adamantine_resonator" + +/obj/item/organ/internal/vocal_cords/adamantine + name = "adamantine vocal cords" + desc = "When adamantine resonates, it causes all nearby pieces of adamantine to resonate as well. Adamantine golems use this to broadcast messages to nearby golems." + actions_types = list(/datum/action/item_action/organ_action/use/adamantine_vocal_cords) + icon_state = "adamantine_cords" + +/datum/action/item_action/organ_action/use/adamantine_vocal_cords/Trigger() + if(!IsAvailable()) + return + var/message = input(owner, "Resonate a message to all nearby golems.", "Resonate") + if(QDELETED(src) || QDELETED(owner) || !message) + return + owner.say(".x[message]") + +/obj/item/organ/internal/vocal_cords/adamantine/handle_speech(message) + var/msg = "[owner.real_name] resonates, \"[message]\"" + for(var/m in GLOB.player_list) + if(iscarbon(m)) + var/mob/living/carbon/C = m + if(C.get_organ_slot("adamantine_resonator")) + to_chat(C, msg) + //Colossus drop, forces the listeners to obey certain commands /obj/item/organ/internal/vocal_cords/colossus name = "divine vocal cords" diff --git a/config/example/config.txt b/config/example/config.txt index 39a1b13d23b..69a5ba67b73 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -97,6 +97,12 @@ PROBABILITY ABDUCTION 0 PROBABILITY DEVIL 0 PROBABILITY DEVILAGENTS 0 +## Probability in % for Free Golems to spawn at roundstart, set to 0 for no golems +PROB_FREEGOLEMS 50 + +## Uncomment to allow free golems on all roundtypes. Otherwise, disabled on wiz, raging mages, blob, and nuclear. +#UNRESTRICTED_FREEGOLEMS + ## Maximum cycles shadowlings can remain unhatched before they take damage. 1800 = 60 minutes, 900 = 30 minutes, 0 = feature disabled. SHADOWLING_MAX_AGE 0 diff --git a/goon/browserassets/css/browserOutput-dark.css b/goon/browserassets/css/browserOutput-dark.css index 30618df6fa5..4c4412bd877 100644 --- a/goon/browserassets/css/browserOutput-dark.css +++ b/goon/browserassets/css/browserOutput-dark.css @@ -368,6 +368,7 @@ h1.alert, h2.alert {color: #FFF;} .orange {color: #ffa500;} .orangei {color: #ffa500; font-style: italic;} .orangeb {color: #ffa500; font-weight: bold;} +.resonate {color: #298F85;} .revennotice {color: #1d29C3;} .revenboldnotice {color: #1d29C3; font-weight: bold;} diff --git a/goon/browserassets/css/browserOutput.css b/goon/browserassets/css/browserOutput.css index 234c5ac2274..047705282c7 100644 --- a/goon/browserassets/css/browserOutput.css +++ b/goon/browserassets/css/browserOutput.css @@ -365,6 +365,7 @@ h1.alert, h2.alert {color: #000000;} .orange {color: #ffa500;} .orangei {color: #ffa500; font-style: italic;} .orangeb {color: #ffa500; font-weight: bold;} +.resonate {color: #298F85;} .revennotice {color: #1d2953;} .revenboldnotice {color: #1d2953; font-weight: bold;} diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index 07680638b6be0689116bec9121469b6bfbe7a988..b8bd2933bbc14fafee130963aaa0b7ce09e1111e 100644 GIT binary patch delta 17003 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 delta 16823 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 GiTf8HQF#Uc delta 18251 zcmbTdbyOB#^fx**NQZQzgrsz*fHVq-ba!_%53MwUbhjWO-61Jm(hU;Q-Ehb6d*5}} zy6bn}KkgsTGjnF<)IR&{v*WWz3gE+Y;A3Baa^C76UEi3wm^fQGx>`Bd1Au3Gfo5lP z8V8ODgMpD53FOPB>;imTD|hdG#qJgFmfPXBrZZ{odNJYW{`^ zB01sQxVyaAIXQj8A8W`9q1V5Qxfi`D9of-oejHI!gRyH8oPn zfwS~CZV84fw@ofnmY84g(;e$K=2MD7&|@1_!`!;Ls@J%#d+9LoCsoYu<5rhS|FvR! zz`(+}mn|-1)pbSx^T*SpJ3k$Jqli{)T;net{3z;0f5uYg*94-f&5f@EDD>hFrHNY* zh^qHU-r7t4i1*R5=L=@o_`6^pCoY?%PwsUp=_B842E#{DE0iGJ@2Ko!R@Op&3pTDZ z?$o_t{Ua@X!Y_BiA$P+scY`X2jYXOt_VICw!;)6LQ__;;E&L3%&e)Bz=-`8&glsX3 zd1tC9>lEtOo^#bmRV|iBtGnuPoq_j>r#EUhO;n={&o7t15e9q^wr)dLaOeUUY86x( zq5sp7>Q2>uEyU*Tn3zbLwcYRL;BatvhX$c5QD5eoil>a(ZD*ju!W~BGeXuD_hRQ4W zjadwI?lh@-V&ia=$y;J%sve2W0+wfu(=a8WkEkNWmgHn)-iB{V(32M?;dyrH)*W9^ ziEM~wV@g$;OK$IRv+^pzzOJ_7)Y%YZzOF$giR&YsDW0Xhu&JxRUY2Hy03T?_Jo|(x z#aofLThwsjpYrcnt78)MDCk(Pt+mEBF0Qa@riy!% zhWam9Fu0@)THNf?tSmV=ke4gLeBu=ID{SNWNWY4e^cI=TrD$t8;(mU;B_wI15uu8$ z@6nGsqv`XP#+4jSKNl07hK>w%(or@O0Cf3kU@h;&}3IZdE)`-=47ZGcUT zzQ!X<$i5lP)ftI@>o-$!^t9OP23ylZs=N)PzMW6vr9=hn>wR|-{}}%fK6_6;@{*?> zzWOsly&Om>{k8U_zKWfK_5}{!Pdr3CULy=AxD@UY*s}p@##gWCID%Nhqb1;rrN-Wg ze@1`C#>M{$^)JIG)MvS4B)Xl&r~!zo)WIyKDuOh3505*G@@_>!yJaQb0`1$oMNOq8 zd#xJ3-BtvzGIcUu%4oD0xbM&Y0ASdn*MP^8n`Sd;_3oW078^+*Gm$S``XGL-b(pgF z_&JKIuI?t@Z6GxV&_6OFc9!nr_U*X8n1pue2N4Z;235j7+vjYn(dZ@sHaLY9M9ykA+CT83~0SOq^};_q}IASp8zQqh~OyqotwDANcHOJFUx#~WL3cz~Ktzo=MrdokiJaqac@zmq~( z_g{V1zVl}|J#k00xBnh3d%pM0eu*|Jaf$NW;`@^ynLYMxHNV5uUldjNjl)0}_Co|p zgsF)m)X8pwMnx4&zlbN~HF?L4LGahF&Wjm?Bivq#@Oc%T*F{IH2*2ZNRoIbW=e77f z=TiwiS*!>!j3qJ6g{m^WX7?XbVOXE}UW@)j0y^6G9z)W$M3~C2CKR#^yY?!cEdn|h zJ%5-Y#5Nq_IbEN)tuLJlMS&M!vEIP8h2jj!!BHxY&Fo^M%Q(b49K9@$Af@}^BGaQk zJOV<`4MI8hxdzB}Wk7s39Y6bIMrohni~d3Ej=k#uoQr405W$b0MjD^0`_A1LKLjhRi?qBt5>oMyrP=6G|)P^>(HC z0&UMJE#Me&4eO1x^bab~_NgQKU7idL4UNR5eC&CvPF5u*)S@FT5u2{z)sa`>(!B?R zNJv*0w#hvApvnb<-vmQKNUAtmk;yIJ2VmzXLxRNu(`u%KbyA?CQ9poIRONT)UT4?| ze{vQh_V@{^2%13Kc*sW4F)c;xcuDd$d~b!T_@MR6Ehne%tspYcC#su2P`hb$YYGci z)2cLtL$0`w7#Ci?-{47(5TuW5v%bB;c>lpb#vLVr?(99=hhoz=nT1Dn$PF54_$Ky` z7<#^KlDA!~J5*|K!9b)3_JlEpp~+?shqWa+m0BBk@I%Q{*tybqJ&?Sqb=STgj{8x| zi9oG=wpgBEOYYV_36YMcEpF!UzS(t-T}<(YkGcX)KFVRUR){EVr^4=c(lBB{FW>2W z2D9S1X5HUX^T4eyKno9?Av7&W(we+gP*5{#ms>eIA6==R=-0io*UH&xb9&GrYclo_ zZ_EX6C;U7T+jOL1i}wvDFU7dnSgQ;;VIQ2&|YutV!X*AVeh|q{UwWp zZ!+?6zHB~y%{iHxPt4x;*Jvb}U2gk&5>?^%#ggHa>_oKGW`s+bGdffYIv%Q#!@Cch z1&aOYk6uU@0=iGrq2*Xd?F+(aGS>c+%b=3N#+C=uHc!nIRaZg!49DfKe(uTQvCp@; zH%dNycJzE=_zx+C?{e@jq|eeW?dL7+{poM>l=38bc9xp!9j}j#Y!@4FTYatwTgLD6 zQ!1^jtjtkl;zf5Cx(;E^C#_SF3D86Zpyk(Dag7?R_%~W5J^e#RMl^j5unOGJS*O^k&^}~UB%4xWz zRu+!o&P1gPY9oGd%Wh9$_}QP$E(22RfP?r(>A!x4pp$@nZTtKCSTle2Fv)l^mYO~4 z<+i&&ziRL6|68{eixi{}~AZt|0y{^2`;?$Ny; zv({FDE}+VC8~^w0!9#t)4g-fH+CSe^*o^}-Rt&uc;bFM!w#q!fJ^RV7v~99lyz%A) z{Q;7~AN;_7vnS@YP5v#|a=JTYC_wQw&!F9Z-N)tm{9Z--h$1u11cM*Xg`IR64QhIu z&IeR^(k!Ntd9a>STdv@T_|JI)AS=mAbmt zU`(6U=5^WB)@as>(aSft`4xqtIph?ihJQ~%BGb`Bt+U0A4-csS@%qWs$mN-K+`{$0 zk~Y_EILQjM@3cM_4aMBq{PtLYJDw;k3Jym6ar4Q<=3MSJ|48{Z*!voef@}%9>sj12 zVXOcVVUf$ry>_#LV_iTt=BmbeiKOZJ9@;U)E)PEPZ+y92Px|VtT|(3LR@6Y+^|YLb zC*x9Hi@?T55rL?qUNVR7N~5kwJOjZ}M9(u7NlExnOfqvd&dAzfmAWsnv4%AV`}?-l z9&7n3x7L602k2yAbfM4dbdqlf9alQUXiX2FVD+4F{CqzixVi9Cz8t-fUtyq6wST{v zWFkT{>-hJp?R-sk#mC7)B)=YzuEnG;I)$e*devie@jjYDDAa1QP^)bBd$XeNWhs_wVUug_G z=@VwtSm4gS)@KwqLD*|loQ@6-`$hgA@KvD*C|Ir^32n~%tZK)kJ%Z}8F#v+!?fOMs z9@?y~C~jlXldsB;4({0h4%R#cd&k1zWÐs`G#FreS4`N&!h%Hv}o@Mf~tIvcp3l9nn>?8p7DFpF=gdglp z(d>NDwj~v$0|etilR=cg(MRJ6_+Qumr5Swv-;e*#MUiJw)WQki<|aX6T-@P1Y`V8{ za=28l6EhD5@9K=YkdXm&LKepqPTUMBgf+CELH*;_(m|hQc7+Q$w|a>vC|F0B85x1> zHeCDJ%7Eci9&`iW6C^hMmbdgfGOCDgaoA*J;}*yqS~{ul?nvtqs< zY%5o?EqbD`U#T)T7apC6EkVx*G9ya;?@#*7ocBBh6OjJWFN(QfHG^B^i5&cBsg>oi z$~T-gU}UG3863tI3h|ICn%(Z}*fwq>JvedS3bZ}zuX6JP6dsG6!0NP)Lyy|Y2>=sv zXd_9T_UDWGFv$HylwbC(va%5qlXl`4&UjwPxobv;61TwI56+WMBk#`{^yop^ z^Q13dem0!2>bHDcW#8qjjT1UeyPiUd7@YpD)%Ar(hlEc~V6Mt+u#|{h-`5giw304~Z91N03Vo_y|yU;@i*WbL}0Zwo&3eJFBfMb+w;&G(v{C2@TY`kx&MxQ zW*!M9OSe)hYBYl+ff*7KQe{nBb2VfM6H-z}Lu-$=P-kb-*w_fbrl!9L ztx=tE2ubEgK5Yiec2J~baj(ZS3xuUn0SSqTw6wJFSG|23t*t(hF; z!BZ@SG8oTeTaN5pS2Fj!wtY{RK$>gbTN<;Tlg5@ zwVMwHQ7Aou6~8Nr^7cn>Q&UrF0RfU2(Nk3ap&{=1-s(}&2!>2gNp4u^W+w)a*<|lr zbn6jDdQP=?And1XZT(73t(`8PK`&guBz6HP_%j~t_I1hCtDSxZK7mJ+X-n}K;w?@Q zlGhZ^Xp};K6lzW3ui~!W-<&0lq;SbDR$zi;yp{DU{yscFKLwoqT-Bf7cZbatD(dP} zo9E}Q`T6&Vu!3e~t2tEgO+6dJ{Lm5DQ;Qi8uMQ|U33*50X0avfLfvcp#bsi3LsUb zV57#M4?bM{UL@AJ+a?g8w3+^%f&rBIf%0#)qso+WjPZv43?{v{-F)lown~jf&JTl> z58|@fiHX1khxS%I#E2wBrJ*^b##zly7u3rj${(~#SPD6`=hY%MKsZo z+>%IEnKMIzF+{mqSWQh0>6_7j9OPLVn
+

07 February 2019

+

Alonefromhell updated:

+
    +
  • Pineapple Salad's fluff coat
  • +
+

06 February 2019

DrunkDwarf updated:

%xE}FxC?$i{Er`Q;^KG5!FT5Wsd*93k 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 Date: Sun, 3 Feb 2019 14:35:11 +0000 Subject: [PATCH 005/103] Remove base access from golem ID, buff golem KA --- _maps/map_files/cyberiad/z2.dmm | 2 +- _maps/map_files/cyberiad/z3.dmm | 3 ++- code/game/objects/items/weapons/cards_ids.dm | 13 +++++++------ .../objects/structures/crates_lockers/crates.dm | 2 +- code/modules/mining/equipment_locker.dm | 7 +++++-- 5 files changed, 16 insertions(+), 11 deletions(-) diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm index ce80bb9d1eb..f5f1f16b2c1 100644 --- a/_maps/map_files/cyberiad/z2.dmm +++ b/_maps/map_files/cyberiad/z2.dmm @@ -1743,7 +1743,7 @@ aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbW aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatauauauataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuruAuAuAuAuAuAuAuAuAuAuAuAxMuTuTxNuAuAuAuAuAuAuAuAxOuAuEusaNuruAxIxJxJxJxJxJxKuEusaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatatatatatxRxSxSxSxSxSxSxSxTatataIatataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuruExMxVxUxXxWyaxYybxNuExMuTuTuTuTuTuTxNuAuAuAuAuAxMuTxNuAuAycuAxIxJxJxJydxJxJxJxKuEaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataJaJaJaKauauauauauauauauaKaKaKauaJataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuSyjyiuTuTykuTuTuTuTuTyluTuTymymymymuTuTuTuTuTuTuTuTuTuTynxJxJxJxJxJxJypyoysxJxJxJyuaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataKauauauauauauauKqauauauauauauauaJataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuXuTyzuTuTuTuTuTuTuTuTyluTuTymymymymuTuTuTuTuTuTuTuTuTuTynxJxJxJxJxJyAyBypypyAxJxJyCaNaNaNaNaN +aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataKauauauauauauauKqauauauauauauauaJataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuXuTyzuTuTuTuTuTuTuTuTyluTuTymymymymuTuTuTuTuTuTuTuTuTuTynxJxJxJxJxJyAyBypypyAxJxJyCaNaNaNaNaN aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmrmrmrmrmrmrmrmrmrmrmrmrmraNaNatbhauauauauauaubibibiauauauauauauaJataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNvqyJuTuTuTyKuTuTuTuTuTyluTuTymymymymuTuTuTuTuTuTuTuTuTwUuAuAycuAyLxJxJyAyAyAxJxJyNuEaNaNaNaNaN aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmraNaNatbhauauauauauKvbibibiKvauauauauauaKataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquEwmyRyPyUySzayVzbwUuEwmuTuTuTuTuTuTwUuAuAwmuTwUuAuAuAuEvPaNwquAyLxJxJxJxJxJyNuEvPaNaNaNaNaN aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmrxQxPatbhauauauauauauKvKvKvauauauauauauauataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquAuAuAuAuAuAuAuAuAuAuAuAwmuTuTwUuAuAuAuAuAzduAuAuAuEuEaNaNaNwquAyLxJxJxJyNuAvPaNaNaNaNaNaN diff --git a/_maps/map_files/cyberiad/z3.dmm b/_maps/map_files/cyberiad/z3.dmm index a25deea1832..4e63c973779 100644 --- a/_maps/map_files/cyberiad/z3.dmm +++ b/_maps/map_files/cyberiad/z3.dmm @@ -76,7 +76,7 @@ "bx" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s5"; icon_state = "swall_s5"; dir = 2},/area/space) "by" = (/turf/simulated/shuttle/wall{tag = "icon-swall13"; icon_state = "swall13"; dir = 2},/area/space) "bz" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s9"; icon_state = "swall_s9"; dir = 2},/area/space) -"bA" = (/obj/machinery/mineral/ore_redemption,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"bA" = (/obj/machinery/mineral/ore_redemption/golem,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) "bB" = (/turf/simulated/shuttle/wall{tag = "icon-swall14"; icon_state = "swall4"; dir = 2},/area/shuttle/freegolem) "bC" = (/turf/simulated/shuttle/wall{dir = 2; icon_state = "swallc1"; tag = "icon-swall12"},/area/shuttle/freegolem) "bD" = (/obj/structure/window/full/shuttle{icon_state = "16"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/freegolem) @@ -690,3 +690,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} + diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index 7762fd93dcc..fd922169f48 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -695,12 +695,6 @@ icon_state = "cargo" access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mint, access_mining, access_mining_station, access_mineral_storeroom) -/obj/item/card/id/mining - name = "Mining ID" - registered_name = null - icon_state = "cargo" - access = list(access_mining, access_mint, access_mining_station, access_mailsorting, access_maint_tunnels, access_mineral_storeroom) - /obj/item/card/id/engineering name = "Engineering ID" registered_name = "Engineer" @@ -791,6 +785,13 @@ icon_state = "ERT_engineering" /obj/item/card/id/ert/medic icon_state = "ERT_medical" + +/obj/item/card/id/golem + name = "Free Golem ID" + desc = "A card used to claim mining points and buy gear." + icon_state = "research" + access = list(access_mineral_storeroom) + // Decals /obj/item/id_decal name = "identification card decal" diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index e32111e3a99..eb2f93402a5 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -653,5 +653,5 @@ new /obj/item/t_scanner/adv_mining_scanner/lesser(src) new /obj/item/storage/bag/ore(src) new /obj/item/clothing/glasses/meson(src) - new /obj/item/card/id/mining(src) + new /obj/item/card/id/golem(src) new /obj/item/flashlight/lantern(src) \ No newline at end of file diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 83fd272870b..6bd9cadb54b 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -50,6 +50,9 @@ component_parts += new /obj/item/stock_parts/console_screen(null) RefreshParts() +/obj/machinery/mineral/ore_redemption/golem + req_access_reclaim = access_mineral_storeroom + /obj/machinery/mineral/ore_redemption/Destroy() QDEL_NULL(files) GET_COMPONENT(materials, /datum/component/material_container) @@ -433,14 +436,14 @@ . = ..() desc += "\nIt seems a few selections have been added." prize_list += list( - new /datum/data/mining_equipment("Extra Id", /obj/item/card/id/mining, 250), + new /datum/data/mining_equipment("Extra Id", /obj/item/card/id/golem, 250), new /datum/data/mining_equipment("Extra Golem Creation Disk", /obj/item/disk/design_disk/golem_shell, 250), new /datum/data/mining_equipment("Science Goggles", /obj/item/clothing/glasses/science, 250), new /datum/data/mining_equipment("Monkey Cube", /obj/item/reagent_containers/food/snacks/monkeycube, 300), new /datum/data/mining_equipment("Toolbelt", /obj/item/storage/belt/utility, 350), new /datum/data/mining_equipment("Royal Cape of the Liberator", /obj/item/bedsheet/rd/royal_cape, 500), new /datum/data/mining_equipment("Grey Slime Extract", /obj/item/slime_extract/grey, 1000), - new /datum/data/mining_equipment("KA Trigger Modification Kit", /obj/item/borg/upgrade/modkit/trigger_guard, 1700), + new /datum/data/mining_equipment("KA Trigger Modification Kit", /obj/item/borg/upgrade/modkit/trigger_guard, 1000), new /datum/data/mining_equipment("The Liberator's Legacy", /obj/item/storage/box/rndboards, 2000) ) From 912c6b0b9e4d37db78d9f27aba65671418e2b2d1 Mon Sep 17 00:00:00 2001 From: datlo Date: Sun, 3 Feb 2019 15:59:04 +0000 Subject: [PATCH 006/103] asteroid claim improvements, golem ship security Add plating over asteroid tiles if you've claimed them Asteroid walls can now be used to define rooms (still must be airtight) Add golem check to the free golem ship --- code/game/objects/items/blueprints.dm | 2 ++ code/modules/mining/mine_turfs.dm | 11 +++++++++++ code/modules/shuttle/shuttle.dm | 6 ++++++ 3 files changed, 19 insertions(+) diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm index b6018c65626..3ce114bde9b 100644 --- a/code/game/objects/items/blueprints.dm +++ b/code/game/objects/items/blueprints.dm @@ -268,6 +268,8 @@ return BORDER_BETWEEN if(istype(T2, /turf/simulated/wall)) return BORDER_2NDTILE + if(istype(T2, /turf/simulated/mineral)) + return BORDER_2NDTILE if(!istype(T2, /turf/simulated)) return BORDER_BETWEEN diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 79cfc3ae9f8..0670c87e20d 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -522,6 +522,17 @@ var/global/list/rockTurfEdgeCache = list( O.attackby(W,user) return + if(istype(W, /obj/item/stack/tile/plasteel) && isarea(loc)) + var/area/A = loc + if(A.outdoors) + to_chat(user, "You must define a room as part of the station using blueprints or an equivalent item first.") + return + playsound(src, 'sound/weapons/genhit.ogg', 50, 1) + make_plating() + icon_plating = "plating" + icon_state = "plating" + update_icon() + /turf/simulated/floor/plating/airless/asteroid/gets_drilled() if(!dug) gets_dug() diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index c5230ea689f..5a226dc20f2 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -840,6 +840,12 @@ shuttleId = "freegolem" possible_destinations = "freegolem_z3;freegolem_z5;freegolem_z1;freegolem_z6" +/obj/machinery/computer/shuttle/golem_ship/attack_hand(mob/user) + if(!isgolem(user)) + to_chat(user, "Access denied.") + return + ..() + /obj/machinery/computer/shuttle/vox name = "skipjack control console" req_access = list(access_vox) From e9e2d1a2e962a462143add1081c66eba1a07065e Mon Sep 17 00:00:00 2001 From: datlo Date: Sun, 3 Feb 2019 16:59:59 +0000 Subject: [PATCH 007/103] add ID registering --- code/game/objects/items/weapons/cards_ids.dm | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index fd922169f48..d08bb31c869 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -788,9 +788,23 @@ /obj/item/card/id/golem name = "Free Golem ID" - desc = "A card used to claim mining points and buy gear." + desc = "A card used to claim mining points and buy gear. Use it to mark it as yours." icon_state = "research" access = list(access_mineral_storeroom) + var/registered = FALSE + +/obj/item/card/id/golem/attack_self(mob/user as mob) + if(!registered && ishuman(user)) + registered_name = user.name + SetOwnerInfo(user) + assignment = "Free Golem" + RebuildHTML() + UpdateName() + desc = "A card used to claim mining points and buy gear." + registered = TRUE + to_chat(user, "The ID is now registered as yours.") + else + ..() // Decals /obj/item/id_decal From e566e90733f33c12f19d0ecdd1ebc1feaa97b920 Mon Sep 17 00:00:00 2001 From: datlo Date: Sun, 3 Feb 2019 17:08:51 +0000 Subject: [PATCH 008/103] Add golem spawn rules --- .../awaymissions/mission_code/ghost_role_spawners/golems.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm b/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm index 07fb8ab92c5..f064f4c27b6 100644 --- a/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm +++ b/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm @@ -85,6 +85,9 @@ to_chat(new_spawn, "[initial(X.info_text)]") if(!owner) to_chat(new_spawn, "Build golem shells in the autolathe, and feed refined mineral sheets to the shells to bring them to life! You are generally a peaceful group unless provoked.") + to_chat(new_spawn, "You are not an antagonist, but you are not a crewmember either. \ + You may interact or trade with crew you come across, aswell as defend yourself and your ship \ + but avoid actively interfering with the station unless you have a valid roleplay reason to do so, such as an invitation by crewmembers.") else new_spawn.mind.store_memory("Serve [owner.real_name], your creator.") log_game("[key_name(new_spawn)] possessed a golem shell enslaved to [key_name(owner)].") From 0ff947ec178674bae26a48474ce5b099e695f40a Mon Sep 17 00:00:00 2001 From: datlo Date: Sun, 3 Feb 2019 18:27:24 +0000 Subject: [PATCH 009/103] Added golem custom access, boards, and a free KA You must mine for the trigger guard kit before being able to use the KA --- _maps/map_files/cyberiad/z3.dmm | 3 ++- code/game/jobs/access.dm | 2 ++ code/game/machinery/constructable_frame.dm | 4 +++ code/game/objects/items/weapons/cards_ids.dm | 2 +- code/modules/mining/equipment_locker.dm | 26 ++++++++++++++++++-- 5 files changed, 33 insertions(+), 4 deletions(-) diff --git a/_maps/map_files/cyberiad/z3.dmm b/_maps/map_files/cyberiad/z3.dmm index 4e63c973779..c15e738bde4 100644 --- a/_maps/map_files/cyberiad/z3.dmm +++ b/_maps/map_files/cyberiad/z3.dmm @@ -248,6 +248,7 @@ "eN" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating/airless,/area/space) "eO" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating/airless,/area/space) "eP" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/space) +"eQ" = (/obj/item/gun/energy/kinetic_accelerator,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) "eR" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) "eS" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; level = 1},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat) "eT" = (/obj/machinery/telecomms/server/presets/supply,/turf/simulated/floor/plasteel{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (NORTH)"; temperature = 80},/area/tcommsat/chamber) @@ -651,7 +652,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLaMaMaYaZaZaMaMbeaMaZaZaMaMaMaMaMaOaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPbfbgbhbgbgbnboaPbgbgbgbgbhbgbqaVaWaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrbgbgbgbgbgbtbtaZbgbgbgbgbgbgbgaVaWaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLaMaYaZaZaMaMaMaMaMbvbwbgbgbgbgbgbAbBbCaJaJaIaIaIaIaIaIaIaIaIaIaKaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLaMaYaZaZaMaMaMaMaMbvbwbgbgbgbgeQbAbBbCaJaJaIaIaIaIaIaIaIaIaIaIaKaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDbEbFbgbgbgbgbGbgbgaZbgbgbgbgbgbgbgbHbIaJaJaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJbKbLbgbgbgbgbgbgbgaZbgbgbgbgbgbgbgbMbraJaJaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNaMbeaZaZaMaMaMaMaMbvbwbgbgbgbgbObPbBbQaJaJaIaIaIaIaIaIaIaIaIaIaIaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm index f4910a88c95..7e3013658c8 100644 --- a/code/game/jobs/access.dm +++ b/code/game/jobs/access.dm @@ -107,6 +107,8 @@ var/const/access_trade_sol = 160 //Awaymissions /var/const/access_away01 = 271 +//Ghost roles +var/const/access_free_golems = 300 /obj/var/list/req_access = null /obj/var/req_access_txt = "0" diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 796d57f2a72..fb14e60257f 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -944,6 +944,10 @@ to destroy them and players will be able to make replacements. /obj/item/stock_parts/manipulator = 1, /obj/item/assembly/igniter = 1) +/obj/item/circuitboard/ore_redemption/golem + name = "Golem Ship Ore Redemption (Machine Board) + build_path = /obj/machinery/mineral/ore_redemption/golem + /obj/item/circuitboard/mining_equipment_vendor name = "circuit board (Mining Equipment Vendor)" build_path = /obj/machinery/mineral/equipment_vendor diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index d08bb31c869..d48e0e663a0 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -790,7 +790,7 @@ name = "Free Golem ID" desc = "A card used to claim mining points and buy gear. Use it to mark it as yours." icon_state = "research" - access = list(access_mineral_storeroom) + access = list(access_free_golems) var/registered = FALSE /obj/item/card/id/golem/attack_self(mob/user as mob) diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 6bd9cadb54b..c671f2c8113 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -51,7 +51,19 @@ RefreshParts() /obj/machinery/mineral/ore_redemption/golem - req_access_reclaim = access_mineral_storeroom + req_access = list(access_free_golems) + req_access_reclaim = access_free_golems + +/obj/machinery/mineral/ore_redemption/golem + ..() + component_parts = list() + component_parts += new /obj/item/circuitboard/ore_redemption/golem(null) + component_parts += new /obj/item/stock_parts/matter_bin(null) + component_parts += new /obj/item/stock_parts/manipulator(null) + component_parts += new /obj/item/stock_parts/micro_laser(null) + component_parts += new /obj/item/assembly/igniter(null) + component_parts += new /obj/item/stock_parts/console_screen(null) + RefreshParts() /obj/machinery/mineral/ore_redemption/Destroy() QDEL_NULL(files) @@ -432,6 +444,16 @@ /obj/machinery/mineral/equipment_vendor/golem name = "golem ship equipment vendor" +/obj/machinery/mineral/equipment_vendor/golem/New() + ..() + component_parts = list() + component_parts += new /obj/item/circuitboard/mining_equipment_vendor/golem(null) + component_parts += new /obj/item/stock_parts/matter_bin(null) + component_parts += new /obj/item/stock_parts/matter_bin(null) + component_parts += new /obj/item/stock_parts/matter_bin(null) + component_parts += new /obj/item/stock_parts/console_screen(null) + RefreshParts() + /obj/machinery/mineral/equipment_vendor/golem/Initialize() . = ..() desc += "\nIt seems a few selections have been added." @@ -440,7 +462,7 @@ new /datum/data/mining_equipment("Extra Golem Creation Disk", /obj/item/disk/design_disk/golem_shell, 250), new /datum/data/mining_equipment("Science Goggles", /obj/item/clothing/glasses/science, 250), new /datum/data/mining_equipment("Monkey Cube", /obj/item/reagent_containers/food/snacks/monkeycube, 300), - new /datum/data/mining_equipment("Toolbelt", /obj/item/storage/belt/utility, 350), + new /datum/data/mining_equipment("Toolbelt", /obj/item/storage/belt/utility/full/multitool, 350), new /datum/data/mining_equipment("Royal Cape of the Liberator", /obj/item/bedsheet/rd/royal_cape, 500), new /datum/data/mining_equipment("Grey Slime Extract", /obj/item/slime_extract/grey, 1000), new /datum/data/mining_equipment("KA Trigger Modification Kit", /obj/item/borg/upgrade/modkit/trigger_guard, 1000), From ad44e6f2a20eee4723589754fc202181d6452f3a Mon Sep 17 00:00:00 2001 From: datlo Date: Sun, 3 Feb 2019 19:11:50 +0000 Subject: [PATCH 010/103] fix compile error --- code/game/machinery/constructable_frame.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index fb14e60257f..70e3098e15e 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -945,7 +945,7 @@ to destroy them and players will be able to make replacements. /obj/item/assembly/igniter = 1) /obj/item/circuitboard/ore_redemption/golem - name = "Golem Ship Ore Redemption (Machine Board) + name = "Golem Ship Ore Redemption (Machine Board)" build_path = /obj/machinery/mineral/ore_redemption/golem /obj/item/circuitboard/mining_equipment_vendor From 605bad84174dfce6d5c8972603e6a421bd33a80d Mon Sep 17 00:00:00 2001 From: datlo Date: Sun, 3 Feb 2019 19:35:44 +0000 Subject: [PATCH 011/103] actually compiles *scream --- code/game/machinery/constructable_frame.dm | 2 +- code/modules/mining/equipment_locker.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 70e3098e15e..3165e9388b9 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -957,7 +957,7 @@ to destroy them and players will be able to make replacements. /obj/item/stock_parts/console_screen = 1, /obj/item/stock_parts/matter_bin = 3) -/obj/item/circuitboard/machine/mining_equipment_vendor/golem +/obj/item/circuitboard/mining_equipment_vendor/golem name = "Golem Ship Equipment Vendor (Machine Board)" build_path = /obj/machinery/mineral/equipment_vendor/golem diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index c671f2c8113..8ceb16ab23d 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -54,7 +54,7 @@ req_access = list(access_free_golems) req_access_reclaim = access_free_golems -/obj/machinery/mineral/ore_redemption/golem +/obj/machinery/mineral/ore_redemption/golem/New() ..() component_parts = list() component_parts += new /obj/item/circuitboard/ore_redemption/golem(null) From ca5543a6370a2cdc22e35d645d5c31488e2b6190 Mon Sep 17 00:00:00 2001 From: datlo Date: Sun, 3 Feb 2019 23:18:36 +0000 Subject: [PATCH 012/103] implement golem subtype procs --- .../ghost_role_spawners/golems.dm | 9 +-- .../mob/living/carbon/human/human_defense.dm | 7 ++- .../living/carbon/human/species/_species.dm | 10 ++++ .../mob/living/carbon/human/species/golem.dm | 55 +++++++++++-------- 4 files changed, 48 insertions(+), 33 deletions(-) diff --git a/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm b/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm index f064f4c27b6..636204c296e 100644 --- a/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm +++ b/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm @@ -132,11 +132,4 @@ desc = "A humanoid shape, empty, lifeless, and full of potential." mob_name = "a free golem" can_transfer = FALSE - mob_species = /datum/species/golem/adamantine - -/obj/effect/mob_spawn/human/golem/adamantine/New() //check config to see if we allow free golems to spawn - ..() - if(!config.unrestricted_free_golems && (GAMEMODE_IS_BLOB || GAMEMODE_IS_NUCLEAR || GAMEMODE_IS_WIZARD)) - qdel(src) - else if(!prob(config.prob_free_golems)) - qdel(src) \ No newline at end of file + mob_species = /datum/species/golem/adamantine \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index bcff3030376..965a2c81ab2 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -10,7 +10,8 @@ emp_act /mob/living/carbon/human/bullet_act(obj/item/projectile/P, def_zone) - + if(!dna.species.bullet_act(P, src)) + return FALSE if(P.is_reflectable) if(check_reflect(def_zone)) // Checks if you've passed a reflection% check visible_message("The [P.name] gets reflected by [src]!", \ @@ -295,6 +296,8 @@ emp_act if(Iforce > 10 || Iforce >= 5 && prob(33)) forcesay(GLOB.hit_appends) //forcesay checks stat already + dna.species.spec_attacked_by(I, user, affecting, user.a_intent, src) + //this proc handles being hit by a thrown atom /mob/living/carbon/human/hitby(atom/movable/AM, skipcatch = 0, hitpush = 1, blocked = 0) var/obj/item/I @@ -321,6 +324,8 @@ emp_act visible_message("[I] embeds itself in [src]'s [L.name]!","[I] embeds itself in your [L.name]!") hitpush = 0 skipcatch = 1 //can't catch the now embedded item + if(!blocked) + dna.species.spec_hitby(AM, src) return ..() /mob/living/carbon/human/proc/bloody_hands(var/mob/living/source, var/amount = 2) diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm index d07ef2b9f32..f1aa0928e21 100644 --- a/code/modules/mob/living/carbon/human/species/_species.dm +++ b/code/modules/mob/living/carbon/human/species/_species.dm @@ -360,6 +360,8 @@ var/datum/unarmed_attack/attack = user.dna.species.unarmed user.do_attack_animation(target, attack.animation_type) + if(attack.harmless) + target.visible_message("[user] [pick(attack.attack_verb)]ed [target]!") add_attack_logs(user, target, "Melee attacked with fists", target.ckey ? null : ATKLOG_ALL) if(!iscarbon(user)) @@ -509,6 +511,7 @@ var/miss_sound = 'sound/weapons/punchmiss.ogg' var/sharp = FALSE var/animation_type = ATTACK_EFFECT_PUNCH + var/harmless = FALSE //if set to true, attacks won't be admin logged and punches will "hit" for no damage /datum/unarmed_attack/diona attack_verb = list("lash", "bludgeon") @@ -719,6 +722,13 @@ It'll return null if the organ doesn't correspond, so include null checks when u if(abs(temperature - M.bodytemperature) > 10) //If our water and mob temperature varies by more than 10K, cool or/ heat them appropriately M.bodytemperature = (temperature + M.bodytemperature) * 0.5 //Approximation for gradual heating or cooling +/datum/species/proc/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H) //return TRUE if hit, FALSE if stopped/reflected/etc + return TRUE + +/datum/species/proc/spec_hitby(atom/movable/AM, mob/living/carbon/human/H) + +/datum/species/proc/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H) + /proc/get_random_species(species_name = FALSE) // Returns a random non black-listed or hazardous species, either as a string or datum var/static/list/random_species = list() if(!random_species.len) diff --git a/code/modules/mob/living/carbon/human/species/golem.dm b/code/modules/mob/living/carbon/human/species/golem.dm index f2e0ad753eb..3dfc01f0e27 100644 --- a/code/modules/mob/living/carbon/human/species/golem.dm +++ b/code/modules/mob/living/carbon/human/species/golem.dm @@ -85,7 +85,7 @@ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/golem(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/golem(H), slot_wear_mask) H.equip_to_slot_or_del(new /obj/item/clothing/gloves/golem(H), slot_gloves) - H.skin_colour = golem_colour + //H.skin_colour = golem_colour H.regenerate_icons() to_chat(H, info_text) @@ -386,16 +386,16 @@ for(var/i=1, i <= rand(3, 5), i++) new /obj/item/stack/ore/glass(get_turf(H)) qdel(H) -/* + /datum/species/golem/sand/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H) if(!(P.original == H && P.firer == H)) if(P.flag == "bullet" || P.flag == "bomb") playsound(H, 'sound/effects/shovel_dig.ogg', 70, 1) H.visible_message("The [P.name] sinks harmlessly in [H]'s sandy body!", \ "The [P.name] sinks harmlessly in [H]'s sandy body!") - return BULLET_ACT_BLOCK - return BULLET_ACT_HIT -*/ + return FALSE + return TRUE + /datum/unarmed_attack/golem/sand attack_sound = 'sound/effects/shovel_dig.ogg' @@ -419,21 +419,28 @@ for(var/i=1, i <= rand(3, 5), i++) new /obj/item/shard(get_turf(H)) qdel(H) -/* + /datum/species/golem/glass/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H) if(!(P.original == H && P.firer == H)) //self-shots don't reflect - if(P.flag == "laser" || P.flag == "energy") + if(P.is_reflectable) H.visible_message("The [P.name] gets reflected by [H]'s glass skin!", \ "The [P.name] gets reflected by [H]'s glass skin!") if(P.starting) var/new_x = P.starting.x + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) - var/turf/target = get_turf(P.starting) + var/turf/curloc = get_turf(H) + // redirect the projectile - P.preparePixelProjectile(locate(CLAMP(target.x + new_x, 1, world.maxx), CLAMP(target.y + new_y, 1, world.maxy), H.z), H) - return BULLET_ACT_FORCE_PIERCE - return BULLET_ACT_HIT -*/ + P.firer = src + P.original = locate(new_x, new_y, P.z) + P.starting = curloc + P.current = curloc + P.yo = new_y - curloc.y + P.xo = new_x - curloc.x + P.Angle = null + return FALSE + return TRUE + /datum/unarmed_attack/golem/glass attack_sound = 'sound/effects/glassbr2.ogg' @@ -473,7 +480,6 @@ do_teleport(H, picked) return TRUE -/* /datum/species/golem/bluespace/spec_hitby(atom/movable/AM, mob/living/carbon/human/H) ..() var/obj/item/I @@ -494,11 +500,11 @@ if(world.time > last_teleport + teleport_cooldown && user != H) reactive_teleport(H) -/datum/species/golem/bluespace/on_hit(obj/item/projectile/P, mob/living/carbon/human/H) - ..() +/datum/species/golem/bluespace/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H) if(world.time > last_teleport + teleport_cooldown) reactive_teleport(H) -*/ + return TRUE + /datum/species/golem/bluespace/on_species_gain(mob/living/carbon/C, datum/species/old_species) ..() if(ishuman(C)) @@ -568,8 +574,8 @@ golem_colour = "ff0" //say_mod = "honks" punchdamagelow = 0 - punchdamagehigh = 1 - punchstunthreshold = 2 //Harmless and can't stun + punchdamagehigh = 0 + punchstunthreshold = 1 //Harmless and can't stun skinned_type = /obj/item/stack/ore/bananium info_text = "As a Bananium Golem, you are made for pranking. Your body emits natural honks, and you can barely even hurt people when punching them. Your skin also bleeds banana peels when damaged." prefix = "Bananium" @@ -587,7 +593,6 @@ last_banana = world.time last_honk = world.time H.job = "Clown" - H.mutations.Add(CLUMSY) H.mutations.Add(COMIC) H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/drinks/bottle/bottleofbanana(H), slot_r_store) H.equip_to_slot_or_del(new /obj/item/bikehorn(H), slot_l_store) @@ -595,7 +600,7 @@ /datum/species/golem/bananium/get_random_name() var/golem_name = pick(GLOB.clown_names) return golem_name -/* + /datum/species/golem/bananium/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style) ..() if(world.time > last_banana + banana_cooldown && M != H && M.a_intent != INTENT_HELP) @@ -608,11 +613,11 @@ new/obj/item/grown/bananapeel/specialpeel(get_turf(H)) last_banana = world.time -/datum/species/golem/bananium/on_hit(obj/item/projectile/P, mob/living/carbon/human/H) - ..() +/datum/species/golem/bananium/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H) if(world.time > last_banana + banana_cooldown) new/obj/item/grown/bananapeel/specialpeel(get_turf(H)) last_banana = world.time + return TRUE /datum/species/golem/bananium/spec_hitby(atom/movable/AM, mob/living/carbon/human/H) ..() @@ -624,7 +629,7 @@ else new/obj/item/grown/bananapeel/specialpeel(get_turf(H)) last_banana = world.time -*/ + /datum/species/golem/bananium/handle_life(mob/living/carbon/human/H) if(!active) if(world.time > last_honk + honkooldown) @@ -639,8 +644,10 @@ playsound(get_turf(H), 'sound/misc/sadtrombone.ogg', 70, 0) /datum/unarmed_attack/golem/bananium - attack_verb = list("honk") + attack_verb = list("HONK") attack_sound = 'sound/items/airhorn2.ogg' + animation_type = ATTACK_EFFECT_DISARM + harmless = TRUE //... /datum/species/golem/tranquillite From cf1a95dabc929f397f3c9e4b191104f669fc200c Mon Sep 17 00:00:00 2001 From: datlo Date: Mon, 4 Feb 2019 00:21:13 +0000 Subject: [PATCH 013/103] fix config options --- code/_globalvars/lists/objects.dm | 2 +- code/game/gamemodes/blob/blob.dm | 1 + code/game/gamemodes/game_mode.dm | 9 ++++++++- code/game/gamemodes/nuclear/nuclear.dm | 1 + code/game/gamemodes/wizard/wizard.dm | 1 + .../mission_code/ghost_role_spawners/golems.dm | 7 ++++++- 6 files changed, 18 insertions(+), 3 deletions(-) diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index acb86875a5a..5ecc6938aa2 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -36,7 +36,7 @@ GLOBAL_LIST_INIT(tracked_implants, list()) //list of all current implants that GLOBAL_LIST_INIT(pinpointer_list, list()) //list of all pinpointers. Used to change stuff they are pointing to all at once. GLOBAL_LIST_INIT(nuclear_uplink_list, list()) //list of all existing nuke ops uplinks GLOBAL_LIST_INIT(abductor_equipment, list()) //list of all abductor equipment - +GLOBAL_LIST_INIT(free_golem_shells, list()) //list of all free golem shells GLOBAL_LIST_INIT(global_intercoms, list()) //list of all intercomms, across all z-levels GLOBAL_LIST_INIT(global_radios, list()) //list of all radios, across all z-levels diff --git a/code/game/gamemodes/blob/blob.dm b/code/game/gamemodes/blob/blob.dm index 42a42240ad5..41068876a54 100644 --- a/code/game/gamemodes/blob/blob.dm +++ b/code/game/gamemodes/blob/blob.dm @@ -12,6 +12,7 @@ var/list/blob_nodes = list() required_enemies = 1 recommended_enemies = 1 restricted_jobs = list("Cyborg", "AI") + free_golems_disabled = TRUE var/declared = 0 var/burst = 0 diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 863b31832a0..ae3ddb35000 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -27,6 +27,7 @@ var/recommended_enemies = 0 var/newscaster_announcements = null var/ert_disabled = 0 + var/free_golems_disabled = FALSE var/uplink_welcome = "Syndicate Uplink Console:" var/uplink_uses = 20 @@ -79,6 +80,7 @@ // feedback_set_details("revision","[revdata.revision]") feedback_set_details("server_ip","[world.internet_address]:[world.port]") generate_station_goals() + check_free_golems() start_state = new /datum/station_state() start_state.count() return 1 @@ -494,4 +496,9 @@ proc/display_roundstart_logout_report() /datum/game_mode/proc/declare_station_goal_completion() for(var/V in station_goals) var/datum/station_goal/G = V - G.print_result() \ No newline at end of file + G.print_result() + +/datum/game_mode/proc/check_free_golems() //check config and gamemode for free golems setting and run the prob to check if the round will have free golems spawned or not + if((!config.unrestricted_free_golems && free_golems_disabled) || !prob(config.prob_free_golems)) + for(var/obj/effect/mob_spawn/human/golem/G in GLOB.free_golem_shells) + qdel(G) \ No newline at end of file diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index a3d4a89033a..195629197c5 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -12,6 +12,7 @@ proc/issyndicate(mob/living/M as mob) required_players = 30 // 30 players - 5 players to be the nuke ops = 25 players remaining required_enemies = 5 recommended_enemies = 5 + free_golems_disabled = TRUE var/const/agents_possible = 5 //If we ever need more syndicate agents. diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index 5951814660b..b249ebe8520 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -7,6 +7,7 @@ required_players = 20 required_enemies = 1 recommended_enemies = 1 + free_golems_disabled = TRUE var/use_huds = 0 var/finished = 0 diff --git a/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm b/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm index 636204c296e..95057e90d54 100644 --- a/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm +++ b/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm @@ -67,6 +67,11 @@ travel the stars with a single declaration: \"Yeah go do whatever.\" Though you are bound to the one who created you, it is customary in your society to repeat those same words to newborn \ golems, so that no golem may ever be forced to serve again." +/obj/effect/mob_spawn/human/golem/New() + ..() + if(!has_owner) + GLOB.free_golem_shells += src + /obj/effect/mob_spawn/human/golem/Initialize(mapload, datum/species/golem/species = null, mob/creator = null) if(species) //spawners list uses object name to register so this goes before ..() name += " ([initial(species.prefix)])" @@ -132,4 +137,4 @@ desc = "A humanoid shape, empty, lifeless, and full of potential." mob_name = "a free golem" can_transfer = FALSE - mob_species = /datum/species/golem/adamantine \ No newline at end of file + mob_species = /datum/species/golem/adamantine From 4ca61d45decd604c6498d44c52df1b95d3adb771 Mon Sep 17 00:00:00 2001 From: datlo Date: Mon, 4 Feb 2019 02:10:40 +0000 Subject: [PATCH 014/103] Update vendor items, update map for botany/xenobio --- _maps/map_files/cyberiad/z3.dmm | 17 ++++++++++------- code/game/area/Space Station 13 areas.dm | 1 + .../objects/structures/crates_lockers/crates.dm | 1 - code/modules/mining/equipment_locker.dm | 9 ++++----- 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/_maps/map_files/cyberiad/z3.dmm b/_maps/map_files/cyberiad/z3.dmm index c15e738bde4..7d02094520b 100644 --- a/_maps/map_files/cyberiad/z3.dmm +++ b/_maps/map_files/cyberiad/z3.dmm @@ -88,7 +88,7 @@ "bJ" = (/obj/structure/window/full/shuttle{icon_state = "15"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/freegolem) "bK" = (/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/table/wood,/obj/item/bedsheet/rd/royal_cape{layer = 3; pixel_x = 5; pixel_y = 9},/obj/item/book/manual/research_and_development{name = "Sacred Text of the Liberator"; pixel_x = -4; pixel_y = 3},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) "bL" = (/obj/machinery/light,/obj/structure/chair/comfy/purp{icon_state = "comfychair"; dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) -"bM" = (/obj/machinery/light/small,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"bM" = (/obj/structure/reagent_dispensers/watertank/high,/turf/simulated/shuttle/plating,/area/shuttle/freegolem) "bN" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s5"; icon_state = "swall_s5"; dir = 2},/area/shuttle/freegolem) "bO" = (/obj/item/resonator/upgraded,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) "bP" = (/obj/machinery/autolathe,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) @@ -97,7 +97,7 @@ "bS" = (/obj/machinery/computer/arcade/orion_trail,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) "bT" = (/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) "bU" = (/obj/effect/mob_spawn/human/golem/adamantine,/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) -"bV" = (/obj/structure/extinguisher_cabinet{pixel_y = -30},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"bV" = (/obj/machinery/vending/coffee/free,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) "bW" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space) "bX" = (/obj/machinery/power/solar,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/space) "bY" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/space) @@ -273,6 +273,7 @@ "fm" = (/obj/structure/table,/obj/item/stock_parts/subspace/analyzer,/obj/item/stock_parts/subspace/analyzer,/obj/item/stock_parts/subspace/analyzer,/obj/machinery/status_display{pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel,/area/turret_protected/tcomsat) "fn" = (/obj/machinery/camera{c_tag = "Telecomms East Solars"; dir = 4; network = list("Telecomms")},/turf/space,/area/space) "fo" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating/airless,/area/space) +"fp" = (/obj/machinery/light/small,/obj/structure/extinguisher_cabinet{pixel_y = -30},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) "fq" = (/obj/structure/grille,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless,/area/space) "fr" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) "fs" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/obj/machinery/light{dir = 4},/turf/space,/area/turret_protected/tcomsat) @@ -281,6 +282,7 @@ "fv" = (/obj/machinery/telecomms/bus/preset_two,/turf/simulated/floor/plasteel{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (NORTH)"; temperature = 80},/area/tcommsat/chamber) "fw" = (/obj/machinery/telecomms/relay/preset/telecomms,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "fx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/telecomms/hub/preset,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"fy" = (/obj/machinery/vending/snack/free,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) "fz" = (/obj/machinery/telecomms/processor/preset_four,/turf/simulated/floor/plasteel{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (EAST)"; temperature = 80},/area/tcommsat/chamber) "fA" = (/obj/machinery/telecomms/bus/preset_four,/turf/simulated/floor/plasteel{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (EAST)"; temperature = 80},/area/tcommsat/chamber) "fB" = (/obj/structure/sign/nosmoking_2{pixel_x = 32; pixel_y = 0},/obj/machinery/light{dir = 4},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) @@ -306,6 +308,8 @@ "fV" = (/obj/structure/table,/obj/item/stock_parts/subspace/crystal,/obj/item/stock_parts/subspace/crystal,/obj/item/stock_parts/subspace/crystal,/obj/machinery/light_switch{pixel_y = -28},/turf/simulated/floor/plasteel,/area/turret_protected/tcomsat) "fW" = (/obj/machinery/telecomms/server/presets/science,/turf/simulated/floor/plasteel{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (NORTH)"; temperature = 80},/area/tcommsat/chamber) "fX" = (/obj/machinery/telecomms/server/presets/medical,/turf/simulated/floor/plasteel{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (NORTH)"; temperature = 80},/area/tcommsat/chamber) +"fY" = (/obj/machinery/vending/hydronutrients,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"fZ" = (/obj/machinery/vending/hydroseeds,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) "ga" = (/obj/machinery/telecomms/server/presets/command,/turf/simulated/floor/plasteel{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (EAST)"; temperature = 80},/area/tcommsat/chamber) "gb" = (/obj/machinery/telecomms/server/presets/security,/turf/simulated/floor/plasteel{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (EAST)"; temperature = 80},/area/tcommsat/chamber) "gd" = (/obj/machinery/camera{c_tag = "Telecomms Server Room South"; dir = 1; network = list("Telecomms")},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/light,/obj/machinery/hologram/holopad,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) @@ -647,17 +651,17 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLaMaMaMaMaMaMaMaMaMaNaNaMaMaOaIaIaIaIaIaKaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPaQaQaQaQaQaQaQaQaRaSaSaUaVaWaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPaQaQaQaQaQaQaQaQaRaSaSbMaVaWaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPaSaSaXaSaSaXaSaSaSaXaSaUaVaWaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLaMaMaYaZaZaMaMbeaMaZaZaMaMaMaMaMaOaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPbfbgbhbgbgbnboaPbgbgbgbgbhbgbqaVaWaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPfYfZbhbgbgbnboaPbVbgbgbgbhbgbqaVaWaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrbgbgbgbgbgbtbtaZbgbgbgbgbgbgbgaVaWaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLaMaYaZaZaMaMaMaMaMbvbwbgbgbgbgeQbAbBbCaJaJaIaIaIaIaIaIaIaIaIaIaKaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDbEbFbgbgbgbgbGbgbgaZbgbgbgbgbgbgbgbHbIaJaJaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJbKbLbgbgbgbgbgbgbgaZbgbgbgbgbgbgbgbMbraJaJaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJbKbLbgbgbgbgbgbgbgaZbgbgbgbgbgbgbgfpbraJaJaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNaMbeaZaZaMaMaMaMaMbvbwbgbgbgbgbObPbBbQaJaJaIaIaIaIaIaIaIaIaIaIaIaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrbgbgbgbgbgbtbtaZbgbgbgbgbgbgbRaVaWaIaIaIaIaIaIaIaIaIaIaIaIaIaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPbSbgbTbgbgbUboaPbVbgbgdrejekeqaVaWaIaIaIaIaIaIaKaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPbSbfbTbgbgbUboaPfybgbgdrejekeqaVaWaIaIaIaIaIaIaKaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNaMaMbeaZaZaMaMaYaMaZaZaMaMaMaMaMaOaIaIaIaIaIaIaIaIaIaIaKaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPaSaSexaSaSexaSaSaSexaSeAaVaWaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPeIeIeIeIeIeIeIeIaRaSaSeAaVaWaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -691,4 +695,3 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} - diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index 2dd4e4d93ad..ac2b07ad243 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -463,6 +463,7 @@ var/list/ghostteleportlocs = list() /area/shuttle/freegolem name = "Free Golem Ship" icon_state = "purple" + xenobiology_compatible = TRUE /area/airtunnel1/ // referenced in airtunnel.dm:759 diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index eb2f93402a5..d44ec20c515 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -647,7 +647,6 @@ /obj/structure/closet/crate/golemgear/New() ..() new /obj/item/storage/backpack/industrial(src) - new /obj/item/storage/backpack/satchel_eng(src) new /obj/item/shovel(src) new /obj/item/pickaxe(src) new /obj/item/t_scanner/adv_mining_scanner/lesser(src) diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 8ceb16ab23d..6813026be76 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -459,14 +459,13 @@ desc += "\nIt seems a few selections have been added." prize_list += list( new /datum/data/mining_equipment("Extra Id", /obj/item/card/id/golem, 250), - new /datum/data/mining_equipment("Extra Golem Creation Disk", /obj/item/disk/design_disk/golem_shell, 250), - new /datum/data/mining_equipment("Science Goggles", /obj/item/clothing/glasses/science, 250), - new /datum/data/mining_equipment("Monkey Cube", /obj/item/reagent_containers/food/snacks/monkeycube, 300), - new /datum/data/mining_equipment("Toolbelt", /obj/item/storage/belt/utility/full/multitool, 350), + new /datum/data/mining_equipment("Science Backpack", /obj/item/storage/backpack/science, 250), + new /datum/data/mining_equipment("Toolbelt", /obj/item/storage/belt/utility/full/multitool, 250), + new /datum/data/mining_equipment("Monkey Cube", /obj/item/reagent_containers/food/snacks/monkeycube, 250), new /datum/data/mining_equipment("Royal Cape of the Liberator", /obj/item/bedsheet/rd/royal_cape, 500), new /datum/data/mining_equipment("Grey Slime Extract", /obj/item/slime_extract/grey, 1000), new /datum/data/mining_equipment("KA Trigger Modification Kit", /obj/item/borg/upgrade/modkit/trigger_guard, 1000), - new /datum/data/mining_equipment("The Liberator's Legacy", /obj/item/storage/box/rndboards, 2000) + new /datum/data/mining_equipment("The Liberator's Legacy", /obj/item/storage/box/rndboards, 1500) ) /datum/data/mining_equipment/ From 0358bfef42eae02170b2fed279da8fcfad7d269c Mon Sep 17 00:00:00 2001 From: datlo Date: Mon, 4 Feb 2019 13:11:11 +0000 Subject: [PATCH 015/103] fix bugs, remove cult free golems --- _maps/map_files/cyberiad/z3.dmm | 7 ++++--- code/_globalvars/lists/objects.dm | 1 - code/game/gamemodes/cult/cult.dm | 1 + code/game/gamemodes/game_mode.dm | 7 ++++--- code/game/objects/effects/landmarks.dm | 5 ++++- code/game/objects/items/weapons/cards_ids.dm | 2 +- .../mission_code/ghost_role_spawners/golems.dm | 5 ----- config/example/config.txt | 4 ++-- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/_maps/map_files/cyberiad/z3.dmm b/_maps/map_files/cyberiad/z3.dmm index 7d02094520b..ef201353f85 100644 --- a/_maps/map_files/cyberiad/z3.dmm +++ b/_maps/map_files/cyberiad/z3.dmm @@ -63,8 +63,8 @@ "bk" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space) "bl" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall{tag = "icon-swall_f5"; icon_state = "swall_f5"; dir = 2},/area/space) "bm" = (/turf/simulated/shuttle/wall{tag = "icon-swall11"; icon_state = "swall11"; dir = 2},/area/space) -"bn" = (/obj/effect/mob_spawn/human/golem/adamantine,/obj/machinery/light{dir = 1; on = 1},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) -"bo" = (/obj/effect/mob_spawn/human/golem/adamantine,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"bn" = (/obj/machinery/light{dir = 1; on = 1},/obj/effect/landmark/free_golem_spawn,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"bo" = (/obj/effect/landmark/free_golem_spawn,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) "bp" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space) "bq" = (/obj/machinery/mineral/equipment_vendor/golem,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) "br" = (/obj/structure/fans/tiny,/obj/machinery/door/airlock/shuttle{id_tag = "s_docking_airlock"; locked = 1},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) @@ -96,7 +96,7 @@ "bR" = (/obj/structure/table/wood,/obj/machinery/reagentgrinder,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) "bS" = (/obj/machinery/computer/arcade/orion_trail,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) "bT" = (/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) -"bU" = (/obj/effect/mob_spawn/human/golem/adamantine,/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) +"bU" = (/obj/machinery/light,/obj/effect/landmark/free_golem_spawn,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) "bV" = (/obj/machinery/vending/coffee/free,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) "bW" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space) "bX" = (/obj/machinery/power/solar,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/space) @@ -695,3 +695,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} + diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 5ecc6938aa2..bae7002d711 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -36,7 +36,6 @@ GLOBAL_LIST_INIT(tracked_implants, list()) //list of all current implants that GLOBAL_LIST_INIT(pinpointer_list, list()) //list of all pinpointers. Used to change stuff they are pointing to all at once. GLOBAL_LIST_INIT(nuclear_uplink_list, list()) //list of all existing nuke ops uplinks GLOBAL_LIST_INIT(abductor_equipment, list()) //list of all abductor equipment -GLOBAL_LIST_INIT(free_golem_shells, list()) //list of all free golem shells GLOBAL_LIST_INIT(global_intercoms, list()) //list of all intercomms, across all z-levels GLOBAL_LIST_INIT(global_radios, list()) //list of all radios, across all z-levels diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index a2acb097b93..1423e9155b4 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -44,6 +44,7 @@ var/global/list/all_cults = list() required_players = 30 required_enemies = 3 recommended_enemies = 4 + free_golems_disabled = TRUE var/datum/mind/sacrifice_target = null var/finished = 0 diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index ae3ddb35000..76074c254bb 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -499,6 +499,7 @@ proc/display_roundstart_logout_report() G.print_result() /datum/game_mode/proc/check_free_golems() //check config and gamemode for free golems setting and run the prob to check if the round will have free golems spawned or not - if((!config.unrestricted_free_golems && free_golems_disabled) || !prob(config.prob_free_golems)) - for(var/obj/effect/mob_spawn/human/golem/G in GLOB.free_golem_shells) - qdel(G) \ No newline at end of file + if((config.unrestricted_free_golems || !free_golems_disabled) && prob(config.prob_free_golems)) + for(var/obj/effect/landmark/free_golem_spawn/L in GLOB.landmarks_list) + if(isturf(L.loc)) + new /obj/effect/mob_spawn/human/golem/adamantine(L.loc) \ No newline at end of file diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index 626662b9567..1dacf315e9c 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -293,4 +293,7 @@ /obj/effect/landmark/battle_mob_point - name = "Nanomob Battle Avatar Spawn Point" \ No newline at end of file + name = "Nanomob Battle Avatar Spawn Point" + +/obj/effect/landmark/free_golem_spawn + name = "Free Golem Spawn Point" \ No newline at end of file diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index d48e0e663a0..9d4fb95d58b 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -795,7 +795,7 @@ /obj/item/card/id/golem/attack_self(mob/user as mob) if(!registered && ishuman(user)) - registered_name = user.name + registered_name = user.real_name SetOwnerInfo(user) assignment = "Free Golem" RebuildHTML() diff --git a/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm b/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm index 95057e90d54..2fb72161a2a 100644 --- a/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm +++ b/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm @@ -67,11 +67,6 @@ travel the stars with a single declaration: \"Yeah go do whatever.\" Though you are bound to the one who created you, it is customary in your society to repeat those same words to newborn \ golems, so that no golem may ever be forced to serve again." -/obj/effect/mob_spawn/human/golem/New() - ..() - if(!has_owner) - GLOB.free_golem_shells += src - /obj/effect/mob_spawn/human/golem/Initialize(mapload, datum/species/golem/species = null, mob/creator = null) if(species) //spawners list uses object name to register so this goes before ..() name += " ([initial(species.prefix)])" diff --git a/config/example/config.txt b/config/example/config.txt index 69a5ba67b73..3894de80f5b 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -98,9 +98,9 @@ PROBABILITY DEVIL 0 PROBABILITY DEVILAGENTS 0 ## Probability in % for Free Golems to spawn at roundstart, set to 0 for no golems -PROB_FREEGOLEMS 50 +PROB_FREEGOLEMS 100 -## Uncomment to allow free golems on all roundtypes. Otherwise, disabled on wiz, raging mages, blob, and nuclear. +## Uncomment to allow free golems on all roundtypes. Otherwise, disabled on cult, wiz, raging mages, blob, and nuclear. #UNRESTRICTED_FREEGOLEMS ## Maximum cycles shadowlings can remain unhatched before they take damage. 1800 = 60 minutes, 900 = 30 minutes, 0 = feature disabled. From 2f24f9639fff0114a669e1c70874c7f99b5ac6ee Mon Sep 17 00:00:00 2001 From: datlo Date: Mon, 4 Feb 2019 13:23:17 +0000 Subject: [PATCH 016/103] Set default prob to 75%, also fix typos oof --- code/controllers/configuration.dm | 2 +- config/example/config.txt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 14cd2bd4edd..197a648b315 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -67,7 +67,7 @@ var/assistantlimit = 0 //enables assistant limiting var/assistantratio = 2 //how many assistants to security members - var/prob_free_golems = 100 //chance for free golems spawners to appear roundstart + var/prob_free_golems = 75 //chance for free golems spawners to appear roundstart var/unrestricted_free_golems = FALSE //if true, free golems can appear on all roundtypes var/traitor_objectives_amount = 2 diff --git a/config/example/config.txt b/config/example/config.txt index 3894de80f5b..426d38f6a87 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -98,10 +98,10 @@ PROBABILITY DEVIL 0 PROBABILITY DEVILAGENTS 0 ## Probability in % for Free Golems to spawn at roundstart, set to 0 for no golems -PROB_FREEGOLEMS 100 +PROB_FREE_GOLEMS 75 ## Uncomment to allow free golems on all roundtypes. Otherwise, disabled on cult, wiz, raging mages, blob, and nuclear. -#UNRESTRICTED_FREEGOLEMS +#UNRESTRICTED_FREE_GOLEMS ## Maximum cycles shadowlings can remain unhatched before they take damage. 1800 = 60 minutes, 900 = 30 minutes, 0 = feature disabled. SHADOWLING_MAX_AGE 0 From be99f5f8d94ec073eac0a0a8e1265a781b2ce4f7 Mon Sep 17 00:00:00 2001 From: datlo Date: Mon, 4 Feb 2019 14:06:37 +0000 Subject: [PATCH 017/103] fix angled walls icons, remove golem rune code --- _maps/map_files/cyberiad/z3.dmm | 5 +- .../research/xenobiology/xenobiology.dm | 75 ------------------- 2 files changed, 2 insertions(+), 78 deletions(-) diff --git a/_maps/map_files/cyberiad/z3.dmm b/_maps/map_files/cyberiad/z3.dmm index ef201353f85..b3e2017d5cd 100644 --- a/_maps/map_files/cyberiad/z3.dmm +++ b/_maps/map_files/cyberiad/z3.dmm @@ -35,7 +35,7 @@ "aI" = (/turf/simulated/mineral/random,/area/mine/dangerous/explored/golem) "aJ" = (/turf/simulated/floor/plating/airless/asteroid,/area/mine/dangerous/explored/golem) "aK" = (/turf/simulated/mineral/random/high_chance,/area/mine/dangerous/explored/golem) -"aL" = (/turf/simulated/shuttle/wall{icon_state = "swall_s6"; dir = 2},/area/shuttle/freegolem) +"aL" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_f6"; dir = 2},/area/shuttle/freegolem) "aM" = (/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"; dir = 2},/area/shuttle/freegolem) "aN" = (/obj/structure/fans/tiny,/obj/machinery/door/airlock/shuttle{id_tag = "s_docking_airlock"; locked = 1},/turf/simulated/shuttle/plating,/area/shuttle/freegolem) "aO" = (/turf/simulated/shuttle/wall{dir = 2; icon_state = "swall8"; tag = "icon-swall12"},/area/shuttle/freegolem) @@ -89,7 +89,7 @@ "bK" = (/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/table/wood,/obj/item/bedsheet/rd/royal_cape{layer = 3; pixel_x = 5; pixel_y = 9},/obj/item/book/manual/research_and_development{name = "Sacred Text of the Liberator"; pixel_x = -4; pixel_y = 3},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) "bL" = (/obj/machinery/light,/obj/structure/chair/comfy/purp{icon_state = "comfychair"; dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) "bM" = (/obj/structure/reagent_dispensers/watertank/high,/turf/simulated/shuttle/plating,/area/shuttle/freegolem) -"bN" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s5"; icon_state = "swall_s5"; dir = 2},/area/shuttle/freegolem) +"bN" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/shuttle/freegolem) "bO" = (/obj/item/resonator/upgraded,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) "bP" = (/obj/machinery/autolathe,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem) "bQ" = (/turf/simulated/shuttle/wall{icon_state = "swallc4"},/area/shuttle/freegolem) @@ -695,4 +695,3 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} - diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index f5f0d33c69a..d8c167989d2 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -389,81 +389,6 @@ if(!uses) qdel(src) -////////Adamantine Golem stuff I dunno where else to put it -/* -/obj/effect/golemrune - anchored = 1 - desc = "a strange rune used to create golems. It glows when spirits are nearby." - name = "rune" - icon = 'icons/obj/rune.dmi' - icon_state = "golem" - unacidable = 1 - layer = TURF_LAYER - var/list/mob/dead/observer/ghosts[0] - -/obj/effect/golemrune/New() - ..() - processing_objects.Add(src) - -/obj/effect/golemrune/process() - if(ghosts.len>0) - icon_state = "golem2" - else - icon_state = "golem" - -/obj/effect/golemrune/attack_hand(mob/living/user) - var/mob/dead/observer/ghost - for(var/mob/dead/observer/O in loc) - if(!check_observer(O)) - to_chat(O, "You are not eligible to become a golem.") - continue - ghost = O - break - if(!ghost) - to_chat(user, "The rune fizzles uselessly. There is no spirit nearby.") - return - var/mob/living/carbon/human/golem/G = new /mob/living/carbon/human/golem - G.change_gender(pick(MALE,FEMALE)) - G.loc = src.loc - G.key = ghost.key - add_attack_logs(user, G, "Summoned as a golem") - to_chat(G, "You are an adamantine golem. You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools. Serve [user], and assist [user.p_them()] in completing [user.p_their()] goals at any cost.") - qdel(src) - -/obj/effect/golemrune/Topic(href,href_list) - if("signup" in href_list) - var/mob/dead/observer/O = locate(href_list["signup"]) - volunteer(O) - -/obj/effect/golemrune/attack_ghost(var/mob/dead/observer/O) - if(!O) - return - volunteer(O) - -/obj/effect/golemrune/proc/check_observer(var/mob/dead/observer/O) - if(!O) - return FALSE - if(!O.client) - return FALSE - if(O.mind && O.mind.current && O.mind.current.stat != DEAD) - return FALSE - if(!O.can_reenter_corpse) - return FALSE - if(cannotPossess(O)) - return FALSE - return TRUE - -/obj/effect/golemrune/proc/volunteer(var/mob/dead/observer/O) - if(O in ghosts) - ghosts.Remove(O) - to_chat(O, "You are no longer signed up to be a golem.") - else - if(!check_observer(O)) - to_chat(O, "You are not eligible to become a golem.") - return - ghosts.Add(O) - to_chat(O, "You are signed up to be a golem.") -*/ /obj/effect/timestop anchored = 1 name = "chronofield" From 6898c542efac8aafa0d837877a1973f25f684c1a Mon Sep 17 00:00:00 2001 From: datlo Date: Tue, 5 Feb 2019 01:43:09 +0000 Subject: [PATCH 018/103] Implement golem coloring, minor tweaks --- .../ghost_role_spawners/golems.dm | 1 + .../mob/living/carbon/human/species/golem.dm | 50 +++++++++--------- .../mob/living/carbon/human/update_icons.dm | 5 ++ icons/mob/human_races/golems/r_golem.dmi | Bin 6410 -> 0 bytes .../{golems/oldgolem.dmi => r_golem.dmi} | Bin 5 files changed, 31 insertions(+), 25 deletions(-) delete mode 100644 icons/mob/human_races/golems/r_golem.dmi rename icons/mob/human_races/{golems/oldgolem.dmi => r_golem.dmi} (100%) diff --git a/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm b/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm index 2fb72161a2a..3fe97cded4e 100644 --- a/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm +++ b/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm @@ -19,6 +19,7 @@ /obj/item/stack/sheet/metal = /datum/species/golem, /obj/item/stack/sheet/glass = /datum/species/golem/glass, /obj/item/stack/sheet/plasteel = /datum/species/golem/plasteel, + /obj/item/stack/ore/glass = /datum/species/golem/sand, /obj/item/stack/sheet/mineral/sandstone = /datum/species/golem/sand, /obj/item/stack/sheet/mineral/plasma = /datum/species/golem/plasma, /obj/item/stack/sheet/mineral/diamond = /datum/species/golem/diamond, diff --git a/code/modules/mob/living/carbon/human/species/golem.dm b/code/modules/mob/living/carbon/human/species/golem.dm index 3dfc01f0e27..fa6ae40b0cb 100644 --- a/code/modules/mob/living/carbon/human/species/golem.dm +++ b/code/modules/mob/living/carbon/human/species/golem.dm @@ -2,11 +2,10 @@ name = "Golem" name_plural = "Golems" - icobase = 'icons/mob/human_races/golems/r_golem.dmi' - deform = 'icons/mob/human_races/golems/r_golem.dmi' + icobase = 'icons/mob/human_races/r_golem.dmi' + deform = 'icons/mob/human_races/r_golem.dmi' species_traits = list(NO_BREATHE, NO_BLOOD, RADIMMUNE, VIRUSIMMUNE, NOGUNS) - bodyflags = HAS_SKIN_COLOR brute_mod = 0.45 //55% damage reduction burn_mod = 0.45 tox_mod = 0.45 @@ -50,9 +49,9 @@ "is crumbling into dust!", "is smashing their body apart!") - var/golem_colour = "aaa" + var/golem_colour = rgb(170, 170, 170) var/info_text = "As an Iron Golem, you don't have any special traits." - var/random_eligible = TRUE //If false, the golem subtype can't be made through golem mutation toxin + var/random_eligible = TRUE var/prefix = "Iron" var/list/special_names = list("Tarkus") var/human_surname_chance = 3 @@ -120,7 +119,7 @@ "adamantine_resonator" = /obj/item/organ/internal/adamantine_resonator, "vocal_cords" = /obj/item/organ/internal/vocal_cords/adamantine ) - golem_colour = "4ed" + golem_colour = rgb(68, 238, 221) info_text = "As an Adamantine Golem, you possess special vocal cords allowing you to \"resonate\" messages to all golems." prefix = "Adamantine" special_names = null @@ -129,7 +128,7 @@ /datum/species/golem/plasma name = "Plasma Golem" skinned_type = /obj/item/stack/ore/plasma - golem_colour = "a3d" + golem_colour = rgb(170, 51, 221) //Can burn and takes damage from heat heat_level_1 = 360 heat_level_2 = 400 @@ -188,7 +187,7 @@ //Harder to hurt /datum/species/golem/diamond name = "Diamond Golem" - golem_colour = "0ff" + golem_colour = rgb(0, 255, 255) brute_mod = 0.3 //70% damage reduction up from 55% burn_mod = 0.3 tox_mod = 0.3 @@ -200,7 +199,7 @@ //Faster but softer and less armoured /datum/species/golem/gold name = "Gold Golem" - golem_colour = "cc0" + golem_colour = rgb(204, 204, 0) slowdown = 2 brute_mod = 0.75 //25% damage reduction down from 55% burn_mod = 0.75 @@ -213,7 +212,7 @@ //Heavier, thus higher chance of stunning when punching /datum/species/golem/silver name = "Silver Golem" - golem_colour = "cc0" + golem_colour = rgb(221, 221, 221) punchstunthreshold = 9 //60% chance, from 40% skinned_type = /obj/item/stack/ore/silver info_text = "As a Silver Golem, your attacks have a higher chance of stunning." @@ -223,7 +222,7 @@ //Harder to stun, deals more damage, but it's even slower /datum/species/golem/plasteel name = "Plasteel Golem" - golem_colour = "bbb" + golem_colour = rgb(187, 187, 187) stun_mod = 0.4 punchdamagelow = 12 punchdamagehigh = 21 @@ -243,7 +242,7 @@ //Add ashstorm resistance if we ever port lavaland /datum/species/golem/titanium name = "Titanium Golem" - golem_colour = "fff" + golem_colour = rgb(255, 255, 255) skinned_type = /obj/item/stack/ore/titanium info_text = "As a Titanium Golem, you are resistant to burn damage." burn_mod = 0.3 @@ -254,7 +253,7 @@ //Add ashstorm and lava resistance if we ever port lavaland /datum/species/golem/plastitanium name = "Plastitanium Golem" - golem_colour = "888" + golem_colour = rgb(136, 136, 136) skinned_type = /obj/item/stack/ore/titanium info_text = "As a Plastitanium Golem, you are very resistant to burn damage." burn_mod = 0.15 @@ -264,7 +263,7 @@ //Fast and regenerates... but can only speak like an abductor /datum/species/golem/alloy name = "Alien Alloy Golem" - golem_colour = "333" + golem_colour = rgb(51, 51, 51) skinned_type = /obj/item/stack/sheet/mineral/abductor language = "Golem Mindlink" default_language = "Golem Mindlink" @@ -293,7 +292,7 @@ //Regenerates like dionas, less resistant /datum/species/golem/wood name = "Wood Golem" - golem_colour = "9E704B" + golem_colour = rgb(158, 112, 75) skinned_type = /obj/item/stack/sheet/wood //Can burn and take damage from heat brute_mod = 0.7 //30% damage reduction down from 55% @@ -336,7 +335,7 @@ //Radioactive /datum/species/golem/uranium name = "Uranium Golem" - golem_colour = "7f0" + golem_colour = rgb(119, 255, 0) skinned_type = /obj/item/stack/ore/uranium info_text = "As an Uranium Golem, you emit radiation. It won't harm fellow golems, but organic lifeforms will be affected." prefix = "Uranium" @@ -355,7 +354,7 @@ name = "Plastic Golem" prefix = "Plastic" special_names = null - golem_colour = "fff" + golem_colour = rgb(255, 255, 255) skinned_type = /obj/item/stack/sheet/plastic info_text = "As a Plastic Golem, you are capable of ventcrawling if you're naked." @@ -370,7 +369,7 @@ //Immune to physical bullets and resistant to brute, but very vulnerable to burn damage. Dusts on death. /datum/species/golem/sand name = "Sand Golem" - golem_colour = "ffdc8f" + golem_colour = rgb(255, 220, 143) skinned_type = /obj/item/stack/ore/glass //this is sand brute_mod = 0.25 burn_mod = 3 @@ -402,7 +401,7 @@ //Reflects lasers and resistant to burn damage, but very vulnerable to brute damage. Shatters on death. /datum/species/golem/glass name = "Glass Golem" - golem_colour = "5a96b4aa" //transparent body + golem_colour = rgb(90, 150, 180) skinned_type = /obj/item/shard brute_mod = 3 //very fragile burn_mod = 0.25 @@ -447,7 +446,7 @@ //Teleports when hit or when it wants to /datum/species/golem/bluespace name = "Bluespace Golem" - golem_colour = "33f" + golem_colour = rgb(51, 51, 255) skinned_type = /obj/item/stack/ore/bluespace_crystal info_text = "As a Bluespace Golem, you are spatially unstable: You will teleport when hit, and you can teleport manually at a long distance." prefix = "Bluespace" @@ -571,8 +570,7 @@ //honk /datum/species/golem/bananium name = "Bananium Golem" - golem_colour = "ff0" - //say_mod = "honks" + golem_colour = rgb(255, 255, 0) punchdamagelow = 0 punchdamagehigh = 0 punchstunthreshold = 1 //Harmless and can't stun @@ -598,7 +596,8 @@ H.equip_to_slot_or_del(new /obj/item/bikehorn(H), slot_l_store) /datum/species/golem/bananium/get_random_name() - var/golem_name = pick(GLOB.clown_names) + var/clown_name = pick(GLOB.clown_names) + var/golem_name = "[prefix] [clown_name]" return golem_name /datum/species/golem/bananium/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style) @@ -654,13 +653,14 @@ name = "Tranquillite Golem" prefix = "Tranquillite" special_names = null - golem_colour = "fff" + golem_colour = rgb(255, 255, 255) skinned_type = /obj/item/stack/ore/tranquillite info_text = "As a Tranquillite Golem, you are capable of creating invisible walls, and can regenerate by drinking your bottle of Nothing." unarmed_type = /datum/unarmed_attack/golem/tranquillite /datum/species/golem/tranquillite/get_random_name() - var/golem_name = pick(GLOB.mime_names) + var/mime_name = pick(GLOB.mime_names) + var/golem_name = "[prefix] [mime_name]" return golem_name /datum/species/golem/tranquillite/on_species_gain(mob/living/carbon/human/H) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 1d7dc2869eb..ff93cd54b80 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -222,6 +222,10 @@ var/global/list/damage_icon_parts = list() base_icon.Blend(temp, ICON_OVERLAY) if(!skeleton) + if(isgolem(src)) + var/datum/species/golem/G = src.dna.species + if(G.golem_colour) + base_icon.ColorTone(G.golem_colour) if(husk) base_icon.ColorTone(husk_color_mod) else if(hulk) @@ -239,6 +243,7 @@ var/global/list/damage_icon_parts = list() var/mutable_appearance/new_base = mutable_appearance(base_icon, layer = -LIMBS_LAYER) human_icon_cache[icon_key] = new_base standing += new_base + //END CACHED ICON GENERATION. overlays_standing[LIMBS_LAYER] = standing diff --git a/icons/mob/human_races/golems/r_golem.dmi b/icons/mob/human_races/golems/r_golem.dmi deleted file mode 100644 index 4ff5ed710008aa61ab66428fc28274c0518c94de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6410 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 Date: Tue, 5 Feb 2019 02:51:40 +0000 Subject: [PATCH 019/103] add robo access, space cleaners, fix bana golem bug --- _maps/map_files/cyberiad/z3.dmm | 2 +- code/game/objects/items/weapons/cards_ids.dm | 2 +- code/modules/mob/living/carbon/human/species/_species.dm | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/_maps/map_files/cyberiad/z3.dmm b/_maps/map_files/cyberiad/z3.dmm index b3e2017d5cd..9c101ea0e78 100644 --- a/_maps/map_files/cyberiad/z3.dmm +++ b/_maps/map_files/cyberiad/z3.dmm @@ -41,7 +41,7 @@ "aO" = (/turf/simulated/shuttle/wall{dir = 2; icon_state = "swall8"; tag = "icon-swall12"},/area/shuttle/freegolem) "aP" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/shuttle/freegolem) "aQ" = (/obj/structure/closet/crate/golemgear,/turf/simulated/shuttle/plating,/area/shuttle/freegolem) -"aR" = (/obj/item/storage/toolbox/mechanical,/turf/simulated/shuttle/plating,/area/shuttle/freegolem) +"aR" = (/obj/item/storage/toolbox/mechanical,/obj/item/reagent_containers/spray/cleaner,/turf/simulated/shuttle/plating,/area/shuttle/freegolem) "aS" = (/turf/simulated/shuttle/plating,/area/shuttle/freegolem) "aT" = (/obj/structure/lattice,/turf/space,/area/space) "aU" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/shuttle/plating,/area/shuttle/freegolem) diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index 9d4fb95d58b..150b21692f2 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -790,7 +790,7 @@ name = "Free Golem ID" desc = "A card used to claim mining points and buy gear. Use it to mark it as yours." icon_state = "research" - access = list(access_free_golems) + access = list(access_free_golems, access_robotics, access_clown, access_mime) //access to robots/mechs var/registered = FALSE /obj/item/card/id/golem/attack_self(mob/user as mob) diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm index f1aa0928e21..e5d5c070aae 100644 --- a/code/modules/mob/living/carbon/human/species/_species.dm +++ b/code/modules/mob/living/carbon/human/species/_species.dm @@ -361,7 +361,9 @@ user.do_attack_animation(target, attack.animation_type) if(attack.harmless) + playsound(target.loc, attack.attack_sound, 25, 1, -1) target.visible_message("[user] [pick(attack.attack_verb)]ed [target]!") + return FALSE add_attack_logs(user, target, "Melee attacked with fists", target.ckey ? null : ATKLOG_ALL) if(!iscarbon(user)) From 0c0e4a02af9492f72fd5b5242e0a986dbb75aba9 Mon Sep 17 00:00:00 2001 From: Shadeykins Date: Mon, 4 Feb 2019 20:25:43 -0700 Subject: [PATCH 020/103] Removes several disabilities, adds chav. --- code/__DEFINES/genetics.dm | 21 +++++++-------- code/modules/client/preference/preferences.dm | 27 +++---------------- 2 files changed, 13 insertions(+), 35 deletions(-) diff --git a/code/__DEFINES/genetics.dm b/code/__DEFINES/genetics.dm index 5076a65db47..389b96f6a57 100644 --- a/code/__DEFINES/genetics.dm +++ b/code/__DEFINES/genetics.dm @@ -8,18 +8,15 @@ // Used in preferences. #define DISABILITY_FLAG_NEARSIGHTED 1 #define DISABILITY_FLAG_FAT 2 -#define DISABILITY_FLAG_EPILEPTIC 4 -#define DISABILITY_FLAG_DEAF 8 -#define DISABILITY_FLAG_BLIND 16 -#define DISABILITY_FLAG_MUTE 32 -#define DISABILITY_FLAG_COLOURBLIND 64 -#define DISABILITY_FLAG_WINGDINGS 128 -#define DISABILITY_FLAG_TOURETTES 512 -#define DISABILITY_FLAG_NERVOUS 1024 -#define DISABILITY_FLAG_SWEDISH 2048 -#define DISABILITY_FLAG_SCRAMBLED 4096 // incoherent speech -#define DISABILITY_FLAG_LISP 8192 -#define DISABILITY_FLAG_DIZZY 16384 +#define DISABILITY_FLAG_BLIND 4 +#define DISABILITY_FLAG_MUTE 8 +#define DISABILITY_FLAG_COLOURBLIND 16 +#define DISABILITY_FLAG_WINGDINGS 32 +#define DISABILITY_FLAG_NERVOUS 64 +#define DISABILITY_FLAG_SWEDISH 128 +#define DISABILITY_FLAG_LISP 256 +#define DISABILITY_FLAG_DIZZY 512 +#define DISABILITY_FLAG_CHAV 1024 /////////////////////////////////////// // MUTATIONS diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index e6c569c35c5..e84703d4cad 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -844,17 +844,14 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts HTML += ShowDisabilityState(user, DISABILITY_FLAG_WINGDINGS, "Speak in Wingdings") HTML += ShowDisabilityState(user, DISABILITY_FLAG_NEARSIGHTED, "Needs glasses") HTML += ShowDisabilityState(user, DISABILITY_FLAG_FAT, "Obese") - HTML += ShowDisabilityState(user, DISABILITY_FLAG_EPILEPTIC, "Seizures") - HTML += ShowDisabilityState(user, DISABILITY_FLAG_DEAF, "Deaf") HTML += ShowDisabilityState(user, DISABILITY_FLAG_BLIND, "Blind") HTML += ShowDisabilityState(user, DISABILITY_FLAG_COLOURBLIND, "Colourblind") HTML += ShowDisabilityState(user, DISABILITY_FLAG_MUTE, "Mute") - HTML += ShowDisabilityState(user, DISABILITY_FLAG_TOURETTES, "Tourettes syndrome") // this will / can not be abused. It also SEVERELY stuns. It's just for fun. HTML += ShowDisabilityState(user, DISABILITY_FLAG_NERVOUS, "Stutter") HTML += ShowDisabilityState(user, DISABILITY_FLAG_SWEDISH, "Swedish accent") + HTML += ShowDisabilityState(user, DISABILITY_FLAG_SWEDISH, "Chav accent") HTML += ShowDisabilityState(user, DISABILITY_FLAG_LISP, "Lisp") HTML += ShowDisabilityState(user, DISABILITY_FLAG_DIZZY, "Dizziness") - HTML += ShowDisabilityState(user, DISABILITY_FLAG_SCRAMBLED, "Can't speak properly") HTML += {" @@ -2204,14 +2201,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts character.dna.SetSEState(GLASSESBLOCK, TRUE, TRUE) character.dna.default_blocks.Add(GLASSESBLOCK) - if(disabilities & DISABILITY_FLAG_EPILEPTIC) - character.dna.SetSEState(EPILEPSYBLOCK, TRUE, TRUE) - character.dna.default_blocks.Add(EPILEPSYBLOCK) - - if(disabilities & DISABILITY_FLAG_DEAF) - character.dna.SetSEState(DEAFBLOCK, TRUE, TRUE) - character.dna.default_blocks.Add(DEAFBLOCK) - if(disabilities & DISABILITY_FLAG_BLIND) character.dna.SetSEState(BLINDBLOCK, TRUE, TRUE) character.dna.default_blocks.Add(BLINDBLOCK) @@ -2224,10 +2213,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts character.dna.SetSEState(MUTEBLOCK, TRUE, TRUE) character.dna.default_blocks.Add(MUTEBLOCK) - if(disabilities & DISABILITY_FLAG_TOURETTES) - character.dna.SetSEState(TWITCHBLOCK, TRUE, TRUE) - character.dna.default_blocks.Add(TWITCHBLOCK) - if(disabilities & DISABILITY_FLAG_NERVOUS) character.dna.SetSEState(NERVOUSBLOCK, TRUE, TRUE) character.dna.default_blocks.Add(NERVOUSBLOCK) @@ -2236,9 +2221,9 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts character.dna.SetSEState(SWEDEBLOCK, TRUE, TRUE) character.dna.default_blocks.Add(SWEDEBLOCK) - if(disabilities & DISABILITY_FLAG_SCRAMBLED) - character.dna.SetSEState(SCRAMBLEBLOCK, TRUE, TRUE) - character.dna.default_blocks.Add(SCRAMBLEBLOCK) + if(disabilities & DISABILITY_FLAG_CHAV) + character.dna.SetSEState(CHAVBLOCK, TRUE, TRUE) + character.dna.default_blocks.Add(CHAVBLOCK) if(disabilities & DISABILITY_FLAG_LISP) character.dna.SetSEState(LISPBLOCK, TRUE, TRUE) @@ -2248,10 +2233,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts character.dna.SetSEState(DIZZYBLOCK, TRUE, TRUE) character.dna.default_blocks.Add(DIZZYBLOCK) - if(disabilities & DISABILITY_FLAG_SCRAMBLED) - character.dna.SetSEState(SCRAMBLEBLOCK, TRUE, TRUE) - character.dna.default_blocks.Add(SCRAMBLEBLOCK) - if(disabilities & DISABILITY_FLAG_WINGDINGS && (CAN_WINGDINGS in character.dna.species.species_traits)) character.dna.SetSEState(WINGDINGSBLOCK, TRUE, TRUE) character.dna.default_blocks.Add(WINGDINGSBLOCK) From 0638fb599ddec61ea1e37128b9c3a317d0c22c3c Mon Sep 17 00:00:00 2001 From: Shadeykins Date: Mon, 4 Feb 2019 20:35:57 -0700 Subject: [PATCH 021/103] Woopwoop. --- code/modules/client/preference/preferences.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index e84703d4cad..be3ea2907e3 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -849,7 +849,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts HTML += ShowDisabilityState(user, DISABILITY_FLAG_MUTE, "Mute") HTML += ShowDisabilityState(user, DISABILITY_FLAG_NERVOUS, "Stutter") HTML += ShowDisabilityState(user, DISABILITY_FLAG_SWEDISH, "Swedish accent") - HTML += ShowDisabilityState(user, DISABILITY_FLAG_SWEDISH, "Chav accent") + HTML += ShowDisabilityState(user, DISABILITY_FLAG_CHAV, "Chav accent") HTML += ShowDisabilityState(user, DISABILITY_FLAG_LISP, "Lisp") HTML += ShowDisabilityState(user, DISABILITY_FLAG_DIZZY, "Dizziness") From fffe081a8f271a128e65370123a05292f3356e2c Mon Sep 17 00:00:00 2001 From: Shadeykins Date: Mon, 4 Feb 2019 20:58:34 -0700 Subject: [PATCH 022/103] Adjusts restrictions to remove deprecated options. --- code/game/jobs/job/job.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index 68b06b8e000..9d6b8d8927c 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -118,7 +118,7 @@ return 0 if(disabilities_allowed) return 0 - var/list/prohibited_disabilities = list(DISABILITY_FLAG_DEAF, DISABILITY_FLAG_BLIND, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_SCRAMBLED, DISABILITY_FLAG_EPILEPTIC, DISABILITY_FLAG_TOURETTES, DISABILITY_FLAG_DIZZY) + var/list/prohibited_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY) for(var/i = 1, i < prohibited_disabilities.len, i++) var/this_disability = prohibited_disabilities[i] if(C.prefs.disabilities & this_disability) From 7efeed6904ad7bbf2b6adc60b576086ea19246b6 Mon Sep 17 00:00:00 2001 From: datlo Date: Tue, 5 Feb 2019 04:02:46 +0000 Subject: [PATCH 023/103] readd feedback i accidentally removed --- code/modules/reagents/chemistry/recipes/slime_extracts.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index c1d7fb0fbc0..aa457938afc 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -530,6 +530,7 @@ required_other = 1 /datum/chemical_reaction/slimegolem/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") new /obj/item/stack/sheet/mineral/adamantine(get_turf(holder.my_atom)) //Bluespace From 1981185b7ccd5e4d0565dd371199f913ec735cf2 Mon Sep 17 00:00:00 2001 From: datlo Date: Tue, 5 Feb 2019 04:24:41 +0000 Subject: [PATCH 024/103] formattng and removed outdated comments --- code/modules/mob/living/carbon/human/species/golem.dm | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species/golem.dm b/code/modules/mob/living/carbon/human/species/golem.dm index fa6ae40b0cb..12ec8948b87 100644 --- a/code/modules/mob/living/carbon/human/species/golem.dm +++ b/code/modules/mob/living/carbon/human/species/golem.dm @@ -84,7 +84,6 @@ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/golem(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/golem(H), slot_wear_mask) H.equip_to_slot_or_del(new /obj/item/clothing/gloves/golem(H), slot_gloves) - //H.skin_colour = golem_colour H.regenerate_icons() to_chat(H, info_text) @@ -129,14 +128,13 @@ name = "Plasma Golem" skinned_type = /obj/item/stack/ore/plasma golem_colour = rgb(170, 51, 221) - //Can burn and takes damage from heat heat_level_1 = 360 heat_level_2 = 400 heat_level_3 = 460 info_text = "As a Plasma Golem, you burn easily. Be careful, if you get hot enough while burning, you'll blow up!" heatmod = 0 //fine until they blow up prefix = "Plasma" - special_names = list("Flood","Fire","Bar","Man") + special_names = list("Flood", "Fire", "Bar", "Man") var/boom_warning = FALSE var/datum/action/innate/ignite/ignite From 265e102c43278eb64a7e307b34303debdcba8bdf Mon Sep 17 00:00:00 2001 From: AffectedArc07 Date: Tue, 5 Feb 2019 19:13:34 +0000 Subject: [PATCH 025/103] Makes ID getting more user friendly --- code/modules/discord/accountlink.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/modules/discord/accountlink.dm b/code/modules/discord/accountlink.dm index b03e8af2142..c2091082f6c 100644 --- a/code/modules/discord/accountlink.dm +++ b/code/modules/discord/accountlink.dm @@ -17,7 +17,10 @@ while(db_discord_id.NextRow()) stored_id = db_discord_id.item[1] if(!stored_id) // Not linked - var/entered_id = input("Please enter your Discord ID. Instructions can be found at https://bit.ly/2AfUu40", "Enter Discord ID", null, null) as text|null + var/know_how = alert("Do you know how to get a discord user ID?","Question","Yes","No") + if(know_how == "No") // Opens discord support on how to collect IDs + src << link("https://support.discordapp.com/hc/en-us/articles/206346498-Where-can-I-find-my-User-Server-Message-ID") + var/entered_id = input("Please enter your Discord ID.", "Enter Discord ID", null, null) as text|null var/sql_id = sanitizeSQL(entered_id) var/DBQuery/store_discord_id = dbcon.NewQuery("INSERT INTO [format_table_name("discord")] (ckey, discord_id, notify) VALUES ('[ckey]', [sql_id], 0)") if(!store_discord_id.Execute()) From 5bda717d37a6936c2af6290719b49131e5999c28 Mon Sep 17 00:00:00 2001 From: Shadeykins Date: Tue, 5 Feb 2019 16:29:41 -0700 Subject: [PATCH 026/103] casing/descriptions --- .../food_and_drinks/food/foods/candy.dm | 32 +++++----- .../food_and_drinks/food/foods/ethnic.dm | 16 ++--- .../food_and_drinks/food/foods/ingredients.dm | 24 ++++---- .../food_and_drinks/food/foods/junkfood.dm | 4 +- .../food_and_drinks/food/foods/meat.dm | 60 +++++++++---------- .../food_and_drinks/food/foods/misc.dm | 22 +++---- .../food_and_drinks/food/foods/pasta.dm | 14 ++--- .../food_and_drinks/food/foods/pizza.dm | 36 +++++------ .../food_and_drinks/food/foods/sandwiches.dm | 38 ++++++------ .../food_and_drinks/food/foods/seafood.dm | 56 ++++++++--------- .../food_and_drinks/food/foods/side_dishes.dm | 4 +- .../food_and_drinks/food/foods/soups.dm | 26 ++++---- code/modules/food_and_drinks/food/snacks.dm | 2 +- 13 files changed, 167 insertions(+), 167 deletions(-) diff --git a/code/modules/food_and_drinks/food/foods/candy.dm b/code/modules/food_and_drinks/food/foods/candy.dm index 857c68036a2..d45537bfe27 100644 --- a/code/modules/food_and_drinks/food/foods/candy.dm +++ b/code/modules/food_and_drinks/food/foods/candy.dm @@ -18,14 +18,14 @@ // *********************************************************** /obj/item/reagent_containers/food/snacks/chocolatebar - name = "Chocolate Bar" + name = "chocolate bar" desc = "Such sweet, fattening food." icon_state = "chocolatebar" filling_color = "#7D5F46" list_reagents = list("nutriment" = 2, "chocolate" = 4) /obj/item/reagent_containers/food/snacks/candy/caramel - name = "Caramel" + name = "caramel" desc = "Chewy and dense, yet it practically melts in your mouth!" icon_state = "caramel" filling_color = "#DB944D" @@ -33,21 +33,21 @@ /obj/item/reagent_containers/food/snacks/candy/toffee - name = "Toffee" + name = "toffee" desc = "A hard, brittle candy with a distinctive taste." icon_state = "toffee" filling_color = "#7D5F46" list_reagents = list("nutriment" = 3, "sugar" = 3) /obj/item/reagent_containers/food/snacks/candy/nougat - name = "Nougat" + name = "nougat" desc = "A soft, chewy candy commonly found in candybars." icon_state = "nougat" filling_color = "#7D5F46" list_reagents = list("nutriment" = 3, "sugar" = 3) /obj/item/reagent_containers/food/snacks/candy/taffy - name = "Saltwater Taffy" + name = "saltwater taffy" desc = "Old fashioned saltwater taffy. Chewy!" icon_state = "candy1" filling_color = "#7D5F46" @@ -58,7 +58,7 @@ icon_state = pick("candy1", "candy2", "candy3", "candy4", "candy5") /obj/item/reagent_containers/food/snacks/candy/fudge - name = "Fudge" + name = "fudge" desc = "Chocolate fudge, a timeless classic treat." icon_state = "fudge" filling_color = "#7D5F46" @@ -66,26 +66,26 @@ list_reagents = list("cream" = 3, "chocolate" = 6) /obj/item/reagent_containers/food/snacks/candy/fudge/peanut - name = "Peanut Fudge" + name = "peanut fudge" desc = "Chocolate fudge, with bits of peanuts mixed in. People with nut allergies shouldn't eat this." icon_state = "fudge_peanut" filling_color = "#7D5F46" /obj/item/reagent_containers/food/snacks/candy/fudge/cherry - name = "Chocolate Cherry Fudge" + name = "chocolate cherry fudge" desc = "Chocolate fudge surrounding sweet cherries. Good for tricking kids into eating some fruit." icon_state = "fudge_cherry" filling_color = "#7D5F46" /obj/item/reagent_containers/food/snacks/candy/fudge/cookies_n_cream - name = "Cookies 'n' Cream Fudge" + name = "cookies 'n' cream fudge" desc = "An extra creamy fudge with bits of real chocolate cookie mixed in. Crunchy!" icon_state = "fudge_cookies_n_cream" filling_color = "#7D5F46" list_reagents = list("cream" = 6, "chocolate" = 6) /obj/item/reagent_containers/food/snacks/candy/fudge/turtle - name = "Turtle Fudge" + name = "turtle fudge" desc = "Chocolate fudge with caramel and nuts. It doesn't contain real turtles, thankfully." icon_state = "fudge_turtle" filling_color = "#7D5F46" @@ -95,7 +95,7 @@ // *********************************************************** /obj/item/reagent_containers/food/snacks/candy/donor - name = "Donor Candy" + name = "donor candy" desc = "A little treat for blood donors." trash = /obj/item/trash/candy bitesize = 5 @@ -509,32 +509,32 @@ list_reagents = list("nutriment" = 1, "chocolate" = 1) /obj/item/reagent_containers/food/snacks/candy/confectionery/rice - name = "Asteroid Crunch Bar" + name = "asteroid crunch bar" desc = "Crunchy rice deposits in delicious chocolate! A favorite of miners galaxy-wide." icon_state = "asteroidcrunch" trash = /obj/item/trash/candy filling_color = "#7D5F46" /obj/item/reagent_containers/food/snacks/candy/confectionery/toffee - name = "Yum-baton Bar" + name = "yum-baton bar" desc = "Chocolate and toffee in the shape of a baton. Security sure knows how to pound these down!" icon_state = "yumbaton" filling_color = "#7D5F46" /obj/item/reagent_containers/food/snacks/candy/confectionery/caramel - name = "Malper Bar" + name = "malper bar" desc = "A chocolate syringe filled with a caramel injection. Just what the doctor ordered!" icon_state = "malper" filling_color = "#7D5F46" /obj/item/reagent_containers/food/snacks/candy/confectionery/caramel_nougat - name = "Toxins Test Bar" + name = "toxins test bar" desc = "An explosive combination of chocolate, caramel, and nougat. Research has never been so tasty!" icon_state = "toxinstest" filling_color = "#7D5F46" /obj/item/reagent_containers/food/snacks/candy/confectionery/nougat - name = "Tool-erone Bar" + name = "tool-erone bar" desc = "Chocolate-covered nougat, shaped like a wrench. Great for an engineer on the go!" icon_state = "toolerone" filling_color = "#7D5F46" diff --git a/code/modules/food_and_drinks/food/foods/ethnic.dm b/code/modules/food_and_drinks/food/foods/ethnic.dm index ae8fc289798..9404992f5eb 100644 --- a/code/modules/food_and_drinks/food/foods/ethnic.dm +++ b/code/modules/food_and_drinks/food/foods/ethnic.dm @@ -11,7 +11,7 @@ list_reagents = list("nutriment" = 7, "vitamin" = 1) /obj/item/reagent_containers/food/snacks/burrito - name = "Burrito" + name = "burrito" desc = "Meat, beans, cheese, and rice wrapped up as an easy-to-hold meal." icon_state = "burrito" trash = /obj/item/trash/plate @@ -19,7 +19,7 @@ list_reagents = list("nutriment" = 4, "vitamin" = 1) /obj/item/reagent_containers/food/snacks/chimichanga - name = "Chimichanga" + name = "chimichanga" desc = "Time to eat a chimi-f***ing-changa." icon_state = "chimichanga" trash = /obj/item/trash/plate @@ -27,8 +27,8 @@ list_reagents = list("omnizine" = 4, "cheese" = 2) //Deadpool reference. Deal with it. /obj/item/reagent_containers/food/snacks/enchiladas - name = "Enchiladas" - desc = "Viva La Mexico!" + name = "enchiladas" + desc = "Viva la Mexico!" icon_state = "enchiladas" trash = /obj/item/trash/tray filling_color = "#A36A1F" @@ -57,7 +57,7 @@ list_reagents = list("nutriment" = 1, "beans" = 3, "msg" = 4, "sugar" = 2) /obj/item/reagent_containers/food/snacks/chinese/sweetsourchickenball - name = "Sweet & Sour Chicken Balls" + name = "sweet & sour chicken balls" desc = "Is this chicken cooked? The odds are better than wok paper scissors." icon_state = "chickenball" junkiness = 25 @@ -113,13 +113,13 @@ /obj/item/reagent_containers/food/snacks/human/kabob name = "-kabob" icon_state = "kabob" - desc = "A human meat, on a stick." + desc = "Human meat, on a stick." trash = /obj/item/stack/rods filling_color = "#A85340" list_reagents = list("nutriment" = 8) /obj/item/reagent_containers/food/snacks/monkeykabob - name = "Meat-kabob" + name = "meat-kabob" icon_state = "kabob" desc = "Delicious meat, on a stick." trash = /obj/item/stack/rods @@ -127,7 +127,7 @@ list_reagents = list("nutriment" = 8) /obj/item/reagent_containers/food/snacks/tofukabob - name = "Tofu-kabob" + name = "tofu-kabob" icon_state = "kabob" desc = "Vegan meat, on a stick." trash = /obj/item/stack/rods diff --git a/code/modules/food_and_drinks/food/foods/ingredients.dm b/code/modules/food_and_drinks/food/foods/ingredients.dm index 65c20eb7eba..8fb9773a48e 100644 --- a/code/modules/food_and_drinks/food/foods/ingredients.dm +++ b/code/modules/food_and_drinks/food/foods/ingredients.dm @@ -4,7 +4,7 @@ ////////////////////// /obj/item/reagent_containers/food/snacks/tofu - name = "Tofu" + name = "tofu" icon_state = "tofu" desc = "We all love tofu." filling_color = "#FFFEE0" @@ -12,7 +12,7 @@ list_reagents = list("plantmatter" = 2) /obj/item/reagent_containers/food/snacks/fried_tofu - name = "Fried Tofu" + name = "fried tofu" icon_state = "tofu" desc = "Proof that even vegetarians crave unhealthy foods." filling_color = "#FFFEE0" @@ -20,8 +20,8 @@ list_reagents = list("plantmatter" = 3) /obj/item/reagent_containers/food/snacks/soydope - name = "Soy Dope" - desc = "Dope from a soy." + name = "soy dope" + desc = "Like regular dope, but for the health concious consumer." icon_state = "soydope" trash = /obj/item/trash/plate filling_color = "#C4BF76" @@ -33,7 +33,7 @@ ////////////////////// /obj/item/reagent_containers/food/snacks/sliceable/cheesewheel - name = "Cheese wheel" + name = "cheese wheel" desc = "A big wheel of delicious Cheddar." icon_state = "cheesewheel" slice_path = /obj/item/reagent_containers/food/snacks/cheesewedge @@ -42,14 +42,14 @@ list_reagents = list("nutriment" = 15, "vitamin" = 5, "cheese" = 20) /obj/item/reagent_containers/food/snacks/cheesewedge - name = "Cheese wedge" + name = "cheese wedge" desc = "A wedge of delicious Cheddar. The cheese wheel it was cut from can't have gone far." icon_state = "cheesewedge" filling_color = "#FFF700" /obj/item/reagent_containers/food/snacks/weirdcheesewedge - name = "Weird Cheese" - desc = "Some kind of... gooey, messy, gloopy thing. Similar to cheese, but only in the looser sense of the word." + name = "weird cheese" + desc = "Some kind of... gooey, messy, gloopy thing. Similar to cheese, but only in the broad sense of the word." icon_state = "weirdcheesewedge" filling_color = "#00FF33" list_reagents = list("mercury" = 5, "lsd" = 5, "ethanol" = 5, "weird_cheese" = 5) @@ -76,13 +76,13 @@ list_reagents = list("protein" = 2) /obj/item/reagent_containers/food/snacks/watermelonslice - name = "Watermelon Slice" + name = "watermelon slice" desc = "A slice of watery goodness." icon_state = "watermelonslice" filling_color = "#FF3867" /obj/item/reagent_containers/food/snacks/pineappleslice - name = "Pineapple Slices" + name = "pineapple slices" desc = "Rings of pineapple." icon_state = "pineappleslice" filling_color = "#e5b437" @@ -134,14 +134,14 @@ ////////////////////// /obj/item/reagent_containers/food/snacks/chocolatebar - name = "Chocolate Bar" + name = "chocolate bar" desc = "Such sweet, fattening food." icon_state = "chocolatebar" filling_color = "#7D5F46" list_reagents = list("nutriment" = 2, "sugar" = 2, "cocoa" = 2) /obj/item/reagent_containers/food/snacks/choc_pile //for reagent chocolate being spilled on turfs - name = "Pile of Chocolate" + name = "pile of chocolate" desc = "A pile of pure chocolate pieces." icon_state = "cocoa" filling_color = "#7D5F46" diff --git a/code/modules/food_and_drinks/food/foods/junkfood.dm b/code/modules/food_and_drinks/food/foods/junkfood.dm index b221348e8d8..97d810a167e 100644 --- a/code/modules/food_and_drinks/food/foods/junkfood.dm +++ b/code/modules/food_and_drinks/food/foods/junkfood.dm @@ -25,7 +25,7 @@ /obj/item/reagent_containers/food/snacks/pistachios name = "Pistachios" icon_state = "pistachios" - desc = "A snack of deliciously salted pistachios. A perfectly valid choice..." + desc = "Deliciously salted pistachios. A perfectly valid choice..." trash = /obj/item/trash/pistachios filling_color = "#BAD145" junkiness = 20 @@ -68,7 +68,7 @@ /obj/item/reagent_containers/food/snacks/tastybread name = "bread tube" - desc = "Bread in a tube. Chewy...and surprisingly tasty." + desc = "Bread in a tube. Chewy and surprisingly tasty." icon_state = "tastybread" trash = /obj/item/trash/tastybread filling_color = "#A66829" diff --git a/code/modules/food_and_drinks/food/foods/meat.dm b/code/modules/food_and_drinks/food/foods/meat.dm index a7f4acb4405..1728bf14339 100644 --- a/code/modules/food_and_drinks/food/foods/meat.dm +++ b/code/modules/food_and_drinks/food/foods/meat.dm @@ -33,22 +33,22 @@ /obj/item/reagent_containers/food/snacks/meat/slab/meatproduct name = "meat product" - desc = "A slab of station reclaimed and chemically processed meat product." + desc = "A slab of reclaimed and chemically processed meat product." /obj/item/reagent_containers/food/snacks/meat/monkey //same as plain meat /obj/item/reagent_containers/food/snacks/meat/corgi - name = "Corgi meat" - desc = "Tastes like... well you know..." + name = "corgi meat" + desc = "Tastes like the HoP's hopes and dreams" /obj/item/reagent_containers/food/snacks/meat/pug - name = "Pug meat" - desc = "Tastes like... well you know..." + name = "pug meat" + desc = "Slightly less adorable in sliced form." /obj/item/reagent_containers/food/snacks/meat/ham - name = "Ham" - desc = "Taste like bacon." + name = "ham" + desc = "For when you need to go ham." list_reagents = list("protein" = 3, "porktonium" = 10) /obj/item/reagent_containers/food/snacks/meat/meatwheat @@ -61,7 +61,7 @@ /obj/item/reagent_containers/food/snacks/rawcutlet name = "raw cutlet" - desc = "A thin piece of raw meat." + desc = "A thin strip of raw meat." icon = 'icons/obj/food/food_ingredients.dmi' icon_state = "rawcutlet" bitesize = 1 @@ -86,7 +86,7 @@ /obj/item/reagent_containers/food/snacks/xenomeat name = "meat" - desc = "A slab of meat." + desc = "A slab of meat. It's green!" icon_state = "xenomeat" filling_color = "#43DE18" bitesize = 6 @@ -94,14 +94,14 @@ /obj/item/reagent_containers/food/snacks/spidermeat name = "spider meat" - desc = "A slab of spider meat." + desc = "A slab of spider meat. Not very appetizing." icon_state = "spidermeat" bitesize = 3 list_reagents = list("protein" = 3, "toxin" = 3, "vitamin" = 1) /obj/item/reagent_containers/food/snacks/lizardmeat name = "mutant lizard meat" - desc = "Seems to be a slab of meat from some mutant lizard thing?" + desc = "A peculiar slab of meat. It looks scaly and radioactive." icon_state = "xenomeat" filling_color = "#43DE18" bitesize = 3 @@ -109,19 +109,19 @@ /obj/item/reagent_containers/food/snacks/spiderleg name = "spider leg" - desc = "A still twitching leg of a giant spider... you don't really want to eat this, do you?" + desc = "A still twitching leg of a giant spider. You don't really want to eat this, do you?" icon_state = "spiderleg" list_reagents = list("protein" = 2, "toxin" = 2) /obj/item/reagent_containers/food/snacks/raw_bacon name = "raw bacon" - desc = "It's fleshy and pink!" + desc = "God's gift to man, in uncooked form." icon_state = "raw_bacon" list_reagents = list("nutriment" = 1, "porktonium" = 10) /obj/item/reagent_containers/food/snacks/spidereggs name = "spider eggs" - desc = "A cluster of juicy spider eggs. A great side dish for when you care not for your health." + desc = "A cluster of juicy spider eggs. A great side dish for when you don't care about your health." icon_state = "spidereggs" list_reagents = list("protein" = 2, "toxin" = 2) @@ -130,7 +130,7 @@ ////////////////////// /obj/item/reagent_containers/food/snacks/meatsteak - name = "Meat steak" + name = "meat steak" desc = "A piece of hot spicy meat." icon_state = "meatstake" trash = /obj/item/trash/plate @@ -140,13 +140,13 @@ /obj/item/reagent_containers/food/snacks/bacon name = "bacon" - desc = "It looks juicy and tastes amazing!" + desc = "It looks juicy and tastes amazing! Mmm... Bacon." icon_state = "bacon2" list_reagents = list("nutriment" = 4, "porktonium" = 10, "msg" = 4) /obj/item/reagent_containers/food/snacks/telebacon - name = "Tele Bacon" - desc = "It tastes a little odd but it is still delicious." + name = "tele bacon" + desc = "It tastes a little odd but it's still delicious." icon_state = "bacon" var/obj/item/radio/beacon/bacon/baconbeacon list_reagents = list("nutriment" = 4, "porktonium" = 10) @@ -161,15 +161,15 @@ baconbeacon.digest_delay() /obj/item/reagent_containers/food/snacks/meatball - name = "Meatball" + name = "meatball" desc = "A great meal all round." icon_state = "meatball" filling_color = "#DB0000" list_reagents = list("protein" = 4, "vitamin" = 1) /obj/item/reagent_containers/food/snacks/sausage - name = "Sausage" - desc = "A piece of mixed, long meat." + name = "sausage" + desc = "A piece of mixed and cased meat." icon_state = "sausage" filling_color = "#DB0000" list_reagents = list("protein" = 6, "vitamin" = 1, "porktonium" = 10) @@ -198,8 +198,8 @@ list_reagents = list("nutriment" = 3, "capsaicin" = 2) /obj/item/reagent_containers/food/snacks/wingfangchu - name = "Wing Fang Chu" - desc = "A savory dish of alien wing wang in soy." + name = "wing fang chu" + desc = "A savory dish of alien wing wang in soy. Wait, what?" icon_state = "wingfangchu" trash = /obj/item/trash/snack_bowl filling_color = "#43DE18" @@ -335,7 +335,7 @@ color = reagent_color /obj/item/reagent_containers/food/snacks/friedegg - name = "Fried egg" + name = "fried egg" desc = "A fried egg, with a touch of salt and pepper." icon_state = "friedegg" filling_color = "#FFDF78" @@ -343,21 +343,21 @@ list_reagents = list("nutriment" = 3, "egg" = 5) /obj/item/reagent_containers/food/snacks/boiledegg - name = "Boiled egg" + name = "boiled egg" desc = "A hard boiled egg." icon_state = "egg" filling_color = "#FFFFFF" list_reagents = list("nutriment" = 2, "egg" = 5, "vitamin" = 1) /obj/item/reagent_containers/food/snacks/chocolateegg - name = "Chocolate Egg" + name = "chocolate egg" desc = "Such sweet, fattening food." icon_state = "chocolateegg" filling_color = "#7D5F46" list_reagents = list("nutriment" = 4, "sugar" = 2, "cocoa" = 2) /obj/item/reagent_containers/food/snacks/omelette - name = "Omelette Du Fromage" + name = "omelette du fromage" desc = "That's all you can say!" icon_state = "omelette" trash = /obj/item/trash/plate @@ -379,7 +379,7 @@ /obj/item/reagent_containers/food/snacks/hotdog name = "hotdog" - desc = "Fresh footlong ready to go down on." + desc = "Not made with actual dogs. Hopefully." icon_state = "hotdog" bitesize = 3 list_reagents = list("nutriment" = 6, "ketchup" = 3, "vitamin" = 3) @@ -392,7 +392,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 2) /obj/item/reagent_containers/food/snacks/sliceable/turkey - name = "Turkey" + name = "turkey" desc = "A traditional turkey served with stuffing." icon_state = "turkey" slice_path = /obj/item/reagent_containers/food/snacks/turkeyslice @@ -408,7 +408,7 @@ /obj/item/reagent_containers/food/snacks/organ name = "organ" - desc = "It's good for you." + desc = "Technically qualifies as organic." icon = 'icons/obj/surgery.dmi' icon_state = "appendix" filling_color = "#E00D34" diff --git a/code/modules/food_and_drinks/food/foods/misc.dm b/code/modules/food_and_drinks/food/foods/misc.dm index 4c6c607eacb..7790a5ebe7b 100644 --- a/code/modules/food_and_drinks/food/foods/misc.dm +++ b/code/modules/food_and_drinks/food/foods/misc.dm @@ -4,7 +4,7 @@ ////////////////////// /obj/item/reagent_containers/food/snacks/eggplantparm - name = "Eggplant Parmigiana" + name = "eggplant parmigiana" desc = "The only good recipe for eggplant." icon_state = "eggplantparm" trash = /obj/item/trash/plate @@ -12,7 +12,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 2) /obj/item/reagent_containers/food/snacks/soylentgreen - name = "Soylent Green" + name = "soylent green" desc = "Not made of people. Honest." //Totally people. icon_state = "soylent_green" trash = /obj/item/trash/waffles @@ -20,7 +20,7 @@ list_reagents = list("nutriment" = 10, "vitamin" = 1) /obj/item/reagent_containers/food/snacks/soylentviridians - name = "Soylent Virdians" + name = "soylent virdians" desc = "Not made of people. Honest." //Actually honest for once. icon_state = "soylent_yellow" trash = /obj/item/trash/waffles @@ -28,7 +28,7 @@ list_reagents = list("nutriment" = 10, "vitamin" = 1) /obj/item/reagent_containers/food/snacks/monkeysdelight - name = "monkey's Delight" + name = "monkey's delight" desc = "Eeee Eee!" icon_state = "monkeysdelight" trash = /obj/item/trash/tray @@ -38,14 +38,14 @@ /obj/item/reagent_containers/food/snacks/dionaroast name = "roast diona" - desc = "It's like an enormous, leathery carrot. With an eye." + desc = "It's like an enormous leathery carrot... With an eye." icon_state = "dionaroast" trash = /obj/item/trash/plate filling_color = "#75754B" list_reagents = list("plantmatter" = 4, "nutriment" = 2, "radium" = 2, "vitamin" = 4) /obj/item/reagent_containers/food/snacks/tofurkey - name = "Tofurkey" + name = "tofurkey" desc = "A fake turkey made from tofu." icon_state = "tofurkey" filling_color = "#FFFEE0" @@ -58,7 +58,7 @@ ////////////////////// /obj/item/reagent_containers/food/snacks/aesirsalad - name = "Aesir salad" + name = "aesir salad" desc = "Probably too incredible for mortal men to fully enjoy." icon_state = "aesirsalad" trash = /obj/item/trash/snack_bowl @@ -97,7 +97,7 @@ list_reagents = list("nutriment" = 4) /obj/item/reagent_containers/food/snacks/warmdonkpocket - name = "Warm Donk-pocket" + name = "warm Donk-pocket" desc = "The food of choice for the seasoned traitor." icon_state = "donkpocket" filling_color = "#DEDEAB" @@ -107,7 +107,7 @@ M.reagents.add_reagent("omnizine", 15) /obj/item/reagent_containers/food/snacks/warmdonkpocket_weak - name = "Lightly Warm Donk-pocket" + name = "lightly warm Donk-pocket" desc = "The food of choice for the seasoned traitor. This one is lukewarm." icon_state = "donkpocket" filling_color = "#DEDEAB" @@ -135,7 +135,7 @@ ////////////////////// /obj/item/reagent_containers/food/snacks/boiledslimecore - name = "Boiled Slime Core" + name = "boiled slime core" desc = "A boiled red thing." icon_state = "boiledrorocore" bitesize = 3 @@ -162,7 +162,7 @@ ..() /obj/item/reagent_containers/food/snacks/liquidfood - name = "\improper LiquidFood Ration" + name = "\improper LiquidFood ration" desc = "A prepackaged grey slurry of all the essential nutrients for a spacefarer on the go. Should this be crunchy?" icon_state = "liquidfood" trash = /obj/item/trash/liquidfood diff --git a/code/modules/food_and_drinks/food/foods/pasta.dm b/code/modules/food_and_drinks/food/foods/pasta.dm index 1b9c253ab53..00500f096e5 100644 --- a/code/modules/food_and_drinks/food/foods/pasta.dm +++ b/code/modules/food_and_drinks/food/foods/pasta.dm @@ -4,7 +4,7 @@ ////////////////////// /obj/item/reagent_containers/food/snacks/spaghetti - name = "Spaghetti" + name = "spaghetti" desc = "A bundle of raw spaghetti." icon = 'icons/obj/food/pasta.dmi' icon_state = "spaghetti" @@ -12,7 +12,7 @@ list_reagents = list("nutriment" = 1, "vitamin" = 1) /obj/item/reagent_containers/food/snacks/macaroni - name = "Macaroni twists" + name = "macaroni twists" desc = "These are little twists of raw macaroni." icon = 'icons/obj/food/pasta.dmi' icon_state = "macaroni" @@ -25,8 +25,8 @@ ////////////////////// /obj/item/reagent_containers/food/snacks/boiledspaghetti - name = "Boiled Spaghetti" - desc = "A plain dish of noodles, this sucks." + name = "boiled spaghetti" + desc = "A plain dish of noodles. This sucks." icon = 'icons/obj/food/pasta.dmi' icon_state = "spaghettiboiled" trash = /obj/item/trash/plate @@ -45,7 +45,7 @@ /obj/item/reagent_containers/food/snacks/meatballspaghetti name = "spaghetti & Meatballs" - desc = "Now thats a nic'e meatball!" + desc = "Now thats a nice'a meatball!" icon = 'icons/obj/food/pasta.dmi' icon_state = "meatballspaghetti" trash = /obj/item/trash/plate @@ -53,7 +53,7 @@ list_reagents = list("nutriment" = 8, "synaptizine" = 5, "vitamin" = 4) /obj/item/reagent_containers/food/snacks/spesslaw - name = "Spesslaw" + name = "spesslaw" desc = "A lawyer's favourite." icon = 'icons/obj/food/pasta.dmi' icon_state = "spesslaw" @@ -61,7 +61,7 @@ list_reagents = list("nutriment" = 8, "synaptizine" = 10, "vitamin" = 6) /obj/item/reagent_containers/food/snacks/macncheese - name = "Macaroni cheese" + name = "macaroni cheese" desc = "One of the most comforting foods in the world. Apparently." trash = /obj/item/trash/snack_bowl icon = 'icons/obj/food/pasta.dmi' diff --git a/code/modules/food_and_drinks/food/foods/pizza.dm b/code/modules/food_and_drinks/food/foods/pizza.dm index c34d8943da7..c0f1a02656f 100644 --- a/code/modules/food_and_drinks/food/foods/pizza.dm +++ b/code/modules/food_and_drinks/food/foods/pizza.dm @@ -9,14 +9,14 @@ filling_color = "#BAA14C" /obj/item/reagent_containers/food/snacks/sliceable/pizza/margherita - name = "Margherita" + name = "margherita pizza" desc = "The golden standard of pizzas." icon_state = "pizzamargherita" slice_path = /obj/item/reagent_containers/food/snacks/margheritaslice list_reagents = list("nutriment" = 30, "tomatojuice" = 6, "vitamin" = 5) /obj/item/reagent_containers/food/snacks/margheritaslice - name = "Margherita slice" + name = "margherita slice" desc = "A slice of the classic pizza." icon = 'icons/obj/food/pizza.dmi' icon_state = "pizzamargheritaslice" @@ -24,63 +24,63 @@ list_reagents = list("nutriment" = 5) /obj/item/reagent_containers/food/snacks/sliceable/pizza/meatpizza - name = "Meatpizza" + name = "meat pizza" desc = "A pizza with meat topping." icon_state = "meatpizza" slice_path = /obj/item/reagent_containers/food/snacks/meatpizzaslice list_reagents = list("protein" = 30, "tomatojuice" = 6, "vitamin" = 8) /obj/item/reagent_containers/food/snacks/meatpizzaslice - name = "Meatpizza slice" + name = "meat pizza slice" desc = "A slice of a meaty pizza." icon = 'icons/obj/food/pizza.dmi' icon_state = "meatpizzaslice" filling_color = "#BAA14C" /obj/item/reagent_containers/food/snacks/sliceable/pizza/mushroompizza - name = "Mushroompizza" + name = "mushroom pizza" desc = "Very special pizza." icon_state = "mushroompizza" slice_path = /obj/item/reagent_containers/food/snacks/mushroompizzaslice list_reagents = list("plantmatter" = 30, "vitamin" = 5) /obj/item/reagent_containers/food/snacks/mushroompizzaslice - name = "Mushroompizza slice" + name = "mushroom pizza slice" desc = "Maybe it is the last slice of pizza in your life." icon = 'icons/obj/food/pizza.dmi' icon_state = "mushroompizzaslice" filling_color = "#BAA14C" /obj/item/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza - name = "Vegetable pizza" - desc = "No one of Tomato Sapiens were harmed during making this pizza." + name = "vegetable pizza" + desc = "No Tomato Sapiens were harmed during the making of this pizza." icon_state = "vegetablepizza" slice_path = /obj/item/reagent_containers/food/snacks/vegetablepizzaslice list_reagents = list("plantmatter" = 25, "tomatojuice" = 6, "oculine" = 12, "vitamin" = 5) /obj/item/reagent_containers/food/snacks/vegetablepizzaslice - name = "Vegetable pizza slice" + name = "vegetable pizza slice" desc = "A slice of the most green pizza of all pizzas not containing green ingredients." icon = 'icons/obj/food/pizza.dmi' icon_state = "vegetablepizzaslice" filling_color = "#BAA14C" /obj/item/reagent_containers/food/snacks/sliceable/pizza/hawaiianpizza - name = "Hawaiian Pizza" + name = "hawaiian pizza" desc = "Love it or hate it, this pizza divides opinions. Complete with juicy pineapple." icon_state = "hawaiianpizza" //NEEDED slice_path = /obj/item/reagent_containers/food/snacks/hawaiianpizzaslice list_reagents = list("protein" = 15, "tomatojuice" = 6, "plantmatter" = 20, "pineapplejuice" = 6, "vitamin" = 5) /obj/item/reagent_containers/food/snacks/hawaiianpizzaslice - name = "Hawaiian pizza slice" + name = "hawaiian pizza slice" desc = "A slice of polarising pizza." icon = 'icons/obj/food/pizza.dmi' icon_state = "hawaiianpizzaslice" filling_color = "#e5b437" /obj/item/reagent_containers/food/snacks/sliceable/pizza/macpizza - name = "Macaroni cheese pizza" + name = "macaroni cheese pizza" desc = "Gastronomists have yet to classify this dish as 'pizza'." icon_state = "macpizza" slice_path = /obj/item/reagent_containers/food/snacks/macpizzaslice @@ -88,7 +88,7 @@ filling_color = "#ffe45d" /obj/item/reagent_containers/food/snacks/macpizzaslice - name = "Macaroni cheese pizza slice" + name = "macaroni cheese pizza slice" desc = "A delicious slice of pizza topped with macaroni cheese... wait, what the hell? Who would do this?!" icon = 'icons/obj/food/pizza.dmi' icon_state = "macpizzaslice" @@ -235,20 +235,20 @@ /obj/item/pizzabox/margherita/New() pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/margherita(src) - boxtag = "Margherita Deluxe" + boxtag = "margherita deluxe" /obj/item/pizzabox/vegetable/New() pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza(src) - boxtag = "Gourmet Vegatable" + boxtag = "gourmet vegatable" /obj/item/pizzabox/mushroom/New() pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/mushroompizza(src) - boxtag = "Mushroom Special" + boxtag = "mushroom special" /obj/item/pizzabox/meat/New() pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/meatpizza(src) - boxtag = "Meatlover's Supreme" + boxtag = "meatlover's supreme" /obj/item/pizzabox/hawaiian/New() pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/hawaiianpizza(src) - boxtag = "Hawaiian Feast" \ No newline at end of file + boxtag = "hawaiian feast" \ No newline at end of file diff --git a/code/modules/food_and_drinks/food/foods/sandwiches.dm b/code/modules/food_and_drinks/food/foods/sandwiches.dm index a55a92ae3d1..d422b426353 100644 --- a/code/modules/food_and_drinks/food/foods/sandwiches.dm +++ b/code/modules/food_and_drinks/food/foods/sandwiches.dm @@ -5,14 +5,14 @@ /obj/item/reagent_containers/food/snacks/brainburger name = "brainburger" - desc = "A strange looking burger. It looks almost sentient." + desc = "A strange looking burger. It appears almost sentient." icon_state = "brainburger" filling_color = "#F2B6EA" bitesize = 3 list_reagents = list("nutriment" = 6, "prions" = 10, "vitamin" = 1) /obj/item/reagent_containers/food/snacks/ghostburger - name = "Ghost Burger" + name = "ghost burger" desc = "Spooky! It doesn't look very filling." icon_state = "ghostburger" filling_color = "#FFF2FF" @@ -47,8 +47,8 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) /obj/item/reagent_containers/food/snacks/tofuburger - name = "Tofu Burger" - desc = "What.. is that meat?" + name = "tofu burger" + desc = "Making this should probably be a criminal offense." icon_state = "tofuburger" filling_color = "#FFFEE0" bitesize = 3 @@ -73,14 +73,14 @@ /obj/item/reagent_containers/food/snacks/xenoburger name = "xenoburger" - desc = "Smells caustic. Tastes like heresy." + desc = "Smells caustic and tastes like heresy." icon_state = "xburger" filling_color = "#43DE18" bitesize = 3 list_reagents = list("nutriment" = 6, "vitamin" = 1) /obj/item/reagent_containers/food/snacks/clownburger - name = "Clown Burger" + name = "clown burger" desc = "This tastes funny..." icon_state = "clownburger" filling_color = "#FF00FF" @@ -88,7 +88,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) /obj/item/reagent_containers/food/snacks/mimeburger - name = "Mime Burger" + name = "mime burger" desc = "Its taste defies language." icon_state = "mimeburger" filling_color = "#FFFFFF" @@ -97,14 +97,14 @@ /obj/item/reagent_containers/food/snacks/baseballburger name = "home run baseball burger" - desc = "It's still warm. The steam coming off of it looks like baseball." + desc = "It's still warm. Batter up!" icon_state = "baseball" filling_color = "#CD853F" bitesize = 3 list_reagents = list("nutriment" = 6, "vitamin" = 1) /obj/item/reagent_containers/food/snacks/spellburger - name = "Spell Burger" + name = "spell burger" desc = "This is absolutely Ei Nath." icon_state = "spellburger" filling_color = "#D505FF" @@ -112,15 +112,15 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) /obj/item/reagent_containers/food/snacks/bigbiteburger - name = "Big Bite Burger" - desc = "Forget the Big Mac. THIS is the future!" + name = "big bite burger" + desc = "Forget the Big Mac, THIS is the future!" icon_state = "bigbiteburger" filling_color = "#E3D681" bitesize = 3 list_reagents = list("nutriment" = 10, "vitamin" = 2) /obj/item/reagent_containers/food/snacks/superbiteburger - name = "Super Bite Burger" + name = "super bite burger" desc = "This is a mountain of a burger. FOOD!" icon_state = "superbiteburger" filling_color = "#CCA26A" @@ -128,8 +128,8 @@ list_reagents = list("nutriment" = 40, "vitamin" = 5) /obj/item/reagent_containers/food/snacks/jellyburger - name = "Jelly Burger" - desc = "Culinary delight..?" + name = "jelly burger" + desc = "Culinary delight...?" icon_state = "jellyburger" filling_color = "#B572AB" bitesize = 3 @@ -146,7 +146,7 @@ ////////////////////// /obj/item/reagent_containers/food/snacks/sandwich - name = "Sandwich" + name = "sandwich" desc = "A grand creation of meat, cheese, bread, and several leaves of lettuce! Arthur Dent would be proud." icon_state = "sandwich" trash = /obj/item/trash/plate @@ -154,7 +154,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) /obj/item/reagent_containers/food/snacks/toastedsandwich - name = "Toasted Sandwich" + name = "toasted sandwich" desc = "Now if you only had a pepper bar." icon_state = "toastedsandwich" trash = /obj/item/trash/plate @@ -162,15 +162,15 @@ list_reagents = list("nutriment" = 6, "carbon" = 2) /obj/item/reagent_containers/food/snacks/grilledcheese - name = "Grilled Cheese Sandwich" - desc = "Goes great with Tomato soup!" + name = "grilled cheese sandwich" + desc = "Goes great with tomato soup!" icon_state = "toastedsandwich" trash = /obj/item/trash/plate filling_color = "#D9BE29" list_reagents = list("nutriment" = 7, "vitamin" = 1) //why make a regualr sandwhich when you can make grilled cheese, with this nutriment value? /obj/item/reagent_containers/food/snacks/jellysandwich - name = "Jelly Sandwich" + name = "jelly sandwich" desc = "You wish you had some peanut butter to go with this..." icon_state = "jellysandwich" trash = /obj/item/trash/plate diff --git a/code/modules/food_and_drinks/food/foods/seafood.dm b/code/modules/food_and_drinks/food/foods/seafood.dm index ad56ef00704..2ce01bc05d0 100644 --- a/code/modules/food_and_drinks/food/foods/seafood.dm +++ b/code/modules/food_and_drinks/food/foods/seafood.dm @@ -18,8 +18,8 @@ list_reagents = list("protein" = 3, "vitamin" = 2) /obj/item/reagent_containers/food/snacks/salmonsteak - name = "Salmon steak" - desc = "A piece of freshly-grilled salmon meat." + name = "salmon steak" + desc = "A fillet of freshly-grilled salmon meat." icon = 'icons/obj/food/seafood.dmi' icon_state = "salmonsteak" trash = /obj/item/trash/plate @@ -37,7 +37,7 @@ list_reagents = list("protein" = 3, "vitamin" = 2) /obj/item/reagent_containers/food/snacks/fishfingers - name = "Fish Fingers" + name = "fish fingers" desc = "A finger of fish." icon = 'icons/obj/food/seafood.dmi' icon_state = "fishfingers" @@ -46,7 +46,7 @@ list_reagents = list("nutriment" = 4) /obj/item/reagent_containers/food/snacks/fishburger - name = "Fillet -o- Carp Sandwich" + name = "fillet -o- carp sandwich" desc = "Almost like a carp is yelling somewhere... Give me back that fillet -o- carp, give me that carp." icon = 'icons/obj/food/seafood.dmi' icon_state = "fishburger" @@ -55,7 +55,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) /obj/item/reagent_containers/food/snacks/cubancarp - name = "Cuban Carp" + name = "Cuban carp" desc = "A grifftastic sandwich that burns your tongue and then leaves it numb!" icon = 'icons/obj/food/seafood.dmi' icon_state = "cubancarp" @@ -65,8 +65,8 @@ list_reagents = list("nutriment" = 6, "capsaicin" = 1) /obj/item/reagent_containers/food/snacks/fishandchips - name = "Fish and Chips" - desc = "I do say so myself chap." + name = "fish and chips" + desc = "I do say so myself old chap. Indubitably!" icon = 'icons/obj/food/seafood.dmi' icon_state = "fishandchips" filling_color = "#E3D796" @@ -98,7 +98,7 @@ list_reagents = list("nutriment" = 2) /obj/item/reagent_containers/food/snacks/sliceable/Ebi_maki - name = "Ebi Makiroll" + name = "ebi makiroll" desc = "A large unsliced roll of Ebi Sushi." icon = 'icons/obj/food/seafood.dmi' icon_state = "Ebi_maki" @@ -108,7 +108,7 @@ list_reagents = list("nutriment" = 8) /obj/item/reagent_containers/food/snacks/sushi_Ebi - name = "Ebi Sushi" + name = "ebi sushi" desc = "A simple sushi consisting of cooked shrimp and rice." icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_Ebi" @@ -116,7 +116,7 @@ list_reagents = list("nutriment" = 2) /obj/item/reagent_containers/food/snacks/sliceable/Ikura_maki - name = "Ikura Makiroll" + name = "ikura makiroll" desc = "A large unsliced roll of Ikura Sushi." icon = 'icons/obj/food/seafood.dmi' icon_state = "Ikura_maki" @@ -126,7 +126,7 @@ list_reagents = list("nutriment" = 8, "protein" = 4) /obj/item/reagent_containers/food/snacks/sushi_Ikura - name = "Ikura Sushi" + name = "ikura sushi" desc = "A simple sushi consisting of salmon roe." icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_Ikura" @@ -134,7 +134,7 @@ list_reagents = list("nutriment" = 2, "protein" = 1) /obj/item/reagent_containers/food/snacks/sliceable/Sake_maki - name = "Sake Makiroll" + name = "sake makiroll" desc = "A large unsliced roll of Ebi Sushi." icon = 'icons/obj/food/seafood.dmi' icon_state = "Sake_maki" @@ -144,7 +144,7 @@ list_reagents = list("nutriment" = 8) /obj/item/reagent_containers/food/snacks/sushi_Sake - name = "Sake Sushi" + name = "sake sushi" desc = "A simple sushi consisting of raw salmon and rice." icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_Sake" @@ -152,7 +152,7 @@ list_reagents = list("nutriment" = 2) /obj/item/reagent_containers/food/snacks/sliceable/SmokedSalmon_maki - name = "Smoked Salmon Makiroll" + name = "smoked salmon makiroll" desc = "A large unsliced roll of Smoked Salmon Sushi." icon = 'icons/obj/food/seafood.dmi' icon_state = "SmokedSalmon_maki" @@ -162,7 +162,7 @@ list_reagents = list("nutriment" = 8) /obj/item/reagent_containers/food/snacks/sushi_SmokedSalmon - name = "Smoked Salmon Sushi" + name = "smoked salmon sushi" desc = "A simple sushi consisting of cooked salmon and rice." icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_SmokedSalmon" @@ -170,7 +170,7 @@ list_reagents = list("nutriment" = 2) /obj/item/reagent_containers/food/snacks/sliceable/Tamago_maki - name = "Tamago Makiroll" + name = "tamago makiroll" desc = "A large unsliced roll of Tamago Sushi." icon = 'icons/obj/food/seafood.dmi' icon_state = "Tamago_maki" @@ -180,7 +180,7 @@ list_reagents = list("nutriment" = 8) /obj/item/reagent_containers/food/snacks/sushi_Tamago - name = "Tamago Sushi" + name = "tamago sushi" desc = "A simple sushi consisting of egg and rice." icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_Tamago" @@ -188,7 +188,7 @@ list_reagents = list("nutriment" = 2) /obj/item/reagent_containers/food/snacks/sliceable/Inari_maki - name = "Inari Makiroll" + name = "inari makiroll" desc = "A large unsliced roll of Inari Sushi." icon = 'icons/obj/food/seafood.dmi' icon_state = "Inari_maki" @@ -198,7 +198,7 @@ list_reagents = list("nutriment" = 8) /obj/item/reagent_containers/food/snacks/sushi_Inari - name = "Inari Sushi" + name = "inari sushi" desc = "A piece of fried tofu stuffed with rice." icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_Inari" @@ -206,7 +206,7 @@ list_reagents = list("nutriment" = 2) /obj/item/reagent_containers/food/snacks/sliceable/Masago_maki - name = "Masago Makiroll" + name = "masago makiroll" desc = "A large unsliced roll of Masago Sushi." icon = 'icons/obj/food/seafood.dmi' icon_state = "Masago_maki" @@ -216,7 +216,7 @@ list_reagents = list("nutriment" = 8, "protein" = 4) /obj/item/reagent_containers/food/snacks/sushi_Masago - name = "Masago Sushi" + name = "masago sushi" desc = "A simple sushi consisting of goldfish roe." icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_Masago" @@ -224,7 +224,7 @@ list_reagents = list("nutriment" = 2, "protein" = 1) /obj/item/reagent_containers/food/snacks/sliceable/Tobiko_maki - name = "Tobiko Makiroll" + name = "tobiko makiroll" desc = "A large unsliced roll of Tobkio Sushi." icon = 'icons/obj/food/seafood.dmi' icon_state = "Tobiko_maki" @@ -234,7 +234,7 @@ list_reagents = list("nutriment" = 8, "protein" = 4) /obj/item/reagent_containers/food/snacks/sushi_Tobiko - name = "Tobiko Sushi" + name = "tobiko sushi" desc = "A simple sushi consisting of shark roe." icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_Masago" @@ -242,7 +242,7 @@ list_reagents = list("nutriment" = 2, "protein" = 1) /obj/item/reagent_containers/food/snacks/sliceable/TobikoEgg_maki - name = "Tobiko and Egg Makiroll" + name = "tobiko and egg makiroll" desc = "A large unsliced roll of Tobkio and Egg Sushi." icon = 'icons/obj/food/seafood.dmi' icon_state = "TobikoEgg_maki" @@ -252,7 +252,7 @@ list_reagents = list("nutriment" = 8, "protein" = 4) /obj/item/reagent_containers/food/snacks/sushi_TobikoEgg - name = "Tobiko and Egg Sushi" + name = "tobiko and egg sushi" desc = "A sushi consisting of shark roe and an egg." icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_TobikoEgg" @@ -260,7 +260,7 @@ list_reagents = list("nutriment" = 2, "protein" = 1) /obj/item/reagent_containers/food/snacks/sliceable/Tai_maki - name = "Tai Makiroll" + name = "tai makiroll" desc = "A large unsliced roll of Tai Sushi." icon = 'icons/obj/food/seafood.dmi' icon_state = "Tai_maki" @@ -270,7 +270,7 @@ list_reagents = list("nutriment" = 8) /obj/item/reagent_containers/food/snacks/sushi_Tai - name = "Tai Sushi" + name = "tai sushi" desc = "A simple sushi consisting of catfish and rice." icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_Tai" @@ -278,7 +278,7 @@ list_reagents = list("nutriment" = 2) /obj/item/reagent_containers/food/snacks/sushi_Unagi - name = "Unagi Sushi" + name = "unagi sushi" desc = "A simple sushi consisting of eel and rice." icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_Hokki" diff --git a/code/modules/food_and_drinks/food/foods/side_dishes.dm b/code/modules/food_and_drinks/food/foods/side_dishes.dm index 7b563519ca3..ec562d4e8bb 100644 --- a/code/modules/food_and_drinks/food/foods/side_dishes.dm +++ b/code/modules/food_and_drinks/food/foods/side_dishes.dm @@ -74,7 +74,7 @@ list_reagents = list("nutriment" = 5, "gravy" = 5, "mashedpotatoes" = 10, "vitamin" = 2) /obj/item/reagent_containers/food/snacks/stuffing - name = "Stuffing" + name = "stuffing" desc = "Moist, peppery breadcrumbs for filling the body cavities of dead birds. Dig in!" icon_state = "stuffing" filling_color = "#C9AC83" @@ -88,7 +88,7 @@ list_reagents = list("nutriment" = 6) /obj/item/reagent_containers/food/snacks/boiledrice - name = "Boiled Rice" + name = "boiled rice" desc = "A boring dish of boring rice." icon_state = "boiledrice" trash = /obj/item/trash/snack_bowl diff --git a/code/modules/food_and_drinks/food/foods/soups.dm b/code/modules/food_and_drinks/food/foods/soups.dm index 76e4d752a41..2cc72044393 100644 --- a/code/modules/food_and_drinks/food/foods/soups.dm +++ b/code/modules/food_and_drinks/food/foods/soups.dm @@ -4,7 +4,7 @@ ////////////////////// /obj/item/reagent_containers/food/snacks/meatballsoup - name = "Meatball soup" + name = "meatball soup" desc = "You've got balls kid, BALLS!" icon_state = "meatballsoup" trash = /obj/item/trash/snack_bowl @@ -21,7 +21,7 @@ list_reagents = list("nutriment" = 5, "slimejelly" = 5, "water" = 5, "vitamin" = 4) /obj/item/reagent_containers/food/snacks/bloodsoup - name = "Tomato soup" + name = "tomato soup" desc = "Smells like copper." icon_state = "tomatosoup" filling_color = "#FF0000" @@ -29,7 +29,7 @@ list_reagents = list("nutriment" = 2, "blood" = 10, "water" = 5, "vitamin" = 4) /obj/item/reagent_containers/food/snacks/clownstears - name = "Clown's Tears" + name = "clown's tears" desc = "Not very funny." icon_state = "clownstears" filling_color = "#C4FBFF" @@ -37,7 +37,7 @@ list_reagents = list("nutriment" = 4, "banana" = 5, "water" = 5, "vitamin" = 8) /obj/item/reagent_containers/food/snacks/vegetablesoup - name = "Vegetable soup" + name = "vegetable soup" desc = "A true vegan meal." //TODO icon_state = "vegetablesoup" trash = /obj/item/trash/snack_bowl @@ -46,8 +46,8 @@ list_reagents = list("nutriment" = 8, "water" = 5, "vitamin" = 4) /obj/item/reagent_containers/food/snacks/nettlesoup - name = "Nettle soup" - desc = "To think, the botanist would've beat you to death with one of these." + name = "nettle soup" + desc = "To think, the botanist would've beaten you to death with one of these." icon_state = "nettlesoup" trash = /obj/item/trash/snack_bowl filling_color = "#AFC4B5" @@ -68,7 +68,7 @@ reagents.add_reagent("[extra_reagent]", 5) /obj/item/reagent_containers/food/snacks/wishsoup - name = "Wish Soup" + name = "wish soup" desc = "I wish this was soup." icon_state = "wishsoup" trash = /obj/item/trash/snack_bowl @@ -84,7 +84,7 @@ reagents.add_reagent("vitamin", 1) /obj/item/reagent_containers/food/snacks/tomatosoup - name = "Tomato Soup" + name = "tomato soup" desc = "Drinking this feels like being a vampire! A tomato vampire..." icon_state = "tomatosoup" trash = /obj/item/trash/snack_bowl @@ -93,7 +93,7 @@ list_reagents = list("nutriment" = 5, "tomatojuice" = 10, "vitamin" = 3) /obj/item/reagent_containers/food/snacks/milosoup - name = "Milosoup" + name = "milosoup" desc = "The universe's best soup! Yum!!!" icon_state = "milosoup" trash = /obj/item/trash/snack_bowl @@ -128,7 +128,7 @@ ////////////////////// /obj/item/reagent_containers/food/snacks/stew - name = "Stew" + name = "stew" desc = "A nice and warm stew. Healthy and strong." icon_state = "stew" filling_color = "#9E673A" @@ -136,7 +136,7 @@ list_reagents = list("nutriment" = 10, "oculine" = 5, "tomatojuice" = 5, "vitamin" = 5) /obj/item/reagent_containers/food/snacks/stewedsoymeat - name = "Stewed Soy Meat" + name = "stewed soy meat" desc = "Even non-vegetarians will LOVE this!" icon_state = "stewedsoymeat" trash = /obj/item/trash/plate @@ -148,7 +148,7 @@ ////////////////////// /obj/item/reagent_containers/food/snacks/hotchili - name = "Hot Chili" + name = "hot chili" desc = "A five alarm Texan Chili!" icon_state = "hotchili" trash = /obj/item/trash/snack_bowl @@ -157,7 +157,7 @@ list_reagents = list("nutriment" = 5, "capsaicin" = 1, "tomatojuice" = 2, "vitamin" = 2) /obj/item/reagent_containers/food/snacks/coldchili - name = "Cold Chili" + name = "cold chili" desc = "This slush is barely a liquid!" icon_state = "coldchili" filling_color = "#2B00FF" diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index bb857969d5c..b1cd3f091ff 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -264,7 +264,7 @@ /obj/item/reagent_containers/food/snacks/badrecipe - name = "Burned mess" + name = "burned mess" desc = "Someone should be demoted from chef for this." icon_state = "badrecipe" filling_color = "#211F02" From 00f97469ba041ee59da24308acb6e5bebec00ad4 Mon Sep 17 00:00:00 2001 From: Shadeykins Date: Tue, 5 Feb 2019 16:32:43 -0700 Subject: [PATCH 027/103] CS. --- code/modules/food_and_drinks/food/foods/meat.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/food_and_drinks/food/foods/meat.dm b/code/modules/food_and_drinks/food/foods/meat.dm index 1728bf14339..9ed4d013d21 100644 --- a/code/modules/food_and_drinks/food/foods/meat.dm +++ b/code/modules/food_and_drinks/food/foods/meat.dm @@ -115,7 +115,7 @@ /obj/item/reagent_containers/food/snacks/raw_bacon name = "raw bacon" - desc = "God's gift to man, in uncooked form." + desc = "God's gift to man in uncooked form." icon_state = "raw_bacon" list_reagents = list("nutriment" = 1, "porktonium" = 10) From a9e7267994aa03640dbbc663c7999dac95def70e Mon Sep 17 00:00:00 2001 From: Shadeykins Date: Tue, 5 Feb 2019 19:34:35 -0700 Subject: [PATCH 028/103] Fixes some casing. --- code/modules/food_and_drinks/food/foods/candy.dm | 10 +++++----- code/modules/food_and_drinks/food/foods/junkfood.dm | 2 +- code/modules/food_and_drinks/food/foods/meat.dm | 4 ++-- code/modules/food_and_drinks/food/foods/misc.dm | 2 +- code/modules/food_and_drinks/food/foods/pizza.dm | 4 ++-- code/modules/food_and_drinks/food/foods/sandwiches.dm | 4 ++-- code/modules/food_and_drinks/food/foods/seafood.dm | 2 +- code/modules/food_and_drinks/food/foods/soups.dm | 2 +- 8 files changed, 15 insertions(+), 15 deletions(-) diff --git a/code/modules/food_and_drinks/food/foods/candy.dm b/code/modules/food_and_drinks/food/foods/candy.dm index d45537bfe27..fb5ea043839 100644 --- a/code/modules/food_and_drinks/food/foods/candy.dm +++ b/code/modules/food_and_drinks/food/foods/candy.dm @@ -509,32 +509,32 @@ list_reagents = list("nutriment" = 1, "chocolate" = 1) /obj/item/reagent_containers/food/snacks/candy/confectionery/rice - name = "asteroid crunch bar" + name = "Asteroid Crunch Bar" desc = "Crunchy rice deposits in delicious chocolate! A favorite of miners galaxy-wide." icon_state = "asteroidcrunch" trash = /obj/item/trash/candy filling_color = "#7D5F46" /obj/item/reagent_containers/food/snacks/candy/confectionery/toffee - name = "yum-baton bar" + name = "Yum-Baton Bar" desc = "Chocolate and toffee in the shape of a baton. Security sure knows how to pound these down!" icon_state = "yumbaton" filling_color = "#7D5F46" /obj/item/reagent_containers/food/snacks/candy/confectionery/caramel - name = "malper bar" + name = "Malper Bar" desc = "A chocolate syringe filled with a caramel injection. Just what the doctor ordered!" icon_state = "malper" filling_color = "#7D5F46" /obj/item/reagent_containers/food/snacks/candy/confectionery/caramel_nougat - name = "toxins test bar" + name = "Toxins Test Bar" desc = "An explosive combination of chocolate, caramel, and nougat. Research has never been so tasty!" icon_state = "toxinstest" filling_color = "#7D5F46" /obj/item/reagent_containers/food/snacks/candy/confectionery/nougat - name = "tool-erone bar" + name = "Tool-erone Bar" desc = "Chocolate-covered nougat, shaped like a wrench. Great for an engineer on the go!" icon_state = "toolerone" filling_color = "#7D5F46" diff --git a/code/modules/food_and_drinks/food/foods/junkfood.dm b/code/modules/food_and_drinks/food/foods/junkfood.dm index 97d810a167e..3fa20f0d1c3 100644 --- a/code/modules/food_and_drinks/food/foods/junkfood.dm +++ b/code/modules/food_and_drinks/food/foods/junkfood.dm @@ -23,7 +23,7 @@ list_reagents = list("protein" = 1, "sugar" = 3) /obj/item/reagent_containers/food/snacks/pistachios - name = "Pistachios" + name = "pistachios" icon_state = "pistachios" desc = "Deliciously salted pistachios. A perfectly valid choice..." trash = /obj/item/trash/pistachios diff --git a/code/modules/food_and_drinks/food/foods/meat.dm b/code/modules/food_and_drinks/food/foods/meat.dm index 9ed4d013d21..0d57d3197cd 100644 --- a/code/modules/food_and_drinks/food/foods/meat.dm +++ b/code/modules/food_and_drinks/food/foods/meat.dm @@ -40,7 +40,7 @@ /obj/item/reagent_containers/food/snacks/meat/corgi name = "corgi meat" - desc = "Tastes like the HoP's hopes and dreams" + desc = "Tastes like the Head of Personnel's hopes and dreams" /obj/item/reagent_containers/food/snacks/meat/pug name = "pug meat" @@ -140,7 +140,7 @@ /obj/item/reagent_containers/food/snacks/bacon name = "bacon" - desc = "It looks juicy and tastes amazing! Mmm... Bacon." + desc = "It looks crispy and tastes amazing! Mmm... Bacon." icon_state = "bacon2" list_reagents = list("nutriment" = 4, "porktonium" = 10, "msg" = 4) diff --git a/code/modules/food_and_drinks/food/foods/misc.dm b/code/modules/food_and_drinks/food/foods/misc.dm index 7790a5ebe7b..9aaa095278e 100644 --- a/code/modules/food_and_drinks/food/foods/misc.dm +++ b/code/modules/food_and_drinks/food/foods/misc.dm @@ -58,7 +58,7 @@ ////////////////////// /obj/item/reagent_containers/food/snacks/aesirsalad - name = "aesir salad" + name = "Aesir salad" desc = "Probably too incredible for mortal men to fully enjoy." icon_state = "aesirsalad" trash = /obj/item/trash/snack_bowl diff --git a/code/modules/food_and_drinks/food/foods/pizza.dm b/code/modules/food_and_drinks/food/foods/pizza.dm index c0f1a02656f..a8a8b5ca572 100644 --- a/code/modules/food_and_drinks/food/foods/pizza.dm +++ b/code/modules/food_and_drinks/food/foods/pizza.dm @@ -66,14 +66,14 @@ filling_color = "#BAA14C" /obj/item/reagent_containers/food/snacks/sliceable/pizza/hawaiianpizza - name = "hawaiian pizza" + name = "Hawaiian pizza" desc = "Love it or hate it, this pizza divides opinions. Complete with juicy pineapple." icon_state = "hawaiianpizza" //NEEDED slice_path = /obj/item/reagent_containers/food/snacks/hawaiianpizzaslice list_reagents = list("protein" = 15, "tomatojuice" = 6, "plantmatter" = 20, "pineapplejuice" = 6, "vitamin" = 5) /obj/item/reagent_containers/food/snacks/hawaiianpizzaslice - name = "hawaiian pizza slice" + name = "Hawaiian pizza slice" desc = "A slice of polarising pizza." icon = 'icons/obj/food/pizza.dmi' icon_state = "hawaiianpizzaslice" diff --git a/code/modules/food_and_drinks/food/foods/sandwiches.dm b/code/modules/food_and_drinks/food/foods/sandwiches.dm index d422b426353..43f1b31df0e 100644 --- a/code/modules/food_and_drinks/food/foods/sandwiches.dm +++ b/code/modules/food_and_drinks/food/foods/sandwiches.dm @@ -112,7 +112,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) /obj/item/reagent_containers/food/snacks/bigbiteburger - name = "big bite burger" + name = "BigBite burger" desc = "Forget the Big Mac, THIS is the future!" icon_state = "bigbiteburger" filling_color = "#E3D681" @@ -120,7 +120,7 @@ list_reagents = list("nutriment" = 10, "vitamin" = 2) /obj/item/reagent_containers/food/snacks/superbiteburger - name = "super bite burger" + name = "SuperBite burger" desc = "This is a mountain of a burger. FOOD!" icon_state = "superbiteburger" filling_color = "#CCA26A" diff --git a/code/modules/food_and_drinks/food/foods/seafood.dm b/code/modules/food_and_drinks/food/foods/seafood.dm index 2ce01bc05d0..d06f1eeb77b 100644 --- a/code/modules/food_and_drinks/food/foods/seafood.dm +++ b/code/modules/food_and_drinks/food/foods/seafood.dm @@ -46,7 +46,7 @@ list_reagents = list("nutriment" = 4) /obj/item/reagent_containers/food/snacks/fishburger - name = "fillet -o- carp sandwich" + name = "Fillet-O-Carp sandwich" desc = "Almost like a carp is yelling somewhere... Give me back that fillet -o- carp, give me that carp." icon = 'icons/obj/food/seafood.dmi' icon_state = "fishburger" diff --git a/code/modules/food_and_drinks/food/foods/soups.dm b/code/modules/food_and_drinks/food/foods/soups.dm index 2cc72044393..586912d1f79 100644 --- a/code/modules/food_and_drinks/food/foods/soups.dm +++ b/code/modules/food_and_drinks/food/foods/soups.dm @@ -68,7 +68,7 @@ reagents.add_reagent("[extra_reagent]", 5) /obj/item/reagent_containers/food/snacks/wishsoup - name = "wish soup" + name = "Wish Soup" desc = "I wish this was soup." icon_state = "wishsoup" trash = /obj/item/trash/snack_bowl From e80ea2bbe9866d48175bead6909cd90d1b83573f Mon Sep 17 00:00:00 2001 From: Shadeykins Date: Tue, 5 Feb 2019 19:51:54 -0700 Subject: [PATCH 029/103] Standardizes casing on drinks. --- code/modules/food_and_drinks/drinks/drinks.dm | 22 +++++++++---------- .../food_and_drinks/drinks/drinks/bottle.dm | 16 +++++++------- .../food_and_drinks/drinks/drinks/cans.dm | 12 +++++----- 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm index 3ab7fb61bab..2c9c2480a4b 100644 --- a/code/modules/food_and_drinks/drinks/drinks.dm +++ b/code/modules/food_and_drinks/drinks/drinks.dm @@ -197,13 +197,13 @@ list_reagents = list("coffee" = 30) /obj/item/reagent_containers/food/drinks/ice - name = "Ice Cup" + name = "ice cup" desc = "Careful, cold ice, do not chew." icon_state = "icecup" list_reagents = list("ice" = 30) /obj/item/reagent_containers/food/drinks/tea - name = "Duke Purple Tea" + name = "Duke Purple tea" desc = "An insult to Duke Purple is an insult to the Space Queen! Any proper gentleman will fight you, if you sully this tea." icon_state = "teacup" item_state = "coffee" @@ -215,34 +215,34 @@ reagents.add_reagent("mugwort", 3) /obj/item/reagent_containers/food/drinks/mugwort - name = "Mugwort Tea" + name = "mugwort tea" desc = "A bitter herbal tea." icon_state = "manlydorfglass" item_state = "coffee" list_reagents = list("mugwort" = 30) /obj/item/reagent_containers/food/drinks/h_chocolate - name = "Dutch Hot Coco" + name = "Dutch hot coco" desc = "Made in Space South America." icon_state = "hot_coco" item_state = "coffee" list_reagents = list("hot_coco" = 30, "sugar" = 5) /obj/item/reagent_containers/food/drinks/chocolate - name = "Hot Chocolate" + name = "hot chocolate" desc = "Made in Space Switzerland." icon_state = "hot_coco" item_state = "coffee" list_reagents = list("chocolate" = 30) /obj/item/reagent_containers/food/drinks/weightloss - name = "Weight-Loss Shake" + name = "weight-loss shake" desc = "A shake designed to cause weight loss. The package proudly proclaims that it is 'tapeworm free.'" icon_state = "weightshake" list_reagents = list("lipolicide" = 30, "chocolate" = 5) /obj/item/reagent_containers/food/drinks/dry_ramen - name = "Cup Ramen" + name = "cup ramen" desc = "Just add 10ml of water, self heats! A taste that reminds you of your school years." icon_state = "ramen" item_state = "ramen" @@ -254,7 +254,7 @@ reagents.add_reagent("enzyme", 3) /obj/item/reagent_containers/food/drinks/chicken_soup - name = "Canned Chicken Soup" + name = "canned chicken soup" desc = "A delicious and soothing can of chicken noodle soup; just like spessmom used to microwave it." icon_state = "soupcan" item_state = "soupcan" @@ -331,7 +331,7 @@ volume = 50 /obj/item/reagent_containers/food/drinks/flask/lithium - name = "Lithium Flask" + name = "lithium flask" desc = "A flask with a Lithium Atom symbol on it." icon = 'icons/obj/custom_items.dmi' icon_state = "lithiumflask" @@ -353,13 +353,13 @@ /obj/item/reagent_containers/food/drinks/bag - name = "Drink bag" + name = "drink bag" desc = "Normally put in wine boxes, or down pants at stadium events." icon_state = "goonbag" volume = 70 /obj/item/reagent_containers/food/drinks/bag/goonbag - name = "Goon from a Blue Toolbox special edition" + name = "goon from a Blue Toolbox special edition" desc = "Wine from the land down under, where the dingos roam and the roos do wander." icon_state = "goonbag" list_reagents = list("wine" = 70) diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index cbf06629954..8a88cac3461 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -192,7 +192,7 @@ list_reagents = list("rum" = 100) /obj/item/reagent_containers/food/drinks/bottle/holywater - name = "Flask of Holy Water" + name = "flask of holy water" desc = "A flask of the chaplain's holy water." icon_state = "holyflask" list_reagents = list("holywater" = 100) @@ -232,8 +232,8 @@ list_reagents = list("wine" = 100) /obj/item/reagent_containers/food/drinks/bottle/absinthe - name = "Extra-Strong Absinthe" - desc = "A strong alcoholic drink brewed and distributed by REDACTED." + name = "Yellow Marquee Absinthe" + desc = "A strong alcoholic drink brewed and distributed by Yellow Marquee." icon_state = "absinthebottle" list_reagents = list("absinthe" = 100) @@ -252,7 +252,7 @@ //////////////////////////JUICES AND STUFF /////////////////////// /obj/item/reagent_containers/food/drinks/bottle/orangejuice - name = "Orange Juice" + name = "orange juice" desc = "Full of vitamins and deliciousness!" icon_state = "orangejuice" item_state = "carton" @@ -260,7 +260,7 @@ list_reagents = list("orangejuice" = 100) /obj/item/reagent_containers/food/drinks/bottle/cream - name = "Milk Cream" + name = "milk cream" desc = "It's cream. Made from milk. What else did you think you'd find in there?" icon_state = "cream" item_state = "carton" @@ -268,7 +268,7 @@ list_reagents = list("cream" = 100) /obj/item/reagent_containers/food/drinks/bottle/tomatojuice - name = "Tomato Juice" + name = "tomato juice" desc = "Well, at least it LOOKS like tomato juice. You can't tell with all that redness." icon_state = "tomatojuice" item_state = "carton" @@ -276,7 +276,7 @@ list_reagents = list("tomatojuice" = 100) /obj/item/reagent_containers/food/drinks/bottle/limejuice - name = "Lime Juice" + name = "lime juice" desc = "Sweet-sour goodness." icon_state = "limejuice" item_state = "carton" @@ -284,7 +284,7 @@ list_reagents = list("limejuice" = 100) /obj/item/reagent_containers/food/drinks/bottle/milk - name = "Milk" + name = "milk" desc = "Soothing milk." icon_state = "milk" item_state = "carton" diff --git a/code/modules/food_and_drinks/drinks/drinks/cans.dm b/code/modules/food_and_drinks/drinks/drinks/cans.dm index 554c5deddc2..8cdda48af5d 100644 --- a/code/modules/food_and_drinks/drinks/drinks/cans.dm +++ b/code/modules/food_and_drinks/drinks/drinks/cans.dm @@ -59,34 +59,34 @@ return ..(target, user, proximity) /obj/item/reagent_containers/food/drinks/cans/cola - name = "Space Cola" + name = "space cola" desc = "Cola. in space." icon_state = "cola" list_reagents = list("cola" = 30) /obj/item/reagent_containers/food/drinks/cans/beer - name = "Space Beer" + name = "space beer" desc = "Contains only water, malt and hops." icon_state = "beer" is_glass = 1 list_reagents = list("beer" = 30) /obj/item/reagent_containers/food/drinks/cans/adminbooze - name = "Admin Booze" + name = "admin booze" desc = "Bottled Griffon tears. Drink with caution." icon_state = "adminbooze" is_glass = 1 list_reagents = list("adminordrazine" = 5, "capsaicin" = 5, "methamphetamine"= 20, "thirteenloko" = 20) /obj/item/reagent_containers/food/drinks/cans/madminmalt - name = "Madmin Malt" + name = "madmin malt" desc = "Bottled essence of angry admins. Drink with EXTREME caution." icon_state = "madminmalt" is_glass = 1 list_reagents = list("hell_water" = 20, "neurotoxin" = 15, "thirteenloko" = 15) /obj/item/reagent_containers/food/drinks/cans/badminbrew - name = "Badmin Brew" + name = "badmin brew" desc = "Bottled trickery and terrible admin work. Probably shouldn't drink this one at all." icon_state = "badminbrew" is_glass = 1 @@ -156,7 +156,7 @@ list_reagents = list("tonic" = 50) /obj/item/reagent_containers/food/drinks/cans/sodawater - name = "Soda Water" + name = "soda water" desc = "A can of soda water. Still water's more refreshing cousin." icon_state = "sodawater" list_reagents = list("sodawater" = 50) From 32085e5641727a0b8ad0860827afc30e181388fb Mon Sep 17 00:00:00 2001 From: Shadeykins Date: Tue, 5 Feb 2019 19:55:43 -0700 Subject: [PATCH 030/103] Fixes spaghatt --- code/modules/food_and_drinks/food/foods/pasta.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/food_and_drinks/food/foods/pasta.dm b/code/modules/food_and_drinks/food/foods/pasta.dm index 00500f096e5..7eefe6e0016 100644 --- a/code/modules/food_and_drinks/food/foods/pasta.dm +++ b/code/modules/food_and_drinks/food/foods/pasta.dm @@ -44,7 +44,7 @@ list_reagents = list("nutriment" = 6, "tomatojuice" = 10, "vitamin" = 4) /obj/item/reagent_containers/food/snacks/meatballspaghetti - name = "spaghetti & Meatballs" + name = "spaghetti & meatballs" desc = "Now thats a nice'a meatball!" icon = 'icons/obj/food/pasta.dmi' icon_state = "meatballspaghetti" From 25cf6b60bf595596863251b9cf43032359837480 Mon Sep 17 00:00:00 2001 From: Shadeykins Date: Tue, 5 Feb 2019 19:57:19 -0700 Subject: [PATCH 031/103] donk pocket --- code/modules/food_and_drinks/food/foods/misc.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/food_and_drinks/food/foods/misc.dm b/code/modules/food_and_drinks/food/foods/misc.dm index 9aaa095278e..4845fe4d608 100644 --- a/code/modules/food_and_drinks/food/foods/misc.dm +++ b/code/modules/food_and_drinks/food/foods/misc.dm @@ -107,7 +107,7 @@ M.reagents.add_reagent("omnizine", 15) /obj/item/reagent_containers/food/snacks/warmdonkpocket_weak - name = "lightly warm Donk-pocket" + name = "lukewarm Donk-pocket" desc = "The food of choice for the seasoned traitor. This one is lukewarm." icon_state = "donkpocket" filling_color = "#DEDEAB" From cda4d7b8d1b486db97e5f04db465674b629da8b5 Mon Sep 17 00:00:00 2001 From: Shadeykins Date: Tue, 5 Feb 2019 19:57:55 -0700 Subject: [PATCH 032/103] Missed some heresy. --- code/modules/food_and_drinks/food/foods/pizza.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/food_and_drinks/food/foods/pizza.dm b/code/modules/food_and_drinks/food/foods/pizza.dm index a8a8b5ca572..6ef5428e0c2 100644 --- a/code/modules/food_and_drinks/food/foods/pizza.dm +++ b/code/modules/food_and_drinks/food/foods/pizza.dm @@ -251,4 +251,4 @@ /obj/item/pizzabox/hawaiian/New() pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/hawaiianpizza(src) - boxtag = "hawaiian feast" \ No newline at end of file + boxtag = "Hawaiian feast" \ No newline at end of file From 1818fd067945071b3770bdf4b9e1bb8937697a2d Mon Sep 17 00:00:00 2001 From: Shadeykins Date: Tue, 5 Feb 2019 19:58:40 -0700 Subject: [PATCH 033/103] Capital S. --- code/modules/food_and_drinks/food/foods/pasta.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/food_and_drinks/food/foods/pasta.dm b/code/modules/food_and_drinks/food/foods/pasta.dm index 7eefe6e0016..9371c153416 100644 --- a/code/modules/food_and_drinks/food/foods/pasta.dm +++ b/code/modules/food_and_drinks/food/foods/pasta.dm @@ -53,7 +53,7 @@ list_reagents = list("nutriment" = 8, "synaptizine" = 5, "vitamin" = 4) /obj/item/reagent_containers/food/snacks/spesslaw - name = "spesslaw" + name = "Spesslaw" desc = "A lawyer's favourite." icon = 'icons/obj/food/pasta.dmi' icon_state = "spesslaw" From 84451f8e48041f6059eff430eb2f5c7cb6493807 Mon Sep 17 00:00:00 2001 From: Kyep Date: Wed, 6 Feb 2019 04:26:37 -0800 Subject: [PATCH 034/103] Reduces captain ageism --- code/game/jobs/job_controller.dm | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 2e532ff6322..e70ab85a925 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -203,9 +203,6 @@ var/global/datum/controller/occupations/job_master // Different head positions have different good ages. var/good_age_minimal = 25 var/good_age_maximal = 60 - if(command_position == "Captain") - good_age_minimal = 30 - good_age_maximal = 70 // Old geezer captains ftw for(var/mob/V in candidates) // Log-out during round-start? What a bad boy, no head position for you! @@ -448,7 +445,7 @@ var/global/datum/controller/occupations/job_master to_chat(H, "As a member of Security, you are to know Space Law, Legal Standard Operating Procedure, as well as your Department SOP") if(job.req_admin_notify) to_chat(H, "You are playing a job that is important for the game progression. If you have to disconnect, please notify the admins via adminhelp.") - + return H /datum/controller/occupations/proc/EquipRank(mob/living/carbon/human/H, rank, joined_late = 0) // Equip and put them in an area if(!H) From 3a530cb0390a34919bd0912fad1d55626c135707 Mon Sep 17 00:00:00 2001 From: Kyep Date: Wed, 6 Feb 2019 04:37:54 -0800 Subject: [PATCH 035/103] remove all age-based weighting in head job selection --- code/game/jobs/job_controller.dm | 28 +++------------------------- 1 file changed, 3 insertions(+), 25 deletions(-) diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index e70ab85a925..98f6328ed57 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -197,37 +197,15 @@ var/global/datum/controller/occupations/job_master if(!candidates.len) continue - // Build a weighted list, weight by age. - var/list/weightedCandidates = list() - - // Different head positions have different good ages. - var/good_age_minimal = 25 - var/good_age_maximal = 60 + var/list/filteredCandidates = list() for(var/mob/V in candidates) // Log-out during round-start? What a bad boy, no head position for you! if(!V.client) continue - var/age = V.client.prefs.age - switch(age) - if(good_age_minimal - 10 to good_age_minimal) - weightedCandidates[V] = 3 // Still a bit young. - if(good_age_minimal to good_age_minimal + 10) - weightedCandidates[V] = 6 // Better. - if(good_age_minimal + 10 to good_age_maximal - 10) - weightedCandidates[V] = 10 // Great. - if(good_age_maximal - 10 to good_age_maximal) - weightedCandidates[V] = 6 // Still good. - if(good_age_maximal to good_age_maximal + 10) - weightedCandidates[V] = 6 // Bit old, don't you think? - if(good_age_maximal to good_age_maximal + 50) - weightedCandidates[V] = 3 // Geezer. - else - // If there's ABSOLUTELY NOBODY ELSE - if(candidates.len == 1) - weightedCandidates[V] = 1 + filteredCandidates += V - var/mob/new_player/candidate = pickweight(weightedCandidates) + var/mob/new_player/candidate = pick(filteredCandidates) if(AssignRole(candidate, command_position)) return 1 From 420ff9f54042f2c35985d5b92c75808b12e18b5f Mon Sep 17 00:00:00 2001 From: Kyep Date: Wed, 6 Feb 2019 04:39:24 -0800 Subject: [PATCH 036/103] prevent possible really rare runtime --- code/game/jobs/job_controller.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 98f6328ed57..0b858a744ed 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -205,6 +205,9 @@ var/global/datum/controller/occupations/job_master continue filteredCandidates += V + if(!filteredCandidates.len) + continue + var/mob/new_player/candidate = pick(filteredCandidates) if(AssignRole(candidate, command_position)) return 1 From 89b97257669e38ad7cd5d3fb2b95ab2facb51513 Mon Sep 17 00:00:00 2001 From: Shadeykins Date: Wed, 6 Feb 2019 18:42:56 -0700 Subject: [PATCH 037/103] Sorry Citined :( --- code/modules/food_and_drinks/food/foods/pasta.dm | 2 +- code/modules/food_and_drinks/food/foods/pizza.dm | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/food_and_drinks/food/foods/pasta.dm b/code/modules/food_and_drinks/food/foods/pasta.dm index 9371c153416..36c340656e3 100644 --- a/code/modules/food_and_drinks/food/foods/pasta.dm +++ b/code/modules/food_and_drinks/food/foods/pasta.dm @@ -61,7 +61,7 @@ list_reagents = list("nutriment" = 8, "synaptizine" = 10, "vitamin" = 6) /obj/item/reagent_containers/food/snacks/macncheese - name = "macaroni cheese" + name = "mac n cheese" desc = "One of the most comforting foods in the world. Apparently." trash = /obj/item/trash/snack_bowl icon = 'icons/obj/food/pasta.dmi' diff --git a/code/modules/food_and_drinks/food/foods/pizza.dm b/code/modules/food_and_drinks/food/foods/pizza.dm index 6ef5428e0c2..aabd47194ce 100644 --- a/code/modules/food_and_drinks/food/foods/pizza.dm +++ b/code/modules/food_and_drinks/food/foods/pizza.dm @@ -80,7 +80,7 @@ filling_color = "#e5b437" /obj/item/reagent_containers/food/snacks/sliceable/pizza/macpizza - name = "macaroni cheese pizza" + name = "mac n cheese pizza" desc = "Gastronomists have yet to classify this dish as 'pizza'." icon_state = "macpizza" slice_path = /obj/item/reagent_containers/food/snacks/macpizzaslice @@ -88,7 +88,7 @@ filling_color = "#ffe45d" /obj/item/reagent_containers/food/snacks/macpizzaslice - name = "macaroni cheese pizza slice" + name = "mac n cheese pizza slice" desc = "A delicious slice of pizza topped with macaroni cheese... wait, what the hell? Who would do this?!" icon = 'icons/obj/food/pizza.dmi' icon_state = "macpizzaslice" From 3c2f36759b479482df141b193aca1eec9bbc4e87 Mon Sep 17 00:00:00 2001 From: Shadeykins Date: Wed, 6 Feb 2019 18:50:23 -0700 Subject: [PATCH 038/103] Readds deaf --- code/__DEFINES/genetics.dm | 1 + code/game/jobs/job/job.dm | 2 +- code/modules/client/preference/preferences.dm | 11 ++++++++--- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/code/__DEFINES/genetics.dm b/code/__DEFINES/genetics.dm index 389b96f6a57..f2323622960 100644 --- a/code/__DEFINES/genetics.dm +++ b/code/__DEFINES/genetics.dm @@ -17,6 +17,7 @@ #define DISABILITY_FLAG_LISP 256 #define DISABILITY_FLAG_DIZZY 512 #define DISABILITY_FLAG_CHAV 1024 +#define DISABILITY_FLAG_BLIND 2048 /////////////////////////////////////// // MUTATIONS diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index 9d6b8d8927c..61e458927e9 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -118,7 +118,7 @@ return 0 if(disabilities_allowed) return 0 - var/list/prohibited_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY) + var/list/prohibited_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY) for(var/i = 1, i < prohibited_disabilities.len, i++) var/this_disability = prohibited_disabilities[i] if(C.prefs.disabilities & this_disability) diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index be3ea2907e3..0a09f4504bb 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -842,11 +842,12 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts if(CAN_WINGDINGS in S.species_traits) HTML += ShowDisabilityState(user, DISABILITY_FLAG_WINGDINGS, "Speak in Wingdings") - HTML += ShowDisabilityState(user, DISABILITY_FLAG_NEARSIGHTED, "Needs glasses") - HTML += ShowDisabilityState(user, DISABILITY_FLAG_FAT, "Obese") - HTML += ShowDisabilityState(user, DISABILITY_FLAG_BLIND, "Blind") + HTML += ShowDisabilityState(user, DISABILITY_FLAG_NEARSIGHTED, "Nearsighted") HTML += ShowDisabilityState(user, DISABILITY_FLAG_COLOURBLIND, "Colourblind") + HTML += ShowDisabilityState(user, DISABILITY_FLAG_BLIND, "Blind") + HTML += ShowDisabilityState(user, DISABILITY_FLAG_DEAF, "Deaf") HTML += ShowDisabilityState(user, DISABILITY_FLAG_MUTE, "Mute") + HTML += ShowDisabilityState(user, DISABILITY_FLAG_FAT, "Obese") HTML += ShowDisabilityState(user, DISABILITY_FLAG_NERVOUS, "Stutter") HTML += ShowDisabilityState(user, DISABILITY_FLAG_SWEDISH, "Swedish accent") HTML += ShowDisabilityState(user, DISABILITY_FLAG_CHAV, "Chav accent") @@ -2205,6 +2206,10 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts character.dna.SetSEState(BLINDBLOCK, TRUE, TRUE) character.dna.default_blocks.Add(BLINDBLOCK) + if(disabilities & DISABILITY_FLAG_DEAF) + character.dna.SetSEState(DEAFBLOCK, TRUE, TRUE) + character.dna.default_blocks.Add(DEAFBLOCK) + if(disabilities & DISABILITY_FLAG_COLOURBLIND) character.dna.SetSEState(COLOURBLINDBLOCK, TRUE, TRUE) character.dna.default_blocks.Add(COLOURBLINDBLOCK) From 4764f1eeabb48a1e10d3745a88b9851cac999a07 Mon Sep 17 00:00:00 2001 From: Shadeykins Date: Wed, 6 Feb 2019 19:43:53 -0700 Subject: [PATCH 039/103] Woop woop Travis --- code/__DEFINES/genetics.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/__DEFINES/genetics.dm b/code/__DEFINES/genetics.dm index f2323622960..0fb9253a083 100644 --- a/code/__DEFINES/genetics.dm +++ b/code/__DEFINES/genetics.dm @@ -17,7 +17,7 @@ #define DISABILITY_FLAG_LISP 256 #define DISABILITY_FLAG_DIZZY 512 #define DISABILITY_FLAG_CHAV 1024 -#define DISABILITY_FLAG_BLIND 2048 +#define DISABILITY_FLAG_DEAF 2048 /////////////////////////////////////// // MUTATIONS From 8b666c84c1e7802974b12cf98e74e3dd0d6e9ce0 Mon Sep 17 00:00:00 2001 From: lass9030 Date: Thu, 7 Feb 2019 03:52:55 +0100 Subject: [PATCH 040/103] fluff suit --- code/modules/customitems/item_defines.dm | 5 +++++ icons/mob/suit.dmi | Bin 515145 -> 517324 bytes icons/obj/custom_items.dmi | Bin 110292 -> 110746 bytes 3 files changed, 5 insertions(+) diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index 9a370fe6723..9f1c834d68b 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -1115,6 +1115,11 @@ flags = NODROP|BLOCKHAIR flags_inv = HIDEEARS +/obj/item/clothing/suit/fluff/pineapple //Pineapple Salad: Dan Jello + name = "red trench coat" + desc = "A red coat with cheaply made plastic accessories." + icon_state = "pineapple_trench" + //////////// Uniforms //////////// /obj/item/clothing/under/fluff/counterfeitguise_uniform // thatdanguy23 : Rissa Williams icon = 'icons/obj/custom_items.dmi' diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index 99ad4978ce9d8f32708665b676c147a77b1ef2b9..a2c478e18e1d8fe28c1fa5088c3f69e42000f6cf 100644 GIT binary patch delta 21239 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 delta 19043 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 diff --git a/icons/obj/custom_items.dmi b/icons/obj/custom_items.dmi index e2228e2766661db88667ed4df193bf5981088207..b68005d0c4f481c3be293f2d6b4ebc67f37de532 100644 GIT binary patch delta 9686 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 From dc09d07d86e43876edba98cf67b68acfb90e5bce Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Thu, 7 Feb 2019 00:49:24 -0500 Subject: [PATCH 041/103] Reduces Defib Safe Time: Adds Health HUD Defib Indicator --- code/__DEFINES/misc.dm | 4 ++++ code/game/data_huds.dm | 5 +++++ code/game/objects/items/devices/scanners.dm | 4 ++++ code/game/objects/items/weapons/defib.dm | 6 ++++-- code/modules/mob/living/death.dm | 2 ++ icons/mob/hud.dmi | Bin 14950 -> 14802 bytes 6 files changed, 19 insertions(+), 2 deletions(-) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index c59d39dc14c..8f072f3e131 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -391,3 +391,7 @@ #define MOUSE_OPACITY_TRANSPARENT 0 #define MOUSE_OPACITY_ICON 1 #define MOUSE_OPACITY_OPAQUE 2 + +// Defib stats +#define DEFIB_TIME_LIMIT 120 +#define DEFIB_TIME_LOSS 60 \ No newline at end of file diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index 2c75d6f36e2..178605853e8 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -164,6 +164,11 @@ var/image/holder = hud_list[STATUS_HUD] var/mob/living/simple_animal/borer/B = has_brain_worms() if(stat == DEAD || (status_flags & FAKEDEATH)) + if(timeofdeath) + var/tdelta = round(world.time - timeofdeath) + if(tdelta < (DEFIB_TIME_LIMIT * 10)) + holder.icon_state = "huddefib" + return holder.icon_state = "huddead" else if(status_flags & XENO_HOST) holder.icon_state = "hudxeno" diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index bcc69badc38..dd214c7a673 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -162,6 +162,10 @@ REAGENT SCANNER user.show_message("Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)", 1) if(M.timeofdeath && (M.stat == DEAD || (M.status_flags & FAKEDEATH))) user.show_message("Time of Death: [station_time_timestamp("hh:mm:ss", M.timeofdeath)]") + var/tdelta = round(world.time - M.timeofdeath) + if(tdelta < (DEFIB_TIME_LIMIT * 10)) + user.show_message("Subject died [DisplayTimeText(tdelta)] ago, defibrillation may be possible!") + if(istype(M, /mob/living/carbon/human) && mode == 1) var/mob/living/carbon/human/H = M var/list/damaged = H.get_damaged_organs(1,1) diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index 73bbd0d29d2..256656dfa31 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -357,8 +357,8 @@ QDEL_NULL(ghost) var/tplus = world.time - H.timeofdeath - var/tlimit = 3000 //past this much time the patient is unrecoverable (in deciseconds) - var/tloss = 600 //brain damage starts setting in on the patient after some time left rotting + var/tlimit = DEFIB_TIME_LIMIT * 10 //past this much time the patient is unrecoverable (in deciseconds) + var/tloss = DEFIB_TIME_LOSS * 10 //brain damage starts setting in on the patient after some time left rotting var/total_burn = 0 var/total_brute = 0 if(do_after(user, 20 * toolspeed, target = M)) //placed on chest and short delay to shock for dramatic effect, revive time is 5sec total @@ -420,6 +420,8 @@ H.emote("gasp") if(tplus > tloss) H.setBrainLoss( max(0, min(99, ((tlimit - tplus) / tlimit * 100)))) + H.med_hud_set_health() + H.med_hud_set_status() defib.deductcharge(revivecost) add_attack_logs(user, M, "Revived with [src]") else diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 0421cbaad18..43a811dc3a3 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -67,6 +67,8 @@ med_hud_set_health() med_hud_set_status() + if(!gibbed && !QDELETED(src)) + addtimer(CALLBACK(src, .proc/med_hud_set_status), (DEFIB_TIME_LIMIT * 10) + 1) callHook("death", list(src, gibbed)) for(var/s in ownedSoullinks) diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index a58a11c3f326fd7c4934ac96df15ac9ffd586545..1e6992c86a6a75e558d8057e23c840bf43b5a3cd 100644 GIT binary patch literal 14802 zcmch8cUV(hm+uK(ilBmspg{!@6;L`-f(0?4^d?;qP`dP<2nw$vpaJO!NC)XvT0jI8 zklqo3NN=Ge1QL>S5AXNQGc$MYo%_r)^V~nq$v&H1*WUZLerv7GYaK0h4%XAG003|x z@7>V@06HiMn_*#seg=nz=K+9`&fmbq^Ny{Djr%h<&u6YK0N|UFYT6a`OP*ax8};hF zxk!ZH#rp6sSC3zHzZZNiU3kLod<3f+>4FtDJgPsY+qX`j`x*MOjM_=f*g7jYFnACD zXK{g=8=Wj>#`E*%Z4c7u@WNw}{_us2FOB2o>{qEX9jJmBkDb1T(>Z%;?c2iaN=*~y zcgiM|q(_q@dY;Zf3AyBm@2`(Sl>_`Jv55rL<*P*6HcfOm@~hkrYFf}{EY@~ve(}dB zc1HAwO>(J`QYj zLNea2a4!+mNbx#1(Y5^_UOa$g6leQ83W)`<^B zN*NbMn+YU*@_tq1(9>XD)vJ3s{Kq%WORc_z&)oa(hhZ?BTn5LvYoFM6#pbQv`>fZS z@Fh6=YE+^(X5_o-kBiH-TG@GiVgfIZn^eB{&v%)7CwNywNU+o}l>O=4HJv#0qf7=3 zUHXJ?x_6)2B$n6d&N~S>9q;fbTrWCh+@tl>!}f>O5tzfHP-C$t((c~|9)6b=4ttxK zVDQt#R73gY&F>uCze%sV$L|(cPe-26Z=;hdzJD_8QhT10k>cBDg|+%4f+_tmHr^dP z>K*q*Pe%x~so16GDSA4{X9QjQs#I}wX#Y}rSV2t0f=uR3<+)3+N=dm}slIIhc)~x@ zx<>kBS(~*4#=$S{Wp3b=9AtpbGsVs*;!xDp$Gjg>4+KL;et8&ik9NLsW;~4?f8h&aQkj?iRpCvo3qfA5zRFKToxJ+4v-$%-)bk1n87|huWC&l-Z-8a9 zI0rYi+U#_7$ z7q}}Q+0#>e)q8e(dDyA^;Z3a>uFsd0k2bbu)W{Qwe zv+R8D)6YFpr>_v-wihU8mW4o{3(zO!ZTn?JX8&ychOmw1;p_V0>xbKvW_$TsUHsb* zy}DNzzG_@+y$Z^qh1&Gh#QwD^T6 zd`gYIMA=FXC9>;CiqPe?pMY_bUjw^+uYu~t*MK+eHIUT#8Xyn9226jyMxTwi$q~e{ zs2qMIAT}j5>=P}&lEO2_v-&v1JhM$k(mb z)n0slM#)2Ta4}JnsMKq&_tS3yBMZNd7sr3J5%+3l!*Y;+n6Ff*cPDoxFD7VC9qdIe zZ7VD{!Z>oYWB>5lyy^3?R`(T~G5c{$OXA?v?`+{bnYuwxvO5OF6g- z)^!?1uHA<(Q3FjFcw@T(KoCIQxoO~=vOa|hG#E|=w@7V6whve8iVR}mYE9g+Ps@^r z49(_`>&falT+vf=s9Cz(Vt7)_WVv`~tW?Z7BQD!yOT?LH?ef$5I6G&w=Ci_KBueC7 zxABFg5VTnxv8!&xzX^4Jgzsyk$dQRmE?MYmy~iw*)Up2L%6aLJlPH=yLhO0q>VN zV}g@|9#mU$=dxXE0|%ocfgsQaH!3!NR!~@2^|b#}%DQH}xZ&jw8i8Ei7T`dDVt3hX z?e%KvzC=pVBjaME62mW&)6=^g2wlvOPK`*=q_hEMXn(fL_Bspk$xQpRg||mKcmg*R zIjNSJC16w4D8fpifmX2?zA(g@g~usf395hMOx{gQyT{{_#F%dIEfhbHt?5zyGvRt` z1bP1>_;q}uF`y=9qUo8V+zp!$>5XF71t;9|;oN}=Aa3G4ys7i2+KH?e@K{r$MHdkO zc$ej({<~>7{wN1+u{f~BVagYHgO6WTjdeX3n`ItzUcZ}}dl475HmcZ!u-m)j)wJin z-6od*`93Et`rxvUA`C!hZK%&Q4S@^sh&*MCxZfWRkx*>!EFb!oc{gxxAmMkW=l-&G z!Tyg-|6OcyXD7kgo8{C@jwqmWdiP%4vJ_$@`ts$Jqcn~Ox23F_{;~(W&58Nl)qBBa z0sX6^$GxD+aZ>?(6G^l;%wR;_EnX=AXz(7i4^ByBbQ4{aR!!tkZF|xSJP8MWY_O|V zy9chr_YM8~uzp52SOOiRvW^@t1WcG%dcRnPE!L@Y0aK@IpC|pWq8l4=Ic^2xx%{tj_be8eqQvkluR%a@828XmGJ`T4-A%L(QAC)9Qe#ynGW4gij@wKBFR z5Xi}bd2!eCizyz*Ibq|WU=MG#ZMBb+wsycVIsogyceHfr>Nz3@;sE zeUp~%D#dW%HC+04ju8wvc`Bxpk1!a$Xp&FeiHj$U8V(#0VecAeYIbD+nlbVW-$sG4 z$|paLbMU!`2tC6!QIq^zct$3H^hz!O{Zg%eTaabJvxqLQQ(%A6l(Da@QO#p<+HCW@ zDnNV81L!P3Q%`><_~!gi>i(SzNS_0ukqDfnc=f{QOtH*riRq17VpU{dCUj<~IS0pJTbAUwhJWglMFCczxYtHS%8t2#0R>q5#=_9l0D!^WdEgGUg zf9V5D?L_W|Rj3_$aXM(&w^JbQ)O?!(VopkTpx1vb$%CmBV}Fn#(i?I93dq;xVMQtB zL&)lw)$8uAJL4P0tf~ zDQTpjsyL0y3_pp4=#VuQ&)%d>2;g-yt=vxKNh!O z*7TyOxwXBm9t70zX~b?`FrMNBwo5od&!W;U5*ly!jMY+E#O~gwB5EH@V|Pa4M<*@b z0+CikMVvi2>@Qn0e!;0i7$m{xFQ7Ihs(-#>UG962x(YtWu&&Q-g+oi!zm)Gi@g6(a zrXC`ja*ZgJ$mRBRsMn;>>~eW@T?Ksdb6OAqAM-eLE&ZWH{(45sYdq>t2h)@tINKq+ z!h1X%NS?*D>@~R-JaFN<&p7Y3DQDN6(4C$ZgsZ|Nz%I4#va8-6)X7z}5@47~gTyBD zSg+#leTSYD*3xs+;OtEwXuTw*U`^dXx^z}Z`Wh3>WEX99ITSm@16GamNc)X-0o<3C{B-aq2SuVV=9>2i{jvfY!-!LC0Ju88om3trin;+97+ zqPKUG6{m|I;ts5ef@i%NT`5(VEUT1i4UZlLBkY$y>;7%eDS(hYr1KVb9OIUnEJ*h- z#izDN{`;KTE17AOy#0+~oG^os6YWFH&m*}nF^>z~N9XiQc4<6$37o>U({^UHsXjt~ylr@Q-1!Ig1Xq z9jmyD@RGyyuFUAY%P$Op&1M>}*TJr1HdR7HuO|qYcl4ci3;L5h5WniuKUlxf&y!}A z)9&FqyxIAiOe_gruk*8f>gpO_te{C;Oe^W>(W1Jq^$=u_0oJWYT8R;ZM)OXOnSjk! zsJv<5Z^Y`K!n=-JufWg!g?BYEG+zNJpn7epzGfy!3nus+EARZF=ep}c;5;)OFmDU- zjh5oJdIRBQAKn8kh-P7io|}b#ddH($4ei6*si~=nl0JRT8y-B~^U6fAR)ls?g-fyUKlIEm@msQrUf$ zd)ay`du^Gf&+$1B!UIb_nw%raYM~oP{p-D^w9<}2d7E6L(0k_Gp_P30{C_)H@Gi^w z(Nk7sKTGb1``9EO{Io?W4JnfPB%AiXD}bF(!3qJhuSHmCF316e#gv%6)%xwSUfv>v z>%=164=T+ESMh4qYU?aw#h9AzMvY@z8?py|x`-6K`vKc&Vg2~3jESsC3@e?C=ssu0 zRJ~8~#Dpnwfd6*bJq!dAF+wtOaw4?z?7!rHrdY1s~-H0 zVGX&@RVus@NTX&|RpnCnIBDagj_3!$I7dgh)6%QiE>_hmtx@=?vpfxHV$+LG_yCB2 zc`#Y=o?h9_n(Qaq9(KGmER(weJ$4~zv8}~u&n1s=Dy~SLWiMT*80Ks9{oVbQ_X9`1 z8?l^%pb|Ny=g(w)s4u;HgjRVU7dG*Rz`~lSs<1c3hKUNE894al}vQWqHhsiMcT5pqu zE5%~Z8FXBld;$yzOIDq!w3;tq+bq}2AYlF-8gbs^?)*lS4dQzm>^qI!8mtisSg?o2 zbTpOel1C!&PMM0IZ58>*Sn5ZRICJ{RpHvAIa{SyAre^OTi3B;RMJk(0^-MsGdfg`c zmc<_DqZY0i|IOY-eU`s+X@B%#B{HKLBJ4GKir|j=4Nst%=Bgf8iE>*n{pF~7^>s(% zbaO%g&KW&`RKrJl!RDV=A2+G|teVg^_IqUt^hywo!;1H&57cC=pkU zR@y13jEDDjQ322%i&I$fIYwuGtaQxrqnD^3Ln+6FjxWtMT=ZHDS(I z>0{qWFh1e4em3OO$o`g!6C1^22W`>1+`<<0AK6;-W+Z&MUj;V9Y_GE4wlT<76;qh} zEr%k365$S`rT0=7zvp#o@b@6Vz@ViH&cfVZ`xyA(omEdPlUQR z%qFk{EI{cK3P*U;tUdsAS~ZQ0wdlD(`gzp1)56ChwJ(PS62}Q-;gB zjfcajTav?Kgp}ReUv_(#iB)D)ROqK#rDW(@NCAhxsfs=;%`fOr7R1Zi0oG?mVLEe9qeemLY6rTa4$QIdbbBhNd z$!wM^lUHsuUW3E#?5v?q?oES-lzN5+Hp_`u44_7dHLqTE;C4REb>L?7eSW+>9sCIb zjX9 zZ+^im5h&$2u$*$pYB5<5P9V24!L(Yt)FWCc=kh6wSik+>-n7h7(3F zl%L@e4Z*LStgJN0`biedz{tm=h;e$iK-9t59EvnK@t}tvj@_@X9x~16td-6yuU_(i z#B!npjt5`um4f@zph-qA%F2L$aJ?(8TLu`XZz^iB(f~2|3B6=K-)w?vgQKQ%w4yp{ zq?eZ&#!q~&vK<`_LE&BZqt&vjZHjibQ8Z!Ovn1}LWX%SUBZ;Wj6F;;wV>CNX^@F7DF@V}Bukj@SWjwnSgFYG+H+yFt*?O{kgcpmi)p zzX_&M&hs!Nmh6>@@eE{Kp!xQ>=1pdX)hQC2!Q_Yi?5A-BE4SUX^QzZA43At;3KIdxDIxx0wf z9It>O+5W~gH^{uYh&poLtiH^f@$)LV$>R&V+i(nTqGNAxmUZgKkE;^VIAz@Zd@J43 zyV||PTuv*hLJXF{O~=-G_6qP=oPOcxL$&!sc2?jZ+yQWdLw@RnDIluvyHyk@!0Ld#!!X{D3Z_@MWOT-8q43`+H&O9d{< zy)q-G{qx>nn!B9$1J~Y?{Od1)8W!N}y{gKmy|(eo3_CeOq77@3KVzRb_L@oAH3}_r zPHO#dl9IsdPCmF(N140 zT*P-g`mU1ee1F46{`MiS4WdYUe&f0(jDh2!M(Q_ujIOP+~?C79zDOfkq%*+6AcBd*Db0*7qY3)|?!E5v= zcoH^0fPlqh4RwG<7y@|KR18UO|1MS4t#O6i-j<#gc@rmQ2ON)Wtc=VAF*kutReSqf zyY9W(joLp)k;|%m10DyMC4MF#R&ByVdxJC@lAt%4~arcYh4=?1x?4x+t{%F)E^a=}|{PhKshH8Dv8v2RtMiKl-xdk#9crT&eB; z(^8SvU+Ady0O4!Ld`|EYw5tmWE@$iIr>x(67d(ChHt!7elmkf>GA7@hD;TSh*fIC; z@E8wAL&SYW$dEtNfNSoT_z}AHv5+shyS!Lf3IdDWwO zkpb;sWAKwXTA#x!ASDbv29Z7aB7Dr+3wZEEMc@~Rx9hhx1sx`*Pf33BiuwGyBjv!1 zkT%Y1{#hG!uuk^s81<;Or&HaH=;5EatF%|o#km)1k7&J*zL0Nl*I0 zC%<^mV!vj|szRdH1b@cEqNn=J8uJ#LHc(o^&4fa-9~`~DM9F`QQ%NoL%-{87e38L+ z@+tO@Y(~R3eQ=AtIiSNlH_h8gQJVf;YTZ3+Z=TZ!7B68;sG4$nU?!d#and%5Op-92 ztChJVx77>|`qCds!ZL=MRA+4 z)}A*##-Pjn&?PFU7-4NON}38wN(w0f2|ttlKry!|6yyh~hP0i;_OGeOTpOH_HneCV zfiGOm7Y?e5mZ)Y?E?YNNANLA3o~SFv*K^3o*tI3QYV40zF}zq99ZJYzesPWcXVZCJ zPYyoGtTi0C2Oa5rq)3X}ExQ0`=b{fd@b5ZlG@<#l5$U@-(F*OI6xX-?<+fe!)e`2l zIybpuzflmCj<~TH;%N?<9ExLDtG8b({DIr-+fThyxJ}ty3HNbk0I5+`nRmmLORK8# z`@)s9sjyq?H$wza3AUVpDv+}mGRn@#yQw~S@W8>v#pr<9?ellq88^50J6~V1Nu9I) z{q@zzDrs29#ytdx>gKf58U=gK6kbN+l^5k84+i3Sn5htT{LH$)8n{szWO;Bdohh4n z%A_D$jpOKq&XUSimJmXC@NT@?)(wzK865Q<9U1ZWYC~CASlDec2kL*JI#u2CUzsi> z3^f|(XFHmSZk`8}j0}gJf#B}#W4_+XlT{g>EZ=F5^9v2PX3~`TOP>v1tdDf#qLqu8 z*Om%J)Baqb?JcD}L5nq|u@i5QH%950x~fn704dvMhaRaHXXJ5toVuEe`?8yx{X^Y0S{X#7f{y^dUb* zzx*)J4F4l^>3_uJ|J!Mh!HOh*lUco=Ap+lPw-qMgc*d=8R*@T)A{ zj9T<3&a4n2zh(&zf48K*4rL>Nh5^I?kJX&isR^I1x%VRzi)7NyJ%(1TWSfu^_D@IS zCQ?Ko$6%b_{-av}VE^?@Mt;FcQ)6~pPx#umGi+~*Eyb$36)MXdsyr73uAH-Wt8F$& z9M-!gVjmE(_7eR%l=oECy}BDyi`~wK&t9U<lIj`h0Jn2A zYq4GV=VBfMp-r((&WVFNBvOra)Dxr0BEQ%#sEsEU!5tS5ALsG%Hh-$Y2VF1C^p!Z( zH2-yi3ixZuBWf6W9+cWD|2Yi+!bNq$OIu|;&sj>9_c~Z$YHgvYK-54M(rC2UQ&Rp@*yHcV)%t?k|xgjHTICRWgesNY$VSNnV&n zXE)uqbLa>FR=YsH>}UilWla}R-=_F!cc|UPd<>ZN65)k09iki;0Cbr%qgnG0n90}7 z&92Sd>A!k~denzq+#L0*&}c>5N}rtI zh8h?`4~r{X_HiqsjKVgkgco~s6!1t@Rrbf4+ZS@NzSjCaR(GA zGGInZ8Yv3+iKM1Q^PfZ35e7894(w@qhXW`i;=F%lWb3w!6%ynS&NX_Z*hi=wM+s#l zp8OrL6p1*9r(N;a*)hI4qB!mMIV^R_g(?Mb+5zSBy>w&8A-@ql_(1MKoH%6M_MxHZ zm1m{P$U3%8X~!2LMGk#`jQ;Lkyxz&WN7ih%1-0Y19N{#0Zbq?gs~5D+rcFjAXOSXf zKX#ga6nNXH;ZKI2C<$ttCEldU*(F_X8O>H5D5MNOr!Hozl1HG(No!o~F-{uBprYuZj0jf$47TC~FfAt;6tJ!x|7;YI zla(`Nw4yPvQh#gE6Dzc?Q2D&ta}=ACmh3Uyza=;L!hNny6zwE#2e5L`UeTKT^kzM1 zjn0}Hfjx~i&d3q$TKS7aeV}@E5$c36s_6Z&5N_tRaVtoIm_D53QT!$(8zpl~6Lfg_ z5pI;d7;gA%*($Q{O3hoYP{d4}oD{H6kBtzVdAu2&U7$B5PFJ~HSAj}N^u})Z2ZXv_ zJwxX%L09>6cm^DDty%g!=m9FN#E3WzpJuDVJ2s4&Q-)*e&QeQ+mffk@BQn@elP80^ ze>Fb?niHY0z^L;*fiB=7(^7d8z6*fL*IHAroGh{53?DTI&j1pKq%^zT3)tL%Z~;(- zo@UMeglXP6Eb#x1(jE9TA4d83pwdd*=Dzb*341NM;0EQzI#b~4kv7R*0N_R)-UZmm zPb8y^vHkv3N<7Uuhc+KUYxSo>hejud7Hfuj+IV<;pRAxZTYiqL!ui7z$tCLViR8%0 z$V74kuSB&aVse5p+%n=}*E;s(5UE}zjnM_cWtsvxmnI z4s3wkf>U7P&EjNO^L3+h&2rPsQ2D_B+j_aJMMW^JL`Cdjxd2=lE3Eqe-0 z;QRcckHGx7U&kQ3fbb8cL>`rOIuaSl`MWl_;BwWg7AhC(y0VMsKa zBntab!FA@~!p_dlZrNliVq!{sS@J=Q&`;L0F+xQ$%N?tPgb!p1E8nE)lxpRQ^+Dsw zLcGRak==!P3;K5&*|8egzbaYe>GCgULQ2-Ys?dziu!cc_{)O`v;ACbl1&;6@D#mUK zennY+0#bgoAbzMN3o%iMv@KCqQs)&n7v*cB^npuosGw(%hc)@>)u&}Xn}(@|g%gjb zOlats0!brE^e!C=mL zN4%C5K5qV?v15?d^pQ?MZ%YA{Izjx<`14c23ZY0_3YJ3GtSfe!mk|@E~DW5#IF@u$ntKgN_a+WZuO< z*HIoa0>Hgr<*%pWbv1V5X1)~TZ$UEE-{pmgn_R2y_)=xbU4VPMMf!8Gw|+n65usHt=0n-#&l0R17CJ*GJ2aHwan@H=%D$(2oHi56 z>2UkOgIOwbV3qs4hQ3AW$3e@=r@D3&=rW5`uLvJq`6_C+BJHOWILnKDnyuo$IIo6| zzRy8;RThWBzkUDyN!`X|H8t!j$vHv6Bj;@3W=o0$;QcKWrL<`u4&$F~L7d&IXa#<4 zUj~#UW%@4Y(>vqe(ekHgf&!;9n_Fh!lfj`>$YBRx?@dvVT4Yn*-eyKko)biEiZH~U zbfs&)pg*X7P|Spi31SrlJ<*KgxxltI^VmBCy($Z^_L@0x5^~G=Hrvlgh}i~ks8;)K z`iSbdu(=gs3VJC5|y@Ajg@}>N!jUL!K<}vOtrI$QM@pNays(9(?<3-qZ-K3AZM;@a z^LVawds}`WP68!U`}Agk5RD5WBs2c+ye#0#S0(|$>&^6l&Re-IXsb7$`|qe4?mN13 zbsP|uO4>o-wE3}(6^eHL(A2q&;v)GOVVHS-P{-N)Jr1+Xz~Bn^_#yZVDP&R znsDuQXI1_ejEdm02;ST>E1(ELwi?{xk@lPa<26g6OQSdY4AX#`?z;(NY%r zn~7#)kV|aFpY>!g1zp*&dQw*52!KaW)WtjLpy5ICM|UKIka%IhCD{Fz)^j;C%Ja6s z3?!FkA4?_xxWohH^3VZ-IWxbx^*7x@fEfUiFHj7L!#7gYckc~=#x!#)2|Q*!+jHMs z=I6LQ90uJw3ITw>S4HR5dI&uEG-I`+9+t3*^%yqFUH{YsQFM$CBrmfH;zUOZbpvv@ zd?|po9JCG>|*yo{UW-=guF)-8fEewm*9Qc9>uB-a}vCzDR8Liw6#G+pp=J2iP zg43ao9Of&jPr;f&QwJEdP9>sMvw?T|!8>J|s*&NRmS@TQHv0 zh1>t!{^-So5at=Fc>PUCtWZ-ak66!YDSQm^`8WG8?-r)ol43Gber(9c6wLLjfsUGt z8Rs1rlJZJ`h1I|x%tu01FhnT|Cw$p1h6O3wlW*DQPE$90;Qj|+*;dxplx9<%ookyv z8$}F~F+*njm|~n6zta#tpQCz(*D>@b`PGDVeQ+?p`B1M*Xd(GIKc)bi&Pf!07PLrK z8MP{Z@_M|?CcHh8KX+}?6-AjWZbi->GM69U54M?KJh^``M(EJG7qkMwfckCfO1i0N z%w2)u|Dxe$Ku08hJl|%fShD0~D>A0arX%WttJ~{8=bPP6;ytOAJGzG$MeEl?oFznX z&@h!Y9Y@v7WarswdN?$?|z`8Q{{ui#ct{Q`xPOyIJE@Z)AFy?4kCu}&)$(9 zF`@MV+k(~jsX65w2o<%1R(uY{^A#B*?1f;|QS{UMTI3mR2<-$3v4`c~q+KWUHoqKe z)fT6G01iRHcX=V%_2^x8#KWo>5m9iYeFj?;ZaW1z7_H3q@)B=Cgm1nJ_>SYD>sf6DDehSfoWKbYEea=6+hvM8CRRL22W&<}zGzB-oru<^ zMRO3oc?BW$g;LjRp@V7CCIdC&nlG_7cw?ywYr9cb%j6+U2_@5bt5EmB2(}6E_M`(!J{(`P9>dp7?HfWe zGB;l&IdnZK$gIg72n6O5xOrn_$Fl8pM$P zr*9b@g5-ZR@cxtBj5kezgFBC&9wot>P}@(C0~9&ul`YE3r%OxgxYOGwS2}iyyBtAz zD0yl$<;+etxKEAx5CBFH6^(kR_#(XC{w`J`D891-3|g-@2&N)Znl!U(X z%_>a;iJ6wjFaA!FKGTksYl_CzT*PmQ>TSvGU$Y!*+C^;mbQ^)A+~Y2VhfNDlfijH; z<|rb{`~7+w`HW^c=t$o5KsJGmL<@~#=wr_VNj&TkvkWG+?tKv=<3^h_sW?z3d`n6X zB!O;ZaiS|YDqu8UIZehb0&d^7`JXf7FXY_;mr=50Z7}E-2(=o-3gq6=?OQd__=xwO zk|o|&C#mU{Rz>3iG-zSLhtmaJrftlq_z`?UHf@ol80QHsnc|2xRl*2sg0(?Ho1sbb z^}mcOXr(^Z1f&f3h$hlVU+{Y8sdz_RHVqFxB3i7FXmBm)V;y`%vRJ7C%^4s<1d$@> z zS+kZ(_tz)EMYhcs*S}aP%ezgwXhweG$R1+Cks}8BbNSHvpDvAwEZ4hcsOpa{hhAur zR*7=BIa=Z>Ko|1MYH_cXw8yVC@M6;2-ojfYpf7EMT>{G@V6|q+0_@Gj+)knMB&->~JfqI8 z2_q1DDxUs*gzVmk)dX7akt9MTWb{$@;jxDJ8Lw)Q8qlfcXcIxkC<5qU0aS0Dnt{biLbve`!2zvCBoY_uR*OBnMdgW8Bg|;MTR>@6 zQ`2-qFt~bJ&Lzd1{nlZThMgV{Q*bXX$_ z9i=_(L`k)dGd?LXHfC26yH!Qq~NBK>`-{n}^dr^dibVBumVSrBM`A_wp}V!PLZWN%eyd&#q4fsx!GQW% zxJwnSy0`^9f5qy(OM|YJ6%;BD0xlUIoB`ON|HhDKQ1W~pL8D+nGb@lhT4XM4X=UYl z@qR)&pOoFwMm>H6Jm>{YN>C7)A?w5ten!_U_eg!Lwgg+Ejv7w+X6^>gU#Z*sD{=3>?F2o}sW`B|wM)zL><^OQ!lni#BIrZY2S>I!*O#rE;b*K22 Hb;$n$!HPvZ literal 14950 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%0DoVtVfu>CaC-tTO1 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 From a048362ff6b938ee446ac2bafafe3a41604ca963 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Thu, 7 Feb 2019 04:19:19 -0500 Subject: [PATCH 042/103] Automatic changelog generation for PR #10837 [ci skip] --- html/changelogs/AutoChangeLog-pr-10837.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10837.yml diff --git a/html/changelogs/AutoChangeLog-pr-10837.yml b/html/changelogs/AutoChangeLog-pr-10837.yml new file mode 100644 index 00000000000..414f1776715 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10837.yml @@ -0,0 +1,4 @@ +author: "Alonefromhell" +delete-after: True +changes: + - rscadd: "Pineapple Salad's fluff coat" From 5a835606411bb0c2edd0301793c77bd350d71046 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Thu, 7 Feb 2019 10:14:16 +0000 Subject: [PATCH 043/103] Automatic changelog compile, [ci skip] --- html/changelog.html | 6 ++++++ html/changelogs/.all_changelog.yml | 3 +++ html/changelogs/AutoChangeLog-pr-10837.yml | 4 ---- 3 files changed, 9 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-10837.yml diff --git a/html/changelog.html b/html/changelog.html index 404ff7bc386..c8e9cd61c22 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,12 @@ -->